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