При работе в среде 1С:Предприятие 8.2/8.3 (особенно в конфигурациях на обычных формах, таких как Зарплата и Управление Персоналом 2.5) разработчики часто сталкиваются с ситуацией: внешняя обработка или печатная форма прекрасно открывается в Конфигураторе, позволяет редактировать макет и код, но при попытке запустить её в режиме «Предприятие» через меню Файл — Открыть ничего не происходит. Программа не выдает ошибок, но и привычное окно обработки не появляется. Рассмотрим подробно, почему это происходит и как заставить обработку работать.
Проанализируем механику работы платформы 1С. Когда мы даем команду «Открыть файл», система считывает структуру объекта ВнешняяОбработка. Если в этой структуре не определена Основная форма, системе просто нечего отображать пользователю. Внешняя обработка в данном случае выступает лишь как контейнер для макетов и программного кода в модуле объекта.
Для внешних печатных форм (ВПФ) отсутствие формы — это стандартная ситуация. По задумке разработчиков, ВПФ не должна открываться как самостоятельное окно. Она предназначена для регистрации в справочнике Дополнительные внешние отчеты и обработки и вызывается программно при нажатии кнопки «Печать» в конкретном документе. Однако для отладки и проверки новых реквизитов нам часто нужно запустить её напрямую. Выясним, как это сделать.
Разберем по шагам, как модифицировать обработку в Конфигураторе, чтобы она начала открываться через «Файл — Открыть»:
Посмотрим на пример кода, который можно разместить в модуле этой формы для вызова логики из модуля объекта:
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Получаем объект обработки
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
// Или в обычных формах просто работаем с контекстом
ТабДок = ОбъектОбработки.Печать();
ТабДок.Показать("Проверка печатной формы");
КонецПроцедуры
Важно помнить: чтобы этот код сработал, функция Печать() в модуле объекта должна быть объявлена с ключевым словом Экспорт.
Если наша цель — проверить работу в реальных условиях конфигурации ЗУП 2.5, правильнее будет не открывать файл напрямую, а подключить его к системе. Рассмотрим этот процесс:
Перейдем в меню Сервис — Дополнительные отчеты и обработки — Дополнительные внешние печатные формы. Создадим новый элемент и выберем наш файл .epf. При регистрации система анализирует модуль объекта. Для корректной работы в ЗУП 2.5 структура модуля объекта должна соответствовать определенным стандартам.
Проанализируем минимально необходимый код в модуле объекта для внешней печатной формы:
Функция Печать() Экспорт
ТабДокумент = Новый ТабличныйДокумент;
// Здесь должна быть логика формирования макета
// Например:
Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ТабДокумент.Вывести(ОбластьМакета);
Возврат ТабДокумент;
КонецФункции
Если вы добавили новый реквизит в обработку, убедитесь, что он используется внутри функции Печать(). Если обработка запускается через регистрацию в справочнике, значения реквизитов самой обработки обычно не заполняются пользователем вручную — они должны либо вычисляться программно, либо браться из объекта (документа), для которого печатается форма.
Иногда даже при наличии формы обработка может не открываться из-за программных ограничений в процедуре ПередОткрытием. Рассмотрим ситуацию, когда в коде прописаны условия, завершающие работу формы до её визуализации.
Проверим модуль созданной формы. Если там присутствует следующий код, форма закроется сразу после запуска:
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Если Не РольДоступна("ПолныеПрава") Тогда
Предупреждение("Недостаточно прав для запуска отладочной формы!");
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Также не стоит забывать о кэшировании внешних обработок. В 1С:Предприятии при открытии внешней обработки файл может копироваться во временную директорию пользователя. Если вы внесли изменения в макет, сохранили файл, но при открытии видите старую версию (или не видите ничего), попробуйте переименовать файл или очистить временные папки 1С. В конфигурации ЗУП 2.5 при использовании справочника внешних обработок обязательно нужно перевыбрать файл в карточке справочника после каждой правки в Конфигураторе, иначе система будет использовать старую версию, хранящуюся внутри базы данных в виде двоичных данных.
Подведем итог нашему анализу. Если внешняя обработка не открывается через Файл — Открыть:
Печать() должна быть доступна извне.Следуя этим правилам, мы сможем эффективно отлаживать внешние печатные формы и избегать ситуаций, когда платформа игнорирует попытки открытия файлов.