При обновлении типовых конфигураций 1С:Предприятие 8.3, особенно популярной «Бухгалтерии предприятия 3.0», системные администраторы и специалисты иногда сталкиваются с прерыванием процесса на этапе выполнения обработчиков обновления. Часто это происходит на отметке около 48–50%. Программа выдает критическую ошибку, ссылаясь на неуникальность кода в общем модуле ОбновлениеИнформационнойБазыМодуль. В данной статье мы подробно разберем, почему возникает эта ситуация, и рассмотрим пошаговый алгоритм её решения.
Проанализируем ситуацию: ошибка сообщает, что значение «010200» поля «Код» не уникально. Это означает, что в базе данных уже существует запись с таким кодом, а механизм обновления пытается создать новый элемент (часто предопределенный) с таким же идентификатором.
Конкретный код «010200» жестко зарезервирован в системе для отчета «Декларация об объеме производства и оборота фармацевтической субстанции этилового спирта (этанола)». Эта форма относится к алкогольным декларациям (так называемая «Десятая форма»). Проблема возникает из-за того, что в справочнике РегламентированныеОтчеты по какой-то причине (ручной ввод пользователем, некорректное завершение прошлых обновлений или сбой при синхронизации) уже имеется элемент с этим кодом. Когда платформа пытается записать новый служебный объект, срабатывает контроль уникальности, и процесс обновления аварийно завершается.
Главная сложность заключается в том, что программа не пускает нас в режим «Предприятие», чтобы мы могли исправить справочник — она сразу запускает процесс обновления и «вылетает». Нам нужно обмануть систему, заставив её поверить, что обновление уже выполнено или не требуется, чтобы получить доступ к интерфейсу.
Шаг 1: Работа в Конфигураторе
Рассмотрим последовательность действий в Конфигураторе. Перед любыми манипуляциями обязательно создайте архивную копию базы данных (выгрузка .dt или копирование файла 1Cv8.1CD).
Версия. Нам нужно временно изменить её на ту, на которую мы пытаемся обновиться (или на ту, что была до сбоя). Например, если мы обновлялись с 3.0.66.53 на 3.0.66.60, попробуйте установить текущую версию 3.0.66.60 вручную.СведенияОбОбновленииИБ или аналогичные и вручную поправить записи там, но это удобнее делать уже в «Предприятии».После того как вы изменили версию в конфигураторе, попробуйте запустить базу в обычном режиме. Если система пустила вас в интерфейс, минуя окно обновления, выполните следующие действия:
Регламентированные отчеты.010200_ОШИБКА или 0102001.Записать.После исправления кода закройте программу, вернитесь в Конфигуратор и восстановите корректный номер версии (тот, который был до ваших правок), чтобы система снова инициировала процесс обновления. Теперь, когда дубль устранен, обновление должно пройти успешно.
Если изменить версию конфигурации не удается или это не помогает запустить «Предприятие», можно воспользоваться программным методом. Мы можем запустить внешнюю обработку без полноценного входа в интерфейс, используя параметры командной строки.
Для этого создайте в текстовом редакторе или в другой базе 1С простую обработку, которая выполнит следующий код:
Выборка = Справочники.РегламентированныеОтчеты.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.Код = "010200" Тогда
Объект = Выборка.ПолучитьОбъект();
Объект.Код = "010200_СТАРЫЙ";
Попытка
Объект.Записать();
Сообщить("Код успешно изменен для: " + Выборка.Наименование);
Исключение
Сообщить("Не удалось записать объект: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Запустите 1С из командной строки с параметром /Execute, указав путь к этой обработке. Это позволит внести изменения в базу данных даже в том случае, если основной интерфейс заблокирован процедурами обновления.
Иногда даже после удаления дублей обновление продолжает «висеть» на 49%. Это связано с тем, что в системе зафиксирован статус ошибки для конкретной процедуры обновления. Посмотрим на структуру регистров сведений, отвечающих за этот процесс.
Нам необходимо проверить регистр ОчередьОбновленияИнформационнойБазы (название может варьироваться в зависимости от версии БСП). В режиме «Функции для технического специалиста» найдите регистры, связанные с обновлением. Если вы видите запись со статусом «Ошибка» напротив процедуры, связанной с заполнением справочника регламентированных отчетов, попробуйте очистить этот статус или удалить запись об ошибке. Это заставит систему заново прогнать данный этап обновления.
Почему именно 49% или 50%? В типовых конфигурациях на базе БСП (Библиотеки стандартных подсистем) процесс обновления разделен на две части: монопольное обновление и фоновое обновление.
Когда вы видите замирание прогресс-бара, это часто означает, что основная часть метаданных уже обновлена, и система перешла к выполнению ОбработчиковОбновления. Ошибка уникальности кода — это классическая ошибка данных, которая прерывает выполнение кода в общем модуле. Без ручного вмешательства в данные справочника РегламентированныеОтчеты этот барьер преодолеть невозможно, так как платформа строго соблюдает уникальность индексов в таблицах SQL или файловой базе.
Подводя итог, кратко сформулируем порядок действий для системного администратора при возникновении ошибки неуникальности кода 010200:
Регламентированные отчеты.Данный подход позволяет решить проблему максимально быстро, не прибегая к сложным манипуляциям с таблицами базы данных на уровне СУБД, что сохраняет целостность конфигурации и данных пользователя.