[Памятка]. Формирование отчета СКД в управляемых формах. Нестандартные способы

Публикация № 967277

Программирование - Практика программирования

СКД Таблица значений Заголовок Параметры

43
Пригодится при формировании отчета СКД нестандартным способом.

1. Использование Набора данных и загрузка в него Таблицы значений.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;	
	

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Номенклатура
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";
	
	Результат = Запрос.Выполнить();
	
	Если Результат.Пустой() Тогда
		Сообщить("Данных нет!");
		Возврат;	
	КонецЕсли;
	
	ТЗ = Результат.Выгрузить();	
	НаборДанных = Новый Структура();
	НаборДанных.Вставить("Таблица", ТЗ);
		
	НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки();

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

	Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки);

	ПроцессорКомпоновкиСКД = Новый ПроцессорКомпоновкиДанных;

	ПроцессорКомпоновкиСКД.Инициализировать(Макет,НаборДанных, ДанныеРасшифровки);

	ДокументРезультат.Очистить();

	ПроцессорВыводаСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

	ПроцессорВыводаСКД.УстановитьДокумент(ДокументРезультат);

	ПроцессорВыводаСКД.Вывести(ПроцессорКомпоновкиСКД);
		
КонецПроцедуры

Чтобы корректно отображались настройки отчета делаем следующее:

 

2. Пробежаться по сформированному Табличному документу. Получить ссылки на документ и отправить их на печать.
 

Для примера: В первом столбце сформированного отчета находятся документы заказы покупателя.

&НаКлиенте
Процедура ПакетнаяПечать(Команда)
	
	ВысотаТаблицы1 = ОтчетТабличныйДокумент.ВысотаТаблицы;
	ШиринаТаблицы1 = ОтчетТабличныйДокумент.ШиринаТаблицы;
	
	Массивобъектов = ПолучитьДокументы(ВысотаТаблицы1);

	Если Массивобъектов.Количество() > 1 Тогда
		Для Каждого Массив1 Из МассивОбъектов Цикл
			УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер( 
			"Документ.ЗаказПокупателя", 
			"ПФ_MXL_Заказ", 
			Массив1, 
			);
		КонецЦикла;	
	КонецЕсли;	
		
КонецПроцедуры

&НаСервере
Функция ПолучитьДокументы(ВысотаТаблицы1)

	Массивобъектов = Новый Массив;
	
	Для Ном = 5 По ВысотаТаблицы1 Цикл
		ПолеКомпоновки = ОтчетТабличныйДокумент.Область("R"+СтрЗаменить(Ном," ","")+"C1");
		ОтчетДанныеРасшифровки1 = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
		Если ПолеКомпоновки.Расшифровка <> Неопределено И ТипЗнч(ОтчетДанныеРасшифровки1.Элементы[ПолеКомпоновки.Расшифровка].ПолучитьПоля()[0].Значение) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
			Док = ОтчетДанныеРасшифровки1.Элементы[ПолеКомпоновки.Расшифровка].ПолучитьПоля()[0].Значение;
			Если ЗначениеЗаполнено(Док) И Док.Проведен Тогда
				Массив1 = Новый Массив;
				Массив1.Добавить(Док);
				Массивобъектов.Добавить(Массив1);
			КонецЕсли;	
		КонецЕсли;
	КонецЦикла;
	
	Возврат Массивобъектов;

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

3. Установить параметры в модуле отчета

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	
	Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
	Если Параметр <> Неопределено Тогда
		Параметр.Значение = Справочники.Номенклатура.НайтиПоКоду("012354");
		Параметр.Использование = Истина;
	КонецЕсли;	
	
КонецПроцедуры

4. Заголовок в отчете СКД

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
   ЗначениеЗаголовка = КомпоновщикНастроек.Настройки.ПараметрыВывода.
   НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Заголовок"));
      
   ДатаДок = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Получить(0).Значение.Дата;  
   ДатаДок = Формат(ДатаДок,  "ДФ=dd.MM.yyyy");
   
   ЗначениеЗаголовка.Значение="Остатки товаров на "+ДатаДок;
   ЗначениеЗаголовка.Использование = Истина;
КонецПроцедуры

 

43

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. the1 371 22.12.18 12:31 Сейчас в теме
Странное какое-то решение - собирать массив массивов документов. Печать прекрасно справится с одномерным массивом всех документов

Если ЗначениеЗаполнено(Док) И Док.Проведен Тогда
	Массивобъектов.Добавить(Док);
КонецЕсли;


УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер( 
			"Документ.ЗаказПокупателя", 
			"ПФ_MXL_Заказ", 
			МассивОбъектов, 
			);
3. John_d 548 24.12.18 12:41 Сейчас в теме
(1)Согласен. Это Особенности конфигурации.
У меня в конфигурации модуле менеджера документа идет обращение к массиву
Функция ПечатьЗаказа(МассивОбъектов, ОбъектыПечати) Экспорт	
	Ссылка = МассивОбъектов[0];
2. echo77 1081 24.12.18 08:31 Сейчас в теме
Еще одна хорошая публикация по СКД(не мое) https://infostart.ru/public/80164/
- функция представленная в публикации более универсальная
rpgshnik; +1 Ответить
4. olga1512 6 24.12.18 20:36 Сейчас в теме
Спасибо автору! Хорошие рекомендации, недавно пользовалась 1 - с загрузкой таблицы значений, все работает, очень удобно!
Оставьте свое сообщение