#0
by H A D G E H O G s
При выполнении метода объекта, в которого пытаюсь передать ДвоичныеДанные, 1С ка вываливает модальное окно с ошибкой "Неверный аргумент" и после, закрывается. Дебагером по стеку в Дельфи вижу, что ошибка возникает раньше, чем выполнение перейдет во внешку, тоесть проверка производиться в самой платформе (была бы ошибка в описании приема параметра функции - стек бы "дошел" до самой компоненты). Тоесть, возвращать ДвоичныеДанные она (компонента) - может, а принимать - нет? p.s. Как бы не проблема - передам Base64 строку, но все таки..?
#3
by orefkov
Насколько я помню, в Native API между ВК и платформой ходят только простые типы данных, объекты не поддерживаются. А так вообще по описанию плохо понятна твоя проблема. Код посмотреть, мож че и подсказал бы.
#4
by DmitrO
Cаня, это так. Но я своими глазами в документации по технологии ВК читал как там передавать из компоненты именно двоичные данные. (Но вообще-то не пробовал.) Удивительно что в компоненту их передать нельзя.. похоже на косяк. релиз бы назвать надо бы..
#6
by Serginio1
Вообщето судя по соурсам procedure TV8UserObject.V8ClearVar(V: PV8Variant); begin if (V.vt and VTYPE_TYPEMASK) in [VTYPE_BLOB, VTYPE_PSTR, VTYPE_PWSTR, begin case (V.vt and VTYPE_TYPEMASK) of VTYPE_BLOB: if V.VarEnum.vtRecString.pstrVal <> nil then V8MM.FreeMemory(@(V.VarEnum.vtRecString.pstrVal)); VTYPE_PSTR: if V.VarEnum.vtRecString.pstrVal <> nil then V8MM.FreeMemory(@(V.VarEnum.vtRecString.pstrVal)); VTYPE_PWSTR: if V.VarEnum.vtRecWideString.pwstrVal <> nil then V8MM.FreeMemory(@(V.VarEnum.vtRecWideString.pwstrVal)); По идее должен, только память выделять и очищатьсамому .нужно
#7
by Serginio1
А вообще по уму нужно сделать оболочку для IDispatch через ITypeInfo и будет все работать на вин клиентах.
#10
by H A D G E H O G s
Вообще - покуй XDTO преобразование - и массив с числами (строками) в виде текста ушел в ВК. Там его ласково встречает TXMLDocument и все пучком.
#12
by H A D G E H O G s
И еще - че то задумался - а в СП нигде не встретил, что COM компонента на Тонком недоступна. Принял на веру читая форум. Это факт?
#13
by Serginio1
Ну ты даешь? Уже лет десять пользуюсь, только этой ВК с с объектами автоматизации. Для Native API между методами нужно из PV8Variant в олевариант и обратно и писать только Idispatch объекты хоть на Delphi, хоть на Net и не мучаться
#14
by Serginio1
А вообще до этой ВК я и делал маленькую ВК которая возвращала в 1С ссылку на appDispatch которую передавал уже в олешный объект откуда доставал все интерфейсы обратного вызова, вот и сейчас так же можно и поступить.
#16
by Serginio1
ВК нужна в большинстве случаев только для ExternalEvent В олешной ВК это интерфейс а вернее IAsyncEvent. Просто создавалась вк которая при function Init(pConnection: IDispatch) сохраняла pConnection И был метод который возвращал этот pConnection в 1С и уже эта переменная передавалась в Олеобъект который из этой переменной и доставал все нужные интерфейсы. Здесь немного сложнее но можно получить TV8AddInDefBase и передавать его в оле объект. Но как там передача с олеобъектами. Вообще как через тип TV8InterfaceVarRec можно передать.
#17
by Serginio1
Вернее так внутри вк создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase, вернуть в 1С через переменную типа TV8InterfaceVarRec и вот ее уже передавать в Оле объект.
#20
by Serginio1
Точно? Тогда зачем он нужен этот тип TV8InterfaceVarRec? Но в любом случае создать ВК которая загружала бы оле объект и вызывала бы его методы через IDispatch c рефлексией через ITypeInfo не сложно. Рыба уже есть. А объект поддерживающий IAsyncEvent,IStatusLine,IErrorLog все равно нужно. Попытка не пытка?
#21
by H A D G E H O G s
Но у меня есть идея, как передать ole объект в 1С. 1) создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase 2) Зарегистрировать его в ROT 3) Вернуть его идентификатор в ROT -е в 1С (не помню че там GUID вроде) 4) Написать COM-сервер простенький, который получит этот COM объект из ROT-а 5) Новый ComОбъект поддерживается ТонкимКлиентом 6) Вернем ОЛЕ объект вызовом метода COM сервера. 7) Профит
#24
by Serginio1
По уму раз 22: (vtRecInterface: TV8InterfaceVarRec); 24: (vtRecWideString: TV8WideStringVarRec); Раз две последние работают, почему первый не должен. Все равно будешь реализовывать интерфейсы попробуй и с передацей в 1С. А как ты из ВК в этот пока непонятном для меня ROT будешь регестрировать?
#25
by H A D G E H O G s
а) Выполнение на линукс-сервере б) Выполнение в неIE веб браузере в) Теоретически - шустрее Вроде бы так.
#27
by Serginio1
ROT я так понимаю синглетон оле сервер в который можно передать объект и из него и получить?
#31
by H A D G E H O G s
цитата Возвращаемые значения типа VTYPE_ARRAY и VTYPE_BYREF не поддерживаются.
#33
by Serginio1
Спасибо вспомнил. Но в конце то концов можно вернуть как число, а в олеобъекте привести к интерфейсу
#35
by H A D G E H O G s
Но это все лирика. Физика говорит мне, что пока буду юзать XDTO. А вот червь сомнений гложет меня в плане - осилит ли система XDTO сериализацию на массив этак скажем в пару миллионов элементов?
#36
by Serginio1
А зачем тебе XDTO. Я вообще склоняюсь к встроенной Базе данных кторых как собак нерезанных.И сериализуй и десериализуй из неё на основании метаданных. Все очень комактно и быстро за счет индексов.
#37
by Кирпич
Ну в документации 1с написано что только простые типы и можно возвращать из ВК двоичные данные. Всё. Чо вы как будто расстроилися.
#38
by Serginio1
Ну объект это число и лучше четырех байтное. Просто нужно знать к чему его приводить.
#41
by Serginio1
И чем XDTO от бд отличается? Только излишней информацией. Если объекты содежат множество ссылочных полей, то сериализавать их проще в разные таблицы с индексами по ключевым полям.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- SQL STATE: 08501 NATIVE: 11 что за ошибка?
- Ошибка SQL State: 23000 Native: 1505 - обновление решения проблемы
- sql state: 08001 native:17
- 8.2 Внешняя компонента Native API
- Работа с данными 1С из внешней компоненты Native API
- DLL Native API (Delphi)
- v8: Образец внешней компоненты Native API для 8.2 (Infostart)
- v7: 1С 7.7 + SQL 2005: ошибка SQL State:42000 Native:468 (конфликт сортировки)
- native API на C++. Функция со строковым параметром и строковым результатом.
- Внешние компоненты Native API
- Компоненты Native API и их кэширование НаСервере
- Ошибка СУБД: MIcrosoft SQL native client: client invalid object name '#tt15'
В этой группе 1С
- v7: как запустить 1с 7.7 в windows7
- Outlook - отправка только на один адрес
- Консоль и СКД
- 1С 8.2/8.1 Как лучше получить данные с другой базы напрямую?
- v7: Делаю свертку базы в 1с77. Кое-что не учел. Помогите плииз.
- Варианты отчетов. Как их делать?
- Почему в КА автоматически не проставляется ГТД?
- Обновление 1С; Розница с 1.0 на 2.0
- Общая шапка у колонок табличной части
- v7: как добавить новую колонку в табличную часть документа ???
- Програмное изменение СКД в управляемом интерфейсе
- переход с 1.6 на 2.0
- v7: Поиск в подчиненном справочнике
- Перевести сервер 8.1 на другой порт
- Одинаковые записи регистра сведений
- Передать реквизит формы в модуль объекта.
- Как программно упорядочить список по реквизиту
- ЗУП Получить количество занимаемых ставок в формуле ВР
- Не работает ЗагрузитьКолонку
- УТ 10.3. Розничная торговля.