В последних версиях ЗУП печатные формы для документов Т1, Т1а, Т5, Т5а, Т6, Т6а, Т8, Т8а, Т9, Т9а, Т11 вынесены в отчеты и сделаны на СКД
Возможно ли обращение к этим отчетам из внешней печатной формы для получения данных и подстановкой в свой макет?
---
Ниже пример решения задачи подмены типового макета Т53 на свой, причем можно печатать из списка
платежек сразу несколько выделенных документов как и работает типовая печать, но при определенных
(в коде расширения) условиях для одних видов оплаты будет типовой макет, для других расширенный.
На БСП через доппечформы такой финт не прокатит, а в расширении да.

Главная морока в совмещении геометрии макетов по ширине, т.к. при печати нескольких документов -
все выводятся в один табличный документ согласно типовой печати или печатать документы по одному, если лень заморачиваться.

по комментариям в коде все должно быть ясно

```1c
    // Расширение: ОбщийМодуль.ВедомостьНаВыплатуЗарплатыБазовый ЗУП: 3.1.8.155
    //

    #Область Расш1_ЧД_ПечатьТ53

    &Вместо("ПечатьТ53")
    Функция Расш1_ЧДПечатьТ53(МассивОбъектов, ОбъектыПечати)

    // Определим массив способов оплаты относительно которых есть необходимость использования макетов из расширения
    мСпособыВыплатыПодписьПоРасчетныйЛистДа = Новый Массив;
    мСпособыВыплатыПодписьПоРасчетныйЛистДа.Добавить(ПредопределенноеЗначение("Справочник.СпособыВыплатыЗарплаты.Зарплата"));
    // Расширим массив способами оплаты у которых поле ВидДокументаОснования = {ПредопределенноеЗначение("Перечисление.ВидыДокументовМежрасчетныхНачислений.Увольнение"),...};
    Запрос = Новый Запрос; // Запрос, чтобы сработало РЛС, если некоторые виды выплат запрещены расчетчику
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | СпособыВыплатыЗарплаты.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.СпособыВыплатыЗарплаты КАК СпособыВыплатыЗарплаты
    |ГДЕ
    | СпособыВыплатыЗарплаты.ВидДокументаОснования В(&ВидДокументаОснования)";
    Запрос.УстановитьПараметр("ВидДокументаОснования", ПредопределенноеЗначение("Перечисление.ВидыДокументовМежрасчетныхНачислений.Увольнение"));
    ЗапросВыборка = Запрос.Выполнить().Выбрать();
    Пока ЗапросВыборка.Следующий() Цикл
    мСпособыВыплатыПодписьПоРасчетныйЛистДа.Добавить(ЗапросВыборка.Ссылка);
    КонецЦикла;

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

    // Выполнение метода печати из расширения или основной кнофигурации
    Если ИспользоватьМакетыРасширения Тогда
    Результат = Расш1_ЧДПечатьТ53_ПодписьПоРасчетныйЛистДа(МассивОбъектов, ОбъектыПечати, мСпособыВыплатыПодписьПоРасчетныйЛистДа);
    Иначе
    Результат = ПродолжитьВызов(МассивОбъектов, ОбъектыПечати); // Не импользуем макеты расширения и выполняется код основной конфигурации
    КонецЕсли;

    Возврат Результат;

    КонецФункции

    //
    // Код функция является копией метода основной конфигурации ПечатьТ53(МассивОбъектов, ОбъектыПечати)
    //
    // Модификации
    // 1. дополнительный параметр вызова "мСпособыВыплатыПодписьПоРасчетныйЛистДа"
    //
    // 2. Модификаций в коде которые выделены тегами
    //
    // ≪✔ - Фрагмент кода удален (если закомментирован) или будет переопределен добавленными фрагментами (если не закомментирован)
    // ≫✔ - Фрагмент кода добавлен
    //
    Функция Расш1_ЧДПечатьТ53_ПодписьПоРасчетныйЛистДа(МассивОбъектов, ОбъектыПечати, мСпособыВыплатыПодписьПоРасчетныйЛистДа)

    ПутьКМакету = "ОбщийМакет.ПФ_MXL_Т53";

    Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя];

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВедомостьНаВыплатуЗарплатыВКассу_Т53";

    Макет = УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету); // ≪✔ - Фрагмент кода будет переопределен далее
    НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();

    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();

    // получаем данные для печати
    ВыборкаШапок = Менеджер.ВыборкаДляПечатиШапки(МассивОбъектов);
    ВыборкаСтрок = Менеджер.ВыборкаДляПечатиТаблицы(МассивОбъектов);

    // Структура параметров областей стандартного макета для помещения данных печати
    ДанныеПечати = УправлениеПечатьюБЗК.ПараметрыОбластейСтандартногоМакета(ПутьКМакету);

    ПервыйДокумент = Истина;
    Пока ВыборкаШапок.Следующий() Цикл

    // ≫✔▼ Фрагмент кода добавлен ▼
    // Для печати могут выделены платежки с разными видами оплаты: ВыплатаЗП, Увольнение, Отпуск...Поэтому логично макет печати подменять именно тут.
    // Определяем макет в зависимости от вхождения в массив мСпособыВыплатыПодписьПоРасчетныйЛистДа
    Если мСпособыВыплатыПодписьПоРасчетныйЛистДа.Найти(ВыборкаШапок.Ссылка.СпособВыплаты) = Неопределено Тогда
    Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.Расш1_ЧДПФ_MXL_Т53_ПодписьПоРасчетныйЛистНет"); // Это фактически скопированный в расширение типовой макет Т53. ПродолжитьВызов() тут недоступен, а простое копирование типового макета позволит выполнить типовую печать. Если стандартный макет не "пилим", то его можно не копировать в расширении и эту строку закомментровать.
    Иначе
    Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.Расш1_ЧДПФ_MXL_Т53_ПодписьПоРасчетныйЛистДа"); // Это макет с дополнительной колонкой "Подпись о получение расчетного листа". Это мекет для платежек с видом оплаты "ВыплатаЗП" и "Увольнение" см. Расш1_ЧДПечатьТ53()
    КонецЕсли;
    // ВАЖНО. Когда одновременно выбраны для печати документы и с типовым макетом(Оплата отупуска) и с расшиеренным макетом (Выплата ЗП), то
    // ширина таблиц макетов должна быть синхронизирована, что легко проверить при просмотре выводимого табличного документа.
    // ≫✔▲ Фрагмент кода добавлен ▲

    // Документы нужно выводить на разных страницах.
    Если Не ПервыйДокумент Тогда
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ПервыйДокумент = Ложь;

    // Запомним номер строки, с которой начали выводить текущий документ.
    НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

    // Подсчитываем количество страниц документа - для корректного разбиения на страницы.
    ВсегоСтрокДокумента = ВыборкаСтрок.Количество();

    ОбластьМакетаШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьМакетаШапкаТаблицы = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакетаСтрокаТаблицы = Макет.ПолучитьОбласть("Строка");
    ОбластьМакетаИтогПоСтранице = Макет.ПолучитьОбласть("ИтогПоЛисту");
    ОбластьМакетаПодвалДокумента = Макет.ПолучитьОбласть("Подвал");

    // Массив с двумя строками - для разбиения на страницы.
    ВыводимыеОбласти = Новый Массив();
    ВыводимыеОбласти.Добавить(ОбластьМакетаСтрокаТаблицы);
    ВыводимыеОбласти.Добавить(ОбластьМакетаИтогПоСтранице);

    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.ШапкаДокумента);
    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.Подвал);

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

    ДанныеПечати.ШапкаДокумента.СообщениеОНеприменимостиПечатнойФормы =
    ЗарплатаКадры.СообщениеОНеприменимостиПечатнойФормы(
    ВыборкаШапок.Дата,
    '20150619',
    НСтр("ru='Приказа Минфина РФ'"),
    '20150330',
    "52н");

    Если ВыборкаШапок.СуммаПоДокументу <> 0 Тогда
    ДанныеПечати.ШапкаДокумента.СуммаДок = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ВыборкаШапок.СуммаПоДокументу, ВалютаУчета);
    ДанныеПечати.ШапкаДокумента.СуммаДокРублей = Цел(ВыборкаШапок.СуммаПоДокументу);
    ДанныеПечати.ШапкаДокумента.СуммаДокКопеек = (ВыборкаШапок.СуммаПоДокументу - Цел(ВыборкаШапок.СуммаПоДокументу)) * 100
    КонецЕсли;

    // Подвал документа.
    ЗаполнитьЗначенияСвойств(ДанныеПечати.Подвал, ВыборкаШапок);
    // Строка не локализуется т.к. является частью регламентированной формы, применяемой в РФ.
    ДанныеПечати.Подвал.РКО = "Расходный кассовый ордер № _______ от "___" ___________ 20 ___ г.";

    ОбластьМакетаШапкаДокумента.Параметры.Заполнить(ДанныеПечати.ШапкаДокумента);

    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаДокумента);
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);

    ВыведеноСтраниц = 1; ВыведеноСтрок = 0; ИтогоНаСтранице = 0; Итого = 0;

    // Выводим данные по строкам документа.
    НомерСтроки = 0;
    ВыборкаСтрок.Сбросить();
    Пока ВыборкаСтрок.НайтиСледующий(ВыборкаШапок.Ссылка, "Ведомость") Цикл

    НомерСтроки = НомерСтроки + 1;

    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.Строка);

    ЗаполнитьЗначенияСвойств(ДанныеПечати.Строка, ВыборкаСтрок);
    ДанныеПечати.Строка.НомерСтроки = НомерСтроки;
    ДанныеПечати.Строка.ТабельныйНомер =
    ЗарплатаКадрыОтчеты.ТабельныйНомерНаПечать(ВыборкаСтрок.ТабельныйНомер);

    Если НастройкиПечатныхФорм.ВыводитьПолныеФИОВСписочныхПечатныхФормах Тогда

    ДанныеПечати.Строка.Физлицо = СокрЛП(ВыборкаСтрок.Фамилия)
    + ?(ПустаяСтрока(ВыборкаСтрок.Имя), ", " " + ВыборкаСтрок.Имя)
    + ?(ПустаяСтрока(ВыборкаСтрок.Отчество), ", " " + ВыборкаСтрок.Отчество);

    Иначе
    ФИО = Новый Структура("Фамилия, Имя, Отчество");
    ФИО.Фамилия = ВыборкаСтрок.Фамилия;
    ФИО.Имя = ВыборкаСтрок.Имя;
    ФИО.Отчество = ВыборкаСтрок.Отчество;
    ДанныеПечати.Строка.Физлицо = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ФИО);
    КонецЕсли;

    ОбластьМакетаСтрокаТаблицы.Параметры.Заполнить(ДанныеПечати.Строка);

    // разбиение на страницы
    ВыведеноСтрок = ВыведеноСтрок + 1;

    // Проверим, уместится ли строка на странице или надо открывать новую страницу.
    ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
    Если Не ВывестиПодвалЛиста И ВыведеноСтрок = ВсегоСтрокДокумента Тогда
    ВыводимыеОбласти.Добавить(ОбластьМакетаПодвалДокумента);
    ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
    КонецЕсли;
    Если ВывестиПодвалЛиста Тогда

    ОбщегоНазначенияБЗККлиентСервер.УстановитьЗначениеСвойства(
    ОбластьМакетаИтогПоСтранице.Параметры, "ИтогоНаСтранице", ИтогоНаСтранице);

    ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);

    ВыведеноСтраниц = ВыведеноСтраниц + 1;
    ИтогоНаСтранице = 0;

    КонецЕсли;

    ТабличныйДокумент.Вывести(ОбластьМакетаСтрокаТаблицы);
    ИтогоНаСтранице = ИтогоНаСтранице + ВыборкаСтрок.Сумма;
    Итого = Итого + ВыборкаСтрок.Сумма;

    КонецЦикла; // по строкам документа

    Если ВыведеноСтрок > 0 Тогда
    ОбщегоНазначенияБЗККлиентСервер.УстановитьЗначениеСвойства(
    ОбластьМакетаИтогПоСтранице.Параметры, "ИтогоНаСтранице", ИтогоНаСтранице);
    КонецЕсли;
    ДанныеПечати.Подвал.КоличествоЛистов = ?(ВыведеноСтрок = 0,",ВыведеноСтраниц + 1);

    ОбластьМакетаПодвалДокумента.Параметры.Заполнить(ДанныеПечати.Подвал);

    // дополняем пустыми строками до конца страницы
    ОбщегоНазначенияБЗК.ОчиститьПараметрыТабличногоДокумента(ОбластьМакетаСтрокаТаблицы);
    ОбластиКонцаСтраницы = Новый Массив();
    ОбластиКонцаСтраницы.Добавить(ОбластьМакетаИтогПоСтранице);
    ОбластиКонцаСтраницы.Добавить(ОбластьМакетаПодвалДокумента);
    ОбщегоНазначенияБЗК.ДополнитьСтраницуТабличногоДокумента(ТабличныйДокумент, ОбластьМакетаСтрокаТаблицы, ОбластиКонцаСтраницы);

    ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
    ТабличныйДокумент.Вывести(ОбластьМакетаПодвалДокумента);

    // В табличном документе необходимо задать имя области, в которую был
    // выведен объект. Нужно для возможности печати покомплектно.
    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);

    КонецЦикла; // по документам

    Возврат ТабличныйДокумент;

    КонецФункции

    #КонецОбласти
```
---
Ну можно сделать на базе этих отчетов свои печатные формы и передать туда параметры программно. Ну это самый простой способ.
Второй программно вызвать отчет и тоже передать параметры
---
Можно пример кода как передать параметры и получить данные? Например на основе этих отчетов?
---
Подскажите на примере ПечатнаяФормаТ5 какой параметр нужно передать?
Пробую "СсылкаНаОбъект", "КлючВарианта" - не получается
---
Пытаюсь делать так:

```1c
    СхемаОст = Отчеты.ПечатнаяФормаТ5.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

    КомпоновщикНастроекНастройки = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроекНастройки.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОст));
    КомпоновщикНастроекНастройки.ЗагрузитьНастройки(СхемаОст.НастройкиПоУмолчанию);

    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Количество());//выводит 2
    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(0).Заголовок);//выводит Ключ варианта
    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(1).Заголовок);//выводит Дата ознакомления работника совпадает с датой приказа
    КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КлючВарианта", ДокПеревод);// проходит
    КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СсылкаНаОбъект", ДокПеревод); // ошибка "Параметр с указанным именем не найден"

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОст, КомпоновщикНастроекНастройки.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ДанныеТЗ = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
```
---
можно макет попробовать подменить, а не выводить в ТЗ. ну и также программно добавить вывод нужных полей в СКД.
НУ или выводить результат в ТЗ и скармливать своей схеме. Все зависит от того что нужно выводить в своих формах
---
1. не могу понять как передать параметр и какой, чтобы для начала получить хоть что-то
2. на выходе хочу получить ТЗ для формирования измененной печатной формы
---
```1c
    НужныйОтчет = Отчеты.СтатистикаПерсонала.Создать();
    КомпоновщикНастроекОтчета = НужныйОтчет.КомпоновщикНастроек;
    НастройкиОтчета = КомпоновщикНастроекОтчета.Настройки;
    НастройкиОтчета.ПараметрыДанных.Элементы.Получить(0).Значение = ПериодОтчета;
```

