:: Visual Foxpro, Foxpro for DOS
Как программно узнать имя метода
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Как программно узнать имя исполняемого метода?

PS.На подобии ?THISFORM.name - имя формы.
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
ZenTigra
Как программно узнать имя исполняемого метода?
PS.На подобии ?THISFORM.name - имя формы.
А для решения какой задачи выбран столь необычный способ?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Лень каждый раз писать что за метод вызывается.

А причина в столь непонятных для вас извращениях кроется в кривости рук, однажды написавших неправильный код, а теперь пытающихся отловить непонятную
ошибку в этой программе. То есть это нужно для обработчика ошибок, чтоб потом отследить последние действия пользователя.

PS.Нужно передать параметр, в некоторую процедура, которая записывает последовательность действий пользователя...

О командах возвращает стека вызова я в курсе, в моем случае не помогает....



Исправлено 1 раз(а). Последнее : ZenTigra, 12.07.17 16:42
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
PaulWist

Сообщений: 14621
Дата регистрации: 01.04.2004
ASTACKINFO(ArrayName)


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: Как программно узнать имя метода
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
PROGRAM([n]) как и для НЕ методов. Но ASTACKINFO лучше. Тем более что ИЗ обработчика ошибок через ASTACKINFO() гораздо проще и логичнее получать имя "предпоследней в стеке" программы, чем через PROGRAM(PROGRAM(-1)-1).


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Как программно узнать имя метода
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Я же написал, программа написанная моими кривыми руками, еще с мозгами помнящими FoxPro2.6

Я знаю о ASTACKINFO() и PROGRAM(), но они мне не могут помочь.

Опишу мою ситуацию, пользователь запустил одну форму, с нее другую, а со второй третью, в которой и есть НЕПРАВИЛЬНЫЙ код, который повлияет только на четвертую форму, третья форма была закрыта, вторая также, потом пользователь из первой запустил четвертую, результат Ошибка!
А если запускать сразу из первой формы четвертую, все Ок.
Я знаю, что будут советы отказа от переменных, от ON KEY LABEL... (чем я сейчас и занимаюсь), но я с этим так быстро не управлюсь.
Тому пока решил сделать запись действий пользователя, и добавить его отчет в обработчик ошибок.

Например в метод Init прописать такой код
DO do_form WITH THISFORM.Name+'.Init'

в метод Activate
DO do_form WITH THISFORM.Name+'.Activate'

в метод Release
DO do_form WITH THISFORM.Name+'.Release'

а в процедуре do_form все это записывать, и когда возникнет ошибка записывать эту информацию в файл (не всю, а только 40 последних действий пользователя)

Я понимаю, что это извращение, но по другому как выловить свои ошибки, я не знаю...

Так вот, я просто хотел тупо скопировать этот код в соответствующие методы, не дописываю ручками +'.Init', +'.Activate' и т.п.
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
ZenTigra
Я знаю о ASTACKINFO() и PROGRAM(), но они мне не могут помочь.

Однако именно они решают проблему, которую вы вынесли в заголовок темы и описали в первом посте.
Значит, вам требовалось вовсе не это.
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ТС наверное хочет "трассировать" последовательность действий оператора (или событий в формах) в файле, его интересуют последние 40 "контрольных действийточек". Так можно записывать в файл эти контрольные точки, по строчке на точку, в файл до 2Г можно мноооого точек записать, не только 40
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вероятно формы не модальные, и потому ASTACKINFO не показывает "последовательность действий предшествовавшую запуску формы" - т.к. в стеке не будет метода с DO FORM - он успешно завершится задолго до возникновения ошибки...
Уж не знаю чего там этакого накодить надо было, что такие проблемы возникают Разве что всё на public переменных да общей датасессии, и нечто нагадившее в одном месте сказывается в совершенно другом, непредсказуемом месте


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
of63
ТС наверное хочет "трассировать" последовательность действий оператора (или событий в формах) в файле, его интересуют последние 40 "контрольных действийточек". Так можно записывать в файл эти контрольные точки, по строчке на точку, в файл до 2Г можно мноооого точек записать, не только 40

Да именно так. А количество в 40 последних действий будет достаточно.

Вот пример части файла отчета об ошибках
Цитата:
АРМ "Склад" (5.283.2458 от 17.05.2017 10:48)
----------------------------------------------------------------------------------------------------------
Дата - 09.07.2017 13:11:29
Оператор - 1 Оператор1 [10:15:49]
Компьютер - SERVER # Admin
Клиент - ПП Xxxxxxxxx
==========================================================================================================
Показывать Ошибку : ДА
Программа с ошибкой: F1_1MTOV.PANEL.COMMAND_F2.CLICK
Сообшение об ошибке: (13) Псевдоним 'SQL_GOODS' не найден.
Номер строки ошибки: 45
Строка с ошибкой :

Область /N-наимен./: 68
Код нажатой клавиши: 55 [ 7 ]
Имя файла : D:\MARKET.PRO\ARM\WAREHOUS\FORMS\F1_1MTOV.SCT
#1===========================================================================================================
Последние действия пользователя:

09.07.2017 12:56:45 F1_1MTOV.Init 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 12:56:45 F1_1MTOV.Activate 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 12:57:11 F1_1T.Init 13 [ ENTER ] (53 VIDDIL)
09.07.2017 12:57:11 F1_1T.Activate 13 [ ENTER ] (58 GOODS_D)
09.07.2017 12:57:32 f1_1.panel.Command_f3 13 [ ENTER ] (58 GOODS_D)
09.07.2017 12:57:32 F1_1SQL.Init 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 12:57:32 F1_1SQL.Activate 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 12:57:34 F1_1.Activate 13 [ ENTER ] (58 GOODS_D)
09.07.2017 12:57:35 f1_1.panel.Command_exit 13 [ ENTER ] (58 GOODS_D)
09.07.2017 12:57:35 F1.Activate 13 [ ENTER ] (57 BOOK1)
09.07.2017 12:57:44 f1.panel.Command_f9 13 [ ENTER ] (57 BOOK1)
09.07.2017 12:57:44 F_PRINT 13 [ ENTER ] (67 SQL_NAKLADNA)
09.07.2017 12:57:46 F1.Activate 13 [ ENTER ] (57 BOOK1)
09.07.2017 13:02:39 f1.panel.Command_f3 -2 [ F3 ] (57 BOOK1)
09.07.2017 13:02:39 F1_1.Init -2 [ F3 ] (57 BOOK1)
09.07.2017 13:02:39 F1_1.Activate -2 [ F3 ] (57 BOOK1)
09.07.2017 13:02:41 m_klient.Init -2 [ F3 ] (14 KLIENTU)
09.07.2017 13:02:45 m_klient.panel.Command_ok 13 [ ENTER ] (14 KLIENTU)
09.07.2017 13:02:45 F1_1.Activate 13 [ ENTER ] (57 BOOK1)
09.07.2017 13:02:46 f1_1.panel.Command_f3 -2 [ F3 ] (57 BOOK1)
09.07.2017 13:02:46 F1_1SQL.Init -2 [ F3 ] (8 FORMSAVE2)
09.07.2017 13:02:46 F1_1SQL.Activate -2 [ F3 ] (8 FORMSAVE2)
09.07.2017 13:02:49 F1_1MTOV.Init 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:02:49 F1_1MTOV.Activate 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:02:59 F1_1T.Init 13 [ ENTER ] (53 VIDDIL)
09.07.2017 13:02:59 F1_1T.Activate 13 [ ENTER ] (58 GOODS_D)
09.07.2017 13:03:59 f1_1.panel.Command_f3 13 [ ENTER ] (58 GOODS_D)
09.07.2017 13:03:59 F1_1SQL.Init 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 13:03:59 F1_1SQL.Activate 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 13:04:00 F1_1MTOV.Init 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:04:00 F1_1MTOV.Activate 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:05:11 f1_1.panel.Command_f3 13 [ ENTER ] (58 GOODS_D)
09.07.2017 13:05:11 F1_1SQL.Init 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 13:05:11 F1_1SQL.Activate 13 [ ENTER ] (8 FORMSAVE2)
09.07.2017 13:05:26 F1_1MTOV.Init 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:05:26 F1_1MTOV.Activate 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:05:48 F3_1K0.Init 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:05:48 F3_1K2.Init 13 [ ENTER ] (65 SQL_PRUHOD)
09.07.2017 13:05:54 F1_1MTOV.Activate 13 [ ENTER ] (69 SQL_GOODS)
09.07.2017 13:10:37 F3_1N.Init -1 [ F2 ] (51 GOODS)
09.07.2017 13:11:26 F3_1n_nac.Init 55 [ 7 ] (67 SQL_GOODS)
#2===========================================================================================================
Стек вызова:

0_START
1_START
F0.COMMAND1.CLICK
ON...
F1.PANEL.COMMAND_F3.CLICK
ON...
F1_1.PANEL.COMMAND_F3.CLICK
ON...
F1_1MTOV.PANEL.COMMAND_F2.CLICK
ON...
ERROR
#3===========================================================================================================
1.(188) d:\market.pro\warehous.exe
0_start

2.(2242) 1_start.fxp
1_start

3.(227) d:\market.pro\arm\warehous\forms\f0.sct
f0.command1.click
DO FORM F1

4.(227) d:\market.pro\arm\warehous\forms\f1.sct
f1.panel.command_f3.click
DO FORM F1_1 WITH 1

5.(103) d:\market.pro\arm\warehous\forms\f1_1.sct
f1_1.panel.command_f3.click
DO FORM F1_1mtov

6.(45) d:\market.pro\arm\warehous\forms\f1_1mtov.sct
f1_1mtov.panel.command_f2.click
THISFORM.Refresh

7.(433) error.fxp
f1_1.panel.command_f3.click
.......

ну и так далее, всего файла выкладывать не хочу.
(сайт немножко портит вид, убирая лишние пробелы...)

Так вот, приходиться для каждого метода прописывать его наименование ручками...
Не думайте, что это для каждого метода, меня интересует только Init, Activate и Release.

(DO do_form WITH THISFORM.Name+'.Init'/DO do_form WITH THISFORM.Name+'.Activate'/DO do_form WITH THISFORM.Name+'.Release')
У меня этот код прописан не для каждой формы, хотел облегчить себе работу, но вижу что не получиться...
Ratings: 0 negative/0 positive
Re: Как программно узнать имя метода
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Igor Korolyov
...
Уж не знаю чего там этакого накодить надо было, что такие проблемы возникают Разве что всё на public переменных да общей датасессии, и нечто нагадившее в одном месте сказывается в совершенно другом, непредсказуемом месте

Угадали



Исправлено 1 раз(а). Последнее : ZenTigra, 13.07.17 21:09
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 _vit  (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика