Основное назначение.
Для работы с постоянной и условно постоянной информацией с некоторым множеством значений в системе используются объекты типа «Справочник». Система 1С:Предприятие 8 позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: должностей, сотрудников, клиентов, товаров и т. д. Каждый такой объект называется элементом справочника.
С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его поведения.
Реквизиты справочника.
В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие 8 предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.
Помимо Кода и Наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике могут быть созданы дополнительные реквизиты (поля). Например, справочник Сотрудники почти наверняка будет иметь реквизиты Должность, Оклад, ДатаПриема и другие.
Типы данных.
Для каждого реквизита справочника необходимо задать тип данных, например, «число», «строка», «дата», булево (Истина или Ложь). Это базовые типы, но можно указать и сложные типы данных. Например, реквизит Должность имеет тип данных Должности. В этом случае, значения этого реквизита будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения реквизитов одного справочника выбираются из элементов другого справочника.
Виды справочников.
Иерархические справочники — Список элементов справочника в системе 1С:Предприятие 8 может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Подчиненные справочники — Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь «один-ко-многим». В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник Договора. Тогда его можно сделать подчиненным справочнику Клиенты. Это означает, что клиент владеет договорами и у одного клиента может быть несколько договоров.
Табличная часть.
В платформе 1С реализована возможность для элемента справочника задавать одну или несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для которых рекомендуется заводить подчиненные справочники). Например, для справочника Сотрудники могут быть заведены табличные части Образование и СоставСемьи. Работа с табличными частями похожа на работу с подчиненными справочниками за исключением того, что табличные части не могут использоваться в качестве значений реквизитов других объектов.
Примеры работы со справочниками в 1С.
// Ссылка на справочник
СпрСотрудники = Справочники.Сотрудники; // или
СпрДолжности = Справочники[«Должности»];
//Создание и запись нового элемента справочника
НовЭл = Справочники.Сотрудники.СоздатьЭлемент();
НовЭл.Наименование = «Петров Петр Петрович»;
НовЭл.Оклад = 5000;
НовЭл.Записать();
//Создание и запись новой группы справочника
Нов = Справочники.Сотрудники.СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать(); // или
Нов = Справочники[«Сотрудники»].СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать();
// Как получить пустую ссылку типа справочник
ПустаяСсылка = Справочники.Валюты.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
Сообщить(«Ссылка пустая.»);
КонецЕсли;
// Поиск элемента справочника, если элемент найден, то он возвращается, иначе возвращается значение Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123); //ищем по коду
НайденныйСотр = СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»); //ищем по наименованию
НайденныйСотр = СпрСотр.НайтиПоРеквизиту(«Оклад», 5000); //ищем по реквизиту
//далее нужно проверить найденное значение
Если НайденныйСотр = Неопределено Тогда
//элемент не найден
Иначе
//элемент найден
КонецЕсли;
//Удаление элемента справочника
СпрСотр = Справочники.Сотрудники;
СпрСотр.Удалить(); //непосредственное удаление текущего элемента справочника
СпрСотр.УстановитьПометкуУдаления (Истина); //пометка на удаление
СпрСотр.УстановитьПометкуУдаления (Ложь); //снять пометку на удаление
//можно проверить, помечен ли элемент на удаление
//свойство ПометкаУдаления имеет тип Булево (Истина или Ложь)
Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
//элемент помечен на удаление
КонецЕсли;
//перебор элементов справочника
Выборка = Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий() = 1 Цикл // начало перебора элементов справочника в цикле
//действия с очередным элементом …
Сообщить(«Сотрудник « + Выборка.Наименование);
КонецЦикла;
//перебор внутри группы (при иерархической структуре), группа в 1С является родителем для элементов внутри
СпрСотр = Справочники.Сотрудники;
ГруппаРаботающие = СпрСотр.НайтиПоНаименованию(«Работающие»);
Выборка = СпрСотр.Выбрать(ГруппаРаботающие);
Пока Выборка.Следующий() = 1 Цикл
//действия с очередным элементом
Сообщить(«Сотрудник « + Выборка.Наименование);
КонецЦикла;
//выборка элементов справочника, подчиненного другому справочнику
Выборка = Справочники.НалоговыеЛьготы.Выбрать( ,Сотрудник); //тут сотрудник — ссылка на элемент справочника сотрудники
Пока Выборка.Следующий() = 1 Цикл
//действия с очередным элементом
Сообщить(«льгота « + Выборка.Наименование);
КонецЦикла;
// Как внести изменения в элемент справочника по ссылке
ОбъектСправочника = СсылкаНаЭлемент.ПолучитьОбъект();
ОбъектСправочника.Комментарий = «Контрагент изменен.»;
ОбъектСправочника.Записать();
// Как узнать принадлежность элемента справочника группе с учетом уровней иерархии
Если СсылкаНаЭлемент.ПринадлежитЭлементу(СсылкаНаГруппу) Тогда
Сообщить(СсылкаНаЭлемент.Наименование + » принадлежит « + СсылкаНаГруппу.Наименование);
КонецЕсли;
// Как скопировать существующий элемент справочника
Копия = СсылкаНаЭлемент.Скопировать();
Копия.Наименование = Копия.Наименование + » КОПИЯ»;
Копия.УстановитьНовыйКод();
Копия.Записать();
// Как выяснить уровень вложенности элемента справочника
Сообщить(СсылкаНаЭлемент.Уровень());
// Примеры работы со справочниками в 1С с помощью языка запросов
// Как обойти все элементы справочника
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты»;
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СсылкаНаГруппу = Справочники.Контрагенты.ПустаяСсылка();
СсылкаНаЭлемент = Справочники.Контрагенты.ПустаяСсылка();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
СсылкаНаГруппу = ВыборкаДетальныеЗаписи.Ссылка;
Иначе
СсылкаНаЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
КонецЕсли;
КонецЦикла;
// Как отобрать элементы справочника по родителю (перечислим все элементы группы)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ГДЕ
| Контрагенты.Родитель = &Родитель»;
Запрос.УстановитьПараметр(«Родитель», СсылкаНаГруппу);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Сообщить(СсылкаНаГруппу.Наименование + «:»);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(» « + ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
// Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка
| ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец»;
Запрос.УстановитьПараметр(«Владелец», СсылкаНаЭлемент);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Сообщить(СсылкаНаЭлемент.Наименование + «:»);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(» « + ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;
// Как отобрать элементы справочника по коду, наименованию, реквизиту
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Валюты.Ссылка
| ИЗ
| Справочник.Валюты КАК Валюты
| ГДЕ
| Валюты.Наименование = &Наименование И
| Валюты.Код = &Код И
| Валюты.НаименованиеПолное = &НаименованиеПолное»;
Запрос.УстановитьПараметр(«Наименование», «руб.»);
Запрос.УстановитьПараметр(«Код», «643»);
Запрос.УстановитьПараметр(«НаименованиеПолное», «Российский рубль»);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;