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