
- •Встроенный язык
- •Справочники
- •Атрибуты справочников
- •Типы данных
- •Иерархические справочники
- •Подчиненные справочники
- •Сравнение справочников с другими объектами
- •Форма элемента и форма группы
- •Программное создание группы
- •Информация о текущем элементе
- •Периодические реквизиты
- •Проведение документов
- •Цикл по реквизитам справочника
- •Обращение к атрибутам по имени
Иерархические справочники
Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Справочник Сотрудники |
|
Справочник Контрагенты |
|
|
|
Подчиненные справочники
Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь "один-ко-многим". В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что "Сотрудник владеет налоговыми льготами".
Справочник Сотрудники |
Справочник НалоговыеЛьготы |
|
(владелец Петров Петр Петрович)
|
|
(владелец Светлов Михаил Петрович)
|
Сравнение справочников с другими объектами
Объект |
Сходства |
Различия |
Константы |
хранит значение, сохраняется в базе данных |
Справочник хранит не одно значение, а целый список однородных объектов. |
Документы |
сохраняется в базе данных, имеет реквизиты, документы могут быть подчиненными друг другу |
Справочник хранит нормативно-справочную информацию, а документы отражают события реального мира. Обычно значения реквизитов документов выбираются из справочников. Документ обычно проводится, документ обязательно имеет дату и время, документ может содержать табличную часть, чего нет в справочниках (в версии 8.0 справочники и документы могут иметь по несколько табличных частей). Справочники могут быть многоуровневыми, в справочнике могут быть периодические реквизиты, чего нет в документах (в версии 8.0 периодических реквизитов нет, а есть периодические регистры сведений). |
Перечисления |
хранится в БД, хранит список значений |
Множество значений в справочник вводит пользователь в режиме Предприятие, а для перечислений список значений задается разработчиком в режиме Конфигуратор. Перечисления обычно используются в операторах Если. |
ТаблицаЗначений |
имеет строки и колонки (не хранится в БД) |
ТаблицаЗначений предназначена для хранения промежуточных данных в памяти компьютера, возникающих во время работы программы. Таблица значений может хранить разнородные объекты, а в справочнике все элементы одного типа. Таблицы значений не могут быть многоуровневыми или подчиненными друг другу. |
СписокЗначений |
хранит список значений (не сохраняется в БД) |
Список значений может хранить разнородные объекты, а в справочнике все элементы одного типа |
Основы программирования
Ссылка на справочник Для работы со справочником из какого-нибудь модуля требуется сначала создать ссылку на этот справочник.
7.7 |
СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрДолж = СоздатьОбъект("Справочник.Должности"); |
Создание и запись нового элемента
7.7 |
СпрСотр.Новый(); СпрСотр.Наименование = "Иванов Иван Иванович"; СпрСотр.Оклад = 5000; СпрСотр.Записать(); |
Поиск элемента справочника
7.7 |
//например, в приказе об увольнении СпрСотр.НайтиЭлемент(Сотрудник); СпрСотр.НайтиПоКоду(123); СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович"); СпрСотр.НайтиПоРеквизиту("Оклад", 5000); //если элемент найден, он становится текущим и его можно прочитать так: Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда ........НайденныйСотр = СпрСотр.ТекущийЭлемент(); КонецЕсли; |
Удаление элемента справочника
7.7 |
СпрСотр.Удалить(1); //непосредственное удаление СпрСотр.Удалить(0); //пометка на удаление СпрСотр.СнятьПометкуУдаления(); //можно проверить, помечен ли элемент на удаление //функция возвращает 1 - если помечен, 0 - если нет Пометка = СпрСотр.ПометкаУдаления(); //обратите внимание: это метод |
Перебор элементов справочника
7.7 |
СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл ... //действия с очередным элементом ...Сообщить("Сотрудник " + СпрСотр.Наименование); КонецЦикла; |
Родитель Перебор элементов внутри группы. Группа в терминах 1С -- это "родитель".
7.7 |
СпрСотр.НайтиПоНаименованию("Работающие"); Работающие = СпрСотр.ТекущийЭлемент(); СпрСотр.ИспользоватьРодителя(Работающие); //дальше, например, цикл по сотрудникам (см. выше) ... |
Владелец Перебор элементов справочника принадлежащих элементу другого справочника. Один справочник подчинен другому справочнику, например спр. НалоговыеЛьготы подчинен спр. Сотрудники.
7.7 |
СпрНЛ = СоздатьОбъект("Справочник.НалоговыеЛьготы"); СпрНЛ.ИспользоватьВладельца(Сотрудник); //дальше, например, цикл по льготам этого сотрудника (см. выше) ... |
Периодические реквизиты Чтение и запись периодических реквизитов. Установка даты выборки периодических реквизитов для всего справочника.
7.7 |
//так мы узнаем, какая была у сотрудника //категория на определенную дату Катег = СпрСотр.Категория.Получить(НекаяДата); //так мы установим сотруднику категорию //на определенную дату СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория); //можно установить дату выборки периодических //реквизитов для всего справочника СпрСотр.ИспользоватьДату(НекаяДата); //тогда ниже уже нельзя использовать Установить и Получить //доступ к периодическим реквизитам становится //такой же, как к обычным реквизитам Катег = СпрСотр.Категория; СпрСотр.Оклад = 6000;
|
Экранные формы справочников
Форма списка справочника
Для удобства работы пользователей со справочником на этапе конфигурирования можно создать несколько видов экранных форм для показа справочника. В зависимости от контекста вызова справочника можно задать использование определенного диалога для работы с ним.
Лучше один раз увидеть, чем сто раз услышать, поэтому ниже для примера приведена форма списка справочника Сотрудники:
7.7 |
|
Модуль формы списка содержит процедуры и функции, которые действуют в контексте данной формы (в контексте объекта Справочник).
Предопределенные процедуры вызываются системой 1С при наступлении определенных событий. Предопределенные процедуры вызываются системой 1С при наступлении определенных событий, поэтому они являются обработчиками событий. В версии 8.0 имя процедуры может быть любое, необязательно совпадающее с именем события. Кроме того, в версии 8.0 список событий для всех объектов был значительно расширен.
Событие |
Описание |
||
ПриОткрытии |
Вызывается при открытии формы списка справочника. Можно задать начальные значения для переменных, проверить права пользователя на открытие данного справочника и т.д. |
||
ПриЗакрытии |
Вызывается при закрытии формы списка справочника. |
||
ПриЗаписи |
Вызывается при записи элемента справочника, если элементы вводятся прямо в форме списка, а не в форме элемента. Это используется для справочников с простой структурой, например справочник Должности. В этой процедуре можно проверить вводимые данные на наличие ошибок. Пример, справочник Должности
|
||
ПриВыбореРодителя(НовРодитель) |
Вызывается при выборе родителя (группы). В этой процедуре можно проверить права пользователя на просмотр элементов данной группы. |
||
ПриВыбореВладельца(НовВладелец) |
Вызывается при выборе владельца справочника-хозяина. Имеет смысл, если данный справочник подчинен другому. |
||
ПриУстановкеОтбора(Реквизит,Значение) |
Предопределенная процедура при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора. |
||
ПриВыбореСтроки() |
Режим обработки выбора строки (двойной щелчок мыши или клавиша Enter) включается в форме списка справочника, журнала документов, счетов, журнала операций, журнала проводок при помощи метода Форма.ОбработкаВыбораСтроки(1). Тогда при выборе строки будет вызываться эта предопределенная процедура. |
Сортировка
В форме списка справочника элементы могут быть отсортированы в различном порядке: по коду, по наименованию или по любому реквизиту, у которого в Конфигураторе установлен флажок Сортировка. Задать тип сортировки можно программно методом Сортировка (Способ, ФлагРазрешенияИзменения)
7.7 |
Процедура ПриОткрытии() ...... Сортировка("Код",0); //сортировка по коду, пользователь изменить не может КонецПроцедуры |
Отбор
В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок "Отбор по реквизиту" в Конфигураторе .
7.7 |
Процедура ПриОткрытии() ...... УстановитьОтбор("Год",1980); КонецПроцедуры |
Статический фильтр (только версия 7.7)
В 1С 7.7 нельзя установить отбор по периодическому реквизиту или по нескольким реквизитам одновременно (сложный фильтр). В этом случае выходом из положения может быть метод ИспользоватьСписокЭлементов. Этому методу нужно передать список элементов, которые должны быть показаны. Предварительно этот список нужно сформировать.
7.7 |
Процедура ПоказатьРаботающихПлотников() СписокЭлементов = создатьОбъект("СписокЗначений"); СпрСотр = СоздатьОбъект("Справочник.Сотрудники"); СпрСотр.ИспользоватьДату(РабочаяДата()); СпрСотр.ВыбратьЭлементы(); Пока СпрСотр.ПолучитьЭлемент()=1 Цикл .....Если (СпрСотр.Родитель = группаРаботающие) И (СпрСотр.Должность=длжПлотник) Тогда ...........СписокЭлементов.ДобавитьЗначение(СпрСотр.ТекущийЭлемент()); .....КонецЕсли; КонецЦикла; ИспользоватьСписокЭлементов(СписокЭлементов); КонецПроцедуры
|