Страница 1 из 1

Баг или Hide/disable

Добавлено: 11 Октябрь 2012, 14:28
Алексей- Софт-Центр
Добрый день!
Кларион 6, АВС, TPS, Windows XP.
Хотя многие параметры не существенны.
Долгое время искали ошибку в стабильно и долго работающей программе. И наконец, поймали.
Специально сделали маленькую прогу на проверку:
есть файл TPS на 2 поля - первое ключевое уникальное - второе любое
Создали броуз
!--------
BRW1::View:Browse VIEW(my)
PROJECT(MY:num)
PROJECT(MY:fio)
END
!----------
к этому броузу - update процедуру
В embeds update в закладке AfteropenWindows вставлен текст:
!----
if SELF.Request<>InsertRecord then
hide(?MY:num)
end
display
!----
Все прозрачно и все работает: если запись добавляется, то MY:num - вижу и заполняю, если редакстируется, то я его скрываю (не даю редактировать).
И еще - главное: set orders стоит 1- MY:num и 2-MY:fio
Так вот: Если я вхожу в изменение , вижу в окне только ФИО, набираю на клаве любые цифры(ФИО при этом не меняется) и нажимаю Enter, то в данной записи МЕНЯЕТСЯ MY:num со всеми вытекающими последствиями!!!
Вывод: HIDE - не панацея от запрета изменеия поля!
А вот HIDE вместе с Disable - действительно закрывает поле от изменеия и устанавливает select на второе поле MY:fio, пропуская MY:num , хотя в set orders оно первое.
Вероятно это азы, но но столько времени выступающие как грабли!!! :)
Поэтому - делюсь, возможно кому-то это будет интересно!


Алексей

Re: Баг или Hide/disable

Добавлено: 12 Октябрь 2012, 14:21
Игорь Столяров
Привет !

Даже не знаю как политкорректно написать ... Да, азы. В карточке явно указано FirstField - и это ?MY:num.
Поэтому первым полем ввода будет ?MY:num ... Что здесь удивительного ?
В данном случае, лучше переопределить FirstField и установить для ?MY:num{Prop:Skip} = True вместе с HIDE(Prop:Skip).
И все. Вопрос исчерпан ... ;)

P/S: Полностью согласен, что HIDE() не панацея от изменений ... совсем для другого предназначен оператор, и об этом есть подробно в справке.

Re: Баг или Hide/disable

Добавлено: 12 Октябрь 2012, 14:36
Алексей- Софт-Центр
Добрый день!
Да это ясно. Как сделать - много вариантов.
Пост - не в плане помощи, а в плане предостережения.
Последовательность в программировании была такая:
1. Сначала сделали поле ввода открытым и его пользователь мог изменять.
2. Потом, определили, что это поле не желательно модифицировать и добавили строку того же поля.
При этом при добавлении записи скрывали строку, открывали поле ввода, иначе наоборот.
Вот собственно и все. И мало кто из пользователей , открывая форму сразу начинал долбить по цифровой клавиатуре.
Поэтому эту ошибку в проге ловили очень долго.

Алексей

Re: Баг или Hide/disable

Добавлено: 12 Октябрь 2012, 14:57
Игорь Столяров
Я именно так и понял - что в плане предостережения ...
Поэтому надо рассказывать не только историю чудесного спасения, но и причину возникновения проблемы.
А также алгоритм поиска и утранения подобных проблем.
Здесь главная фишка в следующем. У нас вводится (изменяется) поле ?MY:num, хотя не должно.
Открываем код и через поиск смотрим где используется поле. Сразу видим FirstField .... и т.д.

Re: Баг или Hide/disable

Добавлено: 15 Октябрь 2012, 13:25
Алексей- Софт-Центр
Добрый день!
Поэтому надо рассказывать не только историю чудесного спасения, но и причину возникновения проблемы.
Да, вроде, описал причину - ошибка программиста!
Последовательность в программировании была такая:
1. Сначала сделали поле ввода открытым и его пользователь мог изменять.
2. Потом, определили, что это поле не желательно модифицировать и добавили строку того же поля.
При этом при добавлении записи скрывали строку, открывали поле ввода, иначе наоборот.
Вот собственно и все.
А вот алгоритм поиска ошибки - действительно вещь полезная и знать ее конечно интересно, но в нашем случае было все значительно сложнее и запутаннее.
На самом деле с базой работают три программы. Достаточно большой количество установок этих программ. И только у трех пользователей в базе изредка
начали появлятся "лишние" записи с новыми номерами. Причем такое появление вскрывалось вдруг. Сколько мы у себя не пытались воспроизвести такую ситуацию -
не получалось. Сколько времени мы "мучали" наших пользователей - в какой последовательности их действий появляются такие записи - вразумительных ответов не было.
В целом - ошибка - не критична для работы - ну появился мусор в базе. Более того более 98 % пользователей - такую ошибку не выявляли.
А обнаружили - случайно: наш сотрудник, придя на обновление программы, ждал, когда ему освободят комп, и наблюдал за действием пользователя.
После ревизии базы - обнаружил ошибку - и смоделировал ситуацию.
Здесь главная фишка в следующем. У нас вводится (изменяется) поле ?MY:num, хотя не должно.
Открываем код и через поиск смотрим где используется поле. Сразу видим FirstField .... и т.д.
За эту фишку - спасибо. Так не делал в поисках ошибок ( не только этой).
(Хотя самое главное в поиске ошибки - смоделировать ситуацию ее возникновения)

Я,собственно, первый раз отписал пост-предупреждение на этом форуме.
Если это здесь не принято, то прошу прощение за спам.

Алексей

Re: Баг или Hide/disable

Добавлено: 15 Октябрь 2012, 17:28
Дед Пахом
Алексей- Софт-Центр писал(а): Я,собственно, первый раз отписал пост-предупреждение на этом форуме.
Если это здесь не принято, то прошу прощение за спам.

Алексей
Алексей, наоборот, большое спасибо! Побольше бы таких сознательных граждан, а то все только норовят в Приват попасть.