Как исправить ошибки отложенного обновления при переходе на ERP 2.4: убираем зацикливание договоров и ошибку схемы компоновки данных

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

Переход на новые редакции крупных ERP-систем от 1С часто преподносит неприятные сюрпризы на этапе выполнения отложенных обработчиков обновления информационной базы. Типичная ситуация: сравнение и объединение конфигураций проходят без ошибок, но при запуске предприятия в режиме отложенного обновления система выдает критические сбои. В рамках этой статьи мы детально разберем, как справиться с двумя популярными ошибками при переходе на 1С:ERP 2.4 (на примере релиза 2.4.1.261): сбоем индексации отчетов из-за отсутствующего реквизита ВидЗапасов.Поставщик и зацикливанием процедуры обновления договоров контрагентов.

Часть 1. Ошибка компоновщика настроек: «Поле не найдено "СебестоимостьТоваров.ВидЗапасов.Поставщик"»

Рассмотрим природу первой проблемы. При запуске отложенного обновления система инициирует процедуру ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное. В этот момент происходит сканирование и построение индекса поиска для всех отчетов, зарегистрированных в системе. Ошибка возникает из-за того, что в схеме компоновки данных (СКД) одного из отчетов присутствует запрос, обращающийся к реквизиту ВидЗапасов.Поставщик.

Выясним причину изменения метаданных: в старых версиях линейки ERP (например, 2.2) справочник ВидыЗапасов содержал реквизиты Поставщик и Комитент. С переходом на новую архитектуру учета запасов в ERP 2.4 эти реквизиты были упразднены разработчиками 1С как избыточные. Все стандартные отчеты конфигурации были обновлены автоматически, но если в вашей базе присутствуют доработки, система выдаст ошибку инициализации компоновщика настроек.

Где именно может скрываться проблемный запрос:

  1. В макетах нетиповых отчетов конфигурации. Если ваша база находится на замке не полностью, разработчики могли добавить собственные отчёты или переопределить стандартные макеты СКД.
  2. Во внешних отчетах и обработках. Отчеты, подключенные через механизм дополнительных отчетов и обработок, также анализируются системой при обновлении.
  3. В сохраненных пользовательских вариантах отчетов. Пользователи могли сохранить персональные настройки отчетов еще в старой версии конфигурации. Эти настройки хранятся в системе в виде XML-структур и при обновлении вызывают сбой компиляции СКД, поскольку обращаются к несуществующему полю метаданных.

Разберем по шагам, как локализовать и устранить эту ошибку:

Шаг 1. Глобальный поиск по конфигурации. Для того чтобы найти скрытый запрос в конфигураторе, воспользуемся глобальным поиском (сочетание клавиш Ctrl + Shift + F). Нам необходимо искать строку СебестоимостьТоваров.ВидЗапасов.Поставщик или просто ВидЗапасов.Поставщик. Важно правильно настроить область поиска: обязательно установите флажок напротив пункта «Макеты», так как схемы СКД хранятся именно там.

Шаг 2. Анализ дополнительных отчетов. Если глобальный поиск по конфигурации не дал результатов, перейдем в режим Предприятие (если база запускается) и проверим справочник «Дополнительные отчеты и обработки». Временно отключите или обновите внешние файлы отчетов, которые связаны с анализом себестоимости и продаж.

Шаг 3. Очистка устаревших пользовательских настроек. Если ошибка возникает в процедуре обновления вариантов отчетов, а в метаданных поле не найдено, это указывает на поврежденный пользовательский вариант. Нам потребуется зайти в справочник ВариантыОтчетов через функции для технического специалиста, отфильтровать элементы, созданные пользователями для отчетов по себестоимости, и удалить или сбросить их к стандартным настройкам.

В случае, если вам необходимо адаптировать старый отчет под требования ERP 2.4, информацию о поставщике в запросе СКД теперь нужно получать через соединение с другими регистрами, например, через аналитику учета партий:


// Пример адаптации запроса: вместо обращения напрямую к ВидЗапасов
// используем связь с аналитикой партий
ВЫБРАТЬ
    АналитикаПартий.Поставщик КАК Поставщик,
    Себестоимость.Количество КАК Количество
ИЗ
    РегистрНакопления.СебестоимостьТоваров КАК Себестоимость
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК АналитикаПартий
        ПО Себестоимость.АналитикаУчетаПартий = АналитикаПартий.КлючАналитики

Часть 2. Ошибка «Произошло зацикливание процедуры обработки данных» в справочнике Договоры Контрагентов

Вторая серьезная ошибка возникает при выполнении обработчика Справочники.ДоговорыКонтрагентов.ОбработатьДанныеДляПереходаНаНовуюВерсию. Программа аварийно завершает работу с сообщением о зацикливании процедуры обновления БСП (Библиотеки стандартных подсистем).

Проанализируем ситуацию: почему происходит зацикливание? Механизм обновления БСП обрабатывает данные порциями (выборками). Он выбирает определенное количество объектов (например, по 100 договоров), производит заполнение новых реквизитов (таких как Назначение переработчика, Тип договора, Вариант оформления закупок), пытается записать эти объекты и фиксирует успешность операции. Если при попытке записи хотя бы одного договора возникает ошибка транзакции (например, из-за жестких проверок в модуле объекта, несоответствия бизнес-логике или битых ссылок), вся порция данных откатывается.

На следующем цикле БСП снова выбирает те же самые необработанные договоры и пытается провести их запись. Чтобы не забивать процессор бесконечным циклом, в БСП встроен лимит попыток. Как только лимит превышается, выполнение аварийно прерывается с ошибкой зацикливания.

Выясним основные причины сбоя при записи договоров контрагентов:

Рассмотрим подробнее пошаговый алгоритм локализации и исправления проблемных договоров:

Шаг 1. Анализ Журнала регистрации. Это самый быстрый и надежный способ выявить конкретные проблемные объекты. Откройте Журнал регистрации в конфигураторе или в режиме Предприятие. Настройте фильтр по уровню важности «Ошибка». Непосредственно перед сообщением о зацикливании вы увидите серию ошибок записи конкретных элементов справочника ДоговорыКонтрагентов с указанием их уникальных идентификаторов (GUID) или наименований. Зафиксируйте эти договоры.

Шаг 2. Исправление данных через Тестирование и Исправление (ТИИ). Перед запуском обновления крайне важно проверять базу на ссылочную целостность. Запустите конфигуратор, перейдите в меню Администрирование — Тестирование и исправление. Установите флажки на проверку ссылочной целостности и выберите вариант «Очищать ссылки» или «Создавать объекты» для несуществующих элементов. Это позволит автоматически решить проблему битых связей.

Шаг 3. Ручное исправление или программная корректировка объектов. Если проблема кроется в неверно заполненных реквизитах, откройте найденные в Журнале регистрации договоры в режиме Предприятие. Проверьте правильность заполнения полей: Организация, Контрагент, Тип взаиморасчетов. Часто помогает простое перевыставление правильных значений и ручное пересохранение карточки договора. Если объектов много, можно воспользоваться внешней обработкой для группового изменения реквизитов.

Пример простого кода для принудительного заполнения обязательных реквизитов в проблемных договорах перед повторным запуском обновления:


Выборка = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока Выборка.Следующий() Цикл
    ДоговорОбъект = Выборка.ПолучитьОбъект();
    // Проверяем заполненность ключевых полей
    Если Не ЗначениеЗаполнено(ДоговорОбъект.Организация) Тогда
        // Заполняем организацией по умолчанию или выводим лог
        ЗаписьЖурналаРегистрации("ОбновлениеДоговоров", УровеньЖурналаРегистрации.Предупреждение, , , 
            "У договора " + ДоговорОбъект.Ссылка + " не заполнена организация!");
    КонецЕсли;
КонецЦикла;

Резюме и рекомендации по предотвращению сбоев при обновлении

Для того чтобы процедура обновления на ERP 2.4 проходила гладко, придерживайтесь следующих правил технической гигиены:

  1. Всегда делайте архивную копию базы данных непосредственно перед началом обновления и разворачивайте ее на тестовом сервере для проведения «контрольного» обновления.
  2. Перед обновлением конфигурации обязательно выполняйте процедуру Тестирования и исправления базы данных для устранения логических ошибок и битых ссылок.
  3. В случае возникновения ошибок отложенного обновления не пытайтесь игнорировать их. Используйте Журнал регистрации для детального анализа транзакций записи объектов.
  4. Для отладки сложных зависаний обработчиков БСП используйте сервисную утилиту ОбновлениеВерсииИБ.epf (поставляется в составе дистрибутивов БСП), которая позволяет запускать проблемные обработчики пошагово в ручном режиме.
← На главную