Как программно Установить значения Параметров для отчета СКД? Например у отчет есть следующие параметры:
Программно их задать можно следующим образом:
Код 1C v 8.х //Последовательно, начиная с 0 задаем значения параметров: ( НачПериода это 0 элемент, КонПериода - 1, ВыбНалог =2 )
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0].Значение = НачПериода;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1].Значение = КонПериода;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2].Значение = ВыбНалог;
Есть параметр, предопределенное при открытии отчета каждый раз. Как его правильно указать в СКД?
Можно делать так:
Код 1C v 8.х Процедура ПриОткрытии()
//........................
ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Товар");
ПараметрДанных.Значение = Справочники.Номенклатура.НайтиПоНаименованию("Гвозди");
ПараметрДанных.Использование=Истина;
//...........................................
КонецПроцедуры
или
Код 1C v 8.х //Пропишем ТОЧКИ МАРШРУТА
СписТочек = Новый СписокЗначений;
СписТочек.Добавить(БизнесПроцессы.м_Документооборот.ТочкиМаршрута.ОПФПД);
СписТочек.Добавить(БизнесПроцессы.м_Документооборот.ТочкиМаршрута.ОСФПД);
ПараметрСКД = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ТочкаМаршрута");
ПараметрСКД.Значение = СписТочек;
ПараметрСКД.Использование = ИСТИНА;
Для УП
Код 1C v 8.2 УП &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьПривилегированныйРежим(Истина);
СтандартнаяОбработка = Ложь; // если не отключить стандартную обработку, то настройки затрутся
ДатаОтчета = ТекушаяДата();
3начениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Найти3начениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНач"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
ЗначениеПараметра.Значение = КонецДня(ДатаОтчета) - (7 * 86400);
КонецЕсли;
3начениеПараметра = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Найти3начениеПараметра(Новый ПараметрКомпоновкиДанных("Свойство1"));
Если НЕ ЗначениеПараметра = Неопределено Тогда
ЗначениеПараметра.Использование = Истина;
3начениеПараметра = Справочники.3наченияСвойствОбъектов.НайтиПоКоду("000000004");
КонецЕсли;
КонецПроцедуры
Категория:
Схема Компоновки Данных Параметр – список значений с пустым значением Нашёл такие грабли – когда делаешь параметр списком значений, СКД зачем-то сама в этот список вставляет строку с пустым значением.
Я этот параметр передаю в запрос, и если тип параметра является иерархическим справочником, это пустое значение похоже отбирает любого родителя в иерархии, и как следствие, все значения справочника. Кстати, такой же косяк можно увидеть в отборах, если сделать вид сравнения «в группе из списка» и в список добавить строку с пустым значением.
А так как юзер тупо заполняет этот список подбором, то ему по фигу, что там какие-то пустые значения. Объяснять, что пустых значения в списке надо удалять – бесполезно. Виноват-то программист!
Нашёл, как это лечить, может кому-то пригодится.
Код 1C v 8.х Процедура УдалениеПустыхЗначенийПараметровСКДВВидеСписка(ЭтотОбъект, СхемаКомпоновкиДанных)
Параметры = СхемаКомпоновкиДанных.Параметры;
Для Каждого Параметр Из Параметры Цикл
Если Параметр.ДоступенСписокЗначений = Истина Тогда
ПараметрДанных = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.
НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(Параметр.Имя));
СпЗначениеПараметра = ПараметрДанных.Значение;
Для Индекс=0 По СпЗначениеПараметра.Количество()-1 Цикл
Если Индекс > СпЗначениеПараметра.Количество()-1 Тогда
Прервать;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СпЗначениеПараметра[Индекс].Значение) Тогда
СпЗначениеПараметра.Удалить(Индекс);
Индекс = Индекс - 1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Ченыш Категория:
Схема Компоновки Данных