---
title: Подключение к подсистеме Печать
slug: общие-бсп-подключение-к-подсистемам/подключение-к-подсистеме-печать
---

## Настройка объектов метаданных

В процедуре `ПриОпределенииНастроекПечати` общего модуля `УправлениеПечатьюПереопределяемый` перечисляем менеджеры объектов, которые нужно подключить:

```bsl

// Переопределяет настройки подсистемы.
//
// Параметры:
//  Настройки - Структура:
//   * ИспользоватьПодписиИПечати - Булево - при установке значения Ложь отключается возможность установки подписей 
//                                           и печатей в печатных формах.
//   * СкрыватьПодписиИПечатиДляРедактирования - Булево - удалять рисунки подписей и печатей табличных документов при
//                                           снятии флажка "Подписи и печати" в форме "Печать документов", для того,
//                                           чтобы они не мешали редактировать текст, находящийся под ними.
//   * ПроверкаПроведенияПередПечатью    - Булево - признак необходимости проверки проведенности
//                                        документов перед печатью, является значением по умолчанию для команды печати
//                                        см. УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//                                        Для непроведенных документов команда печати не выполняется.
//                                        Если параметр не указан, то проверка проведенности не выполняется.
//   * ОбъектыПечати - Массив - менеджеры объектов с процедурой ПриОпределенииНастроекПечати.
//
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
    
    ...
    Настройки.ОбъектыПечати.Добавить(Справочники._ДемоКонтрагенты);
    Настройки.ОбъектыПечати.Добавить(Справочники._ДемоОрганизации);
    ...
    Настройки.ОбъектыПечати.Добавить(Документы._ДемоСчетНаОплатуПокупателю);
    Настройки.ОбъектыПечати.Добавить(Документы._ДемоРасходныйКассовыйОрдер);
    ...
    
КонецПроцедуры

```

## Настройка модуля менеджера

В модуле менеджера объектов, подключаемых к подсистеме добавляются методы `ПриОпределенииНастроекПечати` и `ДобавитьКомандыПечати`:

```bsl

// СтандартныеПодсистемы.Печать

// Переопределяет настройки печати для объекта.
//
// Параметры:
//  Настройки - см. УправлениеПечатью.НастройкиПечатиОбъекта.
//
Процедура ПриОпределенииНастроекПечати(Настройки) Экспорт
    Настройки.ПриДобавленииКомандПечати = Истина;
КонецПроцедуры

// Определяет список команд печати.
//
// Параметры:
//  КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // в зависимости от варианта печати - автоматического "нового" или традиционного. См. ниже

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

// Конец СтандартныеПодсистемы.Печать

```

## Подключение форм к подсистеме `Подключаемые команды`

Чтоыб были выведены подключаемые команды печати необходимо подключить формы к подсистеме `Подключаемые команды`


## Автоматическое формирование печатной формы 

### Макет табличного документа

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">ВАРИАНТ 1. Без конфигуратора</summary>

Данный способ позволяет создать печатную форму исключительно в пользовательском режиме.
Команды печати в таком случае создавать не нужно

В пользовательском режиме открываем `Администрирование` -> `Печатные формы, отчеты и обработки` -> `Макеты печатных форм`

![Изображение](/bsp-pechat/1.png)

В конструкторе макета создаем необходимый вид печатной формы

![Изображение](/bsp-pechat/2.png)

> ВАЖНО! Параметры указываются в [квадратных скобках], функции также. Например, чтобы для поля `Дата` применить функцию `Формат`, в ячейку нужно записать строку вида `[Формат([Дата], "ДФ=дд.ММ.гггг")]`.

> Также не нужно никак выделять строки табличных частей - просто выводим параметры ТЧ в ячейки, система сама определит, что такие строки нужно повторять

![Изображение](/bsp-pechat/6.png)

С помощью команд редактора можно запустить предпросмотр или изменить образец:

![Изображение](/bsp-pechat/3.png)

Включаем видимость печатной формы

![Изображение](/bsp-pechat/4.png)

Все, после записи макета команда печати будет доступна в формах объекта

</details>

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">ВАРИАНТ 2. Встраивание в конфигурацию</summary>

Создаем макет печатной формы также, как и в **варианте 1**, только **не включаем видимость**. Созданный макет нужно **выгрузить** в формате `MXL` (`Еще` -> `Выгрузить в файл`), открыть в конфигураторе и скопировать **все** содержимое в созданный в конфигураторе макет

![Изображение](/bsp-pechat/5.png)

> Нужно именно **выгружать**, т.к. имена параметров в пользовательском режиме и в конфигураторе будут отличаться, и при выгрузке система их автоматически заменит

![Изображение](/bsp-pechat/10.png)

![Изображение](/bsp-pechat/11.png)


- В `модуле менеджера` реализуем процедуру `ДобавитьКомандыПечати`:

```bsl

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

    Команда = КомандыПечати.Добавить();

    Команда.МенеджерПечати = "УправлениеПечатью"; // ВАЖНО! Менеджер - сама подсистема
    Команда.Идентификатор = "Документ.МойДокумент.ПФ_MXL_ПечатнаяФормаМоегоДокумента"; // Полный путь к макету
    Команда.Представление = НСтр("ru = 'Печатная форма моего документа'");

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

```

После обновления конфигурации команда печати должна появиться в формах целевого объекта, а также в списке `Макеты печатных форм`

</details>

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Изменение списка доступных полей</summary>

Для того, чтобы расширить или уменьшить список доступных полей в конструкторе печатных форм нужно реализовать схему компоновки данных `ДанныеПечати` на уровне объекта

![Изображение](/bsp-pechat/2.png)

Схема компоновки данных должна именоваться именно `Данные печати`, в запросе иметь поле `Ссылка` целевого объекта. **В схеме можно использовать все возможности СКД** (ВычисляемыеПоля, соединения и пр.)

![Изображение](/bsp-pechat/7.png)

ПРИ НЕОБХОДИМОСТИ дополняются методы `ПриОпределенииИсточниковДанныхПечати` `ПриПодготовкеДанныхПечати` общего модуля `УправлениеПечатьюПереопределяемый`. Метод `ПриОпределенииИсточниковДанныхПечати`  **описывает новые поля** схемы, а `ПриПодготовкеДанныхПечати` **реализует их заполнение** 

**(Не пробовал, нужно потестить)**

```bsl

// Определяет используемый макет данных печати для объектов метаданных и отдельных полей.
// По умолчанию используется макет ДанныеПечати у ссылочных объектов. Если макет отсутствует в метаданных, он будет
// сгенерирован автоматически на основе выборки всех реквизитов объекта. В данной процедуре можно переопределить
// состав полей, доступных для печати как для всего объекта, так и для отдельного поля объекта.
//
// Параметры:
//  Объект - Строка - полное имя объекта метаданных либо имя поля из макета "ДанныеПечати" объекта метаданных
//                      в формате "ПолноеИмяОбъектаМетаданных.ИмяПоля".
//  ИсточникиДанныхПечати - СписокЗначений:
//    * Значение - СхемаКомпоновкиДанных - схема данных печати. Определяет состав подчиненных полей объекта или поля,
//                                         используется при получении данных печати.
//                                         При получении данных печати отбор значений производится по полю Ссылка.
//                                         Поэтому в составе полей схемы компоновки данных обязательно должно
//                                         присутствовать поле Ссылка, даже если оно фактически не ссылочного типа,
//                                         а, например, Строка.
//      
//    * Представление - Строка - идентификатор схемы, используется в процедуре ПриПодготовкеДанныхПечати.
//                               Если в качестве идентификатора схемы используется полное имя объекта метаданных, то
//                               при подготовке данных печати будет вызываться процедура ПриПодготовкеДанныхПечати 
//                               модуля менеджера объекта. Иначе будет вызвана аналогичная процедура этого модуля.
//                               
//    * Пометка -Булево - Истина, если в качестве дополнительного ключевого поля выступает владелец источника данных.
//
Процедура ПриОпределенииИсточниковДанныхПечати(Объект, ИсточникиДанныхПечати) Экспорт
    
    // _Демо начало примера
    
    // СтандартныеПодсистемы.СклонениеПредставленийОбъектов
    Если Объект = "Справочник._ДемоФизическиеЛица.Наименование" Тогда
        СклонениеПредставленийОбъектов.ПодключитьИсточникДанныхПечатиСклоненияСтрок(ИсточникиДанныхПечати);
    КонецЕсли;  
    // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов
    
    Если Объект = "Документ._ДемоСчетНаОплатуПокупателю" Тогда

        СписокПолей = УправлениеПечатью.ДеревоПолейДанныхПечати();
    
        Поле = СписокПолей.Строки.Добавить();
        Поле.Идентификатор = "Ссылка";
        Поле.Представление = НСтр("ru = 'Ссылка'");
        Поле.ТипЗначения = Новый ОписаниеТипов();	
    
        Поле = СписокПолей.Строки.Добавить();
        Поле.Идентификатор = "QRКод";
        Поле.Представление = НСтр("ru='QR-код'");
        Поле.Картинка = БиблиотекаКартинок.ТипКартинка;
        Поле.Порядок = 1;
    
        СхемаДанныеШтрихкодов = УправлениеПечатью.СхемаКомпоновкиДанныхПечати(СписокПолей);
        ИсточникиДанныхПечати.Добавить(СхемаДанныеШтрихкодов, "QRКодСчетаНаОплату");

    КонецЕсли;
    
    Если Объект = "Справочник._ДемоФизическиеЛица.Наименование" Тогда
        СписокПолей = УправлениеПечатью.ТаблицаПолейДанныхПечати();
    
        Поле = СписокПолей.Добавить();
        Поле.Идентификатор = "Ссылка";
        Поле.Представление = НСтр("ru = 'Ссылка'");
        Поле.ТипЗначения = Новый ОписаниеТипов();	

        Поле = СписокПолей.Добавить();
        Поле.Идентификатор = "ФамилияИнициалы";
        Поле.Представление = НСтр("ru = 'Фамилия И. О.'");
        Поле.ТипЗначения = Новый ОписаниеТипов("Строка");

        СхемаДанных = УправлениеПечатью.СхемаКомпоновкиДанныхПечати(СписокПолей);

        ИсточникиДанныхПечати.Добавить(СхемаДанных, "ДанныеПечатиФамилияИнициалы");

    КонецЕсли;

    // _Демо конец примера
    
КонецПроцедуры


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

            Если ПустаяСтрока(QRСтрока) Тогда
                QRКоды.Вставить(РеквизитыПлатежа.Ссылка, Новый Картинка());
                Продолжить;
            КонецЕсли;

            ДанныеQRКода = ГенерацияШтрихкода.ДанныеQRКода(QRСтрока, 1, 120);
            
            Если НЕ ТипЗнч(ДанныеQRКода) = Тип("ДвоичныеДанные") Тогда
                Шаблон = НСтр("ru = 'Не удалось сформировать QR-код для документа %1.
                         |Технические подробности см. в журнале регистрации.'");
                ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, РеквизитыПлатежа.Ссылка);
                ОбщегоНазначения.СообщитьПользователю(ТекстСообщения);
                Продолжить;
            КонецЕсли;
            
            QRКод = Новый Картинка(ДанныеQRКода);	
            QRКоды.Вставить(РеквизитыПлатежа.Ссылка, QRКод); 
        КонецЦикла;
        
        Для Каждого ИсточникДанных Из ИсточникиДанных Цикл
            ЗначениеПолейДанных = НаборДанных.Добавить();  
            ЗначениеПолейДанных.Ссылка = ИсточникДанных;
            ЗначениеПолейДанных.QRКод = QRКоды[ИсточникДанных];
        КонецЦикла;
        
        ВнешниеНаборыДанных.Вставить("Данные", НаборДанных);
        Возврат;
    КонецЕсли;
    
    Если ИдентификаторСхемыКомпоновкиДанных = "ДанныеПечатиФамилияИнициалы" Тогда
    
        ДанныеПечати = Новый ТаблицаЗначений();
        ДанныеПечати.Колонки.Добавить("Ссылка");
        ДанныеПечати.Колонки.Добавить("ФамилияИнициалы");
    
        Для Каждого Объект Из Объекты Цикл
            СтрокаТаблицы = ДанныеПечати.Добавить();
            СтрокаТаблицы.Ссылка = Объект;
            СтрокаТаблицы.ФамилияИнициалы = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(Объект);
        КонецЦикла;

        ВнешниеНаборыДанных.Вставить("Данные", ДанныеПечати);
        Возврат;
    КонецЕсли;

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

```

</details>

### Макет open office XML (DOC)

Отличается только конструктором, все остальное, так же, как описано выше для MXL

![Изображение](/bsp-pechat/8.png)

## Традиционное формирование печатной формы

### Макет табличного документа

В `модуле менеджера` реализуем процедуру `ДобавитьКомандыПечати`:

```bsl

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

    Команда = КомандыПечати.Добавить();

    Команда.МенеджерПечати = "Документ.МойДокумент"; // где процедура "Печать". Можно не указывать, по умолчанию модуль менеджера объекта
    Команда.Идентификатор = "ПФ_MXL_ПечатнаяФормаМоегоДокумента"; // Произвольная строка, рекомендуется именовать как макет
    Команда.Представление = НСтр("ru = 'Печатная форма моего документа'");

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

```

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Примеры команд печати</summary>
   
```bsl

// Заполняет список команд печати.
// 
// Параметры:
//  КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
    
    // Счет на оплату
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "Счет";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Не Пользователи.РолиДоступны("_ДемоПечатьНепроведенныхДокументов");
    
    // Счет на оплату без платежных реквизитов.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "Счет";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату без платежных реквизитов'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Не Пользователи.РолиДоступны("_ДемоПечатьНепроведенныхДокументов");

    // Это будет доступно в аргументе "ПараметрыПечати" метода "Печать"
    КомандаПечати.ДополнительныеПараметры.Вставить("ВыводитьПлатежныеРеквизиты", Ложь);
    
    // Демо-пример ограничения доступности команд печати.
    Если Пользователи.РолиДоступны("_ДемоПечатьСчетаНаОплатуНаПринтер") Тогда
        // Счет на оплату (на принтер).
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Идентификатор = "Счет";
        КомандаПечати.Представление = НСтр("ru = 'Счет на оплату (на принтер)'");
        КомандаПечати.Картинка = БиблиотекаКартинок.ПечатьСразу;
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        КомандаПечати.СразуНаПринтер = Истина;
    КонецЕсли;
    
    Если НЕ Пользователи.ЭтоСеансВнешнегоПользователя() Тогда
        // Комплект документов
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Идентификатор = "Счет,Заказ,Заказ,Обработка._ДемоПечатнаяФорма.ГарантийноеПисьмо,Счет,Счет,Заказ";
        КомандаПечати.Представление = НСтр("ru = 'Комплект документов'");
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        КомандаПечати.ФиксированныйКомплект = Истина;
        КомандаПечати.ПереопределитьПользовательскиеНастройкиКоличества = Истина;
        КомандаПечати.Порядок = 75;
        
        // Комплект документов (на принтер).
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Идентификатор = "Счет,Заказ,Заказ,Обработка._ДемоПечатнаяФорма.ГарантийноеПисьмо,Счет,Счет,Заказ";
        КомандаПечати.Представление = НСтр("ru = 'Комплект документов (на принтер)'");
        КомандаПечати.Картинка = БиблиотекаКартинок.ПечатьСразу;
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        КомандаПечати.ФиксированныйКомплект = Истина;
        КомандаПечати.ПереопределитьПользовательскиеНастройкиКоличества = Истина;
        КомандаПечати.СразуНаПринтер = Истина;
        КомандаПечати.Порядок = 75;
        
        // Настраиваемый комплект документов.
        КомандаПечати = КомандыПечати.Добавить();
        КомандаПечати.Идентификатор = "Счет,Заказ,Заказ,Обработка._ДемоПечатнаяФорма.ГарантийноеПисьмо,Счет,Счет,Заказ";
        КомандаПечати.Представление = НСтр("ru = 'Настраиваемый комплект документов'");
        КомандаПечати.СписокФорм = "ФормаДокумента,ФормаСписка";
        КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
        КомандаПечати.ЗаголовокФормы = НСтр("ru = 'Настраиваемый комплект'");
        КомандаПечати.ДополнитьКомплектВнешнимиПечатнымиФормами = Истина;
        КомандаПечати.Порядок = 75;
    КонецЕсли;
    
    // Счет на оплату в документ Adobe PDF.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "Счет";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в документ Adobe PDF'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматPDF;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.ФорматСохранения = ТипФайлаТабличногоДокумента.PDF;
    
    // Счет на оплату в формате Office Open XML
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "СчетНаОплату(OfficeOpenXML)";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в Office Open XML'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    
    
    // Счет на оплату в формате Office Open XML (на основе СКД)
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.МенеджерПечати = "УправлениеПечатью";
    КомандаПечати.Идентификатор = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_DOC_СчетНаОплатуСКД_ru";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в Office Open XML (на основе СКД)'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    
    // Счет на оплату в Microsoft Word.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "СчетНаОплату(MSWord)";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в Microsoft Word (для обратной совместимости)'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Обработчик = "_ДемоСтандартныеПодсистемыКлиент.ПечатьСчетовНаОплатуПокупателю";
    
    // Счет на оплату в OpenOffice.org Writer.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "СчетНаОплату(ODT)";
    КомандаПечати.Представление = НСтр("ru = 'Счет на оплату в OpenOffice.org Writer (для обратной совместимости)'");
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматOpenOfficeWriter;
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Обработчик = "_ДемоСтандартныеПодсистемыКлиент.ПечатьСчетовНаОплатуПокупателю";
    
    // Локализация
    // Квитанция на оплату с QR кодом.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "Квитанция";
    КомандаПечати.Представление = НСтр("ru = 'Квитанция (с QR кодом)'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Порядок = 85;
    // Конец Локализация

    // Печатная форма с ошибкой формирования.
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.Идентификатор = "ПечатнаяФормаСОшибкой";
    КомандаПечати.Представление = НСтр("ru = 'Печатная форма с ошибкой формирования'");
    КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
    КомандаПечати.Порядок = 100;
    
КонецПроцедуры

```

</details>

В `модуле менеджера` реализуем процедуру `Печать`:

```bsl

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

    ИдентификаторКоманды = "Заказ";
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИдентификаторКоманды);
    Если ПечатнаяФорма <> Неопределено Тогда
        // ПечатьСчетаЗаказа - функция, возвращающая заполненный табличный документ
        ПечатнаяФорма.ТабличныйДокумент = ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати, "Заказ"); 
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Заказ покупателя'");
        ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ";
    КонецЕсли;

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

```

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Пример печати (Демо)</summary>

```bsl

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов - см. УправлениеПечатьюПереопределяемый.ПриПечати.МассивОбъектов
//  ПараметрыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыПечати
//  КоллекцияПечатныхФорм - см. УправлениеПечатьюПереопределяемый.ПриПечати.КоллекцияПечатныхФорм
//  ОбъектыПечати - см. УправлениеПечатьюПереопределяемый.ПриПечати.ОбъектыПечати
//  ПараметрыВывода - см. УправлениеПечатьюПереопределяемый.ПриПечати.ПараметрыВывода
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    // печать счета на оплату
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "СчетНаОплату(OfficeOpenXML)");
    Если ПечатнаяФорма <> Неопределено Тогда
        
        ИмяМакета = "СчетНаОплату(OfficeOpenXML)";
        МакетИДанныеОбъекта = УправлениеПечатью.МакетыИДанныеОбъектовДляПечати("Документ._ДемоСчетНаОплатуПокупателю", 
            ИмяМакета, МассивОбъектов);
        
        ОфисныеДокументы = Новый Соответствие;
        
        Шаблон = НСтр("ru = '[Организация]-[Контрагент] Счет №[Номер] от [Дата]'");
        ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, 
            "Организация,Контрагент,Номер,Дата,Ссылка");
        Для Каждого Ссылка Из МассивОбъектов Цикл
            
            ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка];
            ЗначенияРеквизитовДокумента.Дата = Формат(ЗначенияРеквизитовДокумента.Дата, "ДЛФ=D");
            ЗначенияРеквизитовДокумента.Номер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер);
            ИмяДокумента = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]);
            
            АдресХранилищаОфисныйДокумент = НапечататьСчетНаОплатуПокупателю(Ссылка, МакетИДанныеОбъекта, ИмяМакета);
            
            ОфисныеДокументы.Вставить(АдресХранилищаОфисныйДокумент, ИмяДокумента);
            
        КонецЦикла;
        
        ПечатнаяФорма.СинонимМакета    = НСтр("ru = 'Счет на оплату'");
        ПечатнаяФорма.ОфисныеДокументы = ОфисныеДокументы;
        
    КонецЕсли;
    
    // печать счета на оплату
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Счет");
    Если ПечатнаяФорма <> Неопределено Тогда
        // имена файлов
        ИменаФайлов = Новый Соответствие;
        Шаблон = НСтр("ru = '[Организация]-[Контрагент] Счет №[Номер] от [Дата]'");
        ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, 
            "Организация,Контрагент,Номер,Дата,Ссылка");
        Для Каждого Ссылка Из МассивОбъектов Цикл
            ЗначенияРеквизитовДокумента = ЗначенияРеквизитовДокументов[Ссылка];
            ЗначенияРеквизитовДокумента.Дата = Формат(ЗначенияРеквизитовДокумента.Дата, "ДЛФ=D");
            ЗначенияРеквизитовДокумента.Номер = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ЗначенияРеквизитовДокумента.Номер);
            ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]);
            ИменаФайлов.Вставить(Ссылка, ИмяФайла);
        КонецЦикла;
        
        // описание печатной формы
        ВыводитьПлатежныеРеквизиты = Истина;
        Если ПараметрыПечати.Свойство("ВыводитьПлатежныеРеквизиты") Тогда
            ВыводитьПлатежныеРеквизиты = ПараметрыПечати.ВыводитьПлатежныеРеквизиты;
        КонецЕсли;
        ПечатнаяФорма.ТабличныйДокумент = ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати, "Счет", 
            ВыводитьПлатежныеРеквизиты, ПараметрыВывода.КодЯзыка);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Счет на оплату'");
        ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ";
        ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИменаФайлов;
        ПечатнаяФорма.ДоступенВыводНаДругихЯзыках = Истина;
    КонецЕсли;
    
    // печать заказа покупателя
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Заказ");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = ПечатьСчетаЗаказа(МассивОбъектов, ОбъектыПечати, "Заказ");
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Заказ покупателя'");
        ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_СчетЗаказ";
    КонецЕсли;
    
    // Локализация
    // печать квитанции
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Квитанция");
    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = ПечатьКвитанции(МассивОбъектов, ОбъектыПечати);
        ПечатнаяФорма.СинонимМакета = НСтр("ru = 'Квитанция (с QR кодом)'");
        ПечатнаяФорма.ПолныйПутьКМакету = "Документ._ДемоСчетНаОплатуПокупателю.ПФ_MXL_Квитанция";
    КонецЕсли;
    // Конец Локализация
    
    // Параметры отправки печатных форм по электронной почте.
    ПриОпределенииПолучателей(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
КонецПроцедуры

```

</details>


### Макет open office XML (DOC)

Макет - обычный офисный документ, в котором особым образом выделены области и параметры.
Макет может быть создан в Microsoft Word, OpenOffice, Google Docs и др.

Области выделяются блоком вида 
```
{v8 Область.<ИмяОбласти>}

{/v8 Область.<ИмяОбласти>}
```

Параметры выделяются маркером вида `{v8 <ИмяПараметра>}`

Области могут быть следующих типов:

![Изображение](/bsp-pechat/9.png)

В `модуле менеджера`:
- Создаем команды печати
```bsl

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт

    // формирование печатной формы в коде (Open Office XML)
    КомандаПечати = КомандыПечати.Добавить();
    КомандаПечати.МенеджерПечати = "Документ.ЗаказКлиента";
    КомандаПечати.Идентификатор = "КоммерческоеПредложение";
    КомандаПечати.Картинка = БиблиотекаКартинок.ФорматWord2007;
    КомандаПечати.Представление = НСтр("ru = 'Коммерческое предложение (кодом)'");
    КомандаПечати.Порядок = 4;

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

```
- Реализуем метод `Печать`

```bsl

// Формирует печатные формы.
//
// Параметры:
//  МассивОбъектов – Массив – ссылки на объекты, которые нужно распечатать;
//  ПараметрыПечати – Структура – дополнительные настройки печати;
//  КоллекцияПечатныхФорм – ТаблицаЗначений – сформированные табличные документы (выходной параметр)
//  ОбъектыПечати – СписокЗначений – значение – ссылка на объект;
//                                            представление – имя области, в которой был выведен объект (выходной параметр);
//  ПараметрыВывода – Структура – дополнительные параметры сформированных табличных документов (выходной параметр).
//
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "КоммерческоеПредложение");
    Если ПечатнаяФорма <> Неопределено Тогда
        //   * ОфисныеДокументы - Соответствие из КлючИЗначение - коллекция печатных форм в формате офисных документов:
        //                         ** Ключ - Строка - адрес во временном хранилище двоичных данных печатной формы;
        //                         ** Значение - Строка - имя файла печатной формы.
        ПечатнаяФорма.ОфисныеДокументы	= ПечатьКоммерческогоПредложения(МассивОбъектов);
        ПечатнаяФорма.СинонимМакета		= "Коммерческое предложение";
    КонецЕсли;

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

Функция СформироватьОфисныйДокумент(Ссылка)
  
     // Подготавливаем макет для формирования печатной формы OpenXML
    МакетДокумента = ПолучитьМакет("ПФ_DOCX_КомерческоеПредложение");
    Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(МакетДокумента, Неопределено);
    
    // Создаем структуру областей формируемой печатной формы OpenXМL
    ОписаниеОбластей = Новый Структура;
    УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Заголовок",	 "Общая");
    УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Шапка",		 "Общая");
    УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "ШапкаТаблицы",	 "Общая");
    УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблицы", "СтрокаТаблицы");
    УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подвал",		 "Общая");
    
    // Подготавливаем печатную форму в формате офисного документа
    ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Неопределено, Макет);

    //получаем данные документа
    Запрос = Новый Запрос;
    Запрос.Текст = ТекстЗапроса(); // какой-то запрос
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    ДанныеДляПечати = Запрос.ВыполнитьПакет();

    Шапка = ДанныеДляПечати[0].Выгрузить();
    Товары = ДанныеДляПечати[1].Выгрузить();
    
    ДанныеШапка = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Шапка[0]);
    ДанныеШапка["Номер"] = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеШапка["Номер"], Истина, Истина);
    ДанныеШапка["Дата"] = Формат(ДанныеШапка["Дата"], "ДФ=dd.MM.yyyy");
    
    ВидКИ_ТелефонОрганизации = Справочники.ВидыКонтактнойИнформации.ТелефонОрганизации;
    ВидКИ_СайтОрганизации = Справочники.ВидыКонтактнойИнформации.СайтОрганизации;
    
    ТелефонОрганизации = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеШапка.Организация, ВидКИ_ТелефонОрганизации, ТекущаяДата());
    СайтОрганизации = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ДанныеШапка.Организация, ВидКИ_СайтОрганизации, ТекущаяДата());

    ДанныеШапка.Вставить("ТелефонОрганизации", ТелефонОрганизации);
    ДанныеШапка.Вставить("СайтОрганизации", СайтОрганизации);
    
    ДанныеТовары = ОбщегоНазначения.ТаблицаЗначенийВМассив(Товары);
    
    // Вывод заголовка
    Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Заголовок"]);
    УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеШапка);
        
    // Вывод шапки документа
    Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Шапка"]);
    УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеШапка);
    
    // Вывод таблицы
    Если ДанныеТовары.Количество() > 0 Тогда
        // Шапка
        Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["ШапкаТаблицы"]);
        УправлениеПечатью.ПрисоединитьОбласть(ПечатнаяФорма, Область, Ложь);

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

    // Вывод подвала
    Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Подвал"]);
    УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеШапка);

    // Помещаем сформированную печатную форму в соответствие ОфисныеДокументы
    АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);
    
    //удаление временных файлов
    УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма);	
    УправлениеПечатью.ОчиститьСсылки(Макет);

    Возврат АдресХранилищаПечатнойФормы;
    
КонецФункции // СформироватьОфисныйДокумент()

```

## Дополнительно

<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">
<summary style="font-weight: bold; cursor: pointer;">Описание свойств команды печати</summary>
    
```bsl
// Создает пустую таблицу с описанием команд печати.
// Таблица команд печати передается в процедуры ДобавитьКомандыПечати, 
// размещенные в модулях менеджеров объектов конфигурации, которые перечислены в процедуре
// УправлениеПечатьюПереопределяемый.ПриОпределенииОбъектовСКомандамиПечати.
// 
// Возвращаемое значение:
//  ТаблицаЗначений:
//
//   * Идентификатор - Строка - идентификатор команды печати, по которому менеджер печати определяет печатную
//                             форму, которую необходимо сформировать.
//                             Например, "СчетЗаказ".
//
//                              Для печати нескольких печатных форм можно указывать одновременно несколько их
//                              идентификаторов (строкой, через запятую либо массивом строк), например:
//                              "СчетЗаказ,ГарантийноеПисьмо".
//
//                              Если необходимо задать количество копий печати для печатной формы, то ее
//                              идентификатор нужно продублировать столько раз, сколько копий необходимо
//                              сформировать. При этом следует учитывать, что порядок следования печатных
//                              форм в комплекте будет соответствовать порядку идентификаторов печатных форм,
//                              указанных в этом параметре. Например (2 счета на оплату + 1 гарантийное письмо):
//                              "СчетЗаказ,СчетЗаказ,ГарантийноеПисьмо".
//
//                              Идентификатор печатной формы может содержать в себе и альтернативный менеджер
//                              печати, если он отличается от указанного в параметре МенеджерПечати,
//                              например: "СчетЗаказ,Обработка.ПечатнаяФорма.ГарантийноеПисьмо".
//
//                              В этом примере ГарантийноеПисьмо формируется в менеджере печати
//                              Обработка.ПечатнаяФорма, а СчетЗаказ - в менеджере печати, указанном в
//                              параметре МенеджерПечати.
//                              
//                              Для печатных форм, менеджером печати которых является общий модуль
//                             "УправлениеПечатью", в качестве идентификатора необходимо указать полный путь к макету.
//                             Например, "Документ.СчетНаОплатуПокупателю.ПФ_MXL_СчетНаОплату".
//
//                   - Массив - список идентификаторов команд печати.
//
//   * Представление - Строка            - представление команды в меню Печать. 
//                                         Например, "Счет на оплату".
//
//   * МенеджерПечати - Строка           - (необязательный) имя объекта, в модуле менеджера которого располагается
//                                        процедура Печать, формирующая табличные документы для этой команды.
//                                        Если печатная форма формируется автоматически по данным печати и макету, то
//                                        в параметре необходимо указать общий модуль "УправлениеПечатью".
//                                        Значение по умолчанию - имя модуля менеджера объекта.
//                                        Например, "Документ.СчетНаОплатуПокупателю".
//   * ТипыОбъектовПечати - Массив       - (необязательный) список типов объектов, для которых предназначена команда
//                                        печати. Параметр предназначен для команд печати в журналах документов, где
//                                        требуется проверка передаваемого типа объекта перед вызовом менеджера печати.
//                                        Если список не заполнен, то при автоматическом создании списка команд печати
//                                        в журнале документов он заполняется типом объекта, из которого была
//                                        импортирована команда печати.
//
//   * Обработчик    - Строка            - (необязательный) клиентский обработчик команды, в который необходимо передать
//                                        управление вместо стандартного обработчика команды Печать. Используется,
//                                        например, когда печатная форма формируется на клиенте.
//                                        Формат "<ИмяОбщегоМодуля>.<ИмяПроцедуры>" используется, когда процедура размещена
//                                        в общем модуле.
//                                        Формат "<ИмяПроцедуры>" используется, когда процедура размещена
//                                        в модуле основной формы отчета или обработки, указанной в МенеджерПечати.
//                                        Например,
//                                          КомандаПечати.Обработчик = "ЗащитаПерсональныхДанныхКлиент.ОткрытьФормуСогласиеНаОбработкуПерсональныхДанных";
//                                        Пример обработчика в модуле формы:
//                                          // Формирует печатную форму <представление печатной формы>.
//                                          //
//                                          // Параметры:
//                                          //   ПараметрыПечати - Структура - сведения о печатной форме.
//                                          //       * ОбъектыПечати - Массив - массив ссылок выбранных объектов.
//                                          //       * Форма - ФормаКлиентскогоПриложения - форма, из которой вызвана
//                                          //                                              команда печати.
//                                          //       * ДополнительныеПараметры - Структура - дополнительные параметры печати.
//                                          //       Прочие ключи структуры соответствуют колонкам таблицы КомандыПечати,
//                                          //       подробнее см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//                                          //
//                                          &НаКлиенте
//                                          Функция <ИмяФункции>(ПараметрыПечати) Экспорт
//                                          	// Обработчик печати.
//                                          КонецФункции
//                                        Следует иметь в виду, что обработчик вызывается при помощи метода Вычислить,
//                                        поэтому в качестве обработчика может выступать только функция.
//                                        При этом возвращаемое значение функции никак в дальнейшем не используется подсистемой.
//
//   * Порядок       - Число             - (необязательный) Значение от 1 до 100, указывающее порядок размещения команды
//                                        по отношению к другим командам. Сортировка команд меню Печать осуществляется
//                                        сначала по полю Порядок, затем по представлению.
//                                        Значение по умолчанию - 50.
//
//   * Картинка      - Картинка          - (необязательный) Картинка, которая отображается возле команды в меню Печать.
//                                         Например, БиблиотекаКартинок.ФорматPDF.
//
//   * СписокФорм    - Строка            - (необязательный) Имена форм через запятую, в которых должна отображаться
//                                        команда. Если параметр не указан, то команда печати будет отображаться во
//                                        всех формах объекта, где встроена подсистема Печать.
//                                         Например, "ФормаДокумента".
//
//   * МестоРазмещения - Строка          - (необязательный) Имя группы формы, в которую необходимо разместить
//                                        команду печати. Параметр необходимо использовать только в случае, когда на
//                                        форме размещается более одного подменю "Печать". В остальных случаях место
//                                        размещения необходимо задавать в модуле формы при вызове
//                                        метода ПодключаемыеКоманды.ПриСозданииНаСервере.
//                                        
//   * ЗаголовокФормы  - Строка          - (необязательный) Произвольная строка, переопределяющая стандартных заголовок
//                                        формы "Печать документов". Например, "Настраиваемый комплект".
//
//   * ФункциональныеОпции - Строка      - (необязательный) Имена функциональных опций через запятую, от которых зависит
//                                        доступность команды печати.
//
//   * УсловияВидимости - Массив         - (необязательный) Коллекция условий видимости команды в зависимости от
//                                        контекста. Условия видимости команды задаются при помощи процедуры 
//                                        ДобавитьУсловиеВидимостиКоманды.
//                                        Если параметр не задан, команда видна вне зависимости от контекста.
//                                        
//   * ПроверкаПроведенияПередПечатью    - Булево - (необязательный) Признак необходимости проверки проведенности
//                                        документов перед печатью. Если выбран хотя бы один непроведенный документ, то
//                                        перед выполнением команды печати возникает диалог проведения.
//                                        Для непроведенных документов команда печати не выполняется.
//                                        Если параметр не указан, то проверка проведенности не выполняется.
//
//   * СразуНаПринтер - Булево           - (необязательный) Признак необходимости печати документов без предварительного
//                                        просмотра, сразу на принтер. Если параметр не указан, то при выборе команды
//                                        печати открывается форма предварительного просмотра "Печать документов".
//
//   * ФорматСохранения - ТипФайлаТабличногоДокумента - (необязательный) Применяется для быстрого сохранения печатной
//                                        формы (без дополнительных действий) в различные форматы, отличные от mxl.
//                                        Если параметр не указан, то формируется обычный mxl.
//                                        Например, ТипФайлаТабличногоДокумента.PDF.
//
//                                        При выборе команды печати сразу открывается сформированный в формате pdf
//                                        документ.
//
//   * ПереопределитьПользовательскиеНастройкиКоличества - Булево - (необязательный) Признак необходимости отключения в
//                                        форме ПечатьДокументов механизма сохранения/восстановления выбранного
//                                        пользователем количества экземпляров на печать. Если параметр не указан, то
//                                        механизм сохранения/восстановления настроек будет работать при открытии формы.
//                                        ПечатьДокументов.
//
//   * ДополнитьКомплектВнешнимиПечатнымиФормами - Булево - (необязательный) Признак необходимости дополнить комплект
//                                        документов всеми подключенными к объекту внешними печатными формами
//                                        (подсистема ДополнительныеОтчетыИОбработки). Если параметр не указан, внешние
//                                        печатные формы не добавляются в комплект.
//
//   * ФиксированныйКомплект - Булево    - (необязательный) Признак необходимости блокировки от изменения пользователем
//                                        состава комплекта документов. Если параметр не указан, то пользователь сможет
//                                        исключать отдельные печатные формы из комплекта в форме ПечатьДокументов, а
//                                        также изменять их количество.
//
//   * ДополнительныеПараметры - Структура - (необязательный) произвольные параметры для передачи в менеджер печати.
//
//   * НеВыполнятьЗаписьВФорме - Булево  - (необязательный) Признак необходимости отключения механизма записи объекта
//                                        перед выполнением команды печати. Используется в исключительных случаях. Если
//                                        параметр не указан, производится запись объекта в случае, если в форме
//                                        объекта установлен признак модифицированности.
//
//   * ТребуетсяРасширениеРаботыСФайлами - Булево - (необязательный) Признак необходимости подключения расширения для работы 
//                                        с 1С:Предприятием перед выполнением команды. Если параметр не указан, расширение
//                                        подключаться не будет.
//
//   * ОсновнаяПечатнаяФорма             - Булево - (необязательный) Признак определяющий возможность запоминания
//                                        наименований сформированных печатных форм.
//
//   * НаименованиеПечатнойФормы         - Строка - (необязательный) Наименование, которое будет сохранено при установленном
//                                         признаке "ОсновнаяПечатнаяФорма". Если не заполнено, будет запоминаться значение
//                                         из поля "Представление".
//
Функция СоздатьКоллекциюКомандПечати() Экспорт
```

</details>