При создании СКД отчётов, которые берут данные из таблицы значений, возникает необходимость извлечь значения параметров и отборов из СКД в параметры запроса, который выполняется в коде модуля объекта отчёта. Способ извлечения параметров отчётов в конфигурациях на УФ - не является интуитивно доступным, поэтому в данной публикации я приведу листинги готовых функций получения параметров и отборов отчета и пример их применения.
Функция "ПолучитьПользовательскийПараметрСКД", возвращает значение, указанного параметра СКД из пользовательских настроек СКД.
Параметр "ИмяПараметра" - должен содержать имя пользовательского параметра
Параметр "ЗначениеПоУмолчанию" - должен содержать значение по умолчанию. которое вернёт функция в случае если пользовательский параметр с указанным именем не был задан пользователем.
В параметр "ПараметрСКД" - должна передаваться предварительно определенная переменная, так как в случае нахождения пользовательского параметра СКД, функция вернёт в указанную переменную объект "ПараметрСКД".
Функция ПолучитьПользовательскийПараметрСКД(ИмяПараметра, ЗначениеПоУмолчанию, ПараметрСКД)
Перем ПараметрДанных, ИдентификаторПользовательскойНастройки,
Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;
Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Попытка
ИдентификаторПользовательскойНастройки = ПараметрДанных.ИдентификаторПользовательскойНастройки;
Исключение
ВызватьИсключение(СтрШаблон("Не найден параметр СКД ""%1""!", ИмяПараметра));
КонецПопытки;
Если ЗначениеЗаполнено(ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ИдентификаторПользовательскойНастройки);
Если ПользовательскийПараметр <> Неопределено Тогда
ПараметрСКД = ПользовательскийПараметр;
Если ПользовательскийПараметр.Использование Тогда
Возврат ПользовательскийПараметр.Значение;
Иначе
Возврат ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПараметрСКД = Неопределено;
Возврат ЗначениеПоУмолчанию;
КонецФункции // ПолучитьПользовательскийПараметрСКД
Функция "ПолучитьПользовательскийОтборСКД"
Параметр "ИмяОтбора" - должен содержать имя пользовательского отбора.
Параметр "ЗначениеПоУмолчанию" - должен содержать значение по умолчанию. которое вернёт функция в случае, если пользовательский отбор с указанным именем не был задан пользователем.
В параметр "ОтборСКД" - должна передаваться предварительно определенная переменная, так как в случае нахождения пользовательского отбора СКД, функция вернёт в указанную переменную объект "ОтборСКД".
Функция ПолучитьПользовательскийОтборСКД(ИмяОтбора, ЗначениеПоУмолчанию, ОтборСКД)
Перем ПолеКД, Элем, ЭлементОтбора, Настройки,
ПользовательскиеНастройки, ПользовательскийОтбор;
Настройки = ЭтотОбъект.КомпоновщикНастроек.Настройки;
ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
Если Элем.ЛевоеЗначение = ПолеКД Тогда
ЭлементОтбора = Элем;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ОтборСКД = Неопределено;
Возврат ЗначениеПоУмолчанию;
КонецЕсли;
Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
Если ПользовательскийОтбор <> Неопределено Тогда
ОтборСКД = ПользовательскийОтбор;
Если ПользовательскийОтбор.Использование Тогда
Возврат ПользовательскийОтбор.ПравоеЗначение;
Иначе
Возврат ЗначениеПоУмолчанию;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОтборСКД = Неопределено;
Возврат ЗначениеПоУмолчанию;
КонецФункции // ПолучитьПользовательскийОтборСКД
Пример применения:
Функция ПолучитьПараметрыОтчёта()
Перем ПараметрыОтчёта, ПараметрСКД, ОтборСКД,
СтандартнаяДата, Валюта, Организация, СписокКонтрагентов;
ПараметрыОтчёта = Новый Структура();
СтандартнаяДата = ПолучитьПользовательскийПараметрСКД("Дата", Новый СтандартнаяДатаНачала(), ПараметрСКД);
ПараметрыОтчёта.Вставить("Дата", СтандартнаяДата.Дата);
Организация = ПолучитьПользовательскийПараметрСКД("Организация", Справочники.Организации.ПустаяСсылка(), ПараметрСКД);
ПараметрыОтчёта.Вставить("Организация", Организация);
Валюта = ПолучитьПользовательскийПараметрСКД("Валюта", Справочники.Валюты.ПустаяСсылка(), ПараметрСКД);
ПараметрыОтчёта.Вставить("Валюта", Валюта);
СписокКонтрагентов = ПолучитьПользовательскийОтборСКД("Контрагент_", Новый СписокЗначений(), ОтборСКД);
ПараметрыОтчёта.Вставить("СписокКонтрагентов", СписокКонтрагентов);
Попытка
ПараметрыОтчёта.Вставить("НетОтбораПоКонтрагентам", НЕ ОтборСКД.Использование);
Исключение
ПараметрыОтчёта.Вставить("НетОтбораПоКонтрагентам", Истина);
КонецПопытки;
Возврат ПараметрыОтчёта;
КонецФункции // ПолучитьПараметрыОтчёта
Данный код испытывался на платформе 1С 8.3.27.1688 и конфигурации 1С: КА 2.5.22.134.
Вступайте в нашу телеграмм-группу Инфостарт
