dvkdvk
Joined: 16 Oct 2007 Posts: 14 Location: Дмитрий Коньяков Occupation: Икрус Interests: Новосибирск
|
Posted: 25 Oct 2007 20:56 Post subject: Странное поведение отладчика |
|
|
Пошагово отлаживая в отладчике плагин столкнулся со следующей проблемой (БЭСТ-4 Управление продажами). Плагин записан в файл *.prg и положен в каталог ...pro\plugins\source\REAL далее открыт по Ctrl+F5, F11 и отранслирован по F2 с записью отладочной инвормации. Далее создана спецфункция на вход в документ с указанием файла *.hrb (почему так подробно описываю - думаю, может опять что-то делаю не так и проблема именно в этом).
Если теперь открыть любой заказ, запускается отладчик и пошагово можно пройти весь код, но тут возникает следующий парадокс, отладчик пошагово пробегает весь код до завершающего RETURN .t. и после этого прыгает в середину кода!!! (в ниже приведенном коде это место отмечено "//С этого места делается повторно" и дальше пошагово идет до конца оператора if !!! В целом код работает нормально - но несколько раз с другим вариантом этого кода у меня получалось, что этот "прыжок" в середину кода может происходить постоянно и тогда плагин зацикливается Выглядит это так: при входе в документ начинается мерцание экрана, БЭСТ не реагирует на клавиши... Раньше я с таким сталкивался (но к БЭСТу это не имело отношения) когда переполнялся стек и при возврате ( происходящем по RETURN) адрес возврата из стека извлекался не верный, и програма прыгала - куда бог послал... Подскажите что может быть? (или опять куки кривые)
Привожу злосчастный плагин. Для упрощения все условия заминил на явные чтобы незадуривать мозги. Плагин закрывает доступ ко всем полям заказа кроме скидки и примечания.
FUNCTION MAIN()
LOCAL dName,lName,dAnalit1
IF 1=1
IF 1=1
IF 1=2
ELSE
SAYANDWAIT('Вы вошли в чужой документ')
//С этого места делается повторно
GETLIST[1]:PREBLOCK:={||.F.}
GETLIST[2]:PREBLOCK:={||.F.}
GETLIST[3]:PREBLOCK:={||.F.}
GETLIST[4]:PREBLOCK:={||.F.}
GETLIST[5]:PREBLOCK:={||.F.}
GETLIST[6]:PREBLOCK:={||.F.}
GETLIST[7]:PREBLOCK:={||.F.}
GETLIST[8]:PREBLOCK:={||.F.}
GETLIST[9]:PREBLOCK:={||.F.}
GETLIST[10]:PREBLOCK:={||.F.}
GETLIST[11]:PREBLOCK:={||.F.}
GETLIST[12]:PREBLOCK:={||.F.}
GETLIST[13]:PREBLOCK:={||.F.}
GETLIST[14]:PREBLOCK:={||.F.}
GETLIST[15]:PREBLOCK:={||.F.}
GETLIST[16]:PREBLOCK:={||.F.}
ENDIF
ENDIF
ELSE
ENDIF
RETURN .t.
Кстати назревает и второй вопрос: Если закрыть доступ ко всем полям
добавив GETLIST[17]:PREBLOCK:={||.F.} то происходит то самое зацикливание о котором я уже писал. Получается что заполнить "шапку" заявки в плагине нельзя запретить доступ ко всем полям, хоть одно поле, например примечание должно остаться доступны |
|