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

Работа с перечислениями

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

  • Физическое лицо;
  • Дочернее общество;
  • Зависимое общество;
  • Прочая организация.

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

Создание и редактирование перечислений в Конфигураторе

Для создания нового перечисления в Конфигураторе необходимо щёлкнуть правой кнопкой мыши по значку «Перечисления» или значку любого конкретного перечисления и в выпадающем контекстовом меню выбрать пункт «Новое Перечисление» (см. рис. ниже). Тоже самое можно сделать и через главное меню Конфигуратора, последовательно выбрав пункты «Действия −> Новый элемент».

Добавление нового перечисления

Открыть же для редактирования уже созданное в конфигурации перечисление можно выбрав в контекстовом меню пункт «Редактировать» (см. рис. выше) или в главном меню — пункты «Действия −> Редактировать элемент». При этом на экран будет выведено окно редактирования объекта типа "Перечисление" (см. рис. ниже).

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

Окно свойств перечисления

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

Окно свойств значения перечисления

Обращение к перечислениям из программного кода

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

Перечисление.<ИмяПереч>.<ЗначениеПереч>

где

  • <ИмяПереч> — идентификатор вида перечисления, как он записан в Конфигураторе;
  • <ЗначениеПереч> — идентификатор значения перечисления, как он записан в Конфигураторе.

Пример обращения к значению перечисления в программном коде:

Если Док.Сотрудник.Тип = Перечисление.ТипСотрудника.Штатный Тогда
   Льготы = 1;
Иначе
   Льготы = 0;
КонецЕсли;

Методы перечислений

Объект типа "Перечисление" является частью глобального контекста системы «1С:Предприятие» и обладает целым рядом методов.

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

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

ПолучитьАтрибут(<ИмяПеречисления>)

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

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

Для i=1 По Перечисление.ПолучитьАтрибут(ВидПеречисления).КоличествоЗначений() Цикл
   СписокЗначенийПеречисления.НоваяСтрока();
   СписокЗначенийПеречисления.Значение = Перечисление.ПолучитьАтрибут(ВидПеречисления).ЗначениеПоНомеру(i);
КонецЦикла;

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

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

// отобразим все значения перечисления
Всего = Перечисление.ВидыТоваров.КоличествоЗначений();
Для Ном = 1 По Всего Цикл
   Сообщить(Перечисление.ВидыТоваров.ЗначениеПоНомеру(Ном));
КонецЦикла;

Получить значение перечисления, соответствующее указанному номеру позиции в списке, позволяет метод ЗначениеПоНомеру() (англоязычный синоним — ValueByIndex()). Возвращаемым значением метода является строковое представление значения перечисления.

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

ЗначениеПоНомеру(<Номер>)

где <Номер> — числовое выражение, содержащее номер позиции значения перечисления, заданный в Конфигураторе. Нумерация позиций значений начинается с 1.

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

Получить строковое представление значения перечисления по идентификатору позволяет метод ЗначениеПоИдентификатору() (англоязычный синоним — ValueByIdentifier()). Если указанный идентификатор в перечислении не найден, возвращается пустое значение.

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

ЗначениеПоИдентификатору(<Идентификатор>)

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

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

ЗначениеДляВыборки = Перечисление.ВидыТоваров.ЗначениеПоИдентификатору("Продукты");

Методы значений перечислений

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

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

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

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

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

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

// отобразим порядковый номер значения перечисления
Сообщить(Перечисление.КатегорииТоваров.Продовольственные.ПорядковыйНомер());

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

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

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

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

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

// ИзмерениеТовара – реквизит диалога
ВидПереч = ИзмерениеТовара.Вид();

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

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

// ИзмерениеТовара – реквизит диалога
Представление = ИзмерениеТовара.ПредставлениеВида();

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