Заполнение настроек по умолчанию в СКД , а также полное соединение наборов СКД

Программирование - Практика программирования

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

Итак задача передо мной стояла в УПП получить отчет собирающий Остатки +Продажи за разные периоды и соответственно сток(на сколько дней хватит товара на складе при таких продажах).

Все это нужно было предоставить в определенном виде.

Так как рабочие контрагенты (Покупатели) и рабочая номенклатура собраны у нас в определенных папках(группах), то нужно было чтобы отчет открывался с предустановленными фильтрами.

А так же чтобы форма отчета была удобной для пользователя. Т.е. чтобы фильтры и даты можно было устанавливать не входя в настройки СКД.

Начнем

В начале создадим Схему компоновки данных (определенные тонкости создания опишу позже).

Затем создадим форму . При создании формы обязательно установить флаг Использовать систему компоновки данных.

Затем создав форму разместим на ней табличное поле и в свойстве этого поля Данные укажем –ОтчетОбъект.КомпоновщикНастроек.Отбор. Таким же образом на форме можно создать и ВыборПоля и Указание порядка и Т.Д . Пользуйтесь этим методом для создания удобных форм отчетов.

Затем создал Реквизиты для дат. К изменению реквизита установки текущей даты привязал событие установки Параметров связанных с датами.

При открытии формы так же устанавливаются все необходимые даты относительно текущей.

 

ТекДата=НачалоДня(ВыбранноеЗначение);
Период=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("Период") );
Период.Значение=КонецДня(ТекДата);
Период.Использование=Истина;
пТекДата=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("ТекДата") );
пТекДата.Значение=ТекДата;
пТекДата.Использование=Истина;

ДатаМесяц=ОпределитьКалендарнуюДату(ТекДата,-30);
пДатаМесяц=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("месДата") );
пДатаМесяц.Значение=ДатаМесяц;
ДатаКвартал=ОпределитьКалендарнуюДату(ТекДата,-90);
пДатаКвартал=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("квДата") );
пДатаКвартал.Значение=ДатаКвартал;
ДатаГод=ОпределитьКалендарнуюДату(ТекДата,-365);
пДатаГод=ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра( Новый ПараметрКомпоновкиДанных("годДата") );
пДатаГод.Значение=ДатаГод;

 

В событие формы ПриОткрытии() я поместил вызов процедуры из модуля объекта   УстановитьНастройкиПоУмолчанию();

В которой устанавливаются все необходимые настройки Параметров и Отборов.

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

так и для каждой группы отдельно(Рис.2).

Тоже очень полезный прием.

Обратите внимание, что если отбор установлен в настройке схемы для всего отчета, то используется метод 

ЭлементОтбора=ПолучитьЭлементОтбора(Новый ПолеКомпоновкиДанных("ИмяОтбора"));

Если же нужен отбор который вы назначили на отдельную группу в структуре настроек то к его отбору нужно обращаться как элементу дерева по индексу, где в корне строки называются «Структура».

Пример:

найдфСклад8=Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Склад 8",истина,,);
Если Не(
найдфСклад=Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка()) Тогда
Для каждого
ЭлементОтбора Из КомпоновщикНастроек.Настройки.Структура[0].Колонки[2].Отбор.Элементы Цикл
Если
ЭлементОтбора.ЛевоеЗначение =Новый ПолеКомпоновкиДанных("ФактСклад8") Тогда
ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение=найдфСклад8;
ЭлементОтбора.Использование=Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;

 

Это означает, что устанавливаем Отбор в первой по счету таблице (Структура[0]) к третьей колонке(Рис.3).

По настройкам схемы СКД .

Для получения сложных отчетов часто необходимо соединять запросы.

В СКД тоже можно использовать связи наборов данных, но в связях не настроишь полное соединение. К примеру отчет План-Факт . Могут быть товары (мелкие партии) которые не входят в планы, но продаются. Соответственно хорошо бы в отчете увидеть и их. Но если мы присоединяем левым соединением факт к плану, то эти товары мы не увидим. Значит нам нужно полное соединение.

Так вот в схеме СКД для полного соединения можно создать Набор Объединение и уже внутри его создаем соединяемые наборы. Соединятся будет по полям имеющим одинаковое Имя. Ресурсы с одинаковым именем тоже будут складываться.

В принципе это все чем я хотел поделиться. Надеюсь это кому то сократит время на поиски.

Более подробно можно посмотреть в прилагаемом отчете.

Прошу учесть что отчет прилагается для изучения возможностей, а не для использования как готового продукта.

Если кто-то захочет использовать то поясню структуру.

Есть основной физический склад8 для продаж. Он разделен на два логических Оптовики и Сетевики для того чтобы эти склады объединить я создал свойство Факт_склад которое используется в отчете. Так же есть удаленные склады ОХ, остатки на которых используются для получения итоговых данных по и по стоку относительно годовых продаж. 

 


Скачать файлы

Наименование Файл Версия Размер
Отчет Остатки,Продажи,Сток
.erf 22,07Kb
07.12.12
56
.erf 22,07Kb 56 Скачать

См. также

Комментарии
1. mikhailovaew (mikhailovaew) 128 17.12.12 12:31 Сейчас в теме
Статья интересная.
Прошу поправить везде по тексту компОновнку (компОновщика и т.п.) - некрасиво делать ошибки в профессиональных терминах.
2. Данила Елистратов (CagoBHuK) 27 17.12.12 18:23 Сейчас в теме
3. Finder_S 33 18.12.12 17:01 Сейчас в теме
(2) CagoBHuK,
В тех статьях которые выдает yandex по вашей ссылке только часть моей статьи.
Если вы прочитали хотя бы анонс, то увидели бы что я так и написал.
С разных ссылок собрал в одну.
Кроме установки параметров иногда необходимо установить Отбор по умолч.
А еще есть ситуации когда отбор нужен не в главном отчете, а во вложенной структуре настройки схемы.
Будьте пожалуйста внимательны, читая статью.
А уж потом давайте отзыв.
Уважаемый Садовник.
4. Данила Елистратов (CagoBHuK) 27 18.12.12 17:51 Сейчас в теме
(3) Отбор по умолчанию позволяет делать сама СКД в своих же настройках. Там даже программировать ничего не нужно. То же самое можно сделать по каждой группировке, если не устраивает общий отбор. Не вводите людей в заблуждение. Пусть они сначала ознакомятся с этим изданием: http://for1c.com/knigi-1c8/platform-1c-80/2--1-8.html
5. Finder_S 33 19.12.12 10:11 Сейчас в теме
(4) CagoBHuK,
Добрый день!
1. Я не пойму цель вашего комментария. Я занял ваше личное простаранство или ресурс? Модераторы infostart.ru эту статью одобрили значит она кому-то пригодится. Хотите читайте - хотите не читайте.
2. В настройках на уровне схемы не всегда можно настроить отбор. А на уровне пользователя - нужно настраивать под каждым пользователем. И не факт что этот пользователь потом эти настройки не собьет.
3. Вы предлагаете людям вместо моей статьи прочитать книгу. Это не совсем рационально.
6. me Halyna (mehalyna) 04.01.14 16:22 Сейчас в теме
Статья интересная. Спасибо!
Оставьте свое сообщение