При работе в конфигурации «Управление производственным предприятием» (редакция 1.3) пользователи могут столкнуться с ситуацией, когда при попытке скопировать документ Поступление товаров и услуг или Приходный ордер на товары система выдает критическую ошибку выполнения обработчика ПриКопировании.
Сама ошибка выглядит следующим образом:
{ОбщийМодуль.ИнтеграцияЕГАИСПереопределяемый.Модуль(3052)}: Поле объекта не обнаружено (АлкогольнаяПродукция)
При этом предприятие может вообще не иметь отношения к обороту алкогольной продукции и не использовать подсистему ЕГАИС. Проанализируем причину возникновения этой проблемы и рассмотрим способы её устранения.
Разберем логику работы конфигурации в момент копирования документа. При выполнении операции копирования срабатывает событие ПриКопировании, в котором вызываются функции подсистемы интеграции с ЕГАИС.
В общем модуле ИнтеграцияЕГАИСПереопределяемый расположен код, проверяющий тип копируемого документа:
Если ЭтоВходящийДокументЕГАИС(Источник) Тогда
Для Каждого СтрокаТоваров Из Источник.Товары Цикл
СтрокаТоваров.АлкогольнаяПродукция = Справочники.КлассификаторАлкогольнойПродукцииЕГАИС.ПустаяСсылка();
СтрокаТоваров.ИдентификаторСтроки = "";
СтрокаТоваров.ИдентификаторУпаковки = "";
КонецЦикла;
КонецЕсли;
Функция ЭтоВходящийДокументЕГАИС проверяет только принадлежность документа к определенным типам (в частности, ДокументСсылка.ПоступлениеТоваровУслуг и ДокументСсылка.ПриходныйОрдерНаТовары), не опираясь на константу включения подсистемы ЕГАИС:
Функция ЭтоВходящийДокументЕГАИС(ЭтотОбъект) Экспорт
ТД = ТипыВходящихДокументов();
Возврат ТД.Найти(ТипЗнч(ЭтотОбъект.Ссылка)) <> Неопределено;
КонецФункции
Функция ТипыВходящихДокументов()
Результат = Новый Массив;
Результат.Добавить(Тип("ДокументСсылка.ПоступлениеТоваровУслуг"));
Результат.Добавить(Тип("ДокументСсылка.ПриходныйОрдерНаТовары"));
Возврат Результат;
КонецФункции
Причин, почему на строке СтрокаТоваров.АлкогольнаяПродукция возникает исключение, может быть две:
Товары самого документа. В итоге реквизиты АлкогольнаяПродукция, ИдентификаторСтроки и ИдентификаторУпаковки отсутствуют в метаданных табличной части.Если конфигурация дорабатывалась, наиболее правильным решением будет приведение состава метаданных в соответствие с типовым релизом.
Конфигурация — Поддержка — Настройка поддержки.Товары документа ПоступлениеТоваровУслуг убедимся в наличии реквизитов:
АлкогольнаяПродукция (тип: СправочникСсылка.КлассификаторАлкогольнойПродукцииЕГАИС);ИдентификаторСтроки (тип: Строка);ИдентификаторУпаковки (тип: Строка).Если добавить реквизиты в метаданные в данный момент невозможно или конфигурация намеренно облегчена от неиспользуемых полей, изменим логику модуля ИнтеграцияЕГАИСПереопределяемый.
Рассмотрим применение проверки наличия колонки в табличной части перед её обнулением. Это позволит избежать ошибок даже при отсутствии реквизитов в конфигураторе:
Если ЭтоВходящийДокументЕГАИС(Источник) Тогда
// Проверяем, существует ли реквизит в табличной части документа
Если Источник.Товары.Колонки.Найти("АлкогольнаяПродукция") <> Неопределено Тогда
Для Каждого СтрокаТоваров Из Источник.Товары Цикл
СтрокаТоваров.АлкогольнаяПродукция = Справочники.КлассификаторАлкогольнойПродукцииЕГАИС.ПустаяСсылка();
СтрокаТоваров.ИдентификаторСтроки = "";
СтрокаТоваров.ИдентификаторУпаковки = "";
КонецЦикла;
КонецЕсли;
КонецЕсли;
Альтернативный временный вариант — безопасная обработка ошибки с помощью блока Попытка...Исключение:
Попытка
СтрокаТоваров.АлкогольнаяПродукция = Справочники.КлассификаторАлкогольнойПродукцииЕГАИС.ПустаяСсылка();
СтрокаТоваров.ИдентификаторСтроки = "";
СтрокаТоваров.ИдентификаторУпаковки = "";
Исключение
// Пропускаем присвоение, если реквизиты отсутствуют в метаданных
КонецПопытки;
Если метаданные в конфигураторе содержат реквизит АлкогольнаяПродукция, но ошибка все равно появляется у пользователей, проанализируем состояние кэша платформы 1С:
1C:Enterprise 8.3 Server Agent.