Каталог решений - Программное открытие отчета СКД с параметрами и отбором

Программное открытие отчета СКД с параметрами и отбором

Программное открытие отчета СКД с параметрами и отбором

В наличии

Периодически возникает задача открытия формы отчёта СКД уже со сформированным отчётом, с определёнными параметрами и отборами. В данной публикации рассматриваются способы сделать это как в обычном приложении, так и в управляемом.

Категория:

Описание

 

Пример для обычных форм

Пример для управляемых форм

Резюме / полезные ссылки

________________________________________________________________________

Сформируем тестовый отчёт СКД, задав его параметр "Период" и отбор "Водитель" в обычном приложении с использованием обычных форм.

Для этого нам понадобится:

  1. Получить объект отчёта;
  2. Из объекта отчёта получить КомпоновщикНастроек СКД;
  3. При помощи вспомогательной процедуры "УстановитьПараметрСКД", в настройках СКД установить необходимые параметры отчёта;
  4. При помощи вспомогательной процедуры "УстановитьОтборСКД", в настройках СКД установить необходимые отборы отчёта;
  5. При помощи метода "ПолучитьФорму", объекта отчёта, получить форму отчёта;
  6. При помощи метода "СкомпоноватьРезультат", сформировать отчёт, в качестве первого параметра данного метода нужно указать элемент табличного поля формы отчёта, в котором отображается результат;
  7. Открыть форму отчёта.

 

 

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

Результат выполнения кода:

 

________________________________________________________________________

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

Для этого нам понадобится:

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

Результат выполнения кода:

 

 

________________________________________________________________________

Представленные реализации не претендуют на «истину в последней инстанции», безусловно данная задача может иметь и другие варианты реализации, например:

Как программно открыть типовые отчеты (Карточку счета, Анализ счета, ОСВ по счету) с отбором, не изменяя сам отчет, в конфигурации БП 3.0

1С СКД. Программный запуск отчета с открытием и настройкой (Данная ссылка была предоставлена Yashazz)

А ссылка ниже – краткое руководство по составным частям компоновщика настроек СКД и программной работе с ними:

Программная работа с настройками СКД
 

has been added to your cart:
Оформление заказа