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