"НастройкиОтчета.ПараметрыДанных.Элементы" это и есть параметры
---
в отчете "СтатистикаПерсинала" с параметрами более менее понятно (см вложение), но какой параметр передавать в отчет "ПечатнаяФормаТ5"?
Там только "КлючВарианта" и "ДатаОзнакомленияРаботникаСовпадаетСДатойПриказа", как передать документ на основании которого нужно вывести это отчет?
---
а какой релиз ЗУПа ?
---
3.1.8.155
---
под рукой нет сейчас не могу посмотреть. Сделайте скришот настроек
---
Вот скриншоты раздела Настройки
---
ну так СсылкаНаОбъект - это элемент отбора поэтому и надо работать с отбором
---
```1c
    КомпоновщикНастроекОтчета.Настройки.Отбор.Элементы.Получить(ИНДЕКС)
```

индекс можно в отладчике получить через "КомпоновщикНастроекОтчета.Настройки.Отбор.Элементы"
---
ка уже писал в коде выше

```1c
    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Количество());//выводит 2
    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(0).Заголовок);//выводит Ключ варианта
    сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(1).Заголовок);//выводит Дата ознакомления работника совпадает с датой приказа
    КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КлючВарианта", ДокПеревод);// проходит
    КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СсылкаНаОбъект", ДокПеревод); // ошибка "Параметр с указанным именем не найден"
```

