При запуске конфигураций на базе обычных форм (например, «Бухгалтерия предприятия 2.0») на платформе «1С:Предприятие 8.3» разработчики нередко сталкиваются с ошибкой выполнения вида:
{(1)}: Метод объекта не обнаружен (ИспользованиеУниверсальногоПередаточногоДокумента)
При этом в режиме совместимости с платформой 8.2 данный код отрабатывает без нареканий. Разберем по шагам, почему возникает такое поведение, как устроена компиляция общих модулей в платформе 8.3 и какие действия помогут устранить неисправность.
Посмотрим на пример проблемного вызова, который выполняется при открытии формы документа:
ЭлектронныеДокументы.ИспользованиеУниверсальногоПередаточногоДокумента(
ПараметрыЭД.Организация,
ПараметрыЭД.Контрагент,
ПараметрыЭД.ДоговорКонтрагента
);
Проанализируем архитектуру конфигураций редакции 2.0. Они проектировались для работы в режиме толстого клиента обычного приложения. Типовая конфигурация жестко завязана на работу с установленным свойством Режим совместимости (обычно «Версия 8.2.13» или «Версия 8.2.16»).
Если для конфигурации установить значение свойства «Не использовать», платформа 8.3 начинает применять строгие правила изоляции контекстов. При вызове серверных процедур из клиентского кода без явного признака «Вызов сервера» или при попытке вызвать метод модуля, не скомпилированного для текущего контекста, платформа не находит требуемую экспортную функцию.
Для восстановления штатного поведения выполним следующие действия:
Конфигурация.Версия 8.2.13 или Версия 8.2.16).Выясним причину, по которой метод может быть физически недоступен в момент исполнения строки. Общий модуль компилируется в зависимости от выставленных флагов в его свойствах.
Если вызывающий код расположен в модуле формы или служебном модуле на стороне клиента, а вызываемый общий модуль ЭлектронныеДокументы не имеет нужных признаков компиляции, метод не будет виден платформе.
Проверим и скорректируем свойства модулей:
Общие модули модуль ЭлектронныеДокументы и вызывающий модуль (например, ЭлектронныеДокументыСлужебный).Экспорт в объявлении функции:
Функция ИспользованиеУниверсальногоПередаточногоДокумента(Организация, Контрагент, ДоговорКонтрагента) Экспорт
// Алгоритм проверки использования УПД
Возврат Истина;
КонецФункции
Рассмотрим случай, когда сам модуль скомпилирован, но конкретная функция вырезается препроцессором. Если метод обрамлен директивами #Если Сервер Тогда ... #КонецЕсли, а вызов инициируется на клиенте толстого приложения, функция будет отсутствовать в контексте выполнения клиента.
Проанализируем текст модуля и при необходимости приведем директивы препроцессора к корректному виду:
#Если Сервер ИЛИ ТолстыйКлиентОбычноеПриложение ИЛИ ВнешнееСоединение Тогда
Функция ИспользованиеУниверсальногоПередаточногоДокумента(Организация, Контрагент, ДоговорКонтрагента) Экспорт
// Код функции
КонецФункции
#КонецЕсли
Конфигурации для обычных форм требуют явного указания режима запуска. Если сеанс пользователя стартует в режиме тонкого клиента или управляемого приложения, многие модули обычных форм не инициализируются.
Разберем, как проверить режим запуска:
/RunModeOrdinaryApplication.Администрирование — Пользователи откроем свойства пользователя и проверим, чтобы параметр Основной режим запуска имел значение Обычное приложение.При переходе между версиями платформ 8.2 и 8.3 либо после динамического обновления базы данных кэш скомпилированных модулей может содержать устаревшую структуру метаданных. В результате платформа обращается к старой версии модуля, где новый метод еще не был зарегистрирован.
Для устранения сбоя выполним очистку кэша:
/ClearCache.%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8).Чтобы быстро обнаружить подобные проблемы по всей конфигурации, выполним комплексную проверку:
Конфигурация — Проверка конфигурации....Тонкий клиент, Сервер, Толстый клиент обычное приложение и Внешнее соединение.