|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
Имеем модули , например: PRIMER.PRG ** тело ** че то делаем и вызываем всегда Whener(), Valider(), Okeynik() полагая, что запустятся модули которые находятся в этом PRG файлике ниже. ** Даже можем запускаем модуль похожий DO PRIMERnext.PRG - в нем есть свои Whener,Valider,Okeynik RETURN В этом же PRG файле ниже свой набор подпрограмм, которые должны исполниться. -------------------------------- Function Whener ***тело Return Function Valider ***тело return Function Okeynik ***тело return ------------------------------------ Редко но все таки, Okeynik,Valider,Whener выполняются не из своего PRG файла, где они находятся, а из файла расположенного выше по вызову. Простой перезапуск программы проблему убирает. Куда копать? ------------------------------------ ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:21 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
Ни разу не пробовал использовать одноименные функции, могу только предположить что где-то происходит: Код: sql 1.
Для такого подхода придуманы классы, включив свои функции в класс ты убираешь эту неопределенность, т.к. они становятся одноименными методами разных классов. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:36 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
MaestroEv, from helpЕсли выдать команду DO с именем функции, Visual FoxPro ищет заданную функцию по следующей схеме: 1. Visual FoxPro просматривает файл, содержащий данную команду DO. 2. Если в этом файле функция не найдена, Visual FoxPro просматривает открытый файл процедуры. Файлы процедуры открываются по команде SET PROCEDURE. 3. Если в текущем файле процедуры функции нет, Visual FoxPro просматривает все программы в цепочке выполняемых файлов программ. Цепочка просматривается с последней выполнявшейся программы до первой выполнявшейся программы. 4. Если функция и здесь не найдена, Visual FoxPro ищет ее среди автономных программ. Если соответствующий файл программы найден, эта программа выполняется. В противном случае Visual FoxPro генерирует сообщение об ошибке. Чтобы выполнить функцию из конкретного файла, используйте предложение IN в команде DO. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:43 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
Вот, понял как правильно спросить! Это одноименные функции находящиеся в разных PRG! Они ж должны запускаться первыми, вместо таких же функций но находящимися в другом PRG! Спасибо. SET PROC нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:46 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
MaestroEv, Вы пытаетесь применить полиморфизм, без ООП.))) У вас явно правильное направление мысли, разбиритесь всего лишь с классами. Создайте, вместо вашего PRIMER.PRG класс например на базе custom, имеющий 3 ваших метода. Whener(), Valider(), Okeynik() А дальше, вместо множества прг, просто делайте наследников этого класса. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:56 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
Jonny540, 1. Visual FoxPro просматривает файл, содержащий данную команду DO. 2. Если в этом файле функция не найдена, а почему после перезапуска программы найдена? в SET PROCEDURE таких точно у меня нет. 3. Если в текущем файле процедуры функции нет, Visual FoxPro просматривает все программы в цепочке выполняемых файлов программ. Цепочка просматривается с последней выполнявшейся программы до первой выполнявшейся программы. Функция есть! И после перезапуска программы она ее находит. Ощущение, как будто как-то теряет, и естественно подхватывает предыдущую - тут все верно. Чтобы выполнить функцию из конкретного файла, используйте предложение IN в команде DO. Это понятно, но в лоб запускать их не могу. Эти програмульки работают фОном, и надо чтобы именно в текущем PRG поднимались свои фоновые програмки. Набор таких программулек много шире, каждая форма запущеная из PRG работает с ними, то есть я вынес всю обработку кнопок и видимости их и активности и взаимодействия в такие PRG модули "под ноги". Это избавило меня от брождения по окошкам для их изменений и настроек в формах. Форма - просто картинка - вся математика снаружи. Легко читать, исправлять. Тока вот иногда очень редко правда но все же гложит.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:58 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
asdor, Поздно, 1002 модуля.. :) Это космический корабль. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 07:59 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
MaestroEvasdor, Поздно, 1002 модуля.. :) Это космический корабль. :) Как раз самое время, проводить рефакторинг) Конечно, если это не последний день работы над ПО, после чего вы уезжаете в Антарктиду)))) И полагаю, такое кол-во одинаковых модулей.... После рефакторинга, вам будет существенно легче дышать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 08:04 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
Не уверен. И что будет делать класс с такими функциями? Они ж все разные внутри! Поля разные, правила разные. Что-то можно усовершенствовать еще? На форму кидаете кнопку - кнопка перед появленим на форме выполняет OkNik() из этого же PRG и активируется если ей можно и активирует нижнюю строку сохранить отказаться или еще чего там, при нажатии выполняет модуль PUSHER() - он по названию поля определяет что в поле и распахивает список - вы выбераете запускается модуль Whener() и если значение там все как надо заполняется поле, а затем выполняется функция Valider() и Oknik() для проверки активновсти кнопки на форме. Тела всех этих мелкофункций разные. Общее в них название и параметры. Есть еще AfterSaveForm(), BefoSaveform() и пр.. СloseForm() и др. И есть модуль который в новый модуль PRG сразу валит все это по текущей таблице и предзаполняет, есть правило наименования полей. Как то так.. Это чтобы понятно было почему у них всех одинаковые имена. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 08:18 |
|
Запуск программы не из того модуля..
|
|||
---|---|---|---|
#18+
MaestroEvНе уверен. И что будет делать класс с такими функциями? Они ж все разные внутри! Класс будет ЯВНО указывать форме откуда код брать. Сейчас у тебя это происходит неявно, глючит и ты найти не можешь откуда проблема идет. Вполне возможно что глючит фокс из-за большого количества одноименных функций (это предположение). Задуматься над переделкой стоит. Результат полезный будет. Неужели все 1000 одноименных функций настолько разные что ничего общего в них нет и невозможно написать код одновременно походящий для нескольких? Не верю (с) :) Понятно что с таким объемом это не быстро и не просто. А сейчас чтобы хоть как-то проблему локализовать и понять это глюк программы или фокса - сделай сохранение стека вызова при ошибке с помощью ASTACKINFO(). Тогда увидишь что в какой последовательности было вызвано. Примерно так Код: sql 1. 2. 3. 4. 5.
PS твой подход хорошо подходит для процедурного программирования. Я в FPD так же делал. Но там всегда понятно было на которой строке кода идет выполнение программы, в VFP все происходит по событию и тут такой подход уместен если все формы модальные, да и то модальность искуственна и бывают ситуации когда она нарушается. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2012, 10:12 |
|
|
start [/forum/topic.php?fid=41&msg=37987449&tid=1583409]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
79ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 186ms |
0 / 0 |