23.12.2005, 16:44 | #1 |
Участник
|
Можно ли программно завершить работу MS Navision изнутри?
Если кто сталкивался с этим, подскажите. |
|
23.12.2005, 16:59 | #2 |
Moderator
|
4-ку можно. Может быть можно и более ранние версии - не пробовал.
Механизм очень простой - неконтролируемое переполнение стека. Если использовать правильно - вещь вполне безопасная. Код прилагаю |
|
26.12.2005, 16:01 | #3 |
Участник
|
Только что придумал и протестировал (как грамотно убить себя или Мюнхаузен навегда):
1. Создаем батник и кладем его например в корень диска С (например, С:\test.bat) 2. В батнике пишем TASKKILL /IM finsql.exe 3. В нужном месте в Nav создаем переменную BATnik типа Automation 'Microsoft Shell Controls And Automation'.Shell 4. Пишем код: CREATE(BATnik); BATnik.Open('c:\test.bat'); Вышибает на раз. Если, конечно, у вас не открыто окно из-за которого "...приложение не может быть закрыто". Хотя для этого можно попробовать форсированный метод. Остается вопрос сколько finsql убьет этот батник. (полагаю, что все, которые найдет) А вобще, можно не извращаться а написать так : SHELL('TASKKILL /IM finsql.exe'); Собственно все. Делает точно то же что и вышеуказанные махинации |
|
27.12.2005, 10:05 | #4 |
Участник
|
Только возникает проблема, когда открыто несколько клиентов Navision и надо закрыть тот, в котором этот код вызван.
При помощи глюка, закрыть Navision всегда можно. И для каждой версии есть свой набор глюков |
|
26.02.2006, 14:54 | #5 |
Moderator
|
Придумал еще один способ:
Код: //wndHost :'Windows Script Host Object Model'.WshShell CREATE(wndHost); wndHost.SendKeys('%{F4}'); |
|
26.02.2006, 15:04 | #6 |
Участник
|
tyrex в очередной раз меня удивил .
Тока по F4 закрывается если нет модальных окон а вот с переполнением в любом случае .
__________________
Want to believe... |
|
26.02.2006, 15:17 | #7 |
Moderator
|
Ну хорошо, хотите с модальными окнами - пожалуйста :-)
Код: CREATE(wndHost); FOR i:=1 to 100 DO wndHost.SendKeys('{ESC}'); wndHost.SendKeys('%{F4}'); |
|
26.02.2006, 15:21 | #8 |
Участник
|
ну ето по любому респект... хотя и сам уже эксперементирую с этой штукой. В том числе запускаю менюшки программно .
__________________
Want to believe... |
|
16.05.2006, 10:14 | #9 |
Участник
|
Всем привет, Лорду одназначно респект.
Хочу предложить еще один вариант - писал его года два назад для той же цели. Это маленькая библиотечка с одним единственным методом "CloseApp" У метода два параметра: 1. Текст, отображаемый пользователю при завершении приложенияЧтобы использовать его в Nav нужно: 1. зарегистрировать библиотеку в системе |
|
14.07.2006, 15:26 | #10 |
Участник
|
Немного не в тему, но зачем переменная №2 ?
Ведь достаточно в библиотеке чиркануть что-то вроде IF MessageStr <> '' Then ... |
|
16.07.2006, 22:29 | #11 |
Участник
|
Цитата:
Например, чтобы вывести пустое сообщение А еще текст сообщения можно зашить в константе, с ML и делать: имя_переменной.CloseApp(Text50000, выражение_boolean); Надеюсь, что синтаксис функции не слишком напрягает и замечание не принципиальное? |
|
15.07.2008, 09:50 | #12 |
Участник
|
|
|
15.07.2008, 18:16 | #13 |
Moderator
|
Все прекрасно работает
|
|
16.07.2008, 12:03 | #14 |
Участник
|
Вы знаете, всё же не работает. Ошибку выдаёт о переполнении стека, но NAV не закрывает.
PS 5.0 SP1 |
|
16.07.2008, 14:37 | #15 |
Участник
|
Подтверждаю для 5.0 SP1 - 1 способ
__________________
Want to believe... |
|
16.07.2008, 15:22 | #16 |
Moderator
|
У меня нет под рукой 5.0 SP1.
Будем думать как решить вопрос |
|
16.09.2008, 15:43 | #17 |
Участник
|
Выход из Nav 5.0
Form - OnModifyRecord() : Boolean CurrForm.UPDATE; При модификации записи в форме - вылет.
__________________
Want to believe... |
|
12.11.2008, 23:46 | #18 |
Участник
|
есть очень простой способ - работает во всех версиях начиная с financials 2.0
создаете запись в любой таблице типа строка документа (37,39, ...) условие - первичный ключ заканчивается полем Integer со активированым AutoIncrement. затем эту строку удаляете delete(true) для 37 или 39 таблиц это 5 строк кода. без каких либо сообщений, проблем и очень быстро. |
|
13.11.2008, 00:39 | #19 |
Участник
|
Цитата:
Сообщение от rudnev
есть очень простой способ - работает во всех версиях начиная с financials 2.0
создаете запись в любой таблице типа строка документа (37,39, ...) условие - первичный ключ заканчивается полем Integer со активированым AutoIncrement. затем эту строку удаляете delete(true) для 37 или 39 таблиц это 5 строк кода. без каких либо сообщений, проблем и очень быстро. создаете запись со значением "0" в поле Line No. |
|
13.11.2008, 23:20 | #20 |
Administrator
|
а потом удалять эти строчки через SQL? сохраниться-то они успеют! а при использовании на временных реках работает?
|
|