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

Перечисление — это объект метаданных. Значения определяются только через конфигуратор. Имя значения перечисления не доступно «через точку». Получить имя объекта ПеречислениеСсылка можно через метаданные. Во многих типовых конфигурациях можно найти подобные функции в общих модулях. Обычно такие процедуры и функции расположены в общем модуле с наименованием «ОбщегоНазначения».

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

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

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

ОбъектМетаданных

= ПеречислениеСсылка.Метаданные();
Индекс = Перечисления[ОбъектМетаданных.Имя].Индекс(ПеречислениеСсылка);
Возврат ОбъектМетаданных.ЗначенияПеречисления[Индекс].Имя;КонецФункции

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

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

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

Работаем с перечислениями 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 Старт >>>

Изображение

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

Я
   Boudybuilder

04.05.12 — 19:02

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

ЭлементыФормы.НадписьИнформация.Заголовок = Состояние.Метаданные().Синоним;

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

   Господин ПЖ

1 — 04.05.12 — 19:04

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

О_о

   Steel_Wheel

2 — 04.05.12 — 19:05

(0) СокрЛП от значения перечисления даст его Представление (синоним)

   Boudybuilder

3 — 04.05.12 — 19:08

(2) ???

   Лоботряс

4 — 04.05.12 — 19:10

Перекачался чувак?

   Dzenn

5 — 04.05.12 — 19:26

Функция ИмяЗначенияПеречисления(ТекущееЗначение)

ИмяПеречисления = ТекущееЗначение.Метаданные().Имя;

Для Каждого ЗначениеПеречисления Из Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления Цикл

Если Перечисления[ИмяПеречисления][ЗначениеПеречисления.Имя] = ТекущееЗначение Тогда

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

КонецЕсли;

КонецЦикла;

КонецФункции

   Defender aka LINN

6 — 04.05.12 — 19:53

ЭлементыФормы.НадписьИнформация.Заголовок = Состояние;

Я куею…

   Boudybuilder

7 — 05.05.12 — 01:10

(4) Жаба давит ;)

   jsmith

8 — 05.05.12 — 01:14

чо ты тут нам свои мышцы демонстрируешь

22 см положи на стол

   Boudybuilder

9 — 05.05.12 — 01:15

(8) С таким да на ферму…

   jsmith

10 — 05.05.12 — 01:16

(9) ой извини, с твоими 14-тью на рублёвку по ходу

   Boudybuilder

11 — 05.05.12 — 01:30

(10) Одни комплексы…. )))))))))))))))))))))

   jsmith

12 — 05.05.12 — 01:31

ты хоть 30 раз подтянуться можешь

   jsmith

13 — 05.05.12 — 01:31

или хотя бы 100 раз отжаться

   jsmith

14 — 05.05.12 — 01:31

или двухсантиметровую доску разбить кулаком

   Boudybuilder

15 — 05.05.12 — 01:31

(10) Наверное и обработку по измерению придумал. Иначе как замерял ?

  

jsmith

16 — 05.05.12 — 01:33

(15) хватит протеины жрать, будь бэтменом, спаси тимошенко

Я когда-то писал для двух языков свою конфу, нормально работает НСтр()
Но для данных я использовал несколько реквизитов и google переводчик

Добавлено через 3 минуты
Конфа делалась для совместного использования Серийско-Российской компанией.

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

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

А вот для интерфейсов мне давали переводчика)))

Добавлено через 4 минуты

Цитата
Сообщение от turboq
Посмотреть сообщение

Получить сразу 2 синонима значения

polax, 2 СИНОНИМА одного значения!
Отлично отработает через НСтр()

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

Исходный код функции ИмяЗначенияПеречисленияПоСинониму(ИмяПеречисления, СинонимЗначения):

Код 1C v 8.х

 // Функция возвращает имя реквизита данных перечисления по имени
      
// перечисления и синониму его значения
// Принимаемые значения:
// пИмяПеречисления - тип строка. Имя объекта конфигурации "Перечисления"
// пСинонимЗначения - тип строка. Значение свойства Синоним реквизита данных перечисления
// Возвращаемое значение:
// Имя реквизита данных перечисления
Функция ИмяЗначенияПеречисленияПоСинониму( пИмяПеречисления, пСинонимЗначения ) Экспорт
КолекцияЗначенийПеречисления = Метаданные.Перечисления[пИмяПеречисления].ЗначенияПеречисления;
Для каждого пНайденноеЗначение из КолекцияЗначенийПеречисления Цикл
Если пНайденноеЗначение.Синоним = пСинонимЗначения Тогда
Возврат пНайденноеЗначение.Имя;
КонецЕсли
КонецЦикла;
Возврат неопределено;
КонецФункции

Подпишитесь на нашу рассылку новостей

Хотите узнать больше по этому вопросу?

Подпишитесь на нашу рассылку новостей

Подписаться

Чтобы задать вопрос или предложить тему статьи, нажмите на кнопку ниже:

Предложить статью

Понравилась статья? Поделить с друзьями:
  • Получить решение синоним
  • Получить релакс синоним
  • Получить рекомендации синоним
  • Получить расположение синоним
  • Получить ранение синоним