| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Хочу запускать Job в аксапте в автоматическом режиме и гасить ее после отработки Job'а. 
		
		
		
		
		
		
		
	Написал Job - в аксапте все отлично работает. Когда обращаюсь к аксапте через COM и запускаю этот Job - происходит ошибка, вылетает трассировка стека - типа TreeNode object не инициализирован. Думал это метод CallJob такой кривой - нет ведь, доработал класс - добавил статический метод для запуска того-же самого и вызываю его при помощи метода CallStaticClassMethod. Вызывается все нормально, но дальше опять падает. Вот отрывок из метода, в котором происходит падение: void ProcessJobs() { TreeNode treeNode, nodeInLayer, tmpNode, methodNode; int i; ; treeNode = infolog.rootNode(); treeNode = treeNode.AOTfindChild("Jobs"); // <-- Падение происходит здесь!!! Может кто сталкивался с подобной ерундой? ЗЫ: То, что Box::Info не работает - в принципе логично, т.к. пользовательского интерфейса в случае с COM'ом нет (хотя даже в этом случае можно через Win API сообщениями кидаться  .
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Который раз задаю вопрос на форуме - и тишина.... 
		
		
		
		
		
		
		
	Выходит, что все проблемы, которые обсуждаются на форуме я могу решить и сам, а вот когда реальная проблема - помощи от форума ноль. Жаль, очень жаль.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хм... видимо, никто такие задачи не делал.. но ответ очевиден 
		
		
		
		
		
		
		
	при работе через COM infolog не возвращает rootNode.. ищите другой метод для получения rootNode  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Re: Ндааа.....
			 Цитата: 
	
		
			Изначально опубликовано Fedor  
Который раз задаю вопрос на форуме - и тишина.... Выходит, что все проблемы, которые обсуждаются на форуме я могу решить и сам, а вот когда реальная проблема - помощи от форума ноль. С одной стороны, это говорит о вашей квалификации. С другой стороны здесь не обязаны отвечать на вопросы. http://www.axforum.info/forums/showt...stid=13070#2_2 Тем более на сложные. Реальные проблемы эффективнее решать на договороной основе. У вас будут хоть какие то гарантии и рычаги воздействия. Советую также обратить внимание на пункты 2.3 и 2.4.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Я уж было подумал, что кто-то ответит по существу :-)
			 
			
			Сергей, спасибо за напоминание, но я не предъявлял претензий ни к форуму ни к его обитателям.  
		
		
		
		
		
		
		
	Просто мысли в слух, извините, что не очень приятные. 2 Wamr: Спасибо за идею, я получил rootNode другим способом - xInfo xInfo = new xInfo(); ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Jobs"); и это помогло. Но дальше возникла опять неразрешимая проблема: while (treeNode) { for (i = 0; i <= 0xF; i++) { if (bitTest(treeNode.applObjectLayerMask(), 1 << i)) { nodeInLayer = treeNode.getNodeInLayer(i); вот в этом куске при обращении к Аксапта через COM, конструкция treeNode.getNodeInLayer(i) возвращает пустое значение, хотя при запуске данного кода в самой аксапте (с GUI) все отлично работает. И такие ловушки на каждом шагу. При запуске Аксапта через COM почему-то перестают работать многие методы общеупотребимых классов. к примеру Box::Info("Bla-Bla-Bla") выдаст ту же самую трассировку стека с сообщением о том, что объект не инициализирован.    вот такие пироги....может аксапта какая кривая - 2.5 SP5 HF1  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Привет 
		
		
		
		
		
		
		
	Мне так кажется нужно смотреть как Аксапта заходит в систему, если учесть что при запуске Аксапты инициализируются глобальные Объекты Аксапты может быть из-этого. Ты можешь напечатать твой код с COM Connectoroм. Кстати есть возможность трассировать вызовы COM Connectora внутри Аксапты может быть тебе это поможет. Извини что ничего конкретного. Просто я не сталкивался с такой задачей.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Код.
			 
			
			Пожалуйста :-) 
		
		
		
		
		
		
		
	Вот: procedure TForm1.Button1Click(Sender: TObject); Var Axapta : Taxapta2; begin Axapta := TAxapta2.Create(NIL); Axapta.Logon2('','','cor','ru','','','WORK_DIRECT'); Axapta.CallJob(WideString('CORI01_FillCASnapshot_Job')); Axapta.Logoff(); end; А каким образом можно "трассировать вызовы COM Connectora внутри Аксапты "? Спасибо, Федор.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Извини что долго не отвечал 
		
		
		
		
		
		
		
	Трассировка COM конектора, запускаешь Axapta Configuration на закладке Bissnes Connector есть галочка трассировать X++. Я бы смотрел инициализирован ли объект Session. Извини что не помог не сталкивался  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Спасибо за ответ, но вот в чем загвоздка - когда я открываю конфигурационную утилиту своей аксапты я не вижу закладки "Bissnes Connector " (только "COM Connector", но на ней нет описанной галочки).
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			К прошлому сообщению почему-то не прикрепилась иллюстрация :-/
		 
		
		
		
			 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня Аксапта 3.0  
		
		
		
		
		
		
		
	  а у тебя какая ?
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Привет, 
		
		
		
		
		
		
		
	Трассировка работает только в Аксапте 3.0. Я сделал примерчик по твоему образу и подобию почти, так как работаю в 3.0 static void Job2(Args _args) { int i; Test t; TreeNode treeNode; TreeNodeIterator treeNodeIterator; xInfo xInfo = new xInfo(); ; treeNode = TreeNode::rootNode(); treeNode = treeNode.AOTfindChild( "Jobs" ); treeNodeIterator = treeNode.AOTiterator(); treeNode = treeNodeIterator.next(); while (treeNode) { t.Name = treeNode.treeNodeName(); t.insert(); treeNode = treeNodeIterator.next(); } } Public Sub TEST() Dim Axapta As Object Set Axapta = CreateObject("AxaptaCOMConnector.Axapta") Axapta.Logon Axapta.CallJob "Job2" End Sub Посмотрел потом таблицу TEST , Job ее заполняет, значит все работает  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Привет, 
		
		
		
		
		
		
		
	Спасибо! Насчет версии аксапты - да, засада. У меня 2.5, кстати, я в предыдущих сообщениях указывал. Насчет кода - тоже указывал, не работает код следующего вида: while (treeNode) { for (i = 0; i <= 0xF; i++) { if (bitTest(treeNode.applObjectLayerMask(), 1 << i)) { nodeInLayer = treeNode.getNodeInLayer(i); // <- Возвращает пустое значение. Твой код у меня тоже работает :-) Федор.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Привет, тоже была проблема, я вызывал функцию infolog.startImport(), которая не отрабатывала. У меня Аксапта 4.0. Для того чтобы нормально работал infolog нужен запущенный клиент Аксапты. Чтобы всетаки использовать infolog.startImport() я сделал Батч-сервер(клиент Аксапты) и написал батч джобу которая запускает инфолог.  
		
		
		
		
		
		
		
	обсуждения на форуме: Извне SysImportElements  | 
| 
	
 |