Программное добавление пользовательского поля в настройки СКД
Ребята, всем привет!
Помогите пожалуйста со следующим вопросом:
Есть обработка, которая получает СКД из отчета, меняет его настройки и отправляет данные в прекрасное далеко.
Появилась необходимость добавить вычисляемое поле, которого в исходом СКД нету.
Думается мне, что реализовать данную возможность реально с использованием пользовательских полей, но вот никак не могу найти, как его туда засунуть.
Настройки получаю так:
Помогите пожалуйста со следующим вопросом:
Есть обработка, которая получает СКД из отчета, меняет его настройки и отправляет данные в прекрасное далеко.
Появилась необходимость добавить вычисляемое поле, которого в исходом СКД нету.
Думается мне, что реализовать данную возможность реально с использованием пользовательских полей, но вот никак не могу найти, как его туда засунуть.
Настройки получаю так:
СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
СтруктураПолей = Новый Структура("
|vin
|,date
|,order_number
|,work_total
|,parts_total
|,order_Type
|,mileage
|,payer"
,"Автомобиль.VIN"
,"ЗаказНаряд.Дата"
,"ЗаказНаряд.Номер"
,"СуммаРабот"
,"СуммаНоменклатуры"
,"ЗаказНаряд.ВидРемонта.КодВыгрузки"
,"ЗаказНаряд.Пробег"
,"ЗаказНаряд.Контрагент"
);
СКД = Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
//Настройки = СКД.НастройкиПоУмолчанию;
Настройки = КомпоновщикНастроек.Настройки;
МассивЭлементовОтбора = Новый Массив;
Для Каждого ЭлементОтбора ИЗ Настройки.Отбор.Элементы Цикл
МассивЭлементовОтбора.Добавить(ЭлементОтбора);
КонецЦикла;
Для Каждого ЭлементОтбора ИЗ МассивЭлементовОтбора Цикл
Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
КонецЦикла;
Настройки.Структура.Очистить();
Настройки.ПараметрыВывода.УстановитьЗначениеПараметра("ВертикальноеРасположениеОбщихИтогов", РасположениеИтоговКомпоновкиДанных.Нет);
Группировка = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Группировка.Использование = Истина;
Для Каждого КиЗ ИЗ СтруктураПолей Цикл
ВыбранноеПоле = Группировка.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Заголовок = КиЗ.Ключ;
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(КиЗ.Значение);
КонецЦикла;
Дата = НачалоДня(НачалоДня(ТекущаяДата())-1)-1;
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаНачала", НачалоМесяца(Дата));
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ДатаОкончания", КонецДня(Дата));
ПоказатьПо теме из базы знаний
Найденные решения
(1) Раз нужны вычисляемые поля, так и добавляйте их. Пользовательские поля для пользователей. :-)
ВычисляемоеПоле = СКД.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.ПутьКДанным = "НовоеПолеОтчета";
ВычисляемоеПоле.Выражение = "123";
Ресурс = СКД.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "НовоеПолеОтчета";
Ресурс.Выражение = "Сумма(НовоеПолеОтчета)";
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Раз нужны вычисляемые поля, так и добавляйте их. Пользовательские поля для пользователей. :-)
ВычисляемоеПоле = СКД.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.ПутьКДанным = "НовоеПолеОтчета";
ВычисляемоеПоле.Выражение = "123";
Ресурс = СКД.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "НовоеПолеОтчета";
Ресурс.Выражение = "Сумма(НовоеПолеОтчета)";
(2) Когда добавляю его в вывод (ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных) при формировании пишет "Поле не найдено" добавляю следующим образом поле:
ПолеКлиент = СКД.ВычисляемыеПоля.Добавить();
//ПолеКлиент.ОграничениеИспользования.Поле = Истина;
ПолеКлиент.ПутьКДанным = "payer";
ПолеКлиент.Заголовок = "payer";
ПолеКлиент.Выражение = "Выбор
| Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = ""КР""
|Тогда ""Клиент""
|Иначе """"
|Конец";
Показать
(6) Спасибо, что указали. Более того, компоновщик макета вызывался так
Под вечер глаз совсем замылился :-(
МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"), КомпоновщикНастроек.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
Под вечер глаз совсем замылился :-(
На всякий случай, может кому пригодится!
Если ваша конфигурация на БСП и программно правите схему компоновки данных, например в процедуре ПриСозданииНаСервере, то надо установить СхемаМодифицирована в Истина, а то при компоновке используется стандартная.
Если ваша конфигурация на БСП и программно правите схему компоновки данных, например в процедуре ПриСозданииНаСервере, то надо установить СхемаМодифицирована в Истина, а то при компоновке используется стандартная.
Форма.НастройкиОтчета.СхемаМодифицирована = истина
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот