Как исправить ошибку «Метод объекта не обнаружен (КонтекстЭДОЛокальный)» при обновлении 1С:УПП или 1С:ЗУП?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При обновлении старых конфигураций на обычных формах (таких как 1С:Управление производственным предприятием 1.3 или 1С:Зарплата и управление персоналом 2.5) на актуальные релизы 2023–2024 годов, многие специалисты сталкиваются с критической ошибкой. Процесс обновления прерывается сообщением: Метод объекта не обнаружен (КонтекстЭДОЛокальный). Чаще всего это происходит в общем модуле ЭлектронныйДокументооборотСФСС.

В этой статье мы подробно разберем причины возникновения данной проблемы и рассмотрим несколько эффективных способов её решения — от временной корректировки данных до внесения изменений в программный код.

Выясним причину возникновения ошибки

Проанализируем ситуацию. Ошибка возникает в момент выполнения обработчиков обновления информационной базы. Программа пытается выполнить процедуру ПовторноОбработатьВходящиеСообщенияСЭДО. Цель этой процедуры — найти входящие запросы от Социального фонда России (СФР, ранее ФСС), которые были загружены в период перехода на новую спецификацию (версия 2.34), и правильно заполнить их реквизиты.

Проблема заключается в том, что внутри этой процедуры происходит обращение к методу КонтекстЭДОЛокальный общего модуля РегламентированнаяОтчетность. Во время обновления конфигурации в режиме предприятия код выполняется в серверном контексте или в режиме фонового задания. В этот момент необходимые объекты подсистемы ЭДО могут быть еще не инициализированы, или метод оказывается недоступен из-за ограничений области видимости в модуле. По сути, это программная ошибка в типовом коде 1С, которая проявляется только при наличии определенных данных в базе.

Рассмотрим основной запрос, который инициирует проблему. Он выбирает документы ВходящийЗапросФССДляРасчетаПособия, начиная с июня 2023 года, у которых не заполнена версия спецификации:


ВЫБРАТЬ
    ВходящийЗапросФССДляРасчетаПособия.Ссылка КАК Ссылка,
    ВходящийЗапросФССДляРасчетаПособия.ИдентификаторСообщения КАК ИдентификаторСообщения,
    ВходящиеСообщенияСЭДОФСС.Содержимое КАК Содержимое
ИЗ
    Документ.ВходящийЗапросФССДляРасчетаПособия КАК ВходящийЗапросФССДляРасчетаПособия
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВходящиеСообщенияСЭДОФСС КАК ВходящиеСообщенияСЭДОФСС
    ПО ВходящийЗапросФССДляРасчетаПособия.ИдентификаторСообщения = ВходящиеСообщенияСЭДОФСС.Идентификатор
ГДЕ
    ВходящийЗапросФССДляРасчетаПособия.ДатаСообщения >= &ДатаСообщения
    И ВходящийЗапросФССДляРасчетаПособия.Загружен
    И ВходящийЗапросФССДляРасчетаПособия.ВерсияСпецификации = ""

Способ 1: Временное изменение данных (без программирования)

Самый простой и безопасный способ — сделать так, чтобы процедура обновления просто «не увидела» проблемные документы. Для этого нам нужно временно изменить значения реквизитов у входящих запросов ФСС. Выполним следующие шаги:

  1. Запустим программу в режиме предприятия (даже если обновление завершилось с ошибкой, часто можно нажать «Продолжить» или зайти в базу до начала выполнения обработчиков).
  2. Откроем обработку «Групповая обработка справочников и документов» (или «Групповое изменение реквизитов»).
  3. Выберем тип объекта Документ.ВходящийЗапросФССДляРасчетаПособия.
  4. Установим отбор: Дата >= 01.06.2023 и Загружен = Истина.
  5. Для найденных документов изменим реквизит Загружен на значение Ложь.
  6. Запустим процесс обновления конфигурации снова. Поскольку условие Загружен = Истина в запросе теперь не выполняется, процедура обновления будет пропущена без ошибок.
  7. После успешного завершения всех процедур обновления верните признак Загружен = Истина обратно тем же способом.

Важный нюанс: Вместо снятия признака «Загружен», можно попробовать заполнить реквизит ВерсияСпецификации значением 2.34. Это также позволит алгоритму пропустить данные документы.

Способ 2: Модификация программного кода

Если вы предпочитаете исправить корень проблемы в коде, можно воспользоваться рекомендациями опытных разработчиков. Нам необходимо изменить способ обращения к методам обработки документооборота.

Рассмотрим решение, которое предполагает обход прямого обращения к КонтекстЭДОЛокальный. Проанализируем изменения, которые нужно внести в процедуру ПовторноОбработатьВходящиеСообщенияСЭДО модуля ЭлектронныйДокументооборотСФСС:

Найдите строку:

РегламентированнаяОтчетность.КонтекстЭДОЛокальный.ПриПолученииСодержимогоСообщенияСЭДО(Сообщение.Организация, Сообщение);

И замените её на следующий блок кода:


ОбъектОбработки = Обработки.ДокументооборотСКонтролирующимиОрганами.Создать();
ОбъектОбработки.ПриПолученииСодержимогоСообщенияСЭДО(Сообщение.Организация, Сообщение);

Внимание: Чтобы этот код заработал, необходимо зайти в модуль обработки ДокументооборотСКонтролирующимиОрганами, найти процедуру ПриПолученииСодержимогоСообщенияСЭДО и добавить к её объявлению ключевое слово Экспорт, если оно отсутствует. Это позволит вызывать метод из внешнего контекста.

Способ 3: Обход через закомментирование вызова

Если обновление нужно выполнить срочно и «любой ценой», можно временно заблокировать выполнение проблемного участка. Посмотрим, как это сделать:

  1. Откроем общий модуль ПроцедурыОбновленияИнформационнойБазы (или ОбновлениеИнформационнойБазы в зависимости от релиза).
  2. Найдем процедуру ЗаполнитьЗапросыПоСпецификации_2_34.
  3. Закомментируем вызов обработки сообщений:

// Если Идентификаторы.Количество() > 0 Тогда
//     ЭлектронныйДокументооборотСФСС.ПовторноОбработатьВходящиеСообщенияСЭДО(Неопределено, Неопределено, Идентификаторы);
// КонецЕсли;

После этого обновление пройдет успешно. Однако помните: это действие оставляет часть ваших документов СЭДО в некорректном состоянии. После обновления крайне рекомендуется раскомментировать код и запустить эту процедуру вручную через внешнюю обработку или консоль кода, чтобы данные в базе были консистентными.

Рекомендации после обновления

Независимо от выбранного способа, после завершения обновления рекомендуется убедиться, что обмен с СЭДО СФР работает корректно. Часто после таких «тяжелых» переходов на новые спецификации требуется дополнительная настройка сертификатов или установка патчей от 1С. Проверьте наличие установленных исправлений (патчей) в разделе «Администрирование — Обслуживание — Обновление программы — Установленные исправления». Для данных релизов часто выпускаются патчи вида EF_00156942, которые автоматически исправляют подобные ошибки.

Мы рассмотрели основные пути решения проблемы. Рекомендуем сначала использовать Способ 1 с групповым изменением реквизита Загружен, так как он не требует внесения изменений в типовую конфигурацию и сохраняет её на поддержке.

← На главную