Переход на новые редакции крупных ERP-систем от 1С часто преподносит неприятные сюрпризы на этапе выполнения отложенных обработчиков обновления информационной базы. Типичная ситуация: сравнение и объединение конфигураций проходят без ошибок, но при запуске предприятия в режиме отложенного обновления система выдает критические сбои. В рамках этой статьи мы детально разберем, как справиться с двумя популярными ошибками при переходе на 1С:ERP 2.4 (на примере релиза 2.4.1.261): сбоем индексации отчетов из-за отсутствующего реквизита ВидЗапасов.Поставщик и зацикливанием процедуры обновления договоров контрагентов.
Рассмотрим природу первой проблемы. При запуске отложенного обновления система инициирует процедуру ВариантыОтчетов.ОтложенноеОбновлениеОбщихДанныхКонфигурацииПолное. В этот момент происходит сканирование и построение индекса поиска для всех отчетов, зарегистрированных в системе. Ошибка возникает из-за того, что в схеме компоновки данных (СКД) одного из отчетов присутствует запрос, обращающийся к реквизиту ВидЗапасов.Поставщик.
Выясним причину изменения метаданных: в старых версиях линейки ERP (например, 2.2) справочник ВидыЗапасов содержал реквизиты Поставщик и Комитент. С переходом на новую архитектуру учета запасов в ERP 2.4 эти реквизиты были упразднены разработчиками 1С как избыточные. Все стандартные отчеты конфигурации были обновлены автоматически, но если в вашей базе присутствуют доработки, система выдаст ошибку инициализации компоновщика настроек.
Где именно может скрываться проблемный запрос:
Разберем по шагам, как локализовать и устранить эту ошибку:
Шаг 1. Глобальный поиск по конфигурации. Для того чтобы найти скрытый запрос в конфигураторе, воспользуемся глобальным поиском (сочетание клавиш Ctrl + Shift + F). Нам необходимо искать строку СебестоимостьТоваров.ВидЗапасов.Поставщик или просто ВидЗапасов.Поставщик. Важно правильно настроить область поиска: обязательно установите флажок напротив пункта «Макеты», так как схемы СКД хранятся именно там.
Шаг 2. Анализ дополнительных отчетов. Если глобальный поиск по конфигурации не дал результатов, перейдем в режим Предприятие (если база запускается) и проверим справочник «Дополнительные отчеты и обработки». Временно отключите или обновите внешние файлы отчетов, которые связаны с анализом себестоимости и продаж.
Шаг 3. Очистка устаревших пользовательских настроек. Если ошибка возникает в процедуре обновления вариантов отчетов, а в метаданных поле не найдено, это указывает на поврежденный пользовательский вариант. Нам потребуется зайти в справочник ВариантыОтчетов через функции для технического специалиста, отфильтровать элементы, созданные пользователями для отчетов по себестоимости, и удалить или сбросить их к стандартным настройкам.
В случае, если вам необходимо адаптировать старый отчет под требования ERP 2.4, информацию о поставщике в запросе СКД теперь нужно получать через соединение с другими регистрами, например, через аналитику учета партий:
// Пример адаптации запроса: вместо обращения напрямую к ВидЗапасов
// используем связь с аналитикой партий
ВЫБРАТЬ
АналитикаПартий.Поставщик КАК Поставщик,
Себестоимость.Количество КАК Количество
ИЗ
РегистрНакопления.СебестоимостьТоваров КАК Себестоимость
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПартий КАК АналитикаПартий
ПО Себестоимость.АналитикаУчетаПартий = АналитикаПартий.КлючАналитики
Вторая серьезная ошибка возникает при выполнении обработчика Справочники.ДоговорыКонтрагентов.ОбработатьДанныеДляПереходаНаНовуюВерсию. Программа аварийно завершает работу с сообщением о зацикливании процедуры обновления БСП (Библиотеки стандартных подсистем).
Проанализируем ситуацию: почему происходит зацикливание? Механизм обновления БСП обрабатывает данные порциями (выборками). Он выбирает определенное количество объектов (например, по 100 договоров), производит заполнение новых реквизитов (таких как Назначение переработчика, Тип договора, Вариант оформления закупок), пытается записать эти объекты и фиксирует успешность операции. Если при попытке записи хотя бы одного договора возникает ошибка транзакции (например, из-за жестких проверок в модуле объекта, несоответствия бизнес-логике или битых ссылок), вся порция данных откатывается.
На следующем цикле БСП снова выбирает те же самые необработанные договоры и пытается провести их запись. Чтобы не забивать процессор бесконечным циклом, в БСП встроен лимит попыток. Как только лимит превышается, выполнение аварийно прерывается с ошибкой зацикливания.
Выясним основные причины сбоя при записи договоров контрагентов:
ПередЗаписью для договоров, которые прерывают запись объекта во время обновления базы данных.Рассмотрим подробнее пошаговый алгоритм локализации и исправления проблемных договоров:
Шаг 1. Анализ Журнала регистрации. Это самый быстрый и надежный способ выявить конкретные проблемные объекты. Откройте Журнал регистрации в конфигураторе или в режиме Предприятие. Настройте фильтр по уровню важности «Ошибка». Непосредственно перед сообщением о зацикливании вы увидите серию ошибок записи конкретных элементов справочника ДоговорыКонтрагентов с указанием их уникальных идентификаторов (GUID) или наименований. Зафиксируйте эти договоры.
Шаг 2. Исправление данных через Тестирование и Исправление (ТИИ). Перед запуском обновления крайне важно проверять базу на ссылочную целостность. Запустите конфигуратор, перейдите в меню Администрирование — Тестирование и исправление. Установите флажки на проверку ссылочной целостности и выберите вариант «Очищать ссылки» или «Создавать объекты» для несуществующих элементов. Это позволит автоматически решить проблему битых связей.
Шаг 3. Ручное исправление или программная корректировка объектов. Если проблема кроется в неверно заполненных реквизитах, откройте найденные в Журнале регистрации договоры в режиме Предприятие. Проверьте правильность заполнения полей: Организация, Контрагент, Тип взаиморасчетов. Часто помогает простое перевыставление правильных значений и ручное пересохранение карточки договора. Если объектов много, можно воспользоваться внешней обработкой для группового изменения реквизитов.
Пример простого кода для принудительного заполнения обязательных реквизитов в проблемных договорах перед повторным запуском обновления:
Выборка = Справочники.ДоговорыКонтрагентов.Выбрать();
Пока Выборка.Следующий() Цикл
ДоговорОбъект = Выборка.ПолучитьОбъект();
// Проверяем заполненность ключевых полей
Если Не ЗначениеЗаполнено(ДоговорОбъект.Организация) Тогда
// Заполняем организацией по умолчанию или выводим лог
ЗаписьЖурналаРегистрации("ОбновлениеДоговоров", УровеньЖурналаРегистрации.Предупреждение, , ,
"У договора " + ДоговорОбъект.Ссылка + " не заполнена организация!");
КонецЕсли;
КонецЦикла;
Для того чтобы процедура обновления на ERP 2.4 проходила гладко, придерживайтесь следующих правил технической гигиены:
ОбновлениеВерсииИБ.epf (поставляется в составе дистрибутивов БСП), которая позволяет запускать проблемные обработчики пошагово в ручном режиме.