|
Свернуть ТаблицаЗначений с агрегатными функциями или СКД с набором данных Объект | ☑ | ||
---|---|---|---|---|
0
7OH
01.04.14
✎
15:38
|
В общем давно появилось желание сворячивать ТЗ не только с СУММИРОВАНИЕМ колонок, но и с возможностью получения МАКСИМУМ, КОЛВО....
При наличии объекта (как обработка или отчет) - с этим прекрасно справляется СКД, на основании схемы программно вывел в дерево: и итоги есть и детальные записи в случае чего. Тут на форуме уже поднимали вопрос о создании СКД с набором данных объект (ТаблицаЗначений) с нуля без хранения самой схемы компоновки как объекта, но к сожалению многие темы сданы в архив и зачастую самого решения в ветках нет. У кого таки вышло это сделать программно - поделитесь. |
|||
1
vicof
01.04.14
✎
15:44
|
||||
2
Chai Nic
01.04.14
✎
15:49
|
Через передачу ТЗ в запрос?
|
|||
3
7OH
01.04.14
✎
15:50
|
(1) Я так тоже умею.
В первой ссылке - выполнение схему по макету, а не с нуля. Вторая - тоже по макету. Нет у меня макета - только код. Я потому тут и спрашиваю - поиски ведут на многи статьи тут, где автор "я понял, у меня заработало" и пропал. |
|||
4
7OH
01.04.14
✎
15:51
|
(2)
лучше без запроса прямо по таблице отработать - установить как набор данных и дальше уже скд с ней пусть что надо то и делает. |
|||
5
Maxus43
01.04.14
✎
15:53
|
а что не получается? Добавить поля в СКД программно?
|
|||
6
7OH
01.04.14
✎
15:58
|
(5)
внешний набор устанавливается в процессоре компоновки, который требует компоновщик а компоновщик ругается на отсутствие источника МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы); ---- В общем ищу хоть какой-то рабочий код |
|||
7
Defender aka LINN
01.04.14
✎
16:07
|
(0) Дык создавай. В чем проблема-то?
|
|||
8
МихаилМ
01.04.14
✎
16:12
|
откройте для себя объект "анализ данных".
он умеет исполнять Ваше желания. |
|||
9
МихаилМ
01.04.14
✎
16:19
|
(0)
на 1cskd.ru есть обработка , преобразующая xml скд в код 1с. обработка на уф |
|||
10
Serginio1
01.04.14
✎
17:29
|
||||
11
7OH
01.04.14
✎
19:34
|
(9) Спасибо.
Таки разобрался. Если кому тоже будет интерсно, поделюсь. <code> Функция РазбитьСтроку(ИсходнаяСтрока,Разделитель) Рез = Новый Массив; Строки = СтрЗаменить(ИсходнаяСтрока,Разделитель,Символы.ПС); Для Ном = 1 По СтрЧислоСтрок(Строки) Цикл Рез.Добавить(СтрПолучитьСтроку(Строки,Ном)); КонецЦикла; Возврат Рез; КонецФункции Функция СвернутьТаблицуСКД(лТЗ,лКолонки,лИтоги,вТаблицу=Истина) //Получим массивы колонок из строк масКолонки = РазбитьСтроку(лКолонки,","); масИтоги = РазбитьСтроку(лИтоги,","); СКД = Новый СхемаКомпоновкиДанных; //Объявим истоник данных ИсточникДанных = СКД.ИсточникиДанных.Добавить(); ИсточникДанных.Имя = "ИсточникДанных1"; //любое имя ИсточникДанных.ТипИсточникаДанных = "local"; //добавим набор данных НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных")); НаборДанных.Имя = "НаборДанных1"; //любое имя НаборДанных.ИмяОбъекта = "ТабЗнач"; //имя переменной таблицы НаборДанных.ИсточникДанных = "ИсточникДанных1"; //имя источника данных //создадим внешний набор ВнешниеНаборы = Новый Структура; ВнешниеНаборы.Вставить("ТабЗнач", лТЗ); //Доступные поля таблицы Для каждого элМас Из лТЗ.Колонки Цикл ПолеНабора = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных")); ПолеНабора.Поле = элМас.Имя; ПолеНабора.ПутьКДанным = элМас.Имя; ПолеНабора.Заголовок = элМас.Имя; КонецЦикла; //получили настройки Настройки = СКД.НастройкиПоУмолчанию; //чтобы не получать общий итог парам=Настройки.ПараметрыВывода.Элементы.Найти("ВертикальноеРасположениеОбщихИтогов"); парам.Использование = Истина; парам.Значение = РасположениеИтоговКомпоновкиДанных.Нет; //добавим группировку по нашим реквизитам Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование =Истина; ВыбПолеГруппировка = Группировка.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ВыбПолеГруппировка.Использование =Истина; Для каждого элМас Из масКолонки Цикл ПолеГруппы=Группировка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных")); ПолеГруппы.Использование=Истина; ПолеГруппы.Поле = Новый ПолеКомпоновкиДанных(элМас); КонецЦикла; //а тут будут детальные записи, на всякий случай Группировка2 = Группировка.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка2.Использование =Истина; ВыбПолеГруппировка2 = Группировка2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных")); ВыбПолеГруппировка2.Использование =Истина; //дообавим для вывода все поля Для каждого элМас Из лТЗ.Колонки Цикл ВыбПоле = Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбПоле.Использование =Истина; ВыбПоле.Заголовок =элМас.Имя; ВыбПоле.Поле = Новый ПолеКомпоновкиДанных(элМас.Имя) ; КонецЦикла; //добавим наши ресурсы, чего собственно и добивались Для каждого элМас Из масИтоги Цикл полеИтога=СКД.ПоляИтога.Добавить(); лПуть=Сред(элМас,Найти(элМас,"(")+1); лПуть=Лев(лПуть, Найти(лПуть,")")-1); полеИтога.ПутьКДанным = лПуть; полеИтога.Выражение = элМас; КонецЦикла; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Попытка МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, СКД.НастройкиПоУмолчанию, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, , Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; Если вТаблицу Тогда Вернуть=Новый ТаблицаЗначений; ПроцессорВывода.УстановитьОбъект(Вернуть); Иначе Вернуть=Новый ДеревоЗначений; ПроцессорВывода.УстановитьОбъект(Вернуть); КонецЕсли; ПроцессорВывода.Вывести(ПроцессорКомпоновки); Исключение Если вТаблицу Тогда Вернуть=Новый ТаблицаЗначений; Иначе Вернуть=Новый ДеревоЗначений; КонецЕсли; Сообщить(ОписаниеОшибки()); КонецПопытки; Возврат Вернуть; КонецФункции //Вызов где угодно дОплаты=СвернутьТаблицуСКД(лТаблица, "Измерение1,Измерение2,Измерение3", "СУММА(Ресурс1),МИНИМУМ(Ресурс2),МАКСИМУМ(Ресурс3),Ложь); </code> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |