Показать сообщение отдельно
Старый 07.04.2004, 14:07   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
так, 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?