6.16 С помощью функциональности объекта какого типа можно перебирать данные справочника?
Опубликовано: Обновлено:
❓ 6.16 С помощью функциональности объекта какого типа можно перебирать данные справочника?
📚 Документация
Заголовок раздела «📚 Документация»-
ИТС: Архитектура и работа с данными «1С:Предприятия 8.2» — Выборка
-
ИТС: Работа с прикладными объектами средствами встроенного языка
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»У справочника есть несколько связанных типов объектов, каждый из которых предназначен для своей задачи: доступа к справочнику, работы с конкретным элементом, программного обхода данных или отображения списка.
Справочники │ │ тип: СправочникиМенеджер ↓Справочники.Контрагенты │ │ тип: СправочникМенеджер.Контрагенты │ ├── СоздатьЭлемент() │ ↓ │ тип: СправочникОбъект.Контрагенты │ └── Выбрать() ↓ тип: СправочникВыборка.КонтрагентыСправочникиМенеджер — доступ к менеджерам справочников
Заголовок раздела «СправочникиМенеджер — доступ к менеджерам справочников»Глобальное свойство:
Справочникиимеет тип:
СправочникиМенеджерЧерез него можно обратиться к менеджеру конкретного справочника:
Справочники.КонтрагентыСправочники.НоменклатураОсновное назначение СправочникиМенеджер — доступ к менеджерам конкретных справочников конфигурации.
Также у него есть метод ТипВсеСсылки(), который возвращает ОписаниеТипов, содержащее типы ссылок всех справочников конфигурации:
ТипыСсылок = Справочники.ТипВсеСсылки();Например, с помощью СодержитТип() можно проверить, является ли некоторый тип типом ссылки какого-либо справочника:
ТипыСсылок = Справочники.ТипВсеСсылки();
Если ТипыСсылок.СодержитТип(ТипЗнч(Контрагент)) Тогда Сообщить("Значение имеет тип ссылки на справочник");КонецЕсли;СправочникМенеджер — действия над конкретным справочником
Заголовок раздела «СправочникМенеджер — действия над конкретным справочником»Выражение:
Справочники.Контрагентывозвращает менеджер конкретного справочника:
СправочникМенеджер.КонтрагентыМенеджер является своеобразной точкой входа в конкретный справочник. Через него выполняются действия, относящиеся ко всему справочнику, а не к одному определённому элементу.
Например:
- создать элемент или группу;
- найти элемент по коду или наименованию;
- обратиться к предопределённым элементам;
- вызвать экспортные процедуры и функции модуля менеджера;
- получить форму;
- получить выборку данных.
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
Выборка = Справочники.Контрагенты.Выбрать();
СправочникМенеджерсам не представляет отдельный элемент справочника. Он предоставляет операции, относящиеся к справочнику в целом.
СправочникВыборка — динамический обход данных
Заголовок раздела «СправочникВыборка — динамический обход данных»Вызов метода Выбрать() менеджера:
Выборка = Справочники.Контрагенты.Выбрать();возвращает значение типа:
СправочникВыборка.КонтрагентыВыборка предназначена для динамического обхода элементов справочника.
Обход выполняется методом Следующий():
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл Сообщить(Выборка.Наименование);КонецЦикла;При вызове Выбрать() можно задавать параметры, например родителя, владельца, отбор и порядок.
Как выборка читает данные
Заголовок раздела «Как выборка читает данные»Важная особенность — выборка не считывает все данные сразу в память.
Выбрать() ↓считывается блок данных ↓Следующий() ↓обход считанных записей ↓следующий блок данныхПлатформа считывает данные блоками по 25 записей по мере обхода выборки.
Благодаря этому выборки можно использовать для обхода больших объёмов данных без необходимости предварительно загружать весь результат в память.
Для объектных данных, в том числе справочников, выборка считывает данные объекта целиком, включая его табличные части. Поэтому при обращении к уже считанным данным выборки или при получении из неё объекта повторного считывания этого объекта из базы данных не происходит.
Иерархическая выборка
Заголовок раздела «Иерархическая выборка»Для иерархических справочников существует отдельный метод:
Выборка = Справочники.Номенклатура.ВыбратьИерархически();Обычная и иерархическая выборки отличаются порядком обхода.
| Метод | Обход |
|---|---|
Выбрать() | в заданном порядке выборки |
ВыбратьИерархически() | с учётом иерархии элементов |
При иерархической выборке после элемента обходятся подчинённые ему элементы, а затем выполняется переход к следующему элементу соответствующего уровня.
СправочникОбъект — работа с одним объектом
Заголовок раздела «СправочникОбъект — работа с одним объектом»Получить его можно, например, при создании нового элемента:
Контрагент = Справочники.Контрагенты.СоздатьЭлемент();Тип:
СправочникОбъект.Контрагентыиспользуется прежде всего для создания, изменения и удаления конкретного объекта справочника.
или из ссылки на существующий элемент:
Контрагент = СсылкаНаКонтрагента.ПолучитьОбъект();СправочникОбъект содержит данные конкретного элемента и позволяет их изменять и записывать.
Контрагент.Наименование = "Новый контрагент";
Контрагент.Записать();То есть здесь работа идёт уже не со справочником в целом, а с конкретным объектом базы данных.
СправочникСписок — отображение списка в обычной форме
Заголовок раздела «СправочникСписок — отображение списка в обычной форме»СправочникСписок.<ИмяСправочника> предназначен для динамического просмотра данных справочника.
В обычных формах он используется, в частности, для отображения списка элементов справочника в ТабличноеПоле.
СправочникСписок.Номенклатура ↓ ТабличноеПоле ↓список элементов справочникаВ управляемых формах для этой задачи используется другой механизм — ДинамическийСписок.
| Обычные формы | Управляемые формы |
|---|---|
СправочникСписок | ДинамическийСписок |
используется для отображения списка справочника в ТабличноеПоле | используется для отображения списочных данных в элементе формы Таблица |
ДинамическийСписок построен на основе системы компоновки данных. Для него доступны, в частности, отбор, порядок, группировка и условное оформление.
В обычных формах для отображения списка справочника используется
СправочникСписок, а в управляемых формах —ДинамическийСписок.
🧠 Ключевая мысль
Заголовок раздела «🧠 Ключевая мысль»Для программного последовательного обхода данных справочника используется выборка, получаемая методом Выбрать(), а переход между элементами выполняется методом Следующий().
При этом СправочникМенеджер работает со справочником в целом, СправочникОбъект — с отдельным элементом, а СправочникСписок предназначен для динамического просмотра данных.