| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Работа с COM-объектом 1С - НайтиПоКоду не ест параметры :(
			 
			
			Приветствую всех. 
		
		
		
		
		
		
			Проблема с вызовом метода ком-объекта 1С - НайтиПо Коду или FindByCode. Чего установлено: Windows XP, Axapta 3.0 SP2 CIS, 1C - 7.70.018 Ошибка: Метод 'FindByCode' в COM-объекте класса '<unknown>' возвратил код ошибки 0x80070057 (E_INVALIDARG), который означает: Один или более аргументов не верен. Хотя вот тут http://www.axforum.info/forums/showt...p?threadid=920 уже обсуждалась эта проблема, мне пока не удалось заставить метод работать по человечески... ![]() Вот код. Он очень похож на тот кусок, который Маззи запостил и тогда назвал его заведомо рабочим: PHP код: 
	
			
	И ещё: эта ошибка возникает только на win2k и winXP. Под 98-ми этот же код выполняется без эксепшенов... Присоветуйте, как бороться? 
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Imho самым простым решением будет дописать в глобальнике 1C что-нибудь вроде  
		
		
		
		
		
		
			Функция глПоискПоКоду(Назв, Код) Экспорт спр = СоздатьОбъект("Справочник." + Назв); если спр.НайтиПоКоду(Код, 0) = 1 тогда Возврат спр; конецЕсли; КонецФункции ...и вызывать ее как метод объекта application => Возвращаемое значение можно принять в переменную типа COM и использовать. 
				__________________ 
		
		
		
		
	- Зацени, Баттхед: я поставил Аксапту! - Вот клёво! Ну ты даешь, пельмень!  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Тоже вариант, конечно... Но это не спортивно  
		
		
		
		
		
		
			![]() Ладно бы оно нигде не работало, так ведь местами работает всё-таки... Значит может, зараза... 
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Re: Работа с COM-объектом 1С - НайтиПоКоду не ест параметры :(
			 Цитата: 
	
		
			Изначально опубликовано Tony Green  
Вот код. Он очень похож на тот кусок, который Маззи запостил и тогда назвал его заведомо рабочим: Тогда мы долго искали с 1Сниками решение, которое работало бы на всех релизах. Вроде пришли к рекомендации, что второй параметр надо передавать как строку PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не помогает, к сожалению  
		
		
		
		
		
		
			 
		
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Люююююдииии!!!  
		
		
		
		
		
		
			Ну почему? почему работает вот это: PHP код: 
	
			
	PHP код: 
	
			
	PHP код: 
	
			
	PHP код: 
	
			
	  Причем тот же код работает под 98-ми виндами... Не понимаю  
		
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			так, Tony Green, спокойствие. 
		
		
		
		
		
		
		
	Я вчера проверил. Да, не работает с 21 релизом, ни 3.0, ни 2.5. Раньше работало. Барабашки нет. Значит что-то изменилось. Задача - выяснить. Да, действительно. Сам метод отрабатывает, но Аксапта возбуждает исключение. Исключение возбуждается поскольку метод возвращает ненулевой HRESULT. Если вы знакомы с COM, то должны знать, что внутри совсем все не так как пишется в коде. У меня подозрение, что 1С в некоторых конфигурациях выполняет код правильно, но возвращает HRESULT. Аксапта это ловит. Все басикоподобные языки сильно обертывают и прячут COM-события. Обратите внимание, что в басике и дельфи вы вызываете FindByCode как МЕТОД, а не как функцию! Обратите внимание, что там где у вас работает нет Retval параметра. Аксапта же всегда вызывает как функцию и хочет получить возвращаемое значение. Здесь то ее похоже и обламывают. Я протестил и Excel VBA. Excel выполнил не возбудил никаких исключений. У меня подозрение, что он и не смотрит в HRESULT. Т.е. все произошло так, как будто в Аксапте вызов findByCode обернули в Try catch. Погодите, хочу протестировать с ключом, с соболем и с соароном. Хочу протестировать 18 и 21 релиз, DBF и SQL версию. Обязательно расскажу о результатах. Пока у меня вопрос: какой HRESULT возвращает 1С, если вызвать ее из Delphi через iDispatch?  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Из Delphi, если вызывать методы COM-объекта 1С явно через Dispatch интерфейс, HRESULT возвращается нулевой...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			спасибо. похоже проблема таки в Аксапте... 
		
		
		
		
		
		
		
	но пока не могу найти 18 релиз...  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			кстати, если в X++ вызывать FindByCode просто, как метод COM объекта, то при выполнении вылезает ошибка: Метод 'FindByCode' в COM-объекте класса '<unknown>' возвратил код ошибки 0x80070057 (E_INVALIDARG), который означает: Один или более аргументов не верен. 
		
		
		
		
		
		
			Если же объявить метод перед вызовом как COMDispFunction и потом вызвать через call, то получается ошибка: Метод 'FindByCode' в COM-объекте класса 'unknown' возвратил код ошибки 0x80020010 (unknown), который означает: unknown. Что это означает я тоже пока не понял  
		
				__________________ 
		
		
		
		
	С уважением, Tony Green  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Куда положить искомое?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ломалки не надо. 
		
		
		
		
		
		
		
	все остальное, если не несколько мегабайт, можно сюда. если большое, то можно подумать.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			DSV, мне подсказали, что я мог ошибиться в трактовке вашего предложения. Извините. 
		
		
		
		
		
		
		
	Если вы имели в виду 18 релиз, то ни в коем случае сюда его класть не надо. Не нужно здесь никакого софта. Если вы говорили о работающем проекте, который вы сделали для Аксапты, то можно сюда его положить можно. А еще лушче положить его в раздел проекты.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сорри, неясно выразился. 
		
		
		
		
		
		
		
	Имелся в виду именно 18 релиз - порядка 14 метров. Но проверить работоспособность примера из-за нехватки времени все не получается.  ((((
		 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Не надо релизы на форум выкладывать. 
		
		
		
		
		
		
		
	проблема та же - нужно время.  | 
| 
	
 |