AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Прочие вопросы
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2005, 16:44   #1  
luc is offline
luc
Участник
 
12 / 10 (1) +
Регистрация: 09.04.2004
Можно ли программно завершить работу MS Navision изнутри?
Если кто сталкивался с этим, подскажите.
Старый 23.12.2005, 16:59   #2  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
4-ку можно. Может быть можно и более ранние версии - не пробовал.
Механизм очень простой - неконтролируемое переполнение стека. Если использовать правильно - вещь вполне безопасная.

Код прилагаю
Вложения
Тип файла: rar Closing_Navision.rar (2.5 Кб, 278 просмотров)
Старый 26.12.2005, 16:01   #3  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Talking
Только что придумал и протестировал (как грамотно убить себя или Мюнхаузен навегда):

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  
Hed is offline
Hed
Участник
Аватар для Hed
 
13 / 10 (1) +
Регистрация: 04.02.2005
Только возникает проблема, когда открыто несколько клиентов Navision и надо закрыть тот, в котором этот код вызван.

При помощи глюка, закрыть Navision всегда можно. И для каждой версии есть свой набор глюков
Старый 26.02.2006, 14:54   #5  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Придумал еще один способ:

Код:
//wndHost :'Windows Script Host Object Model'.WshShell
CREATE(wndHost);
wndHost.SendKeys('%{F4}');
Старый 26.02.2006, 15:04   #6  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
tyrex в очередной раз меня удивил .

Тока по F4 закрывается если нет модальных окон а вот с переполнением в любом случае .
__________________
Want to believe...
Старый 26.02.2006, 15:17   #7  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Ну хорошо, хотите с модальными окнами - пожалуйста :-)

Код:
CREATE(wndHost);
FOR i:=1 to 100 DO
   wndHost.SendKeys('{ESC}');
wndHost.SendKeys('%{F4}');
Старый 26.02.2006, 15:21   #8  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
ну ето по любому респект... хотя и сам уже эксперементирую с этой штукой. В том числе запускаю менюшки программно .
__________________
Want to believe...
Старый 16.05.2006, 10:14   #9  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Всем привет, Лорду одназначно респект.
Хочу предложить еще один вариант - писал его года два назад для той же цели.
Это маленькая библиотечка с одним единственным методом "CloseApp"
У метода два параметра:
1. Текст, отображаемый пользователю при завершении приложения
2. Выводить пользователю сообщение или нет
Чтобы использовать его в Nav нужно:
1. зарегистрировать библиотеку в системе
2. добавить переменную типа Automation 'NewLineOCXs'.Class1
3. добавить в нужное место стандартный код -
CREATE(имя_переменной);
имя_переменной.CloseApp(Хватит работать!',TRUE);
Вложения
Тип файла: rar NavClose.rar (3.0 Кб, 169 просмотров)
Старый 14.07.2006, 15:26   #10  
e-statik is offline
e-statik
Участник
 
102 / 11 (1) +
Регистрация: 06.07.2005
Немного не в тему, но зачем переменная №2 ?
Ведь достаточно в библиотеке чиркануть что-то вроде IF MessageStr <> '' Then ...
Старый 16.07.2006, 22:29   #11  
bird_imported is offline
bird_imported
Участник
 
45 / 10 (1) +
Регистрация: 11.05.2006
Цитата:
Сообщение от e-statik Посмотреть сообщение
Немного не в тему, но зачем переменная №2 ?
Ведь достаточно в библиотеке чиркануть что-то вроде IF MessageStr <> '' Then ...
Да случаи разные бывают
Например, чтобы вывести пустое сообщение
А еще текст сообщения можно зашить в константе, с ML и делать:

имя_переменной.CloseApp(Text50000, выражение_boolean);

Надеюсь, что синтаксис функции не слишком напрягает и замечание не принципиальное?
Старый 15.07.2008, 09:50   #12  
Control is offline
Control
Участник
Аватар для Control
 
15 / 11 (1) +
Регистрация: 29.01.2008
Цитата:
Сообщение от tyrex Посмотреть сообщение
4-ку можно. Может быть можно и более ранние версии - не пробовал.
Механизм очень простой - неконтролируемое переполнение стека. Если использовать правильно - вещь вполне безопасная.

Код прилагаю
А в 5-рке не работает, я правильно понимаю ?
Старый 15.07.2008, 18:16   #13  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
Все прекрасно работает
Старый 16.07.2008, 12:03   #14  
Control is offline
Control
Участник
Аватар для Control
 
15 / 11 (1) +
Регистрация: 29.01.2008
Вы знаете, всё же не работает. Ошибку выдаёт о переполнении стека, но NAV не закрывает.

PS 5.0 SP1
Старый 16.07.2008, 14:37   #15  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Цитата:
Сообщение от Control Посмотреть сообщение
Вы знаете, всё же не работает. Ошибку выдаёт о переполнении стека, но NAV не закрывает.

PS 5.0 SP1
Подтверждаю для 5.0 SP1 - 1 способ
__________________
Want to believe...
Старый 16.07.2008, 15:22   #16  
Kirvisniemi is offline
Kirvisniemi
Moderator
 
342 / 13 (1) ++
Регистрация: 21.12.2004
У меня нет под рукой 5.0 SP1.
Будем думать как решить вопрос
Старый 16.09.2008, 15:43   #17  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Выход из Nav 5.0


Form - OnModifyRecord() : Boolean
CurrForm.UPDATE;

При модификации записи в форме - вылет.
__________________
Want to believe...
Старый 12.11.2008, 23:46   #18  
rudnev is offline
rudnev
Участник
 
7 / 10 (1) +
Регистрация: 15.03.2006
есть очень простой способ - работает во всех версиях начиная с financials 2.0

создаете запись в любой таблице типа строка документа (37,39, ...)
условие - первичный ключ заканчивается полем Integer со активированым AutoIncrement.
затем эту строку удаляете delete(true)

для 37 или 39 таблиц это 5 строк кода.
без каких либо сообщений, проблем и очень быстро.
Старый 13.11.2008, 00:39   #19  
rudnev is offline
rudnev
Участник
 
7 / 10 (1) +
Регистрация: 15.03.2006
Цитата:
Сообщение от rudnev Посмотреть сообщение
есть очень простой способ - работает во всех версиях начиная с financials 2.0

создаете запись в любой таблице типа строка документа (37,39, ...)
условие - первичный ключ заканчивается полем Integer со активированым AutoIncrement.
затем эту строку удаляете delete(true)

для 37 или 39 таблиц это 5 строк кода.
без каких либо сообщений, проблем и очень быстро.
сорри, уточнение

создаете запись со значением "0" в поле Line No.
Старый 13.11.2008, 23:20   #20  
Sancho is offline
Sancho
Administrator
Аватар для Sancho
Лучший по профессии 2017
Лучший по профессии 2009
 
1,294 / 221 (10) ++++++
Регистрация: 11.01.2006
а потом удалять эти строчки через SQL? сохраниться-то они успеют! а при использовании на временных реках работает?
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:27.