---
title: Вывод настроек печати перед печатью на примере дополнительной внешней ПФ акта
  сверки взаиморасчетов
slug: примеры-сниппеты-бсп-и-типовые-механизмы-печати/вывод-настроек-печати-перед-печатью-на-примере-дополнительной-внешней-пф-акта-сверки-взаиморасчетов
---

# Сведения о внешней обработке
```bsl
Функция СведенияОВнешнейОбработке() Экспорт
	
	// Версия БСП, на которой велась разработка - 3.1.9.302
	
	ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
	
    МассивНазначений = Новый Массив;
	МассивНазначений.Добавить("Документ.СверкаВзаиморасчетов");
 
    ПараметрыРегистрации.Назначение = МассивНазначений;
    ПараметрыРегистрации.Наименование = "Акт сверки взаимных расчетов (развернутое сальдо)";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Версия = "1.0.1.1";    
    ПараметрыРегистрации.Информация = "Акт сверки взаимных расчетов с развернутым сальдо";
 
	ПараметрыРегистрации.Команды.Колонки.Добавить("ПроверкаПроведенияПередПечатью", Новый ОписаниеТипов("Булево"));
	
	Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Акт сверки взаимных расчетов (развернутое сальдо)";
    Команда.Идентификатор = " СН_АктСверкиВзаимныхРасчетовРазвернутоеСальдо";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода(); // ВАЖНО
    Команда.ПоказыватьОповещение = Истина;
	Команда.Модификатор = "ПечатьMXL";
	Команда.ПроверкаПроведенияПередПечатью = Истина;
	
    Возврат ПараметрыРегистрации;
	
КонецФункции  
```
# Формы внешней обработки
В создаем 2 формы — основная форма для отладки, и форма настроек печати для вызова перед печатью. Форму настроек печати просто копируем из типовой конфигурации. Основная форма будет открываться только при явном открытии файла внешней обработки.
Добавляем на основную форму реквизит с типом необходимого документа и команду «Печать»
![image-12.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=5d781369-bfa1-4db3-8dcf-e4abd6c57bf2.png)
![image-13.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=d87c1613-5ee7-4843-b61e-d73af33a7ee4.png)
## Основная форма
В модуле основной формы реализуем интерфейсный метод «Печать», который будет искать механизм БСП. В нем передаем нужные параметры и открываем форму настроек.
```bsl
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, МассивОбъектов) Экспорт
		
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ИдентификаторКоманды", ИдентификаторКоманды);
	ПараметрыФормы.Вставить("МассивОбъектов", МассивОбъектов);
 
	ОткрытьФорму("ВнешняяОбработка.<ИмяВнешнейОбработки>.Форма.НастройкаПечати",ПараметрыФормы);
	
КонецПроцедуры
 
&НаКлиенте
Процедура ТестПечати(Команда)
	
	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ИдентификаторКоманды", "");
	МассивОбъектов = Новый Массив;
	МассивОбъектов.Добавить(СверкаВзаимныхРасчетов); 
	ПараметрыФормы.Вставить("МассивОбъектов", МассивОбъектов);
 
	ОткрытьФорму("ВнешняяОбработка.<ИмяВнешнейОбработки>.Форма.НастройкаПечати",ПараметрыФормы);
КонецПроцедуры
```
## Форма настроек печати
В скопированную форму настроек (в моем случае форма настроек документа «Сверка взаиморасчетов») добавляем реквизит `«Объект»`, с типом `«(ВнешняяОбработка.<ИмяВнешнейОбработки>)»`. Этот реквизит нужен для обращения к методам модуля объекта внешней обработки.

Также добавляем реквизит с типом `«Список значений»`, куда будут записываться ссылки на документы, которые необходимо напечатать. В модуле формы `при создании на сервере` необходимо прописать заполнение этого реквизита
![image-14.png](https://sinenikolsky.ru/s/QEWSKmHn7HKGJX4/download?path=%2F2025%2F04%2F16&files=1bce3405-6d36-49ae-9a6a-26da857b8de7.png)
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    ...
	// типовой код
	...

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

# Модуль объекта обработки
В модуле объекта внешней обработки реализуем методы печати
```bsl
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
 
	ИдентификаторКомандыПечати = "СН_АктСверкиВзаимныхРасчетовРазвернутоеСальдо";
 
	ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, ИдентификаторКомандыПечати);
	Если ПечатнаяФорма <> Неопределено Тогда
	    ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатнуюФормуАктСверкиВзаиморасчетов(МассивОбъектов, ОбъектыПечати);
	    ПечатнаяФорма.СинонимМакета = "Акт сверки взаимных расчетов (развернутое сальдо)";
	КонецЕсли;
 
	ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
	
КонецПроцедуры
```
Дальше — все как обычно. Получаем нужные данные, формируем ТабДок и т.д. В примере все это вызывается методом `СформироватьПечатнуюФормуАктСверкиВзаиморасчетов`