При разработки отчета на СКД, иногда возникает необходимость дополнительно обработать результат запроса в коде перед его использованием. Для этого можно в процедуре ПриКомпановкеРезультата() выгрузить данные запроса в таблицу значений, обработать их, а потом использовать в качестве Внешнего набора данных для СКД.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
&НаСервере Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) //УстановитьПривилегированныйРежим(Истина); СтандартнаяОбработка = Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); //КомпоновщикНастроек.ПолучитьНастройки() - это не ссылка на настройки отчета, а копия настроек с учетом примененных пользовательских настроек. //В случаи внесения изменений в настройки, надо их передать в компоновщик макета (МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки)) НачалоПериода = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СтПериод")).Значение.ДатаНачала; КонецПериода = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СтПериод")).Значение.ДатаОкончания; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | КадроваяИсторияСотрудников.Период КАК Период, | КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудников.Подразделение КАК Подразделение, | КадроваяИсторияСотрудников.Должность КАК Должность, | КадроваяИсторияСотрудников.ВидСобытия КАК ВидСобытия |ИЗ | РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников |ГДЕ | КадроваяИсторияСотрудников.Период МЕЖДУ &НачалоПериода И &КонецПериода"; Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); Запрос.УстановитьПараметр("КонецПериода", КонецПериода); РезультатЗапроса = Запрос.Выполнить(); ТЗКадроваяИсторияСотрудников = РезультатЗапроса.Выгрузить(); //Связь между таблицей значений и именами в СКД ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ТЗКадроваяИсторияСотрудников", ТЗКадроваяИсторияСотрудников); //Макет компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Компоновка данных ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); //Вывод результата ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры |
После описания внешнего набора данных в процедуре, необходимо:
- Добавить внешний набор в схеме компоновки.
- Связать добавленный набор с набором (таблицей значений) описанным в процедуре.
- Описать поля таблицы значений в схеме компоновки данных.

После этого данные таблицы значений будут доступны для использования в СКД.
При необходимости, на вкладке «Связи наборов данных» можно связать данные таблицы значений с данными других наборов данных.
Пример отчета можно скачать в начале описания.