Итак задача передо мной стояла в УПП получить отчет собирающий Остатки +Продажи за разные периоды и соответственно сток(на сколько дней хватит товара на складе при таких продажах).
Все это нужно было предоставить в определенном виде.
Так как рабочие контрагенты (Покупатели) и рабочая номенклатура собраны у нас в определенных папках(группах), то нужно было чтобы отчет открывался с предустановленными фильтрами.
А так же чтобы форма отчета была удобной для пользователя. Т.е. чтобы фильтры и даты можно было устанавливать не входя в настройки СКД.
Начнем
В начале создадим Схему компоновки данных (определенные тонкости создания опишу позже).
Затем создадим форму . При создании формы обязательно установить флаг Использовать систему компоновки данных.
Затем создав форму разместим на ней табличное поле и в свойстве этого поля Данные укажем –ОтчетОбъект.КомпоновщикНастроек.Отбор. Таким же образом на форме можно создать и ВыборПоля и Указание порядка и Т.Д . Пользуйтесь этим методом для создания удобных форм отчетов.
Затем создал Реквизиты для дат. К изменению реквизита установки текущей даты привязал событие установки Параметров связанных с датами.
При открытии формы так же устанавливаются все необходимые даты относительно текущей.
ТекДата=НачалоДня(ВыбранноеЗначение);
Период=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("Период") );
Период.Значение=КонецДня(ТекДата);
Период.Использование=Истина;
пТекДата=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("ТекДата") );
пТекДата.Значение=ТекДата;
пТекДата.Использование=Истина;
ДатаМесяц=ОпределитьКалендарнуюДату(ТекДата,-30);
пДатаМесяц=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("месДата") );
пДатаМесяц.Значение=ДатаМесяц;
ДатаКвартал=ОпределитьКалендарнуюДату(ТекДата,-90);
пДатаКвартал=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("квДата") );
пДатаКвартал.Значение=ДатаКвартал;
ДатаГод=ОпределитьКалендарнуюДату(ТекДата,-365);
пДатаГод=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("годДата") );
пДатаГод.Значение=ДатаГод;
В событие формы ПриОткрытии() я поместил вызов процедуры из модуля объекта УстановитьНастройкиПоУмолчанию();
В которой устанавливаются все необходимые настройки Параметров и Отборов.
Когда создается настройка Схемы СКД можно отборы , выбранные поля , сортировку и т.д настраивать как для всего отчета(Рис.1),
так и для каждой группы отдельно(Рис.2).
Тоже очень полезный прием.
Обратите внимание, что если отбор установлен в настройке схемы для всего отчета, то используется метод
ЭлементОтбора=ПолучитьЭлементОтбора(Новый ПолеКомпоновкиДанных("ИмяОтбора"));
Если же нужен отбор который вы назначили на отдельную группу в структуре настроек то к его отбору нужно обращаться как элементу дерева по индексу, где в корне строки называются «Структура».
Пример:
найдфСклад8=Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Склад 8",истина,,);
Если Не(найдфСклад=Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка()) Тогда
Для каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Структура[0].Колонки[2].Отбор.Элементы Цикл
Если ЭлементОтбора.ЛевоеЗначение =Новый ПолеКомпоновкиДанных("ФактСклад8") Тогда
ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение=найдфСклад8;
ЭлементОтбора.Использование=Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Это означает, что устанавливаем Отбор в первой по счету таблице (Структура[0]) к третьей колонке(Рис.3).
По настройкам схемы СКД .
Для получения сложных отчетов часто необходимо соединять запросы.
В СКД тоже можно использовать связи наборов данных, но в связях не настроишь полное соединение. К примеру отчет План-Факт . Могут быть товары (мелкие партии) которые не входят в планы, но продаются. Соответственно хорошо бы в отчете увидеть и их. Но если мы присоединяем левым соединением факт к плану, то эти товары мы не увидим. Значит нам нужно полное соединение.
Так вот в схеме СКД для полного соединения можно создать Набор Объединение и уже внутри его создаем соединяемые наборы. Соединятся будет по полям имеющим одинаковое Имя. Ресурсы с одинаковым именем тоже будут складываться.
В принципе это все чем я хотел поделиться. Надеюсь это кому то сократит время на поиски.
Более подробно можно посмотреть в прилагаемом отчете.
Прошу учесть что отчет прилагается для изучения возможностей, а не для использования как готового продукта.
Если кто-то захочет использовать то поясню структуру.
Есть основной физический склад8 для продаж. Он разделен на два логических Оптовики и Сетевики для того чтобы эти склады объединить я создал свойство Факт_склад которое используется в отчете. Так же есть удаленные склады ОХ, остатки на которых используются для получения итоговых данных по и по стоку относительно годовых продаж.