Правильно выполненные отчеты – одно из важнейших правил ведения бизнеса. Ведь от того, как ведется отчетность, насколько быстро можно создать новый отчет или редактировать уже существующий, зависит развитие всего бизнеса. Современная система отчетности должна быть гибкой, чтобы из нее быстро можно было извлечь необходимые данные, представить их в понятном каждому пользователю виде. Кроме этого, отчет должен строиться таким образом, чтобы данные можно было увидеть в разных ракурсах. Примерно такой представляется идеальная система отчетности. В статье мы расскажем, как организована система отчетности на платформе 1С: Предприятие.
В 1С: Предприятие за создание отчетов отвечает механизм СКД – Система компоновки данных. Основывается этот механизм на декларативном описании отчетов. СКД позволяет создавать любые виды отчетов и выводить информацию, которая имеет сложную структуру. Это не единственное предназначение СКД. Механизм применяется также в динамическом списке для показа списочной информации.
Как появилась СКД?
Прообраз СКД появился в первой версии 1С: Предприятие 8, отчеты формировались следующим образом. В первую очередь на языке запросов 1С было необходимо написать один или несколько запросов. Затем – написать код, задача которого состояла в том, чтобы перенаправлять запросы либо в табличный документ, либо в диаграмму. Еще одна функция кода – вычисление значений с помощью встроенного языка 1С. Кстати, эту работу невозможно сделать непосредственно в запросе.
Минимальный набор визуальных настроек делал этот способ не совсем удобным, так как программировать приходилось почти вслепую. Одним из достоинств платформы 1С: Предприятие стало сведение к минимуму за счет визуального проектирования объема кода в прикладном решении. Код писался вручную. Решено было сделать то же самое с механизмом построения отчетов. Так появилась Система Компоновки Данных.
Главное, на что был сделан акцент при создании СКД, – это возможность легко и быстро настроить отчет и разработчику, и рядовому пользователю. Причем пользователю предполагалось предоставить доступ к тем инструментам для создания дизайна отчета, которыми пользуется разработчик. Из этого возникла идея создания общего набора инструментов, которым могли бы пользоваться разработчик и пользователь. А так как рядовой пользователь, как правило, далек от программирования, нужно свести его использование до минимума, а визуальные настройки, наоборот, применять по максимуму.
Постановка цели
Перед программистами была поставлена следующая задача: разработать систему создания отчетов, которая будет основываться на декларативном подходе, а не посредством написания кода (алгоритмический подход). Эта задача была успешно решена. Большая часть отчетов в СКД создается без использования кода, исключение составляет написание формул вычисляемых полей. Все остальные задачи успешно решаются посредством визуальных настроек. На создание первой версии СКД ушло почти 5 человеколет.
Использование двух языков
Отчеты создаются посредством двух языков. Один из них – язык запросов – применяется для выборки данных. Язык выражений компоновки данных используется для фиксирования выражений, которые применялись в разных частях системы, к примеру, при настройке компоновки данных или при описании выражений пользовательских полей.
Язык запросов
Язык запросов несложен в освоении в первую очередь тем, кто знаком с SQL. Однако в языке запросов есть свои особенности, так как в нем содержится основательное количество расширений, которые отражают специфические черты финансово-экономических задач и ориентируются на минимум усилий, приложенных в ходе разработки прикладных решений.
Особенности языка запросов
- Обращение к полям осуществляется через точку. Если одно из полей таблицы ссылочного типа, то есть содержат ссылку на поле или объект, находящийся в другой таблице, программист может воспользоваться возможностью ссылаться на них, используя ".". Причем система не накладывает ограничения на число уровней вложенности этих ссылок.
- Возможность многомерного и многоуровневого формирования итогов. Подытоги и итоги создаются, учитывая все группировки и уровни иерархии. Обойти уровни можно в свободном порядке с подведением итогов. Итоги строятся по определенным правилам с учетом временных измерений.
- Поддержание виртуальных таблиц. Все необходимые данные, используемые для подавляющего большинства прикладных задач, можно получить из виртуальных таблиц. Причем для этого не нужно составлять сложные запросы. К примеру, посредством виртуальной таблицы можно получить информацию о количестве реализованного товара за определенный временной промежуток или в разрезе периодов. Кстати, виртуальные таблицы по максимуму используют всю хранимую в них информацию, к примеру, уже посчитанные ранее итоги и т.д.
- Временные таблицы. Используя язык запросов, можно создавать запросы во временных таблицах. Временные таблицы позволяют увеличить производительность запросов, уменьшить число блокировок, а текст запроса будет более простым для восприятия.
- Пакетные запросы делают работу с временными таблицами более простой и удобной, так как пакетные запросы позволяют поместить и создание временной таблицы, и ее использование в один запрос. Что представляет собой пакетный запрос? Это последовательность запросов, которые разделяются между собой точкой с запятой. Запросы выполняются друг за другом в такой же последовательности, в которой размещены в пакете. В зависимости от того, каким методом воспользоваться при выполнении пакетного запроса, получим следующие итоги. Во-первых, это может быть результат, который был возвращен последним запросом из пакета, во-вторых, можно получить массив результатов, полученный от всех запросов в пакете, причем результаты будут расположены в той последовательности, что и запросы в пакете.
- Ссылочные поля и получение их представлений. Представление – это виртуальное поле любой объектной таблицы, используемой для хранения справочников или документов. В представлении находится текстовый вариант объекта, что значительно упрощает работу создателю отчета. Из представления можно получить всю необходимую информацию о документе: его название, дату создания, номер и т.д. Это избавляет специалиста-разработчика от необходимости писать вычисляемое поле.
Запрос меняется автоматически посредством механизма запросов. Причем в этом случае учитываются роли, к которым принадлежит пользователь, который выполняет запрос. Соответственно пользователь имеет возможность видеть лишь те данные, которые ему можно видеть. Также ограничения на запросы накладываются функциональными опциями, то есть той функциональностью, которая настроена в прикладном решении.
Существуют расширения языка запросов, специально созданные для СКД. Как осуществить расширение? Специальные синтаксические конструкции заключаются в фигурные скобки и помещаются в текст запроса. Расширения необходимы разработчикам для того, чтобы определить операции, которые сможет проводить пользователь при настройке отчета.
Приведем пример
В предложении Выбрать описаны поля, предоставленные пользователю для вывода. После слова Выбрать, которое является ключевым, перечисляются те псевдонимы полей, которые доступны для настройки. Псевдонимы полей выбираются из списка выборки запросов.
В предложении Где дается описание тех полей, пользователь на которые сможет накладывать отбор. Для этого используются поля таблиц. Стоит обратить особое внимание, что недопустимо применять псевдонимы полей из списка выборки. В каждой из частей объединения должен содержатся собственный элемент Где. К примеру, : {ГДЕ Номенклатура.*, Склад }.
Язык выражений КД (компоновки данных)
Язык выражений КД используется для фиксирования тех выражений, которые используются преимущественно для описания выражений пользовательских полей. С СКД есть возможность определять пользовательские поля в отчете. Сделать это можно, используя собственные выражения либо наборы вариантов при условии их выбора. Пользовательские поля – аналог вычисляемых полей. Пользовательские поля можно задавать и в конфигураторе, и в режиме «1С: Предприятие». Однако использование функции общих модулей в выражениях пользовательских полей запрещено. Из чего можно сделать вывод, что пользовательские поля ориентированы в первую очередь на пользователей, чем на разработчиков.
Создание отчета на СКД
Для того чтобы приступить к созданию отчета, нужно сделать макет. Макет определяет, каким образом данные будут отображены в отчете. Удобно пользоваться макетом, который основывается на схеме компоновки данных. Эта схема – своеобразная база, на основании которой формируются различные отчеты.
В схему компоновки данных могут входить:
- текст запроса, а также инструкции системы компоновки данных;
- описание некоторых наборов с данными, а также связи между ними;
- доступные поля и их описание;
- параметры приема данных;
- макеты полей, а также группировок и многое другое.
В схему компоновки данных можно добавить запрос, которым будут пользоваться в качестве набора данных. Затем вызывается конструктор запроса, он позволит создать запрос любой сложности в графическом виде:
После запуска конструктора запросов появится текст запросов, созданный на языке запросов «1С:Предприятие». Текст запроса можно корректировать вручную, если возникнет такая необходимость.
В схеме компоновки данных необязательно должен быть лишь один набор данных, их может быть несколько. Связываются наборы данных в макете произвольно, допускается добавление полей, могут быть заданы параметры отчета и т.д. В механизме запросов есть одна интересная особенность. Запросы транслируются в диалект SQL, что является спецификой СУБД, с ней непосредственно связано приложение. Важно максимально пользоваться возможностями серверов СУБД. Обычно используются лишь те возможности, которые есть во всех СУБД, которые поддерживаются платформой «1С: Предприятие», к примеру, MS SQL, Oracle, IBM DB2. То есть в вычислительных полях возможно использование только тех функций, которые могут транслироваться в SQL.
Больше возможностей предоставляется на уровне схемы компоновки данных: добавление пользовательских полей, использование функций, написанных на встроенном языке разработки 1С. Это предоставляет широкие возможности при создании отчетов. Как это выглядит технически? То, что можно транслировать в SQL, в нем же и транслируется. В СУБД выполняется запрос, результаты которого перемещаются в память сервера приложений, а 1С и СКД высчитывает значения вычисляемых полей для каждой из записей, формулы которых были созданы на языке 1С.
Отчет можно разнообразить неограниченным количеством диаграмм и таблиц.
СКД дает возможность добавлять в отчет сложные отборы, они добавляются к запросу в необходимом месте. Можно пользоваться условным оформлением, с его помощью выводимые поля форматируются по желанию пользователя, к примеру, меняется шрифт, цвет и т.д.
Построение и формирование отчетов осуществляется следующим образом:
1. Разработчик в design time определяет компоновку данных. Работа ведется с помощью дизайнера. Схема компоновки выглядит следующим образом:- текст одного или нескольких запросов;
- описание вычисляемых полей;
- связи или связь между запросами;
- параметры отчета;
- настройки, которые будут установлены по умолчанию.
2. Сохранение настроек в макете.
3. Открытие отчета пользователем:
- при необходимости создает дополнительные настройки;
- жмет кнопку «Сформировать».
4. Настройки, созданные пользователем, применяются к той схеме компоновки данных, которая была определена разработчиком.
5. Формирование предварительного макета компоновки данных, в котором есть инструкции, откуда происходит получение данных. К примеру, исправляются запросы, которые были заданы в макете (удаление полей, неиспользуемых в отчете с целью минимизации объема получаемых данных). В запросе создаются или добавляются те поля, которые участвуют в формулах вычисляемых полей.
6. Выполнение запросов процессором компоновки. Кроме этой функции, процессор компоновки данных также выполняет следующие действия: осуществление связи наборов данных; расчет значений всех вычисляемых полей, а также ресурсов; выполнение группировки. То есть выполняет те расчеты, которые не были решены в СУБД.
7. Запуск запроса на исполнение процессором вывода данных. Затем процессор выводит те данные, которые были получены, в таблицу, диаграмму или любое другое указанное пользователем место.
Объем данных отчетов, которые передаются в клиентское приложение с сервера, минимизируется. Если нужно показать данные в таблице, при открытии табличного документа передаются лишь те строчки, которые пользователь будет видеть в начале документа. При дальнейшем просмотре документа пользователем из сервера докачиваются необходимые данные.
Пользовательские настройки
Конечному пользователю доступны те же инструменты СКД, что и разработчику. Однако для пользователя такие широкие возможности в принципе и не нужны, и происходит обратная реакция: пользователя отпугивает такое разнообразие. Ведь, в сущности, ему требуется всего несколько основных параметров отчета и быстрый доступ к ним. В последних версиях платформы разработчик может отмечать, какие настройки отчета стали доступны пользователю. Делает он это флажком «Включать в пользовательские настройки». Флажок «Режим отображения», который тоже есть в настройках, может принимать одно из трех значений:
- быстрый доступ (настройка выводится непосредственно в отчет, в верхнюю часть окна);
- обычный доступ (настройку можно найти посредством кнопки «Настройки»);
- недоступный (у конечного пользователя нет доступа к настройкам).
Планы на будущее
Так как тот, для кого создается любая программа и приложение – пользователь, главное, на что ориентируются разработчики при создании новой версии СКД, – упрощение настроек. При упрощении настроек для пользователя легче работать с ними будет и разработчикам. Так как одна из основных задач – создание единого набора инструментов для настройки отчетов как для пользователей, так и для разработчиков.