1с иерархия в отчете

Обновлено: 03.07.2024

Для получения подчиненных элементов иерархического справочника в языке запросов предусмотрена конструкция В ИЕРАРХИИ :

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

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

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

Проверка наличия подчиненных элементов у элемента справочника

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

В данном примере ссылка элемента, для которого необходимо проверить наличие дочерних элементов, записывается в параметр запроса &Родитель . После выполнения такого запроса необходимо проверить результат на пустоту. Если результат не пустой, то подчиненные записи есть. Иначе — нет.

Получение всех родителей элемента

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

Если число уровней в справочнике ограничено и невелико, то возможно получение всех родителей одним запросом без цикла.

Вывод иерархического справочника в отчет

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

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

Для того, чтобы группы справочника размещались выше элементов необходимо в данном запросе заменить предложение УПОРЯДОЧИТЬ ПО на следующее:

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

Возможна также замена предложения УПОРЯДОЧИТЬ ПО на предложение АВТОУПОРЯДОЧИВАНИЕ . В этом случае результат будет упорядочен в соответствии с настройками справочника, т.е. если в справочнике указано, что группы должны располагаться выше элементов, то они будут расположены выше.

Получить иерархическую структуру справочника также возможно и при помощи итогов:

Получение итогов по иерархии

Для получения итогов по иерархии в запросе необходимо в предложении ИТОГИ ПО указать ключевое слово ИЕРАРХИЯ после указания поля, по которому будет рассчитываться итоги. Пример отчета «Обороты номенклатуры» с получением итогов по иерархии:

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

В случае, когда не нужны итоги по элементам, а нужны итоги только по группам, необходимо использовать в итогах конструкцию ТОЛЬКО ИЕРАРХИЯ :

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

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

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

Иерархические группировки

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

Создаем схему с набором данных - запрос. В качестве текста запроса используем следующий запрос:

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


Результатом отчета будет простой список номенклатуры:

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


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

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

Отбор "В группе"

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

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

Если в отчет из первой части статьи добавить отбор "Номенклатура В группе "Программное обеспечение", то результат отчета будет выглядеть так

Описание иерархических наборов данных

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

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

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

Для создания такого отчета:

Создадим набор данных "Документы", получающий список документов при помощи запроса:

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

Для построения иерархии создадим набор данных "ИерархияСотрудников". Его запрос будет выглядеть так:

Как видно, данный запрос будет возвращать сотрудников, перечисленных в параметре запроса Сотрудник.

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

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


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


ВАЖНО!
При выводе иерархических записей система компоновки данных выводит в результат поля с теми же именами, какие были у полей, для которых достраивалась иерархия. Поэтому, в иерархическом наборе данных поле, с которым осуществляется связь основного набора должно называться так же, как и в основном наборе. Так, в приведенном выше примере, в иерархическом наборе данных связуемое поле должно иметь имя Сотрудник.

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

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


Набор данных для проверки иерархии

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

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

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

Теперь следует указать данный набор как набор данных проверки иерархии поля Сотрудник набора данных Документы. Это делается на закладке "Наборы данных" в таблице полей набора данных.


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

Так, выше описанный отчет, с отбором "Сотрудник В группе "Тарасов" будет выглядеть так:

Примеры

Приведенные в данной статье примеры можно найти в отчете "ДокументыПоОтветственным" в информационной базе "Примеры 8.1", расположенной на диске ИТС.

Перерыл весь Инфостарт, но так и не нашел готового решения по иерархической нумерации в отчете на СКД. Делюсь своим вариантом решения.

1. Добавляем в отчет вычисляемое выражение


2. Добавляем макет поля на закладке макеты


3. На закладке Настройки для всех! группировок указываем в выбранных полях наше новое поле


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

Поиск колонки с номерами

Собственно проставление номеров

У меня этот код вынесен в отдельную функцию

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

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

TeMochkiN; Irwin; manlak; itriot11; logarifm; olbu; Трактор; Rustig; nixel; + 9 – Ответить (1) Как же не при чем? Отчет на СКД, настройки в схеме СКД) TeMochkiN; Irwin; manlak; logarifm; ice-net; olbu; kild; 7OH; JohnyDeath; nixel; + 10 – Ответить
Не поверите, но отчет на СКД тоже можно скомпоновать в модуле :). От этого отчет не перестает быть отчетом, выполненным на СКД.
Пока никто не предложил другого решения, то это единственный способ. Пока никто не предложил другого решения, то это единственный способ. (23) Есть еще вариант - сделать таблицу и скормить ее СКД. И программисты из 1С часто пользуются этим способом при построении сложных отчетов, которые внутри СКД не построить.
Огромный плюс СКД в том, что не надо рисовать макеты, формы. И самый большой плюс, что пользователь может перестраивать внешний вид отчета, группировки под себя. Особенно продвинутые пользователи.
Моя статья именно для таких отчетов.
А делать отчеты без СКД мы умеем еще со времен 7.7 )) Спасибо за открытый код решения!
На производительность в больших отчетах насколько влияет- не измеряли?

И при чем тут СКД, когда табличный документ скомпонован, данные выведены и сгруппированы там?

Вот если в схеме аналогичное действие сделать - тогда да, можно смело написать что это СКД.

(7) Присоединяюсь. Можно написать с тем же успехом "Иерархическая нумерация в Windows". (8) Иерархическая нумерация в СКД является частным случаем "Иерархическая нумерация в Windows". Поэтому мое название точнее и больше подходит к теме статьи. (7), (8), (9) Не заметили, в основе постобработки лежат поля, определенные в схеме СКД, добавлен свой макет? (10) Кстати, да. Обычный отчет этим кодом не пронумеруешь. Его надо дополнять, чтобы узнать уровень группировки. ключевое слово.
Никто же не говорит, что метод плохой, просто это не чистая СКД, а с постобработкой (14) Согласен, используется модуль отчета. Одной схемой обойтись не получилось. ИМХО, было бы интереснее разработать алгоритм нумерации выходного табличного документа.. Вставить колонку перед телом отчета, и пронумеровать ее сообразно иерархии, после вывода. А СКД вообще не трогать. (15) Все бы хорошо, но как по таблице узнать уровень строки? Написание кода в СКД, мне кажется, не есть гуд. Нечистая работа, как говорил Остап Бендер. Цимес СКД как раз в том что вы мышкой отчет делаете. А если код писать - так это и клюшки-стайл ничем не плох, с Вывести () и Присоединить (). (18)Про это писал рустиг в (23) но полностью самостоятельно писать вывод отчета, тоска смертная: вывод заголовков настройка оформления, сбор итогов и пр. всегда даю это на откуп СКД. Ничего плохого нет в постобработке, но да просто заголовок некорректный СКД тут как бы уже не при делах. Можно было бы написать "Нумерация в табличном документе сформированном средствами СКД" это было бы честнее. (25) Нумерация в табличном документе сформированном средствами СКД - программистское название. Но в целом согласен, что по названию ждали большего. Фигня. Ибо пост-обработка. На ИС были в разы более красивые решения. Не понимаю, откуда столько плюсов, сиречь восторгов. Десять дет назад я делал иерархический нумератор (не отчет), еще в 7.7. см. в базе.

Просмотры 26755

Загрузки 0

Рейтинг 112

Создание 21.06.17 22:38

Обновление 28.06.19 14:23

№ Публикации 637582

Тип файла Нет файла

Конфигурация Конфигурации 1cv8

Операционная система Не имеет значения

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Да

См. также

Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо

В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.

12.12.2020 4554 Eugen-S 23

Варианты применения СКД вне отчетов в отраслевых конфигурациях

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

18.11.2021 1196 drmaxart 0

Грабли на СКД

Наиболее частые проблемы, с которыми сталкиваются программисты 1С при разработке отчетов на СКД.

02.11.2021 3666 echo77 16

СКД: 5 советов, как сделать лучше

Несколько примеров решения задач с использованием разных подходов

27.10.2021 4465 Neti 19

27.01.2016 85831 Serginio 116

Что за ? в коде, или Секретный оператор в 1С

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

21.10.2021 8357 SeiOkami 41

Программное создание отчета на СКД с расшифровкой (обычные формы)

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

04.10.2021 1090 Neti 4

Программное открытие отчета СКД с параметрами и отбором

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

07.08.2021 5323 Eugen-S 19

Звуковое управление в 1С 8.3 Промо

В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.

16.03.2021 7226 velemir 33

СКД: скрываем нужные группы (блоки) по требованию пользователя

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

14.07.2021 2720 olja-ljaaa 7

Изменение расшифровки макета СКД до компоновки

Это не про работу с данными расшифровки. Это про изменение расшифровок полей ДО того, как СКД выполнилась. Быстрый способ сделать нужные расшифровки.

12.07.2021 2433 Yashazz 6

Чтоб в СКД по таблице значений был порядок!

Сортировка СКД и источник - таблица значений. Заметка.

28.06.2021 1359 Yashazz 0

Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions Промо

"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.

28.12.2020 8957 comol 31

Формирование отчета СКД с расшифровкой из обработки

Формирование отчета СКД из обработки немного отличается от формирования из отчета.

27.04.2021 4234 John_d 14

Нестандартное использование СКД

Программист 1С в компании «БКС-технологии» Алексей Шиянов в ходе Infostart Meetup Novosibirsk продемонстрировал необычный способ использования СКД и сравнил результаты заполнения движений документа через СКД с классическим подходом к заполнению движений через запросы и циклы.

14.04.2021 4073 user1127305 11

Полезные примеры СКД, ч.2

Еще несколько примеров решения задач в СКД.

06.04.2021 10864 Neti 8

Использование программных перечислений, ч.1: строковые константы Промо

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

10.12.2016 41156 unichkin 74

Пример платежного календаря. СКД. Работает на любой платформе, без привязки к данным. Подробное описание действий

Отчет-пример, в котором на СКД рассмотрены принципы построения платежного календаря без привязки к данным и работающий на любой платформе. Подробно описаны этапы решения задачи. Тестирование проводилось на платформе 8.3.16.1814.

02.04.2021 1219 parshachello 2

Полезные примеры СКД, ч.1

Подборка видео по решению различных задач в отчетах на СКД.

30.03.2021 13570 Neti 21

Обзор полезных методов БСП 3.1.4

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

25.03.2021 41335 rayastar 51

Вспомогательные инструкции в коде 1С Промо

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018 36199 tormozit 106

Сравнение данных с февралем високосного года (проблема 29 февраля)

Думаю, в практике многим приходится неоднократно сталкиваться с необходимостью разработки отчёта типа LFL (like for like), сравнивающего аналогичные периоды разных лет, например, текущего выбранного периода с аналогичным периодом прошлого года. В новых конфигурациях такой отчёт есть в составе конфигурации (см. "Сравнение продаж аналогичных периодов"), а в старых обычно приходится добавлять. Если не учесть нюанс сравнения с февралём високосного года, данные в отчёте за прошлый период могут быть некорректными.

Очень часто в 1С 8.3. в справочнике необходимо настроить определенный порядок подчинения элементов. Для реализации подобных задач из простого справочника необходимо сделать иерархический справочник 1С.

В платформе 1С существует два вида иерархии – иерархия групп и элементов и иерархия элементов.

Иерархия групп и элементов

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

Иерархический справочник 1С

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

Иерархический справочник 1С

При иерархии групп или элементов существуют группы (каталоги), в которые входят или другие группы, или элементы. И группы, и элементы являются экземплярами объекта справочника.

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

Иерархия элементов

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

Иерархический справочник 1С

После этого, каждый элемент может быть родителем другого элемента.

Иерархический справочник 1С

Родитель иерархического справочника 1С

У каждого элемента иерархического справочника должен быть родитель. В случае иерархии групп и элементов родитель это группа иерархического справочника, в случае иерархии элементов, родитель это элемент.

Родитель это стандартный реквизит справочника. Если иерархия отключена, то этот стандартный реквизит не доступен. Как у этого справочника Сотрудники.

Родитель иерархического справочника 1С

А если иерархия включена, то этот реквизит доступен. Как у справочника Контрагенты.

Родитель иерархического справочника 1С

Если форма элемента справочника автоматически генерируется платформой (т.е. она не создана), то этот реквизит отображается на управляемой форме. И, в случае иерархии групп и элементов в нем указана группа, в которую входит этот элемент.

Родитель иерархического справочника 1С

Если группа не указана, то значит элемент верхнего уровня.

Также, родитель имеется у элементов справочника с иерархией элементов.

Родитель иерархического справочника 1С

Создать элемент иерархического справочника 1С

Для того, чтобы создать группу справочника (в случае, иерархии групп и элементов), необходимо воспользоваться методом менеджера справочника СоздатьГруппу(). А для создания элемента следует воспользоваться методом СоздатьЭлемент(). Если мы хотим, чтобы вновь созданный элемент входил в какую-то группу, то следует в свойство Родитель этого элемента записать ссылку на нужную группу.

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

Заметьте, группа в коде выше, группа верхнего уровня. У неё при создании не был задан Родитель.

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

Изменить элемент иерархического справочника 1С

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

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

Поиск в иерархическом справочнике 1С

В платформе 1С имеется возможность искать в определенной группе иерархического справочника, для этого следует в методах НайтиПоНаименованию, НайтиПоКоду и НайтиПоРеквизиту заполнять параметр Родитель.

Например, поиск в определенной группе будет осуществляться так:

Выборка иерархического справочника 1С

В платформе 1С 8.3. существует возможность выбрать элементы иерархического справочника, которые входят в ту или иную группу, для этого следует воспользоваться методом Выбрать с заполненным параметром Родитель. В этом случае будут выбраны группы и элементы, которых входят непосредственно в указанную группу, но не будут выбраны группы элементы, которые входят в подчиненные группы. Чтобы выбрать элемент и группы, входящие в какую-то группу, следует воспользоваться методом ВыбратьИерархически.

Например, при таком коде:

Будут выбраны элементы, входящие в указанную группу.

А в этом случае:

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

И Выбрать, и ВыбратьИерархически отбирают и группы, и элементы справочников. Поэтому, в коде выше было использовано свойство ссылки справочника ЭтоГруппа. Это свойство имеет значение Истина, если ссылка является группой справочника.

Программировать в 1С за 11 шагов

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

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

Основы разработки в 1С такси

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

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

Читайте также: