Как устранить дублирование строк в журнале операций и ошибку уникального индекса SQL при обновлении 1С:Бухгалтерия 3.0

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переходе на новые релизы конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с ветки 3.0.167 и выше) многие специалисты сталкиваются с критической ошибкой на этапе реструктуризации базы данных. Проблема проявляется в невозможности завершить обновление из-за нарушения уникальности индексов в таблицах журналов документов. Рассмотрим детально, почему это происходит и как привести базу в рабочее состояние.

Анализируем симптомы и текст ошибки

Типичная ситуация: при обновлении в клиент-серверном варианте (SQL) процесс прерывается сообщением следующего содержания:

"Microsoft SQL Server Native Client 11.0: Выполнение инструкции CREATE UNIQUE INDEX прервано, поскольку обнаружен повторяющийся ключ для объекта с именем 'dbo._DocumentJournal6982' и индекса с именем '_DocumentJournal6982_1'"

Проанализируем это сообщение. Имя таблицы _DocumentJournal6982 (номер может отличаться) соответствует системной таблице Журнала операций. Ошибка означает, что в базе данных появились записи с абсолютно одинаковыми ключевыми полями (обычно это комбинация даты, ссылки на документ и разделителей), что недопустимо для уникального индекса. Чаще всего "виновниками" становятся документы типа Регламентная операция.

Шаг 1. Диагностика проблемы с помощью запроса

Прежде чем приступать к лечению, нам необходимо убедиться в наличии дублей и определить их масштаб. Для этого воспользуемся механизмом консоли запросов. Рассмотрим следующий алгоритм поиска дублирующихся записей непосредственно в журнале операций:


ВЫБРАТЬ
    Подзапрос.Дата КАК Дата,
    Подзапрос.Ссылка КАК Ссылка,
    СУММА(Подзапрос.КоличествоЗаписей) КАК КоличествоЗаписей
ИЗ
    (ВЫБРАТЬ
        ЖурналОпераций.Дата КАК Дата,
        ЖурналОпераций.Ссылка КАК Ссылка,
        1 КАК КоличествоЗаписей
    ИЗ
        ЖурналДокументов.ЖурналОпераций КАК ЖурналОпераций) КАК Подзапрос

СГРУППИРОВАТЬ ПО
    Подзапрос.Дата,
    Подзапрос.Ссылка

ИМЕЮЩИЕ
    СУММА(Подзапрос.КоличествоЗаписей) > 1

Если данный запрос возвращает список документов, значит, в логической структуре журнала действительно присутствуют дублирующие ссылки. Это подтверждает, что проблема не в физической поломке индекса SQL, а в некорректных данных внутри таблиц 1С.

Шаг 2. Выяснение причин появления дублей

Разберем основные причины, которые приводят к такому состоянию базы при обновлении на релизы 3.0.167 – 3.0.173:

  1. Изменения в Плане счетов (НДФЛ): В указанных релизах произошло масштабное реформирование счетов учета НДФЛ (счета 68.01). Это повлекло за собой глубокую реструктуризацию связанных регистров и журналов. Если в базе были накоплены микро-ошибки прошлых периодов, они "всплывают" именно сейчас.
  2. Баг платформы и расширений (Bug 000150413): Это наиболее вероятная причина. В платформе 1С (особенно версий 8.3.24 и 8.3.25) обнаружена ошибка: при наличии расширений механизм реструктуризации может ошибочно дублировать записи. Чтобы исключить влияние стороннего кода, рекомендуется выполнить анализ конфигураций и расширений на наличие ошибок.
  3. Механизм двойной записи: В типовых конфигурациях РегистрБухгалтерии поддерживает корреспонденцию. При обновлении алгоритмы пересчета итогов или перегенерации записей журнала могут сбоить, если документ Регламентная операция формирует специфические проводки.

Шаг 3. Основное решение: Работа с расширениями и глубокая очистка

Как показывает практика, обычное отключение расширений помогает редко. Необходимо выполнить процедуру "жесткой" очистки метаданных. Рассмотрим пошагово, как это сделать:

  1. Создаем резервную копию: Это обязательный этап перед любыми манипуляциями со структурой.
  2. Удаление всех расширений: Зайдем в раздел Администрирование — Расширения. Нам нужно не просто снять галочку "Активно", а полностью удалить все расширения из списка, используя штатные функции или специальное удаление расширений списком.
  3. Запуск Тестирования и Исправления (ТиИ): Откроем Конфигуратор и выберем пункт Администрирование — Тестирование и исправление.
  4. Настройка параметров ТиИ: Установим следующие флаги:
    • Реиндексация таблиц информационной базы;
    • Проверка логической целостности;
    • Очистка ссылок на несуществующие объекты;
    • Сжатие таблиц информационной базы.
    Для оптимизации процесса также может пригодиться предварительное удаление помеченных на удаление объектов с фильтрацией. Важно: В нижней части окна, в правилах обработки ошибок, выберем "Очищать объекты" и "Удалять объект".
  5. Очистка данных расширений: В современных версиях платформы при ТиИ также происходит удаление таблиц, созданных ранее удаленными расширениями. Это критически важно для исправления структуры dbo._DocumentJournal.

Шаг 4. Реструктуризация через файловый режим

Если ошибка CREATE UNIQUE INDEX в SQL не позволяет даже запустить ТиИ, проанализируем ситуацию в файловом варианте:

Выгрузим базу в файл .dt и развернем её локально. Файловая версия базы данных более "терпима" к дублям индексов на этапе загрузки. После того как база развернута в файле, выполним Тестирование и исправление с включенной Реструктуризацией. После успешного завершения ТиИ и удаления дублей (проверяем запросом из Шага 1), загрузим базу обратно на SQL-сервер.

Шаг 5. Манипуляция составом журнала (дополнительный метод)

Если предыдущие шаги не помогли, воспользуемся методом временного исключения объектов из состава журнала:

  1. В Конфигураторе найдем ЖурналДокументов.ЖурналОпераций.
  2. Перейдем на вкладку "Состав".
  3. Найдем документ Регламентная операция и снимем галочку его участия в журнале.
  4. Выполним обновление конфигурации базы данных (F7). На этом этапе 1С физически удалит все записи о регламентных операциях из таблицы журнала.
  5. Вернем галочку участия документа Регламентная операция обратно в состав журнала.
  6. Снова выполним обновление (F7). Платформа заново соберет записи в журнал на основе данных самих документов без дублей.

Резюме: Основной причиной проблемы является конфликт механизма расширений и масштабной реструктуризации журналов в новых релизах БП 3.0. Совместное использование удаления расширений и глубокого ТиИ позволяет полностью устранить ошибку и успешно завершить обновление программы.

← На главную