При обновлении конфигурации 1С:Управление торговлей до версии 11.5.8 и выше многие пользователи и разработчики столкнулись с тем, что старые внешние обработки для работы с ЕГАИС перестали функционировать. Самая распространенная ошибка, которая возникает при попытке создания документов (например, «Передача в регистр №2»): Поле объекта не обнаружено (СтатусОбработки). В этой статье мы подробно разберем, почему это происходит и как адаптировать программный код под новые требования системы.
Для начала выясним причину возникновения проблемы. Начиная с релизов 11.5.7, компания «1С» провела глобальное изменение архитектуры подсистем взаимодействия с государственными информационными системами (ЕГАИС, Маркировка, ВетИС). Основная цель этих изменений — унификация механизмов обработки документов.
В ходе этого рефакторинга многие реквизиты, которые ранее находились непосредственно в документах, были вынесены в отдельные регистры сведений. В частности, это коснулось реквизита СтатусОбработки. Теперь статус документа не хранится в самом объекте (документе), а управляется через специализированную подсистему статусов информирования.
Если мы заглянем в конфигуратор УТ 11.5, то увидим, что у многих объектов ЕГАИС старые реквизиты теперь имеют префикс «Удалить» (например, УдалитьСтатусОбработки). Это означает, что прямое обращение к ним в коде приведет к ошибке, так как платформа больше не «видит» поле с прежним именем.
Рассмотрим конкретный пример кода, который вызывает ошибку:
НовыйДок = Документы.ПередачаВРегистр2ЕГАИС.СоздатьДокумент();
// ... заполнение реквизитов ...
НовыйДок.СтатусОбработки = Перечисления.СтатусыОбработкиПередачиВРегистр2ЕГАИС.Новый;
При выполнении этой строки система выдает ошибку, так как в документе ПередачаВРегистр2ЕГАИС больше нет поля СтатусОбработки. Как поступить в этой ситуации?
Новый теперь часто используется Черновик.Проанализируем ситуацию: если мы просто закомментируем строку, документ создастся, но он может остаться в «подвешенном» состоянии. Правильным подходом в 11.5 является использование механизмов подсистемы ИнтеграцияГосИС, но для простых внешних обработок достаточно убрать прямое обращение к отсутствующему полю.
После того как вы исправите ошибку со статусом, обработка может выдать следующую ошибку в строке заполнения табличной части: Поле объекта не обнаружено (Номенклатура). Это происходит по той же причине — изменена структура хранения связей.
Раньше связь между Классификатором алкогольной продукции ЕГАИС и справочником Номенклатура была жесткой. Теперь эта связь вынесена в регистр сведений Соответствие номенклатуры ЕГАИС. Чтобы получить номенклатуру, нам нужно обратиться к этому регистру.
Рассмотрим, как изменить запрос или выборку в коде обработки. Вместо прямого обращения:
Номенклатура = Выборка.АлкогольнаяПродукция.Номенклатура;
Нам необходимо получить данные из регистра. Посмотрим на пример корректного получения номенклатуры по алкогольной продукции:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ТОП 1
| СоответствиеНоменклатурыЕГАИС.Номенклатура КАК Номенклатура
|ИЗ
| РегистрСведений.СоответствиеНоменклатурыЕГАИС КАК СоответствиеНоменклатурыЕГАИС
|ГДЕ
| СоответствиеНоменклатурыЕГАИС.АлкогольнаяПродукция = &АлкогольнаяПродукция";
Запрос.УстановитьПараметр("АлкогольнаяПродукция", Выборка.АлкогольнаяПродукция);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
ВыборкаНом = РезультатЗапроса.Выбрать();
ВыборкаНом.Следующий();
НоваяСтрока.Номенклатура = ВыборкаНом.Номенклатура;
КонецЕсли;
Разберем еще один критический момент. Почему старые обработки для «Регистра №2» вообще ломаются? Дело в том, что ФСРАР постепенно отказывается от использования второго регистра. Для крепкого алкоголя он уже практически не используется (введен помарочный учет на Регистре №1 и №3), а для пива вводятся новые правила порционного учета.
Фирма «1С» следует этим трендам и помечает объекты, связанные с Регистром №2, как устаревшие. Поэтому при адаптации обработки проверьте, не помечены ли сами документы ПередачаВРегистр2ЕГАИС префиксом «Удалить» в вашей конфигурации. Если это так, значит, методологически использование этого документа в вашей версии УТ больше не предусмотрено, и стоит пересмотреть бизнес-процесс в пользу документов 1-го регистра.
Давайте подведем итоги наших действий для оживления обработки на УТ 11.5.8:
ПередачаВРегистр2ЕГАИС.СтатусОбработки.СоответствиеНоменклатурыЕГАИС.Удалить и замените их актуальными аналогами, если они есть в новой структуре метаданных.Следуя этим шагам, мы сможем восстановить работоспособность инструмента и успешно формировать документы для обмена с УТМ в обновленной конфигурации 1С:Управление торговлей. Для регулярного контроля за оборотом алкогольной продукции и автоматической сверки сведений о производителях с государственным реестром применяется модуль обмена 1С и ЕГАИС.