Для чего используется компоновщик настроек компоновки данных
Отчетность в 1С: Система Компоновки Данных (СКД), идея и архитектура
Одна из самых важных областей бизнес-софта – это отчетность. От того, насколько легко настроить под меняющиеся потребности бизнеса (и законодательства) существующий отчет или сделать новый, может зависеть (причем не в переносном смысле!) судьба бизнеса, будь то отчет для налоговой инспекции или диаграмма зависимости спроса на товары от сезона и других факторов. Мощная и гибкая система отчетности, позволяющая легко извлечь из системы нужные данные, представить их в доступном для понимания виде, позволяющая конечному пользователю перенастроить стандартный отчет так, чтобы увидеть данные в новом свете – это идеал, к которому должна стремиться каждая бизнес-система.
В платформе «1С:Предприятие» за построение отчётов отвечает механизм под названием «Система компоновки данных» (сокращенно СКД). В этой статье мы постараемся дать краткое описание идеи и архитектуры механизма СКД и его возможностей.
СКД – это механизм, основанный на декларативном описании отчетов. СКД предназначен для построения отчетов и для вывода информации, имеющей сложную структуру. Кстати, помимо разработки отчетов механизм СКД также используется в «1С:Предприятии» в динамическом списке, средстве показа списочной информации с богатой функциональностью (показ плоских и иерархических списков, условное оформление строк, группировки и т.п.).
Немного истории
В самой первой версии платформы «1С:Предприятие 8», версии 8.0, отчеты делались так:
Одной из идей, легших в основу СКД, была гибкость и настраиваемость отчетов, причем доступная как разработчику, так и конечному пользователю. В идеале хотелось бы дать доступ конечному пользователю к тому же набору инструментов для дизайна отчета, что и разработчику. Логично было бы сделать единый набор инструментов, доступный всем. Ну а раз инструменты предполагают участие конечного пользователя – значит, нужно использование программирования в них убрать до минимума (лучше всего – устранить совсем), и по максимуму использовать визуальные настройки.
Постановка задачи
Задача перед командой разработки стояла такая – сделать систему создания отчетов, основанную не на алгоритмическом (т.е. через написание кода), а на декларативном подходе к созданию отчетов. И мы считаем, что задачу успешно решили. По нашему опыту, около 80% требуемой отчетности может быть реализована с помощью СКД без единой строчки кода (за исключением написания формул вычисляемых полей), по большей части — через визуальные настройки.
Разработка первой версии СКД заняла около 5 человеко-лет.
Два языка
В создании отчетов задействованы два языка. Один – язык запросов, используемый для выборки данных. Второй – язык выражений компоновки данных, предназначен для записи выражений, используемых в различных частях системы, например, в настройках компоновки данных, для описания выражений пользовательских полей.
Язык запросов
Язык запросов основан на SQL и легко осваивается знающими SQL. Пример запроса:
Легко видеть аналоги стандартных для SQL-запроса секций — SELECT, FROM, GROUP BY, ORDER BY.
При этом язык запросов содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений:
Есть также специальные расширения языка запросов для СКД. Расширение осуществляется при помощи специальных синтаксических инструкций, заключаемых в фигурные скобки и помещаемых непосредственно в текст запроса. С помощью расширений разработчик определяет, какие операции конечный пользователь сможет проводить, настраивая отчет.
Система компоновки данных
Система компоновки данных представляет собой механизм, основанный на декларативном описании отчетов. Он предназначен для построения отчетов, а также вывода информации, имеющей сложную структуру и содержащий произвольный набор таблиц и диаграмм.
Устройство системы компоновки данных
Основные элементы системы компоновки данных представлены на следующей схеме:
Схема компоновки данных
Настройки компоновки данных
Макет компоновки данных
Макет компоновки данных представляет собой уже готовое описание того, как должен быть сформирован отчет. В нем соединяется схема компоновки и настройки компоновки. Фактически макет компоновки данных представляет собой результат применения конкретных настроек к схеме компоновки и является готовым заданием процессору компоновки на формирование отчета нужной структуры с учетом конкретных настроек.
Элемент результата компоновки данных
Результат компоновки данных представляется набором элементов результата компоновки данных. Как самостоятельная логическая сущность результат компоновки данных не существует, существуют только его элементы. Элементы результата компоновки данных можно вывести в табличный документ для представления их пользователю, или в другие виды документов. Также имеется возможность программного вывода элементов результата компоновки в объекты вида Дерево значений или Таблица значений.
Работа с системой компоновки данных в конфигурации
Система компоновки данных интегрирована в объект конфигурации Отчет. Это позволяет создавать отчеты без программирования.
У объекта конфигурации Отчет реализовано свойство «Основная схема компоновки данных»:
При нажатии кнопки открытия для этого свойства, вызывается конструктор макета, который позволяет создать макет отчета, содержащий схему компоновки данных:
После нажатия кнопки «Готово» будет открыт конструктор схемы компоновки данных.
Конструктор схемы компоновки данных позволяет описать исходные данные, которые будет использовать отчет: наборы данных, связи между наборами данных, вычисляемые поля, ресурсы и т. д.
Также конструктор схемы компоновки данных предоставляет возможность описать настройки компоновки данных, которые будут использоваться по умолчанию (в том случае, если пользователь не задаст собственные настройки). Настройки компоновки данных могут быть созданы с помощью специального конструктора настроек компоновки данных, или вручную:
После выполнения этих действий отчет готов. В режиме 1С:Предприятие система автоматически, на основании схемы компоновки данных, содержащейся в отчете, может создать форму отчета и форму настроек отчета.
Таким образом пользователь просто запускает отчет и получает результат в соответствии с теми настройками, которые описал разработчик:
При необходимости пользователь может открыть форму настроек отчета и отредактировать их, изменить структуру отчета и т. д. аналогично тому, как это делает разработчик в режиме конфигуратора.
Консоль системы компоновки данных
Внешний отчет «Консоль системы компоновки данных» предназначен для специалистов, желающих подробнее узнать об устройстве системы компоновки данных. Консоль позволяет выполнять отдельные шаги компоновки данных с просмотром промежуточных результатов в виде XML. Подробнее…
Компоновщик настроек в 1С
1. Инструмент Компоновщик данных
В данной статье будет рассмотрен такое инструмент как компоновщик данных, а также дан пример схемы по компоновке данных в 1С. Будет описано, как происходит связка между схемой по компоновке данных и компоновщиком настроек. Для более понятного и подробного описания за основу будет взят пример.
2. Пример работы с компоновщиком данных в 1С
Создадим и рассмотрим следующий пример: пусть существуют два справочника – это «Склады» и «Товары». В справочнике с товарами находится таблица «Перечень складов», где прописываются товары по складам, а также максимальное количество заданного товара на том или ином складе.
Пусть нужно сделать групповую обработку, чтобы прописать наибольшее количество продукции по складам. В таблице тогда будет находится два древа со значениями, а заполняться они будут при помощи отбора по складу и товару.
Чтобы реализовать данный отбор – нужно будет воспользоваться формами с управлением. Итоговая обработка для 1С:Предприятие будет выглядеть как показано на скриншоте ниже:
Рис. 1 Обработка для 1С:Предприятие
Далее надо решить, как будет проходить реализация. Так как нам нужно оперировать отборами, то первое – это настройка схемы по компоновке данных. Для этого делаем обработку с добавлением макета «Схема компоновки данных», а также формы, как показано на скриншоте ниже:
Рис. 2 Обработка с добавлением макета Схема компоновки данных
В схеме, которая отвечает за компоновку данных нужно прибавить следующий запрос, который продемонстрирован ниже:
Рис. 3 Запрос в Схеме компоновки данных
После этого нужно произвести настройку схемы компоновки данных:
Рис. 4 Настройка схемы компоновки данных
Далее нужно будет спроектировать форму. Для этого делаем отбор: добавляем реквизит в форму и выбираем типы, которые можно к нему применить. Получаем, что в списке находится лишь один тип – «КомпоновщикНастроекКомпоновкиДанных». Он как раз подходит для необходимой обработки по отбору.
Рис. 5 Обработка по отбору с типом КомпоновщикНастроекКомпоновкиДанных
Далее, как только выбор вышеуказанного типа осуществлён, открываем «Настройки» для типа «НастройкиКомпоновкиДанных» и ищем пункт «Отбор», после чего вставляем его в форму. Дальше вставляем реквизит типа «ДеревоЗначений» и делаем столбцы по схеме по компоновке данных. После всех вышеуказанных действий окно примет такой вид:
Рис. 6 Столбцы схемы компоновки данных
Рис. 7 Использование реквизита ДеревоЗначений
При помощи кода программы произведем заполнение отбора по настройкам в компоновщике настроек, основываясь на отбор в схеме по компоновке данных. Далее организовываем реализацию по заполнению древа с значениями, учитывая приведённый выше отбор. Код будет выглядеть следующим образом:
Рис. 8 Код после отбора по настройкам
Рис. 9 Код для работы схемы компоновки данных
Рис. 10 Код с заполнением ДеревоЗначений
По коду выше – в процедуре «ПриСозданииНаСервере()» реализуем отбор по компоновщику настроек. При похождении инициализации в компоновщике настроек в схеме по компоновке данных получаем, что схему по компоновке данных необходимо сначала переместить в хранилище временного типа, при помощи «ПоместитьВоВременноеХранилище()», а далее – как только все отборы были установлены – можно приступить к заполнению таблицы и древа значений.
Рассмотрим подробнее формировку макета, которая прописана в этом месте:
Рис. 11 Формировка макеты схемы компоновки данных
Формирование макета конструктором схемы компоновки данных происходит на основании схемы компоновки данных, а также согласно настройкам по компоновке данных. Так как в рассматриваемом примере отбор по форме относится не к схеме компоновки, а к компоновщику по настройкам, оттуда и берём настройки. Также стоит отметить, что внутри метода «Выполнить()» во время генерирования макета нужно в виде параметра добавить Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»).
Устройство системы компоновки данных
also Первые шаги Отзывов (6) В закладки
В данной статье мы попробуем объяснить устройство системы компоновки данных понятным языком.
Фактически, формирование отчета средствами СКД разбито на несколько этапов. Причем нужно понимать, что разработчик может внести свои изменения во время любого из этапов.
По сути, формирование отчета это всего лишь два “глобальных” этапа: сама компоновка данных, согласно схемы, и вывод результата пользователю. На самом деле объектов компоновки немного больше чем два.
Для того чтобы скомпоновать данные в СКД существуют объекты: Компоновщик макета и Процессор компоновки данных. Рассмотрим принцип их работы. Компоновщик макета на основании схемы компоновки данных и настроек компоновки данных формирует макет компоновки данных:
Рис. 1 Компоновщик макета
Теперь наш сформированный макет необходимо заполнить данными. Именно эту функцию и выполняет Процессор компоновки данных. Процессор формирует результат компоновки. Также покажем это графически:
Рис.2 Процессор компоновки данных
Далее результат компоновки обрабатывается Процессором вывода, который выводит результат компоновки данных в один из следующих форматов:
Рис. 3 Процессор вывода
Таким образом, мы познакомились со структурой системы компоновки данных, основными её элементами. Более подробное изучение работы данных объектов в дальнейших статьях цикла “Первые шаги”.
Разбираемся с настройками компоновки данных
Заметил, что все чаще приходится программно работать с настройками компоновки. Чтобы лучше понять, из чего они состоят, собрал основные элементы в виде таблицы. Заодно сделал пару картинок, которые показывают соответствие коллекций в конструкторе СКД и объектной модели, так как иногда имя коллекции отличается от заголовка вкладки, на которой располагаются ее элементы.
Соответствие коллекций и вкладок
Состав вложенных коллекций
В таблицах приведены только часто используемые элементы. Остальные можно увидеть в синтаксис помощнике или отладчике. Другими словами, отброшены незначительные детали, чтобы проще было сосредоточить внимание на главных.
Это позволяет охватить все коллекции одним взглядом, чтобы увидеть основные различия и закономерности. Что помогает лучше понять и запомнить взаимосвязи внутренних объектов.
Опишу один из вариантов как пользоваться таблицами. Пусть нужно программно добавить отбор в корень настроек. В первой колонке находим «Настройки», видим, что они имеют поле «Отбор». Далее находим поле «Отбор» в левой колонке, видим, что оно содержит вложенную коллекцию «Элементы». Также из таблицы видно, что у добавляемого элемента будет тип ЭлементОтбораКомпоновкиДанных и состав полей, которые нужно будет заполнить. Получится, например, такой код:
Некоторые особенности и закономерности
— Если вложенная коллекция может содержать элементы нескольких типов, то при программном добавлении элемента необходимо указывать тип.
— Если все элементы в коллекции имеют одинаковый тип, то при добавлении элемента в коллекцию тип указывать не нужно
— Тип ЗначениеПараметраНастроекКомпоновкиДанных имеет несколько нелогичную структуру: внутри значения параметра располагается параметр. Хотя логичнее было бы, чтобы в параметре располагалось значение
— Значения параметров компоновки данных добавлять нельзя, их можно только найти и установить
— Некоторые значения параметров могут содержать вложенную коллекцию параметров
— В коллекции ПараметрыВывода (вкладка «Другие настройки») имена параметорв иногда отличаются от синонимов в конструкторе СКД, что может доставлять неудобства при разработке
Примеры программного создания элементов я повторять не буду, их можно посмотреть тут
ps. Насколько я понял, редактор данного ресурса не позволяет объединять ячейки в таблицах, поэтому я выложил таблицы в виде картинок.
Специальные предложения
Данная статья будет полезна программистам, которые довольно хорошо ориентируются в конструкторе СКД и хотят получше запомнить, как устроены внутренние коллекции настроек. Вообще, если нужно решить простую задачу, например, установить параметр настроек или добавить отбор, то особых знаний не требуется. Можно погуглить, обойти несколько форумов, найти подходящий пример и исправить под себя. Но мне некоторое время назад попалась задача, для которой необходимо было программно копировать разные элементы СКД. Хорошего решения на форумах я не нашел, пришлось разбираться самостоятельно, сцеплять разношерстные кусочки кода. Чтобы лучше понять все настройки в целом, я все основные элементы и их состав вывел в таблицу. Кроме того, я обратил внимание, что некоторые различия между программными объектами и объектами в конструкторе неочевидны и запутывают понимание. Я предположил, что не я один сталкиваюсь с такими трудностями и решил выложить результат, который у меня получился на данном ресурсе. Возможно он пригодится мне в будущем, возможно он будет полезен кому-нибудь еще.
Ценность данной публикации на мой взгляд именно в краткости. Вот возьмем, к примеру, некий курс по СКД или книгу. Сколько времени нужно, чтобы их просмотреть/прочитать? И при этом мы будем получать очень большое количество повторов: сначала разжевывается то, что мы и так знаем и отсилы 5% новой информации мы почерпнем. И какой результат? Большинство просто сливаются или заранее понимают, что выгода, которые они получат от полного курса меньше, чем затраты на прослушивание/прочтение. Слишком много лишней информации. Похожая ситуация возникает, когда мы открываем в отладчике в точке останова настройки компоновки и пытаемся понять куда смотреть, чтобы найти нужный нам элемент. Но там не все коллекции называются так как мы ожидаем, а также много лишнего и глубокая вложенность. В итоге наше внимание засоряется ненужными полями типа ДоступныеПоляЧегоТоТам
В данной статье, собрано все основное и отброшено все мало востребованное при программной работе с СКД. И все это на одной странице. Вы можете сравнивать их, анализировать просто перемещая глаза по экрану. При этом также подключается и зрительная память. В итоге при программной работе с настройками можно не просто бездумно копипастить код с форумов, а лучше представлять что где лежит и как это нужно заполнять.
И да воды тоже нет, только мои выводы, которые я посчитал полезными. Много времени на ее прочтение вы не потратите, даже если не найдете ничего нового для себя.