Здравствуйте, уважаемые коллеги!
Заметил серьёзную ошибку в поведении датасета.
В 3.3.2.262 (независимо подтверждено в 240 и в 198) при изменении значения в ENUM-поле событие OnDatasetDataChange происходит два раза. При изменении полей других типов это событие происходит как следует, один раз.
Воспроизвести очень легко: поставить debugger на DataChange. Стоит в карточке поменять поле enum - войдёт в отладчик дважды.
При этом проверка DataField.Value == DataField.OldValue оба раза возвращает false, отличить реальный DataChange от повторного срабатывания по этому признаку нельзя, приходится запоминать прежнее значение в глобальном объекте скрипта, чтобы обойти ошибку.
Пока ошибка не исправлена, один из возможных вариантов универсальной заглушки выглядит так:
//ScriptObject - глобальный объект, объявлен в начале всего скрипта
function dlDataOnDatasetDataChange(DataField) {
var DataFieldName = DataField.Name;
var DataFieldValue = DataField.Value;
if (DataField.FieldType == dftEnum){//Для полей типа ENUM
if (ScriptObject[DataFieldName] == DataFieldValue){
return;//Если значение в действительности не менялось - выходим, это второй, ошибочный заход
} else {
ScriptObject[DataFieldName] = DataFieldValue;
}
}
// дальше сама обработка...