Справочник 1С — Справочники

Основное назначение.

Для работы с постоянной и условно постоянной информацией с некоторым множеством значений в системе используются объекты типа «Справочник». Система 1С:Предприятие 8 позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: должностей, сотрудников, клиентов, товаров и т. д. Каждый такой объект называется элементом справочника.

С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его поведения.

Реквизиты справочника.

В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие 8 предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.

Помимо Кода и Наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике могут быть созданы  дополнительные реквизиты (поля). Например, справочник Сотрудники почти наверняка будет иметь реквизиты Должность, Оклад, ДатаПриема и другие.

Типы данных.

Для каждого реквизита справочника необходимо задать тип данных, например, «число», «строка», «дата», булево (Истина или Ложь). Это базовые типы, но можно указать и сложные типы данных. Например, реквизит Должность имеет тип данных Должности. В этом случае, значения этого реквизита будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения реквизитов одного справочника выбираются из элементов другого справочника.

Виды справочников.

Иерархические справочники —  Список элементов справочника в системе 1С:Предприятие 8 может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.

Подчиненные справочники —  Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь «один-ко-многим». В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник Договора. Тогда его можно сделать подчиненным справочнику Клиенты. Это означает, что  клиент владеет договорами и у одного клиента может быть несколько договоров.

Табличная часть.

В платформе 1С реализована возможность для элемента справочника задавать одну или несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для которых рекомендуется заводить подчиненные справочники). Например, для справочника Сотрудники могут быть заведены табличные части Образование и СоставСемьи. Работа с табличными частями похожа на работу с подчиненными справочниками за исключением того, что табличные части не могут использоваться в качестве значений реквизитов других объектов.

Примеры работы со справочниками в 1С.

// Ссылка на справочник

СпрСотрудники = Справочники.Сотрудники; // или
СпрДолжности = Справочники[«Должности»];

//Создание и запись нового элемента справочника

НовЭл = Справочники.Сотрудники.СоздатьЭлемент();
НовЭл.Наименование = «Петров Петр Петрович»;
НовЭл.Оклад = 5000;
НовЭл.Записать();

//Создание и запись новой группы справочника

Нов = Справочники.Сотрудники.СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать();   // или
Нов = Справочники[«Сотрудники»].СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать();

// Как получить пустую ссылку типа справочник

ПустаяСсылка = Справочники.Валюты.ПустаяСсылка();
Если ПустаяСсылка.Пустая() Тогда
Сообщить(«Ссылка пустая.»);
КонецЕсли;

// Поиск элемента справочника, если элемент найден, то он возвращается, иначе возвращается значение Неопределено

СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);   //ищем по коду
НайденныйСотр = СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»); //ищем по наименованию
НайденныйСотр = СпрСотр.НайтиПоРеквизиту(«Оклад», 5000);    //ищем по реквизиту

//далее нужно проверить найденное значение

Если НайденныйСотр = Неопределено Тогда
//элемент не найден
Иначе
//элемент найден
КонецЕсли;

//Удаление элемента справочника

СпрСотр = Справочники.Сотрудники;
СпрСотр.Удалить(); //непосредственное удаление текущего элемента справочника
СпрСотр.УстановитьПометкуУдаления (Истина); //пометка на удаление
СпрСотр.УстановитьПометкуУдаления (Ложь); //снять пометку на удаление

//можно проверить, помечен ли элемент на удаление
//свойство ПометкаУдаления имеет тип Булево (Истина или Ложь)

Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
//элемент помечен на удаление
КонецЕсли;

//перебор элементов справочника

Выборка = Справочники.Сотрудники.Выбрать();
Пока Выборка.Следующий() = 1 Цикл // начало перебора элементов справочника в цикле
//действия с очередным элементом …
Сообщить(«Сотрудник « + Выборка.Наименование);
КонецЦикла;

//перебор внутри группы (при иерархической структуре), группа в 1С является родителем для элементов внутри

СпрСотр = Справочники.Сотрудники;
ГруппаРаботающие = СпрСотр.НайтиПоНаименованию(«Работающие»);
Выборка = СпрСотр.Выбрать(ГруппаРаботающие);
Пока Выборка.Следующий() = Цикл
//действия с очередным элементом
Сообщить(«Сотрудник « + Выборка.Наименование);
КонецЦикла;

//выборка элементов справочника, подчиненного другому справочнику

Выборка = Справочники.НалоговыеЛьготы.Выбрать( ,Сотрудник); //тут сотрудник — ссылка на элемент справочника сотрудники
Пока Выборка.Следующий() = 1 Цикл
//действия с очередным элементом
Сообщить(«льгота « + Выборка.Наименование);
КонецЦикла;

// Как внести изменения в элемент справочника по ссылке

ОбъектСправочника = СсылкаНаЭлемент.ПолучитьОбъект();
ОбъектСправочника.Комментарий = «Контрагент изменен.»;
ОбъектСправочника.Записать();

// Как узнать принадлежность элемента справочника группе с учетом уровней иерархии

Если СсылкаНаЭлемент.ПринадлежитЭлементу(СсылкаНаГруппу) Тогда
    Сообщить(СсылкаНаЭлемент.Наименование + » принадлежит « + СсылкаНаГруппу.Наименование);
КонецЕсли;

// Как скопировать существующий элемент справочника

Копия = СсылкаНаЭлемент.Скопировать();
Копия.Наименование = Копия.Наименование + » КОПИЯ»;
Копия.УстановитьНовыйКод();
Копия.Записать();

// Как выяснить уровень вложенности элемента справочника

Сообщить(СсылкаНаЭлемент.Уровень());

// Примеры работы со справочниками в 1С с помощью языка запросов
// Как обойти все элементы справочника

Запрос = Новый Запрос;
Запрос.Текст =
   «ВЫБРАТЬ
   |   Контрагенты.Ссылка
   |  ИЗ
   |   Справочник.Контрагенты КАК Контрагенты»;

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

СсылкаНаГруппу = Справочники.Контрагенты.ПустаяСсылка();
СсылкаНаЭлемент = Справочники.Контрагенты.ПустаяСсылка();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.Ссылка.ЭтоГруппа Тогда
       СсылкаНаГруппу = ВыборкаДетальныеЗаписи.Ссылка;
    Иначе
      СсылкаНаЭлемент = ВыборкаДетальныеЗаписи.Ссылка;
    КонецЕсли;
КонецЦикла;

// Как отобрать элементы справочника по родителю (перечислим все элементы группы)

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
    |   Контрагенты.Ссылка
    |  ИЗ
    |   Справочник.Контрагенты КАК Контрагенты
    |  ГДЕ
    |   Контрагенты.Родитель = &Родитель»;

Запрос.УстановитьПараметр(«Родитель», СсылкаНаГруппу);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Сообщить(СсылкаНаГруппу.Наименование + «:»);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить(» « + ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;

// Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
    |   ДоговорыКонтрагентов.Ссылка
    |  ИЗ
    |   Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |  ГДЕ
    |   ДоговорыКонтрагентов.Владелец = &Владелец»;

Запрос.УстановитьПараметр(«Владелец», СсылкаНаЭлемент);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Сообщить(СсылкаНаЭлемент.Наименование + «:»);
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить(» « + ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;

// Как отобрать элементы справочника по коду, наименованию, реквизиту

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
    |   Валюты.Ссылка
    |  ИЗ
    |   Справочник.Валюты КАК Валюты
    |  ГДЕ
    |   Валюты.Наименование = &Наименование И
    |   Валюты.Код = &Код И
    |   Валюты.НаименованиеПолное = &НаименованиеПолное»;

Запрос.УстановитьПараметр(«Наименование», «руб.»);
Запрос.УстановитьПараметр(«Код», «643»);
Запрос.УстановитьПараметр(«НаименованиеПолное», «Российский рубль»);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Сообщить(ВыборкаДетальныеЗаписи.Ссылка);
КонецЦикла;

 

ОГЛАВЛЕНИЕ

Мифодий