В последних версиях ЗУП печатные формы для документов Т1, Т1а, Т5, Т5а, Т6, Т6а, Т8, Т8а, Т9, Т9а, Т11 вынесены в отчеты и сделаны на СКД
Возможно ли обращение к этим отчетам из внешней печатной формы для получения данных и подстановкой в свой макет?
Ниже пример решения задачи подмены типового макета Т53 на свой, причем можно печатать из списка
платежек сразу несколько выделенных документов как и работает типовая печать, но при определенных
(в коде расширения) условиях для одних видов оплаты будет типовой макет, для других расширенный.
На БСП через доппечформы такой финт не прокатит, а в расширении да.
Главная морока в совмещении геометрии макетов по ширине, т.к. при печати нескольких документов -
все выводятся в один табличный документ согласно типовой печати или печатать документы по одному, если лень заморачиваться.
по комментариям в коде все должно быть ясно
// Расширение: ОбщийМодуль.ВедомостьНаВыплатуЗарплатыБазовый ЗУП: 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) можно макет попробовать подменить, а не выводить в ТЗ. ну и также программно добавить вывод нужных полей в СКД.
НУ или выводить результат в ТЗ и скармливать своей схеме. Все зависит от того что нужно выводить в своих формах
1. не могу понять как передать параметр и какой, чтобы для начала получить хоть что-то
2. на выходе хочу получить ТЗ для формирования измененной печатной формы
в отчете "СтатистикаПерсинала" с параметрами более менее понятно (см вложение), но какой параметр передавать в отчет "ПечатнаяФормаТ5"?
Там только "КлючВарианта" и "ДатаОзнакомленияРаботникаСовпадаетСДатойПриказа", как передать документ на основании которого нужно вывести это отчет?
сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Количество());//выводит 2
сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(0).Заголовок);//выводит Ключ варианта
сообщить(КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы.Получить(1).Заголовок);//выводит Дата ознакомления работника совпадает с датой приказа
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КлючВарианта", ДокПеревод);// проходит
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СсылкаНаОбъект", ДокПеревод); // ошибка "Параметр с указанным именем не найден"
на попытку установить параметр СсылкаНаОбъект выдается ошибка "Параметр с указанным именем не найден"
Печать ПечатьТ53 сейчас в общем модуле(в 3.1.5 была в одном, в 3.1.8 в другом - но это не критично для расширения), я добавил этот метод печати в расширение, подменил там макет и получил, то что хотели
как-то так можно поступать с похожими макетами, время на правку минут 10, причем без мозклюйства.
Ниже пример решения задачи подмены типового макета Т53 на свой, причем можно печатать из списка
платежек сразу несколько выделенных документов как и работает типовая печать, но при определенных
(в коде расширения) условиях для одних видов оплаты будет типовой макет, для других расширенный.
На БСП через доппечформы такой финт не прокатит, а в расширении да.
Главная морока в совмещении геометрии макетов по ширине, т.к. при печати нескольких документов -
все выводятся в один табличный документ согласно типовой печати или печатать документы по одному, если лень заморачиваться.
по комментариям в коде все должно быть ясно
// Расширение: ОбщийМодуль.ВедомостьНаВыплатуЗарплатыБазовый ЗУП: 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);
ОбластьМакетаПодвалДокумента.Параметры.Заполнить(ДанныеПечати.Подвал);
// дополняем пустыми строками до конца страницы
ОбщегоНазначенияБЗК.ОчиститьПараметрыТабличногоДокумента(ОбластьМакетаСтрокаТаблицы);
ОбластиКонцаСтраницы = Новый Массив();
ОбластиКонцаСтраницы.Добавить(ОбластьМакетаИтогПоСтранице);
ОбластиКонцаСтраницы.Добавить(ОбластьМакетаПодвалДокумента);
ОбщегоНазначенияБЗК.ДополнитьСтраницуТабличногоДокумента(ТабличныйДокумент, ОбластьМакетаСтрокаТаблицы, ОбластиКонцаСтраницы);
ТабличныйДокумент.Вывести(ОбластьМакетаИтогПоСтранице);
ТабличныйДокумент.Вывести(ОбластьМакетаПодвалДокумента);
// В табличном документе необходимо задать имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ВыборкаШапок.Ссылка);
КонецЦикла; // по документам
Возврат ТабличныйДокумент;
КонецФункции
#КонецОбласти