Работаем с перечислениями 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 Старт >>>
Получить элемент перечисления по его имени (синониму)
Чтобы получить значение перечисления по пользовательскому представлению (синониму) в 1С:Предприятие 8.2 можно при помощи следующего кода. | Автор статьи: romix Последняя редакция №1 от 29.08.13 URL: http://kb.mista.ru/article.php?id=921 |
Ключевые слова: перечисление
Функция НайтиВидСообщения(прм_имя) имя=СокрЛП(прм_имя); Для Каждого эл из Метаданные.Перечисления.ИмяПеречисления.ЗначенияПеречисления Цикл Если СокрЛП(эл.Синоним)=имя Тогда Возврат Вычислить("Перечисления.ИмяПеречисления."+эл.Имя); КонецЕсли; КонецЦикла; Возврат Неопределено; КонецФункции
Здесь ИмяПеречисления — наименование перечисления, как оно задано в конфигураторе.
0
1С 8.x : Как получить имя перечисления по Синониму?
лгоритмически можно получить коллекцию перечислений из конфигурации и перебрав их в цикле сравнить значение реквизита синоним с параметром функции вернуть имя перечисления.
Исходный код функции ИмяПеречисленияПоСинониму (СинонимПеречисления):
Код 1C v 8.х
// Возвращает имя перечисления по известному значению синонима
// Пример пСиснонимПеречисления = "Юр физ лицо" тип строка,
// возвращаемое значение имя = "ЮрФизЛицо", тип строка
Функция ИмяПеречисленияПоСинониму( пСинонимПеречисления ) Экспорт
КолекцияПеречислений = Метаданные.Перечисления;
Для каждого пНайденноеЗначение из КолекцияПеречислений Цикл
Если пНайденноеЗначение.Синоним = пСинонимПеречисления Тогда
Возврат пНайденноеЗначение.Имя;
КонецЕсли;
КонецЦикла;
Возврат неопределено;
КонецФункции
// Возвращает значение перечисления или Неопределено
//
Функция ВернутьЗначениеПеречисления(ВидПеречисления, ЗначениеТекст)ЗначениеПеречисления = Неопределено;
Для Каждого
ТекЗначение Из Метаданные.Перечисления[ВидПеречисления].ЗначенияПеречисления Цикл
Если ТекЗначение.Имя = ЗначениеТекст Или ТекЗначение.Синоним = ЗначениеТекст Тогда
ЗначениеПеречисления = Перечисления[ВидПеречисления][ТекЗначение.Имя];
Прервать;
КонецЕсли;
КонецЦикла;
Возврат
ЗначениеПеречисления;
КонецФункции
Перечисление – это объект метаданных. Значения определяются только через конфигуратор. Имя значения перечисления не доступно “через точку”. Получить имя объекта ПеречислениеСсылка можно через метаданные. Во многих типовых конфигурациях можно найти подобные функции в общих модулях. Обычно такие процедуры и функции расположены в общем модуле с наименованием “ОбщегоНазначения”.
Функция ПолучитьИмяЗначенияПеречисления()
Функция на вход принимает значение типа ПеречислениеСсылка, а возвращает имя значения.
Функция ПолучитьИмяЗначенияПеречисления(ПеречислениеСсылка) ОбъектМетаданных
= ПеречислениеСсылка.Метаданные();
Индекс = Перечисления[ОбъектМетаданных.Имя].Индекс(ПеречислениеСсылка);
Возврат ОбъектМетаданных.ЗначенияПеречисления[Индекс].Имя;КонецФункции
Получить синоним значения перечисления
Синоним значения перечисления получается через приведение значения типа ПеречислениеСсылка к типу Строка.
СинонимЗначения = Строка(ПеречислениеСсылка);