Как найти значение перечисления по имени

Авто добавление обработки в справочник Внешних обработок 0
Чтобы не изменять типовую конфигурацию приходится использовать типовой механизм внешних печатных форм и обработок. Данный код проверяет — добавлена ли открываемая обработка в конфигурацию, если нет — задает вопрос и при положительном ответе — автома


Ввести перечисление, выбор перечисления 2

// В 8-ой версии нет такой фунции, но можно сделать так:
ЗначПер=Перечисления.Важность.Средняя; //Установим перечисление предлагаемое выбрать по умолчанию
Если ВвестиЗначение(ЗначПер,»Выберите важность:») тогда
Сообщить(ЗначПер); //обработка в


Временные таблицы, что из себя представляют и как с ними работать? 7
Временные таблицы — хранятся на сервере и позволяют писать более простые запросы.
Временные таблицы хранятся в объекте типа МенеджерВременныхТаблиц . Когда этот объект уничтожается, уничтожаются и временные таблицы.
Чтобы создать временную таблицу


Выборка (перебор) элементов справочника 4

// Выбрать( , , , )
Номенклатура = Справочники.Номенклатура;
Отбор = Новый Структура(«ТипНоменклатуры»);
Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка();
Отбор.ТипНоменклатуры = Пусто;
Выборка = Номенклатура.Выбрать(,,Отбор, «Наимено


Выбрать движения, получить выборку записей регистра накопления 2
Пример 1 :
//Взаиморасчеты за период, хотя, это лучше выбирать запросом , он в примере 3
Отбор = Новый Структура(«Организация», Организация);
НаборЗаписей = РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Выбрать(ПериодРегистрации, КонецМе


Посмотреть все результаты поиска похожих

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

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

Перечисление является объектом метаданных ссылочного типа и поэтому метод ПустаяСсылка() возвращает пустое значение ссылки на перечисление данного вида.

Пример:

ВидКонтрагента = Перечисления.ВидыКонтрагентов.ПустаяСсылка();

Как получить имя значения перечисления заданное в метаданных?

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

ЗначениеПеречисления = Перечисления.ВидыКонтрагентов.Организация; ИмяПеречисления = ЗначениеПеречисления.Метаданные().Имя; 

Как получить индекс значения перечисления заданное в метаданных?

Метод Метаданные объекта ПеречислениеСсылка, как и у других аналогичных типов, выдает объект метаданных перечисления, а не значения перечисления.

Метод Индекс возвращает порядковый номер (индекс) перечисления в списке перечислений. Если не найдено, то возвращается -1.

ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(ЗначениеПеречисления); 

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

ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;

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

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

ПеречислениеСсылка = Перечисления[ИмяПречисления][ИмяЗначения];

Данную операцию целесообразно выполнить внутри оператора попытки :

 Функция ПолучитьСсылкуНаЗначениеПеречисления( пИмяПеречисления, пИмяЗначения ) Экспорт        
Попытка
Возврат Перечисления[пИмяПеречисления][пИмяЗначения];
исключение
Сообщить("Ошибка получения ссылки на значение перечисления. " + пИмяПеречисления + " :: " + пИмяЗначения);
Возврат неопределено;
КонецПопытки;
КонецФункции

КАК ИСПОЛЬЗОВАТЬ ПЕРЕЧИСЛЕНИЕ В ЗАПРОСЕ ?

 Запрос.Текст = "
|ВЫБРАТЬ
// ...

 |ГДЕ
| ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)

 // ...
|";

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

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

Как получить имя перечисления по синониму
Алгоритмически можно получить коллекцию перечислений из конфигурации и перебрав их в цикле сравнить значение реквизита синоним с параметром функции вернуть имя перечисления.
Исходный код функции ИмяПеречисленияПоСинониму (СинонимПеречисления):

// Возвращает имя перечисления по известному значению синонима

// Пример пСиснонимПеречисления = «Юр физ лицо» тип строка, 

// возвращаемое значение имя = «ЮрФизЛицо», тип строка

Функция ИмяПеречисленияПоСинониму( пСинонимПеречисления ) Экспорт

    КолекцияПеречислений = Метаданные.Перечисления;

Для каждого пНайденноеЗначение из КолекцияПеречислений Цикл

Если пНайденноеЗначение.Синоним = пСинонимПеречисления Тогда

Возврат пНайденноеЗначение.Имя;

КонецЕсли;

КонецЦикла;

Возврат неопределено;

КонецФункции // Имя Перечисления По Синониму

Функция размещена в примере конфигурации к данному разделу в общем модуле “Работа с перечислениями”.
Как получить имя значения перечисления, если известен синоним значения
Если известно перечисление, и известно, что одно из значений имеет известный нам синоним, то перебрав в цикле коллекцию значений перечисления можно получить его имя. Совокупность имени перечисления и имени значения перечисления позволяют получить ссылку на перечисление, которую уже можно применять в качестве значения реквизитов справочников, документов и регистров.
Исходный код функции ИмяЗначенияПеречисленияПоСинониму(ИмяПеречисления, СинонимЗначения):

// Функция возвращает имя реквизита данных перечисления по имени 

// перечисления и синониму его значения

// Принимаемые значения:

// пИмяПеречисления — тип строка. Имя объекта конфигурации «Перечисления»

// пСинонимЗначения — тип строка. Значение свойства Синоним реквизита данных перечисления

// Возвращаемое значение:

// Имя реквизита данных перечисления

Функция ИмяЗначенияПеречисленияПоСинониму( пИмяПеречисления, пСинонимЗначения ) Экспорт

    КолекцияЗначенийПеречисления = Метаданные.Перечисления[пИмяПеречисления].ЗначенияПеречисления;

Для каждого пНайденноеЗначение из КолекцияЗначенийПеречисления Цикл

Если пНайденноеЗначение.Синоним = пСинонимЗначения Тогда

Возврат пНайденноеЗначение.Имя;

КонецЕсли

КонецЦикла;

Возврат неопределено;

КонецФункции // Имя Значения Перечисления По Синониму

Функция размещена в примере конфигурации к данному разделу в общем модуле “Работа с перечислениями”.
Получение ссылки на значение перечисления по имени перечисления и по имени его значения
Если известно имя самого перечисления и имя его значения, то получить ссылку которая будет являться значением, например субконто, можно следующим образом:
ПеречислениеСсылка = Перечисления[пИмяПречисления][пИмяЗначения];
Исходный код функции ПолучитьСсылкуНаЗначениеПеречисления( пИмяПеречисления, пИмяЗначения )

// Возвращает ПеречисленияСсылка по «Имени» перечисления и «Имени» значения

// Пример пИмяПеречисления = «ЮрФизЛицо», пИмяЗначения = «ЮрЛицо», 

// результат: Перечисление ссылка на ЮрФизЛицо.ЮрЛицо

// пИмяПеречисления — тип строка

// пИмяЗначения — тип строка

Функция ПолучитьСсылкуНаЗначениеПеречисления( пИмяПеречисления, пИмяЗначения ) Экспорт

Попытка

Возврат Перечисления[пИмяПеречисления][пИмяЗначения];

исключение

        Сообщить(«Ошибка получения ссылки на значение перечисления. « + пИмяПеречисления + » :: « + пИмяЗначения);

Возврат неопределено;

КонецПопытки;

КонецФункции // Получить Ссылку На Значение Перечисления

Функция размещена в примере конфигурации к данному разделу в общем модуле “Работа с перечислениями”.
Использование значения перечисления в запросе
Возможность использования перечислений в запросах появилась в версии 8.1.5. В учебной версии 8.1.9.57 она описана во встроенной справке конфигуратора в разделе: 1С:Предприятие -> Встроенный язык -> Работа с запросами -> Язык запросов -> Использование предопределенных данных конфигурации. 
Текст запроса может содержать значения системных перечислений, которые могут быть присвоены полям в таблицах базы данных: ВидДвиженияНакопления, ВидСчета и ВидДвиженияБухгалтерии.
Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа:
ЗНАЧЕНИЕ(<ПредставлениеЗначения>)
Для системных перечислений представление значение имеет вид:
<ИмяСистемногоПеречисления>.<Значение>
Пример запроса может выглядеть следующим образом:

Запрос = Новый Запрос;

Запрос.Текст = «ВЫБРАТЬ

    |    ВидыНоменклатуры.Ссылка как ссылка,

    |    ВидыНоменклатуры.Порядок

    |ИЗ

    |    Перечисление.ВидыНоменклатуры КАК ВидыНоменклатуры

    |ГДЕ

    |    ВидыНоменклатуры.Ссылка = Значение(Перечисление.ВидыНоменклатуры.Услуга) «; 

    ТЗ = Новый ТаблицаЗначений;

    ТЗ = запрос.Выполнить().Выгрузить();

    ЭлементыФормы.ТабличноеПоле1.Значение = ТЗ;

    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();

Демонстрация работы с перечислениями в 1С
В качестве примера работы с менеджером коллекции значений перечисления можно скачать файл обновления конфигурации для платформы 1С версии 8.1 и демонстрационную обработку. Двойной щелчок мыши или нажатие клавиши обеспечивает вызов события “Выбор”, обработчик заполняет поля данных пСинонимПеречисления и пСинонимЗначение, а функционал общего модуля работа с перечислениями обеспечивает нахождение нужного значения типа ПеречислениеСсылка, который в форме имеет составной тип данных и рассчитан на работу только с версией cf из примера. При работе с другими конфигурациями следует отредактировать тип данных элемента формы пДанные.

Внешний вид экранной формы обработки по работе с синонимами перечислений для платформы 1С:

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

Если Вы хотите больше узнать о программировании в 1С, тогда регистрируйтесь на курс: 1С 8.3 Старт >>>

Изображение

Как получить значение перечисления по имени?

Я
   SAP

15.04.08 — 18:32

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

   artem666

1 — 15.04.08 — 18:43

чего? какое имя? обращайся просто — перечисления.твоеперечисление.имяперечисления

   SAP

2 — 15.04.08 — 18:45

У меня есть имя значения перечисления (символьная строка) мне надо имея это получить ссылку на значение, как это сделать?

   Scooter

3 — 15.04.08 — 18:46

здесь пошукай Книга знаний: v8: Работа с перечислениями

   Leksus

4 — 15.04.08 — 18:47

(0) Писать свою функцию, а так только по индексу

   SAP

5 — 15.04.08 — 18:53

Функцию, в смысле, компоненту?

   Asmody

Модератор

6 — 15.04.08 — 18:56

вы чего, издеваетесь?

Перечисления.ИмяПеречисления[ИмяЗначенияПеречисления] — не катит уже?

  

Asmody

Модератор

7 — 15.04.08 — 18:58

(6)+ до кучи:
Перечисления[ИмяПеречисления][ИмяЗначенияПеречисления]  — тоже работает

TurboConf — расширение возможностей Конфигуратора 1С

ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя;

КоличествоЗначенийПеречисления=Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Количество();

КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления;
ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс(СсылкаНаПеречисление);

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

полезной будет функция:

Функция ПолучитьИмяЗначенияПеречисления(Ссылка) Экспорт

ИмяПеречисления = Ссылка.Метаданные().Имя;
Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);

Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;

КонецФункции // ПолучитьИмяЗначенияПеречисления()

альтернативный способ получения имени значения перечисления:

ИмяЗначенияПеречисления = XMLстрока(СсылкаНаПеречисление);

Полезный прием для работы с перечислениями при COM соединении с другой ИБ 8.0 (например при обмене данных):

надо передать ссылку на перечисление:
Здесь
V8 – COM объект “V8.Application” – ИБ внешнего соединения
СсылкаНаПеречислениеCOM – COM объект – ссылка на перечисление в ИБ внешнего соединения

ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя;
СсылкаНаПеречисление = XMLЗначение(Тип(“ПеречислениеСсылка.”+ИмяПеречисленияCOM),ИмяЗначенияПеречисленияCOM);

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

Пример получения значений перечисления запросом

  
   Запрос=новый запрос;
   запрос.Текст=”ВЫБРАТЬ
            |    ВидыОС.Ссылка,
            |    ВидыОС.Порядок КАК Индекс
            |ИЗ
            |    Перечисление.ВидыОС КАК ВидыОС”;
   Выборка=Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
     Сообщить(“”+Выборка.ссылка+” : “+Выборка.индекс);
   конецЦикла;   

Пример для отбора на стороне COMсервера:

    Отбор = v8.Новый (“Структура”);
    МД=v8.XMLTypeOf(v8.Перечисления[ИмяПеречисления].ПустаяСсылка());
    Отбор.Вставить(“ВидДоговора”, v8.XMLЗначение(v8.FromXMLType(МД),ИмяЗначенияПеречисления));
 

Понравилась статья? Поделить с друзьями:
  • Как найти телефон huawei p40 lite
  • Как найти объем прямоугольного параллелограмма
  • Как найти работников онлайн
  • Как найти машину близнеца
  • Почему не открывается ютуб как исправить