Опубликовано: 25.11.2021

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

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

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

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

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

Если конкретный элемент или группа справочника согласно локальному контексту входит в набор непосредственно доступных модулю значений агрегатных типов данных, то обращение к атрибуту, вызов метода для этого элемента или группы справочника — просто имя этого атрибута или метода с указанием необходимых параметров. Например, в форме элемента справочника "Сотрудники" мы имеем непосредственный доступ к текущему элементу (сотруднику) справочника. Значит, чтобы изменить имя текущего сотрудника, просто укажем:

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

А если значение элемента или группы справочника получено из других источников, например как реквизит какого-либо документа? Тогда, чтобы получить доступ к атрибуту, вызвать метод такой переменной со значением типа "Справочник", имя этого атрибута, метода (с указанием необходимых параметров) необходимо записать через точку после имени реквизита. Например, если в документе значение реквизита «Сотрудник» имеет тип "Справочник.Сотрудники", имя сотрудника можно узнать следующим образом:

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

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

При создании переменной со ссылкой на объект типа "Справочник" в качестве параметра функции СоздатьОбъект() передаётся полное имя справочника, состоящее из идентификатора справочника, записанного через точку после ключевого слова «Справочник» (англоязычный синоним — «Reference»). Например:

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

Допускается также создавать объекты неопределённого вида справочника. В этом случае название конкретного вида справочника в параметре вызова функции СоздатьОбъект() опускается. Далее для работы с таким объектом ему надо установить вид справочника при помощи метода Вид():

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

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

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

Сотр = СпрСотр.ТекущийЭлемент();

Позиционирование происходит также и при создании нового элемента справочника с помощью метода Новый():

Спр = СоздатьОбъект("Справочник.Товары");
// Создаём новый элемента справочника
Спр.Новый();
// Задаём реквизиты нового элемента справочника
Спр.Наименование = "Плёнка ПВХ";
Спр.Код = 1032;
Спр.Размер = 10000;
Спр.Записать();  // сохраняем элемент

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

Получить доступ к значению обязательного реквизита «Код» выбранного элемента справочника позволяет атрибут Код (англоязычный синоним — Code).

Пример использования:

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

Получить доступ к значению обязательного реквизита «Наименование» выбранного элемента справочника позволяет атрибут Наименование (англоязычный синоним — Description).

Пример использования:

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

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

В нижеприведённом примере справочник «Сотрудники» имеет реквизит «Оклад»:

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

// устанавливаем новый оклад
Спр.Оклад = ОкладСотр * 1.5;

Получить доступ к значению родительской группы выбранного элемента справочника позволяет атрибут Родитель (англоязычный синоним — Parent). Замечу, что данный атрибут может быть изменён только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

Функция ДатьРодителя(Элем)
   // Справочник Товаров многоуровневый
   // Получая в параметре функции значение товара, 
   // надо выдать имя группы товара
   Спр = СоздатьОбъект("Справочник.Товары");
   Спр.НайтиЭлемент(Элем);
   Если Спр.Уровень() > 1 Тогда
      Спр.НайтиЭлемент(Спр.Родитель);
      Возврат "Этот товар принадлежит группе " + Спр.Наименование;
   Иначе
      Возврат "Это товар первого уровня - нет родителя!";
   КонецЕсли;
КонецФункции

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

Пример использования:

Функция ДатьВладельца(Элем)
   // Справочник "Единицы" подчинен Справочнику "Товары"
   // Получая в параметре функции значение Единицы измерения товара, 
   // надо выдать имя товара, для которого задана эта единица измерения.
   СпрТов = СоздатьОбъект("Справочник.Товары");
   СпрЕдИзм = СоздатьОбъект("Справочник.ЕдиницыИзмерений");
   СпрЕдИзм.НайтиЭлемент(Элем);
   СпрТов.НайтиЭлемент(СпрЕдИзм.Владелец);
   Возврат "Это единица измерения товара " + СпрТов.Наименование;
КонецФункции

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

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

Синтаксис:

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

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

Пример:

// При работе в контексте документа его реквизит "Сотрудник"
// является переменной типа "Справочник". 
// Чтобы получить значение периодического реквизита "Оклад" этого
// справочника, применим функцию Получить()
ОкладСотр = Сотрудники.Оклад.Получить(ДатаДок);

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

Установить значение периодического реквизита справочника на определённую дату позволяет метод Получить() (англоязычный синоним — SetValue()). Замечу, что метод Установить() может использоваться только для объектов, созданных с помощью функции СоздатьОбъект(). К тому же, его разрешено использовать только для периодических реквизитов справочников, если для справочника не установлена дата при помощи метода ИспользоватьДату().

Синтаксис:

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

где

  • <Дата> — выражение со значением требуемой даты;
  • <3начение> — выражение, содержащее устанавливаемое значение периодического реквизита справочника.

Пример:

// При работе в контексте документа его реквизит "Сотрудник"
// является переменной типа "Справочник". 
// Чтобы установить новое значение периодического реквизита "Оклад" этого
// справочника, применим функцию Установить()
ОкладСотр = Сотрудники.Оклад.Установить(ДатаДок, МаксОклад);

Примечание: Если к объекту типа "Справочник" однажды применён метод ИспользоватьДату(), то в дальнейшем, чтобы записать новые значения периодических реквизитов справочника, нельзя применять к этому же объекту метод Установить(), так как в такой последовательности эти два метода несовместимы.

Методы справочников

Общие методы

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

Синтаксис:

Вид(<Название>)

где <Название> — строковое выражение с названием вида справочника. Параметр является необязательным.

Примечание: Устанавливать новое значение вида справочника допускается только для объектов типа "Справочник" неопределённого вида, созданных при помощи функции СоздатьОбъект().

Пример использования:

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

Состояние(Спр.Вид());

Получить представление вида справочника, как он задан в Конфигураторе, позволяет метод ПредставлениеВида() (англоязычный синоним — KindPresent()). Параметры у метода отсутствуют. Возвращаемым значением метода является строковое значение, содержащее пользовательское представление вида справочника (синоним справочника или, если он не указан, то идентификатор).

Пример использования:

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

Методы редактирования справочника

Инициализировать создание нового элемента справочника позволяет метод Новый() (англоязычный синоним — New()). Параметры у метода отсутствуют. После инициализации создания нового элемента справочника, как правило, следом производится заполнение его реквизитов с последующим вызовом метода Записать(). Метод Новый() может использоваться только для объектов, созданных с помощью системной функции СоздатьОбъект().

Пример использования:

Процедура ВводСотрудника()
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   // Добавляем новый элемент справочника
   Спр.Новый();
   // Определяем реквизиты нового элемента справочника
   Спр.Наименование = ФИО;
   Спр.Код = ТН;
   Спр.Оклад = Оклад;
   Спр.Аванс = Аванс;
   . . .
   // Записываем новый элемент справочника
   Спр.Записать();
КонецПроцедуры

Инициализировать создание пустой записи новой группы в справочнике позволяет метод НоваяГруппа() (англоязычный синоним — NewGroup()). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

Процедура ВводГруппыСотрудников()
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   // Добавляем новую группу справочника
   Спр.НоваяГруппа();
   // Определяем реквизиты новой группы справочника
   Спр.Наименование = "Расчетчик 3";
   Спр.Код = 3;
   // Записываем новую группу справочника
   Спр.Записать();
КонецПроцедуры

Записать элемент справочника позволяет метод Записать() (англоязычный синоним — Write()). Параметры у метода отсутствуют. Пример использования метода приведён выше.

Примечание: Если этот метод применяется в Модуле формы элемента справочника непосредственно к элементу справочника локального контекста, то данный метод отрабатывает те же действия, как и интерактивное нажатие пользователем кнопки с формулой «#Записать».

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

Синтаксис метода:

Удалить(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 – непосредственное удаление; 0 – пометка на удаление. Параметр является необязательным. Значение по умолчанию — 1.

Пример записи метода:

Спр.Удалить(0);

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

Снять пометку удаления с текущего элемента справочника позволяет метод СнятьПометкуУдаления() (англоязычный синоним — ClearDeleteMark()). Параметры у метода отсутствуют. Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Пример использования:

Процедура ВосстановлениеУдаленныхСотр(Сотр)
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   // Если параметр не пустой
   Если Сотр.Выбран() > 0 Тогда
      // Позиционируем справочник на заданном элементе
      Спр.НайтиЭлемент(Сотр);
      Если Спр.Выбран() > 0 Тогда
         Если Спр.ПометкаУдаления() = 1 Тогда
            // Восстанавливаем элемент справочника
            Спр.СнятьПометкуУдаления();
         КонецЕсли;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Установить новый префикс для автоматического создания кодов элементов справочника позволяет метод ПрефиксКода() (англоязычный синоним — CodePrefix()). Возвращаемым значением метода является строковое значение текущего префикса кодов элементов справочника на момент до исполнения метода.

Синтаксис:

ПрефиксКода(<Префикс>)

где <Префикс> — строковое выражение, задающее новый префикс кодов элементов справочника. Параметр является необязательным.

Пример записи метода:

ПрефиксКода("01-");

Установить новый код элемента справочника с указанным префиксом позволяет метод УстановитьНовыйКод() (англоязычный синоним — SetNewCode()).

Синтаксис метода:

УстановитьНовыйКод(<Префикс>)

где <Префикс> — строковое выражение, задающее префикс кода элемента справочника.

Пример записи метода:

УстановитьНовыйКод("01-");

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

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

Синтаксис:

НайтиЭлемент(<НаименованиеЭлемента>)

где <НаименованиеЭлемента> — выражение со значением элемента справочника.

Пример использования:

СпрБнк = СоздатьОбъект("Справочник.Банки");
СпрБнк.ИспользоватьДату(ДатаДок);
СпрБнк.НайтиЭлемент(Док.НашБанк);
Процент = СпрБнк.Процент;
НазваниеБанка = СпрБнк.Наименование;

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

Синтаксис:

НайтиПоНаименованию(<Наименование>, <Режим>, <ФлагПоиска>)

где

  • <Наименование> — строковое выражение, содержащее наименование искомого элемента справочника;
  • <Режим> — числовое выражение, задающее режим поиска: 1 — поиск внутри установленного подчинения (родителя); 0 — поиск во всём правочнике вне зависимости от родителя. Параметр является необязательным. Значение по умолчанию — 1;
  • <ФлагПоиска> — числовое выражение — флаг поиска: 1 — найти точное соответствие наименования; 0 — найти наименование по первым символам. Параметр является необязательным. Значение по умолчанию — 0.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
Спр.ИспользоватьДату(ДатаДок);
// Позиционируем созданный объект Спр по известному наименованию
Если Спр.НайтиПоНаименованию("Иванов", 1) > 0 Тогда
   Оклад = Спр.Оклад;
   Подразделение = Спр.Подразделение;
Иначе
   Предупреждение("Нет у нас Ивановых!");
КонецЕсли;

Выполнить поиск элемента справочника по коду, указанному в параметре метода, и позиционировать объект "Справочник" на этом элементе позволяет метод НайтиПоКоду() (англоязычный синоним — FindByCode()). Если справочник многоуровневый и нумерация в пределах каждой группы своя, то полный код выбираемого элемента можно задавать, разделяя коды уровней символом «/» (косая черта). Возвращаемым значением метода является число: 1 — если действие выполнено, 0 — если действие не выполнено (элемент не найден). Метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

НайтиПоКоду(<КодЭлемента>, <Режим>)

где

  • <КодЭлемента> — выражение со значением искомого кода;
  • <Режим> — числовое выражение, устанавливающее режим поиска: 0 — поиск во всем справочнике вне зависимости от родителя; 1 — поиск внутри установленного подчинения (родителя); 2 — поиск по полному коду. Параметр является необязательным. Значение по умолчанию: 0 — для справочников, у которых код уникален во всем справочнике; 2 — для справочников, у которых код уникален в группе.

Пример использования:

Пдр = СоздатьОбъект("Справочник.Подразделения");
Если Пдр.НайтиПоКоду("125") > 0 Тогда
   Сообщить("Есть такое подразделение !")
Иначе
   Сообщить("Нет такого подразделения!")
КонецЕсли;

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

Синтаксис:

НайтиПоРеквизиту(<ИмяРеквизита>, <3начение>, <ФлагГлобальногоПоиска>)

где

  • <ИмяРеквизита> — строковое выражение с наименованием (идентификатором) реквизита;
  • <3начение> — значение реквизита для поиска;
  • <ФлагГлобальногоПоиска> — числовое выражение. Если 0, то поиск должен выполняться в пределах подчинения справочника, если 1, то поиск должен выполняться по всему справочнику.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
// Позиционируем созданный объект Спр по реквизиту
Если Спр.НайтиПоРеквизиту("СерияПаспорта", "XXVII-OP", 1) > 0 Тогда
   ФИО = Спр.Наименование;
Иначе
   Предупреждение("Не найден сотрудник с таким паспортом!");
КонецЕсли;

Примечание: Метод НайтиПоРеквизиту() может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

Вызвать диалоговое окно для выбора элемента (см. рис. ниже) и позиционировать объект "Справочник" на выбранном элементе позволяет метод Выбрать() (англоязычный синоним — Choose()). Возвращаемым значением метода является число: 1 — если элемент выбран, 0 — если действие не выполнено (элемент не выбран). Данный метод может использоваться только для объектов, созданных функцией СоздатьОбъект().

Синтаксис:

Выбрать(<Подсказка>, <ФормаСписка>)

где

  • <Подсказка> — текст заголовка окна диалога выбора. Может использоваться в качестве подсказки конечному пользователю;
  • <ФормаСписка> — строковое выражение, содержащее идентификатор той формы списка справочника, которая должна использоваться для выбора. Если это значение пустое, то используется форма списка по умолчанию.

Пример использования:

// Данная процедура присваивает некоторому реквизиту "Фирма"
// значение из cправочника "Фирмы"
Процедура УстФирмы()
   // Создадим объект требуемого справочника
   Фрм = СоздатьОбъект("Справочник.Фирмы");
   // Реквизиты справочника могут быть периодическими,
   // поэтому установим дату выборки периодических реквизитов
   Фрм.ИспользоватьДату(ДатаДок);
   // Вызываем диалог выбора элемента cправочника
   Если Фрм.Выбрать("Выберите фирму", "") > 0 Тогда
      Фирма = Фрм.ТекущийЭлемент();
   КонецЕсли;
КонецПроцедуры

В результате работы данного кода на экран будет выведено окно:

Окно выбора элемента

Проверить факт выбора элемента справочника позволяет метод Выбран() (англоязычный синоним — Selected()). Параметры у этого метода отсутствуют. Метод возвращает число со значением 1, если элемент справочника выбран, или 0, если элемент справочника не выбран.

Пример использования:

// В диалоге формирования некоторого отчета
// ВыбСклад - реквизит диалога типа "Справочник.Склад"
Если ВыбСклад.Выбран() = 0 Тогда
   // Если склад в диалоге не выбран, то формируем без условий
   Заг1 = "По всем складам.";
Иначе
   // если в диалоге выбран склад,
   // то формируем отчет только по выбранному складу
   Заг1 = "Отчет по складу "+ ВыбСклад.Наименование;
КонецЕсли;

Методы для циклической обработки элементов справочника

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

Синтаксис метода:

ВыбратьЭлементы(<Режим>)

где <Режим> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("ШапкаОтчета");

Акц = СоздатьОбъект("Справочник.Акционеры");
Акц.ПорядокНаименований();
// Открываем выборку
Акц.ВыбратьЭлементы();
// Цикл получения элементов справочника
Пока Акц.ПолучитьЭлемент() > 0 Цикл
   Если Акц.ЭтоГруппа() = 1 Тогда
      Таб.ВывестиСекцию("Группа");
   Иначе
      Таб.ВывестиСекцию("Акционер");
   КонецЕсли;
КонецЦикла;

Открыть выборку элементов справочника по реквизиту позволяет метод ВыбратьЭлементыПоРеквизиту() (англоязычный синоним — SelectItemsByAttribute()). Дальнейшая выборка элементов справочника будет происходить при помощи метода ПолучитьЭлемент() среди элементов текущего справочника, имеющих указанное значение реквизита, в порядке, установленном параметрами метода, а также согласно установкам, сделанным заранее при помощи методов ПорядокКодов(), ПорядокНаименований(), ВключатьПодчиненные(), ИспользоватьРодителя(), ИспользоватьВладельца() и ИспользоватьДату(). Возвращаемым значением метода ВыбратьЭлементыПоРеквизиту() будет число 1, если действие выполнено и в выборке есть хотя бы один элемент, или 0, если действие не выполнено или в выборке нет ни одного элемента.

Синтаксис метода:

ВыбратьЭлементыПоРеквизиту(<ИмяРеквизита>, <3начение>, <РежимИерархии>, <РежимГрупп>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита справочника, который задаёт порядок обхода элементов справочника;
  • <3начение> — значение реквизита для выборки;
  • <РежимИерархии> — числовое выражение. Если равно 1, то элементы будут выбираться с учётом иерархии; если равно 0, то элементы будут выбираться без учета иерархии. Параметр является необязательным. Значение по умолчанию — 1;
  • <РежимГрупп> — числовое выражение. Если равно 1, то выбор будет происходить среди групп справочника; если равно 0, то выбор будет происходить среди элементов справочника.

Пример использования:

Акц = СоздатьОбъект("Справочник.Акционеры");
Акц.ПорядокНаименований();
// Открываем выборку
Акц.ВыбратьЭлементыПоРеквизиту("Отдел", НомерОтдела, 1, 0);
// Цикл получения элементов справочника
Пока Акц.ПолучитьЭлемент() > 0 Цикл
   . . .
КонецЦикла;

Примечание: Метод ВыбратьЭлементыПоРеквизиту может использоваться только для объектов, созданных при помощи функции СоздатьОбъект(), и только для реквизитов, у которых в Конфигураторе установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

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

Синтаксис метода:

ПолучитьЭлемент(<Режим>)

где <Режим> — числовое выражение. Если равно 1, то будут включаться в выборку все подчинённые элементы, если 0, то подчинённые элементы не будут включаться в выборку. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

Спр = СоздатьОбъект("Справочник.ОсновныеСредства");
// Задаем выборку в порядке кодов
Спр.ПорядокКодов();
// Открываем выборку
Спр.ВыбратьЭлементы();
// Цикл получения элементов справочника
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Сообщить("===" + Спр.Наименование);
КонецЦикла;

Получить значение текущего элемента справочника в целом (как объекта) позволяет метод ТекущийЭлемент() (англоязычный синоним — CurrentItem()). Параметры у этого метода отсутствуют. Данный метод применяется, например, если нужно элемент справочника передать как параметр в вызове какого-либо метода или присвоить какому-либо реквизиту.

Пример использования:

Спр = СоздатьОбъект("Справочник.ОсновныеСредства");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   ОС = Спр.ТекущийЭлемент();
   . . .
КонецЦикла;

Ещё пример:

// Данная процедура присваивает некоторому реквизиту "Компания"
// значение из справочника "Компании"
Процедура УстКомп()
   // Создадим объект требуемого справочника
   Комп = СоздатьОбъект("Справочник.Компании");
   // Вызываем диалог выбора элемента справочника
   Если Комп.Выбрать("Выберите компанию", "") > 0 Тогда
      Компания = Комп.ТекущийЭлемент();
   КонецЕсли;
КонецПроцедуры

Методы управления выбором справочников и элементов справочников

Установить выбираемые виды для объекта-справочника неопределённого вида позволяет метод ВидыДляВыбора() (англоязычный синоним — KindsForChoise()). Данный метод обычно используется до начала интерактивного позиционирования элемента справочника, например, при помощи метода Выбрать(). Возвращаемым значением метода является строковое значение, содержащее текущий список видов выбираемых справочников, разделённых запятыми (на момент до исполнения метода).

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

Синтаксис метода:

ВидыДляВыбора(<СписокВидов>)

где <СписокВидов> — строковое выражение, содержащее список видов выбираемых справочников, разделённых запятыми. Параметр является необязательным и не используется в случае, когда метод требуется для получения текущего значения установленных видов.

Пример использования:

// Данная процедура присваивает некоторому реквизиту "Фирма"
// значение из справочника "Фирмы"
Процедура УстФирмы()
   // Создадим объект требуемого справочника
   Фрм = СоздатьОбъект("Справочник");
   // Реквизиты справочника могут быть периодическими
   // поэтому установим дату выборки периодических реквизитов
   Фрм.ВидыДляВыбора("Фирмы");
   Фрм.ИспользоватьДату(ДатаДок);
   // Вызываем диалог выбора элемента справочника
   Если Фрм.Выбрать("Выберите фирму", "") > 0 Тогда
      Фирма = Фрм.ТекущийЭлемент();
   КонецЕсли;
КонецПроцедуры

Установить режим выборки элементов справочника в порядке возрастания кодов позволяет метод ПорядокКодов() (англоязычный синоним — OrderByCode()). Параметры у метода отсутствуют.

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

Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — наименование, а надо получить элементы в порядке кодов.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
// Задаем выборку в порядке кодов
Спр.ПорядокКодов();
// Открываем выборку
Спр.ВыбратьЭлементы();
// Цикл получения элементов справочника
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование);
   . . .
КонецЦикла;

Установить режим выборки элементов справочника в порядке возрастания наименования элементов позволяет метод ПорядокНаименований() (англоязычный синоним — OrderByDescr()). Параметры у метода отсутствуют.

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

Примечание: По умолчанию выборка элементов справочника производится в порядке основного представления справочника, которое задаётся в Конфигураторе. Поэтому реально имеет смысл применять данный метод только в том случае, если основное представление справочника — код, а надо получить элементы в порядке наименований.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
// Задаем выборку в порядке наименований
Спр.ПорядокНаименований();
// Открываем выборку
Спр.ВыбратьЭлементы();
// Цикл получения элементов справочника
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование);
   . . .
