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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.12.2011, 12:29   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Доброго времени суток товарищи!
Задался я вопросом возможностей своих Automation, попробовал сделать что-то простое, получилось. А теперь есть желание углубиться в вопрос. Вроде как я где-то читал, что NAV может получать события от Automation. Так же, если экспортировать в текст какой-нибудь кодеюнит, в котором есть Automation, скажем 'Microsoft Excel 12.0 Object Library'.Application, то мы увидим там много различных EVENT'ов. А так же, если попытаться удалить эту переменную, то выдастся предупреждение, что с этой переменной связанны триггеры событий и они тоже будут удалены.
Так вот собственно вопрос: как работать с событиями от Automation?
И ещё сопутствующий вопрос: как эти события создавать? Видимо они создаются в самом Automation, в таком случае вопрос скорее всего уже выходит за пределы обсуждения Нава и его нужно задавать на других форумах, но всё же, если кто может поделиться рецептом здесь, то почему бы и нет?
Старый 01.12.2011, 13:11   #2  
Fly is offline
Fly
Участник
Аватар для Fly
 
102 / 10 (1) +
Регистрация: 05.10.2007
В C/Al Globals/Locas создаете Automation, потом заходите в свойства этой переменной и меняете значение свойства WithEvents. Смотри на появившиеся триггеры. Это и есть события
Старый 01.12.2011, 16:03   #3  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от Fly Посмотреть сообщение
В C/Al Globals/Locas создаете Automation, потом заходите в свойства этой переменной и меняете значение свойства WithEvents. Смотри на появившиеся триггеры. Это и есть события
Как всё просто оказалось. А посмотреть свойства переменной я не догадался. Спасибо большое!
Старый 14.11.2013, 08:46   #4  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Подскажите ламеру, как этими событиями пользоваться?
К примеру надо дождаться закрытия книги и вернуть управление в нав (что то сделать).
Нашел событие excel::WorkbookBeforeClose(Wb : Automation "'Microsoft Excel 14.0 Object Library'.Workbook";VAR Cancel : Boolean) у переменной апликэйшн excel. Что с ним дальше делать?)
Старый 14.11.2013, 11:08   #5  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
По идее у аутомейшена есть св-во withevents и оно ,при выставлении в true, позволяет увидеть события (появяться новые тригеры), которые доступны в библиотеке.
У меня в 12 версии библиотеки (excel 2007) такого св-ва нет. Предположу, что нужна библиотека (возможно самописная) со своим событиями, которая будет ловить события excel и они будут видны в Наве.
Старый 14.11.2013, 11:28   #6  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Цитата:
Сообщение от InTacto Посмотреть сообщение
По идее у аутомейшена есть св-во withevents и оно ,при выставлении в true, позволяет увидеть события (появяться новые тригеры), которые доступны в библиотеке.
У меня в 12 версии библиотеки (excel 2007) такого св-ва нет. Предположу, что нужна библиотека (возможно самописная) со своим событиями, которая будет ловить события excel и они будут видны в Наве.
У меня такое свойство есть, и полсе выставления в истину появились тригеры, в том числе и тот, что я привел.
Что дальше с ними делать? Мессаж, записанный в excel::WorkbookBeforeClose(Wb : Automation "'Microsoft Excel 14.0 Object Library'.Workbook";VAR Cancel : Boolean) не появляется после закрытия книги. Что то надо еще сделать?
Старый 14.11.2013, 11:41   #7  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
а как вы книгу открывали?
Старый 14.11.2013, 11:44   #8  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
excel.Workbooks._Open(FileName);
Старый 14.11.2013, 12:08   #9  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Может вы не тот экземпляр приложения закрываете.
У меня тоже появились эвенты перенес переменый из локальных в глобальные />/>/>

Код:
Name	DataType	Subtype	Length
xlApp2	Automation	'Microsoft Excel 12.0 Object Library'.Application	
xlWrkbook2	Automation	'Microsoft Excel 12.0 Object Library'.Workbook	
a	Automation	'Microsoft Excel 12.0 Object Library'.Range	


// код кнопки открытия файла
CLEAR(xlApp2);
CREATE(xlApp2,TRUE);
xlApp2.Visible := TRUE;

//xlWrkbook2 := xlApp2.Workbooks.Add;
xlWrkbook2 := xlApp2.Workbooks.Open('Путь до файла');
a := xlApp2.ActiveCell;


//код эвента
xlApp2::WorkbookBeforeClose(Wb : Automation "'Microsoft Excel 12.0 Object Library'.Workbook";VAR Cancel : Boolean)
MESSAGE('1');
Когда закрываю книгу или приложения, то выводится "1"
Пробовал создавать книгу и на эвенте создания выводил название книги - тоже робит.
Старый 14.11.2013, 12:09   #10  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
Ах да.
Эвенты включены только для переменной xlApp2
Старый 14.11.2013, 12:16   #11  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Вот как... работает так просто значит... У меня один экземпляр, и один ексель открыт. И сообщения не появляется. Может потому, что весь код в отдельном кодюните... Ну ладно, буду думать)
Старый 14.11.2013, 13:01   #12  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Точно, все дело в том, что работа с екселем была вынесена в кодюнит. Перенес открытие екселя и события в форму, все заработало. Спасибо InTacto, натолкнул на мысль)
Старый 19.11.2013, 13:17   #13  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Есть еще такая проблема, при отлове события excel::WorkbookBeforeClose(Wb : Automation "'Microsoft Excel 14.0 Object Library'.Workbook";VAR Cancel : Boolean) я после нужных мне манипуляций закрываю книгу нормально Wb.Close(FALSE), но как закрыть саму программу екселя, которая остается висеть? excel.Quit не помогает.

Все работает, если закрывать ексель не по крестику в окне, а через alt+F4, тогда и событие отрабатывает, и ексель закрывается... Но это не очень хорошо)
Старый 19.11.2013, 14:13   #14  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
я бы еще предложил делать clear для excel и wb, т.к. создание объектов происходит по команде create, а не при открытии книги.
Старый 19.11.2013, 15:17   #15  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Цитата:
Сообщение от InTacto Посмотреть сообщение
я бы еще предложил делать clear для excel и wb, т.к. создание объектов происходит по команде create, а не при открытии книги.
Ну Wb локальная, очиститься после выхода из процедуры я думаю... а для excel я делаю очистку. Не помогает.
Старый 19.11.2013, 15:28   #16  
InTacto is offline
InTacto
Участник
Аватар для InTacto
 
323 / 11 (1) +
Регистрация: 09.08.2005
UserControl(TRUE) - а эту инструкцию делаете?
Старый 20.11.2013, 07:15   #17  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Нет, не делал... Сейчас попробовал поставить ее после открытия екселя, не помогло. Что она вобще делает?) Разницы не заметил что с ней, что без нее)
Старый 20.11.2013, 18:39   #18  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
На сколько помню usercontrol передает управление приложением пользователю. Т.е. не NAV будет дальше работать с книгой Excell а пользователь, и закрывать тоже))
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
Старый 21.11.2013, 07:24   #19  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Нифига этот usercontrol не работает) Делал так
Код:
  IF NOT CREATE(excel,TRUE) THEN
    ERROR(Text100);
  excel.Workbooks.Open(TempName);
  book := excel.ActiveWorkbook;
  sheet := book.Worksheets.Item(1);
  sheet.Activate;
  excel.Visible(TRUE);
  excel.UserControl(TRUE);
  CLEAR(book);
  CLEAR(sheet);
Excel как не закрывался по крестику, так и не закрывается.... более того, после отработки кода и ексель не появляется на переднем плане, что должно происходить при вызове usercontrol как я понял... По сути же свойство на работу екселя никак не повлияло, без него так же все работало.
Старый 21.11.2013, 11:59   #20  
zuzka is offline
zuzka
Участник
Аватар для zuzka
 
131 / 10 (1) +
Регистрация: 29.07.2013
Код:
XlApp	Automation	'Microsoft Excel 14.0 Object Library'.Application	
...
...
XlApp.Visible(TRUE);
XlApp.UserControl(TRUE);
CLEAR(XlApp);
и все отлично отрабатывает.
__________________
Как только вы проиграете, все ваши прошлые победы забудут.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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