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++;
}
});