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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.01.2010, 15:40   #1  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Если пользователь находясь в редактировании ячейки переключится в Navision и запустит выгрузку в Excel через Automation, то вероятнее всего возникнет ошибка.
Это можно обойти, используя CREATE(ExcelAppG, TRUE); вместо CREATE(objExcelAppG);
Но тогда будут плодиться процессы EXCEL.EXE

Создать Cudeunit скодом InitExcel[attachment=1122:InitExcel.txt]
Код:
OnRun()
CREATE(ExcelAppG);
IF ExcelAppG.Visible THEN;

CreateApp(VAR ExcelAppP : Automation "'Microsoft Excel 12.0 Object Library'.Application")
IF cuInitExcel.RUN THEN
  cuInitExcel.GetApp(ExcelAppP)
ELSE
  CREATE(ExcelAppP,TRUE);

GetApp(VAR ExcelAppP : Automation "'Microsoft Excel 12.0 Object Library'.Application")
ExcelAppP := ExcelAppG;
И вместо CREATE(objExcelApp)
сипользовать cuInitExcel.CreateApp(objXL_L);

Часто, в момент выгрузки, делаем ExcelAppG.Visible(FALSE). И при возникновении ошибки, Excel остается скрытым со всеми файлами.
Чтоб его отобразить делаем ярлык на скрипт show excel.vbs с кодом.
Код:
On Error Resume Next
set XL = getObject (,"Excel.Application")
if err.number = 0 then
  XL.visible = true
  XL.ScreenUpdating = true
end if
И запускаем, если что-то пропало с экрана.

Возможно это кому-то пригодится.
Вложения
Тип файла: txt InitExcel.txt (10.6 Кб, 381 просмотров)
Старый 09.02.2010, 10:12   #2  
Storkich is offline
Storkich
Участник
 
149 / 10 (1) +
Регистрация: 08.03.2007
Продолжу рассуждения на эту тему.
Один процесс EXCEL.EXE может деражть открытими несколько файлов
Код:
create(App);
App.Visible := true;
App.Workbooks.add;
App.Workbooks.add;
App.Workbooks.add;
sleep(3000);
App.Visible := false;
App.Visible := true
При выполнении этого скрипта, можно заметить, что порядок созданных книг поменялся.
Как с этим бороться я не смог найти.
По этому выход использовать create(App,TRUE); и засорять память процессами EXCEL.EXE
При этом может возникнуть ситуация когда пытаемся открыть файл, который занят невидимым процессом.
От сюда вывод, невидимые EXCEL.EXE - ЗЛО

Кстати:
Приведу листинг функции, которая опеределяет, можно ли работать с инстансом Экселя.
Т.е. не находится ли пользователь в редактировании ячейки.
Код:
WshShellG - Automation: 'Windows Script Host Object Model'.WshShell	

ExcelAvailable() : Boolean
// Если Эксель недоступен, то выполнение скрипта "вылетает" по таймауту в 10 секунд
FileName := ENVIRON('AppData')+'\CheckExcel.vbs';
IF NOT EXISTS(FileName) THEN BEGIN
  F.WRITEMODE(TRUE);
  F.TEXTMODE(TRUE);
  F.CREATE(FileName);
  F.WRITE('On Error Resume Next');
  F.WRITE('set XL = getObject (,"Excel.Application")');
  F.WRITE('if err.number = 0 then');
  F.WRITE('  err.Clear');
  F.WRITE('  if XL.visible then');
  F.WRITE('    if err.number = 0 then');
  F.WRITE('    end if');
  F.WRITE('  end if');
  F.WRITE('end if');
  F.CLOSE;
END;
IF ISCLEAR(WshShellG) THEN
  CREATE(WshShellG);
ShellCmdG := 'Wscript.exe /B "'+FileName+'"';
i := 1;
bWait := TRUE;
t := TIME;
WshShellG.Run(ShellCmdG,i,bWait);
EXIT ((TIME-t) < 1000)
 


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

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

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