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

Сделать это можно из формы отчёта. То есть, пользователь задаёт значение в форме отчёта, например какую-то дату, и это значение должно передаваться в систему компоновки данных.

Первым делом создаём форму отчёта. Добавляем реквизит формы, назовём его "НашаДата". Тип реквизита укажем – "Дата". Вынесем реквизит на форму.

Откроем свойства созданного поля на форме. Создадим обработчик события "ПриИзменении".

Теперь в модуле формы организуем передачу параметра в СКД.

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

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	ДатаПриИзмененииНаСервере();
КонецПроцедуры

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

В случае, когда параметры заданы в тексте запроса СКД, но не на вкладке "Параметры" конструктора, тогда код нужно настроить в соответствии со следующим примером:

Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных;
Параметр = Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПараметрУказанныйВЗапросе"));

Если Параметр <> Неопределено Тогда

    Параметр.Значение = ЗначениеКотороеМыХотимУстановить;
	Параметр.Использование = Истина;

КонецЕсли;

Комментарии   

0 #1 Программер 20.04.2017 12:28
Спасибо, помогло!
Цитировать

Комментарии

  • Гринёв 20.12.2017 09:45
    Только надо иметь ввиду, что СтандартнаяОбработка = Ложь в процедуре ПриКомпоновкеРезультата отключает стандартную расшифровку полей отчёта.

    Подробнее...

     
  • proekt 06.12.2017 10:03
    Привет. Обработка проведения РасходнойНакладной запрос от проведения ПланаПродаж необходимо подправить запрос для Расходной. Такой вопрос при проведении Расходной накладной почему сразу в запросе не ...

    Подробнее...

     
  • Ivan 01.11.2017 14:14
    Неверно. Так мы узнаем DNS сервер по умолчанию, но он не обязательно совпадает с контроллером домена. Нужно так > set logon В ответе получим имя сервера, на котором мы залогинились.

    Подробнее...