Создаем отчет и без создания макета ОсновнаяСхемаКомпоновкиДанных. Переходим в модуль отчета и создаем Процедуру ПриКомпоновкеРезультата, СтандартнаяОбработка = Ложь.
1. Добавляем Источник данных.
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаОстатков";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
2. Добавляем поля набора данных
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "ВНаличииОстаток";
3. Добавляем группировки данных
ГруппировкаКомпоновкиДанных1 = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных1.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Склад");
ГруппировкаКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
4. Добавляем авто поля в группировки.
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
5. Добавляем выбранные поля
ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("В наличии остаток");
6. Добавляем отбор (ВНаличииОстаток > 500)
ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 500;
7. Добавляем Сортировку
ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
8. Добавляем оформление (Выделять желтым поля ВНаличииОстаток и Номенклатура, если ВНаличииОстаток > 1000).
УсловноеОформление = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
УсловноеОформление.ИспользоватьВЗаголовке = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВЗаголовкеПолей = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВОбщемИтоге = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
ЭлементОтбораКомпоновкиДанных = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 1000;
УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.Желтый);
В результате получаем отчет.
Полный текст процедуры.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаОстатков";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = "ИсточникДанных1";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "Склад";
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = "ВНаличииОстаток";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = "В наличии остаток";
Ресурс = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "ВНаличииОстаток";
Ресурс.Выражение = "Сумма(ВНаличииОстаток)";
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
Если НастройкиКомпоновки.Структура.Количество() = 0 Тогда
ГруппировкаКомпоновкиДанных1 = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных1.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Склад");
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ГруппировкаКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных1.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2 = ГруппировкаКомпоновкиДанных2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных2.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных2.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 500;
ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр;
УсловноеОформление = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
УсловноеОформление.ИспользоватьВЗаголовке = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВЗаголовкеПолей = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
УсловноеОформление.ИспользоватьВОбщемИтоге = ИспользованиеУсловногоОформленияКомпоновкиДанных.НеИспользовать;
ЭлементОтбораКомпоновкиДанных = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВНаличииОстаток");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 1000;
УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.Желтый);
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладах.Номенклатура КАК Номенклатура,
| ТоварыНаСкладах.Склад,
| ТоварыНаСкладах.ВНаличииОстаток КАК ВНаличииОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладах";
ТаблицаОстатков = Запрос.Выполнить().Выгрузить();
ВнешниеНаборы = Новый Структура("ТаблицаОстатков", ТаблицаОстатков);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Тестировал на платформе 1С:Предприятие 8.3 (8.3.15.1747).