1с получить родителя верхнего уровня

Обновлено: 04.07.2024

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

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

Подскажите, пожалуйста, как сгруппировать по самому верхнему уровню?

Заранее спасибо за ответы.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

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

Получить указатель на окно верхнего уровня из другого класса
Всем привет! Могу путаться в терминологии, поправьте если что-) Необходимо получить указатель на.


Можно ли получить только дочерний текст(верхнего уровня) элемента
Есть такой кусок HTML: <div 13 200 руб. <div x2 — 26.

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

MS Access - как сделать форму верхнего уровня?
Всем привет,может кто нибудь знает как мне сделать форму верхнего уровня (т.е когда я форму.

Как взять Unid самого главного родителя?
Доброго времени суток! Как взять unid самого главного родителя если неизвестно заранее количество.

Определить домен верхнего уровня
Реализуйте функцию, которая определяет домен верхнего уровня с email адреса и возвращает в виде.

Спецификатор верхнего уровня const
Поясните, пожалуйста, этот пример: const int ci=42; const int *p2=&ci; const int *const p3=p2;.

Использование свойства РодительВерхнегоУровня расширения табличного поля списка

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

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

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

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

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

Пример обработки события Начало выбора() приведен ниже:

Пример обработки события При открытии() формы выбора контрагентов приведен ниже:

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

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

Очень часто в 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


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

В программном модуле дерево значений создается при помощи конструктора Новый.

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

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

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

Колонки дерева значений 1С

Само по себе дерево значений не имеет смысла, для того, чтобы можно было с ним работать у этого дерева нужно создать колонки. Для этого, нужно использовать свойство дерева значений Колонки, которое имеет тип КоллекцияКолонокДереваЗначений, у объекта данного типа имеется ряд методов, с которыми вы можете познакомиться в синтакс-помощнике, а нас конкретно интересует метод Добавить. Этот метод добавляет новые колонки в дерево значений. Он имеет следующий синтаксис:

Например, добавим нашему дереву регионов три колонки:

Мы добавили три колонки, две из которых имеют тип строка, а одна имеет тип число.

Строки дерева значений 1С

Строки дерева значений 1С бывают двух видов. Это строки верхнего (или первого) уровня. Те строки, у которых нет ни каких родителей, и которые ни кому не подчинены. И подчиненные строки – это строки более низких уровней. У подчиненных строк заполнено свойство Родитель, в котором указывается родительская строка, т.е. та строка, которой подчинена эта текущая строка (у строк верхнего уровня свойство Родитель пустое). Для того, чтобы создать строку верхнего (или первого) уровня, нужно воспользоваться свойством Строки дерева значений. Это свойство имеет тип КоллекцияСтрокДереваЗначений. И у объекта этого типа есть метод Добавить, который создает новую строку верхнего (первого) уровня. Причем, этот метод является функцией, которая возвращает строку дерева значений. А у этой строки мы, как к свойствам, можем обращаться к колонкам дерева значений.

В этом коде добавлено две строки верхнего уровня дерева регионов.

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

Например, так мы создаем две строки второго уровня:

А так, мы создаем строки третьего уровня (две для Удмуртии и одну для Татарстана):

Обход дерева значений 1С

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

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

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

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

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

Теперь нам достаточно эту процедуру вызвать в том месте, где мы создаем и заполняем дерево.

Дерево значений 1С

Ну и для того, чтобы наш список выглядел более наглядно, будем при выводе строк второго и третьего уровня добавлять тире. Для этого создадим функцию, которая добавляет тире, количество которых зависит от уровня вложенности. А узнать уровень вложенности строки можно при помощи метода строки дерева значений Уровень(), который возвращает уровень вложенности строки начиная с 0.

Дерево значений 1С

Дерево значений 1С на управляемой форме

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

Дерево значений на управляемой форме 1С

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

Дерево значений на управляемой форме 1С

Можно создать колонки с различными типами, и поместить дерево на форму в виде таблицы.

Дерево значений на управляемой форме 1С

В моей учебной конфигурации имеется справочник Регионы, который является иерархическим (иерархия элементов).

Иерархический справочник на управляемой форме 1С

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

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

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

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

Дерево значений на управляемой форме 1С

Также с деревом значений на форме можно работать напрямую. Дерево значений на управляемой форме конвертируется в объект ДанныеФормыДерево, который моделирует работу дерева на управляемой форме. Для того, чтобы обратиться к элементам верхнего уровня этого объекта нам необходимо воспользоваться методом ПолучитьЭлементы(), который возвращает объект имеющий тип ДанныеФормыКоллекцияЭлементовДерева, этот тип является коллекцией, и как любую коллекцию его можно обойти циклом и получить элемент этой коллекции, а уже у элемента этой коллекции посредством метода ПолучитьЭлементы() можно получить подчиненные ему строки и т.д.

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

Дерево значений на управляемой форме 1С

Статьи о других универсальных коллекциях значений в 1С



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

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


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

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