КонецЦикла;

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

Синтаксис:

ПорядокРеквизита(<ИмяРеквизита>)

где <ИмяРеквизита> — строковое выражение с именем реквизита справочника, который задаёт порядок обхода элементов справочника.

Пример использования:

Спр = СоздатьОбъект("Справочник.Сотрудники");
// Задаем выборку в порядке возрастания окладов
Спр.ПорядокРеквизита("Оклад");
// Открываем выборку
Спр.ВыбратьЭлементы();
// Цикл получения элементов справочника
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Состояние(Спр.Наименование + " - " + Спр.Оклад);
   . . .
КонецЦикла;

Примечание: Метод ПорядокРеквизита() может использоваться только в том случае, если в Конфигураторе при описании данного реквизита установлен признак «Сортировка» (посмотреть можно «Свойства реквизита -> Дополнительные -> Сортировка»).

Дополнительные свойства реквизита

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

Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.

Синтаксис метода:

ВыборГруппы(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным и не используется в случае, когда метод применяется для получения текущего значения режима выбора групп.

Задать параметры выборки для подчинённого справочника позволяет метод ИспользоватьВладельца() (англоязычный синоним — UseOwner()). Возвращаемым значением метода является значение элемента справочника-владельца для текущего подчинённого справочника на момент до исполнения метода.

Данный метод может применяться к объектам типа "Справочник" в двух случаях:

  • для объектов, созданных функцией СоздатьОбъект(), метод ИспользоватьВладельца() устанавливает элемент справочника-владельца в качестве параметра выборки. Метод используется до вызова метода ВыбратьЭлементы(), который фактически открывает выборку. Дальнейшая выборка при помощи метода ПолучитьЭлемент() будет происходить только среди тех элементов текущего подчинённого справочника, для которых владельцем является заданное значение элемента справочника-владельца. При записи нового элемента текущего справочника данный метод также задаёт владельца для нового элемента.
  • для объектов типа "Справочник", которые являются реквизитами формы (например, в форме документа — реквизит документа типа «Справочник») или реквизитами диалога (например, в форме отчёта — реквизит диалога типа «Справочник») метод ИспользоватьВладельца() позволяет программно установить некоторое значение справочника-владельца в качестве владельца, который будет использован при интерактивном выборе значения данного реквизита.

Синтаксис метода:

ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )

где

  • <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения элемента справочника-владельца;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Параметр имеет смысл только в случае использования данного метода для объектов типа «Справочник», которые являются реквизитами формы или реквизитами диалога.

Пример использования:

// Процедура выводит список детей сотрудника
// Справочник детей подчинен справочнику сотрудников
Процедура ВыводСпискаДетей(Сотр)
   СпрД = СоздатьОбъект("Справочник.Дети");
   // в качестве параметра функции ИспользоватьВладельца
   // передаем параметр, переданный в процедуру
   СпрД.ИспользоватьВладельца(Сотр);
   Сообщить("Дети сотрудника " + Сотр.Наименование);
   СпрД.ВыбратьЭлементы();
   Пока СпрД.ПолучитьЭлемент() > 0 Цикл
      Сообщить(СпрД.Наименование);
   КонецЦикла;
КонецПроцедуры

Другой пример:

// В форме элемента справочника "Товары" есть реквизит "ЕдиницаИзм",
// который имеет тип подчиненного справочника "Единицы".
// Здесь мы можем задать ему в качестве владельца текущий элемент:
ЕдиницаИзм.ИспользоватьВладельца(ТекущийЭлемент());

Установить группу текущего справочника в качестве параметра выборки позволяет метод ИспользоватьРодителя() (англоязычный синоним — UseParent()). Возвращаемым значением метода является значение текущей группы для справочника на момент до исполнения метода.

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

Синтаксис метода:

ИспользоватьРодителя(<Группа>)

где <Группа> — выражение со значением группы справочника. Параметр является необязательным и не используется, когда метод применяется для получения текущего значения группы.

Пример использования:

// Это процедура формирования отчета "Список сотрудников"
// ВыбСотр - реквизит диалога типа "Справочник.Сотрудники"
Процедура ВыводСпискаСотрудников()
   Таб = СоздатьОбъект("Таблица");
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   Спр.ИспользоватьДату(ДатаОтчета);
   Если ВыбСотр.Выбран() = 0 Тогда
      // Если сотрудник в диалоге не выбран, 
      // то формируем отчет без условий
      Заг = "По всем сотрудникам";
   ИначеЕсли ВыбСотр.ЭтоГруппа() = 1 Тогда
      // Если в диалоге выбрана группа сотрудников, то
      // задаем выборку элементов справочника из одной группы
      Спр.ИспользоватьРодителя(ВыбСотр);
      Заг = "По сотрудникам группы " + ВыбСотр.Наименование;
   Иначе
      // Если в диалоге выбран сотрудник, то
      // формируем отчет только по нему
      Спр.НайтиЭлемент(ВыбСотр);
      Заг = "По сотруднику " + ВыбСотр.Наименование;
      Таб.ВывестиСекцию("Отчет");
      Таб.ВывестиСекцию("Сотрудник");
      Перейти ~MET;
   КонецЕсли;
   ЧислоСтрок = 0;
   Таб.ВывестиСекцию("Отчет");
   // Открываем выборку
   Спр.ВыбратьЭлементы();
   Пока Спр.ПолучитьЭлемент() > 0 Цикл
      ЧислоСтрок = ЧислоСтрок + 1;
      Если Спр.ЭтоГруппа() = 1 Тогда
         Таб.ВывестиСекцию("Группа");
      Иначе
         Таб.ВывестиСекцию("Сотрудник");
      КонецЕсли;
      Состояние("В отчет выведено " + ЧислоСтрок + " строк." );
   КонецЦикла;

~MET:
   // Вызов выходного отчета в окно просмотра и редактирования
   Таб.ТолькоПросмотр(1);
   Таб.Опции(0, 0, 4, 0);
   Таб.Показать("Список сотрудников", "");
   ВыбСотр = 0;
КонецПроцедуры

Установить флаг выборки всех подчинённых элементов позволяет метод ВключатьПодчиненные() (англоязычный синоним — IncludeChildren()). Возвращаемым значением метода является текущее числовое значение режима выборки подчинённых элементов справочника на момент до исполнения метода.

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

Синтаксис метода:

