Перечисления в 1С

Apr 17, 2022 17:01

image Click to view



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

Создать перечисление в 1С

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



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



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

Значение перечисления 1С

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



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



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



Точно также добавим несколько других значений.



Перечисление в реквизите объекта 1С

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

Создадим у справочника контрагенты реквизит Статус.



В палитре свойств этого реквизита установим для него тип ПеречислениеСсылка.ЮридическийСтатусКонтрегента.





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

Перечисление на управляемой форме 1С

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



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



Заметьте, названия значений перечисления в пользовательском режиме соответствуют синонимам значений перечисления.

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

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



После этого необходимо зайти в палитру свойств этого элемента формы (поле ввода), и в этой палитре найти свойство Вид.



По умолчанию у этого свойства установлено значение «Поле ввода», но можно поменять на другие. Нас интересует значение «Поле переключателя».



Если мы установим это значение, то внешний вид формы поменяется.



Вы видите, что на форме сейчас нет рядом с переключателями названий значений перечислений (стоят Значение 1, Значение 2). Чтобы они отобразились, нам нужно ввести значения переключателя в список выбора. Сделать это нужно в свойстве «Список выбора» поля ввода. После нажатия на кнопку «…» этого свойства, откроется форма списка выбора.



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



Но представления значений, придется заполнить вручную.



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



Также другой вид будет в пользовательском режиме «1С: Предприятия» .



Кроме стандартного переключателя в платформе 1С есть возможность сделать тумблер, суть у него будет такая же, как и у переключателя, но внешний вид будет отличаться.

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



После установки этого значения, внешний вид формы опять поменяется.



Тумблер представлен в виде кнопок, причем пользователь может нажать только на одну из них. У разработчика имеется возможность управлять внешним видом тумблера при помощи свойств, которые расположены в категории «Расположения» палитры свойств поля переключателя. Например, можно сделать все кнопки тумблера одинаковыми по ширине.



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



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

Перечисления 1С - программное использование

Программная работа с перечислениями в 1С отличается в зависимости от того в каком контексте мы работаем с этим перечислением: в серверном или клиентском (конкретно на тонком клиенте и веб-клиенте). Поэтому разберем оба варианта по отдельности, также изучим, как работать с перечислениям в языке запросов 1С.

Перечисление в серверном контексте

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

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

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

&НаСервере
Процедура СоздатьСправочникНаСервере()
НовыйКонтр = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтр.Наименование = "Иванов и Партнеры";
НовыйКонтр.Статус = Перечисления.ЮридическийСтатусКонтрегента.ЮрЛицо;
НовыйКонтр.Записать();
КонецПроцедуры

&НаКлиенте
Процедура СоздатьСправочник(Команда)
СоздатьСправочникНаСервере();
КонецПроцедуры

В этом коде мы создаем объект справочника, заполняем его реквизиты какими-то значениями, а потом сохраняем. Реквизиту Статус мы присваиваем конкретное значение перечисления ЮридическийСтатусКонтреганта. Вы заметили, что к нужному перечислению мы обращаемся посредством объекта Перечисления, который имеет типа ПеречисленияМенеджер.

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

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



Если по какой-то причине нам не нужно записывать определенное значение перечисления, то мы можем записать пустую ссылку на это перечисление, обратившись к методу менеджера перечисления ПустаяСсылка(). Тогда будет иметь место следующий код.

НовыйКонтр = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтр.Наименование = "Иванов и Партнеры";
НовыйКонтр.Статус = Перечисления.ЮридическийСтатусКонтрегента.ПустаяСсылка();
НовыйКонтр.Записать();

Перечисление в клиентском контексте (на тонком клиенте)

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

Приведу небольшой пример, на котором покажем, как работать с перечислениями на клиенте, пример больше учебный, призванный показать, как работать с перечислениями в клиентском контексте, и не несет какого-либо прикладного смысла.

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

Поскольку в предыдущей статье мы создали перечисление ЮридическийСтатусКонтрегента, то назовем реквизит формы СтатусИП, и будем при выполнении команды в него записывать соответствующее значение перечисления.

Создадим реквизит, поместим его на форму, и также я создам команду, которую помещу на форму.



Для этой команды создадим клиентский обработчик.



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

&НаКлиенте
Процедура Установить(Команда)

СтатусИП = Перечисления.ЮридическийСтатусКонтрегента.ИП;

КонецПроцедуры

Если мы сейчас сделаем синтаксис-проверку модуля на ошибки, то в некоторых случаях может выдать ошибку, а в некоторых нет. Всё зависит от того, настроена ли в параметрах проверка в режиме тонкого клиента.

Проверим это. Зайдем в параметры конфигурации по пути Главное меню - Сервис - Параметры



В этой форме на закладке Модули в подзакладке Проверка нас интересует флаг Тонкий клиент.



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



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

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

&НаКлиенте
Процедура Установить(Команда)

СтатусИП = ПредопределенноеЗначение("Перечисление.ЮридическийСтатусКонтрегента.ИП");

КонецПроцедуры

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





Если мы сейчас запустим «1С: Предприятие» под тонким клиентом, то значением в реквизит прекрасно запишется.



Заметили, что обращались мы к имени значения перечисления, а на форме отображается синоним значения.

Перечисление в языке запросов 1С

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

В консоли запросов откроем конструктор запроса, выберем таблицу Контрагенты и поля этой таблицы Наименование и Статус.



На закладке Условия установим, чтобы отбирались контрагенты со статусом ИП.



В этом случае мы используем функцию Значение языка запросов 1С, где в качестве параметра указываем путь к нужному нам значению перечисления.

У нас должен получиться вот такой запрос:

ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование,
Контрагенты.Статус КАК Статус
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Статус = ЗНАЧЕНИЕ(Перечисление.ЮридическийСтатусКонтрегента.ИП)

Который будет возвращать контрагентов только с нужным статусом.



Функцию ЗНАЧЕНИЕ можно использовать не только в условиях, но и в секции выбрать. Например, можно сделать такой запрос.

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ЮридическийСтатусКонтрегента.ИП) КАК Статус

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ЮридическийСтатусКонтрегента.ЮрЛицо)

Который будет возвращать два значения перечисления.



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

Код запроса будет в этом случае следующим:

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ЮридическийСтатусКонтрегента.ИП) КАК Статус
ПОМЕСТИТЬ втПеречисления

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
ЗНАЧЕНИЕ(Перечисление.ЮридическийСтатусКонтрегента.ЮрЛицо)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование,
Контрагенты.Статус КАК Статус
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Статус В
(ВЫБРАТЬ
вт.Статус
ИЗ
втПеречисления КАК вт)

И этот запрос будет выдавать нужный результат.



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

ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование,
Контрагенты.Статус КАК Статус
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Статус = &Статус

Который будет выполняться следующим образом.



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

ВЫБРАТЬ
Контрагенты.Наименование КАК Наименование,
Контрагенты.Статус КАК Статус
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.Статус в (&Статусы)

С таким результатом.



Смотрите также:
Электронный учебник по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, ни­дер­ландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С
Программирование в 1С 8.3 с нуля - краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

программирование

Previous post Next post
Up