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