Связывание параметров СКД с реквизитами на форме

Версия для печатиPDF-версия

Платформа:

В общем, надо сделать так, чтобы СКД подхватывал значения реквизитов формы и подставлял их в качестве параметров СКД.
Для чего? - потому что в стандартном режиме тяжело настроить "красоту" формы, которая требуется клиентам
 

Я для этого использую такую процедуру:

&НаСервере
Процедура УстановитьЗначениеПараметра(ИмяПараметра, Значение, Использование = Истина)
	ПараметрыОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных;
	Параметр = ПараметрыОтчета.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра));
	Параметр.Значение = Значение;
	Параметр.Использование = Использование;
КонецПроцедуры

Добавляете обработчик события ПриИзменении у элемента формы и в нём вызываете вышеописанную процедуру. Например:

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	УстановитьЗначениеПараметра("Контрагент", Контрагент);
КонецПроцедуры

Для параметров да, подходит. А для отбора?
 

А если вытащить на форму Отбор компоновщика настроек? (Реквизит формы Отчет - КомпоновщикНастроек - Настройки - Отбор.)

 
Функция ПолучитьЗначениеПараметра (НазваниеПараметра)  Экспорт
 
Для  Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
 
Если  Строка(Элемент.Параметр) = НазваниеПараметра Тогда
 
Возврат Элемент.Значение;
 
КонецЕсли;
КонецЦикла;
 
КонецФункции
 
Функция ПолучитьЗначениеОтбора (НазваниеОтбора)  Экспорт
 
Для  Каждого Элемент ИЗ   КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
 
Если  Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда
Если Элемент.Использование Тогда
ВидСравненияСтрока = "";
 
Если  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда
ВидСравненияСтрока = "=";
 
ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше Тогда
ВидСравненияСтрока = "<";
 
ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно Тогда
ВидСравненияСтрока = "<=";
 
ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше Тогда
ВидСравненияСтрока = ">";
 
ИначеЕсли  Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно Тогда
ВидСравненияСтрока = ">=";
 
КонецЕсли; 
 
СтруктураОтбора = Новый Структура  ("ВидСравнения, ВидСравненияСтрока, ЗначениеОтбора", Элемент.ВидСравнения, ВидСравненияСтрока, Элемент.ПравоеЗначение) ; 
 
Возврат СтруктураОтбора;
КонецЕсли;
КонецЕсли;
 
КонецЦикла;
 
КонецФункции
 
Процедура УстановитьЗначениеПараметра (НазваниеПараметра, ЗначениеПараметра) Экспорт
 
 
Для  Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
 
Если  Строка(Элемент.Параметр) = НазваниеПараметра Тогда
 
Элемент.Значение = ЗначениеПараметра ;
Элемент.Использование = Истина;
 
КонецЕсли;
КонецЦикла;
 
КонецПроцедуры
 
Процедура УстановитьЗначениеОтбора (НазваниеОтбора, ЗначениеОтбора, ВидСравнения, Использование = ИСТИНА) Экспорт 
 
Для  Каждого Элемент ИЗ   КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
 
Если  Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда
Элемент.ВидСравнения = ВидСравнения;
Элемент.ПравоеЗначение = ЗначениеОтбора ;
Элемент.Использование = Использование;
 
КонецЕсли;
КонецЦикла;
 
КонецПроцедуры
 
Функция ВернутьЗначениеПараметраНастройкиСКД(ИмяНастройки, ЗначениеПоУмолчанию = Неопределено) Экспорт
 
Настройка = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяНастройки);
 
Если Настройка = Неопределено Тогда 
Возврат 
ЗначениеПоУмолчанию; 
КонецЕсли;
 
НастройкаПоИД = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Настройка.ИдентификаторПользовательскойНастройки);
 
Если НастройкаПоИД = Неопределено Тогда 
Возврат 
ЗначениеПоУмолчанию; 
КонецЕсли;
 
Если Не ЗначениеЗаполнено(НастройкаПоИД.Значение) Тогда 
Если Не ЗначениеПоУмолчанию = Неопределено Тогда
НастройкаПоИД.Значение = ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
 
Возврат ?(НастройкаПоИД.Использование, НастройкаПоИД.Значение, ЗначениеПоУмолчанию); 
КонецФункции