- •Глава 3. Основные объекты конфигурации
- •3.1. Константы
- •Обращение к константам из программы
- •3.2. Перечисления
- •Системные перечисления и наборы значений
- •3. 3. Справочники
- •Структура справочника
- •Предопределенные элементы
- •Подчиненные справочники
- •Табличные части
- •Иерархические справочники
- •Экранные формы
- •Приемы программирования
- •Обращение к менеджеру справочника
- •Выборка элементов справочника
- •Создание элементов и групп справочника
- •Поиск в справочнике
- •Удаление элемента или группы справочника
- •Открытие форм справочника
- •Работа с табличным частями
- •Модуль объекта
Приемы программирования
С помощью встроенного языка 1C:Предприятия 8 можно выполнять различные операции над справочниками: создавать, изменять и удалять элементы, искать нужный элемент, перебирать элементы в цикле и т.д.
Работа со справочниками из программы производится с помощью нескольких объектов. Каждый объект имеет свое назначение, собственные свойства и методы.
Ниже описываются эти объекты и взаимосвязи между ними:
СправочникиМенеджер
Обеспечивает доступ ко всем справочникам конфигурации. Свойства этого объекта совпадают с именами справочников и содержат объекты типа СправочникМенеджер.
СправочникМенеджер
Обеспечивает доступ к операциям над справочником как множеством элементов. Через методы этого объекта можно осуществлять поиск, , создавать новые элементы или группы, обращаться к формам и макетам справочника.
СправочникСсылка
Данный объект однозначно идентифицирует элемент (группу) справочника и позволяет обращаться к нему в режиме «только чтение». Через свойства и методы этого объекта можно прочитать реквизиты элемента (группы), обратиться к его табличным частям. Значение этого типа хранится в реквизитах, ссылающихся на элементы данного справочника, например, в реквизите Сотрудник документа ПриемНаРаботу хранится ссылка на конкретный элемент справочника Сотрудники.
СправочникОбъект
Предоставляет доступ к элементу с возможностью записи. Данный объект содержит методы, влияющие на элемент в базе данных, например, методы Записать и Удалить.
СправочникВыборка
Предоставляет возможность обхода (перебора) элементов справочника. Выборка может быть прямой или иерархической (если справочник многоуровневый).
СправочникСписок
Объект для управления списком элементов в табличном поле. Позволяет управлять колонками, отбором и сортировкой в списке.
Продемонстрируем на примерах выполнение типичных операции со справочниками.
Обращение к менеджеру справочника
Обращение к менеджеру справочника производится следующим образом:
СпрСотр = Справочники.Сотрудники;
СпрТовары = Справочники["Номенклатура"];
1. Первый вариант (через точку) применяется, когда имя справочника известно программисту и оно неизменно. Такая конструкция более простая и рекомендуется к применению в большинстве случаев.
2. Во втором варианте имя справочника задается строкой. Такая конструкция может быть использована, когда неизвестно имя справочника, с которым будут производиться действия, например, в универсальном отчете ПечатьСправочника, который выводит на печать содержимое любого заданного справочника.
При обращении к справочнику не следует применять ключевое слово Новый, которое предназначено для создания новых объектов определенных типов, например, массивов или таблиц значений.
Ниже показываются два варианта обращения к справочнику, первый из которых ошибочный:
СпрСотр = Новый Справочники.Сотрудники; // так нельзя!!
СпрСотр = Справочники.Сотрудники; //а вот так правильно
Выборка элементов справочника
Перебор элементов справочника производится через объект СправочникВыборка, который возвращается при вызове методов Выбрать и ВыбратьИерархически объекта СправочникМенеджер:
СпрВыборка = Справочники.Номенклатура.Выбрать();
Пока СпрВыборка.Следующий()Цикл
Сообщить(СпрВыборка.Код + " " + СпрВыборка.Наименование);
//перебор строк табличной части
Для Каждого стр Из СпрВыборка.ЕдиницыИзмеренияТовара Цикл
Сообщить(" " + стр.ЕдиницаИзмерения);
КонецЦикла
КонецЦикла;
Отличие метода ВыбратьИерархически от метода Выбрать заключается в том, что выборка формируется с учетом иерархии элементов, то есть сначала в выборке располагается родительский элемент 1-го уровня, за ним следуют его дочерние элементы, затем следующий родительский элемент 1-го уровня и т.д. А при использовании метода Выбрать элементы в выборке следуют в обычном порядке.
Методы Выбрать и ВыбратьИерархически позволяют отобрать только нужные элементы, например, входящие в определенную группу иерархического справочника или принадлежащие определенному владельцу.
Синтаксическая диаграмма метода Выбрать и ВыбратьИерархически такова (на примере метода Выбрать):
Выбрать(<Родитель>, <Владелец>, <0тбор>, <Порядок>) ;
Ниже поясняется назначение каждого параметра:
Родитель
Ссылка на родительский элемент или группу. В выборку попадут только элементы, принадлежащие заданному элементу (группе). Параметр имеет смысл только для иерархических справочников.
Владелец
Ссылка на элемент справочника-владельца. В выборку попадут только элементы, принадлежащие заданному элементу-владельцу. Параметр имеет смысл только для подчиненных справочников.
Отбор
Структура, которая позволяет отобрать элементы справочника с заданным значением в определенном реквизите. Ключ структуры содержит имя реквизита, а значение структуры задает значение отбора. В структуре могут использоваться только реквизиты Код, Наименование и реквизиты с установленным признаком индексирования. Обратите внимание, что структура может содержать только один элемент. Для отбора элементов по нескольким признакам можно использовать запросы.
Порядок
Строка, задающая условие упорядочивания по реквизиту, например, «Оклад Убыв». Упорядочивание может быть использовано только для индексированных реквизитов (в том числе для кода и наименования).
Например, выберем из справочника Номенклатура только мониторы и упорядочим их по убыванию цены:
СпрНоменклатура = Справочники.Номенклатура;
ГруппаМониторы= СпрНоменклатура.НайтиПоНаименованию("Мониторы");
СпрВыборка = СпрНоменклатура.Выбрать(ГруппаМониторы,,,"Цена Убыв");
Пока СпрВыборка.Следующий() Цикл
…
КонецЦикла;
В следующем примере из справочника Семья, подчиненного справочнику Сотрудники, выбираются все сыновья определенного сотрудника. Здесь используется одновременный отбор по владельцу и по реквизиту ТипРодства:
Отбор = Новый Структура("ТипРодства");
Отбор.ТипРодства = Перечисления.ТипРодства.Сын;
СпрВыборка = Справочники.Семья.Выбрать(,ВыбСотр,Отбор,);
