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

Возврат к предыдущей части 1.2.4 Указатели

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

Объявление перечисления начинается с ключевого слова enum и имеет два формата представления.

Объявление перечисления задает тип переменной перечисления и определяет список именованных констант, называемый списком-перечисления. Значением каждого имени списка является некоторое целое число.

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

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

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

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

идентификатор

Каждый идентификатор именует элемент перечисления. Все идентификаторы в списке enum должны быть уникальными. В случае отсутствия константного выражения первому идентификатору соответствует значение 0, следующему идентификатору — значение 1 и т.д. Имя константы перечисления эквивалентно ее значению.

Идентификатор, связанный с константным выражением, принимает значение, задаваемое этим константным выражением. Константное выражение должно иметь тип int и может быть как положительным, так и отрицательным. Следующему идентификатору в списке присваивается значение, равное константному выражению плюс 1, если этот идентификатор не имеет своего константного выражения. Использование элементов перечисления должно подчиняться следующим правилам:

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

Пример:

enum week { SUB = 0, /* 0 */ VOS = 0, /* 0 */ POND, /* 1 */ VTOR, /* 2 */ SRED, /* 3 */ HETV, /* 4 */ PJAT /* 5 */ } rab_ned ;

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

Во втором формате используется имя тега перечисления для ссылки на тип перечисления, определяемый где-то в другом месте. Имя тега перечисления должно относится к уже определенному тегу перечисления в пределах текущей области видимости. Так как тег перечисления объявлен где-то в другом месте, список перечисления не представлен в объявлении.

Пример:
enum week rab1;

В объявлении указателя на тип данных перечисления и объявляемых typedef для типов перечисления можно использовать имя тега перечисления до того, как данный тег перечисления определен. Однако определение перечисления должно предшествовать любому действию используемого указателя на тип объявления typedef. Объявление без последующего списка описателей описывает тег, или, если так можно сказать, шаблон перечисления.

Клиенты как известно бывают компаниями и частными лицами. Список клиентов содержится в справочнике Контрагенты. Как разбить их на две группы?

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

Справочник как перечисление 1С

Допустим, для хранения наших двух значений мы добавим справочник. Назовем его ВидыКлиентов. Мы внесем эти два варианта в справочник.

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

Проверять по коду или наименованию нельзя – пользователь может их изменить. Может быть использовать константу?

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

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

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

В этом окне мы можем добавить два новых предопределенных значения 1С.

При добавлении мы указываем два названия:

  • Которое будет доступно из в тексте программ 1С
  • Которое будет видеть пользователь.

Ура! Теперь мы запросто можем использовать их в программе!

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

Однако что же делать, если пользователь зайдет в наш справочник, введет туда третий вариант и выберет его?

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

Перечисления 1С – это объект 1С, который позволяет в конфигураторе задать список предопределенных значений, которые:

  • Сможет использовать пользователь, выбирая в тех или иных полях
  • Которые пользователь не может изменять
  • Которые доступны в тексте программ напрямую.

Чтобы создать перечисления 1С – добавьте его в окне конфигурации в ветке Перечисления 1С.

Потом раскройте само перечисление 1С и добавьте его значения.

Теперь на форме мы можем в качестве типа значения указать данное перечисление 1С. Пользователь может выбрать только одно из нами предопределенных значения.

Работая в программе 1С Предприятие 8.3, при заполнении справочников, документов, отчетов и т.п. мы часто видим перечисление в запросе, который мы открыли, определенных значений. Например:

  • Ставка НДС

Рис.1 Ставка НДС

  • Группа основных средств, при заполнении элемента справочника

Рис.2 Группа основных средств, при заполнении элемента справочника

  • И другие виды перечислений, при заполнении данных

Рис.3 И другие виды перечислений, при заполнении данных

Работа с перечислениями также имеет место при выполнении какого-то действия, например, при выборе печати или создании на основании документа (Рис.4-5) и т.п.

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

Элемент «Перечисление» в конфигураторе программы

Рассмотрим, как выглядит перечисление в Конфигураторе программы 1С. Открыв конфигурацию, в дереве метаданных мы видим блок «Перечисления».

Рис.4 Открыв конфигурацию, в дереве метаданных мы видим блок «Перечисления»

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

Рассмотрим, как выглядят наши перечисления изнутри. Для примера, найдем перечисление «Ставки НДС» и откроем его. На закладке «Основные» указывается имя перечисления и синоним объекта, который используется для описания его в программе, т.е. так, как видит его пользователь.

Рис.5 Для примера, найдем перечисление «Ставки НДС»

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

Рис.6 На закладке «Данные» мы видим все значения перечисления

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

Хотя все ставки уже введены, продолжим на этом примере. Чтобы добавить вариант значения перечисления нажимаем кнопку «Добавить» и в открывшемся окне задаем имя и синоним нового значения.

Рис.7 Добавляем вариант значения перечисления

Задаем значение НашаСтавка (для примера) и видим, что оно появилось в нашем списке. Так можно ввести, например, новые ставки НДС, если у вас не обновлена программа (ставку 20% уж очень хочется видеть в ней).

Рис.8 Задаем значение НашаСтавка

Используя имя перечисления, к нему можно обращаться в коде программы напрямую (перечисления из примера – НДС10, НДС18, БезНДС, НДС0).

Если ПредставлениеСтавкаНДС = «НДС18» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ИначеЕсли ПредставлениеСтавкаНДС = «НДС10» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ИначеЕсли ПредставлениеСтавкаНДС = «НДСО» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДСО; ИначеЕсли ПредставлениеСтавкаНДС = «ЕезНДС» Тогда

Фрагмент 1

Если ПредставлениеСтавкаНДС = «НДС18» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС18; ИначеЕсли ПредставлениеСтавкаНДС = «НДС10» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДС10; ИначеЕсли ПредставлениеСтавкаНДС = «НДСО» Тогда СтавкаНДС = Перечисления.СтавкиНДС.НДСО; ИначеЕсли ПредставлениеСтавкаНДС = «БезНДС» Тогда СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;

Фрагмент 2

Основными параметрами перечисления являются ссылка на объект и порядок его отображения.

Рис.9 Основными параметрами перечисления являются ссылка на объект и порядок его отображения

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

Рис.10 Формы выбора перечисления представлены формой списка и формой выбора

Так выглядит перечисление изнутри. Сохраняем наши изменения в «Конфигурация-Сохранить конфигурацию» или просто при закрытии соглашаемся с изменениями.

Рис.11 Так выглядит перечисление изнутри

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

Рис.12 И далее необходимо обновить конфигурацию базы данных

Объект изменен и принимаем предложение об изменении.

Рис.13 Объект изменен и принимаем предложение об изменении

Отражение изменения списка перечисления в 1С

Открываем программу и проверяем, как отразилось наше изменение «Ввод нового значения перечисления ставки НДС». Откроем в документе «Счет» выбор значения ставок. Мы видим, что в значении выбора появилось созданное нами значение «Наша ставка».

Рис.14 Отражение изменения списка перечисления в 1С

Вид выбора значения перечисления

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

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

Рис.15 Вид выбора значения перечисления

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

Рис.16 Перечисление в Конфигураторе

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

Рис.17 Поле переключателя

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

Рис.18 Откроем форму элемента для просмотра

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

Рис.19 Посмотрим форму документа

Как видим, значение вида ставки НДС – Поле ввода. Обратите внимание, что при выборе реквизита, в форме этот элемент обведен синей рамкой (см. % НДС).

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

1. Что такое перечисление в запросе?

2. Примеры перечисления 1С 8

3. Перечисление в запросе

Данная статья предназначена для помощи в освоении такого объекта конфигурации 1С как перечисление. Расскажем, как использовать его в тексте запроса 1С.

1. Что такое перечисление в запросе?

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

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

2. Примеры перечисления 1С 8

Рассмотрим пример перечисления 1С 8 в нашей базе.

В базе создано перечисление «Качество товаров». В него входят такие значения как: «Высокое/Обычное/Низкое»:

Перечисления можно использовать в различных других объектах конфигуратора, например, в справочнике или документе в 1С 8.3 (для примера возьмем документ Товары). Для этого тип реквизита 1С необходимо указать «ПеречисленияСсылка»:

Таким образом, при заполнении данного документа в пользовательском режиме 1С у нас будет возможность выбрать необходимое значение из имеющегося списка (в поле «Качество товара»):

3. Перечисление в запросе

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *