Внешний отчёт ЗУП

1. Intercititude 05.11.19 11:54 Сейчас в теме
Доброе время суток всем!

Необходимо реализовать внешний отчёт. При выборе сотрудника и указания периода рисуется собственный макет(справка о зарплате за 3 месяца)(макет приложил). Макет нарисовал с шаблонами и параметрами.

Вопрос:
Как правильно реализовать заполнение моего макета на основании заданных параметров ?!

Не смог найти нигде информации о том как программно это выводить.
Я так понял в основной системе компоновки данных берём регистр,оттуда тянем сотрудника и период для указания этих параметров.
Хотелось бы просто делать запросы и заполнять параметры, но не знаю кода Компоновки...

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
	СтандартнаяОбработка = Ложь;
	
	//ДокументРезультат.Очистить();
	
	ДокументРезультат.ТолькоПросмотр = Истина;
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.ПолеСнизу = 0;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.АвтоМасштаб = Истина;
	
	ДокументРезультат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗП";
	
	СвойМакетОформления = 
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
		
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
6. Intercititude 05.11.19 13:11 Сейчас в теме +1 $m
(3) Интересует вот это, правильно ли :

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
		
	СтандартнаяОбработка = Ложь;
	
	ДокументРезультат.Очистить();
	
	ДокументРезультат.ТолькоПросмотр = Истина;
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.ПолеСнизу = 0;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.АвтоМасштаб = Истина;
	
	ДокументРезультат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗП";
			
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	
	ЗначениеПараметраПериод = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНачала"));
	Если ДатаНачалаНП = '00010101' Тогда
		ДатаНачалаНП = Дата(ТекущаяДата());
	КонецЕсли;
	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	ТаблицаЗначений =  Новый ТаблицаЗначений;
	ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	СформироватьМакет(ДокументРезультат, ТаблицаЗначений);

	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ixijixi 1913 05.11.19 12:51 Сейчас в теме
Обычно такие отчеты формируются программно. С помощью СКД получают исходные данные, а уже их выводят в модуле объекта
4. Intercititude 05.11.19 13:09 Сейчас в теме
(2) Получается в основной СКД достаточно этого для моих требовании ?:
ВЫБРАТЬ
	КадроваяИсторияСотрудниковСрезПоследних.Сотрудник КАК Сотрудник,
	КадроваяИсторияСотрудниковСрезПоследних.Период КАК Период,
	КадроваяИсторияСотрудниковСрезПоследних.Организация КАК Организация
ИЗ
	РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(, ) КАК КадроваяИсторияСотрудниковСрезПоследних
ГДЕ
	КадроваяИсторияСотрудниковСрезПоследних.Период МЕЖДУ &ДатаНачала И &ДатаОкончания


А уже дальше работаю с сотрудником,организацией и заполняю параметры макета ?
5. ZergKRSK 130 05.11.19 13:11 Сейчас в теме
(4) вам нужен пример как руками запускать СКД и формировать макет?
7. Intercititude 05.11.19 13:12 Сейчас в теме
(5)Да, ниже написал кусок кода который смог найти, но не уверен в его правильности. Если не сложно прокомментируйте пожалуйста.
8. ZergKRSK 130 05.11.19 13:12 Сейчас в теме
(7) могу для примера выслать отчет. Там простой код и простая СКД, думаю разберетесь.
9. Intercititude 05.11.19 13:15 Сейчас в теме
10. ZergKRSK 130 05.11.19 13:18 Сейчас в теме
3. singlych 05.11.19 13:08 Сейчас в теме
Раз уж в ЗУПе, там повально печатные формы печатаются через отчеты. Посмотри модуль и в настройки схемы компоновки любого такого типового отчета, например, тот же ПечатнаяФормаТ1.
6. Intercititude 05.11.19 13:11 Сейчас в теме +1 $m
(3) Интересует вот это, правильно ли :

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
		
	СтандартнаяОбработка = Ложь;
	
	ДокументРезультат.Очистить();
	
	ДокументРезультат.ТолькоПросмотр = Истина;
	ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.ПолеСнизу = 0;
	ДокументРезультат.ПолеСправа = 0;
	ДокументРезультат.АвтоМасштаб = Истина;
	
	ДокументРезультат.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ЗП";
			
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	
	ЗначениеПараметраПериод = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНачала"));
	Если ДатаНачалаНП = '00010101' Тогда
		ДатаНачалаНП = Дата(ТекущаяДата());
	КонецЕсли;
	
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	
	ТаблицаЗначений =  Новый ТаблицаЗначений;
	ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	СформироватьМакет(ДокументРезультат, ТаблицаЗначений);

	
КонецПроцедуры
Показать
11. ixijixi 1913 05.11.19 13:38 Сейчас в теме
(6) Да, направление мысли правильное
singlych; +1 Ответить
12. Intercititude 05.11.19 15:20 Сейчас в теме
(11) Извините, почему в отчёт выводится "СтрокаТаблицыЗначении",необходимо число и название организации:

			КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, 
			общегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник), 
			"ДатаПриема,Организация", ТекущаяДата());			
						
			ДанныеОрганизации.Вставить("ДатаПриема",КадровыеДанныеСотрудников[0]); 
			ДанныеОрганизации.Вставить("ОрганизацияАктуальная",КадровыеДанныеСотрудников[1]); 
13. ixijixi 1913 05.11.19 16:51 Сейчас в теме
ДанныеОрганизации.Вставить("ДатаПриема",КадровыеДанныеСотрудников[0].ДатаПриема);
ДанныеОрганизации.Вставить("ОрганизацияАктуальная",КадровыеДанныеСотрудников[0].Организация);
14. Intercititude 05.11.19 16:53 Сейчас в теме
(13) Уже сделал так, то же самое же получается ?:

			КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, 
			общегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник), 
			"ДатаПриема,Организация", ТекущаяДата());						                  
			ДТ = КадровыеДанныеСотрудников[0]["ДатаПриема"];
			ДанныеОрганизации.Вставить("ДатаПриема",Формат(ДТ,"ДЛФ=DD")); 
			ДанныеОрганизации.Вставить("ОрганизацияАктуальная",КадровыеДанныеСотрудников[0]["Организация"]); 				
15. ixijixi 1913 05.11.19 19:13 Сейчас в теме
(14)
ОбластьШапка.Параметры.Заполнить(ДанныеОрганизации)
Дальше так делаете? Ну и плюс, параметра ОрганизацияАктуальная в табличном документе не вижу
16. Intercititude 05.11.19 19:21 Сейчас в теме
17. ixijixi 1913 05.11.19 19:28 Сейчас в теме
(16) Весь листинг в студию, кусками не понятно
18. PiotrLoginov 07.11.19 01:59 Сейчас в теме
Очередной пример ситуации, когда обещанное вознаграждение так никому и не досталось...
singlych; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот