Перечисление — это средство работы с элементами данных, список возможных значений которых жёстко задан в конфигурации и при выполнении задачи не может быть изменён. Так, например, для перечисления «Виды контрагентов» может быть задан следующий список значений:
Физическое лицо
;Дочернее общество
;Зависимое общество
;Прочая организация
.
В отличие от справочника, списки значений в перечислении задаются исключительно в процессе их создания в Конфигураторе и при выполнении задачи не могут быть изменены.
Создание и редактирование перечислений в Конфигураторе
Для создания нового перечисления в Конфигураторе необходимо щёлкнуть правой кнопкой мыши по значку «Перечисления» или значку любого конкретного перечисления и в выпадающем контекстовом меню выбрать пункт «Новое Перечисление» (см. рис. ниже). Тоже самое можно сделать и через главное меню Конфигуратора, последовательно выбрав пункты «Действия −> Новый элемент».
Открыть же для редактирования уже созданное в конфигурации перечисление можно выбрав в контекстовом меню пункт «Редактировать» (см. рис. выше) или в главном меню — пункты «Действия −> Редактировать элемент». При этом на экран будет выведено окно редактирования объекта типа "
Перечисление"
(см. рис. ниже).
В окне свойств объекта типа "
Перечисление"
необходимо указать идентификатор перечисления, по которому к перечислению можно будет обращаться в программном коде. В поле «Синоним» можно указать необязательный синоним идентификатора перечисления, который в дальнейшем будет использоваться при создании надписей к полям ввода типа "
Перечисление"
в различных формах. В поле «Комментарий» можно указать необязательный комментарий, текст которого в дальнейшем может использоваться для вывода всплывающих подсказок.
Для добавления нового значения в перечисление необходимо щёлкнуть по кнопке «Новый» под полем «Значения» (см. рис. выше). При этом на экран будет выведено окошко редактирования свойств нового значения (см. рис. ниже), в котором можно задать идентификатор значения (по идентификатору можно будет обращаться к значению в программном коде), строку-комментарий и экранное представление значения (как оно будет выводиться в полях форм и в списках для выбора).
Обращение к перечислениям из программного кода
Средства языка 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()
). Параметры у метода отсутствуют, а возвращаемым значением является строка, содержащая синоним вида (если синоним не указан, возвращается идентификатор).
Пример использования:
// ИзмерениеТовара – реквизит диалога Представление = ИзмерениеТовара.ПредставлениеВида();
Другие статьи по схожей тематике