BPM 5.2 On-Site. Как вывести перечисление на форму?
1. Создаю объекты типа Перечисление, например, Возраст со значениями Молодой, Средний и Пожилой.
2. Добавляю в объект Контакт это перечисление.
3. Вывожу на страницу редактирования контакта. Выводить пробовал и через элемент выпадающего списка и через переключатель - не отображает данных.
С перечислениями там не все так просто, я бы их не использовала. Лучше создайте отдельную таблицу, заполните ее тремя значениями, создайте поле типа справочник и скажите ему, чтобы отображался как выпадающий список, там есть такой режим.
Добавляете 3 элемента типа переключатель, у которых одинаковое значение свойства Название группы. А сохранение и инициализацию значений этой группы нужно прописывать программно в карточке.
Иногда бывает необходимость получить название элемента перечисления в ходе интеграции с 1С. Например, если Вы планируете синхронизировать поле типа перечисление в 1С и справочник в TS.
Для этого можно использовать синтаксис 1С
Для 8.х:
var EnumName ='ТипыКонтактнойИнформации'; var EnumIndex = Param.Obj1C.Перечисления[EnumName].Индекс(Select1C.Тип); varName= Select1C.Тип.Метаданные().EnumValues.Get(EnumIndex).Имя;
У меня в карточке договора есть поле типа "Перечисление". Мне нужно скрывать одно значение в этом поле для определенного типа договора. Как это сделать программно?
Спасибо, Наталья :twisted:. Ключевым для меня в вашем ответе было то, что нужно присваивать значение System.EmptyValue перед изменением списка значений в поле типа "Перечисление".
Подскажите, как в Террасофт работать с полем перечисления. Например, я хочу проверить какое значение выбрано в поле перечисления. Мне для этого нужно сравнивать ID, Code или Caption?
Или как мне присвоить определенное значение этому полю: с помощью ID, Code или Caption?
Так обращайтесь не к элементу управления, а к соответствующему полю датасета по имени поля (полю указнному в DataFieldName EnumDataControl-a). В этом поле хранится ID записи.
"Раловец Ольга" написал:Так обращайтесь не к элементу управления, а к соответствующему полю датасета по имени поля (полю указнному в DataFieldName EnumDataControl-a). В этом поле хранится ID записи.
Я так и делаю. Вопрос был в другом. Как мне проверять значение этого поля и присваивать ему какое-то другое значение.
"Кулак Олег" написал:По ID
Хорошо, так и сделаю. Просто я думал, что возможно есть такая возможность по значению Code делать сравнение и присвоение.
Что-то типа:
if (EnumItem.Code == co_FIFO)
или
EnumItem.Code = co_Expensive
По ID не видно, какое значение используется, а по Caption - есть вероятность изменения этого значения. По Code было бы самым оптимальным:
- значение не меняется
- понятно о каком значении идет речь
Необходима помощь знающих людей в следующем вопросе:
на карточке редактирования есть два поля. Первое поле типа справочник. При выборе значения в первом поле необходимо заполнить выпадающий список для второго поля, что бы пользователь смог выбрать только определенные значения. Значения для списка второго поля вычисляются в коде. Они не постоянны, поскольку один из элементов вычисления имеет переменное значение.
Идеальным вариантом был бы мемори датасет, но не получилось привязать его к контролу EnumDataControl.
Так же есть идея заполнять сервис Enum динамически в коде, возможно ли это?
Или есть другой вариант решения задачи?
Подскажите, пожалуйста, а можно добавлять/удалять элементы у сервиса Enum через код перед его открытием (ShowSelectEnumItemWindow(EnumUSI))? Мне это сделать не удалось. Наверно, что-то не так делаю.
1) Создала сервис Enum без значений.
2) далее заполняю и вызываю его следующим образом в коде:
var enm_ShowsForDay = Services.GetNewItemByUSI('enm_ShowsForDay');for(var i =1; i <=13; i++){
var EnumItem = enm_ShowsForDay.CreateItem();
EnumItem.ID= EnumItem.Code='TranslationsPerBlock_'+ i;
EnumItem.Caption= i;
enm_ShowsForDay.Add(EnumItem);}try{
var TrsPerBlock = parseInt((ShowSelectEnumItemWindow('enm_ShowsForDay')).ResultValue.Caption);}catch(e){returnfalse;}
но список оказывается пустым при открытии перечисления.