________________________________________________________________________
Сформируем тестовый отчёт СКД, задав его параметр "Период" и отбор "Водитель" в обычном приложении с использованием обычных форм.
Для этого нам понадобится:
- Получить объект отчёта;
- Из объекта отчёта получить КомпоновщикНастроек СКД;
- При помощи вспомогательной процедуры "УстановитьПараметрСКД", в настройках СКД установить необходимые параметры отчёта;
- При помощи вспомогательной процедуры "УстановитьОтборСКД", в настройках СКД установить необходимые отборы отчёта;
- При помощи метода "ПолучитьФорму", объекта отчёта, получить форму отчёта;
- При помощи метода "СкомпоноватьРезультат", сформировать отчёт, в качестве первого параметра данного метода нужно указать элемент табличного поля формы отчёта, в котором отображается результат;
- Открыть форму отчёта.
Процедура ОткрытьОтчётСОтборомНажатие(Элемент)
Перем ОбъектОтчёта, КомпоновщикНастроек, Период, ФормаОтчёта;
ОбъектОтчёта = Отчеты.ТестовыйОтчёт.Создать();
КомпоновщикНастроек = ОбъектОтчёта.КомпоновщикНастроек;
Период = Новый СтандартныйПериод();
Период.ДатаНачала = Дата(2021,08,01);
Период.ДатаОкончания = Дата(2021,08,31,23,59,59);
УстановитьПараметрСКД(КомпоновщикНастроек, "Период", Период);
УстановитьОтборСКД(КомпоновщикНастроек, "Водитель", "Петров");
ФормаОтчёта = ОбъектОтчёта.ПолучитьФорму("ФормаОтчета");
ОбъектОтчёта.СкомпоноватьРезультат(ФормаОтчёта.ЭлементыФормы.Результат, ФормаОтчёта.ДанныеРасшифровки);
ФормаОтчёта.Открыть();
КонецПроцедуры // ОткрытьОтчётСОтборомНажатие
Процедура УстановитьПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)
Перем ПараметрДанных;
ПараметрДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
ПараметрДанных.Использование = Истина;
ПараметрДанных.Значение = Значение;
КонецПроцедуры // УстановитьПараметрСКД
Процедура УстановитьОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
Перем Настройки, ПолеКД, Элем, ЭлементОтбора;
Настройки = КомпоновщикНастроек.Настройки;
ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
Если Элем.ЛевоеЗначение = ПолеКД Тогда
ЭлементОтбора = Элем;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = ПолеКД;
КонецЕсли;
ЭлементОтбора.Использование = (Значение <> Неопределено);
ЭлементОтбора.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);
ЭлементОтбора.ПравоеЗначение = Значение;
КонецПроцедуры // УстановитьОтборСКД
Результат выполнения кода:
________________________________________________________________________
Сформируем тестовый отчёт СКД, задав его параметр "Период" и отбор "Водитель" в управляемом приложении с использованием управляемых форм.
Для этого нам понадобится:
- Получить форму отчёта;
- Из реквизита "Отчет", формы отчёта, получить КомпоновщикНастроек СКД;
- При помощи вспомогательной процедуры "УстановитьПользовательскийПараметрСКД", в настройках СКД установить необходимые параметры отчёта;
- При помощи вспомогательной процедуры "УстановитьПользовательскийОтборСКД", в настройках СКД установить необходимые отборы отчёта;
- Сформировать параметры формы;
- Открыть форму отчёта.
&НаКлиенте
Процедура КомандаОткрытьОтчётСОтбором(Команда)
Перем ФормаОтчёта, КомпоновщикНастроек, Период, ПараметрыФормы;
ФормаОтчёта = ПолучитьФорму("Отчет.ТестовыйОтчёт.Форма");
КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;
Период = Новый СтандартныйПериод();
Период.ДатаНачала = Дата(2021,08,01);
Период.ДатаОкончания = Дата(2021,08,31,23,59,59);
УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, "Период", Период);
УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, "Водитель", "Петров");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("КлючВарианта", "Основной");
ПараметрыФормы.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ОткрытьФорму("Отчет.ТестовыйОтчёт.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры // КомандаОткрытьОтчётСОтбором
&НаКлиенте
Процедура УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)
Перем ПараметрДанных, Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;
Настройки = КомпоновщикНастроек.Настройки;
ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
ПользовательскийПараметр.Использование = Истина;
ПользовательскийПараметр.Значение = Значение;
КонецЕсли;
КонецПроцедуры // УстановитьПользовательскийПараметрСКД
&НаКлиенте
Процедура УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
Перем ПолеКД, Элем, ЭлементОтбора, Настройки,
ПользовательскиеНастройки, ПользовательскийОтбор;
Настройки = КомпоновщикНастроек.Настройки;
ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
Если Элем.ЛевоеЗначение = ПолеКД Тогда
ЭлементОтбора = Элем;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
ПользовательскийОтбор.Использование = (Значение <> Неопределено);
ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);
ПользовательскийОтбор.ПравоеЗначение = Значение;
КонецЕсли;
КонецПроцедуры // УстановитьПользовательскийОтборСКД
Результат выполнения кода:
________________________________________________________________________
Представленные реализации не претендуют на «истину в последней инстанции», безусловно данная задача может иметь и другие варианты реализации, например:
1С СКД. Программный запуск отчета с открытием и настройкой (Данная ссылка была предоставлена
А ссылка ниже – краткое руководство по составным частям компоновщика настроек СКД и программной работе с ними: