Баг или Hide/disable

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Баг или Hide/disable

Сообщение Алексей- Софт-Центр »

Добрый день!
Кларион 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 оно первое.
Вероятно это азы, но но столько времени выступающие как грабли!!! :)
Поэтому - делюсь, возможно кому-то это будет интересно!


Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Баг или Hide/disable

Сообщение Игорь Столяров »

Привет !

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

P/S: Полностью согласен, что HIDE() не панацея от изменений ... совсем для другого предназначен оператор, и об этом есть подробно в справке.
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Баг или Hide/disable

Сообщение Алексей- Софт-Центр »

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

Алексей
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8033
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Баг или Hide/disable

Сообщение Игорь Столяров »

Я именно так и понял - что в плане предостережения ...
Поэтому надо рассказывать не только историю чудесного спасения, но и причину возникновения проблемы.
А также алгоритм поиска и утранения подобных проблем.
Здесь главная фишка в следующем. У нас вводится (изменяется) поле ?MY:num, хотя не должно.
Открываем код и через поиск смотрим где используется поле. Сразу видим FirstField .... и т.д.
Make Clarion Great Again ! 😎
Алексей- Софт-Центр
Ветеран
Сообщения: 390
Зарегистрирован: 26 Август 2009, 12:41
Откуда: Moscow
Контактная информация:

Re: Баг или Hide/disable

Сообщение Алексей- Софт-Центр »

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

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

Алексей
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3289
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Баг или Hide/disable

Сообщение Дед Пахом »

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

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