Доброго дня, коллеги!
Тренер курса Профессиональная разработка отчетов в 1С 8.3 на СКД на протяжении уже нескольких лет ежедневно отвечает на многочисленные и разнообразные вопросы слушателей по теме СКД. Неудивительно, что он с полуслова понимает суть заданных вопросов, формулировки которых бывают теми еще задачками!
Вопрос:
Ответ:
Добрый день! 1С: УТ 11 – типовая конфигурация, поэтому в ней можно подсмотреть, как решается подобная задача. В курсе рассматривается похожий пример из 1С: УТ 11. В уроке рассматривается прием, как передавать заполненные пользовательские настройки в открываемую форму отчета. А в пользовательских настройках размещаем отбор по доп.реквизиту.
Пример:
В демобазе 1С:УТ 11 есть доп.реквизит “Расчетная масса (кг/км)”:
Доработаем программный код из типовой 1C:УТ, чтобы открывалась ведомость по товарам на складах для тех номенклатур, у которых Расчетная масса (кг/км) = 82:
&НаКлиенте Процедура ОткрытьВедомостьПоТоварамНаСкладах(Команда) Форма = ПолучитьФорму("Отчет.ВедомостьПоТоварамНаСкладах.Форма"); КомпоновщикНастроекКомпоновкиДанных = Форма.Отчет.КомпоновщикНастроек; ПользовательскиеНастройки = КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки; НастройкаНоменклатура = Новый Структура; НастройкаНоменклатура.Вставить("ВидСравнения",ВидСравненияКомпоновкиДанных.Равно); НастройкаНоменклатура.Вставить("ПравоеЗначение", 82); НастройкаНоменклатура.Вставить("Использование", Истина); УстановитьПользовательскуюНастройку(КомпоновщикНастроекКомпоновкиДанных, ПользовательскиеНастройки, "Номенклатура.[Расчетная масса (кг/км)]", НастройкаНоменклатура); ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, ПользовательскиеНастройки", Истина, ПользовательскиеНастройки); ОткрытьФорму("Отчет.ВедомостьПоТоварамНаСкладах.Форма", ПараметрыФормы); КонецПроцедуры &НаКлиенте Процедура УстановитьПользовательскуюНастройку(КомпоновщикНастроекКомпоновкиДанных, ПользовательскиеНастройки, ИмяНастройки, Настройка) ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ИмяНастройки); ЭлементОтбора = Неопределено; Для Каждого Элемент Из КомпоновщикНастроекКомпоновкиДанных.Настройки.Отбор.Элементы Цикл Если Элемент.ЛевоеЗначение = ПолеКомпоновки Тогда ЭлементОтбора = Элемент; Прервать; КонецЕсли; КонецЦикла; Если ЭлементОтбора = Неопределено Тогда Для каждого Элемент Из ПользовательскиеНастройки.Элементы Цикл Если ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда ЭлементОтбора = Элемент.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновки; ЭлементОтбора.ВидСравнения = Настройка.ВидСравнения; ЭлементОтбора.Использование = Настройка.Использование; ЭлементОтбора.ПравоеЗначение = Настройка.ПравоеЗначение; КонецЕсли; КонецЦикла; Иначе Элемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементОтбора.ИдентификаторПользовательскойНастройки); Элемент.ВидСравнения = Настройка.ВидСравнения; Элемент.ПравоеЗначение = Настройка.ПравоеЗначение; Элемент.Использование = Настройка.Использование; КонецЕсли; КонецПроцедуры
Сформируется вот такой отчет:
Вопрос слушателя:
Ответ тренера:
Обратите внимание, что в типовом отчете ВедомостьПоТоварамНаСкладах отбор вынесен в пользовательские настройки:
Не только отбор по конкретному полю (Склад или Номенклатура), а отбор отчета в целом добавлен в пользовательские настройки. Именно эта особенность используется в программном коде – выполняется проверка наличия отбора в пользовательских настройках:
Если ТипЗнч(Элемент) = Тип("ОтборКомпоновкиДанных") Тогда
Добавить отбор в пользовательские настройки можно следующим образом:
Попробуйте такую настройку выполнить для своего отчета.
Профессиональная разработка отчетов в 1С 8.3 на СКД.