Получить консультацию

Устройство системы компоновки данных в 1С. Основные элементы и составные части СКД

Большая обзорная статья для знакомства с СКД “под капотом”. Мы рассмотрим, из чего состоит система компоновки данных, как происходит формирование итогового результата, и затронем многие механизмы и нюансы, связанные с СКД.

Содержание

Основные понятия и термины СКД

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

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

Устройство схемы компоновки данных 1С

Схема компоновки

Схема компоновки – это краеугольный камень всей СКД. Она описывает все правила получения и обработки данных. Ключевые элементы схемы компоновки:

  • Источники данных – запросы, объединения, объекты
  • Поля компоновки
  • Параметры
  • Вычисляемые поля
  • Ресурсы

Помимо вышеперечисленных составляющих, в схеме компоновки можно описывать макеты оформления, вложенные схемы, связи наборов данных.

Настройки компоновки

Следующий незаменимый компонент СКД – это настройки компоновки. Настройки отвечают за то, как именно данные будут представлены пользователю. Они включают отборы, структуру выводимых полей, условное оформление и др. Следует знать, что настройки делятся на три вида – фиксированные, стандартные и пользовательские. Вообще, работа с настройками – предмет для отдельной, не менее большой статьи 🙂

Макет компоновки данных

Макет компоновки данных получается в результате применения настроек к схеме компоновки. Макет компоновки состоит из:

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

Важно! Еще раз обращаю внимание, что итоговые запросы, которые формируются в макете компоновки данных, могут сильно отличаться от текстов запросов, указанных в схеме компоновки. Итоговые запросы получаются в результате применения условий по отборам, выбранным полям (те поля, которые не используются, удаляются из текста запроса, кроме полей с ролью “Остатки”), конструкциям расширения языка запросов для СКД и параметрам. Например, отборы могут преобразоваться в параметры вида &П1, &П2 и т.д.

Некоторые особенности схемы компоновки данных

Схема компоновки данных как объект языка может сериализовываться в/из XML, а также в/из XDTO. Кроме того, в редакторе схемы компоновки данных доступна возможность выгрузить схему в XML-файл, либо загрузить из файла.

1С схема компоновки данных сохранить в xml

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

В СКД можно использовать два вида сортировки:

  1. Сортировка на уровне запроса – использование секции “Упорядочить”. В этом случае сортировку в настройках поменять нельзя
  2. Сортировка в настройках компоновки. Данная сортировка применяется уже к выбранным данным, и в итоговый макет компоновки не включается. Сортировка, заданная в настройках компоновки является приоритетной, т.е. она замещает собой сортировку, заданную в запросах.

Для фильтрации результатов, в СКД используется три механизма:

  1. Стандартные условия на уровне запроса – они прописываются в тексте запроса, управлять ими из настроек нельзя. Если в тексте запроса используются параметры, до выполнения компоновки они должны быть заполнены, иначе платформа выдаст сообщение об ошибке.
  2. Условия, записанные в расширении языка запросов. В конструкторе их можно задать на закладке Компоновка данных / Условия. Поля, добавленные таким образом, будут иметь ограничения при настройке – их нельзя указать в качестве выбранных полей, полей группировки или сортировки. Но они будут доступны для использования в отборах. В итоговый запрос макета компоновки данных такие условия попадут, только если они заданы. Кроме того, указание параметров не является обязательным.
  3. Отборы, заданные в настройках компоновки данных. Данный вид отборов распространяется на все наборы данных, и на все запросы в пакетных запросах, если возможно. Этими отборами пользователь может управлять на уровне варианта отчета или пользовательских настроек.

Параметры СКД

При редактировании текста запроса в наборе данных – не важно, вручную или через конструктор запроса, если в тексте присутствуют параметры, по завершении редактирования они автоматически добавляются на закладку Параметры. Кроме того, при необходимости разработчик может самостоятельно добавить произвольное количество дополнительных параметров. При этом, параметры, добавленные вручную, можно в любой момент удалить, а вот параметры, добавленные автоматически, удалить нельзя.
Рассмотрим состав реквизитов табличной части Параметры:

Поля схемы компоновки данных

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

Основные поля СКД

Основные поля схемы компоновки образуются из полей, указанных в наборах данных. В наборе данных состав полей определяется использованием флажка “Автозаполнение” и использованием расширения языка запроса компоновки данных. Если автозаполнение отключено, основные поля должны быть добавлены и настроены разработчиком вручную. При редактировании набора данных, таблица полей имеет следующие колонки:

  • Путь – строка, описывающая путь к данным, по которому данное поле будет использоваться в выражениях вычисляемых полей, в ресурсах и в настройках компоновки. Для организации иерархии вложенных полей можно записывать путь через точку, например “Номенклатура.Артикул” или “Контрагент.ОсновнойДоговор.ВложенныйРеквизит2Уровня”. Кроме того, путь может указываться строкой, содержащей пробелы. В этом случае поля с пробелами в именах должны указываться в квадратных скобках.
  • Заголовок – строка с заголовком для пользовательского режима. Отображается в пользовательских настройках, при редактировании варианта отчета в режиме 1С Предприятие, в шапке отчета.
  • Ограничение доступности поля – группа флажков, позволяет отключить доступность поля для указания в выбранных полях, отборах, группировках и сортировке.
  • Ограничение доступности реквизитов поля – группа флажков, отвечает за то, как можно использовать реквизиты поля через точку в пользовательских настройках. Важно! Если не ограничено использование вложенных реквизитов, то даже у самого поля установлен флаг ограничения, оно все равно будет доступно!
    Роль
  • Роль – группа настроек, описывающих использование поля при расчете итогов по группировкам для полей остатков. Эти настройки используются при выводе полей виртуальных таблиц “Остатки и обороты” для регистров накопления и регистров бухгалтерии.
  • Выражение представления – выражение на языке выражений СКД, позволяющее переопределить стандартное представление поля. Можно использовать экспортные функции общих модулей, все доступные поля, а также функции языка выражений СКД.
  • Выражения упорядочивания – позволяет задать параметры сортировки, которые будут использоваться при выборе данного поля в настройках сортировки. Указанные выражения упорядочивания переопределяют параметры сортировки по полю, указанные в настройках. Т.е. сортировка будет выполняться по тем параметрам, которые заданы в выражениях упорядочивания.
  • Проверка иерархии: набор данных и параметр – данные поля предназначены для реализации собственной нестандартной иерархии.
  • Тип значения – влияет на допустимые типы значений при выборе поля в качестве значения отбора.
  • Доступные значения – список доступных значений для указания в отборе. Предварительно необходимо обязательно выбрать тип значения для поля.
  • Оформление – позволяет настроить оформление поля – цвет, шрифт, формат и прочее. Важно! Оформление вида текст не работает корректно – произвольный текст не выводится.
  • Параметры редактирования – влияют на редактирование поля при выборе его в отборе в настройках компоновки. Во многом они повторяют настройки элемента формы “Поле ввода”. Можно задать маску, параметры выбора и связи параметров выбора, формат редактирования и другие параметры.

Что означают роли полей схемы компоновки

Роли полей компоновки данных служат для корректного расчета начального и конечного остатков. Указание роли позволяет СКД верно интерпретировать поле. Роли и связанные с ними настройки задаются в отдельном окне:

Роли полей СКД
  • Период – данная роль сообщает СКД, что поле является полем-периодом. В числовом поле рядом следует указать порядковый номер периода от самого младшего к самому большому, начиная с поля НомерСтроки. Поля периодов нельзя использовать в группировках совместно с другими полями – это связано с механизмом расчета итогов по полям остатков.
    В случае, если используется поле периода – Регистратор, вместе с ним обязательно должно присутствовать дополнительное поле периода. Если в параметрах виртуальной таблицы указана периодичность “Авто”, следует выбрать поле “ПериодСекунда”; если выбрана периодичность “Регистратор”, то следует выбрать поле “Период”.
  • Дополнительный – установка этого флажка означает, что данное поле-период является не обязательным. В этом случае выбор дочерних периодов в отчете не требует выбора самого этого поля. Если флажок отключен, то использование дочернего поля-периода требует использования в группировке и самого данного поля. Например, стандартно при выборе периодов из виртуальной таблицы оборотов или остатков и оборотов, поля Регистратор и ПериодСекунда не являются дополнительными, а все остальные (ПериодМинута, ПериодЧас и др.) имеют признак “Дополнительный”.
    Важно! При одновременном использовании группировок по неделям и по месяцам, может возникнуть дублирование группировки по неделям, в том случае, если часть недели приходится на один месяц, а часть – на другой.
    Также, обратите внимание, что если поле указано в качестве поля-периода, то становится невозможным выбор подчиненных полей (реквизитов) данного поля в качестве группировки.
  • Измерение – данный признак сообщает СКД, что поле является измерением. Это используется для корректного расчета итогов по полям остатка. Эту роль необходимо указывать для полей группировок, по которым будет производиться расчет итогов. В случае, если группировка осуществляется не по самому измерению, а по вложенному реквизиту (например, измерение – Товар, а группировка по реквизиту Товар.Артикул), то для поля Товар.Артикул следует указать родительское поле. Для самого родительского поля также должен быть указан признак “Измерение”.
  • Счет – Указание данного поля имеет смысл при рассчете итогов по полям бухгалтерских остатков. Данный признак означает, что поле является полем счета. Можно указать вид счета, указав строку на языке выражений СКД. Результатом выражения должно быть значение перечисления ВидСчета – Активный, Пассивный, Активно / Пассивный. Также можно задать вид счета числом: 0 – активный, 1 – пассивный, 2 – активно-пассивный. Если вид счета не указан, СКД будет интерпретировать данный счет как активно-пассивный.
  • Остатки – роль следует указывать для полей начального и конечного остатков. Имеет смысл при работе с виртуальными таблицами регистров. Данная роль имеет следующие настройки:
    Имя – произвольное имя группы полей. Должно быть одинаковым для полей начального и конечного остатков.
    Тип – тип остатка: начальный или конечный
    Бух.тип – при работе с регистрами бухгалтерии, следует указать тип итогов – дебит или кредит
    Поле счета – также для регистров бухгалтерии. Имя поля бухгалтерского счета, для которого рассчитываются остатки

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

Помимо перечисленных ролей, имеются два дополнительных признака:
Игнорировать значения NULL – если флаг включен, то в результат не будут включены групповые записи по данному полю, если оно содержит значение NULL

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

Вычисляемые поля СКД

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

Ресурсы схемы компоновки

Поскольку в схеме компоновки данных могут использоваться несколько наборов данных, связанных между собой, а также из-за возможности в качестве набора данных использовать объект – произвольную таблицу значений, в тексте запросов СКД отсутствует возможность указывать секцию итогов. Итоги в СКД рассчитываются по группировкам для всей схемы целиком.
Для описания расчетов итогов служит закладка Ресурсы. Ресурсами могут быть как поля наборов, так и вычисляемые поля компоновки.
Выражения, описывающие логику расчета итогов, записываются на языке выражений СКД. Они могут содержать, как простую агрегатную функцию (Сумма, Количество, Минимум и др.), так и сложное выражение с использованием встроенных функций СКД и экспортных процедур общих модулей.
Значением выражения может быть как число, строка или дата, так  и значение ссылочного типа.
Итоговые значения ресурсов могут рассчитываться по разному для разных группировок. Например, для одной группировки ресурс рассчитывается как Минимум, а для другой как Среднее. Для этого служит настройка “Рассчитывать по”:

СКД настройка ресурсов Рассчитывать по

Как видно из скриншота выше, одно и то же поле можно указать несколько раз в качестве ресурса, при этом для каждой строки должно быть задано значение настройки “Рассчитывать по”. За счет этого можно настраивать разную логику расчета итогов одного и того же поля для разных группировок.

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

СКД настройка ресурсов для группировки иерархии

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

14 + восемь =

К НАЧАЛУ