Понял проблему. Нужно исправить логику определения первой активной вкладки и добавить сохранение состояния для вкладок документации. Вот исправления:

```javascript
// Обновляем глобальные переменные
let currentActiveTabs = {
drilling: 'header', // активная вкладка в разделе проходки
documentation: 'primary' // активная вкладка в разделе документации
};

// Модифицируем функцию displayDrillingData для правильного определения первой вкладки
function displayDrillingData() {
const hasHeaders = xmlData.drillingHeaders && xmlData.drillingHeaders.length > 0;
const hasDrillingData = hasHeaders && xmlData.drillingDataByHeader &&
Object.keys(xmlData.drillingDataByHeader).length > 0;

if (!hasDrillingData) {
return '<div class="no-data"><p>Нет данных проходки</p></div>';
}

let html = '<div class="section">';
html += '<h2>Данные проходки</h2>';

if (!currentDrillingHeaderId && xmlData.drillingHeaders.length > 0) {
currentDrillingHeaderId = xmlData.drillingHeaders[0].id;
}

// ... существующий код заголовков ...

if (currentDrillingHeaderId && xmlData.drillingDataByHeader[currentDrillingHeaderId]) {
const selectedHeader = xmlData.drillingHeaders.find(h => h.id === currentDrillingHeaderId);
const headerData = xmlData.drillingDataByHeader[currentDrillingHeaderId];

html += `
<div class="info-group" style="margin-top: 20px;">
<div class="info-group-title">Данные для параметра: ${selectedHeader.purpose}</div>
</div>
`;

const hasDiameter = headerData.diameter && headerData.diameter.length > 0;
const hasIntervals = headerData.intervals && headerData.intervals.length > 0;
const hasCasing = headerData.casing && headerData.casing.length > 0;
const hasMethod = headerData.method && headerData.method.length > 0;
const hasDrillingType = headerData.drillingType && headerData.drillingType.length > 0;
const hasSludge = headerData.sludge && headerData.sludge.length > 0;
const hasConditions = headerData.conditions && headerData.conditions.length > 0;
const hasStart = headerData.start && headerData.start.length > 0;
const hasEnd = headerData.end && headerData.end.length > 0;

// ВОССТАНАВЛИВАЕМ активную вкладку
let activeSubTab = restoreActiveTab('drilling');

// Проверяем, что восстановленная вкладка существует и доступна
const availableTabs = ['header']; // Заголовок всегда доступен

if (hasDiameter) availableTabs.push('diameter');
if (hasIntervals) availableTabs.push('intervals');
if (hasCasing) availableTabs.push('casing');
if (hasMethod) availableTabs.push('method');
if (hasDrillingType) availableTabs.push('drillingType');
if (hasSludge) availableTabs.push('sludge');
if (hasConditions) availableTabs.push('conditions');
if (hasStart) availableTabs.push('start');
if (hasEnd) availableTabs.push('end');

// Если восстановленная вкладка недоступна, используем первую доступную (заголовок)
if (!availableTabs.includes(activeSubTab)) {
activeSubTab = 'header';
}

if (hasDiameter || hasIntervals || hasCasing || hasMethod || hasDrillingType ||
hasSludge || hasConditions || hasStart || hasEnd) {

html += `<div class="inner-tabs-container">`;
html += `<div class="inner-tabs">`;

// Отображаем все вкладки с правильным активным состоянием
html += `<div class="inner-tab ${activeSubTab === 'header' ? 'active' : ''}" data-inner-tab="header">Заголовок</div>`;

if (hasDiameter) {
html += `<div class="inner-tab ${activeSubTab === 'diameter' ? 'active' : ''}" data-inner-tab="diameter">Диаметр бурения</div>`;
}
if (hasIntervals) {
html += `<div class="inner-tab ${activeSubTab === 'intervals' ? 'active' : ''}" data-inner-tab="intervals">Интервалы бурения</div>`;
}
if (hasCasing) {
html += `<div class="inner-tab ${activeSubTab === 'casing' ? 'active' : ''}" data-inner-tab="casing">Обсадка</div>`;
}
if (hasMethod) {
html += `<div class="inner-tab ${activeSubTab === 'method' ? 'active' : ''}" data-inner-tab="method">Способ бурения</div>`;
}
if (hasDrillingType) {
html += `<div class="inner-tab ${activeSubTab === 'drillingType' ? 'active' : ''}" data-inner-tab="drillingType">Вид бурения</div>`;
}
if (hasSludge) {
html += `<div class="inner-tab ${activeSubTab === 'sludge' ? 'active' : ''}" data-inner-tab="sludge">Способ выноски шлама</div>`;
}
if (hasConditions) {
html += `<div class="inner-tab ${activeSubTab === 'conditions' ? 'active' : ''}" data-inner-tab="conditions">Условия бурения</div>`;
}
if (hasStart) {
html += `<div class="inner-tab ${activeSubTab === 'start' ? 'active' : ''}" data-inner-tab="start">Забурка</div>`;
}
if (hasEnd) {
html += `<div class="inner-tab ${activeSubTab === 'end' ? 'active' : ''}" data-inner-tab="end">Разбурка</div>`;
}

html += `</div>`;
html += `<div class="inner-tabs-content">`;

// Отображаем контент с правильным активным состоянием
html += `<div id="headerInnerTab" class="inner-tab-content ${activeSubTab === 'header' ? 'active' : ''}">`;
html += displayDrillingHeaderForHeader(selectedHeader);
html += `</div>`;

if (hasDiameter) {
html += `<div id="diameterInnerTab" class="inner-tab-content ${activeSubTab === 'diameter' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.diameter, drillingTableConfigs.diameter);
html += `</div>`;
}
if (hasIntervals) {
html += `<div id="intervalsInnerTab" class="inner-tab-content ${activeSubTab === 'intervals' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.intervals, drillingTableConfigs.intervals);
html += `</div>`;
}
if (hasCasing) {
html += `<div id="casingInnerTab" class="inner-tab-content ${activeSubTab === 'casing' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.casing, drillingTableConfigs.casing);
html += `</div>`;
}
if (hasMethod) {
html += `<div id="methodInnerTab" class="inner-tab-content ${activeSubTab === 'method' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.method, drillingTableConfigs.method);
html += `</div>`;
}
if (hasDrillingType) {
html += `<div id="drillingTypeInnerTab" class="inner-tab-content ${activeSubTab === 'drillingType' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.drillingType, drillingTableConfigs.drillingType);
html += `</div>`;
}
if (hasSludge) {
html += `<div id="sludgeInnerTab" class="inner-tab-content ${activeSubTab === 'sludge' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.sludge, drillingTableConfigs.sludge);
html += `</div>`;
}
if (hasConditions) {
html += `<div id="conditionsInnerTab" class="inner-tab-content ${activeSubTab === 'conditions' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.conditions, drillingTableConfigs.conditions);
html += `</div>`;
}
if (hasStart) {
html += `<div id="startInnerTab" class="inner-tab-content ${activeSubTab === 'start' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.start, drillingTableConfigs.start);
html += `</div>`;
}
if (hasEnd) {
html += `<div id="endInnerTab" class="inner-tab-content ${activeSubTab === 'end' ? 'active' : ''}">`;
html += displayDrillingTableForHeader(headerData.end, drillingTableConfigs.end);
html += `</div>`;
}

html += `</div>`;
html += `</div>`;
} else {
html += displayDrillingHeaderForHeader(selectedHeader);
}
} else {
html += '<div class="no-data"><p>Нет данных для выбранного параметра проходки</p></div>';
}

html += '</div>';
return html;
}
```

Теперь добавляем сохранение состояния для вкладок документации. Сначала модифицируем функцию `switchMainTab`:

```javascript
// Добавляем сохранение состояния для основных вкладок
function switchMainTab(tabName) {
// Сохраняем текущую активную основную вкладку
const currentActiveMainTab = document.querySelector('.tab.active');
if (currentActiveMainTab) {
const currentTabName = currentActiveMainTab.getAttribute('data-tab');
// Можно сохранить состояние если нужно
}

// Переключаем вкладки
const tabs = document.querySelectorAll('.tab');
const tabContents = document.querySelectorAll('.tab-content');

tabs.forEach(tab => tab.classList.remove('active'));
tabContents.forEach(content => content.classList.remove('active'));

const activeTab = document.querySelector(`.tab[data-tab="${tabName}"]`);
const activeContent = document.getElementById(`${tabName}Tab`);

if (activeTab) activeTab.classList.add('active');
if (activeContent) activeContent.classList.add('active');

// Если переключаемся на вкладку документации, восстанавливаем её состояние
if (tabName === 'documentation') {
setTimeout(() => {
restoreDocumentationTab();
}, 50);
}
}
```

Добавляем функции для работы с вкладками документации:

```javascript
// Функции для вкладок документации
function switchDocumentationTab(tabId) {
saveActiveTab('documentation', tabId);

const docTabs = document.querySelectorAll('.doc-tab');
const docTabContents = document.querySelectorAll('.doc-tab-content');

docTabs.forEach(tab => tab.classList.remove('active'));
docTabContents.forEach(content => content.classList.remove('active'));

const activeTab = document.querySelector(`.doc-tab[data-doc-tab="${tabId}"]`);
const activeContent = document.getElementById(`${tabId}DocTab`);

if (activeTab) activeTab.classList.add('active');
if (activeContent) activeContent.classList.add('active');
}

function restoreDocumentationTab() {
const activeTabId = restoreActiveTab('documentation');
switchDocumentationTab(activeTabId);
}
```

Теперь модифицируем отображение вкладки документации в функции `displayWellData`:

```javascript
// В функции displayWellData обновляем отображение вкладки документации
function displayWellData(fileType, fileNumber, fileName, wellId) {
// ... существующий код ...

// Обновляем HTML для вкладки документации
const documentationTab = document.getElementById('documentationTab');
if (documentationTab) {
const activeDocTab = restoreActiveTab('documentation');

documentationTab.innerHTML = `
<div class="inner-tabs-container">
<div class="inner-tabs">
<div class="inner-tab doc-tab ${activeDocTab === 'primary' ? 'active' : ''}" data-doc-tab="primary">Первичное документирование</div>
<div class="inner-tab doc-tab ${activeDocTab === 'final' ? 'active' : ''}" data-doc-tab="final">Итоговое документирование</div>
<div class="inner-tab doc-tab ${activeDocTab === 'gis' ? 'active' : ''}" data-doc-tab="gis">ГИС документирование</div>
</div>
<div class="inner-tabs-content">
<div id="primaryDocTab" class="inner-tab-content doc-tab-content ${activeDocTab === 'primary' ? 'active' : ''}">
${displayPrimaryDocumentation()}
</div>
<div id="finalDocTab" class="inner-tab-content doc-tab-content ${activeDocTab === 'final' ? 'active' : ''}">
${displayFinalDocumentation()}
</div>
<div id="gisDocTab" class="inner-tab-content doc-tab-content ${activeDocTab === 'gis' ? 'active' : ''}">
${displayGisDocumentation()}
</div>
</div>
</div>
`;
}

// ... остальной код ...
}
```

И наконец, обновляем универсальный обработчик событий:

```javascript
// В универсальном обработчике событий добавляем обработку вкладок документации
document.addEventListener('click', function(e) {
// ... существующий код ...

// Обработка внутренних вкладок проходки
if (e.target.classList.contains('inner-tab') && !e.target.classList.contains('doc-tab')) {
const tabId = e.target.getAttribute('data-inner-tab');
switchInnerTab(tabId);
return;
}

// Обработка вкладок документации
if (e.target.classList.contains('doc-tab')) {
const tabId = e.target.getAttribute('data-doc-tab');
switchDocumentationTab(tabId);
return;
}

// ... остальной код ...
});
```

**Что это исправляет:**

1. **Проходка**: Теперь при первом открытии всегда активна вкладка "Заголовок", а не "Диаметр бурения"
2. **Документация**: Добавлено сохранение состояния для вкладок "Первичное", "Итоговое", "ГИС документирование"
3. **Общий подход**: Единая система сохранения состояния для всех типов вкладок

Теперь при переключении между основными вкладками и возврате к ним будет сохраняться состояние всех внутренних вкладок.