Обновление Enum

Здравствуйте,

В карточке редактирования записи на одном из полей висит перечисление.
Оно заполянется только при наличии значения в другом поле, а иначе пустым остается.
Когда я создаю первую запись (первый раз открываю карточку редактирования), преречисление заполянется верно и по умолчанию в поле появляется первое значение из перечисления. Когда же я открываю карточку для создания второй записи, то у меня стоит в поле с перечислением значение предыдущего перечисления, даже если оно было перезаполнено новыми значениями. Не пойму, как можно обновить его.

Заранее спасибо!!!

Нравится

4 комментария

"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()); 
    }
        }
}

Желаю удачи!

Мельникова Екатерина

Екатерина, спасибо за помощь, мне не хватало именно enmTranslations.Value = System.EmptyValue, другими способами значение поля не обнулялось.

Показать все комментарии