В 3.3.2.* при изменении значения в ENUM-поле событие OnDatasetDataChange происходит некорректно

Здравствуйте, уважаемые коллеги!

Заметил серьёзную ошибку в поведении датасета.

В 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;
                }
        }
// дальше сама обработка...

Нравится

11 комментариев

Cпасибо, Анатолий! Действительно, и у меня такая проблему проявлялась (на версии 3.2.2.171). Долго искала, в чем загвоздка, пока не предположила, что это ошибка в ядре.

В пост призываются специалисты технической поддержки с номером инцидента и сроками разрешения:smile:

Любопытная деталь: с этой ошибкой сталкивались очень многие разработчики, и я сам видел её не раз. Но поступал по принципу "не верь глазам своим". Собственно, мне указал на неё новый сотрудник, и реакция у меня была "не может быть, это ты что-то напутал". Пришлось преодолеть определённый психологический барьер чтобы убедиться: да, такая ошибка реально существует.

Анатолий, данная проблема уже была отмечена сотрудником Terrasoft Константином Пихало и исправлена начиная с версии 3.4.1.28

На 3.4.0. и 3.3.2 пока не переносили данные изменения.

Здравствуйте, коллеги!
Обходное решение есть, проблема исправлена в версии 3.4.1. К сожалению, перенос исправления на 3.4.0, и на 3.3.2 не планируется.

А что там с переходом с 3.4 на 3.4.1? А то как то неприятно получается актуальная версия уже без планов на исправление багов

Перенос исправления пусть не планируется, а исправить ошибку надо!

Предполагаю что билд 3.3.2.262 поновее чем 3.4.1, тем более что на 3.4.1 проекты можно по пальцам пересчитать.

По данному вопросу создан запрос на изменение, Deadline по запросу на изменение: 06.04.2012

Здравствуйте, коллеги
Исправление войдет в сборки начиная с:

  • 3.3.2.266+
  • 3.4.0.118+
  • в 3.4.1 это исправление уже было.

Выслал Вам на почту ссылку на скачивание бинарных файлов 3.3.2.266

"Яворский Алексей" написал:

Спасибо за помощь и оперативность!

Спасибо, оперативно!

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