Плагин OLE и 8.2 Типы не совпадают(-1). В чем дело? #674925


#0 by new1snik
Добрый день. Работаю с плагином OLE. Получаю СОМ объект: Далее использую встроенные функции: х = Клиент.RaceList.CurrentRace; После выполнения этого кода вылазит ошибка: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (RaceData)     Сообщить(Клиент.RaceList.RaceData(х)); по причине: Типы не совпадают (-1) Проблема в следующем: в описании плагина находится описание встроенных методов: long CurrentRace, TRaceListData RaceData(long Index). То есть Клиент.RaceList.CurrentRace возвратит long, а на вход RaceData требуется тоже long, и я не понимаю в чем причина.
#1 by Infsams654
TRaceListData RaceData(long Index , это как 1С может сообщить, она такого типа в глаза не видела
#2 by dk
можно попробовать обернуть все в VBS а там с типизацией получше
#3 by Капитан О
Клиент.RaceList.RaceData(Клиент.RaceList.CurrentRace) не спасёт?
#4 by new1snik
Нет, пробовал так...
#5 by Jaap Vduul
А в чём разница с ?
#6 by Капитан О
в отсутствии переменной
#7 by Jaap Vduul
А в 1цэ при помещении результата вычисления в переменную разве тип этого результата может поменяться?
#8 by Капитан О
едва ли
#9 by Infsams654
вернет скорее ComObject, так что, лучше Число(Клиент.RaceList.RaceData(х))
#10 by Jaap Vduul
Откуда ComObject возьмётся? Все числа 1цэ хранит с плавающей точкой, так что никакие изыски не помогут, в верное направление задано.
#11 by Infsams654
не верю, там же TRaceListData, а не просто long. Так, что и отдаст TRaceListData, а 1С примет как ComObject, т.к. не поймет, что это за тип
#12 by Капитан О
CurrentRace у него лонг
#13 by Jaap Vduul
Чтобы получить TRaceListData нужно выполнить RaceData, а у ТС как раз это и не получается: ... Ошибка при вызове метода контекста (RaceData)
#14 by new1snik
Так мудрено звучит, что аж страшно...
#15 by Serginio1
Может 1С не может отобразить структуру TRaceListData? Обычно внутри всегда есть приведение типа через VarCast
#16 by new1snik
Тут пока дело не в отображении, а именно в том, что тип передаваемого в метод параметра не подходит. Если я правильно понимаю.
#17 by Serginio1
Что из себя представляет TRaceListData ?
#18 by new1snik
Но ведь это не важно должно быть, что мне вернет метод, я пока просто пытаюсь передать в него параметр и получаю отказ..
#19 by Infsams654
ну и Сообщить(Клиент.RaceList.RaceData(х)); что тут можно сообщить ?
#20 by Капитан О
да пофих, пусть хоть "ком-объект"
#21 by dk
...
#22 by Serginio1
TRaceListData это не "ком-объект" так как "ком-объект" это IDispatch.
#23 by new1snik
Спасибо, посмотрю, попробую...
#24 by dk
для начала тупо проверь эти же строки в vbs если робит, то копай дальше
#25 by Infsams654
как да пофих, пусть хоть "ком-объект" если 1С не понимает что-то из ole, то com-object. А что оно должно показать иначе ?
#26 by Кирпич
Я так думаю, что 1с передает в ComObject тип Variant, а ComObject хочет получить long. Так что делай обертку для своего ComObject.
#27 by Serginio1
Что ты понимашь под OLE. Все параметры в IDispatch передаются через OleVariant. ComObject  для 1С это TvarData(varPropVal).VType:=VT_DISPATCH то это ComObject   если VT_RECORD  то не уверен, что 1С может работать с таким параметром
#28 by cw014
А в х = Клиент.RaceList.CurrentRace; x чему равен в отладчике?
#29 by Infsams654
так и я тоже про то. Если не понимает VT_RECORD, то как 1С у себя это проявит. Имхо, только как ComObject и пофиг. А дальше, уж, если получатель знает, что это за штука, то пусть обращается к нужному через точку, если это рекорд
#30 by new1snik
Та же самая ошибка: {ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (Eval)     Сообщить(vbs.Eval("GetDataLong")); по причине: Типы не совпадают (-1)
#31 by Serginio1
А теперь верни GetDataLong = OLE.RaceList.RaceData(OLE.RaceList.CurrentRace).MaxSpeed
#32 by cw014
Все, я вкурил. Там не КОМобъект возвращается, потому и тип не совпадает... В общем как в описано
#33 by new1snik
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта}: Ошибка при вызове метода контекста (Eval)     Сообщить(vbs.Eval("GetDataLong")); по причине: Произошла исключительная ситуация (Ошибка выполнения Microsoft VBScript): Требуется объект: 'OLE.RaceList.RaceData(...)' Какая то беда... вот опять я что-то упустил совершенно очевидное
#34 by cw014
Нету объекта значимо...
#35 by Кирпич
здесь смотрел?
#36 by new1snik
Скудно там написано и ничего нового.
#37 by Кирпич
А в ковычки вроде лишние
#38 by dk
так надо а если т.е. надо понять где ошибка в вбс или в момент получения в 1с результата
#39 by Кирпич
Там же пример есть test.ert в примере всё работает.
#40 by Кирпич
и без vbs
#41 by Jaap Vduul
vbscript структуры тоже не умеет готовить.
#42 by Кирпич
в LI_OLE_Library.dll есть описание типов. так что типы не причем. всё должно работать.
#43 by new1snik
выводит 1 Ты прям волшебник, я пытался запустить test.ert в 1с7.7, но тоже вылазило куча ошибок. Как сумел?
#44 by Кирпич
нажал кнопку "Сформировать"
#45 by Jaap Vduul
Может, у вас разные версии LI_OLE_Library.dll ?
#46 by Serginio1
#47 by dk
значит проблема в получении в 1с конвертируй например в строку в vbs и в 1с уже строку обрабатывай
#48 by Кирпич
я думаю не нужно обращаться напямую к RaceData, а использовать функции RaceList типа RaceSectionBeginIndex, RaceSectionFuel
#49 by Кирпич
Сообщить(Клиент.RaceList.RaceSectionFuel(НомерРейса)); конеццикла
#50 by Кирпич
чо молчишь? работает или нет?
#51 by new1snik
Выдал единичку.
#52 by new1snik
Сообщить(Клиент.RaceList.RaceSectionFuel);
#53 by Кирпич
ну всё работает. вопрос закрыт.
#54 by new1snik
Сообщить(Клиент.RaceList.RaceFuelNorm); А вот это уже не работает.... Да и проблема, которая была в первом сообщении не решилась.
#55 by Кирпич
проблемы нету. нужно просто вызывать нужные методы и всё.
#56 by cw014
Проблема в том, что типы этих методов - это экземпляры сишных классов, а не Ком-интерфейсов. Потому возвращает тебе тот набор данных, которая 1С неосиливает. Читай внимательней мануал
#57 by Кирпич
1с читает типы из tlb. всё прекрасно работает. получать структуру RaceData автору не нужно. Для доступа к данным структуры есть специальные методы. Ими и надо пользоваться.
#58 by new1snik
Ну раз такой умный, то поясни, пожалуйста, как понять какие методы правильные? Какой мануал?
#59 by new1snik
+ У меня просто на руках есть описание методов для работы с этим плагином в виде: TRaceListData RaceData(long Index) и все. Ну плюсом описание структур, которые я пока не трогал.
#60 by Кирпич
в файле "New HTML Help.chm" всё написано вот структура struct TRaceListData методы называются так же как поля структуры RaceSectionBeginIndex RaceSectionEndIndex и т.д.
#61 by Кирпич
в метод передаешь номер структуры
#62 by Кирпич
и еще. если есть рядом с тобой кто нибудь, попроси его треснуть тебе по башке линейкой. должно помочь. мне помогает.
#63 by Infsams654
+ в уже написано
#64 by Кирпич
+ я скачал этот долбаный Locarus Informer. скачал демо данные от туда же. зарегил LI_OLE_Library.dll. запустил 1с. открыл test.ert открыл Locarus Informer тыкнул мышкой на машину в test.ert нажал кнопку "Сформировать" отчет выдал ахиренную таблицу всё работает. теперь делаю всё в обратной последовательности. вот какой я очень добрый сегодня.
#65 by new1snik
Вот нифига подобного у меня не происходит, запускал эту обработку на 1С 7.7, он мне выдавал ошибку при запущенном локарусе. Сейчас попытаюсь повторить это на другом ПК, вдруг какой косяк с неправильной работой dll...
#66 by Кирпич
какую ошибку выдает?
#67 by new1snik
{C:DOCUMENTS AND SETTINGSADMINРАБОЧИЙ СТОЛРАБОТАРИФЛОКАРУСTEST.ERT}: Поле агрегатного объекта не обнаружено (BBDataDateTime)
#68 by Кирпич
ну не знаю. у меня без ошибок отработало. ковырять больше не буду. всё снёс.
#69 by Кирпич
#70 by new1snik
Окей, значит ошибка точно у меня и практически наверняка с работой dll...
#71 by Кирпич
скачай Плагин OLE заново
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С