Почему при печати типовой формы в 1С открывается печать комплекта вместе с внешней печатной формой и как это отключить?

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

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

Проанализируем архитектуру механизма печати БСП. Для многих расчетных и кадровых документов вывод документов спроектирован с поддержкой пакетной печати. В модуле менеджера таких документов в процедуре ДобавитьКомандыПечати для типовых команд часто установлен параметр ДополнитьКомплектВнешнимиПечатнымиФормами = Истина. Когда пользователь запускает печать, подсистема автоматически опрашивает справочник ДополнительныеОтчетыИОбработки, находит все зарегистрированные для данного типа документа ВПФ и принудительно включает их в общий комплект. В результате вместо формирования одного бланка выводится интерфейс пакетной печати.

Рассмотрим несколько проверенных способов решения данной задачи: от пользовательской настройки до программных изменений в конфигурации и коде самой обработки.

Способ 1. Пользовательская настройка состава комплекта без изменения кода

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

  1. Откроем форму документа и нажмем команду печати, вызывающую диалог Печать комплекта.
  2. В левой части открывшегося окна предварительного просмотра найдем список печатных форм, входящих в сформированный комплект.
  3. Снимем флажок напротив добавленной внешней печатной формы.
  4. Нажмем кнопку печати или сформируем документ. Подсистема БСП запишет индивидуальные параметры печати в регистр сведений НастройкиПечатиОбъектов для текущего пользователя или организации, после чего данная форма перестанет принудительно выводиться вместе с типовой.
  5. Дополнительно проверим настройки в разделе Администрирование → Печатные формы, отчеты и обработки → Подменю «Печать», где можно централизованно отрегулировать видимость и привязку внешних команд к объекту.

Способ 2. Корректировка кода внутри самой внешней печатной формы

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    // Запрещаем включение данной печатной формы в комплекты документов
    ПараметрыВывода.ДоступнаПечатьПоКомплектно = Ложь;

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

КонецПроцедуры

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

Способ 3. Программное отключение через расширение конфигурации

Если требуется полностью избавить типовую команду документа от поиска внешних форм без снятия конфигурации с поддержки, применим механизм расширений. Перехватим процедуру ДобавитьКомандыПечати модуля менеджера документа с помощью аннотации &После:


&После("ДобавитьКомандыПечати")
Процедура Расш_ДобавитьКомандыПечати(КомандыПечати) Экспорт

    Для Каждого КомандаПечати Из КомандыПечати Цикл
        // Отключаем автоматическое дополнение внешними формами для типовых команд
        Если КомандыПечати.Колонки.Найти("ДополнитьКомплектВнешнимиПечатнымиФормами") <> Неопределено Тогда
            КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Ложь;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры

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

Способ 4. Альтернативные варианты разработки

Разберем альтернативные архитектурные пути, если поведение справочника дополнительных отчетов и обработок не подходит для конкретной задачи:

  1. Перенос формы в расширение: Создадим печатную форму непосредственно в расширении конфигурации (cfe). Команды печати, зарегистрированные в расширении стандартным образом через менеджер объекта, работают изолированно и не попадают под алгоритмы автоматического комплектования БСП, характерные для внешних файлов.
  2. Смена типа команды ВПФ: В функции СведенияОВнешнейОбработке() изменим способ вызова. Вместо типового формирования печатной формы через макет зададим вызов клиентского или серверного метода, открывающего отдельную собственную экранную форму с готовым табличным документом. Это исключит регистрацию команды в стандартных списках комплектования БСП.
← На главную