на попытку установить параметр СсылкаНаОбъект выдается ошибка "Параметр с указанным именем не найден"
---
вы через отладку посмотрите доступные элементы отбора
---
не через параметрыданных а через отбор. Скрин вкладки "Параметры" еще покажите
---
скрин вкладки параметры
---
все правильно. использовать надо КомпоновщикНастроекОтчета.Настройки.Отбор.Элементы
в отладчике посмотрите что возвращает это выражение
---
```1c
    КомпоновщикНастроекНастройки.Настройки.Отбор.Элементы.Получить(0)
```

выводит (см картинку)

пытаюсь установить отбор

```1c
    ЭлементОтбора = КомпоновщикНастроекНастройки.Настройки.Отбор.Элементы.Получить(0);
    ЭлементОтбора.ПравоеЗначение = Новый СписокЗначений;
    ЭлементОтбора.ПравоеЗначение.Добавить(ДокПеревод);
```

но в результате

```1c
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОст, КомпоновщикНастроекНастройки.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ДанныеТЗ = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
```

пустая таблица
---
элементотбора.правоезначение что в отладчике показывает?
---
и наверно лучше сначал создать и заполнить списокзначений а потом присвоить правому значению
---
элементотбора.правоезначение в отладчике
---
страннно. у меня работает и когда есть поле в отборе и когда нет

```1c
    //поле есть
    ОтборОрганизация = КомпоновщикНастроекОтчета.Настройки.Отбор.Элементы.Get(0);
    ОтборОрганизация.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ОтборОрганизация.ПравоеЗначение = Организации;
    ОтборОрганизация.Использование = Истина;

    //поля нет. добавляем
    НовыйЭлементОтбора = КомпоновщикНастроекОтчета.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйЭлементОтбора.ЛевоеЗначение = КомпоновщикНастроекОтчета.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Сотрудник.ФизическоеЛицо")).Поле;
    НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    СписокФизлиц = Новый СписокЗначений;
    СписокФизлиц.ЗагрузитьЗначения(МассивФизлиц);
    НовыйЭлементОтбора.ПравоеЗначение = СписокФизлиц;
```
---
Печать ПечатьТ53 сейчас в общем модуле(в 3.1.5 была в одном, в 3.1.8 в другом - но это не критично для расширения), я добавил этот метод печати в расширение, подменил там макет и получил, то что хотели

как-то так можно поступать с похожими макетами, время на правку минут 10, причем без мозклюйства.
---
ПечатьТ53
Да, поковыряв вывод Т5 стало понятно, что получение результата СКД дает только малую часть данных и много еще чего придется дописывать.

Подскажите как подменили макет? просто заменив расширении стандартный?
Хотелось бы стандартный оставить
---
Ниже пример решения задачи подмены типового макета Т53 на свой, причем можно печатать из списка
платежек сразу несколько выделенных документов как и работает типовая печать, но при определенных
(в коде расширения) условиях для одних видов оплаты будет типовой макет, для других расширенный.
На БСП через доппечформы такой финт не прокатит, а в расширении да.

Главная морока в совмещении геометрии макетов по ширине, т.к. при печати нескольких документов -
все выводятся в один табличный документ согласно типовой печати или печатать документы по одному, если лень заморачиваться.

по комментариям в коде все должно быть ясно

