Краткий конспект и набор функций для вызова отчета на СКД
встроенного в конфигурацию (расширение) с передачей параметров
Параметры и отбор передаются в "отбор"
https://its.1c.ru/db/metod8dev/content/4143/hdoc
&НаКлиентеПроцедура ДО_Информация_О_ДР(Команда)
отбор=новый структура("ИнтервалОтДней,ИнтервалДоДней",7,14);
парам=новый Структура("СформироватьПриОткрытии,отбор",истина,отбор);
ОткрытьФорму("Отчет.Информация_О_ДР.ФормаОбъекта",парам);КонецПроцедуры
&НаКлиенте //вызов после нажатия кнопки
Процедура TSOFT_РезервыТоваровБП_ЧейРезервПосле(Команда)
Перем ФормаОтчёта, КомпоновщикНастроек, Период, ПараметрыФормы;
ФормаОтчёта = ПолучитьФорму("Отчет.Helmer_РезервыТоваровБП_Отчет.Форма");
КомпоновщикНастроек = ФормаОтчёта.Отчет.КомпоновщикНастроек;
//Период = Новый СтандартныйПериод();
//Период.ДатаНачала = ТекущаяДата();
//Период.ДатаОкончания =КонецДня(ТекущаяДата());
Период= КонецДня(ТекущаяДата());//смотри картинку ниже в СКД параметр Дата типа Дата
УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, "Период", Период);
//смотри картинку ниже в СКД Отбор должен называться так же "Номенклатура
УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, "Номенклатура", элементы.СписокНоменклатуры.ТекущиеДанные.Ссылка);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("КлючВарианта", "По номенклатуре");
ПараметрыФормы.Вставить("ПользовательскиеНастройки", КомпоновщикНастроек.ПользовательскиеНастройки);
ОткрытьФорму("Отчет.Helmer_РезервыТоваровБП_Отчет.Форма", ПараметрыФормы, ЭтаФорма);
КонецПроцедуры
Что бы 1с не вылетал с ошибкой при нажатии кнопки изменить вариант
ИТС: Если для отчета на СКД определена собственная основная форма, то для него также следует определить собственную форму настроек (либо в свойствах этого отчета указать общую форму ВспомогательнаяФормаНастроекОтчета). Это требование также распространяется на дополнительные и внешние отчеты, использующиеся в конфигурации с «Полным» вариантом внедрения формы отчета.
формы нет!
эти процедуры располагаюся в модуле формы там же процедура обработки нажатии кнопки (см. выше) TSOFT_РезервыТоваровБП_ЧейРезервПосле
&НаКлиентеПроцедура УстановитьПользовательскийПараметрСКД(КомпоновщикНастроек, ИмяПараметра, Значение)
Перем ПараметрДанных, Настройки, ПользовательскиеНастройки, ПользовательскийПараметр;
Настройки = КомпоновщикНастроек.Настройки;
ПараметрДанных = Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
Если ЗначениеЗаполнено(ПараметрДанных.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийПараметр = ПользовательскиеНастройки.Элементы.Найти(ПараметрДанных.ИдентификаторПользовательскойНастройки);
ПользовательскийПараметр.Использование = Истина;
ПользовательскийПараметр.Значение = Значение;
КонецЕсли;
КонецПроцедуры // УстановитьПользовательскийПараметрСКД
&НаКлиентеПроцедура УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
Перем ПолеКД, Элем, ЭлементОтбора, Настройки,
ПользовательскиеНастройки, ПользовательскийОтбор;
Настройки = КомпоновщикНастроек.Настройки;
ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
Если Элем.ЛевоеЗначение = ПолеКД Тогда
ЭлементОтбора = Элем;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ЭлементОтбора.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
ПользовательскийОтбор = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки);
ПользовательскийОтбор.Использование = (Значение <> Неопределено);
ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);
ПользовательскийОтбор.ПравоеЗначение = Значение;
КонецЕсли;
КонецПроцедуры // УстановитьПользовательскийОтборСКД
для настройки Отбора Обычных настроек. В СКД делаем новый элемент Отбора
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)//*******************************************************************//На закладке варианта отчета Отбор должен быть отбор Каталог//*******************************************************************
ТаблицаОтчета = ПолучитьТаблицуОтчета();//Структура таблицы
ПолучитьДанныеИзJSON(ТаблицаОтчета); //обход всех баз и запись данных в c:\obmen файлов json
СтандартнаяОбработка = Ложь;
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.Настройки;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, "Каталог",ФильтрСтрокой);
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ВнешнийНаборДанных = Новый Структура("ТаблицаОтчета", ТаблицаОтчета);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
ДокументРезультат.Автомасштаб = Истина;
ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;КонецПроцедуры
Процедура УстановитьПользовательскийОтборСКД(КомпоновщикНастроек, ИмяОтбора, Значение, ВидСравнения = Неопределено)
Перем ПолеКД, Элем, ЭлементОтбора, Настройки,
ПользовательскиеНастройки, ПользовательскийОтбор;
Настройки = КомпоновщикНастроек.Настройки;
ПолеКД = Новый ПолеКомпоновкиДанных(ИмяОтбора);
Для Каждого Элем Из Настройки.Отбор.Элементы Цикл
Если Элем.ЛевоеЗначение = ПолеКД Тогда
ЭлементОтбора = Элем;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭлементОтбора = Неопределено Тогда
Возврат;
КонецЕсли;
Для каждого стр из КомпоновщикНастроек.Настройки.Отбор.Элементы цикл
Если СокрЛП(стр.ЛевоеЗначение)="Каталог" тогда
стр.Использование = истина;
//ПользовательскийОтбор.ВидСравнения = ?(ВидСравнения <> Неопределено, ВидСравнения, ВидСравненияКомпоновкиДанных.Равно);
стр.ПравоеЗначение = Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // УстановитьПользовательскийОтборСКД
---------------------------------------------
Публикация №000000088