Перейти к содержимому

6.16 С помощью функциональности объекта какого типа можно перебирать данные справочника?

Опубликовано: Обновлено:

Telegram → Просто о платформе 1С

❓ 6.16 С помощью функциональности объекта какого типа можно перебирать данные справочника?


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

Справочники
│
│ тип: СправочникиМенеджер
↓
Справочники.Контрагенты
│
│ тип: СправочникМенеджер.Контрагенты
│
├── СоздатьЭлемент()
│ ↓
│ тип: СправочникОбъект.Контрагенты
│
└── Выбрать()
↓
тип: СправочникВыборка.Контрагенты

СправочникиМенеджер — доступ к менеджерам справочников

Заголовок раздела «СправочникиМенеджер — доступ к менеджерам справочников»

Глобальное свойство:

Справочники

имеет тип:

СправочникиМенеджер

Через него можно обратиться к менеджеру конкретного справочника:

Справочники.Контрагенты
Справочники.Номенклатура

Основное назначение СправочникиМенеджер — доступ к менеджерам конкретных справочников конфигурации.

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

ТипыСсылок = Справочники.ТипВсеСсылки();

Например, с помощью СодержитТип() можно проверить, является ли некоторый тип типом ссылки какого-либо справочника:

ТипыСсылок = Справочники.ТипВсеСсылки();
Если ТипыСсылок.СодержитТип(ТипЗнч(Контрагент)) Тогда
Сообщить("Значение имеет тип ссылки на справочник");
КонецЕсли;

СправочникМенеджер — действия над конкретным справочником

Заголовок раздела «СправочникМенеджер — действия над конкретным справочником»

Выражение:

Справочники.Контрагенты

возвращает менеджер конкретного справочника:

СправочникМенеджер.Контрагенты

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

Например:

  • создать элемент или группу;
  • найти элемент по коду или наименованию;
  • обратиться к предопределённым элементам;
  • вызвать экспортные процедуры и функции модуля менеджера;
  • получить форму;
  • получить выборку данных.
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
Выборка = Справочники.Контрагенты.Выбрать();

СправочникМенеджер сам не представляет отдельный элемент справочника. Он предоставляет операции, относящиеся к справочнику в целом.


СправочникВыборка — динамический обход данных

Заголовок раздела «СправочникВыборка — динамический обход данных»

Вызов метода Выбрать() менеджера:

Выборка = Справочники.Контрагенты.Выбрать();

возвращает значение типа:

СправочникВыборка.Контрагенты

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

Обход выполняется методом Следующий():

Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Наименование);
КонецЦикла;

При вызове Выбрать() можно задавать параметры, например родителя, владельца, отбор и порядок.

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

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

Платформа считывает данные блоками по 25 записей по мере обхода выборки.

Благодаря этому выборки можно использовать для обхода больших объёмов данных без необходимости предварительно загружать весь результат в память.

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

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

Выборка = Справочники.Номенклатура.ВыбратьИерархически();

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

МетодОбход
Выбрать()в заданном порядке выборки
ВыбратьИерархически()с учётом иерархии элементов

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


СправочникОбъект — работа с одним объектом

Заголовок раздела «СправочникОбъект — работа с одним объектом»

Получить его можно, например, при создании нового элемента:

Контрагент = Справочники.Контрагенты.СоздатьЭлемент();

Тип:

СправочникОбъект.Контрагенты

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

или из ссылки на существующий элемент:

Контрагент = СсылкаНаКонтрагента.ПолучитьОбъект();

СправочникОбъект содержит данные конкретного элемента и позволяет их изменять и записывать.

Контрагент.Наименование = "Новый контрагент";
Контрагент.Записать();

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


СправочникСписок — отображение списка в обычной форме

Заголовок раздела «СправочникСписок — отображение списка в обычной форме»

СправочникСписок.<ИмяСправочника> предназначен для динамического просмотра данных справочника.

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

СправочникСписок.Номенклатура
↓
ТабличноеПоле
↓
список элементов справочника

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

Обычные формыУправляемые формы
СправочникСписокДинамическийСписок
используется для отображения списка справочника в ТабличноеПолеиспользуется для отображения списочных данных в элементе формы Таблица

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

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


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

При этом СправочникМенеджер работает со справочником в целом, СправочникОбъект — с отдельным элементом, а СправочникСписок предназначен для динамического просмотра данных.