Что такое справочник в 1с
Учебник
Форум
Назначение справочников
Справочник является списком возможных значений того или иного реквизита. Справочники используются в тех случаях, когда необходимо исключить неоднозначный ввод информации. Например, для того, чтобы покупатель, продавец, кладовщик, директор понимали, о каком товаре идет речь, каждый должен называть его одинаково. И в этом случае необходим справочник. Обычно в торговом предприятии он имеет вид прайс-листа, а если такой справочник хранится в компьютере, то в него заносят всю возможную номенклатуру товаров, с которыми работает торговая фирма.
Система 1С:Предприятие позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: сотрудников, организаций, товаров и т. д. Каждый такой объект называется элементом справочника.
С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его «поведения».
Атрибуты справочников
В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.
Помимо кода и наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике может быть создан список реквизитов. Используя механизм реквизитов справочника, легко организовать, например, картотеку сотрудников. Например, справочник Сотрудники почти наверняка будет иметь атрибуты Должность, Оклад и другие. Фирма 1С предвосхитила программистов и ввела во все справочники два уже заданных атрибута: Код и Наименование. Действительно, практически любой объект из реальной жизни содержит эти атрибуты. Например, для сотрудников кодом выступает табельный номер, а наименованием — фамилия, имя, отчество (ФИО).
Типы данных
Для каждого атрибута справочника нужно указать его тип данных, например, «число«, «строка«, «дата» (в версии 8.0 есть еще тип Булево — Истина или Ложь). Это базовые типы, но можно указать и сложные типы данных. Например атрибут Должность имеет тип данных Должности. В этом случае, значения этого атрибута будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения атрибутов одного справочника выбираются из другого справочника.
Справочник Сотрудники
Справочник Должности
Наименование
Должность
Наименование
Иерархические справочники
Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Подчиненные справочники
Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь «один-ко-многим». В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник НалоговыеЛьготы. Тогда его можно сделать подчиненным справочнику Сотрудники. Это означает, что «Сотрудник владеет налоговыми льготами».
Справочник Сотрудники
Справочник НалоговыеЛьготы
- Иванов Иванов Иванов
- Петров Петр Петрович
- Светлов Михаил Петрович
- Цветков Антон Васильевич
( владелец Петров Петр Петрович)
( владелец Светлов Михаил Петрович)
Табличные части (только версия 8.0)
В версии 8.0 появилась возможность для элемента справочника иметь несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для которых рекомендуется завести подчиненный справочник). Например, для спр. Товары может быть заведена табличная часть ЕдиницыИзмерения, для справочника Сотрудники могут быть заведены табличные части Образование и СоставСемьи. Работа с табличными частями похожа на работу с подчиненными справочниками за исключением того, что табличные части не могут быть типами, а значит уже будет нельзя создать реквизит типа Образование.
Сравнение справочников с другими объектами
Объект
Сходства
Различия
Основы программирования
Ссылка на справочник
Для работы со справочником из какого-нибудь модуля требуется сначала создать ссылку на этот справочник.
Создание и запись нового элемента
НовЭл = СпрСотр.СоздатьЭлемент();
НовЭл.Наименование = «Иванов Иван Иванович»;
НовЭл.Оклад = 5000;
НовЭл.Записать();
Поиск элемента справочника
//например, в приказе об увольнении
СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»);
СпрСотр.НайтиПоРеквизиту(«Оклад», 5000);
//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»)=1 Тогда
. НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;
//в версии 8.0 если элемент найден, то он возвращается, иначе возвращается Неопределено
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»);
НайденныйСотр СпрСотр.НайтиПоРеквизиту(«Оклад», 5000);
//далее нужно проверить найденное значение
НайденныйСотр = СпрСотр.НайтиПоНаименованию(«Иванов Иван Иванович»);
Если НайденныйСотр = Неопределено Тогда
. //элемент не найден
КонецЕсли;
Удаление элемента справочника
СпрСотр.Удалить(1); //непосредственное удаление
СпрСотр.Удалить(0); //пометка на удаление
СпрСотр.СнятьПометкуУдаления();
//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 — если помечен, 0 — если нет
Пометка = СпрСотр.ПометкаУдаления(); //обратите внимание: это метод
СпрСотр.Удалить(); //непосредственное удаление
СпрСотр.УстановитьПометкуУдаления (Истина); // пометка на удаление
СпрСотр.УстановитьПометкуУдаления (Ложь); //снять пометку на удаление
//можно проверить, помечен ли элемент на удаление
//есть свойство ПометкаУдаления, оно имеет тип Булево — Истина или Ложь
Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
. //элемент помечен на удаление
КонецЕсли;
Перебор элементов справочника
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент() = 1 Цикл
. //действия с очередным элементом
. Сообщить(«Сотрудник » + СпрСотр.Наименование);
КонецЦикла;
выборка = Справочники.Сотрудники.Выбрать();
Пока выборка.Следующий() = 1 Цикл
. //действия с очередным элементом
. Сообщить(«Сотрудник » + выборка.Наименование);
КонецЦикла;
Родитель
Перебор элементов внутри группы. Группа в терминах 1С — это «родитель».
СпрСотр.НайтиПоНаименованию(«Работающие»);
Работающие = СпрСотр.ТекущийЭлемент();
СпрСотр.ИспользоватьРодителя(Работающие);
//дальше, например, цикл по сотрудникам (см. выше)
.
СпрСотр = Справочники.Сотрудники;
ГруппаРаботающие = СпрСотр.НайтиПоНаименованию(«Работающие»);
выборка = СпрСотр.Выбрать(ГруппаРаботающие);
Пока выборка.Следующий() = 1 Цикл
. //действия с очередным элементом
. Сообщить(«Сотрудник » + выборка.Наименование);
КонецЦикла;
Владелец
Перебор элементов справочника принадлежащих элементу другого справочника.
Один справочник подчинен другому справочнику, например спр. НалоговыеЛьготы подчинен спр. Сотрудники.
СпрНЛ = СоздатьОбъект(«Справочник.НалоговыеЛьготы»);
СпрНЛ.ИспользоватьВладельца(Сотрудник);
//дальше, например, цикл по льготам этого сотрудника (см. выше)
.
выборка = Справочники.НалоговыеЛьготы.Выбрать( ,Сотрудник);
Пока выборка.Следующий() = 1 Цикл
. //действия с очередным элементом
. Сообщить(«льгота » + выборка.Наименование);
КонецЦикла;
Периодические реквизиты
Чтение и запись периодических реквизитов.
Установка даты выборки периодических реквизитов для всего справочника.
//так мы узнаем, какая была у сотрудника
//категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);
//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);
//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);
//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;
В версии 8.0 нет периодических реквизитов. Вместо них необхидом использовать регистры сведений, развернутые во времени.
Экранные формы справочников
Форма списка справочника
Для удобства работы пользователей со справочником на этапе конфигурирования можно создать несколько видов экранных форм для показа справочника. В зависимости от контекста вызова справочника можно задать использование определенного диалога для работы с ним.
Лучше один раз увидеть, чем сто раз услышать, поэтому ниже для примера приведена форма списка справочника Сотрудники:
Модуль формы списка содержит процедуры и функции, которые действуют в контексте данной формы (в контексте объекта Справочник).
Предопределенные процедуры вызываются системой 1С при наступлении определенных событий. Предопределенные процедуры вызываются системой 1С при наступлении определенных событий, поэтому они являются обработчиками событий. В версии 8.0 имя процедуры может быть любое, необязательно совпадающее с именем события. Кроме того, в версии 8.0 список событий для всех объектов был значительно расширен.
Событие
Описание
Вызывается при записи элемента справочника, если элементы вводятся прямо в форме списка, а не в форме элемента. Это используется для справочников с простой структурой, например справочник Должности. В этой процедуре можно проверить вводимые данные на наличие ошибок.
Пример, справочник Должности
Процедура ПриЗаписи()
. Если СокрЛП(Наименование)=»» Тогда
. Предупреждение(«Не указано название должности!»,30);
. СтатусВозврата(0);
. КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
. Если СокрЛП(Наименование)=»» Тогда
. Предупреждение(«Не указано название должности!»,30);
. Отказ = Истина;
. КонецЕсли;
КонецПроцедуры
В форме списка справочника элементы могут быть отсортированы в различном порядке: по коду, по наименованию или по любому реквизиту, у которого в Конфигураторе установлен флажок Сортировка. Задать тип сортировки можно программно методом Сортировка (Способ, ФлагРазрешенияИзменения)
Процедура ПриОткрытии()
. Сортировка(«Код»,0); //сортировка по коду, пользователь изменить не может
КонецПроцедуры
Процедура ПриОткрытии()
. СправочникСписок.Порядок.Установить(«Наименование Asc, Карточка Asc»);
. //вопрос читателям: как запретить пользователю изменять порядок сортировки?
КонецПроцедуры
В форме списка справочника элементы могут быть отфильтрованы, т.е. пользователю будут показаны только нужные элементы. Программно установить отбор можно методом УстановитьОтбор (Реквизит, Значение). Для этого у реквизита должен быть установлен флажок «Отбор по реквизиту» в Конфигураторе .
Процедура ПриОткрытии()
. УстановитьОтбор(«Год»,1980);
КонецПроцедуры
Процедура ПриОткрытии()
. СправочникСписок.Отбор.Карточка.Установить(Год,1980);
. //вопрос читателям: как запретить пользователю изменять условия отбора?
КонецПроцедуры
Статический фильтр (только версия 7.7)
В 1С 7.7 нельзя установить отбор по периодическому реквизиту или по нескольким реквизитам одновременно (сложный фильтр). В этом случае выходом из положения может быть метод ИспользоватьСписокЭлементов. Этому методу нужно передать список элементов, которые должны быть показаны. Предварительно этот список нужно сформировать.
СписокЭлементов = создатьОбъект(«СписокЗначений»);
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
. Если (СпрСотр.Родитель = группаРаботающие) И (СпрСотр.Должность=длжПлотник) Тогда
. СписокЭлементов.ДобавитьЗначение(СпрСотр.ТекущийЭлемент());
. КонецЕсли;
КонецЦикла;
ИспользоватьСписокЭлементов(СписокЭлементов);
Форма элемента и форма группы
Если справочник имеет сложную структуру, тогда его элементы удобнее редактировать в отдельном окне, а не в списке. Ниже приведена форма элемента справочника Сотрудники.
В форме элемента справочника также есть предопределенные процедуры (события):
События
Описание
Вызывается при записи элемента справочника. В этой процедуре можно проверить вводимые данные на наличие ошибок.
Пример, справочник Сотрудники
Процедура ПриЗаписи
. Если Категория.Выбран()=0 Тогда
. Предупреждение(«Не указана категория сотрудника!»);
. СтатусВозврата(0);
. КонецЕсли;
КонецПроцедуры
Следует заметить, что вверсии 8.0 список событий всех объектов значительно расширен.
Создание и запись элемента
Программное создание элемента справочника
Ниже в справочник Сотрудники программно добавляется новый сотрудник в группу Работающие. В справочнике заполняется поля Наименование, ДатаПриема и пара периодических реквизитов.
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.Новый();
СпрСотр.Наименование = «Иванов Иван Иванович»;
СпрСотр.ДатаПриема = ‘01.01.2002’;
СпрСотр.Записать();
//установка периодических реквизитов возможна только после записи элемента
СпрСотр.Категория.Установить (СпрСотр.ДатаПриема, ктгСовместители);
СпрСотр.Должность.Установить (СпрСотр.ДатаПриема, длжПлотник);
а можно сделать красивее:
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(ДатаПриема); //внимание!
СпрСотр.Новый();
СпрСотр.Наименование = «Иванов Иван Иванович»;
СпрСотр.ДатаПриема = ‘01.01.2002’;
//доступ к периодическим реквизитам становится такой же, как к обычным
СпрСотр.Категория = ктгСовместители;
СпрСотр.Должность = длжПлотник;
СпрСотр.Записать();
Нов = Справочники.Сотрудники.СоздатьЭлемент();
Нов.Родитель = грпРаботающие;
Нов.Наименование = «Иванов Иван Иванович»;
Нов.ДатаПриема = ‘01.01.2002’;
Нов.Записать();
//в версии 8.0 нет периодических реквизитов
Программное создание групп
СпрСотр.НоваяГруппа();
СпрСотр.Наименование = «Работающие»;
СпрСотр.Записать();
СпрСотр.НоваяГруппа();
СпрСотр.Наименование = «Уволенные»;
СпрСотр.Записать();
Нов = Справочники.Сотрудники.СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать();
Нов = Справочники[«Сотрудники»].СоздатьГруппу();
Нов.Наименование = «Работающие»;
Нов.Записать();
Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.
При создании множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное создание всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время выполнения транзакции справочник блокируется.
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
НачатьТранзакцию();
Для Ном = 1 По 100 Цикл
. СпрСотр.Новый();
. СпрСотр.Наименование = «Новый » + Строка(Ном);
. СпрСотр.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
СпрСотр = Справочники.Сотрудники;
НачатьТранзакцию();
Для Ном = 1 По 100 Цикл
. Нов = СпрСотр.СоздатьЭлемент();
. Нов.Наименование = «Новый » + Строка(Ном);
. Нов.Записать();
КонецЦикла;
ЗафиксироватьТранзакцию();
Перебор элементов
Простой перебор
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
Режим = 0; //выбирать без учета иерархии, 1 — с учетом (по умолч.)
СпрСотр.ВыбратьЭлементы(Режим);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.
КонецЦикла;
Фильтрация (отбор)
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
РежимИерархии = 1; //1- выбирать с учетом иерархии, 0 — без учета
РежимГрупп = 0; //0 — не включать в выборку группы, 1 — включать
ИмяРеквизита = «Год»; //в Конфигураторе у реквизита должен быть установлен флажок Отбор
Значение = 1980;
СпрСотр.ВыбратьЭлементыПоРеквизиту(ИмяРеквизита,Значение,РежимИерархии, РежимГрупп);
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
.
КонецЦикла;
Фильтрация в цикле
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
Если СпрСотр.Должность <> длжПлотник Тогда
. Продолжить; //этого сотрудника пропускаем, перейти в начало цикла
КонецЕсли;
Порядок сортировки
Перед выборкой можно задать порядок сортировки следующими методами:
ПорядокКодов()
ПорядокНаименований()
ПорядокРеквизита(ИмяРекв) //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ОбратныйПорядок()
Например, ниже открывается выборка сотрудников, отсортированных по номерам по убыванию:
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ПорядокКодов();
СпрСотр.ОбратныйПорядок();
СпрСотр.ВыбратьЭлементы();
Запрос к справочнику
Перебор элементов справочника можно организовать через Запрос. Часто это бывает удобнее, если применяется сложное условие отбора или группировка элементов. Подробнее см. Запросы
Поиск элемента
Поиск элемента
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
Если СпрСотр.НайтиЭлемент(ВыбрСотр)=1 Тогда
. //элемент становится текущим
. СпрСотр.Родитель = грпРаботающие;
. СпрСотр.Записать();
КонецЕсли;
Поиск по коду
Если СпрСотр.НайтиПоКоду(1) = 1 Тогда
. ЭлементИлиГруппа = СпрСотр.ТекущийЭлемент();
КонецЕсли;
Поиск по наименованию
Если СпрСотр.НайтиПоНаименованию(«Работающие»)=1 Тогда
. грпРаботающие = СпрСотр.ТекущийЭлемент();
КонецЕсли;
Режим = 1; // 1 — поиск внутри установленного подчинения (родителя) (по умолч.); 0 — поиск во всем справочнике
ФлагПоиска = 0; //1 — найти точное соответствие; 0 — найти наименование по первым символам (по умолч)
СпрСотр.ИспользоватьРодителя(грпРаботающие);
Если СпрСотр.НайтиПоНаименованию(«Ив»,Режим,ФлагПоиска)=1 Тогда
. ПервыйРаботающийИв = СпрСотр.ТекущийЭлемент();
КонецЕсли;
Поиск по реквизиту
ИмяРекв = «Год»; //у реквизита должен быть установлен флажок Сортировка в Конфигураторе
ФлагГлобПоиска = 1; // 1- искать во всем справочнике, 0 — искать в пределах подчинения
Если СпрСотр.НайтиПоРеквизиту(ИмяРекв,1980,ФлагГлобПоиска)=1 Тогда
. НайденныйЭлемент = СпрСотр.ТекущийЭлемент();
КонецЕсли;
Поиск элемента в цикле
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.ИспользоватьДату(РабочаяДата());
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
Если СпрСотр.Должность = длжПлотник Тогда
. Прервать; //нашли работающего плотника! выйти из цикла
КонецЕсли;
Запрос к справочнику
Поиск элемента справочника можно организовать через Запрос. Часто это бывает удобнее, если применяется сложное условие отбора. Подробнее см. Запросы
Удаление элементов
Непосредственное удаление
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.НайтиЭлемент(ВыбрСотрудник);
СпрСотр.Удалить(); //непосредственное удаление
Внимание! Если вы производите непосредственное удаление элемента, то следите, чтобы на него не было ссылок в других объектах. Например, удаляемый сотрудник может использоваться в документе Отпуск. При его удалении ссылочная целостность базы данных будет нарушена. В этом случае рекомендуется пользоваться пометкой на удаление.
Можно программно получить список объектов, содержащих ссылку на удаляемый объект методом НайтиСсылки(объект).
Пометка на удаление
Для контроля ссылочной целостности базы данных удаляемые элементы всего лишь помечаются на удаление. Затем специальной командой меню Операции => «Удаление помеченных объектов» в монопольном режиме система 1С проконтролирует ссылочную целостность и физически удалит элементы из базы данных, если на них нет ссылок в других объектах.
СпрСотр = СоздатьОбъект («Справочник.Сотрудники»);
СпрСотр. НайтиЭлемент (ВыбрСотрудник);
СпрСотр. Удалить (0); //пометка на удаление
//можно проверить, помечен ли элемент на удаление
//функция возвращает 1 — если помечен, 0 — если нет
Пометка = СпрСотр. ПометкаУдаления ();
//можно снять пометку на удаление
СпрСотр. НайтиЭлемент (ВыбрСотрудник);
СпрСотр. СнятьПометкуУдаления ();
При удалении множества элементов справочника для ускорения работы можно заключить цикл в транзакцию. При этом реальное удаление (пометка на удаление) всех элементов произойдет только по команде ЗафиксироватьТранзакцию(). На время транзакции справочник блокируется.
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
НачатьТранзакцию();
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()=1 Цикл
. СпрСотр.Удалить(0); //пометка на удаление
КонецЦикла;
ЗафиксироватьТранзакцию();
Иерархические справочники
Список элементов справочника в системе 1С:Предприятие может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Возможное количество уровней вложенности справочника задается в Конфигураторе.
Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Внимание! Иерархический справочник — это также многоуровневый справочник, или справочник с группами.
Группа справочника в 1С часто называется «родитель«.
Программное создание группы
СпрСотр.НоваяГруппа();
СпрСотр.Наименование = «Работающие»;
СпрСотр.Записать();
СпрСотр.НоваяГруппа();
СпрСотр.Наименование = «Уволенные»;
СпрСотр.Записать();
Внимание! В Конфигураторе можно задать для реквизита то, что он действителен только для элемента, только для группы или для обоих. Например, поле ДатаПриема не имеет смысла для группы Работающие. Поэтому не стоит обращаться к реквизитам элементов, если вы работаете с группой и наоборот.
Установка текущей группы
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие); //теперь мы внутри группы Работающие
СпрСотр.ВыбратьЭлементы(); //открыть выборку элементов группы Работающие
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ИспользоватьРодителя(грпРаботающие);
СпрСотр.Новый(); //создание нового элемента в группе Работающие
Информация о текущем элементе
Если справочник многоуровневый, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:
Метод / атрибут
Описание
Этот метод возвращает уровень текущего элемента. Например, для сотрудника, который находится в группе Работающие, мы получим число 2.
Пример, вывод иерархического справочника в виде дерева:
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлементы()=1 Цикл
//вывести отступ в соответствии с глубиной вложенности элемента
Для Ном=1 По СпрСотр.Уровень() Цикл
. Сообщить(«. «);
КонецЦикла;
Сообщить(СпрСотр.Наименование);
Пример, вывод сотрудников (группы не выводятся):
СпрСотр = СоздатьОбъект(«Справочник.Сотрудники»);
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлементы()=1 Цикл
Если СпрСотр.ЭтоГруппа()=1 Тогда
. Продолжить; //группы пропускаем, перейти в начало цикла
КонецЕсли;
Сообщить(СпрСотр.Наименование);
Пример, вывод товаров, принадлежащих к группе Спиртное, независимо от того входят ли они в подгруппы Шампанское, Пиво, Водка, Вино и т.д.:
СпрТовары = СоздатьОбъект(«Справочник.Товары»);
СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлементы()=1 Цикл
Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда
. Сообщить(СпрТовары.Наименование);
КонецЕсли;
Этот атрибут содержит родителя текущего элемента справочника, т.е. группу, в которой находится текущий элемент. Доступен для чтения и записи.
Пример, перенос всех товаров из группы Спиртное в группу Распродажа:
СпрТовары = СоздатьОбъект(«Справочник.Товары»);
СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлементы()=1 Цикл
Если СпрТовары.ПринадлежитГруппе(грпСпиртное)=1 Тогда
. СпрСотр.Родитель = грпРаспродажа;
. СпрСотр.Записать();
КонецЕсли;
А можно сделать красивее и перенести всю группу Спиртное в группу Распродажа, тогда все подгруппы и элементы также перенесутся в группу Распродажа.
СпрТовары = СоздатьОбъект(«Справочник.Товары»);
СпрТовары.НайтиЭлемент(грпСпиртное);
СпрТовары.Родитель = грпРаспродажа;
СпрТовары.Записать();
Возвращает строку, содержащую полный код выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом «/».
Возвращает строку, содержащую полное наименование выбранного элемента справочника со всеми вышестоящими уровнями, разделенными символом «/».
Возможность выбора группы в реквизите диалога
Часто бывает удобно для реквизитов на форме, имеющих тип Справочник, отключить возможность выбора группы. Тогда в данное поле может быть выбран только элемент и не может быть выбрана группа. В общем, проще один раз попробовать, чем несколько раз объяснять.
Форма.ВыбрСотрудник.ВыборГруппы(0); //отключить возможность выбора группы
Подчиненные справочники
Справочник-владелец, это также справочник-хозяин.
Справочник-владелец и подчиненный справочник также называются связанными справочниками.
В терминах реляционных баз данных справочник-владелец — это родительская таблица, подчиненный справочник — это дочерняя таблица.
Назначение подчиненных справочников
Любой справочник может использоваться как сам по себе, так и быть подчиненным какому-либо другому справочнику. Например, справочник договоров может использоваться отдельно, а может быть связан со справочником организаций.
Чтобы подчинить справочник какому-либо из справочников, уже существующих в системе, в поле «Подчинен» следует выбрать наименование этого справочника. Такой справочник в системе 1С:Предприятие называется владельцем.
В отличие от многоуровневого справочника, в котором все элементы имеют одинаковую структуру, использование механизма подчиненных справочников позволяет связать элементы разной структуры. В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца.
Внешне работа с подчиненным справочником в системе 1С:Предприятие будет выглядеть следующим образом.
Если для подчиненного справочника установлен режим показа в виде иерархического списка, то перед использованием справочника сначала должен быть выбран элемент справочника-владельца. При показе на экране подчиненный справочник будет содержать в своем заголовке наименование элемента-владельца, а список элементов подчиненного справочника будет содержать только элементы, относящие к элементу-владельцу. При смене элемента-владельца информация в окне подчиненного справочника будет соответствующим образом обновлена.
Если открыть подчиненный справочник, не выбрав элемент-владелец, то в окне подчиненного справочника не будет отображаться ни одного элемента, а в заголовке окна будет выдано сообщение «Не задан элемент-владелец».
При работе с системой 1С:Преднриятие для подчиненного справочника может быть отключен показ в виде иерархического списка. В этом случае в окне подчиненного справочника будут отображаться все элементы этого справочника, то есть элементы, починенные разным владельцам, будут показываться вперемешку. Тем не менее, любой элемент подчиненного справочника «знает» своего владельца: если для справочника включен режим «Редактировать в диалоге» (см. ниже п. «Создание форм справочника»), наименование элемента-владельца будет выдаваться в заголовке окна редактирования элемента справочника.
Установка текущего владельца
СпрДоговоры = СоздатьОбъект(«Справочник.Договоры»);
СпрДоговоры.ИспользоватьВладельца(ВыбрКонтрагент);
СпрДоговоры.ВыбратьЭлементы(); //открываем выборку по договорам выбранного контрагента
Информация о текущем элементе
Если справочник подчиненный, то будет полезным применение следующих методов и атрибутов, которые позволяют получить информацию о текущем элементе справочника:
Атрибут
Описание
Этот атрибут содержит владельца текущего элемента подчиненного справочника, т.е. элемент справочника-хозяина, к которому относится данный элемент. Атрибут доступен для чтения и записи.
Пример, перенос всех договоров от одного котрагента к другому (справочник Договоры подчинен справочнику Контрагенты):
СпрДоговоры = СоздатьОбъект(«Справочник.Договоры»);
СпрДоговоры.ИспользоватьВладельца(Контрагент1);
СпрДоговоры.ВыбратьЭлементы();
Пока СпрДоговоры.ПолучитьЭлементы()=1 Цикл
СпрДоговоры.Владелец = Контрагент2;
СпрДоговоры.Записать();
Периодические реквизиты
Включение опции «Периодический» позволяет указать для реквизита справочника хранение истории изменений его значения. Такой реквизит в системе 1С:Предприятие называется периодическим и обладает следующим свойством: в отличие от «обычных» (не периодических) реквизитов, система 1С:Предприятие хранит значения такого реквизита по датам их изменения. При обращении к значению такого реквизита на некоторую дату выдается его значение на эту дату, либо, если таковое отсутствует, — на ближайшую предыдущую дату, на которую устанавливалось значение реквизита.
Подобное свойство реквизита справочника позволяет, например, легко организовать хранение истории изменения курсов в справочнике валют.
К периодическому реквизиту можно обращаться при помощи встроенного языка системы 1С:Предприятие — получать и записывать значение реквизита на указываемую дату. Однако, следует иметь в виду, что при получении значения реквизита на какую-то дату извлекается его значение на указанную или (если значение на указанную дату отсутствует) на ближайшую предыдущую дату, а запись значения периодического реквизита выполняется всегда на указанную дату.
В режиме использования конфигурации для периодического реквизита можно вызвать окно «История». Это окно представляет собой таблицу, состоящую из двух граф: дата изменения значения реквизита справочника и значение на эту дату. Окно «История» позволяет редактировать историю изменений значения реквизита напрямую: вводить новые строки, редактировать или удалять существующие.
Методы периодических реквизитов
//так мы узнаем, какая была у сотрудника категория на определенную дату
Катег = СпрСотр.Категория. Получить (НекаяДата);
//так мы установим сотруднику категорию на определенную дату
СпрСотр.Категория. Установить (НекаяДата, НоваяКатегория);
Внимание! Эти методы можно применять, если ранее не применялся метод ИспользоватьДату
Установка даты выборки периодических реквизитов
//можно установить дату выборки периодических реквизитов для всего справочника
СпрСотр. ИспользоватьДату (НекаяДата);
//тогда ниже уже нельзя использовать методы Установить и Получить
//доступ к периодическим реквизитам становится такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;
Объект «Периодический»
Для работы с историей периодического реквизита очень удобно использовать объект «Периодический».
Пример, вывести историю карьеры сотрудника за текущий год:
ИсторияКарьеры = СоздатьОбъект(«Периодический»);
ИсторияКарьеры.ИспользоватьОбъект(«Должность»,ВыбрСотрудник);
ИсторияКарьеры.ВыбратьЗначения(НачГода(РабочаяДата(),КонГода(РабочаяДата()));
Пока ИсторияКарьеры.ПолучитьЗначение()=1 Цикл
. Сообщить(Строка(ИсторияКарьеры.ДатаЗнач) + » » + Строка(ИсторияКарьеры.Значение));
КонецЦикла;
С помощью объекта Периодический можно также редактировать и удалять значения. Полный список методов см. в Синтакс-помощнике.
Проведение документов
При проведении документа часто требуется установить новое значение периодического реквизита на определенную дату. Это называется движение документа. В этом случае следует применять метод УстановитьРеквизитСправочника:
УстановитьРеквизитСправочника(Сотрудник, «Должность», НоваяДолжность, ДатаПеремещения);
Если документ имеет табличную часть и вы хотите, чтобы движения документа были привязаны к номеру строки документа, тогда следует применять метод ПривязыватьСтроку.
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 ЦиклПривязыватьСтроку(НомерСтроки);
УстановитьРеквизитСправочника(Сотрудник, «Должность», НоваяДолжность, ДатаПеремещения);
Подбор из справочника
Функция подбора позволяет выбирать несколько значений из справочника или другого объекта, не закрывая его. Например, есть документ РасходнаяНакладная, в котором пользователь может указать несколько товаров.
Организация подбора
Процедура ОбработкаПодбора(Элемент,КонтФормы)
. НоваяСтрока();
. Товар = Элемент;
КонецПроцедуры
Можно воспользоваться контекстом формы и сразу перейти в нужную группу, например:
Процедура ОбработкаПодбора(Элемент,КонтФормы)
. НоваяСтрока();
. Товар = Элемент;
КонецПроцедуры
Установка и получение значений из подбора
КонтФормыПодбора.УстановитьЗначениеВПодборе(,)
— строка с именем реквизита формы подбора значения;
— значение реквизита.
КонтФормыПодбора.ПолучитьЗначениеИзПодбора()
— строковое выражение, значение которого вычисляется в контексте формы подбора и возвращается в качестве результата.
Другие полезные методы
Описание
Возвращает 1 — если элемент справочника выбран, 0 — если не выбран. Часто применяется для проверки на ошибки, чтобы все необходимые данные были указаны.
Чтение структуры справочников
Цикл по справочникам
КолвоСправочниковВКонфигурации = Метаданные.Справочник();
Для Ном=1 to КолвоСправочниковВКонфигурации Цикл
кфгСпр = Метаданные.Справочник(Ном);
Идентификатор = кфгСпр.Идентификатор();
ПолныйИдентификатор = кфгСпр.ПолныйИдентификатор();
Синоним = кфгСпр.Синоним();
Комментарий = кфгСпр.Комментарий();
КоличествоУроней = кфгСпр.КоличествоУроней();
ПодчиненЛи = кфгСпр.Владелец().Выбран();
Владелец = кфгСпр.Владелец();
ИдентификаторВладельца = кфгСпр.Владелец().Идентификатор;
.
т.е. если вызвать метод Метаданные.Справочник() без параметров, то он вернет общее количество справочников в конфигурации. Если передать ему в качестве параметра номер или название справочника, то он вернет справочник как объект конфигурации.
Цикл по реквизитам справочника
КолвоРеквизитов = кфгСпрСотр.Реквизит();
Для Ном=1 to КолвоРеквизитов Цикл
кфгРекв = кфгСпрСотр.Реквизит(Ном);
Идентификатор = кфгРекв.Идентификатор();
ПолныйИдентификатор = кфгРекв.ПолныйИдентификатор();
Синоним = кфгРекв.Синоним();
Комментарий = кфгРекв.Комментарий();
Тип = кфгРекв.Тип(); //»Строка», «Число», «Справочник»
Вид = кфгРекв.Вид(); //напр. «Сотрудники»
Длина = кфгРекв.Длина();
Точность = кфгРекв.Точность();
Периодический = кфгРекв.Периодический();
.
т.е. если вызвать метод Метаданные.Справочник(Х).Реквизит() без параметров, то он вернет общее количество реквизитов справочника Х в конфигурации. Если передать ему в качестве параметра номер или название реквизита, то он вернет реквизит справочника как объект конфигурации.
Обращение к атрибутам по имени
При работе с метаданными часто применяются следующие методы:
Описание
Что можно скачать
Так как работа с метаданными плохо документирована самой фирмой 1С, то рекомендуется скачать следующий файл, который является файлом для Синтакс-помощника. В нем содержится описание работы с некоторыми методами объекта Метаданные.
Распакуйте и поместите als-файл в каталог Program Files\1cv77\BIN и он будет подключен к Синтакс-помощнику.
Справочники в 1С
Справочники в 1С используются для работы с постоянной или условно постоянной информацией, но, в отличие от констант, данная информация может содержать множество значений. К примеру, если мы разрабатываем конфигурацию для учета движения товаров на складе, то такой информацией может быть вид товара, информация о самих товарах, информация о складах и т.п. Таким образом, справочники необходимы для хранения аналитики учета (то, по чему в дальнейшем будет осуществляться анализ, например, сколько товаров продано). В пользовательском режиме работа осуществляется с элементами справочника. Именно элементы справочника и являются объектами аналитики (именно они и будут анализироваться). Например, у справочника Товары могут быть элементы «Гвозди», «Хлеб» и «Молоко».
Элементы справочника создают операторы в пользовательском режиме 1С. В дальнейшей своей работе они могу использовать тот или иной созданный ранее элемент справочника. Например, элементы справочника Товары могут использоваться в отображении прихода или расхода товара в соответствующих документах.
По умолчанию у любого справочника имеется два реквизита — это Код и Наименование. Это так называемые стандартные реквизиты. Наименование обычно заполняет оператор, а код заполняется автоматически. Иногда стандартных реквизитов Код и Наименование бывает достаточно для работы, но чаще всего прикладная задача требует хранения вспомогательной информации. Для этого создаются реквизиты справочника, позволяющие хранить любую дополнительную информацию об элементе справочника.
Применительно к товарам это может быть артикул, полное наименование, наименование для продажи, вид товара и т.п. Еще новая возможность справочников (в 1С 7.7. этого нет) — это возможность создавать табличные части, в которых хранится однотипная информация, количество которой может быть изменчивым. Например, для товара это могут быть какие-то дополнительные свойства.
Реквизитов и табличных частей может быть неограниченное количество.
Создать новый справочник в 1С достаточно просто. Для этого необходимо зайти в конфигуратор 1С, открыть окно конфигурации, выделить ветвь Справочники, вызвать правой кнопкой мышки контекстное меню, где выполнить команду Добавить.
После этого откроется конструктор справочника, где на закладке «Основные» необходимо ввести имя справочника.
На закладке Данные можно задать длину кода и наименования, тип кода (число или строка) и основное представление элемента справочника (в виде кода или в виде строки).
А также можно создать необходимые реквизиты и табличные части.
В отличие от наименования, код может элементу справочника присваиваться автоматически, если установлен флаг Автонумерация на закладке нумерация.
Реквизиты справочников 1С
Реквизиты справочников 1С создаются на закладке Данные в окне реквизитов.
В качестве реквизитов справочника могут выступать, как примитивные типы, так и ссылочные. Например, мы уже создали справочник ВидыТоваров, а сейчас создадим справочник Товары, где будут реквизиты Артикул (тип Строка) и ВидТовара (ссылка на справочник ВидыТоваров).
В режиме «1С: Предприятия» это будет выглядеть следующим образом.
Обращаю внимание, на что влияет свойство «Основное представление» (закладка Данные конструктора справочника). Если у нас основное представление в виде наименования, то представление элемента справочника в каком-либо реквизите будет в виде наименование этого элемента, как на рисунке представлен элемент справочника ВидыТоваров в реквизите справочника Товары. А если основное представление в виде кода, то тогда представление этого элемента будет в виде кода элемента.
Табличные части справочников 1С
Табличные части создаются на закладке «Данные» в конструкторе справочника.
Можно создавать неограниченное количество табличных частей.
Сделаем справочник Комплектация, у которого будет табличная часть Состав.
У табличной части может быть неограниченное количество реквизитов. Для того, чтобы создать реквизит табличной части, её необходимо выделить и нажать на кнопку «Добавить реквизит».
Реквизиты табличной части могут быть как примитивных типов, так и ссылочных.
Подчиненные справочники 1С
В конфигурации 1С 8.3 можно разрабатывать Подчиненные справочники. В Подчиненном справочнике каждый его элемент имеет владельца, который является элементом или группой другого справочника. Элемент подчиненного справочника не может существовать без владельца.
Сделаем возможность учета единиц измерения. Сначала создадим справочник «Классификатор единиц измерения», в котором будут храниться различные единицы измерения (штуки, килограммы и тд).
У справочника Товары сделаем реквизит основная единица измерения (ссылка на справочник классификатор единиц измерения)
И сделаем справочник, подчиненный справочнику Товары, в котором будут храниться коэффициенты соотношений единиц измерения к основной единице измерения товара. К примеру, основная единица измерения килограмм, но есть еще единица тонна и центнер. Соответственно в первом случае коэффициент будет 1000, а во втором 100.
Создадим справочник ЕдиницыИзмерения.
На закладке Владельцы установим, что владельцем этого справочника является справочник Товары.
И создадим реквизиты: Коэффициент (тип число) и единица измерения (тип ссылка на справочник «Классификатор единиц измерения»).
Вот как это будет выглядеть в режим «1С: Предприятия».
Подробно о подчиненных справочниках читайте в этой статье:
Иерархический справочник 1С
Любой справочник можно сделать Иерархическим – это значит, что пользователь сможет создавать каталоги (или, говоря простым языком, папки), в которых будут содержаться элементы.
Сделаем справочник Товары иерархическим. Для этого переходим на закладку «Иерархия» конструктора справочника и установим флаг «Иерархический».
Иерархия у справочников бывает двух видов: Иерархия групп и элементов и просто Иерархия элементов.
Иерархия групп — это каталоги, которые в себе содержат определенные элементы. А что такое Иерархия элементов? Это когда один элемент подчинен другому.
Посмотрим, как выглядит иерархический справочник в «1С:Предприятии»
Как видите, в форме списка появилось две команды. «Создать» и «Создать группу». При выполнении команды «Создать» будет открыта форма на создание нового элемента, а при выполнении команды «Создать группу» — форма на создание группы (папки).
Вы можете создавать нужные группы, в этих группах создавать элементы, или переносить уже созданные элементы в группы.
Подробно, про иерархический справочник читайте в этой статье:
Что такое предопределенные элементы справочников, и как с ними работать, читайте в этой статье:
Остальные статьи по теме конфигурирования:
Более подробно и основательно работа со справочникам в дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
Справочник 1С — Справочники
Для работы с постоянной и условно постоянной информацией с некоторым множеством значений в системе используются объекты типа «Справочник». Система 1С:Предприятие 8 позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных объектов: должностей, сотрудников, клиентов, товаров и т. д. Каждый такой объект называется элементом справочника.
С точки зрения пользователя, следует иметь в виду, что в Конфигураторе создается не сам справочник, как список значений, а разрабатывается заготовка справочника, его шаблон. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его поведения.
Реквизиты справочника.
В качестве обязательных реквизитов каждый справочник имеет Код и Наименование. Код элемента справочника может быть как числовым, так и текстовым. Система 1С:Предприятие 8 предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.
Помимо Кода и Наименования, в справочниках системы 1С:Предприятие может храниться любая дополнительная информация об элементе справочника. Для хранения такой информации в справочнике могут быть созданы дополнительные реквизиты (поля). Например, справочник Сотрудники почти наверняка будет иметь реквизиты Должность, Оклад, ДатаПриема и другие.
Типы данных.
Для каждого реквизита справочника необходимо задать тип данных, например, «число», «строка», «дата», булево (Истина или Ложь). Это базовые типы, но можно указать и сложные типы данных. Например, реквизит Должность имеет тип данных Должности. В этом случае, значения этого реквизита будут выбираться из справочника Должности. Так реализуется простейшая связь между справочниками, когда значения реквизитов одного справочника выбираются из элементов другого справочника.
Виды справочников.
Иерархические справочники — Список элементов справочника в системе 1С:Предприятие 8 может быть многоуровневым. В этом случае все строки справочника будут разделяться на 2 вида: «просто» элементы справочника и группы справочника. Группы позволяют переходить на нижележащие уровни многоуровневого справочника. Использование многоуровневых справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в многоуровневом справочнике можно переносить из одной группы в другую.
Подчиненные справочники — Между справочниками может быть установлено отношение подчиненности. В терминах реляционных баз данных, между таблицами устанавливается связь «один-ко-многим». В этом случае каждый элемент подчиненного справочника будет связан с одним из элементов справочника-владельца. Иногда можно сказать, что элементы одного справочника принадлежат элементам другого. Например, в системе может быть справочник Договора. Тогда его можно сделать подчиненным справочнику Клиенты. Это означает, что клиент владеет договорами и у одного клиента может быть несколько договоров.
Табличная часть.
В платформе 1С реализована возможность для элемента справочника задавать одну или несколько табличных частей. Эту возможность рекомендуется использовать для отражения информации, связанной с данным элементом, но не имеющей собственной объектной сущности (для которых рекомендуется заводить подчиненные справочники). Например, для справочника Сотрудники могут быть заведены табличные части Образование и СоставСемьи. Работа с табличными частями похожа на работу с подчиненными справочниками за исключением того, что табличные части не могут использоваться в качестве значений реквизитов других объектов.
Примеры работы со справочниками в 1С.
// Ссылка на справочник
СпрСотрудники = Справочники.Сотрудники ; // или
СпрДолжности = Справочники [ «Должности» ];
//Создание и запись нового элемента справочника
НовЭл = Справочники . Сотрудники . СоздатьЭлемент ();
НовЭл . Наименование = «Петров Петр Петрович» ;
НовЭл . Оклад = 5000 ;
НовЭл . Записать ();
//Создание и запись новой группы справочника
Нов = Справочники . Сотрудники . СоздатьГруппу ();
Нов . Наименование = «Работающие» ;
Нов . Записать (); // или
Нов = Справочники [ «Сотрудники» ]. СоздатьГруппу ();
Нов . Наименование = «Работающие» ;
Нов . Записать ();
// Как получить пустую ссылку типа справочник
ПустаяСсылка = Справочники . Валюты . ПустаяСсылка ();
Если ПустаяСсылка . Пустая () Тогда
Сообщить ( «Ссылка пустая.» );
КонецЕсли;
// Поиск элемента справочника, если элемент найден, то он возвращается, иначе возвращается значение Неопределено
СпрСотр = Справочники . Сотрудники ;
НайденныйСотр = СпрСотр . НайтиПоКоду ( 123 ); //ищем по коду
НайденныйСотр = СпрСотр . НайтиПоНаименованию ( «Иванов Иван Иванович» ); //ищем по наименованию
НайденныйСотр = СпрСотр . НайтиПоРеквизиту ( «Оклад» , 5000 ); //ищем по реквизиту
//далее нужно проверить найденное значение
Если НайденныйСотр = Неопределено Тогда
//элемент не найден
Иначе
//элемент найден
КонецЕсли;
//Удаление элемента справочника
СпрСотр = Справочники . Сотрудники;
СпрСотр . Удалить (); //непосредственное удаление текущего элемента справочника
СпрСотр . УстановитьПометкуУдаления (Истина); //пометка на удаление
СпрСотр . УстановитьПометкуУдаления (Ложь); //снять пометку на удаление
//можно проверить, помечен ли элемент на удаление
//свойство ПометкаУдаления имеет тип Булево (Истина или Ложь)
Пометка = СпрСотр . ПометкаУдаления ; //обратите внимание: это свойство
Если Пометка = Истина Тогда
//элемент помечен на удаление
КонецЕсли;
//перебор элементов справочника
Выборка = Справочники . Сотрудники . Выбрать ();
Пока Выборка . Следующий () = 1 Цикл // начало перебора элементов справочника в цикле
//действия с очередным элементом …
Сообщить ( «Сотрудник « + Выборка . Наименование );
КонецЦикла;
//перебор внутри группы (при иерархической структуре), группа в 1С является родителем для элементов внутри
СпрСотр = Справочники . Сотрудники ;
ГруппаРаботающие = СпрСотр . НайтиПоНаименованию ( «Работающие» );
Выборка = СпрСотр . Выбрать ( ГруппаРаботающие );
Пока Выборка.Следующий () = 1 Цикл
//действия с очередным элементом
Сообщить ( «Сотрудник « + Выборка.Наименование );
КонецЦикла;
//выборка элементов справочника, подчиненного другому справочнику
Выборка = Справочники . НалоговыеЛьготы . Выбрать ( , Сотрудник ); //тут сотрудник — ссылка на элемент справочника сотрудники
Пока Выборка . Следующий () = 1 Цикл
//действия с очередным элементом
Сообщить ( «льгота « + Выборка . Наименование );
КонецЦикла;
// Как внести изменения в элемент справочника по ссылке
ОбъектСправочника = СсылкаНаЭлемент . ПолучитьОбъект ();
ОбъектСправочника . Комментарий = «Контрагент изменен.» ;
ОбъектСправочника . Записать ();
// Как узнать принадлежность элемента справочника группе с учетом уровней иерархии
Если СсылкаНаЭлемент . ПринадлежитЭлементу ( СсылкаНаГруппу ) Тогда
Сообщить ( СсылкаНаЭлемент . Наименование + » принадлежит « + СсылкаНаГруппу . Наименование );
КонецЕсли;
// Как скопировать существующий элемент справочника
Копия = СсылкаНаЭлемент . Скопировать ();
Копия . Наименование = Копия . Наименование + » КОПИЯ» ;
Копия . УстановитьНовыйКод ();
Копия . Записать ();
// Как выяснить уровень вложенности элемента справочника
Сообщить ( СсылкаНаЭлемент . Уровень ());
// Примеры работы со справочниками в 1С с помощью языка запросов
// Как обойти все элементы справочника
Запрос = Новый Запрос;
Запрос . Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты» ;
РезультатЗапроса = Запрос . Выполнить ();
ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
СсылкаНаГруппу = Справочники . Контрагенты . ПустаяСсылка ();
СсылкаНаЭлемент = Справочники . Контрагенты . ПустаяСсылка ();
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Если ВыборкаДетальныеЗаписи . Ссылка . ЭтоГруппа Тогда
СсылкаНаГруппу = ВыборкаДетальныеЗаписи . Ссылка ;
Иначе
СсылкаНаЭлемент = ВыборкаДетальныеЗаписи . Ссылка ;
КонецЕсли;
КонецЦикла;
// Как отобрать элементы справочника по родителю (перечислим все элементы группы)
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| Контрагенты.Ссылка
| ИЗ
| Справочник.Контрагенты КАК Контрагенты
| ГДЕ
| Контрагенты.Родитель = &Родитель» ;
Запрос . УстановитьПараметр ( «Родитель» , СсылкаНаГруппу );
РезультатЗапроса = Запрос . Выполнить ();
ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Сообщить ( СсылкаНаГруппу . Наименование + «:» );
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( » « + ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;
// Как отобрать элементы справочника по владельцу (перечислим все договоры контрагента)
Запрос = Новый Запрос ;
Запрос . Текст =
«ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка
| ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
| ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец» ;
Запрос . УстановитьПараметр ( «Владелец» , СсылкаНаЭлемент );
РезультатЗапроса = Запрос . Выполнить ();
ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Сообщить ( СсылкаНаЭлемент . Наименование + «:» );
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( » « + ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;
// Как отобрать элементы справочника по коду, наименованию, реквизиту
Запрос . УстановитьПараметр ( «Наименование» , «руб.» );
Запрос . УстановитьПараметр ( «Код» , «643» );
Запрос . УстановитьПараметр ( «НаименованиеПолное» , «Российский рубль» );
РезультатЗапроса = Запрос . Выполнить ();
ВыборкаДетальныеЗаписи = РезультатЗапроса . Выбрать ();
Пока ВыборкаДетальныеЗаписи . Следующий () Цикл
Сообщить ( ВыборкаДетальныеЗаписи . Ссылка );
КонецЦикла;
Что такое справочник в 1с
В предыдущих уроках мы рассмотрели с Вами, что конфигурация 1С состоит из набора различных объектов 1С. Такие объекты бывают разных видов.
Сегодня мы рассмотрим особенности одного из видов объектов 1С Предприятие – справочников.
Справочники 1С 8.2 предназначены для хранения информации, которая будет использована в других объектах 1С – документах, отчетах. Таким образом учет в 1С ведется в разрезе (по) справочников.
Информация, которая хранится в справочниках называют Нормативно-справочной информацией.
Справочники 1С 8.2 делятся на собственно Справочники и Классификаторы. Под Классификаторами (в разговорах программистов 1С) понимаются справочники, состав которых утвержден государством (а таких куча, например Классификатор стран мира или Классификатор единиц измерения).
Тем не менее это не мешает во множестве компаний такие классификаторы исправлять и дополнять как хочется.
Зачем нужны Справочники 1С
Яркий пример можно сделать на примере товара. Есть некий товар, например «Лопата». Движения этого товара (покупка, поступление на склад, продажа) оформляются определенными документами.
В «жизни» — это бумажные документы, т.к. некие бланки, при заполнении которых каждый просто пишет от руки — Лопата, 20 штук.
В электронной системе, 1С – это электронные документы, где также есть поле товара. Но если каждый оператор будет писать наименование товара от руки, то могут быть опечатки. И тогда купили мы «Лопату», а продали «Лапату». Дополнительно – минус в том, что нам придется это писать множество раз.
Поэтому мы заводим список товаров, в который один раз заводим этот товар. Чтобы указать товар в документах, достаточно выбрать его из готового списка. Дополнительный плюс — когда мы заводим товар в список, мы можем указать какие-либо данные по нему, например «Страна происхождения».
Таким образом справочники в 1С Предприятие – это готовые списки данных, которые нужны для учета – товары, клиенты и прочее. Пользователи могут дополнять и изменять эти списки самостоятельно.
Где расположены Справочники 1С 8.2
В режиме 1С Предприятие пользователь работает с пользовательским интерфейсом, который разработал для него программист. У разных пользователей может быть разный интерфейс. Поэтому каждый конкретный справочник программист мог расположить в совершенно различных меню.
В толстом клиенте, у пользователя с административными правами (Администратор) есть стандартное меню Операции. В этом меню есть пункт «Справочники», через который можно открыть любой справочник.
В тонком клиенте, у администратора тоже есть меню, только называется Все функции. Его работа аналогична пункту Операции.
В режиме 1С Конфигуратор справочники находятся в одноименной ветке Конфигурации, в окне конфигурации. Раскрыв ветку мы можем начать работать с любым справочником (точнее изменять или настраивать его шаблон). Для того, чтобы начать с ним работу нужно кликнуть по нему два раза мышкой.
Как выглядят Справочники 1С
При открытии справочника Вы видите его форму списка. Так как справочник – это список данных, то в этой форме мы его и видим. Список может быть сгруппирован по группам для удобства использования.
Нажав на группу мы проваливаемся в нее. Нажав на элемент – открывается форма элемента справочника. Она состоит из группы полей этого справочника, который предполагается заполнять.
В 1С Предприятие у справочников есть обычно два обязательных поля, по которым один элемент можно отличить от другого. Это код и наименование справочника. Однако программист может отключить наличие этих полей, хотя это делается редко.
Поле Код, которое заполняется обычно автоматически (номера по порядку) обычно по-умолчанию закрыты от редактирования пользователем. Изменить можно вот таким способом (конечно если это разрешено правами).
Справочники 1С 8.2 могут быть связаны между собой (подчиненный справочник 1С). Например, у одного элемента справочника Клиенты может быть несколько подчиненных элементов справочника Договоры с клиентами.
Настройка и разработка Справочников 1С
Создать новый справочник 1С или изменить существующий можно в конфигураторе. Общая методика работы такая же, как с другими объектами 1С, что было рассмотрено в предыдущем уроке.
Основные особенности Справочников 1С, по закладкам:
-
Основные – название справочника 1С 8.2 в конфигураторе (Имя) и для пользователя (Синоним)
Проголосовать за этот пост: