Здравствуйте,
В карточке редактирования записи на одном из полей висит перечисление.
Оно заполянется только при наличии значения в другом поле, а иначе пустым остается.
Когда я создаю первую запись (первый раз открываю карточку редактирования), преречисление заполянется верно и по умолчанию в поле появляется первое значение из перечисления. Когда же я открываю карточку для создания второй записи, то у меня стоит в поле с перечислением значение предыдущего перечисления, даже если оно было перезаполнено новыми значениями. Не пойму, как можно обновить его.
Заранее спасибо!!!
Нравится
"Kat" написал:Оно заполянется только при наличии значения в другом поле, а иначе пустым остается.
"Оно" это поле или перечисление?
Если перечисление, то попробуйте у контрола филд сбросить в null, а потом востановить. Если не поможет, дополнительно сбросьте в null енум у филда.
А может сделать как в карточке задачи - на спровочниках.
Оно - это про перечисление.
при создании новой записи, вроде, Enum обнуляю (enmTranslations.Enum = System.EmptyValue), но значение в поле остается старое. Такая же ситуация и при открытии записи. При первом открытии все ок, отображается нужное значение, при последующих отображается значение первой открытой записи.
DataField у EnumControl нет, поэтому я его обнулить не могу, вот это:
enmTranslations.Value.Caption = ''
не помогает :(
Вот мой код:
function wnd_ShowTimeEditOnPrepare(Window) { //debugger; scr_BaseDBEdit.wnd_BaseDBEditOnPrepare(Window); enmTranslations.Enum = System.EmptyValue; var IntervalID = dlData.Dataset('IntradayIntervalID'); var ShowID = dlData.Dataset('ShowID'); var Translations = dlData.Dataset.ValAsInt('Translations'); if (IntervalID != null){ var Enum = FillEnum(IntervalID, ShowID); enmTranslations.Enum = Enum; } if (!IsZeroValue(Translations)){ enmTranslations.Value = Enum.ItemsByCaption(Translations.toString()); // присваивается нужное значение, но в поле все равно старое } }
как на справочниках - не получится, наверно. Enum создается и заполяняется в коде при изменении значения другого поля и потом просто переприсваиваю заново контролу:
//функция создания и заполения перечисления
function FillEnum(IntervalID, ShowID){ var BlocksPerInterval = CalcBlocksPerInterval(IntervalID, ShowID); var Enum = Services.CreateItem(EnumCode); for (var i = 1; i < 11; i++) { var EnumItem = Enum.CreateItem(); EnumItem.ID = EnumItem.Code = 'BlocksPerInterval_' + i; EnumItem.Caption = BlocksPerInterval * i; Enum.Add(EnumItem); } return Enum; }
Добрый день!
Для решения возникшей у Вас проблемы могу порекомендовать немного видоизменить Ваш скрипт (вставить проверку на null, поменять местами строки условия), а именно:
function wnd_ShowTimeEditOnPrepare(Window) { //debugger; scr_BaseDBEdit.wnd_BaseDBEditOnPrepare(Window); enmTranslations.Value = System.EmptyValue; enmTranslations.Enum = System.EmptyValue; var IntervalID = dlData.Dataset('IntradayIntervalID'); var ShowID = dlData.Dataset('ShowID'); var Translations = dlData.Dataset.ValAsInt('Translations'); if (IntervalID != null){ var Enum = FillEnum(IntervalID, ShowID); enmTranslations.Enum = Enum; if (!IsZeroValue(Translations)){ enmTranslations.Value = Enum.ItemsByCaption(Translations.toString()); } } }
Желаю удачи!
Мельникова Екатерина