ВключатьПодчиненные(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — надо включать в выборку все подчинённые элементы; 0 — не надо включать подчинённые элементы. Параметр является необязательным.

Пример использования:

// Это процедура формирования отчета "Список Товаров"
// ВыбТовар - реквизит диалога типа "Справочник.Товар», которым
// задается группа товаров для отображения.
// В процедуру передается параметр Режим, которым задается, 
// отображать или нет вложенные подгруппы товаров выбранной группы
Процедура ВыводСпискаТоваров(Режим)
   Таб = СоздатьОбъект("Таблица");
   Тов = СоздатьОбъект("Справочник.Товары");
   Тов.ИспользоватьДату(ДатаОтчета);
   Если ВыбТовар.Выбран() = 0 Тогда
      // Если товар в диалоге не выбран, то формируем отчет без условий
      Заг = "По всем товарам.";
   ИначеЕсли ВыбТовар.ЭтоГруппа() = 1 Тогда
      // Если в диалоге выбрана группа товаров, то
      // Задаем выборку элементов справочника из одной группы
      Тов.ИспользоватьРодителя(ВыбТовар);
      Заг = "По товарам группы " + ВыбТовар.Наименование;
      // Задаем выборку всех подчиненных элементов Справочника
      Тов.ВключатьПодчиненные(Режим);
   Иначе
      // Если в диалоге выбран конкретный товар, то
      // формируем отчет только по этому товару
      Тов.НайтиЭлемент(ВыбТовар);
      Заг = "По товару " + ВыбТовар.Наименование;
      Таб.ВывестиСекцию("Отчет");
      Таб.ВывестиСекцию("Товар");
      Перейти ~MET;
   КонецЕсли;
   ЧислоСтрок = 0;
   Таб.ВывестиСекцию("Отчет");
   // Открываем выборку
   Тов.ВыбратьЭлементы();
   Пока Тов.ПолучитьЭлемент() > 0 Цикл
      ЧислоСтрок = ЧислоСтрок + 1;
      Если Тов.ЭтоГруппа() = 1 Тогда
         Таб.ВывестиСекцию("Группа");
      Иначе
         Таб.ВывестиСекцию("Товар");
      КонецЕсли;
      Состояние("В отчет выведено " + ЧислоСтрок + " строк." );
   КонецЦикла;
   // Вызов выходного отчета в окно просмотра и редактирования
~MET:
   Таб.ТолькоПросмотр(1);
   Таб.Опции(0, 0, 4, 0);
   Таб.Показать("Список товаров по каталогу", "");
КонецПроцедуры

Установить порядок выборки элементов справочника позволяет метод ОбратныйПорядок() (англоязычный синоним — BackwardOrder()). Возвращаемым значением метода является текущее значение порядка выборки элементов справочника на момент до исполнения метода.

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

Синтаксис метода:

ОбратныйПорядок(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать элементы справочника в обратном порядке; 0 — выбирать элементы справочника в прямом порядке. Параметр является необязательным. Значение по умолчанию — 1.

Пример использования:

Акц = СоздатьОбъект("Справочник.Акционеры");
Акц.ИспользоватьДату(РабочаяДата());
Акц.ПорядокКодов();
Акц.ОбратныйПорядок(1);
Акц.ВыбратьЭлементы();
Пока Акц.ПолучитьЭлемент() > 0 Цикл
   . . .
КонецЦикла;

Методы для получения информации об элементе справочника

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

Пример использования:

ПолнКод = Спр.Подразделения.ПолныйКод();

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

Пример использования:

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

Узнать, является ли выбранный элемент справочника группой позволяет метод ЭтоГруппа() (англоязычный синоним — IsGroup()). Метод возвращает числовое значение 1, если выбранный элемент справочника является группой, или 0, если он является обычным элементом. Параметры у метода отсутствуют.

Пример использования:

Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Отчет");
Сотр = СоздатьОбъект("Справочник.Сотрудники");
Сотр.ВыбратьЭлементы();
Пока Сотр.ПолучитьЭлемент() > 0 Цикл
   Если Сотр.ЭтоГруппа() = 1 Тогда
      Таб.ВывестиСекцию("Группа");
   Иначе
      Таб.ВывестиСекцию("Сотрудник");
   КонецЕсли;
КонецЦикла;

Проверить, принадлежит ли указанной группе текущий элемент справочника (не важно, на каком нижестоящем уровне) позволяет метод ПринадлежитГруппе() (англоязычный синоним — BelongsToGroup()). Возвращаемым значением метода является число 1, если элемент принадлежит указанной группе, или 0, если нет.

Синтаксис метода:

ПринадлежитГруппе(<Группа>)

где <Группа> — выражение со значением группы справочника.

Пример использования:

// Выведем в отчет только те подразделения, которые
// принадлежат группе ВыбГруппа
Процедура ВывестиНаПечать()
   . . .
   Возврат;
КонецПроцедуры
. . .
Спр = СоздатьОбъект("Справочник.Подразделения");
// Задаем выборку в порядке кодов
Спр.ПорядокКодов();
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
   Если Спр.ПринадлежитГруппе(ВыбГруппа) = 1 Тогда
      ВывестиНаПечать();
   КонецЕсли;
КонецЦикла;

Получить номер уровня текущего элемента в структуре дерева многоуровневого справочника позволяет метод Уровень() (англоязычный синоним — Level()). Параметры у метода отсутствуют.

Пример использования:

Спр = СоздатьОбъект("Справочник.Подразделения");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() > 0 Цикл
   Сообщить(Строка(Спр.Наименование + Спр.Код + Спр.Уровень()));
КонецЦикла;

Прочитать значение пометки удаления текущего элемента справочника позволяет метод ПометкаУдаления() (англоязычный синоним — DeleteMark()). Параметры у метода отсутствуют. Возвращаемым значением метода является числовое значение: 1 — если на элементе справочника стоит пометка удаления; 0 — если нет пометки удаления.

Пример использования:

Процедура ВосстановлениеУдаленныхСотр(Сотр)
   Спр = СоздатьОбъект("Справочник.Сотрудники");
   Если Сотр.Выбран() > 0 Тогда
      // Позиционируем справочник на заданном элементе
      Спр.НайтиЭлемент(Сотр);
      Если Спр.Выбран() > 0 Тогда
         Если Спр.ПометкаУдаления() = 1 Тогда
            // Восстанавливаем элемент справочника
            Спр.СнятьПометкуУдаления();
         КонецЕсли;
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Методы для работы с реквизитами справочников

Назначить тип для реквизита, которому в Конфигураторе назначен тип «Неопределенный» позволяет метод НазначитьТип() (англоязычный синоним — SetType()).

Синтаксис метода:

НазначитьТип(<ИмяРеквизита>, <ИмяТипа>, <Длина>, <Точность>)

где

  • <ИмяРеквизита> — строковое выражение – название реквизита неопределённого типа, как он назван в Конфигураторе;
  • <ИмяТипа> — строковое выражение – название типа данных (или вид субконто), который назначается реквизиту справочника, например, "Строка", "Дата", "Число", "Справочник.Товары", "Документ.РасходнаяНакладная" и т.п.;
  • <Длина> — числовое выражение — длина поля представления данных. Параметр является необязательным и имеет смысл только при задании числового или строкового типа;
  • <Точность> — числовое выражение — число знаков после десятичной точки. Параметр является необязательным и имеет смысл только при задании числового типа.

Пример использования:

Номенклатура.НазначитьТип("ТМЦ", "Справочник.Товары");

Кстати, для установки конкретного вида значениям типа «Документ неопределённого вида», «Справочник неопределённого вида», «Счёт неопределённого вида» предназначена системная (встроенная) процедура НазначитьВид() (англ. синоним — SetKind()). Обычно эта процедура используется для реквизитов форм, причём, в сочетании с методом элемента формы НеИзменятьВид(). Это позволяет регулировать программно собственно вид, а само значение предоставить выбирать пользователю интерактивно.

Синтаксис данной процедуры:

НазначитьВид(<3начение>, <Вид>)

где

  • <3начение> — значение типа «документ/справочник/счёт неопределённого вида» — обычно реквизит документа, справочника или диалога формы;
  • <Вид> — строковое значение. Вид может быть задан строкой, содержащей идентификатор конкретного справочника, документа или плана счетов. Вид также может быть задан видом субконто, который имеет тип соответственно конкретного справочника, документа или счёта.

Пример использования процедуры:

// Реквизиту документа "Контрагент" типа "справочник
// неопределенного вида", в зависимости от значений
// других реквизитов устанавливаем вид "Организации"
// или "Сотрудники"

Процедура ВводНаОсновании(ДокОсн)
   Если ДокОсн.Вид() = "Счет" Тогда
      НазначитьВид(Контрагент, "Организации");
   Иначе
      НазначитьВид(Контрагент, "Сотрудники");
   КонецЕсли;
   Форма.Контрагент.НеИзменятьВид(1);
КонецПроцедуры

Получить значение реквизита по его идентификатору позволяет метод ПолучитьАтрибут() (англоязычный синоним — GetAttrib()).

Синтаксис метода:

ПолучитьАтрибут(<ИмяРеквизита>)

где <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе.

Пример использования:

ЦенаТов = Тов.ПолучитьАтрибут("ЦенаРозничная");

Установить значение реквизита по его идентификатору позволяет метод УстановитьАтрибут() (англоязычный синоним — SetAttrib()).

Синтаксис метода:

УстановитьАтрибут(<ИмяРеквизита>, <3начение>)

где

  • <ИмяРеквизита> — строковое выражение, содержащее имя реквизита, как оно задано в Конфигураторе;
  • <3начение> — выражение, содержащее устанавливаемое значение реквизита.

Пример использования:

Тов.УстановитьАтрибут("ЦенаРозничная", ЦенаТов);

Установить для объекта типа "Справочник" дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату() (англоязычный синоним — UseDate()). Возвращаемым значением метода является текущее значение используемой даты на момент до исполнения метода.

Синтаксис метода:

ИспользоватьДату(<Дата>, <УстСразу>)

где

  • <Дата> — выражение со значением типа "Дата". Параметр является необязательным;
  • <УстСразу> — число. Если значение равно 1, то дата, переданная в качестве параметра, будет установлена уже в текущей выборке; если 0 — то дата, переданная в качестве параметра будет установлена при следующей выборке. Параметр является необязательным. Значение по умолчанию — 0.

Понять работу второго параметра можно из следующего примера:

// Цена — периодический реквизит справочника

Спр.ИспользоватьДату(Д1, 1);
Спр.ВыбратьЭлементы();
. . .
А = Спр.Цена; // возвращает значение на дату Д1
Спр.ИспользоватьДату(Д2, 1);
Б = Спр.Цена; // возвращает значение на дату Д2!



// Другой вариант

Спр.ИспользоватьДату(Д1);
Спр.ВыбратьЭлементы();
. . .
А = Спр.Цена; // возвращает значение на дату Д1
Спр.ИспользоватьДату(Д2);
Б = Спр.Цена; // тоже возвращает значение на дату Д1!
Спр.ВыбратьЭлементы();
. . .
В = Спр.Цена; // только теперь возвращает значение на Д2

Примечание 1: Если к объекту типа "Справочник" был применён метод ИспользоватьДату(), то в дальнейшем, чтобы выбирать значения периодических реквизитов справочника, нельзя применять к этому же объекту методы Получить() и Установить(), так как в такой последовательности эти методы несовместимы.

Примечание 2: Данный метод нельзя использовать «через две точки». Например, если в документе с именем ДокНакл есть реквизит Фирма типа "Справочник", у которого есть периодический реквизит НДС, то для получения значения этого НДС следующий оператор использовать не следует:

ДокНакл.Фирма.ИспользоватьДату(РабочаяДата());

В этом случае необходимо просто использовать промежуточную (дополнительную) переменную, например:

ФирДок = ДокНакл.Фирма;
ФирДок.ИспользоватьДату(РабочаяДата());
НДСДок = ФирДок.НДС;

Методы контекста Модуля формы элемента справочника

Описанные в данном разделе методы доступны только в контексте Модуля формы элемента справочника.

Проверить форму элемента справочника на предмет изменения её реквизитов позволяет метод Модифицированность() (англоязычный синоним — Modify()). Метод возвращает 1, если реквизиты текущей формы элемента справочника были изменены, или 0, если реквизиты не изменялись. Параметры у данного метода отсутствуют.

Пример использования метода:

Процедура ПриЗакрытии()
   Если Модифицированность() > 0 Тогда
      . . .
   КонецЕсли;
КонецПроцедуры

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

Синтаксис:

ИспользоватьДату(<Дата>, <Обновить>)

где

  • <Дата> — выражение со значением типа "Дата";
  • <Обновить> — число. Возможные значения: 1 — обновить периодические реквизиты формы на заданную дату; 0 — не обновлять периодические реквизиты формы. Параметр является необязательным. Значение по умолчанию — 0.

Пример использования метода:

// Здесь мы работаем в локальном контексте модуля Формы элемента справочника.
// В справочнике есть несколько реквизитов, которые являются периодическими реквизитами.
// В форме существует элемент диалога ВыбДата типа "Дата"
Если Число(ВыбДата) <> 0 Тогда
   // Задано некоторое значение ВыбДата
   ИспользоватьДату(ВыбДата);
КонецЕсли;

Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов() (англоязычный синоним — РеriodicAttributesSaving()).

Запись периодических реквизитов

Примечание: При отсутствии данного метода в Модуле формы элемента справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.

Синтаксис метода:

СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)

где

  • <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
    • 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
  • <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.

Пример использования метода:

// Здесь мы работаем в локальном контексте модуля Формы элемента справочника.
// В справочнике есть несколько реквизитов, которые являются периодическими реквизитами
СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");

Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории() (англоязычный синоним — ViewHistory()). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.

Синтаксис метода:

ПросмотрИстории(<СписокРеквизитов>)

где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.

Пример использования:

Процедура ПриОткрытии()
   ПросмотрИстории("Оклад, Тариф, Подразделение");
КонецПроцедуры

Методы контекста Модуля формы списка справочника

Описанные в данном разделе методы доступны только в контексте Модуля формы списка справочника.

Установить для формы списка справочника дату, на которую будут в дальнейшем выбираться (или записываться) значения периодических реквизитов справочника, позволяет метод ИспользоватьДату() (англоязычный синоним — UseDate()). Возвращаемым значением метода является значение даты выборки периодических реквизитов формы списка справочника.

Синтаксис:

ИспользоватьДату(<Дата>)

где <Дата> — выражение со значением типа "Дата".

Пример использования метода:

ИспользоватьДату(ДатаДок);

Установить элемент связанного справочника в качестве владельца для формы списка подчинённого справочника позволяет метод ИспользоватьВладельца() (англоязычный синоним — UseOwner()). При добавлении нового элемента текущего справочника данный параметр будет являться свойством нового элемента. Возвращаемым значением метода является значение владельца (до применения метода) для формы списка подчиненного справочника.

Синтаксис метода:

ИспользоватьВладельца(<Владелец>, <ФлагИзменения> )

где

  • <Владелец> — выражение со значением элемента справочника-владельца. Параметр является необязательным. Если параметр не задан, то значение владельца не меняется;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения владельца. Возможные значения: 1 — пользователь может изменить владельца интерактивно; 0 — пользователь не может интерактивно изменить владельца. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИспользоватьВладельца(Сотр, 0);

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

Синтаксис метода:

ИспользоватьРодителя(<Родитель>, <ФлагИзменения> )

где

  • <Родитель> — выражение со значением группы справочника — нового родителя. Параметр является необязательным. Если параметр не задан, то значение родителя не меняется;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения родителя. Возможные значения: 1 — пользователь может изменить родителя интерактивно; 0 — пользователь не может интерактивно изменить родителя. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИспользоватьРодителя(ВыбГруппаСотр, 1);

Установить режим иерархического списка справочника позволяет метод ИерархическийСписок() (англоязычный синоним — HierarchicalList()). Возвращаемым значением метода является значение флага иерархического списка для формы списка справочника до момента применения метода.

Синтаксис метода:

ИерархическийСписок(<ФлагИерархСписка> , <ФлагИзменения>)

где

  • <ФлагИерархСписка> — флаг иерархического списка. Возможные значения: 1 — иерархический список; 0 — неиерархический список;
  • <ФлагИзменения> — необязательный параметр. Этим флагом регулируется возможность интерактивного изменения флага иерархического списка. Возможные значения: 1 — пользователь может изменить иерархичность интерактивно; 0 — пользователь не может интерактивно изменить иерархичность. Если параметр не задан, то значение флага не меняется.

Пример использования:

ИерархическийСписок(1, 1);

Установить режим выбора групп для формы списка справочника, которая открыта в режиме выбора или подбора элемента, позволяет метод ВыборГруппы() (англоязычный синоним — SelectGroup()). Возвращаемым значением метода является текущее числовое значение режима выбора групп (на момент до исполнения метода).

Примечание: По умолчанию, выборка элементов справочников для полей в формах документов, журналов и справочников установлена без выбора групп, а в форме отчёта с выбором групп. Поэтому реально имеет смысл применять данный метод только в том случае, если надо изменить режим выбора групп.

Синтаксис метода:

ВыборГруппы(<Режим>)

где <Режим> — числовое выражение. Возможные значения: 1 — выбирать группы; 0 — не выбирать группы. Параметр является необязательным. Если параметр не задан, то значение флага не меняется.

Пример использования:

// Задаем выборку без групп
ВыборГруппы(0);

Установить способ редактирования элементов справочника позволяет метод РедактироватьВДиалоге() (англоязычный синоним — EditInForm()). Возвращаемым значением метода является значение установленного на данный момент (до применения метода) способа редактирования элементов справочника.

Синтаксис метода:

РедактироватьВДиалоге(<Способ>, <Разрешение>)

где

  • <Способ> — способ редактирования элемента справочника. Возможные значения: 1 — в диалоге; 0 — в строке. Параметр является необязательным;
  • <Разрешение> — флаг разрешения пользователю менять способ редактирования. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.

Пример использования:

ТекСп = РедактироватьВДиалоге(); // узнаем какой установлен способ
РедактироватьВДиалоге(1);        // установить редактирование в диалоге
РедактироватьВДиалоге(1, 0);     // установить редактирование в диалоге
                                 // и запретить его менять

Управлять режимом автоматического определения списка изменённых периодических реквизитов и показом диалога для выбора записываемых периодических реквизитов (см. рис. ниже) позволяет метод СохранениеПериодическихРеквизитов() (англоязычный синоним — РеriodicAttributesSaving()).

Запись периодических реквизитов

Примечание: При отсутствии данного метода в Модуле формы списка справочника при записи элемента справочника диалог отображается со всеми периодическими реквизитами.

Синтаксис метода:

СохранениеПериодическихРеквизитов(<ВариантВызова>, <Список>)

где

  • <ВариантВызова> — число, определяющее вариант вызова метода. Возможные значения:
    • 1 — включить автоматический режим определения списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 2 — включить автоматический режим определения списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 3 — выполнить определение списка изменённых реквизитов с показом диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 4 — выполнить определение списка изменённых реквизитов без показа диалога (параметр <Список> определяет набор анализируемых реквизитов);
    • 5 — выдать/установить список сохраняемых периодических реквизитов. Метод возвращает установленный список периодических реквизитов, которые будут записываться на момент до вызова метода. Если параметр <Список> указан, то устанавливается список периодических реквизитов, которые должны быть записаны.
  • <Список> — строковое выражение, в котором через запятую перечислены имена периодических реквизитов справочника, которые должны выводится в диалоге (если диалог показывается), или по которым будет записан элемент истории (если диалог не показывается). Если указан символ «*», то считается, что в список включены все периодические реквизиты справочника. Параметр является необязательным. По умолчанию предполагается, что в списке все периодические реквизиты справочника.

Пример использования метода:

// Здесь мы работаем в локальном контексте модуля Формы элемента справочника.
// В справочнике есть несколько реквизитов, которые являются периодическими реквизитами
СохранениеПериодическихРеквизитов(1, "ЦенаРозн, ЦенаОптов");

Принудительно установить отбор для списка справочника позволяет метод УстановитьОтбор() (англоязычный синоним — SetSelection()).

Синтаксис метода:

УстановитьОтбор(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — строковое выражение — строка с именем реквизита справочника, по которому установлен отбор (у реквизита в Конфигураторе должен быть установлен флажок «Отбор по реквизиту»). Если это значение пустое, то отбор отключается;
  • <3начение0тбора> — значение отбора. Параметр является необязательным.

Пример использования:

Процедура ПриОткрытии()
   Перем Тип;
   Перем Знач;
   БылОтбор = ПолучитьОтбор(Тип, Знач);
      Если .... Тогда  // что-либо проверяем
         УстановаитьОтбор("Имя", "Коля");
      ИначеЕсли БылОтбор = 1 Тогда
         // вернем назад
         УстановитьОтбор(Тип, Знач);
      КонецЕсли;
КонецПроцедуры

Проверить, был ли ранее установлен отбор позволяет метод ПолучитьОтбор() (англоязычный синоним — GetSelection()). Метод возвращает число 1, если отбор есть, или 0, если отбора нет. В параметры же метода возвращается текущее значение установленного отбора.

Синтаксис метода:

ПолучитьОтбор(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — имя переменной, куда вернётся строковое значение имени отбора;
  • <3начение0тбора> — имя переменной, куда вернётся значение отбора.

Пример использования метода был приведён выше.

Установить доступные виды отборов списка справочника для вызова их в интерактивном режиме (см. рис. ниже) позволяет метод ВидыОтбора() (англоязычный синоним — KindsOfSelection()). Возвращаемым значением метода является строковое значение, содержащее текущий список имён отборов (на момент до исполнения метода), разделённых запятыми.

Синтаксис метода:

ВидыОтбора(<СписокИменОтборов>)

где <СписокИменОтборов> — строка со списком (через запятую) имён тех реквизитов, отбор по которым допускается, или символ «*» — для всех видов отборов.

Пример использования:

Процедура ПриОткрытии()
   ВидыОтбора("ТипСклада, ТипЦен");
КонецПроцедуры

Результат:

Отбор по реквизиту

Установить в форме списка справочника закладки для интерактивного осуществления отбора позволяет метод ЗакладкиОтбора() (англоязычный синоним — TabCtrlSelection()).

Синтаксис метода:

ЗакладкиОтбора(<ИмяОтбора>, <3начение0тбора>)

где

  • <ИмяОтбора> — строковое выражение, содержащее имя отбора;
  • <3начение0тбора> — значение отбора, который будет установлен первоначально.

Пример использования:

ЗакладкиОтбора("Имя", "Коля");

Реализовать фильтрацию (установить нединамический фильтр) элементов справочника позволяет метод ИспользоватьСписокЭлементов() (англоязычный синоним — UseItemList()). Метод рекомендуется применять в предопределённых процедурах ПриСменеРодителя(), ПриОткрытии(), ПриСменеИерархии(). При этом формируется список «разрешённых» элементов, который передаётся форме списка справочника при помощи данного метода. Данный список должен являться подмножеством тех элементов, которые обычно отображаются в форме списка без применения фильтра.

Примечание: После вызова метода ИспользоватьСписокЭлементов() форма списка справочника не позволяет вводить новый элемент, копировать и т.п.

Синтаксис метода:

ИспользоватьСписокЭлементов(<СписокЗначений>)

где <СписокЗначений> — необязательный параметр. Значение типа "СписокЗначений". Должен представлять собой список элементов справочника, выбранных для просмотра. Если это значение пустое, то фильтр отключается.

Пример использования:

Процедура УстановитьФильтр(ВыбПризнак)
   Список = СоздатьОбъект("СписокЗначений");
   Буфер = СоздатьОбъект("Справочник.Главный");
   // Отбираем только те элементы, которые могут
   // отображаться в текущем списке
   Буфер.ИспользоватьРодителя(ИспользоватьРодителя());
   Буфер.ВключатьПодчиненные(0);
   Буфер.ВыбратьЭлементы();
   Пока Буфер.ПолучитьЭлемент() = 1 Цикл
      // Отбираем только те элементы, которые удовлетворяют
      // заданному признаку
      Если (Буфер.Признак = ВыбПризнак) Тогда
         Список.ДобавитьЗначение(Буфер.ТекущийЭлемент());
      КонецЕсли;
   КонецЦикла;
   ИспользоватьСписокЭлементов(Список);
КонецПроцедуры

Установить способ сортировки элементов справочника позволяет метод Сортировка() (англоязычный синоним — SortOrder()). Возвращаемым значением метода является текущее значение установленного на данный момент (до применения метода) способа сортировки элементов справочника.

Синтаксис метода:

Сортировка(<Способ>, <Разрешение>)

где

  • <Способ> — строка с именем устанавливаемой сортировки. Возможные значения: «Код» («Code»), «Наименование» («Description») или имя реквизита по которому устанавливается сортировка;
  • <Разрешение> — флаг разрешения пользователю менять способ сортировки. Возможные значения: 1 — разрешить; 0 — запретить. Параметр является необязательным.

Пример использования:

// Установить сортировку по наименовнаию и запретить ее менять
Сортировка("Наименование", 0);

// Получить текущее значение сортировки и установить сортировку
// по реквизиту "Оклад"
СтСорт = Сортировка("Оклад");

Установить список реквизитов, для которых допускается просмотр истории, позволяет метод ПросмотрИстории() (англоязычный синоним — ViewHistory()). Возвращаемым значением метода является текущий (на момент до вызова метода) список реквизитов, просмотр истории которых допускается.

Синтаксис метода:

ПросмотрИстории(<СписокРеквизитов>)

где <СписокРеквизитов> — строка со списком идентификаторов (через запятую) тех реквизитов, просмотр истории которых допускается.

Пример использования:

Процедура ПриОткрытии()
   ПросмотрИстории("Оклад, Тариф, Подразделение");
КонецПроцедуры

Предопределённые процедуры Модуля формы справочника

Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях форм справочника. К ним относятся программные модули: Модуль формы элемента справочника, Модуль формы группы справочника.

Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.

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

Предопределённая процедура ВводНового() (англоязычный синоним — InputNew()) вызывается в системе «1С:Предприятие» неявно в момент выбора пункта меню «Действия -> Новый» при работе со справочниками. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые элементы), ввода нового элемента и открытие его формы не будет выполнено.

Синтаксис процедуры:

Процедура ВводНового(<ПризнКопирования>, <ОбъектКопирования>)
   . . .
КонецПроцедуры

где

  • <ПризнКопирования> — признак того, что объект введён копированием. Число: 1 — объект введён копированием, 0 — просто новый объект. Данный признак может быть использован для анализа необходимости инициализации реквизитов нового объекта;
  • <ОбъектКопирования> — объект, который был скопирован.

Предопределённая процедура ПриЗаписи() (англоязычный синоним — OnWrite()) вызывается в системе «1С:Предприятие» при интерактивной записи элемента справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись элемента справочника не будет выполнена.

Синтаксис процедуры:

Процедура ПриЗаписи(<СписокПериодРекв>)
   . . .
КонецПроцедуры

где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.

Пример использования:

Процедура ПриЗаписи(СписокРекв)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если ТекущийЭлемент() = Константа.НашаФирма Тогда
         Предупреждение("У вас нет права менять реквизиты!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённые процедуры Модуля формы списка справочника

Описанные в данном разделе системные предопределённые процедуры должны располагаться только в Модулях формы списка справочника.

Системные предопределённые процедуры не является встроенными процедурами языка. Для них зарезервированы только название и синтаксис. Тело процедур должно быть написано самим разработчиком в соответствующих программных модулях. Вызов предопределённых процедур на исполнение производится в системе «1С:Предприятие» неявно при возникновении соответствующего события.

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

Предопределённая процедура ПриВводеСтроки() (англоязычный синоним — OnNewLine()) вызывается в системе «1С:Предприятие» при интерактивном вводе новой строки (до начала ввода) в форме списка справочника. Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя вводить новые строки списка справочника), то новая строка списка справочника не будет инициирована.

Пример использования:

Процедура ПриВводеСтроки()
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права добавлять строки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриРедактированииНовойСтроки() (англоязычный синоним — OnEditNewLine()) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования новой строки списка справочника (после того, как новая строка уже заведена). Параметры у процедуры отсутствуют. Данная процедура может использоваться, например, для установки начальных значений (по умолчанию) реквизитов нового элемента справочника. В данной предопределённой процедуре установка статуса возврата не имеет смысла, так как отказаться от ввода новой строки в этот момент уже невозможно.

Пример использования:

Процедура ПриРедактированииНовойСтроки()
   Оклад = 100000;
   Пдр = СоздатьОбъект("Справочник.Подразделения");
   Пдр.НайтиПоКоду(1);
   Подразделение = Пдр.ТекущийЭлемент();
   Город = Константа.НашГород;
КонецПроцедуры

Предопределённая процедура ПриНачалеРедактированияСтроки() (англоязычный синоним — OnStartEditLine()) вызывается в системе «1С:Предприятие» в момент начала интерактивного редактирования существующей строки списка справочника (кроме новой). Параметры у процедуры отсутствуют. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять значения реквизитов справочника), запись не будет изменена.

Пример использования:

Процедура ПриНачалеРедактированияСтроки()
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("У вас нет права изменять строки!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриЗаписи() (англоязычный синоним — OnWrite()) вызывается в системе «1С:Предприятие» при интерактивной записи строки списка справочника. Если в данной предопределённой процедуре установить статус возврата в 0 (например, если данному пользователю нельзя изменять некоторые элементы справочника), то запись строки списка справочника не будет выполнена.

Синтаксис процедуры:

Процедура ПриЗаписи(<СписокПериодРекв>)
   . . .
КонецПроцедуры

где <СписокПериодРекв> — строковое значение — список разделённых запятыми изменяемых периодических реквизитов справочника. В данный параметр система «1С:Предприятие» передаёт перечень периодических реквизитов, которые были интерактивно выбраны пользователем для обновления в окне диалога выбора. В теле процедуры значение данного параметра может быть изменено, что позволяет в данной процедуре непосредственно управлять списком записываемых значений периодических реквизитов.

Пример использования:

Процедура ПриЗаписи(СписокРекв)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если ТекущийЭлемент() = Константа.НашаФирма Тогда
         Предупреждение("У вас нет права менять реквизиты!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриПереносеЭлементаВДругуюГруппу() (англоязычный синоним — OnMoveIntoOtherGroup()) вызывается в системе «1С:Предприятие» при интерактивном переносе элемента справочника в другую группу. Если в данной предопределённой процедуре установить статус возврата в 0, то перенос не будет произведён.

Синтаксис процедуры:

Процедура ПриПереносеЭлементаВДругуюГруппу(<Элемент>, <Группа>)
   . . .
КонецПроцедуры

где

  • <Элемент> — значение элемента справочника, который переносится;
  • <Группа> — значение группы справочника, в которую переносится элемент справочника.

Предопределённая процедура ПриВыбореРодителя() (англоязычный синоним — OnSetParent()) вызывается в системе «1С:Предприятие» при интерактивной смене родительской группы справочника (выбор следующего или предыдущего уровня). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор родительской группы не будет произведён.

Синтаксис процедуры:

Процедура ПриВыбореРодителя(<Элемент>)
   . . .
КонецПроцедуры

где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве родителя.

Пример использования:

Процедура ПриВыбореРодителя(Родитель)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если Родитель = ЗапрещеннаяГруппа Тогда
         Предупреждение("Вам запрещено просматривать эту группу!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриВыбореВладельца() (англоязычный синоним — OnSetOwner()) вызывается в системе «1С:Предприятие» при интерактивном выборе владельца подчинённого справочника (при интерактивной смене владельца, т.е. смене позиции в справочнике-владельце, которая приводит к смене отображаемых в подчинённом справочнике элементов). Если в данной предопределённой процедуре установить статус возврата в 0, то выбор владельца подчинённого справочника не будет произведён.

Синтаксис процедуры:

Процедура ПриВыбореВладельца(<Элемент>)
   . . .
КонецПроцедуры

где <Элемент> — значение элемента справочника, который интерактивно устанавливается в качестве владельца подчинённого справочника.

Пример использования:

Процедура ПриВыбореВладельца(Владелец)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если Владелец = ЗапрещенныйВладелец Тогда
         Предупреждение("Нельзя просматривать эти элементы!", 2);
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриСменеИерархии() (англоязычный синоним — OnHierarchyChange()) вызывается в системе «1С:Предприятие» при интерактивной смене режима отображения иерархии справочника (пункт меню «Иерархический список»). Если в данной предопределённой процедуре установить статус возврата в 0, то смена режима отображения иерархии справочника не будет произведена.

Синтаксис процедуры:

Процедура ПриСменеИерархии(<Способ>)
   . . .
КонецПроцедуры

где <Способ> — значение устанавливаемого способа просмотра справочника: 1 — иерархических список; 0 — все элементы сразу.

Пример использования:

Процедура ПриСменеИерархии(ВыбСпособ)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("Нельзя менять режим просмотра!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённая процедура ПриУстановкеОтбора() (англоязычный синоним — OnSetSelectInJournal()) вызывается в системе «1С:Предприятие» при интерактивной установке отбора любым способом (отбор, быстрый отбор, отбор по значению, история отбора) и при отключении отбора. Если в данной предопределённой процедуре установить статус возврата в 0, то установка отбора справочника не будет произведена.

Синтаксис процедуры:

Процедура ПриУстановкеОтбора(<ТипОтбора>, <3начение0тбора>)
   . . .
КонецПроцедуры

где

  • <ТипОтбора> — строковое значение — тип устанавливаемого отбора (имя реквизита справочника, по которому устанавливается отбор);
  • <3начение0тбора> — устанавливаемое значение отбора.

Пример использования:

Процедура ПриУстановкеОтбора(ТипОтбора, 3начение)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Предупреждение("Вам нельзя устанавливать отбор!", 2);
      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Предопределённые процедуры Глобального модуля

Вызов предопределённой процедуры ПриУдаленииЭлемента() (англоязычный синоним — OnDeleteItem()) неявно производится системой «1С:Предприятие» при интерактивном удалении элемента справочника и в случае отмены пометки на удаление.

Синтаксис процедуры:

Процедура ПриУдаленииЭлемента(<Элемент>, <Режим>)
    . . .
КонецПроцедуры

где

  • <Элемент> — ссылка на удаляемый элемент;
  • <Режим> — выражение, значение которого соответствует флагу режима удаления: 1 — непосредственное удаление, 0 — пометка на удаление.

Обычно данная процедура используется для расширения возможности управления правами доступа пользователя к системе. Если в данной предопределённой процедуре статус возврата установить в 0, то установка пометки удаления элемента справочника или её снятие не будет выполнено. Определить же, что стало причиной вызова предопределённой процедуры — установка или снятие пометки удаления, — можно с помощью метода ПометкаУдаления():

Процедура ПриУдаленииЭлемента(Элем, Режим)
   Если НазваниеНабораПрав() = "Продавец" Тогда
      Если (Элем.ПометкаУдаления() = 1 Тогда
         // Если элемент помечен на удаление
         Предупреждение("У вас нет права отменять удаление!", 3);
      Иначе
         // Если элемент не помечен на удаление
         Предупреждение("У вас нет права удалять элементы справочника!", 3);
      КонецЕсли;

      СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры

Другие статьи по схожей тематике