Почему внешняя печатная форма не отображается в документах 1С 8.3 и как ее правильно зарегистрировать?

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

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

Шаг 1. Формирование функции СведенияОВнешнейОбработке

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

Проанализируем структуру данных, которую мы должны вернуть системе:


Функция СведенияОВнешнейОбработке() Экспорт
    
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    
    // Определяем вид обработки
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
    
    // Указываем объекты, к которым подключается форма
    МассивНазначений.Добавить("Документ.ЗаказКлиента");
    МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    // Основные сведения
    ПараметрыРегистрации.Вставить("Наименование", "Дополнительная печатная форма (Пример)");
    ПараметрыРегистрации.Вставить("Версия", "1.1"); // Важно менять версию при обновлении файла
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
    ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма для проверки БСП");
    
    // Формируем таблицу команд
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = "Печать акта (внешняя)";
    НоваяКоманда.Идентификатор = "АктВнешний"; // Уникальный ID для процедуры Печать
    НоваяКоманда.Использование = "ВызовСерверногоМетода"; // Для печати без открытия формы
    НоваяКоманда.ПоказыватьОповещение = Истина;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    
    Возврат ПараметрыРегистрации;
    
КонецФункции

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

Шаг 2. Вспомогательная функция для создания таблицы команд

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


Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Шаг 3. Почему форма не видна: проверка «Переопределяемого» модуля

Выясним причину, по которой даже после корректной регистрации форма не появляется в списке. В некоторых конфигурациях (особенно от компании «Рарус» или в сильно кастомизированных УТ 11/ERP) список объектов, для которых разрешено использование внешних печатных форм, ограничен жестко в коде конфигурации.

Нам необходимо проверить общий модуль УправлениеПечатьюПереопределяемый и процедуру ПриОпределенииОбъектовСКомандамиПечати. Если вашего документа нет в этом списке, БСП просто не будет искать для него внешние команды.

Решение задачи через расширение (рекомендуемый способ):

Вместо изменения основной конфигурации, создадим расширение и добавим в него процедуру с аннотацией &После:


&После("ПриОпределенииОбъектовСКомандамиПечати")
Процедура Расш_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)
    // Добавляем наш документ в список разрешенных для подсистемы печати
    СписокОбъектов.Добавить(Документы.ЗаказПоставщику);
    СписокОбъектов.Добавить(Документы.CRM_Событие); 
КонецПроцедуры

После добавления объекта в этот список система начнет «опрашивать» справочник дополнительных обработок на наличие подключенных форм для данного типа документа.

Шаг 4. Требования к Модулю Менеджера документа

Проанализируем еще одну тонкость. Чтобы механизм БСП «подцепил» печатную форму, в Модуле менеджера самого документа (например, Документ.ЗаказКлиента) обязательно должна быть экспортная процедура ДобавитьКомандыПечати. Она может быть пустой, но ее наличие критично для того, чтобы объект считался участником подсистемы печати.


// В модуле менеджера документа
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    // Здесь могут быть встроенные команды, но для ВПФ важно само наличие процедуры
КонецПроцедуры

Шаг 5. Реализация процедуры Печать в модуле объекта ВПФ

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // Проверяем, какая именно команда вызвана (если их несколько)
    ПараметрыПечати = УправлениеПечатью.МакетПечатнойФормы("АктВнешний");
    
    // Формируем табличный документ
    ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
    
    // Помещаем результат в коллекцию
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм, 
        "АктВнешний", 
        "Печать акта (внешняя)", 
        ТабличныйДокумент);
        
КонецПроцедуры

Использование метода УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию является стандартом. Это позволяет системе корректно обрабатывать ситуацию, когда пользователь выбирает сразу несколько печатных форм для вывода в одно окно.

Дополнительные советы по отладке

  1. Безопасный режим: Если ваша форма использует сложные вызовы (например, обращение к файловой системе или COM-объектам), установка БезопасныйРежим = Истина может заблокировать выполнение кода. В целях отладки попробуйте временно установить Ложь.
  2. Режим отладки: Для отладки кода внешней формы в управляемом приложении не обязательно каждый раз загружать ее в справочник. Можно использовать внешнюю обработку-отладчик, которая имитирует вызов со стороны БСП, передавая в процедуру Печать массив ссылок на тестовые документы.
  3. Ошибки в запросах: Часто при переносе кода из встроенной формы во внешнюю разработчики забывают, что внешняя форма не имеет прямого доступа к реквизитам формы документа. Весь сбор данных должен идти строго через запросы к базе данных по ссылкам из МассивОбъектов.

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

← На главную