diff --git a/index.html b/index.html index df3c4bd..52a43a5 100644 --- a/index.html +++ b/index.html @@ -183,13 +183,16 @@ function initHierarchy(data) { const obIx = dataColumns.indexOf('oblast'); const raIx = dataColumns.indexOf('rayon'); const okIx = dataColumns.indexOf('okrug'); + const obH = obIx !== -1 ? allData.columns[obIx] : null; + const raH = raIx !== -1 ? allData.columns[raIx] : null; + const okH = okIx !== -1 ? allData.columns[okIx] : null; hierarchy = { oblasts: {}, rayons: {}, okrugs: {} }; data.forEach(row => { - const ob = obIx !== -1 && row[obIx] ? String(row[obIx]).trim() : ''; - const ra = raIx !== -1 && row[raIx] ? String(row[raIx]).trim() : ''; - const ok = okIx !== -1 && row[okIx] ? String(row[okIx]).trim() : ''; + const ob = obH ? String(row[obH] || '').trim() : ''; + const ra = raH ? String(row[raH] || '').trim() : ''; + const ok = okH ? String(row[okH] || '').trim() : ''; if (ob && !hierarchy.oblasts[ob]) hierarchy.oblasts[ob] = new Set(); if (ob && ra) { @@ -242,13 +245,16 @@ function applyFilter() { const obIx = dataColumns.indexOf('oblast'); const raIx = dataColumns.indexOf('rayon'); const okIx = dataColumns.indexOf('okrug'); + const obH = obIx !== -1 ? allData.columns[obIx] : null; + const raH = raIx !== -1 ? allData.columns[raIx] : null; + const okH = okIx !== -1 ? allData.columns[okIx] : null; let data = allData; if (ob || ra || ok) { data = allData.filter(row => { - const rOb = obIx !== -1 ? String(row[obIx] || '').trim() : ''; - const rRa = raIx !== -1 ? String(row[raIx] || '').trim() : ''; - const rOk = okIx !== -1 ? String(row[okIx] || '').trim() : ''; + const rOb = obH ? String(row[obH] || '').trim() : ''; + const rRa = raH ? String(row[raH] || '').trim() : ''; + const rOk = okH ? String(row[okH] || '').trim() : ''; if (ob && rOb !== ob) return false; if (ra && rRa !== ra) return false; if (ok && rOk !== ok) return false; @@ -287,10 +293,12 @@ function renderTable() { // Group by district const raIx = dataColumns.indexOf('rayon'); const okIx = dataColumns.indexOf('okrug'); + const raH = raIx !== -1 ? allData.columns[raIx] : null; + const okH = okIx !== -1 ? allData.columns[okIx] : null; const groups = {}; filteredData.forEach(row => { - const ra = raIx !== -1 ? String(row[raIx] || '').trim() : ''; - const ok = okIx !== -1 ? String(row[okIx] || '').trim() : ''; + const ra = raH ? String(row[raH] || '').trim() : ''; + const ok = okH ? String(row[okH] || '').trim() : ''; const key = ra + ' → ' + ok; if (!groups[key]) groups[key] = []; groups[key].push(row); @@ -345,11 +353,13 @@ function renderTable() { function toggleGroup(groupName) { const raIx = dataColumns.indexOf('rayon'); const okIx = dataColumns.indexOf('okrug'); + const raH = raIx !== -1 ? allData.columns[raIx] : null; + const okH = okIx !== -1 ? allData.columns[okIx] : null; const parts = groupName.split(' → '); const ra = parts[0], ok = parts[1]; const rows = filteredData.filter(r => { - const rRa = raIx !== -1 ? String(r[raIx] || '').trim() : ''; - const rOk = okIx !== -1 ? String(r[okIx] || '').trim() : ''; + const rRa = raH ? String(r[raH] || '').trim() : ''; + const rOk = okH ? String(r[okH] || '').trim() : ''; return rRa === ra && rOk === ok; }); const allMarked = rows.every(r => markedIds.has(r._id)); @@ -403,12 +413,15 @@ function fillOblast() { if (katoIx === -1) { alert('Не найдена колонка КАТО'); return; } if (obIx === -1) { alert('Не найдена колонка области. Добавьте колонку "Область" в файл.'); return; } + const katoHeader = allData.columns[katoIx]; + const obHeader = allData.columns[obIx]; + let filled = 0; allData.forEach(row => { - const kato = String(row[dataColumns[katoIx]] || '').trim(); + const kato = String(row[katoHeader] || '').trim(); const code = kato.length >= 2 ? kato.substring(0, 2) : ''; - if (code && KATO_REGIONS[code] && !String(row[dataColumns[obIx]] || '').trim()) { - row[dataColumns[obIx]] = KATO_REGIONS[code]; + if (code && KATO_REGIONS[code] && !String(row[obHeader] || '').trim()) { + row[obHeader] = KATO_REGIONS[code]; filled++; } });