При выполнении синтаксического контроля через меню Конфигурация → Проверка конфигурации... разработчики нередко сталкиваются с сообщением об ошибке вида: {ОбщийМодуль.ВыгрузкаВФНСКлиентПереопределяемый.Модуль(69,7)}: Переменная не определена (КонтекстЭДО) (Проверка: Тонкий клиент). При этом быстрая проверка текущего модуля по горячим клавишам может не находить никаких проблем. Разберем детально, почему возникает данная ситуация и как правильно восстановить работоспособность конфигурации.
Проанализируем сначала разницу между типами проверок в платформе «1С:Предприятие»:
Тонкий клиент, Веб-клиент, Сервер, Толстый клиент (управляемое приложение) и Толстый клиент (обычное приложение). Ошибка возникает тогда, когда модуль скомпилирован под клиентский контекст, где глобальная переменная не существует или не инициализирована.Выясним главные источники появления ошибки Переменная не определена (КонтекстЭДО):
Модуль управляемого приложения или подсистема взаимодействия с контролирующими органами обновились, а зависимые переопределяемые общие модули остались старой версии (или наоборот).КонтекстЭДО объявлялась глобально на клиенте, а в актуальных релизах механизмы ЭДО и 1С-Отчетности перешли на вызовы функций общих модулей. Прямой вызов устаревшей глобальной переменной в обновленном окружении вызывает синтаксический сбой.ВыгрузкаВФНСКлиентПереопределяемый компилируется также и для тонкого клиента.Если в информационной базе выполнялись доработки, наиболее надежный путь — привести типовые модули подсистемы отчетности в строгое соответствие с релизом поставщика.
Разберем по шагам алгоритм восстановления:
.cf) в точности того же релиза, до которого обновлялась рабочая база.ВыгрузкаВФНСКлиентПереопределяемый, а также корневые модули (Модуль управляемого приложения, Модуль обычного приложения).Рассмотрим случай, когда архитектура конфигурации предполагает наличие глобальной переменной, но ее экспортное объявление было утеряно при слиянии версий.
Проверим наличие объявления в модулях приложения:
Модуль управляемого приложения.
Перем КонтекстЭДО Экспорт;
Если конфигурация поддерживает работу в режиме обычного приложения, аналогичную строку необходимо проверить в Модуле обычного приложения.
Если модуль предназначен для работы только в режиме толстого клиента обычного приложения, а обращение к переменной приводит к ошибке при проверке тонкого клиента, ограничим проблемный блок инструкциями препроцессора.
Посмотрим на пример исправления кода:
#Если ТолстыйКлиентОбычноеПриложение Тогда
Если КонтекстЭДО = Неопределено Тогда
// Логика инициализации для обычного приложения
КонецЕсли;
#КонецЕсли
Если прикладное решение эксплуатируется строго в режиме толстого клиента (например, в старых редакциях конфигураций), проверка тонкого и веб-клиента может быть неактуальна.
Разберем настройку окна проверки:
Тонкий клиент и Веб-клиент, оставив только используемые режимы.