В отчёте не работает один фильтр. Отчет через набор данных для СКД

1. Mechanik21 24 30.04.21 13:57 Сейчас в теме
Мне нужно было дополнить типовой отчёт своими колонками, которые не получишь запросом. Поэтому я использовал две СКД. В одну я накладываю таблицу для вывода с помощью набора данных, Потом эту таблицу но с настройками второй СКД я вывожу на экран.
Вот код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();    
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	
	ВремНастройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	НоваяСхемаКомпоновкиДанных = СхемаКомпоновкиДанных;
	//НовыйКомпоновщикНастроек = КомпоновщикНастроек;
	
	// Инициализация процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,,);
	
	ТаблицаПромежуточныхДанных = Новый ТаблицаЗначений;
	
	// Получение результата
	ПроцессорВыводаРезультатаКомпоновкиДанных = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВыводаРезультатаКомпоновкиДанных.УстановитьОбъект(ТаблицаПромежуточныхДанных);
	ПроцессорВыводаРезультатаКомпоновкиДанных.Вывести(ПроцессорКомпоновкиДанных);
	
	
	//В таблице "ТаблицаПромежуточныхДанных" результат выполнения запроса
	//Тут ее можно модифицировать, свернуть и все прочее на что хватит фантазии
	//И вывести уже модифицированную ТЗ
	//Только в схеме отчета "СхемаВывода" не забыть добавить недостающие поля
		
	
	ВремТаблицаПромежуточныхДанных = Новый ТаблицаЗначений;
	ВремТаблицаПромежуточныхДанных = ТаблицаПромежуточныхДанных.Скопировать();
	ВремТаблицаПромежуточныхДанных.Свернуть("Номенклатура");
	МассивНоменклатуры = ВремТаблицаПромежуточныхДанных.ВыгрузитьКолонку("Номенклатура");
	
	ЗапросНачОст = Новый Запрос("ВЫБРАТЬ
	                            |	ТоварыПереданныеНаКомиссиюОстатки.КоличествоОстаток КАК КоличествоОстаток,
	                            |	ТоварыПереданныеНаКомиссиюОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	                            |	ТоварыПереданныеНаКомиссиюОстатки.Организация КАК Организация
	                            |ИЗ
	                            |	РегистрНакопления.ТоварыПереданныеНаКомиссию.Остатки(&Дата, ) КАК ТоварыПереданныеНаКомиссиюОстатки
	                            |ГДЕ
	                            |	ТоварыПереданныеНаКомиссиюОстатки.АналитикаУчетаНоменклатуры.Номенклатура В(&Номенклатура)");
	ЗапросНачОст.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
	ЗапросНачОст.УстановитьПараметр("Дата", КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы[0].Значение.Дата);
	
	//начальный остаток
	ВыборкаНачОст = ЗапросНачОст.Выполнить().Выгрузить();
	 
	
	//конечный остаток
	ЗапросКонОст = Новый Запрос("ВЫБРАТЬ
	                            |	ТоварыПереданныеНаКомиссиюОстатки.КоличествоОстаток КАК КоличествоОстаток,
	                            |	ТоварыПереданныеНаКомиссиюОстатки.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры,
	                            |	ТоварыПереданныеНаКомиссиюОстатки.Организация КАК Организация
	                            |ИЗ
	                            |	РегистрНакопления.ТоварыПереданныеНаКомиссию.Остатки(&Дата, ) КАК ТоварыПереданныеНаКомиссиюОстатки
	                            |ГДЕ
	                            |	ТоварыПереданныеНаКомиссиюОстатки.АналитикаУчетаНоменклатуры.Номенклатура В(&Номенклатура)");
	ЗапросКонОст.УстановитьПараметр("Номенклатура", МассивНоменклатуры);
	ЗапросКонОст.УстановитьПараметр("Дата", КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы[1].Значение.Дата);
	
	//конечный остаток
	ВыборкаКонОст = ЗапросКонОст.Выполнить().Выгрузить();
	
	Запрос = Новый Запрос();
	
	ТаблицаПромежуточныхДанных.Свернуть("Артикул, Номенклатура, Характеристика, Комиссионер, Организация, ЕдиницаДляОтчетов, Цена", "КоличествоПродано, КоличествоСписано,
											| КоличествоПриход, СуммаВознаграждения, СуммаВыручки");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("КоличествоНачальныйОстаток");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("КоличествоКонечныйОстаток");
	
	Для каждого НачальныйОстаток Из ВыборкаНачОст Цикл
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("Номенклатура", НачальныйОстаток.АналитикаУчетаНоменклатуры.Номенклатура);
		СтруктураПоиска.Вставить("Организация", НачальныйОстаток.Организация);
		МассивНайденныхСтрок = ТаблицаПромежуточныхДанных.НайтиСтроки(СтруктураПоиска);
		//Если МассивНайденныхСтрок.Количество() > 0 Тогда
			//МассивНайденныхСтрок
		//КонецЕсли;
		Для каждого НайденнаяСтрока Из МассивНайденныхСтрок Цикл
			
			НайденнаяСтрока.КоличествоНачальныйОстаток = НачальныйОстаток.КоличествоОстаток;
			
		КонецЦикла;
		
	КонецЦикла;
	
	Для каждого КонечныйОстаток Из ВыборкаКонОст Цикл
		
		СтруктураПоиска = Новый Структура;
		СтруктураПоиска.Вставить("Номенклатура", КонечныйОстаток.АналитикаУчетаНоменклатуры.Номенклатура);
		СтруктураПоиска.Вставить("Организация", КонечныйОстаток.Организация);
		МассивНайденныхСтрок = ТаблицаПромежуточныхДанных.НайтиСтроки(СтруктураПоиска);
		Для каждого НайденнаяСтрока Из МассивНайденныхСтрок Цикл
			
			НайденнаяСтрока.КоличествоКонечныйОстаток = КонечныйОстаток.КоличествоОстаток;
			
		КонецЦикла;
		
	КонецЦикла;
	
	ТаблицаПромежуточныхДанных.Колонки.Добавить("СуммаПоЗакупочнойЦене");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("ВаловаяПрибыль");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("Рентабельность");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("СуммаНаНачалоПериода");
	ТаблицаПромежуточныхДанных.Колонки.Добавить("СуммаНаКонецПериода");
	
	Для каждого СтрокаТЗ Из ТаблицаПромежуточныхДанных Цикл
		
		Если СтрокаТЗ.Цена <> Неопределено Тогда
			СтрокаТЗ.СуммаПоЗакупочнойЦене = СтрокаТЗ.Цена * СтрокаТЗ.КоличествоПродано;
		Иначе
			СтрокаТЗ.СуммаПоЗакупочнойЦене = 0;
		КонецЕсли;
		
		Если СтрокаТЗ.КоличествоНачальныйОстаток <> Неопределено И СтрокаТЗ.Цена <> Неопределено Тогда
			СтрокаТЗ.СуммаНаНачалоПериода = СтрокаТЗ.КоличествоНачальныйОстаток * СтрокаТЗ.Цена;
		Иначе
			СтрокаТЗ.СуммаНаНачалоПериода = 0;
		КонецЕсли;
		
		Если СтрокаТЗ.КоличествоКонечныйОстаток <> Неопределено И СтрокаТЗ.Цена <> Неопределено Тогда
			СтрокаТЗ.СуммаНаКонецПериода = СтрокаТЗ.КоличествоКонечныйОстаток * СтрокаТЗ.Цена;
		Иначе
			СтрокаТЗ.СуммаНаКонецПериода = 0;
		КонецЕсли;
		
		Если СтрокаТЗ.Цена <> Неопределено Тогда
			СтрокаТЗ.ВаловаяПрибыль = СтрокаТЗ.СуммаВыручки-(СтрокаТЗ.Цена*СтрокаТЗ.КоличествоПродано)-СтрокаТЗ.СуммаВознаграждения;
		Иначе
			СтрокаТЗ.ВаловаяПрибыль = 0;
		КонецЕсли;
		
		Если СтрокаТЗ.СуммаВыручки <> 0 Тогда
			СтрокаТЗ.Рентабельность = Формат(((СтрокаТЗ.СуммаВыручки - (СтрокаТЗ.Цена * СтрокаТЗ.КоличествоПродано) - СтрокаТЗ.СуммаВознаграждения) / СтрокаТЗ.СуммаВыручки) * 100, "ЧДЦ=2");
		Иначе
			СтрокаТЗ.Рентабельность = 0;
		КонецЕсли;
		
	КонецЦикла;
	
	ВнешниеНаборыДанных = Новый Структура("ТаблицаВывода", ТаблицаПромежуточныхДанных);
	
	СхемаКомпоновкиДанных = ПолучитьМакет("СхемаВывода");
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
		
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
		
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
		
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
	
	СхемаКомпоновкиДанных = НоваяСхемаКомпоновкиДанных;
	//КомпоновщикНастроек = НовыйКомпоновщикНастроек;
	
	//КомпоновщикНастроек.Восстановить();
	
	//КомпоновщикНастроек.Восстановить(
	КомпоновщикНастроек.ЗагрузитьНастройки(ВремНастройки);
	
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Mechanik21 24 30.04.21 13:59 Сейчас в теме
Почему может не работать фильтр?
Оставьте свое сообщение

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