При переходе на новые релизы 1С:Бухгалтерия предприятия (БП) 3.0, в частности на версию 3.0.150.29, системные администраторы и программисты часто сталкиваются с критической остановкой процесса обновления. Ошибка возникает на этапе выполнения дополнительных процедур обработки данных, когда система пытается модифицировать план счетов для поддержки механизмов Единого налогового счета (ЕНС). В данной статье мы подробно разберем, почему возникает ошибка XX000: ERROR: index key does not match expected index column, и рассмотрим пошаговые алгоритмы её устранения.
Рассмотрим природу возникновения данной проблемы. Ошибка с кодом XX000 в СУБД PostgreSQL является внутренней ошибкой сервера (Internal Error). Сообщение index key does not match expected index column сигнализирует о том, что структура индекса в таблице базы данных не соответствует ожидаемой структуре, которую запрашивает менеджер СУБД при выполнении SQL-запроса.
В релизе 3.0.150.29 происходит масштабное изменение: для счета 68.10 (Прочие налоги и сборы) добавляется новое субконто Виды налогов. Это требует от платформы 1С выполнения реструктуризации таблиц итогов и движений бухгалтерского учета. Если база данных имеет длительную историю или работает на устаревшей минорной версии PostgreSQL, индексы могут быть повреждены или некорректно интерпретированы движком базы данных в момент массовой вставки данных фоновым заданием ДлительныеОперации.ВыполнитьСКонтекстомКлиента.
Как показывает практика и подтверждают участники обсуждения, наиболее действенным методом является стандартный механизм платформы 1С по обслуживанию информационной базы. Выполним следующие действия в Конфигураторе:
После завершения процесса попробуем запустить обновление снова через режим 1С:Предприятие. В большинстве случаев этот метод полностью устраняет проблему несоответствия ключей индексов.
Проанализируем технические подробности: часто ошибка проявляется на старых сборках PostgreSQL, например, 10.5. Современные релизы 1С требуют более стабильных и исправленных версий СУБД. Если ТИИ не помогло, необходимо обновить серверную часть PostgreSQL.
Рекомендуется использовать следующие (или более новые) сборки от Postgres Pro или 1C:
Обновление минорной версии (например, с 10.5 до 10.23) обычно не требует выгрузки данных через dt, достаточно остановить службу СУБД, обновить бинарные файлы и запустить службу снова. Однако всегда сверяйтесь с документацией конкретной сборки.
Если база данных имеет огромный объем (сотни гигабайт), стандартная реструктуризация может длиться слишком долго или прерываться по таймауту. Мы можем задействовать оптимизированный механизм работы с СУБД. Для этого выполним правку конфигурационного файла платформы:
conf.cfg. Обычно он располагается в каталоге установки платформы: C:\Program Files\1cv8\conf\.
DbmsRequests=SecondGeneration
Параметр SecondGeneration включает использование временных таблиц и более эффективных SQL-запросов при изменении структуры базы данных, что помогает обойти ошибки, связанные с переполнением логов транзакций и блокировками индексов.
Иногда платформа 1С не может корректно дать команду СУБД на исправление системных каталогов. В этом случае выполним обслуживание непосредственно через pgAdmin или консоль psql. Проанализируем состояние базы следующими командами:
VACUUM FULL ANALYZE;
Это физически перестроит файлы таблиц и обновит статистику планировщика запросов.
REINDEX DATABASE "имя_вашей_базы";
Это гарантированно устранит ошибку index key does not match expected index column на уровне СУБД.
Выясним, не были ли внесены изменения в план счетов вручную до обновления. Платформа 1С по умолчанию поддерживает до 3-х субконто на одном счете. При обновлении на версию 3.0.150.29 система пытается добавить новое субконто на счет 68.10. Если в вашей конфигурации на этом счете уже добавлены пользовательские субконто и их общее количество достигло трех, попытка добавить четвертое программно может вызвать непредсказуемое поведение реструктуризации.
Посмотрим на свойства объекта Хозрасчетный в конфигураторе:
68.10 уже заняты все слоты субконто, стоит временно увеличить этот лимит или удалить лишние пользовательские субконто перед запуском обновления.Ошибка XX000 является следствием технического несовершенства старых версий PostgreSQL или накопленных ошибок в индексах при интенсивной работе базы. Для успешного обновления 1С:Бухгалтерия 3.0.150.29 наиболее эффективным сочетанием действий является: обновление PostgreSQL до актуального патча и запуск Тестирования и исправления с пунктами реиндексации и реструктуризации.