При обновлении старых конфигураций на обычных формах (таких как 1С:Управление производственным предприятием 1.3 или 1С:Зарплата и управление персоналом 2.5) на актуальные релизы 2023–2024 годов, многие специалисты сталкиваются с критической ошибкой. Процесс обновления прерывается сообщением: Метод объекта не обнаружен (КонтекстЭДОЛокальный). Чаще всего это происходит в общем модуле ЭлектронныйДокументооборотСФСС.
В этой статье мы подробно разберем причины возникновения данной проблемы и рассмотрим несколько эффективных способов её решения — от временной корректировки данных до внесения изменений в программный код.
Проанализируем ситуацию. Ошибка возникает в момент выполнения обработчиков обновления информационной базы. Программа пытается выполнить процедуру ПовторноОбработатьВходящиеСообщенияСЭДО. Цель этой процедуры — найти входящие запросы от Социального фонда России (СФР, ранее ФСС), которые были загружены в период перехода на новую спецификацию (версия 2.34), и правильно заполнить их реквизиты.
Проблема заключается в том, что внутри этой процедуры происходит обращение к методу КонтекстЭДОЛокальный общего модуля РегламентированнаяОтчетность. Во время обновления конфигурации в режиме предприятия код выполняется в серверном контексте или в режиме фонового задания. В этот момент необходимые объекты подсистемы ЭДО могут быть еще не инициализированы, или метод оказывается недоступен из-за ограничений области видимости в модуле. По сути, это программная ошибка в типовом коде 1С, которая проявляется только при наличии определенных данных в базе.
Рассмотрим основной запрос, который инициирует проблему. Он выбирает документы ВходящийЗапросФССДляРасчетаПособия, начиная с июня 2023 года, у которых не заполнена версия спецификации:
ВЫБРАТЬ
ВходящийЗапросФССДляРасчетаПособия.Ссылка КАК Ссылка,
ВходящийЗапросФССДляРасчетаПособия.ИдентификаторСообщения КАК ИдентификаторСообщения,
ВходящиеСообщенияСЭДОФСС.Содержимое КАК Содержимое
ИЗ
Документ.ВходящийЗапросФССДляРасчетаПособия КАК ВходящийЗапросФССДляРасчетаПособия
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВходящиеСообщенияСЭДОФСС КАК ВходящиеСообщенияСЭДОФСС
ПО ВходящийЗапросФССДляРасчетаПособия.ИдентификаторСообщения = ВходящиеСообщенияСЭДОФСС.Идентификатор
ГДЕ
ВходящийЗапросФССДляРасчетаПособия.ДатаСообщения >= &ДатаСообщения
И ВходящийЗапросФССДляРасчетаПособия.Загружен
И ВходящийЗапросФССДляРасчетаПособия.ВерсияСпецификации = ""
Самый простой и безопасный способ — сделать так, чтобы процедура обновления просто «не увидела» проблемные документы. Для этого нам нужно временно изменить значения реквизитов у входящих запросов ФСС. Выполним следующие шаги:
Документ.ВходящийЗапросФССДляРасчетаПособия.Дата >= 01.06.2023 и Загружен = Истина.Загружен на значение Ложь.Загружен = Истина в запросе теперь не выполняется, процедура обновления будет пропущена без ошибок.Загружен = Истина обратно тем же способом.Важный нюанс: Вместо снятия признака «Загружен», можно попробовать заполнить реквизит ВерсияСпецификации значением 2.34. Это также позволит алгоритму пропустить данные документы.
Если вы предпочитаете исправить корень проблемы в коде, можно воспользоваться рекомендациями опытных разработчиков. Нам необходимо изменить способ обращения к методам обработки документооборота.
Рассмотрим решение, которое предполагает обход прямого обращения к КонтекстЭДОЛокальный. Проанализируем изменения, которые нужно внести в процедуру ПовторноОбработатьВходящиеСообщенияСЭДО модуля ЭлектронныйДокументооборотСФСС:
Найдите строку:
РегламентированнаяОтчетность.КонтекстЭДОЛокальный.ПриПолученииСодержимогоСообщенияСЭДО(Сообщение.Организация, Сообщение);
И замените её на следующий блок кода:
ОбъектОбработки = Обработки.ДокументооборотСКонтролирующимиОрганами.Создать();
ОбъектОбработки.ПриПолученииСодержимогоСообщенияСЭДО(Сообщение.Организация, Сообщение);
Внимание: Чтобы этот код заработал, необходимо зайти в модуль обработки ДокументооборотСКонтролирующимиОрганами, найти процедуру ПриПолученииСодержимогоСообщенияСЭДО и добавить к её объявлению ключевое слово Экспорт, если оно отсутствует. Это позволит вызывать метод из внешнего контекста.
Если обновление нужно выполнить срочно и «любой ценой», можно временно заблокировать выполнение проблемного участка. Посмотрим, как это сделать:
ПроцедурыОбновленияИнформационнойБазы (или ОбновлениеИнформационнойБазы в зависимости от релиза).ЗаполнитьЗапросыПоСпецификации_2_34.
// Если Идентификаторы.Количество() > 0 Тогда
// ЭлектронныйДокументооборотСФСС.ПовторноОбработатьВходящиеСообщенияСЭДО(Неопределено, Неопределено, Идентификаторы);
// КонецЕсли;
После этого обновление пройдет успешно. Однако помните: это действие оставляет часть ваших документов СЭДО в некорректном состоянии. После обновления крайне рекомендуется раскомментировать код и запустить эту процедуру вручную через внешнюю обработку или консоль кода, чтобы данные в базе были консистентными.
Независимо от выбранного способа, после завершения обновления рекомендуется убедиться, что обмен с СЭДО СФР работает корректно. Часто после таких «тяжелых» переходов на новые спецификации требуется дополнительная настройка сертификатов или установка патчей от 1С. Проверьте наличие установленных исправлений (патчей) в разделе «Администрирование — Обслуживание — Обновление программы — Установленные исправления». Для данных релизов часто выпускаются патчи вида EF_00156942, которые автоматически исправляют подобные ошибки.
Мы рассмотрели основные пути решения проблемы. Рекомендуем сначала использовать Способ 1 с групповым изменением реквизита Загружен, так как он не требует внесения изменений в типовую конфигурацию и сохраняет её на поддержке.