|  06.04.2004, 13:29 | #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 | 
|  | 
|  06.04.2004, 14:11 | #2 | 
| Участник | 
			
			Imho самым простым решением будет дописать в глобальнике 1C что-нибудь вроде  Функция глПоискПоКоду(Назв, Код) Экспорт спр = СоздатьОбъект("Справочник." + Назв); если спр.НайтиПоКоду(Код, 0) = 1 тогда Возврат спр; конецЕсли; КонецФункции ...и вызывать ее как метод объекта application => Возвращаемое значение можно принять в переменную типа COM и использовать. 
				__________________ - Зацени, Баттхед: я поставил Аксапту! - Вот клёво! Ну ты даешь, пельмень! | 
|  | 
|  06.04.2004, 14:33 | #3 | 
| Участник | 
			
			Тоже вариант, конечно... Но это не спортивно   Ладно бы оно нигде не работало, так ведь местами работает всё-таки... Значит может, зараза... 
				__________________ С уважением, Tony Green | 
|  | 
|  06.04.2004, 16:13 | #4 | 
| Участник | Re: Работа с COM-объектом 1С - НайтиПоКоду не ест параметры :( Цитата: 
		
			Изначально опубликовано Tony Green  Вот код. Он очень похож на тот кусок, который Маззи запостил и тогда назвал его заведомо рабочим: Тогда мы долго искали с 1Сниками решение, которое работало бы на всех релизах. Вроде пришли к рекомендации, что второй параметр надо передавать как строку PHP код: 
			 | 
|  | 
|  06.04.2004, 16:16 | #5 | 
| Участник | 
			
			Не помогает, к сожалению    
				__________________ С уважением, Tony Green | 
|  | 
|  07.04.2004, 13:02 | #6 | 
| Участник |   
			
			Люююююдииии!!!  Ну почему? почему работает вот это: PHP код: 
			PHP код: 
			PHP код: 
			PHP код: 
			 Причем тот же код работает под 98-ми виндами... Не понимаю   
				__________________ С уважением, Tony Green | 
|  | 
|  07.04.2004, 14:07 | #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? | 
|  | 
|  08.04.2004, 10:35 | #8 | 
| Участник | 
			
			Из Delphi, если вызывать методы COM-объекта 1С явно через Dispatch интерфейс, HRESULT возвращается нулевой...
		 
				__________________ С уважением, Tony Green | 
|  | 
|  08.04.2004, 12:04 | #9 | 
| Участник | 
			
			спасибо. похоже проблема таки в Аксапте... но пока не могу найти 18 релиз... | 
|  | 
|  09.04.2004, 14:26 | #10 | 
| Участник | 
			
			кстати, если в X++ вызывать FindByCode просто, как метод COM объекта, то при выполнении вылезает ошибка: Метод 'FindByCode' в COM-объекте класса '<unknown>' возвратил код ошибки 0x80070057 (E_INVALIDARG), который означает: Один или более аргументов не верен. Если же объявить метод перед вызовом как COMDispFunction и потом вызвать через call, то получается ошибка: Метод 'FindByCode' в COM-объекте класса 'unknown' возвратил код ошибки 0x80020010 (unknown), который означает: unknown. Что это означает я тоже пока не понял   
				__________________ С уважением, Tony Green | 
|  | 
|  12.04.2004, 05:26 | #11 | 
| Участник | 
			
			Куда положить искомое?
		 | 
|  | 
|  12.04.2004, 06:43 | #12 | 
| Участник | 
			
			ломалки не надо. все остальное, если не несколько мегабайт, можно сюда. если большое, то можно подумать. | 
|  | 
|  12.04.2004, 17:00 | #13 | 
| Участник | 
			
			DSV, мне подсказали, что я мог ошибиться в трактовке вашего предложения. Извините. Если вы имели в виду 18 релиз, то ни в коем случае сюда его класть не надо. Не нужно здесь никакого софта. Если вы говорили о работающем проекте, который вы сделали для Аксапты, то можно сюда его положить можно. А еще лушче положить его в раздел проекты. | 
|  | 
|  14.04.2004, 09:10 | #14 | 
| Участник | 
			
			Сорри, неясно выразился. Имелся в виду именно 18 релиз - порядка 14 метров. Но проверить работоспособность примера из-за нехватки времени все не получается.  (((( | 
|  | 
|  14.04.2004, 11:29 | #15 | 
| Участник | 
			
			Не надо релизы на форум выкладывать. проблема та же - нужно время. | 
|  |