Как исправить ошибку «Переменная не определена (УправлениеПечатью)» в модуле менеджера при запуске 1С под толстым клиентом?

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

При работе с доработанными или нетиповыми документами в конфигурациях на базе «1С:Управление торговлей 11» (или других решениях на управляемых формах) разработчики иногда сталкиваются со сбоем еще на этапе открытия формы списка документов. Платформа выдает ошибку инициализации модуля менеджера вида:


{Документ.БесплатныйАкт.МодульМенеджера(20,7)}: Переменная не определена (УправлениеПечатью)
{Документ.БесплатныйАкт.МодульМенеджера(30,2)}: Переменная не определена (ФормированиеПечатныхФорм)

Проанализируем причины возникновения этой проблемы и разберем способы ее исправления.

Почему возникает ошибка?

Разберем механизм работы платформы «1С:Предприятие 8.3». Когда приложение запускается в режиме «Толстый клиент (управляемое приложение)», компиляция модулей менеджеров объектов может происходить не только на сервере, но и на стороне клиента. Это происходит при инициализации командной панели формы, формировании стандартных команд печати или первом обращении системы к метаданным документа.

В типовых конфигурациях Библиотеки Стандартных Подсистем (БСП) такие общие модули, как УправлениеПечатью и ФормированиеПечатныхФорм, предназначены для исполнения исключительно на сервере. В их свойствах установлены флаги «Сервер» и «Внешнее соединение», но снята галочка «Клиент (управляемое приложение)».

Когда толстый клиент пытается скомпилировать код процедуры Печать в модуле менеджера документа на клиентской стороне, он «не видит» серверные общие модули и выдает синтаксическую ошибку отсутствия переменной.

Способ 1. Использование инструкций препроцессора (Рекомендуемый)

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

Откроем модуль менеджера проблемного документа и обернем процедуру печати (или весь код модуля) следующим образом:


#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "Акт_АНВИК") Тогда
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
            КоллекцияПечатныхФорм,
            "Акт_АНВИК",
            НСтр("ru = 'Акт на информационные услуги'"),
            ПечатьАктНаИнформационныеУслуги("Анвик_АктНаИнформационныеУслуги", МассивОбъектов),
            ,
            "Документ.Анвик_БесплатныйАкт.Анвик_АктНаИнформационныеУслуги");
    КонецЕсли;
    
    ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
    
КонецПроцедуры

#КонецЕсли

Благодаря инструкции #Если Сервер... клиентский компилятор пропустит данный блок кода при инициализации модуля в толстом клиенте, и ошибка исчезнет.

Способ 2. Запуск базы в режиме «Тонкий клиент»

Основным и штатным режимом работы для всех современных конфигураций 1С (УТ 11, ERP, КА) является Тонкий клиент. В тонком клиенте модуль менеджера всегда компилируется исключительно на сервере, поэтому обращения к серверным общим модулям УправлениеПечатью и ФормированиеПечатныхФорм проходят успешно.

  1. Откроем 1С:Предприятие — Стартер (список баз).
  2. Выделим нужную информационную базу и нажмем кнопку «Изменить».
  3. На этапе выбора основного режима запуска укажем «Тонкий клиент».
  4. Сохраним настройки и запустим базу.

Чего делать НЕ следует

Не следует включать флаг «Клиент (управляемое приложение)» в свойствах самих общих модулей УправлениеПечатью или ФормированиеПечатныхФорм. Эти модули содержат прямые запросы к базе данных и работу с метаданными, которые принципиально не могут исполняться на клиенте. Включение клиентского флага приведет к множеству других ошибок компиляции при вызове этих модулей.

← На главную