```1c
    // Расширение: ОбщийМодуль.ВедомостьНаВыплатуЗарплатыБазовый ЗУП: 3.1.8.155
    //

    #Область Расш1_ЧД_ПечатьТ53

    &Вместо("ПечатьТ53")
    Функция Расш1_ЧДПечатьТ53(МассивОбъектов, ОбъектыПечати)

    // Определим массив способов оплаты относительно которых есть необходимость использования макетов из расширения
    мСпособыВыплатыПодписьПоРасчетныйЛистДа = Новый Массив;
    мСпособыВыплатыПодписьПоРасчетныйЛистДа.Добавить(ПредопределенноеЗначение("Справочник.СпособыВыплатыЗарплаты.Зарплата"));
    // Расширим массив способами оплаты у которых поле ВидДокументаОснования = {ПредопределенноеЗначение("Перечисление.ВидыДокументовМежрасчетныхНачислений.Увольнение"),...};
    Запрос = Новый Запрос; // Запрос, чтобы сработало РЛС, если некоторые виды выплат запрещены расчетчику
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | СпособыВыплатыЗарплаты.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.СпособыВыплатыЗарплаты КАК СпособыВыплатыЗарплаты
    |ГДЕ
    | СпособыВыплатыЗарплаты.ВидДокументаОснования В(&ВидДокументаОснования)";
    Запрос.УстановитьПараметр("ВидДокументаОснования", ПредопределенноеЗначение("Перечисление.ВидыДокументовМежрасчетныхНачислений.Увольнение"));
    ЗапросВыборка = Запрос.Выполнить().Выбрать();
    Пока ЗапросВыборка.Следующий() Цикл
    мСпособыВыплатыПодписьПоРасчетныйЛистДа.Добавить(ЗапросВыборка.Ссылка);
    КонецЦикла;

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

    // Выполнение метода печати из расширения или основной кнофигурации
    Если ИспользоватьМакетыРасширения Тогда
    Результат = Расш1_ЧДПечатьТ53_ПодписьПоРасчетныйЛистДа(МассивОбъектов, ОбъектыПечати, мСпособыВыплатыПодписьПоРасчетныйЛистДа);
    Иначе
    Результат = ПродолжитьВызов(МассивОбъектов, ОбъектыПечати); // Не импользуем макеты расширения и выполняется код основной конфигурации
    КонецЕсли;

    Возврат Результат;

    КонецФункции

    //
    // Код функция является копией метода основной конфигурации ПечатьТ53(МассивОбъектов, ОбъектыПечати)
    //
    // Модификации
    // 1. дополнительный параметр вызова "мСпособыВыплатыПодписьПоРасчетныйЛистДа"
    //
    // 2. Модификаций в коде которые выделены тегами
    //
    // ≪✔ - Фрагмент кода удален (если закомментирован) или будет переопределен добавленными фрагментами (если не закомментирован)
    // ≫✔ - Фрагмент кода добавлен
    //
    Функция Расш1_ЧДПечатьТ53_ПодписьПоРасчетныйЛистДа(МассивОбъектов, ОбъектыПечати, мСпособыВыплатыПодписьПоРасчетныйЛистДа)

    ПутьКМакету = "ОбщийМакет.ПФ_MXL_Т53";

    Менеджер = Документы[МассивОбъектов[0].Метаданные().Имя];

    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.АвтоМасштаб = Истина;
    ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    ТабличныйДокумент.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ВедомостьНаВыплатуЗарплатыВКассу_Т53";

    Макет = УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету); // ≪✔ - Фрагмент кода будет переопределен далее
    НастройкиПечатныхФорм = ЗарплатаКадры.НастройкиПечатныхФорм();

    ВалютаУчета = ЗарплатаКадры.ВалютаУчетаЗаработнойПлаты();

    // получаем данные для печати
    ВыборкаШапок = Менеджер.ВыборкаДляПечатиШапки(МассивОбъектов);
    ВыборкаСтрок = Менеджер.ВыборкаДляПечатиТаблицы(МассивОбъектов);

    // Структура параметров областей стандартного макета для помещения данных печати
    ДанныеПечати = УправлениеПечатьюБЗК.ПараметрыОбластейСтандартногоМакета(ПутьКМакету);

    ПервыйДокумент = Истина;
    Пока ВыборкаШапок.Следующий() Цикл

    // ≫✔▼ Фрагмент кода добавлен ▼
    // Для печати могут выделены платежки с разными видами оплаты: ВыплатаЗП, Увольнение, Отпуск...Поэтому логично макет печати подменять именно тут.
    // Определяем макет в зависимости от вхождения в массив мСпособыВыплатыПодписьПоРасчетныйЛистДа
    Если мСпособыВыплатыПодписьПоРасчетныйЛистДа.Найти(ВыборкаШапок.Ссылка.СпособВыплаты) = Неопределено Тогда
    Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.Расш1_ЧДПФ_MXL_Т53_ПодписьПоРасчетныйЛистНет"); // Это фактически скопированный в расширение типовой макет Т53. ПродолжитьВызов() тут недоступен, а простое копирование типового макета позволит выполнить типовую печать. Если стандартный макет не "пилим", то его можно не копировать в расширении и эту строку закомментровать.
    Иначе
    Макет = УправлениеПечатью.МакетПечатнойФормы("ОбщийМакет.Расш1_ЧДПФ_MXL_Т53_ПодписьПоРасчетныйЛистДа"); // Это макет с дополнительной колонкой "Подпись о получение расчетного листа". Это мекет для платежек с видом оплаты "ВыплатаЗП" и "Увольнение" см. Расш1_ЧДПечатьТ53()
    КонецЕсли;
    // ВАЖНО. Когда одновременно выбраны для печати документы и с типовым макетом(Оплата отупуска) и с расшиеренным макетом (Выплата ЗП), то
    // ширина таблиц макетов должна быть синхронизирована, что легко проверить при просмотре выводимого табличного документа.
    // ≫✔▲ Фрагмент кода добавлен ▲

    // Документы нужно выводить на разных страницах.
    Если Не ПервыйДокумент Тогда
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли;
    ПервыйДокумент = Ложь;

    // Запомним номер строки, с которой начали выводить текущий документ.
    НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

    // Подсчитываем количество страниц документа - для корректного разбиения на страницы.
    ВсегоСтрокДокумента = ВыборкаСтрок.Количество();

    ОбластьМакетаШапкаДокумента = Макет.ПолучитьОбласть("ШапкаДокумента");
    ОбластьМакетаШапкаТаблицы = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакетаСтрокаТаблицы = Макет.ПолучитьОбласть("Строка");
    ОбластьМакетаИтогПоСтранице = Макет.ПолучитьОбласть("ИтогПоЛисту");
    ОбластьМакетаПодвалДокумента = Макет.ПолучитьОбласть("Подвал");

    // Массив с двумя строками - для разбиения на страницы.
    ВыводимыеОбласти = Новый Массив();
    ВыводимыеОбласти.Добавить(ОбластьМакетаСтрокаТаблицы);
    ВыводимыеОбласти.Добавить(ОбластьМакетаИтогПоСтранице);

    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.ШапкаДокумента);
    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.Подвал);

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

    ДанныеПечати.ШапкаДокумента.СообщениеОНеприменимостиПечатнойФормы =
    ЗарплатаКадры.СообщениеОНеприменимостиПечатнойФормы(
    ВыборкаШапок.Дата,
    '20150619',
    НСтр("ru='Приказа Минфина РФ'"),
    '20150330',
    "52н");

    Если ВыборкаШапок.СуммаПоДокументу <> 0 Тогда
    ДанныеПечати.ШапкаДокумента.СуммаДок = РаботаСКурсамиВалют.СформироватьСуммуПрописью(ВыборкаШапок.СуммаПоДокументу, ВалютаУчета);
    ДанныеПечати.ШапкаДокумента.СуммаДокРублей = Цел(ВыборкаШапок.СуммаПоДокументу);
    ДанныеПечати.ШапкаДокумента.СуммаДокКопеек = (ВыборкаШапок.СуммаПоДокументу - Цел(ВыборкаШапок.СуммаПоДокументу)) * 100
    КонецЕсли;

    // Подвал документа.
    ЗаполнитьЗначенияСвойств(ДанныеПечати.Подвал, ВыборкаШапок);
    // Строка не локализуется т.к. является частью регламентированной формы, применяемой в РФ.
    ДанныеПечати.Подвал.РКО = "Расходный кассовый ордер № _______ от "___" ___________ 20 ___ г.";

    ОбластьМакетаШапкаДокумента.Параметры.Заполнить(ДанныеПечати.ШапкаДокумента);

    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаДокумента);
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);

    ВыведеноСтраниц = 1; ВыведеноСтрок = 0; ИтогоНаСтранице = 0; Итого = 0;

    // Выводим данные по строкам документа.
    НомерСтроки = 0;
    ВыборкаСтрок.Сбросить();
    Пока ВыборкаСтрок.НайтиСледующий(ВыборкаШапок.Ссылка, "Ведомость") Цикл

    НомерСтроки = НомерСтроки + 1;

    ОбщегоНазначенияБЗККлиентСервер.ОчиститьЗначенияСтруктуры(ДанныеПечати.Строка);

    ЗаполнитьЗначенияСвойств(ДанныеПечати.Строка, ВыборкаСтрок);
    ДанныеПечати.Строка.НомерСтроки = НомерСтроки;
    ДанныеПечати.Строка.ТабельныйНомер =
    ЗарплатаКадрыОтчеты.ТабельныйНомерНаПечать(ВыборкаСтрок.ТабельныйНомер);

    Если НастройкиПечатныхФорм.ВыводитьПолныеФИОВСписочныхПечатныхФормах Тогда

    ДанныеПечати.Строка.Физлицо = СокрЛП(ВыборкаСтрок.Фамилия)
    + ?(ПустаяСтрока(ВыборкаСтрок.Имя), ", " " + ВыборкаСтрок.Имя)
    + ?(ПустаяСтрока(ВыборкаСтрок.Отчество), ", " " + ВыборкаСтрок.Отчество);

    Иначе
    ФИО = Новый Структура("Фамилия, Имя, Отчество");
    ФИО.Фамилия = ВыборкаСтрок.Фамилия;
    ФИО.Имя = ВыборкаСтрок.Имя;
    ФИО.Отчество = ВыборкаСтрок.Отчество;
    ДанныеПечати.Строка.Физлицо = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(ФИО);
    КонецЕсли;

    ОбластьМакетаСтрокаТаблицы.Параметры.Заполнить(ДанныеПечати.Строка);

    // разбиение на страницы
    ВыведеноСтрок = ВыведеноСтрок + 1;

    // Проверим, уместится ли строка на странице или надо открывать новую страницу.
    ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
    Если Не ВывестиПодвалЛиста И ВыведеноСтрок = ВсегоСтрокДокумента Тогда
    ВыводимыеОбласти.Добавить(ОбластьМакетаПодвалДокумента);
    ВывестиПодвалЛиста = Не ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ВыводимыеОбласти);
    КонецЕсли;
    Если ВывестиПодвалЛиста Тогда

    ОбщегоНазначенияБЗККлиентСервер.УстановитьЗначениеСвойства(
    ОбластьМакетаИтогПоСтранице.Параметры, "ИтогоНаСтранице", ИтогоНаСтранице);

    ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
    ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    ТабличныйДокумент.Вывести(ОбластьМакетаШапкаТаблицы);

    ВыведеноСтраниц = ВыведеноСтраниц + 1;
    ИтогоНаСтранице = 0;

    КонецЕсли;

    ТабличныйДокумент.Вывести(ОбластьМакетаСтрокаТаблицы);
    ИтогоНаСтранице = ИтогоНаСтранице + ВыборкаСтрок.Сумма;
    Итого = Итого + ВыборкаСтрок.Сумма;

    КонецЦикла; // по строкам документа

    Если ВыведеноСтрок > 0 Тогда
    ОбщегоНазначенияБЗККлиентСервер.УстановитьЗначениеСвойства(
    ОбластьМакетаИтогПоСтранице.Параметры, "ИтогоНаСтранице", ИтогоНаСтранице);
    КонецЕсли;
    ДанныеПечати.Подвал.КоличествоЛистов = ?(ВыведеноСтрок = 0,",ВыведеноСтраниц + 1);

    ОбластьМакетаПодвалДокумента.Параметры.Заполнить(ДанныеПечати.Подвал);

    // дополняем пустыми строками до конца страницы
    ОбщегоНазначенияБЗК.ОчиститьПараметрыТабличногоДокумента(ОбластьМакетаСтрокаТаблицы);
    ОбластиКонцаСтраницы = Новый Массив();
    ОбластиКонцаСтраницы.Добавить(ОбластьМакетаИтогПоСтранице);
    ОбластиКонцаСтраницы.Добавить(ОбластьМакетаПодвалДокумента);
    ОбщегоНазначенияБЗК.ДополнитьСтраницуТабличногоДокумента(ТабличныйДокумент, ОбластьМакетаСтрокаТаблицы, ОбластиКонцаСтраницы);

    ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
    ТабличныйДокумент.Вывести(ОбластьМакетаПодвалДокумента);

    // В табличном документе необходимо задать имя области, в которую был
    // выведен объект. Нужно для возможности печати покомплектно.
    УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);

    КонецЦикла; // по документам

    Возврат ТабличныйДокумент;

    КонецФункции

    #КонецОбласти
```
---
Спасибо очень помогли. Действительно, через расширение конфигурации получается гораздо быстрее и проще, чем через получение результат СКД из отчета.
Вот набросал небольшое расширение конфигурации для печатных форм Т-1, Т-5, Т-6, Т-8 в ЗУП 3.1