как добавить колонки в СКД с произвольным запросом
Есть Запрос который собирается "программно", его результат в ТаблицеЗначений - меня полностью устраивает.
В запросе изначально не известно сколько будет в итоге Колонок и как они будут называться.
(типа Март_2024, Апрель_2024)
Но на этот запрос надо в пользовательском режиме накладывать произвольные отборы типа:
Номенклатура в группе, не в группе, в списке, тоже самое по складу и т.п..
Это может сделать, насколько понимаю только КомпоновщикНастроекСКД-Настройки-Отбор.
Положил на форму Обработки - КомпоновщикНастроекСКДНастройкиОтбор, далее
в Макет СКД засунул текст запроса с минимально возможными колонками, и в результате на выходе, ловлю только эти колонки...
а как быть с остальными?
я знаю как они будут называться, как их программно добавить в СКД?
В запросе изначально не известно сколько будет в итоге Колонок и как они будут называться.
(типа Март_2024, Апрель_2024)
Но на этот запрос надо в пользовательском режиме накладывать произвольные отборы типа:
Номенклатура в группе, не в группе, в списке, тоже самое по складу и т.п..
Это может сделать, насколько понимаю только КомпоновщикНастроекСКД-Настройки-Отбор.
Положил на форму Обработки - КомпоновщикНастроекСКДНастройкиОтбор, далее
ТекстЗапроса = ТекстЗапроса();
СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Объект").ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса();
НастройкиКомпоновки = КомпоновщикНастроекСКД.ПолучитьНастройки();
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", НаДату);
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода", Период.ДатаНачала);
НастройкиКомпоновки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода", Период.ДатаОкончания);
КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакетаКомпоновкиДанных.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВыводаРезультата = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ = Новый ТаблицаЗначений;
ПроцессорВыводаРезультата.УстановитьОбъект(ТЗ);
ПроцессорВыводаРезультата.Вывести(ПроцессорКомпоновки);
Показатьв Макет СКД засунул текст запроса с минимально возможными колонками, и в результате на выходе, ловлю только эти колонки...
а как быть с остальными?
я знаю как они будут называться, как их программно добавить в СКД?
По теме из базы знаний
- Как сдать экзамен 1С:Специалист по платформе?
- Комплексный контроль остатков. Для одного или сразу нескольких логически связанных регистров накопления. Универсальное решение уровня данных для контроля не только складских остатков
- Варианты применения СКД вне отчетов в отраслевых конфигурациях
- Как я с отчетом СКД боролся (произвольный макет)!
- Как мы подружили "1С:Аналитику" и "Финансист". Практический опыт
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
1) Все обязательные поля в отчете пишешь отдельным запросом или внешним источником данных с описанием полей и их типов.
2) Аттачишь к нему в источниках данных свой произвольный источник данных по опять же обязательным в отчете полям. После этого выносишь свои настройки отборов куда надо. Но попадутся в отборы только они, т.к. динамически получаемый запрос и его поля на этом моменте еще не известен
3) Запрос или добавляешь в источник данных перед компоновкой или вообще данные во внешнюю таблицу построителем запроса выгружаешь а потом
3а) Пробегаешь по колонкам этой таблицы (результирующего запроса) и создаешь в источнике данных поля СКД с нужным типом и свойствами.
4) Определяешь программно вычисляемые поля
5) Определяешь программно ресурсы
6) Определяешь программно настройки - группировки, поля, отборы, сортировки, пользовательские поля.
7) Определяешь программно условное оформление
Вызываешь всю цепочку работы с СКД до получения результата.
Как по мне - оно того не стоит. Март24, Апрель24 это значения 2х столбцов "Месяц","Данныемесяца", который в настройках Таблицей выводишь.
2) Аттачишь к нему в источниках данных свой произвольный источник данных по опять же обязательным в отчете полям. После этого выносишь свои настройки отборов куда надо. Но попадутся в отборы только они, т.к. динамически получаемый запрос и его поля на этом моменте еще не известен
3) Запрос или добавляешь в источник данных перед компоновкой или вообще данные во внешнюю таблицу построителем запроса выгружаешь а потом
3а) Пробегаешь по колонкам этой таблицы (результирующего запроса) и создаешь в источнике данных поля СКД с нужным типом и свойствами.
4) Определяешь программно вычисляемые поля
5) Определяешь программно ресурсы
6) Определяешь программно настройки - группировки, поля, отборы, сортировки, пользовательские поля.
7) Определяешь программно условное оформление
Вызываешь всю цепочку работы с СКД до получения результата.
Как по мне - оно того не стоит. Март24, Апрель24 это значения 2х столбцов "Месяц","Данныемесяца", который в настройках Таблицей выводишь.
(4) Результат запроса не выгрузить в ТаблицуЗначений? Поймите меня правильно - звучит странно
Но тут сейчас не очень понятна сама концепция действия. СКД хороша тем, на что на основе описания источника данных позволяет автоматизировать сложные графические варианты вывода, которые в свою очередь влияют на источник.
Т.е. схема такая:
Этап настроек отчета:
1) Декларативное описание источника (запросы, объединения, внешние источники) ОБЯЗАТЕЛЬНОЕ
2) Декларативное описание преобразования данных и их ролей, влияющих на настройки
3) Настройки вывода данных на основе 1+2.
Этап исполнения отчета
4) Преобразование Источника согласно настройкам 3)
5) Компоновка полученных данных
6) итд.
Давайте опишем Вашу схему:
1) Этап предварительных настроек запроса - обязательные поля
2) Описание этих полей
3) Настройки вывода
4) Анализ пользовательских настроек (какие он запросил периоды?) и на основе анализа изменение п 1).
- Вот тут сразу рисуется зацикленность. Условный выход из этого цикла это когда источники данных в п1) и после п4) остаются одинаковыми
Как по мне тянуть такое концептуальное изменение работы СКД ради местечкового запроса - очень спорный вопрос. Легче сразу задать избыточность по полям, включив туда все возможные вообще варианты, все равно в результирующий запрос они не попадут, если пользователь их не выберет.
Но тут сейчас не очень понятна сама концепция действия. СКД хороша тем, на что на основе описания источника данных позволяет автоматизировать сложные графические варианты вывода, которые в свою очередь влияют на источник.
Т.е. схема такая:
Этап настроек отчета:
1) Декларативное описание источника (запросы, объединения, внешние источники) ОБЯЗАТЕЛЬНОЕ
2) Декларативное описание преобразования данных и их ролей, влияющих на настройки
3) Настройки вывода данных на основе 1+2.
Этап исполнения отчета
4) Преобразование Источника согласно настройкам 3)
5) Компоновка полученных данных
6) итд.
Давайте опишем Вашу схему:
1) Этап предварительных настроек запроса - обязательные поля
2) Описание этих полей
3) Настройки вывода
4) Анализ пользовательских настроек (какие он запросил периоды?) и на основе анализа изменение п 1).
- Вот тут сразу рисуется зацикленность. Условный выход из этого цикла это когда источники данных в п1) и после п4) остаются одинаковыми
Как по мне тянуть такое концептуальное изменение работы СКД ради местечкового запроса - очень спорный вопрос. Легче сразу задать избыточность по полям, включив туда все возможные вообще варианты, все равно в результирующий запрос они не попадут, если пользователь их не выберет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот