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

По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот