1С скд проверка иерархии

В этом ролике специалист по СКД Павел Шемякин покажет нам несколько вариантов корректного вывода в СКД иерархического справочника (иерархия элементов).

В видео Павлом были затронуты следующие моменты работы с СКД:

1) Системные поля
2) Вычисляемые поля
3) Выражения
4) Отборы в настройках
5) Пользовательские поля

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Предыдущие статьи по СКД можно посмотреть по ссылкам ниже:

До сих пор, мы рассматривали схему компоновки с одним единственны набором данных «Запрос». Это самый распространенный вариант применения СКД. Однако, система позволяет создавать наборы данных других типов. А также создавать несколько наборов данных. Все эти действия выполняются на закладке «Наборы данных» конструктора схемы компоновки:

Типы наборов данных СКД

Рассмотрим, какие типы наборов данных можно создать в схеме компоновки данных:

  • Набор данных запрос – произвольный запрос к базе данных (самый распространенный вариант),
  • Набор данных объект – произвольный, внешний набор данных (например таблица значений),
  • Набор данных объединение – объединение нескольких наборов данных в один результирующий.

Набор данных объект

Мы еще не рассматривали набор данных объект, по этому, остановимся на нем более подробно. Создавая набор данных этого типа, необходимо описать только выходные поля этого набора и его наименование:

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

Сам механизм для формирования данных необходимо описывать программно, и передавать процессору компоновки. Такие внешние данные могут быть следующих видов:

  • Таблица значений,
  • Выборка из результата запроса,
  • Область ячеек табличного документа,
  • Набор записей регистров,
  • Любой объект конфигурации или его табличная часть.

Наиболее распространенный тип внешних данных – это таблица значений. Ниже пример программного кода для передачи внешних данных процессору компоновки:

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

Набор данных объединение

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

Может быть построена разветвленная структура объединений наборов данных. Отдельные наборы можно перетаскивать мышкой по структуре.

Существует ограничение: подчиненные наборы могут быть только у наборов данных объединение.

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

Отсутствуют следующие реквизиты:

  • Автозаголовок,
  • Роль,
  • Выражения представления и упорядочивания,
  • Проверка иерархии,
  • Оформление,
  • Параметры редактирования.

Связи наборов данных

Раз уж можно создавать несколько наборов данных, необходимо их как-то связывать между собой. Существует два способа связи наборов данных: объединение и соединение.

Объединение выполняется с помощью отдельного набора данных «Набор данных объединение», который описан выше.

У объединения наборов данных есть существенное отличие от объединения двух отдельных таблиц в запросе: количество выходных полей у объединяемых наборов может отличаться.

Поля объединяемых наборов с одинаковым значением реквизита «Путь» сворачиваются в одно. Автоматической группировки строк по полям с одинаковым реквизитом «Путь» – не происходит.

Поля с разными значениями реквизита «Путь», образуют отельные поля в итоговом наборе.

Из выше сказанного можно сделать вывод, не должно быть четкого соответствия между количеством и последовательностью полей объединяемых наборов. Но, если нам нужно, чтобы какие-либо значения из двух наборов объединились в одну колонку, это также возможно, путем указанием одного и того же реквизита «Путь».

Это более сложный вид связи двух наборов данных. Для настройки соединения наборов предназначена специальная закладка конструктора схемы компоновки «Связи наборов данных»:

Соединение двух наборов выполняется по аналогии с соединением таблиц в запросе. На закладке «Связи наборов данных», по аналогии с конструктором запросов можно выбрать наборы данных и поля наборов (выражения), по которым необходимо выполнить соединение.

  • Вид соединения по умолчанию всегда «ЛЕВОЕ ВНЕШНЕЕ». Источником связи выступает основной набор данных, приемником связи – подчиненный.
  • Выполнять соединение можно только для наборов данных верхнего уровня. То-есть, наборы данных, которые входят в наборы «Объединения» соединять нельзя.

Передача параметров в подчиненные наборы

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

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

Читайте также:  Стилистический разбор художественного текста пример

Параметры указываются на закладке «Связи наборов данных», для каждой связующей пары:

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

Учитывая то, что параметр в этом случае – список, в условии запроса подчиненного набора необходимо указать конструкцию «В ()».

Дополнительные настройки связи наборов данных

Условие связи – поле, в котором можно задать произвольное выражение. Связь будет выполняться только в том случае, если значение выражения будет «Истина».

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

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

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

Группировка данных при объединении наборов

При соединении наборов данных, в каждом отдельном наборе может встречаться несколько строк с одним и тем же значением поля, по которому осуществляется связь. Несмотря на это, при расчете итогов всегда используется только одна запись каждого набора, и задвоения не происходит. Расчет итогов по группировкам получается корректный (в отличие от соединения нескольких таблиц в одном запросе).

Это основное преимущество использования соединения нескольких наборов данных.

Созданы два набора данных, которые содержат следующие строки:

При соединении этих наборов, используя связь по полю «Товар», в итогах по группировке «Товар» будут корректные значения:

Оптимизация итоговых запросов макета

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

Использование не связанных наборов данных

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

Отбор по полю подчиненного набора

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

Иерархия в отчетах на СКД

Для вывода иерархии в отчетах на СКД, в настройках компоновки указывается соответствующий тип группировки: «Иерархия» или «Только иерархия». Такая возможность доступна для ссылочных полей, для которых используется иерархия.

Если в настройках используется иерархия, система компоновки создаст «не явно» дополнительный набор данных с запросом к таблице объекта, для которого будет строиться иерархия и две дополнительные связи:

  • Первая – с основным набором данных,
  • Вторая – с самим собой.

Это позволит системе компоновки «достроить» элементы иерархии.

Автоматическое построение иерархии системой компоновки данных

Допустим, у нас есть простой набор данных «ПродажиТоваров», который содержит следующий запрос к базе данных:

В отчете необходимо вывести иерархию по полю «Товар».

В макете компоновки будет создан дополнительный набор данных с запросом такого вида:

Также, будут созданы две дополнительные связи:

Первая связь соединяет наш набор данных «ПродажиТоваров» с набором, созданным СКД «ТоварИерархия» по полю «Товар». Причем в связи используется параметр «Ссылки».

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

Вот так, вроде бы поменяли одну настройку, а СКД уже построила «не явно» столько дополнительных объектов.

В большинстве случаев иерархия строится автоматически в отчетах, и не требует глубокого понимания этого процесса. Однако, иногда может потребоваться создать иерархию, отличную от типовой (по полю «Родитель»). Вот тогда все описанные выше действия необходимо реализовывать вручную. В остальных случаях создавать дополнительный набор данных явно для построения иерархии, смысла нет.

На заметку. При автоматическом построении иерархии, система дублирует групповое поле на более низком уровне. То-есть, если у нас есть группа «Продукты», в которую входят: «Молоко» и «Хлеб», в отчете в группу «Продукты» будут входить три элемента: «Молоко», «Хлеб», «Продукты». Это не корректно. Происходит это из-за того, что система компоновки достраивает иерархические записи к тем, что уже есть в выборке. Если справочник имеет иерархию групп, для решения проблемы проще всего добавить отбор для выводимых записей:

Если используется иерархия элементов, все несколько сложнее. Нужно накладывать дополнительные отборы. Различные решения приведены здесь и здесь .

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

Для этого создадим два набора данных: «Заказы» и «Иерархия». Запросы наборов приведены ниже:

Читайте также:  Токовый задатчик 4 20 ма

Создадим две связи для созданных наборов:

Дальше, в настройках компоновки создадим простую структуру:

  • Первая группировка по полю «Автор» – иерархическая,
  • Вторая группировка – детальные записи.

Выведем для отчета два поля: «Склад» и «Ссылка».

Сформированный отчет будет отображать созданную нами иерархию по полю «Автор»:

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

Проблема с иерархическим отбором в собственной иерархии

При создании собственной иерархии, есть один нюанс. По умолчанию не будут работать корректно иерархические отборы в настройках компоновки (с видом сравнения «В группе»), по полю, для которого достраивается иерархия.

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

Набор для построения иерархии достраивает для каждой записи родителя, потом родителя более высокого уровня, и так далее до корневого элемента. А набор для проверки иерархии наоборот, разворачивает записи от полученного родителя до конечных элементов самого низкого уровня. Запрос для нашего случая будет следующий:

Для созданного набора необходимо создать связь самого к себе. Поле источника, в данном случае будет «Ссылка», а поле приемника – «Руководитель».

В реквизитах поля основного набора данных, по которому строиться иерархия, нужно указать созданный набор для проверки иерархии и передаваемый параметр в соответствующих реквизитах «Проверка иерархии: набор данных» и «Проверка иерархии: параметр»:

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

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

Помимо выше описанной иерархии, СКД позволяет выводить иерархию детальных записей.

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

Рассмотрим это на примере.

Возьмем запрос из выше описанного примера, только параметр наложим на поле «Родитель» (как было сделано для проверки иерархии):

Добавим связь данного набора самого к себе. Источником связи будет поле «Ссылка», а приемником – «Руководитель». Получаем разворот от элементов более высокого уровня к элементам конечного, самого низкого уровня.

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

Вложенные отчеты на СКД

Тема не большая, и рассматривать ее отдельно нет смысла. По этому, быстренько пробегусь по ней в данной статье.

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

Для создания вложенного отчета, нужно добавить его схему компоновки на закладке конструктора «Вложенные схемы»:

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

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

В настройках помимо произвольного отбора, можно указать связь полей из основной схемы компоновки с полями вложенной схемы. Для этого нужно связать поля вложенной схемы с полями поле компоновки основной схемы. Поля основной схемы расположены в специальной группе «ОбъектНастройкиВладелец»:

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

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

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

На этом все, в следующих статьях рассмотрены следующие темы:

Для ознакомления с предыдущими статьями можно перейти по ссылкам:

Для набора данных «Объект» используется для передачи в СКД внешних данных, таких как таблица значений, результат запроса. Для этого набора данных доступны описания полей, а также название объекта, которые будет передан в СКД:

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

В таблице «Поля» заполняются свойства:
1. «Поле» – имя поля, в случае запроса заполняется автоматически, в случае набора данных «Объект» определяется вручную.

2. «Путь» – указывается путь к данным из набора. Именно это название, указанное в этом поле будет фигурировать во всех дальнейших настройках СКД.

3. «Заголовок» – строка с заголовком поля, которые выводится в отчет или в настройках

4. «Ограничение доступности поля» – ряд галочек – настроек, служит для указания того, как данное поле не может быть использовано в настройках. Возможно, указать такие ограни-чения
a. «Поле» – поле нельзя использовать в выборках СКД
b. «Условие» – поле нельзя использовать как условие
c. «Группа» – запрет на использование поля в группировках
d. «Упорядочивание» – запрет использовать поле в сортировках

Читайте также:  Структура владения компанией это

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

6. «Роль» – обозначает дополнительные свойства поля и его взаимоотношения с другими полями. Для редактирования ролей открывается специальный диалог:

a. «Без роли» – никаких особых «нагрузок» на поле не накладывается, режим по умолчанию для большинства полей
b. «Период» – содержит номер периода, если поле имеет тип периода. Самый младший период должен иметь тип 1. Например, в запросе рассчитываем итоги по различным периодам: ПериодСекунда = 1, ПериодДень=2, ПериодНеделя=3 и т.д. Данный номер будет указывать, как в СКД рассчитывается итоги по полям остатка.
c. «Дополнительный» – указывает на то, что поле–период не является обязательным
d. «Счет» – указывает на то, что поля является бухгалтерским счетом, используется для рас-чета бухгалтерских итогов.
e. «Вид» – строка выражение, с помощью которого рассчитывается вид счета. Результатом выражения должно быть значение перечисления ВидСчета (Активный, Пассивный, Активно/Пассивный), либо число. Значение числа 0 соответствует активному счету, 1 – пассивному, 2 – активно-пассивному. Выражение записывается на языке выражений системы компоновки данных. Данная информация используется при расчете по полям бухгалтерских остатков;
f. «Остатки» – признак того, что поле является полем остатка;
g. «Имя» – строка, содержащая имя группы полей остатка. Например: "Сумма", "Количест-во";
h. «Тип» – тип остатка (НачальныйОстаток, КонечныйОстаток, Нет (поле не является остат-ком));
i. «Бух. Тип» – тип бухгалтерского остатка (Дебет, Кредит, Нет (поле не является бухгалтерским остатком));
j. «Поле счета» – имя поля-счета, для которого рассчитываются остатки;
k. Игнорировать значения NULL – если установлено, то в результат не нужно включать групповые записи по данному полю в случае, если поле содержит значение NULL.
l. «Обязательное» – при выполнении запроса поле с указанным флажком будут присутствовать всегда, даже если не были выбраны в выборке.

7. «Выражение представления» – содержит выражение, которое используется при выводе зна-чений поля в отчет.

Например нужно преобразовать дату в особый формат для этого указываем такое выражение «Формат(ПериодПолугодие,"ДФ = ‘""Полугодие с"" дд.ММ.гггг""’")» или ссылку на документ преобразовать к произвольному виду: ««Дата: »+Ссылка.Дата+«Номер: »+Ссылка.Номер».

8. «Выражение упорядочивания» – как упорядочивать это поле. При редактировании открывается диалог:

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

9. «Проверка иерархии» – используется, в случае если нужно формировать нестандартные отборы.
a. «Набор данных» – набор данных для проверки иерархии;
b. «Параметр» – параметр, в который будет подставляться значение, для которого нужно получить дочерние элементы;

10. «Тип значения» – уточнение типа значения поля набора данных, полезно использховать для уточнения полей составного типа

11. «Оформление» – параметры оформления поля набора данных. При редактировании открывается диалог:

Можно задавать следующие параметры:
Цвет фона – Определяет цвет фона в ячеках
Цвет текста – Определяет цвет текст в ячейках
Цвет в диаграмме – Определяет цвет линий в диа-грамме
Цвет границы – Цвет линий границы
Стиль границы – Типы линий границы
Стиль границы слева – слева
Стиль границы сверху – сверху
Стиль границы справа – справа
Стиль границы снизу – снизу
Шрифт – Вид шрифта, толщина, наклон и т.д.
Отступ – Количество знаков отступа
Авто отступ – Количество знаков отступа, применяется в группировках
Горизонтальное положение – Положение текста в ячейке по горизонтали
Вертикальное положение – Положение текста в ячейке по вертикале
Размещение – Размещение текста который не помещается в ячейку
Ориентация текста – Ориентация текст в градусах (90-поворот перпендикулярно)
Формат – Форматная строка значения
Выделять отрицательные – Признак того чтобы выделять отрицательные значения
Минимальная ширина – Минимальная ширина ячейки в пунктах
Минимальная высота – Минимальная высота ячеки
Максимальная высота – Максимальная высота
Текст – Текст который выводится вместо значения

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

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

Смотрите так же:
Что такое СКД?
Создание отчетов на основе СКД
Конструктор схемы компоновки данных
Конструктор схемы компоновки данных – Закладка Набор данных – Запрос
Конструктор запросов схемы компоновки данных
Конструктор схемы компоновки данных – Закладка Набор данных – Объект
Конструктор схемы компоновки данных – Закладка Набор данных – Объединение
Конструктор схемы компоновки данных – Закладка Связи наборов данных
Конструктор схемы компоновки данных – Закладка Вычисляемые поля
Конструктор схемы компоновки данных – Закладка Ресурсы
Конструктор схемы компоновки данных – Закладка Параметры
Конструктор схемы компоновки данных – Закладка Макеты
Конструктор схемы компоновки данных – Закладка Вложенные схемы
Конструктор схемы компоновки данных – Закладка Настройки

Оцените статью
Добавить комментарий

Adblock detector