Основная страница

Глава 10-1
Работа со Справочниками


 

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

Например, для того, чтобы покупатель, продавец, кладовщик, директор однозначно понимали, о каком товаре идет речь, каждый должен называть его одинаково, т. е. в соответствии с однажды утвержденным справочником товаров. Обычно в торговом предприятии он имеет вид прайс-листа, а если такой справочник товаров хранится в компьютере, то в него заносят всю возможную номенклатуру товаров, с которыми работает торговая фирма.

Название и структура каждого конкретного справочника определяется при его создании в конфигураторе. У любого справочника существует два обязательных реквизита, которые создаются автоматически — "Код" и "Наименование". Другие реквизиты справочника, которые могут содержать различную дополнительную информацию помимо наименования, определяются в конфигураторе конкретно для каждого создаваемого справочника.

Реквизиты справочников могут быть периодическими или нет (это задается в конфигураторе при создании реквизита). Периодические реквизиты — это реквизиты, значения которых связаны с датой. При изменении значения периодического реквизита старое значение сохраняется, при этом новое значение действует с указанной даты, а старое — до указанной даты. Работа с периодическими реквизитами осуществляется при помощи методов Получить и ИспользоватьДату, а также при помощи специального агрегатного типа данных — Периодический.

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

Контекст работы со справочниками

В синтаксисе языка обращение к атрибутам, а также вызов методов справочников зависит от контекста выполнения программного модуля.

Если конкретный элемент или группа справочника входит (согласно локального контекста) в набор непосредственно доступных модулю значений агрегатных типов данных (см. «Виды программных модулей»), то обращение к атрибуту, вызов метода для этого элемента или группы справочника — просто имя этого атрибута или метода с указанием необходимых параметров.

Пример:

* В форме редактирования элемента справочника «Сотрудники» мы имеем непосредственный доступ к текущему элементу (сотруднику) справочника. Значит, чтобы изменить имя текущего сотрудника, просто укажем:

Наименование = "Сидоров С.С.";

Значение элемента или группы справочника может быть получено из других источников, например как реквизит какого-либо документа. Чтобы получить доступ к атрибуту, вызвать метод такой переменной со значением типа «Справочник», имя этого атрибута, метода (с указанием необходимых параметров) пишется через точку после имени реквизита.

Пример:

* Если в документе значение реквизита "Сотрудники" имеет тип «Справочник», имя сотрудника можно узнать следующим образом:

ИмяСотр = Док.Сотрудники.Наименование;

В других случаях доступ к атрибутам, вызов методов конкретного элемента или группы справочника происходит при помощи переменной со ссылкой на объект типа «Справочник». Объект создается функцией СоздатьОбъект, ссылка на который присваивается переменной. Чтобы вызвать атрибут или метод объекта, имя этого атрибута, метода (с указанием необходимых параметров) пишется через точку после имени переменной.

При создании переменной со ссылкой на объект типа «Справочник» в качестве имени справочника должно выступать полное название конкретного вида справочника, как он объявлен в конфигураторе. Вид справочника записывается через точку после ключевого слова " Справочник", т. е. полное имя справочника записывается следующим образом:

Справочник.Имя_Справочника

где <Имя_Справочника> — название справочника, определенное в конфигураторе.

Англоязычный синоним ключевого слова СправочникReference. Допускается создавать объект неопределенного вида справочника. В этом случае название конкретного вида справочника в параметре вызова функции СоздатьОбъект опускается. Далее для работы с таким объектом ему надо установить вид справочника при помощи метода Вид.

Пример:

Спр1=СоздатьОбъект("Справочник.Товары");

Спр2=СоздатьОбъект("Справочник.Клиенты");

СпрЗ=СоздатьОбъект("Справочник");

СпрЗ.Вид("Валюты");

Замечание. Следует обратить особое внимание, что переменной может быть присвоена ссылка на позиционируемый объект или само значение элемента справочника (например, переменной может быть присвоено значение реквизита документа, который имеет тип «Справочник»). Использование ссылки, созданной при помощи функции СоздатьОбъект существенно отличается от работы непосредственно со значением элемента справочника. Только при работе со ссылкой на позиционируемый объект типа «Справочник» есть возможность изменять позиционирование (найти-выбрать...) текущего элемента справочника (т. е. осуществлять навигацию по справочнику), создавать новые элементы и удалять существующие. С другой стороны, ссылка не содержит собственно значения элемента справочника, которое можно присвоить чему-либо. Однако, его всегда можно получить используя метод ТекущийЭлемент.

Замечание. Объект, созданный при помощи функции СоздатьОбъект, изначально не спозиционирован, т. е. не указывает на конкретный элемент справочника. Чтобы начать с ним работать, его предварительно надо позиционировать при помощи методов НайтиЭлемент, НайтиПоКоду, ПолучитьЭлемент и т. п.

Пример:

*

//В модуле Формы списков Справочника

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

Наименование = "Администрация";

*

// В модуле Формы элемента справочника или

// В модуле Формы группы справочника

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

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

Наименование = "Бухгалтерия";

*

// В других программных модулях

Спр = СоздатьОбъект("Справочник.Товары");

Спр.Новый();

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

Спр.Наименование = "Авто-Элемент";

Спр.Код = 1032;

Спр.Размер = 10045;

Спр.Записать();

Атрибуты справочников

Код

Значение реквизита Код.

Синтаксис:

Код

Англоязычный синоним:

Code

Описание:

Атрибут Код предоставляет доступ к значению обязательного реквизита " Код" выбранного элемента справочника.

Пример:

Спр = СоздатьОбъект("Справочник.Подразделения");

Спр.НайтиПоКоду("29");

Ид = Спр.Код;

Спр.Код = Ид + "5";

Наименование

Значение реквизита Наименование.

Синтаксис:

Наименование

Англоязычный синоним:

Description

Описание:

Атрибут Наименование предоставляет доступ к значению обязательного реквизита "Наименование" выбранного элемента справочника.

Пример:

Спр = СоздатьОбъект("Справочник.Подразделения");

Спр.НайтиПоКоду("29");

Подразделение = Спр.Наименование;

<Реквизит>

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

Синтаксис:

<Реквизит>

Идентификатор реквизита справочника, как он задан в конфигураторе.

Описание:

Атрибут <Реквизит> предоставляет доступ к значению реквизита выбранного элемента справочника. В тексте программного модуля в качестве названия реквизита подставляется идентификатор конкретного реквизита справочника, созданного в конфигураторе.

Пример:

// В этом примере справочник "Сотрудники" имеет реквизит "Оклад"

Спр = СоздатьОбъект("Справочник.Сотрудники");

Спр.НайтиПоКоду("111");

ОкладСотр = Спр.Оклад;

Спр.Оклад = ОкладСотр * 1.5;

Родитель

Значение родительской группы элемента справочника.

Синтаксис:

Родитель

Англоязычный синоним:

Parent

Описание:

Атрибут Родитель предоставляет доступ к значению родительской группы выбранного элемента справочника.

Данный атрибут может быть изменен только для объектов, созданных функцией СоздатьОбъект.

Пример:

Функция ДатьРодителя(Элем)

   // Справочник Товаров многоуровневый

   // Получая в параметре функции значение товара,

   // надо выдать имя группы товара

   Спр = СоздатьОбъект("Справочник.Товары");

   Спр.НайтиЭлемент(Элем);

   Если Спр.Уровень() > 1 Тогда

      Спр.НайтиЭлемент(Спр.Родитель);

      Возврат "Этот товар принадлежит группе " + Спр.Наименование;

   Иначе

      Возврат "Это товар первого уровня - нет родителя!";

   КонецЕсли;

КонецФункции

Владелец

Значение элемента сопряженного справочника, которому подчинен выбранный элемент текущего справочника.

Синтаксис:

Владелец

Англоязычный синоним:

Owner

Описание:

Атрибут Владелец предоставляет доступ к значению элемента сопряженного справочника, которому подчинен выбранный элемент текущего справочника.

Данный атрибут может быть изменен только для объектов, созданных функцией СоздатьОбъект.

Пример:

Функция ДатьВладельца(Элем)

   // Справочник "Единицы" подчинен Справочнику "Товары"

   // Получая в параметре функции значение Единицы измерения товара,

   // надо выдать имя товара, для которого задана эта единица изм.

   СпрТ = СоздатьОбъект("Справочник.Товары");

   СпрЕ = СоздатьОбъект("Справочник.Единицы");

   СпрЕ.НайтиЭлемент(Элем);

   СпрТ.НайтиЭлемент(СпрЕ.Владелец);

   Возврат "Это единица измерения товара " + СпрТ.Наименование;

КонецФункции

Методы периодических реквизитов

Получить

Получить значение периодического реквизита справочника на дату (или на документ).

Синтаксис:

Получить(<Дата>)

Англоязычный синоним:

GetValue

Параметры:

<Дата>

Необязательный параметр. Выражение со значением требуемой даты или значение типа «документ» (в этом случае возвращается значение на дату и время документа). Значение по умолчанию — ТА.

Возвращаемое значение:

Значение периодического реквизита справочника на заданную дату (или на документ).

Описание:

Метод Получить возвращает значение периодического реквизита справочника на определенную дату или на документ. Данный метод разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату.

Замечание: Если к объекту типа «справочник» однажды применен метод ИспользоватьДату, то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Получить, т. е. в такой последовательности эти два метода несовместимы.

Пример:

// при работе в контексте документа, его реквизит "Сотрудник"

// является переменной типа "справочник",

// чтобы получить значение периодического реквизита "Оклад" этого

// справочника, применим функцию Получить

ОкладСотр = Сотрудники.Оклад.Получить(ДатаДок);

См. также: ИспользоватьДату, Установить

Установить

Записать новое значение периодического реквизита справочника на заданную дату.

Синтаксис:

Установить(<Дата>, <3начение>)

Англоязычный синоним:

SetValue

Параметры:

<Дата>

Выражение со значением требуемой даты.

<3начение>

Выражение, содержащее устанавливаемое значение периодического реквизита справочника.

Описание:

Метод Установить записывает значение периодического реквизита справочника на определенную дату. Данный метод разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату.

Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект.

Замечание: Если к объекту типа «справочник» однажды применен метод ИспользоватьДату, то в дальнейшем, чтобы записать новые значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Установить, т. е. в такой последовательности эти два метода несовместимы.

Пример:

// при работе в контексте документа, его реквизит "Сотрудник"

// является переменной типа "справочник",

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

// реквизита "Оклад" этого элемента

// справочника, применим функцию Получить

Сотрудники.Оклад.Установить(ДатаДок, МаксОклад);

См. также: ИспользоватьДату, УстановитьРеквизитСправочника, Получить







Перейти  к оглавлению: Описание встроенного языка