Иногда бывает необходимость получить табличный документ по какому то набору данных. Например, требуется вывести какие то проверочные таблички пользователям или отправить результат запроса почтой. Для таких надобностей создавать специальные отчеты, хранить где-то схему, настройки, не имеет смысла. Получить табличный документ с группировкой из таблицы значений с помощью механизма СКД можно применив эту функцию.
Скачать файлы
|
Наименование |
Файл |
Версия |
Размер |
|
|
|
Таблица значений в табличный документ (СКД):
|
.epf |
|
8,81Kb |
16 |
Скачать
|
Пример работы на скрине. Текст функции ниже. Обработка с демонстрацией работы приложена. Тестировалась на 8.3.17.1549. Надеюсь будет кому то полезна.
Функция ТаблицаЗначенийВТабличныйДокумент(ТаблицаЗначений, ИменаПолейГруппировки = Неопределено) Экспорт
Схема = Новый СхемаКомпоновкиДанных;
ИсточникДанных = Схема.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = Схема.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.ИмяОбъекта = "ТЗ";
НаборДанных.ИсточникДанных = "ИсточникДанных1";
Настройки = Новый НастройкиКомпоновкиДанных;
Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
НовоеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
НовоеПоле.Поле = Колонка.Имя;
НовоеПоле.ПутьКДанным = Колонка.Имя;
ВыбранноеПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(Колонка.Имя);
КонецЦикла;
ТекущаяГруппировка = Настройки.Структура;
Если ТипЗнч(ИменаПолейГруппировки) = Тип("Массив") И ЗначениеЗаполнено(ИменаПолейГруппировки) Тогда
Для каждого ИмяГруппировки Из ИменаПолейГруппировки Цикл
Если НЕ НаборДанных.Поля.Найти(ИмяГруппировки) = Неопределено Тогда
ГруппировкаДанных = ТекущаяГруппировка.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаДанных.Использование = Истина;
ПолеГруппировки = ГруппировкаДанных.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных(ИмяГруппировки);
АвтоВыборПолей = ГруппировкаДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыборПолей = Истина;
ТекущаяГруппировка = ГруппировкаДанных.Структура;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ГруппировкаДанных = ТекущаяГруппировка.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ГруппировкаДанных.Использование = Истина;
АвтоВыборПолей = ГруппировкаДанных.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
АвтоВыборПолей = Истина;
ПараметрВыводаИтогов = Настройки.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("РасположениеПолейГруппировки"));
ПараметрВыводаИтогов.Использование = Истина;
ПараметрВыводаИтогов.Значение = РасположениеПолейГруппировкиКомпоновкиДанных.ОтдельноИТолькоВИтогах;
Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = Компоновщик.Выполнить(Схема, Настройки);
ВнешниеНаборы = Новый Структура("ТЗ", ТаблицаЗначений);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.НачатьВывод();
ТабДок = ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ПроцессорВывода.ЗакончитьВывод();
Возврат ТабДок;
КонецФункции
ТаблицаЗначений ТабличныйДокумент Функция СКД