|
Программная настройка СКД | ☑ | ||
---|---|---|---|---|
0
Кондидат В
11.02.19
✎
09:05
|
Ребят, всем привет!
Необходимо настроить выгрузку данных в JSON из отчета. Сделал обработку, которая на основе СКД отчета получет данные. Делаю так: СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = СКД.НастройкиПоУмолчанию; Настройки.Структура.Очистить(); Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование = Истина; Для Каждого КиЗ ИЗ СтруктураПолей Цикл ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); ВыбранноеПоле.Заголовок = КиЗ.Ключ; ВыбранноеПоле.Использование = Истина; ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(КиЗ.Значение); КонецЦикла; Данные вывожу в ТЗ, но в ней выводится итоговая строка. Собственно вопрос в том, какой настройкой обрать ее? В коллекции Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы получить ее по имени не могу через [], как и через Настройки |
|||
1
Nikoss
11.02.19
✎
09:16
|
(0) имхо, нужно программно настройку СКД поправить, с вкладки "Другие настройки", "Расположение итого" = Нет
|
|||
2
Кондидат В
11.02.19
✎
09:19
|
(1) Вот и не могу программно найти где в НЕТ выставить группировку.
В сам отчет лезть не хочу :) |
|||
3
toypaul
гуру
11.02.19
✎
09:28
|
в отладчике разве не показывает все параметры в списке Группировка.ПараметрыВывода.ДоступныеПараметры.Элементы
? |
|||
4
Кондидат В
11.02.19
✎
09:30
|
(3) Эту коллекцию я видел. Изменить ее не могу :(
|
|||
5
Кондидат В
11.02.19
✎
09:32
|
Забивая Группировка.ПараметрыВывода.Элементы["РасположениеИтогов"] получаю {(1)}: Поле объекта не обнаружено (РасположениеИтогов)
|
|||
6
toypaul
гуру
11.02.19
✎
09:32
|
ПараметрыВывода.УстановитьЗначениеПараметра ?
|
|||
7
Кондидат В
11.02.19
✎
09:37
|
(6) Спасибо.
Помогла УстановитьЗначениеПараметра("РасположениеИтогов", РасположениеИтоговКомпоновкиДанных.Нет) |
|||
8
Кондидат В
11.02.19
✎
11:58
|
===========================================
Еще вопрос по СКД: А как добавить группу ИЛИ в отборы программно? |
|||
9
toypaul
гуру
11.02.19
✎
12:12
|
Группа = Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; |
|||
10
Кондидат В
12.02.19
✎
07:58
|
И снова подниму вопрос.
Я тут когнитивный диссонанс поймал. В общем решил дать пользователю возможность настроек отбора, для чего в обработку добавил реквизит "КомпоновщикНастроек" типа КомпоновщикНастроекКомпоновкиДанных. В процедуре при открытии прописал следующий код: ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); ОбработкаОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД)); ОбработкаОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию); Настройки = ОбработкаОбъект.КомпоновщикНастроек.Настройки; МассивЭлементовОтбора = Новый Массив; Для Каждого ЭлементОтбора ИЗ Настройки.Отбор.Элементы Цикл МассивЭлементовОтбора.Добавить(ЭлементОтбора); КонецЦикла; Для Каждого ЭлементОтбора ИЗ МассивЭлементовОтбора Цикл Настройки.Отбор.Элементы.Удалить(ЭлементОтбора); КонецЦикла; Настройки.Структура.Очистить(); Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВертикальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет); Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование = Истина; И в нем предпоследняя строка дает ошибку: {Обработка.ВыгрузкаНМГР.Форма.Форма.Форма(70)}: Ошибка при установке значения атрибута контекста (Группировка) Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Несоответствие типов хотя следующий код СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Настройки = СКД.НастройкиПоУмолчанию; Настройки.Структура.Очистить(); Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВертикальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет); Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных")); Группировка.Использование = Истина; прекрасно отрабатывает. Посмотрел в отладчике тип структуры, в обоих случаях это "КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных" Может кто подскажет направление рытья??? |
|||
11
toypaul
гуру
12.02.19
✎
08:14
|
не надо было добавлять КомпоновщикНастроек в объект. можно обойтись добавлением его на форму.
вот это вообще не пойму как работает в при открытии ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); оно не должно там работать |
|||
12
Кондидат В
12.02.19
✎
08:17
|
(11) ну так на клиенте вызываю серверную ПриОткрытии
|
|||
13
Кондидат В
12.02.19
✎
08:18
|
+(12) На форму в параметры или в реквизиты лучше пихнуть?
|
|||
14
DrZombi
гуру
12.02.19
✎
08:59
|
(0) Долго, лень читать....
Вот, в древо значений... это из ЗУП 3.1 Обработка = РеквизитФормыВЗначение("Объект"); СхемаКомпоновкиДанных = Обработка.ПолучитьМакетОтчета2("ОтчетыПоСотрудникамРасширенный"); КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных(); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); СтрОбъект = Новый Структура(); СтрОбъект.Вставить("СхемаКомпоновкиДанных",СхемаКомпоновкиДанных); СтрОбъект.Вставить("КомпоновщикНастроек",КомпоновщикНастроек); ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(СтрОбъект, СоответсвиеДополнительныхПолейПредставлениям); //создадим компоновщик настроек и загрузим настройки по умолчанию, вместо настроек по умолчанию можно использовать восстановленные настройки КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Настройки = КомпоновщикНастроек.Настройки; //установка параметров отчета, без КомпоновщикНастроекКомпоновкиДанных делать это гораздо сложнее //Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СвойствоВодитель", мСвойствоВодитель); //Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("Заголовок", Заголовок); //Установить отбор... ЭлементыОтборов = Настройки.Отбор.Элементы; Если ЗначениеЗаполнено(Подразделение) Тогда ЭлемОтбора = ЭлементыОтборов[1]; ЭлемОтбора.Использование = Истина; ЭлемОтбора.ПравоеЗначение = Подразделение; КонецЕсли; Если ЗначениеЗаполнено(Должность) Тогда ЭлемОтбора = ЭлементыОтборов[2]; ЭлемОтбора.Использование = Истина; ЭлемОтбора.ПравоеЗначение = Должность; КонецЕсли; Если ЗначениеЗаполнено(Сотрудник) Тогда ЭлемОтбора = ЭлементыОтборов[3]; ЭлемОтбора.Использование = Истина; ЭлемОтбора.ПравоеЗначение = Сотрудник; КонецЕсли; //Помещаем в переменную данные о расшифровке данных - здесь ненужный пункт, но пусть будет. ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ВнешниеНаборыДанных = Неопределено; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, , Истина); ДанныеОтчета = Новый ДеревоЗначений; ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВывода.УстановитьОбъект(ДанныеОтчета); ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); //ДопСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; //ДопСвойства.Вставить("ОтчетПустой", ДанныеОтчета.Строки.Количество() = 0); //РезультатКомпоновкиМакета.Вставить("ДанныеОтчета", ДанныеОтчета); //ДопСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; //ДопСвойства.Вставить("ОтчетПустой", ДанныеОтчета.Строки.Количество() = 0); //РезультатКомпоновкиМакета.Вставить("ДанныеОтчета", ДанныеОтчета); Объект.Сотрудники.Очистить(); ТЗ = Объект.Сотрудники.Выгрузить(); Для Каждого СтрокаУр1 Из ДанныеОтчета.Строки Цикл Для Каждого СтрокаУр2 Из СтрокаУр1.Строки Цикл Для Каждого СтрокаУр3 Из СтрокаУр2.Строки Цикл НовСтрокаТЗ = ТЗ.Добавить(); НовСтрокаТЗ.Сотрудник = СтрокаУр3.РабочееМестоСотрудник; НовСтрокаТЗ.НомерДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорНомер; НовСтрокаТЗ.ДатаДоговора = СтрокаУр3.РабочееМестоТрудовойДоговорДата; НовСтрокаТЗ.Оклад = СтрокаУр3.РабочееМестоТарифнаяСтавка; НовСтрокаТЗ.Подразделение = СтрокаУр3.РабочееМестоПодразделение; НовСтрокаТЗ.Должность = СтрокаУр3.РабочееМестоДолжность; КонецЦикла; КонецЦикла; КонецЦикла; Объект.Сотрудники.Загрузить(ТЗ); |
|||
15
Кондидат В
12.02.19
✎
12:38
|
*****************************************************
Спасибо всем участникам. Для завершенности ветки добавлю от себя: 1. КомпоновщикНастроекКомпоновкиДанных давал ошибку при добавлении группировки, потому что вызывался из модуля формы. Перенес в модуль обработки и все заработало. 2. Для того, что бы КомпоновщикНастроекКомпоновкиДанных увидел все настройки инициировать его надо через временное хранилище АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных)); При добавлении напрямую в ИсточникДоступныхНастроекКомпоновкиДанных СКД ошибки не вылетало, но в настройках небыло доступных полей. |
|||
16
singlych
12.02.19
✎
12:51
|
(13) Он там и так есть как реквизит отчета.
Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки() |
|||
17
singlych
12.02.19
✎
12:54
|
(16) А, там обработка у тебя. Я бы реквизит формы сделал.
|
|||
18
Кондидат В
12.02.19
✎
13:32
|
(17) обработкой первое время будут отправлять данные вручную (для проверки корректности), затем она должна будет по расписанию запускаться. Поэтому через реквизиты делал
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |