В статье "Две схемы СКД в одном отчете на управляемых формах" Людмила решает вопрос детализации отчета путем формирования двух схем. Вопрос интересен как вариант решение разных задач (запросов). Но задачу с детализацией как мне кажется лучше решить используя параметры. И так рассмотрим пример решения задачи, указанной в вышеприведённой статье.
Текст запроса бедет таким:
ВЫБРАТЬ ПродажиОбороты.Склад КАК СКЛАД, ПродажиОбороты.Номенклатура КАК Номенклатура, ПродажиОбороты.КоличествоОборот КАК Количество, ПродажиОбороты.СтоимостьОборот КАК Стоимость, &Детализация КАК Период ИЗ РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты
Параметр &Детализация будет принимать два значение «КОНЕЦПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ)» и «КОНЕЦПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ)» можно дополнить и другими детализациями.
Для параметра в компоновщике указываем тип строка и он будет доступен как параметр. Снимем галочку ограничения доступности
К стати для установки параметров НачалоПериода и КонецПриода я использую дополнительный параметр период тип СтандартныйПериод с заданием выражений для указанных параметров.
Далее устанавливаем ресурсы
Настройку шаблона макета оставим как в выше упомянутой статье.
Теперь нам надо научить наш отчет управлять параметрами. Для этого создадим форму отчета и добавим на него элементы управления тип поля выбора для выбора Варианта детализации и поля для выбора периода. Например так:
Настраиваем список: ВариантДетализации
Устанавливаем параметр Строки списка выбора
Например так:
В обработчике ПриИзменении Укажем следующий текст
Процедура ВариантДетализацииПриИзменении(Элемент) Детализация = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Детализация"); Если Детализация = Неопределено Тогда Возврат; КонецЕсли; ИндексПараметраВКоллекции = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Индекс(Детализация); КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[ИндексПараметраВКоллекции].Значение = ВариантДетализации; КонецПроцедуры
Аналогично устанавливаем параметр периода в обработчиках ПриИзменении всех элементов управления периода вызываем процедуру УстановитьПериод()
Процедура ПериодПриИзменении(Элемент) УстановитьПериод(); КонецПроцедуры
Ее текст:
Процедура УстановитьПериод() ПериодКомпоновки = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период"); Если ПериодКомпоновки = Неопределено Тогда Возврат; КонецЕсли; ИндексПараметраВКоллекции = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Индекс(ПериодКомпоновки); // Запись параметра по индексу КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[ИндексПараметраВКоллекции].Значение = Период; КонецПроцедуры
Обработка конечно же еще не закончена, осталость навести лоск на форме и "защиту от дурака" оставляю это на самостаятельную работу читателя.
Все это реализовано для «обычных форм» для «управляемых» идея остается той же, только надо запрограммировать форму отчета по стандарту управляемых форм.
Буду рад если данная статья кому-то поможет. Высказываете критику.