При обновлении типовых конфигураций «1С:Бухгалтерия» до актуальных версий (например, 3.0.121.25 и выше) разработчики нередко добавляют новые механизмы интеграции с внешними системами, в частности, с Единой информационной системой в сфере закупок (ЕИС). Это приводит к тому, что внешние обработки, написанные для старых версий, перестают работать и выдают ошибку вида: {Общий модуль.РеализацияТоваровУслугФормы.Модуль(442)}: Поле объекта не обнаружено (ГосконтрактЕИС).
Давайте разберемся, почему это происходит и как программно адаптировать вашу обработку к новым требованиям платформы.
Ошибка возникает из-за несовпадения структуры данных. Типовой механизм 1С теперь при проведении или изменении документа «Реализация товаров и услуг» обращается к методу ЭлектронноеАктированиеБП.ДополнитьДанныеСтрокиСведениямиПоГосконтракту. Этот метод ожидает, что в передаваемой структуре ДанныеОбъекта будет существовать ключ ГосконтрактЕИС.
Если ваша внешняя обработка формирует эту структуру вручную и «не знает» о новом требовании, система выдает исключение, так как ожидаемое поле отсутствует в объекте данных.
Для исправления ситуации нам необходимо «подсказать» типовому коду наличие этого параметра. Даже если вы не используете функционал госконтрактов, передача этого ключа с пустым значением позволит избежать ошибки.
ДанныеОбъекта.ДанныеОбъекта = Новый Структура(...).ГосконтрактЕИС.Рассмотрим пример правильного формирования структуры в коде:
ДанныеОбъекта = Новый Структура("Ссылка, Дата, ВидОперации, Организация, ДеятельностьНаПатенте,
|Склад, ТипЦен, ВалютаДокумента, КурсВзаиморасчетов, КратностьВзаиморасчетов,
|ГосконтрактЕИС, СуммаВключаетНДС, ДоговорКонтрагента,
|ЭтоКомиссия, Реализация, ДокументБезНДС");
После того как вы добавили этот ключ в определение структуры, убедитесь, что при заполнении объекта вы корректно обрабатываете это поле. Если функционал госконтрактов в вашей базе не активирован, достаточно передать в это поле значение Неопределено или пустую ссылку.
Также важно обратить внимание на то, как происходит передача данных в типовой метод. В современных релизах БП 3.0 процедура вызова выглядит так:
// Внутри вашего модуля обработки
ЭлектронноеАктированиеБП.ДополнитьДанныеСтрокиСведениямиПоГосконтракту(СтрокаТабличнойЧасти, ДанныеОбъекта.ГосконтрактЕИС);
Если ваша обработка переопределяет метод УслугиНоменклатураПриИзмененииНаСервере, убедитесь, что структура ДанныеОбъекта, которую вы передаете в типовой модуль РеализацияТоваровУслугФормы, полностью соответствует ожидаемой сигнатуре.
Чтобы избежать подобных проблем в будущем, примите к сведению следующие советы:
Свойство() при получении данных из структур, если это возможно, либо проверяйте состав структуры перед передачей в типовые процедуры.Применение описанного выше метода добавления ключа ГосконтрактЕИС является наиболее надежным и «чистым» способом решения ошибки, так как он не требует внесения изменений в код самой конфигурации 1С, сохраняя ее типовой статус (что крайне важно для дальнейшего беспроблемного обновления).