Программное добавление пользовательского поля в настройки СКД

1. ermek6 22 12.02.19 14:26 Сейчас в теме
Ребята, всем привет!
Помогите пожалуйста со следующим вопросом:

Есть обработка, которая получает СКД из отчета, меняет его настройки и отправляет данные в прекрасное далеко.

Появилась необходимость добавить вычисляемое поле, которого в исходом СКД нету.

Думается мне, что реализовать данную возможность реально с использованием пользовательских полей, но вот никак не могу найти, как его туда засунуть.

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

Ресурс = СКД.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "НовоеПолеОтчета";
Ресурс.Выражение = "Сумма(НовоеПолеОтчета)";
slige; as7bs; dvissarov5; ermek6; singlych; +5 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 12.02.19 14:33 Сейчас в теме
(1) Раз нужны вычисляемые поля, так и добавляйте их. Пользовательские поля для пользователей. :-)
ВычисляемоеПоле = СКД.ВычисляемыеПоля.Добавить();
ВычисляемоеПоле.ПутьКДанным = "НовоеПолеОтчета";
ВычисляемоеПоле.Выражение = "123";

Ресурс = СКД.ПоляИтога.Добавить();
Ресурс.ПутьКДанным = "НовоеПолеОтчета";
Ресурс.Выражение = "Сумма(НовоеПолеОтчета)";
slige; as7bs; dvissarov5; ermek6; singlych; +5 Ответить
3. ermek6 22 12.02.19 14:51 Сейчас в теме
(2) Когда добавляю его в вывод (ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных) при формировании пишет "Поле не найдено" добавляю следующим образом поле:

	ПолеКлиент = СКД.ВычисляемыеПоля.Добавить();
	//ПолеКлиент.ОграничениеИспользования.Поле = Истина;
	ПолеКлиент.ПутьКДанным = "payer";
	ПолеКлиент.Заголовок = "payer";
	ПолеКлиент.Выражение = "Выбор
						   |	Когда ЗаказНаряд.ВидРемонта.КодВыгрузки = ""КР""
						   |Тогда ""Клиент""
						   |Иначе """"
						   |Конец";
Показать
4. dhurricane 12.02.19 15:08 Сейчас в теме
(3) Вы модифицируете СКД до инициализации Компоновщика настроек?
5. ermek6 22 12.02.19 15:12 Сейчас в теме
(4)
(3) Вы модифицируете СКД до инициализации Компоновщика настроек?


Да.
6. dhurricane 12.02.19 15:18 Сейчас в теме
(5) У Вас в примере СКД из макета получается дважды. Это не могло помешать?
7. ermek6 22 12.02.19 15:23 Сейчас в теме
Доеду до дома и обязательно проверю это
(6)
8. ermek6 22 12.02.19 15:57 Сейчас в теме
(6) Спасибо, что указали. Более того, компоновщик макета вызывался так
	МакетКомпоновки = КомпоновщикМакета.Выполнить(Отчеты.Выработка.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"), КомпоновщикНастроек.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));


Под вечер глаз совсем замылился :-(
9. Tigreno 15.08.23 17:34 Сейчас в теме
На всякий случай, может кому пригодится!

Если ваша конфигурация на БСП и программно правите схему компоновки данных, например в процедуре ПриСозданииНаСервере, то надо установить СхемаМодифицирована в Истина, а то при компоновке используется стандартная.

Форма.НастройкиОтчета.СхемаМодифицирована = истина
VyacheslavShilov; StAsya_1C; zabaluev; Necytij; +4 Ответить
10. zabaluev 465 03.09.24 12:19 Сейчас в теме
(9)
Форма.НастройкиОтчета.СхемаМодифицирована = истина


Спасибо за инфу. Такой маленький нюанс, пол дня потеря, пока случайно увидел этот пост, добавил строку, все заработало, как надо.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот