1с скд вложенные схемы что это

АйТиБложик

Маленький IT блог с характером 1С.

Использование нескольких схем компоновки данных в одном отчете

Отчеты используются для получения сводной информации на основании данных, введенных в информационной системе. Обычно отчет содержит:

  • алгоритмы, при помощи которых получается и обрабатывается информация;
  • формы, при помощи которых организуется интерфейс для ввода параметров алгоритмов и представления результатов их работы;
  • макеты, при помощи которых выводится результат выполнения алгоритма в табличный документ.

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

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

Создадим внешний отчет. В отчете создадим две схемы компоновки данных, например: МакетНомерОдин и МакетНомерДва. Допустим, первая СКД в запросе содержит параметр НаОсновномСкладе:

1. Первая СКД

А вторая СКД в запросе содержит параметр ЮрФизЛицо:

2. Вторая СКД

Что бы иметь программный доступ к выше описанным параметрам, необходимо в каждой СКД для каждого параметра на закладке Параметры установить галочку Включать в доступные поля и снять галочку Ограничение доступности. Далее для каждого параметра создадим реквизит отчета ТолькоНаОсновномСкладе и ВидЛица, незабываем установить необходимый тип реквизита. Так же создаем реквизит НомерСКД, который будет отвечать за выбор необходимой СКД при формировании отчета. В итоге должна получиться следующая структура внешнего отчета:

3. Структура внешнего отчета

Обратите внимание, что свойство Основная схема компоновки данных должно быть пустое. Создаем основную форму отчета, её структура в моем случае (удалил элементы формы связанные с выбором варианта отчета и компоновщиком настроек, оставил единственную команду Сформировать, а так же добавил поле переключателя, связанное с реквизитом формы НомерСКД и поля ввода, связанные с реквизитами отчета ВидЛица и ТолькоНаосновномСкладе) выглядит так :

4. Структура основной формы отчета

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

Напишем код для события отчета ПриКомпоновкеРезультат:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

// Получаем необходимую СКД.
НеобходимаяСКД = Неопределено;
Если ЭтотОбъект.НомерСКД = 1 Тогда
НеобходимаяСКД = ЭтотОбъект.ПолучитьМакет(«МакетНомерОдин»);
ИначеЕсли ЭтотОбъект.НомерСКД = 2 Тогда
НеобходимаяСКД = ЭтотОбъект.ПолучитьМакет(«МакетНомерДва»);
КонецЕсли;

// Устанавливаем выбранную СКД как основную.
ЭтотОбъект.СхемаКомпоновкиДанных = НеобходимаяСКД;

// Загружаем настройки выбранной СКД в компоновщик настроек.
ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(НеобходимаяСКД);
ЭтотОбъект.КомпоновщикНастроек.Инициализировать(ИсточникДоступныхНастроек);
ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НеобходимаяСКД.НастройкиПоУмолчанию);

// Устанавливаем настройки.
ПараметрыДанных = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных;
ПараметрВидЛица = Новый ПараметрКомпоновкиДанных(«ЮрФизЛицо»);
ЗначениеВидЛица = ПараметрыДанных.НайтиЗначениеПараметра(ПараметрВидЛица);
Если ЗначениеВидЛица <> Неопределено Тогда
ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрВидЛица, ЭтотОбъект.ВидЛица);
КонецЕсли;
ПараметрыДанных = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных;
ПараметрТолькоНаОснСкладе = Новый ПараметрКомпоновкиДанных(«НаОсновномСкладе»);
ЗначениеТолькоНаОснСкладе = ПараметрыДанных.НайтиЗначениеПараметра(ПараметрТолькоНаОснСкладе);
Если ЗначениеТолькоНаОснСкладе <> Неопределено Тогда
ПараметрыДанных.УстановитьЗначениеПараметра(ПараметрТолькоНаОснСкладе, ЭтотОбъект.ТолькоНаОсновномСкладе);
КонецЕсли;

КонецПроцедуры

Описание алгоритма: в зависимости от значения реквизита НомерСКД, получаем необходимую СКД и устанавливаем как основную. С помощью объекта ИсточникДоступныхНастроекКомпоновкиДанных инициализируем компоновщик настроек отчета. Далее производится поиск параметра в компоновщике настроек, если значение параметра удалось получить, то он существует и устанавливаем для него новое значение. После выполняется стандартный алгоритм формирования отчета.

Отчет с несколькими СКД готов! Ссылка на отчет здесь.

Источник

Вложенные схемы в СКД

1. Что такое вложенные схемы?

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

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

Отработаем следующий кейс: в демонстрационной базе ERP необходимо получить отчёт, который собирает сводную выручку по менеджерам, а затем выводится информация о начислении зарплаты менеджеру за этот период.

Рис. 1 Сводная выручка менеджеров

2. Формирование выборки по регистру

Для реализации поставленной задачи нам нужно получить выборку по оборотам регистра накопления «ВыручкаИСебестоимостьПродаж», а внутри нее произвести формирование выборки по регистру «ЗарплатаКВыплате» с отбором по периоду и сотруднику из «верхней» выборки.

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

Рис. 2 Простой отчет по выручке

В настройках СКД делаем группировку именно по физическому лицу, добавим заголовки в поля группировки, включим параметры в пользовательские настройки; макет оформления – «Античный».

Сохраним, сформируем отчет по выручке, проверим результат.

Рис. 4 Отчет по выручке после нужных настроек СКД

Половина пути пройдена, произошло формирование выборки по выручке за 2016 год в разрезе ответственных менеджеров. Данный период я намеренно выбрал, чтобы проще было связать выручку с существующими начислениями зарплаты. В демонстрационной базе начисления проведены только в 2016 году. Теперь осталось получить эти начисления во вложенной схеме и связать с выборкой по выручке.

Переходим на закладку «Вложенные схемы», создаем новую, проваливаемся внутрь поля «Схема».

Рис. 5 Закладка Вложенные схемы

Видим стандартный конструктор схемы компоновки данных, создаем новый простой запрос.

Рис. 6 Конструктор схемы компоновки данных

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

Рис. 7 Настройки системы компоновки данных с помощью мастера

Теперь мы получили выборку по Зарплате, но выборка сейчас по всему регистру, за весь период ведения учета и по всем сотрудникам, осталось наложить отборы на вложенный запрос. Особенность в том, что отборы на вложенный запрос в 1С накладываются в верхнем запросе в поле «Настройки», проваливаемся туда.

Рис. 8 Отборы на вложенный запрос 1С

Затираем произвольную дату, прописываем тип «Поле компоновки», выбираем поля владельца (это как раз верхняя выборка), в параметрах находим «Начало периода». Действуйте внимательно, не перепутайте с параметрами самого вложенного запроса в 1С, они там рядышком и можно легко промахнуться.

Рис. 9 Поле компоновки в системе компоновки данных в 1С

Аналогично задаем «Конец периода» в системе компоновки данных в 1С, в итоге должно получиться вот так.

Рис. 10 Заданный Конец периода в системе компоновки данных

Добавляем отбор. Напоминаю, нам нужен отбор по сотруднику из результата верхнего запроса.

Добавляем отбор, в левой части выбираем физическое лицо, в правой части затираем тип, выбираем тип «Поле компоновки» для данных, там находим поля верхней схемы (владельца) – «МенеждерФизическоеЛицо».

Рис. 11 Поле компоновки данных

Готово, настройка должна выглядеть теперь вот так, нажимаем «ОК».

Рис. 12 Результат настройки СКД

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

Рис. 13 Добавление вложенного отчета


Рис. 14 Результат добавления вложенного отчета

Если Вы делали какие-либо настройки во вложенной схеме, они сразу перенесутся сюда. Мы только сформировали детальные записи и добавили макет, поэтому просто сохраним отчет и посмотрим результат:

Рис. 15 Перенесенные настройки вложенных схем

Как видите, требуемую информацию отчет выводит, проверьте данные документов, параметры и отборы. Осталось привести отчет в более читаемый вид. Например, выровнять ширину полей, уменьшить шрифт, это можно сделать на закладке «Условное оформление». Также можно отключить отображение параметров и отборов, они засоряют отчет и пользователю не нужны, сделать это можно на закладке «Другие настройки».

Требуемая печатная форма сформирована.

Рис. 16 Печатная форма вложенного отчета

Источник

Отчетность в 1С: Система Компоновки Данных (СКД), идея и архитектура

Одна из самых важных областей бизнес-софта – это отчетность. От того, насколько легко настроить под меняющиеся потребности бизнеса (и законодательства) существующий отчет или сделать новый, может зависеть (причем не в переносном смысле!) судьба бизнеса, будь то отчет для налоговой инспекции или диаграмма зависимости спроса на товары от сезона и других факторов. Мощная и гибкая система отчетности, позволяющая легко извлечь из системы нужные данные, представить их в доступном для понимания виде, позволяющая конечному пользователю перенастроить стандартный отчет так, чтобы увидеть данные в новом свете – это идеал, к которому должна стремиться каждая бизнес-система.

В платформе «1С:Предприятие» за построение отчётов отвечает механизм под названием «Система компоновки данных» (сокращенно СКД). В этой статье мы постараемся дать краткое описание идеи и архитектуры механизма СКД и его возможностей.

СКД – это механизм, основанный на декларативном описании отчетов. СКД предназначен для построения отчетов и для вывода информации, имеющей сложную структуру. Кстати, помимо разработки отчетов механизм СКД также используется в «1С:Предприятии» в динамическом списке, средстве показа списочной информации с богатой функциональностью (показ плоских и иерархических списков, условное оформление строк, группировки и т.п.).

Немного истории

В самой первой версии платформы «1С:Предприятие 8», версии 8.0, отчеты делались так:

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

Подход прямолинейный, но не самый удобный – визуальных настроек минимум, все приходится программировать «врукопашную». А один из козырей на тот момент совсем новой платформы «1С:Предприятие 8» — это минимизация в прикладном решении объема кода, который нужно писать вручную, в частности, за счет визуального проектирования. Логично было бы пойти этим же путем и в механизме построения отчетов. Что и было сделано путем разработки нового механизма — Системы Компоновки Данных.

Одной из идей, легших в основу СКД, была гибкость и настраиваемость отчетов, причем доступная как разработчику, так и конечному пользователю. В идеале хотелось бы дать доступ конечному пользователю к тому же набору инструментов для дизайна отчета, что и разработчику. Логично было бы сделать единый набор инструментов, доступный всем. Ну а раз инструменты предполагают участие конечного пользователя – значит, нужно использование программирования в них убрать до минимума (лучше всего – устранить совсем), и по максимуму использовать визуальные настройки.

Постановка задачи

Задача перед командой разработки стояла такая – сделать систему создания отчетов, основанную не на алгоритмическом (т.е. через написание кода), а на декларативном подходе к созданию отчетов. И мы считаем, что задачу успешно решили. По нашему опыту, около 80% требуемой отчетности может быть реализована с помощью СКД без единой строчки кода (за исключением написания формул вычисляемых полей), по большей части — через визуальные настройки.
Разработка первой версии СКД заняла около 5 человеко-лет.

Два языка

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

Язык запросов

Язык запросов основан на SQL и легко осваивается знающими SQL. Пример запроса:

Легко видеть аналоги стандартных для SQL-запроса секций — SELECT, FROM, GROUP BY, ORDER BY.

При этом язык запросов содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений:

  • Обращение к полям через точку. Если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через «.», при этом количество уровней вложенности таких ссылок система не ограничивает (например, ЗаказКлиента.Соглашение.Организация.Телефон).
  • Многомерное и многоуровневое формирование итогов. Итоги и подитоги формируются с учетом группировки и иерархии, обход уровней может выполняться в произвольном порядке с подведением подитогов, обеспечивается корректное построение итогов по временным измерениям.
  • Поддержка виртуальных таблиц. Виртуальные таблицы, предоставляемые системой, позволяют получить практически готовые данные для большинства прикладных задач без необходимости составления сложных запросов. Так, виртуальная таблица может предоставить данные по остаткам товаров в разрезе периодов на какой-то момент времени. При этом виртуальные таблицы максимально используют хранимую информацию, например, ранее рассчитанные итоги и т.д.
  • Временные таблицы. Язык запросов позволяет использовать в запросах временные таблицы. С их помощью можно повысить производительность запросов, в некоторых случаях снизить количество блокировок и сделать текст запроса более легким для восприятия.
  • Пакетные запросы. Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами — таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных точкой с запятой («;»). Запросы в пакете исполняются один за другим. Результатом выполнения пакетного запроса, в зависимости от используемого метода, будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.
  • Получение представлений ссылочных полей. Каждая объектная таблица (в которой хранится справочник или документ) имеет виртуальное поле — «Представление». Это поле содержит текстовое представление объекта и облегчает работу создателя отчетов. Так, для документа это поле содержит всю ключевую информацию — название типа документа, его номер и дату (например, «Продажа 000000003 от 06.07.2017 17:49:14»), избавляя разработчика от написания вычисляемого поля.
  • и др.

Механизм запросов автоматически модифицирует запрос с учетом ролей, к которым принадлежит пользователь, от имени которого выполняется запрос (т.е. пользователь увидит только те данные, которые имеет право видеть) и функциональных опций (т.е. в соответствии с настроенной в прикладном решении функциональностью).

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

  • ВЫБРАТЬ. В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки. Пример:
  • ГДЕ. Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ. Примеры: <ГДЕ Номенклатура.*, Склад >, <ГДЕ Документ.Дата >= &ДатаНачала, Документ.Дата

Источник

Оцените статью
REMNABOR
Adblock
detector