обработка результата запроса скд (ПриКомпоновкеРезультата)

1. vechiy 35 18.08.20 15:30 Сейчас в теме
переопределяю типовую процедуру, все ок, работает, но ГДЕ тут можно обработать результат запроса перед выводом??
Переменная Результат пустая

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

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	Результат = Новый ТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(Результат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);	
	ДокументРезультат.Вывести(Результат);
	
	
КонецПроцедуры
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
20. oleg-x 26 18.08.20 16:29 Сейчас в теме +0.5 $m
(18)На вскидку, как то так.
Строка = 1;
Колонка = 1;
УдалитьСтроку = Истина;

Пока Истина Цикл
	
	СчКол = 1;
	Пока СчКол <= 50 Цикл
		ТекОбласть = ТабДок.Область(Строка,Колонка,Строка,Колонка);
		Если ТекОбласть.ЗначениеЗаполнено Тогда //Зависит от того, где заполняется значение (текст/значение).
			УдалитьСтроку = Ложь; //Значит строка уже не пустая и удалять нельзя.
			Строка = Строка + 1;
			Прервать;
		Иначе
			Колонка = Колонка + 1;
		КонецЕсли;
	КонецЦикла;
	
	Если УдалитьСтроку Тогда
		УдалитьСтроку = Ложь;
		ТабДок.УдалитьОбласть(ТабДок.Область(Строка,1,Строка,50),ТипСмещенияТабличногоДокумента.ПоВертикали);
	КонецЕсли;
	Колонка = 1;
	//Процедуры прерывания по окончанию обработки табличного документ
КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 18.08.20 15:38 Сейчас в теме
(1) перед
ДокументРезультат.Вывести(Результат)
Результат пустая и при этом данные выводятся ?
3. vechiy 35 18.08.20 15:43 Сейчас в теме
(2) нет на самом деле там ТабличныйДокумент, чтобы его обойти и обработать, надо выгрузить его в ТЗ ? и затем обратно?
5. user1058740 18.08.20 15:48 Сейчас в теме
Варианта 3:
- Или обрабатывать табличный документ
- или выгружать как таблицу значений, обрабатывать, а затем преобразовывать в табличный документ
- или (3)
4. vechiy 35 18.08.20 15:45 Сейчас в теме
чё за изврат, как перед заполнением "Результат" обработать результат запроса
6. alex-l19041 8 18.08.20 15:49 Сейчас в теме
(4) с помощью ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; можно сохранить в таблицу значений
7. vechiy 35 18.08.20 15:54 Сейчас в теме
9. oleg-x 26 18.08.20 15:59 Сейчас в теме
(7) А где то это проще реализовано?
Если не нравится как работает СКД, то в чем проблема, нарисуйте свой отчет без СКД и не придется ничего переопределять :-)
11. vechiy 35 18.08.20 16:04 Сейчас в теме
(9) в скд всё норм. но я не могу его средствами убрать ряд ненужных строк.
12. oleg-x 26 18.08.20 16:07 Сейчас в теме
(11) Тогда как вариант, обработать выведенный результат в табличный документ и удалить пустые строки уже после формирования отчета.
15. vechiy 35 18.08.20 16:11 Сейчас в теме
(12) вопрос в том, как это сделать.
17. oleg-x 26 18.08.20 16:13 Сейчас в теме
(15) ТабДок.УдалитьОбласть(ТабДок.Область(НужнаяОбласть),ТипСмещенияТабличногоДокумента.ПоВертикали);
18. vechiy 35 18.08.20 16:14 Сейчас в теме
(17) как обойти-то его, чтобы нужные области (строки) найти?
20. oleg-x 26 18.08.20 16:29 Сейчас в теме +0.5 $m
(18)На вскидку, как то так.
Строка = 1;
Колонка = 1;
УдалитьСтроку = Истина;

Пока Истина Цикл
	
	СчКол = 1;
	Пока СчКол <= 50 Цикл
		ТекОбласть = ТабДок.Область(Строка,Колонка,Строка,Колонка);
		Если ТекОбласть.ЗначениеЗаполнено Тогда //Зависит от того, где заполняется значение (текст/значение).
			УдалитьСтроку = Ложь; //Значит строка уже не пустая и удалять нельзя.
			Строка = Строка + 1;
			Прервать;
		Иначе
			Колонка = Колонка + 1;
		КонецЕсли;
	КонецЦикла;
	
	Если УдалитьСтроку Тогда
		УдалитьСтроку = Ложь;
		ТабДок.УдалитьОбласть(ТабДок.Область(Строка,1,Строка,50),ТипСмещенияТабличногоДокумента.ПоВертикали);
	КонецЕсли;
	Колонка = 1;
	//Процедуры прерывания по окончанию обработки табличного документ
КонецЦикла;
Показать
22. vechiy 35 18.08.20 17:43 Сейчас в теме
(20) всё вроде норм, но при удалении строк группировки (у меня группировка по менеджерам заказов) остаются на месте, и первая группировка "заползает" на другие и т.д.
23. oleg-x 26 18.08.20 18:38 Сейчас в теме
(22) Печально, нюанс ломающий всю затею :-(
24. vechiy 35 19.08.20 09:21 Сейчас в теме
(23) на данный момент не критично)
8. user1058740 18.08.20 15:58 Сейчас в теме
Вообще если тебе надо изменить результат формирования отчета через СКД, но в СКД лезть нельзя то надо программно изменить настройки компоновщика, а уже потом выводить результат. Вот статья в помощь https://infostart.ru/1c/articles/1098946/
10. vechiy 35 18.08.20 16:03 Сейчас в теме
(8) мне нужно изменить не настройки, а пройтись по результату запроса и убрать "пустые" строки
13. karamazoff 96 18.08.20 16:08 Сейчас в теме
(10)а в настройках скд убрать пустые строки отбором не вариант?
14. vechiy 35 18.08.20 16:10 Сейчас в теме
(13) это не работает в данном случае.
16. karamazoff 96 18.08.20 16:13 Сейчас в теме
(14)тогда покажите пример этого отчета с пустыми строками
21. SlavaKron 18.08.20 17:31 Сейчас в теме
Результат в виде таблицы значений можно получить из запроса макета компоновки. Этот результат обработать и подменить в наборе данных макета компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();	
	
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);	
	
	НаборДанных = МакетКомпоновки.НаборыДанных.НаборДанных1;
	
	Запрос = Новый Запрос(НаборДанных.Запрос);
	Для Каждого ПараметрЗапроса Из МакетКомпоновки.ЗначенияПараметров Цикл
		Запрос.УстановитьПараметр(ПараметрЗапроса.Имя, ПараметрЗапроса.Значение);
	КонецЦикла;
	
	ТЗ = Запрос.Выполнить().Выгрузить();
	
	ОбработкаРезультатаСКД(ТЗ);
	
	СвойстваНабора = Новый Структура("Имя,ИсточникДанных,Поля,Отбор");
	ЗаполнитьЗначенияСвойств(СвойстваНабора, НаборДанных);	
	МакетКомпоновки.НаборыДанных.Удалить(НаборДанных);
	
	НаборДанных = МакетКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхОбъектМакетаКомпоновкиДанных"));
	ЗаполнитьЗначенияСвойств(НаборДанных, СвойстваНабора);
	НаборДанных.ИмяОбъекта = "ТЗ";
	Для Каждого Поле Из СвойстваНабора.Поля Цикл
		НовоеПоле = НаборДанных.Поля.Добавить();
		ЗаполнитьЗначенияСвойств(НовоеПоле, Поле);
	КонецЦикла;
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("ТЗ", ТЗ), ДанныеРасшифровки, Ложь);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры

Процедура ОбработкаРезультатаСКД(ТЗ)
	
КонецПроцедуры
Показать
SvetaBr; Varozh; Slypower; Seregan; vechiy; alex-l19041; +6 Ответить
25. vechiy 35 19.08.20 12:52 Сейчас в теме
(21) А если у меня 4 набора данных объединяются? И уже результат нужно обрабатывать?
26. SlavaKron 19.08.20 13:08 Сейчас в теме
(25) По большому счету, такая обработка СКД - бред. Если СКД строится из нескольких наборов, это уже не плоский результат, который можно обработать как таблицу значений. Уверен, всё решается гораздо проще средствами самой СКД.
Оставьте свое сообщение

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