1с получить значение перечисления com объект

Обновлено: 05.07.2024

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

Перебор коллекции значений перечисления

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

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

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

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

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

Полезный прием для работы с перечислениями при 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(МД),ИмяЗначенияПеречисления));

Получение значений перечислений через внешнее соединение или Automation сервер

Раздел содержит описание особенностей получения и использования значений перечислений 1С:Предприятия через внешнее соединение или Automation сервер 1С:Предприятия.

Системные перечисления и их элементы

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

В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений: элемент "Проведение" системного перечисления "РежимЗаписиДокумента" и элемент "Оперативный" системного перечисления "РежимПроведенияДокумента".

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

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

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

Перечисления, определенные в конфигурации

В отличие от системных перечислений, определенные в конфигурации перечисления являются объектами базы данных. Элемент такого перечисления является ссылкой на объект базы данных. Например, если в конфигурации определено перечисление "Перечисление1" с элементами "ЗначениеПеречисления1" и "ЗначениеПеречисления2", а реквизит "Реквизит1" справочника "Справочник1" имеет тип "ПеречислениеСсылка.Перечисление1", то следующий код на встроенном языке 1С:Предприятия:

выведет "Равно", если значением реквизита "Реквизит1" является "ЗначениеПеречисления1" и "Не равно" в противном случае.

Однако если значение элемента перечисления получить через внешнее соединение, то оно будет являться COM объектом, и подобное сравнение будет всегда приводить к отрицательному результату. Например, следующий код на встроенном языке 1С:Предприятия:

будет всегда выводить "Не равно". Это происходит потому, что значение элемента перечисления является объектом типа ссылка на объект базы данных. Для объектов ссылок определена операция сравнения значений, которая может работать только для "своих" объектов 1С:Предприятия. Объекты, полученные через внешнее соединение "своими" не являются, поэтому операция их сравнения является проверкой идентичности. Поскольку для объектов ссылок идентичность не поддерживается, их сравнение может дать отрицательный результат, даже если значения ссылок, заключенные в этих объектах, одинаковые.

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

Если тип перечисления, значение которого может содежать переменная "ЭлементПеречисления", известен заранее, то приведенный выше пример может быть записан проще:

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

Чтобы обратиться к предопределенному значению перечисления на клиенте нужно использовать метод глобального контекста ПредопределенноеЗначение (PredefinedValue)
Синтаксис:
Код 1C v 8.2 УП
Параметры: <ИмяПредопределенногоЗначения> (обязательный)
Тип: Строка. Содержит полный путь до предопределенного значения, включая имя самого значения. Например, "ПланСчетов.Основной.Счет41".
Синтаксис описания предопределенного значения совпадает с синтаксисом оператора ЗНАЧЕНИЕ языка запросов:
<Тип предопределенного значения>.<Имя объекта метаданных>.<Значение>
Тип предопределенного значения> может быть:
Справочник (Catalog);
ПланВидовХарактеристик (ChartOfCharacteristicTypes);
ПланСчетов (ChartOfAccounts);
ПланВидовРасчета (ChartOfCalculationTypes);
Перечисление (Enum);
БизнесПроцесс (BusinessProcess)
В качестве <Имя объекта метаданных> указывается имя объекта метаданных, как оно задано в конфигураторе.
Для перечислений, определенных в конфигурации, <Значение> указывается как имя соответствующего объекта метаданных типа ЗначениеПеречисления. Для всех остальных типов предопределенных значений <Значение> указывается как имя предопределенного элемента данных, как оно указано в конфигураторе, или ПустаяСсылка для указания пустой ссылки.
Для точек маршрутов бизнес-процессов имя предопределенного значения имеет вид:
БизнесПроцесс.<Имя объекта метаданных>.ТочкаМаршрута.<Имя точки маршрута>
Также метод может быть использован для получения значения системного перечисления. В этом случае параметр формируется как:
<ИмяСистемногоПеречисления>.<ИмяЗначенияСистемногоПеречисления>

Описание: Возвращает ссылку на предопределенный элемент из предопределенных данных, прикладных перечислений и точек маршрута бизнес-процессов, а также значения системных перечислений.

Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Вызов метода выполняет обращение к серверу.
Код 1C v 8.2 УП

Программируя функционал в платформе 8.2 Управляемые Формы нужно четко понимать где он будет исполняться (на сервере или клиенте). Многие привычные методы теперь не работают так как раньше. И элементарная проверка заполнения реквизита на предопределенное значение на клиенте будет иметь следующий вид:
Код 1C v 8.х

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

  1. значений параметров некоторых методов;
  2. значений некоторых свойств объектов.

К системным перечислениям, например, относятся следующие:

  • КодВозвратаДиалога
  • РежимБегущейСтроки
  • ОбходРезультатаЗапроса
  • РежимПроведенияДокумента
  • ВариантПериода

Системные перечисления 1С

Не следует путать системные перечисления и системные наборы значений (например системный набор значений "Символы").

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

Значения элементов системных перечислений указываются через точку от имени системного перечисления, например:

ОбъектДокумент . Записать ( РежимЗаписиДокумента . Проведение , РежимПроведенияДокумента . Оперативный ) ;

В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений:

  • элемент "Проведение" системного перечисления " РежимЗаписиДокумента ";
  • элемент "Оперативный" системного перечисления " РежимПроведенияДокумента ".

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

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

Читайте также: