#0
by qeos
ктото имеет опыт разработки компонент не используя 1CNativeLib и подобные вещи? т.е. интересует глобальный вопрос: как получить pConnection в компоненте?
#3
by qeos
если создаю все через wizard то у меня нет объекта 1с, например для создания массива или запроса..
#5
by qeos
так все работает но мне надо к примеру вернуть массив.. как? ) вот как? можно подробней? )
#8
by qeos
если я правильно понимаю, то надо изменить процедуру под мои нужды: procedure Initialize(const pConnection: IDispatch); override; но так он ругается что описани отличается от предыдущего. если же я указываю reintrodused, то у меня в эту процедуру не заходит вообще.
#11
by qeos
в примерах 1с nativeAPI есть инициализация bool CAddInNative::Init(void* pConnection) в переделаном под delphi тоже есть такая соответственно это IDispatch на 1с.. с помощью pConnection можно создавать объекты 1с. вот как это переложить на нормальный язык, я чтото никак не вкурю. по теории 1С при создании (подкгрузке) компонента вызывает процедуры инициализации. вот их-то, как я понимаю, я и должен изменить. т.к. в документации написано так: [code]Инициализация и выгрузка компоненты Для инициализации и выгрузки компоненты используется интерфейс IInitDone. Этот интерфейс наследован от IUnknown и предназначен для инициализации объекта и завершения работы с объектом. Init Синтаксис: Параметры: <pBackConnection> Тип: IDispatch. Указатель на интерфейс 1С:Предприятия. Возвращаемое значение: E_FAIL - при инициализации произошла ошибка S_OK - инициализация прошла успешно Описание: При загрузке 1С:Предприятие инициализирует объект компоненты, вызывая метод Init и передавая указатель на IDispatch. Объект может сохранить этот указатель для дальнейшего использования. Все остальные интерфейсы 1С:Предприятия объект может получить, вызвав метод QueryInterface переданного ему интерфейса IDispatch. Объект должен возвратить S_OK, если инициализация прошла успешно, и E_FAIL при возникновении ошибки. Данный метод может использовать интерфейс IErrorLog для вывода информации об ошибках. При этом инициализация считается неудачной, если одна из переданных структур EXCEPINFO имеет поле scode, не равное S_OK. Все переданные в IErrorLog данные обрабатываются при возврате из данного метода. В момент вызова этого метода свойство AppDispatch не определено.[/code]
#15
by qeos
при визарде никаких процедур Init нету, есть Initialize, но она описана в базовом классе и не имеет параметров.
#16
by Кирпич
шо ищо за визард? если это та древняя фигня, то у TFPList есть pConnection. уже готовый
#17
by Serginio1
Посмотри Исходник ВК которая загружает Объект Автоматизации поддерживающий ITypeInfo и выполняет все его свойства и методы через IlanguageExtender. Использую 10 лет
#28
by qeos
смысла нет почтой общаться. вобщем нужно победить BackConnection для XE4 не используя жесткие костыли. т.е. элегантно получить backConnection называй свою цену.
#32
by Кирпич
что такое "победить BackConnection для XE4" я не понял. да и к тому же XE4 у меня нет.
#36
by Serginio1
Вообще восьмерка поддерживает события, так же можно передать ссылку на модуль в которой реализовать метод с определенной сигнатурой
#37
by Serginio1
То есть создай в свем ком объекте событие например DocumentChange и подпишись из 1С. Не забывай вызывать в потоке 1С. 1С совский эвент ассинхронный.
#41
by Serginio1
Если тебе нужен контекст то, можешь из него передавать, что хочешь. Второй способ это V83.COMConnector . Ну если посмотришь мою компоненту тебе нужно только создать метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); begin If Not Assigned(pConn) Then end Например для семерки это Который вызовется при подключении.
#42
by Serginio1
41 Вернее ты можешь создать компоненту которая вернет в 1с pCon, а её уже передавать в любой COM объект
#48
by qeos
дада... но это все не то.. чтото здесь я упускаю.. у меня все работает прекрасно кроме того что нету этого BackConnection..
#49
by Serginio1
Как это нет. PEvent := nil; IDispatch(pCon).QueryInterface(IAsyncEvent,PEvent); Это что? Эта компонента тебе дает возможность просто писать ком объект. От тебя требуется только реализовать метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); А вот из этого pCon получай что тебе нужно. procedure GetEventBufferDepth(var plDepth: Integer); safecall;
#50
by Serginio1
Из него же получай свой BackConnection obj:=OleVariant(Pconn).AppDispatch; IDispatch(obj)._AddRef;
#53
by qeos
жаль.. тогда пару вопросов. для получения backConnection, как минимум, достаточно реализовать только IInitDone?
#54
by qeos
взял твой пример из папки AddinTypeInfo в 1С я должен создать объект окошко из ProbaWind открывается. как мне вызвать InitFrom1C? что в параметрах писать?
#56
by Serginio1
Ты не весь пример показал. Это ты создаешь компоненту. Затем из компоненты ты должен загрузить свой ком объект А внутри Ком объекта ты должен реализовать то что написал в 41. Посмотри примеры
#57
by Serginio1
Для понимания 41 вот объявление класса. TAddinTypeInfo = class(TAutoObject, IAddinTypeInfo) У меня очень много работы. Так, что появляться буду не часто.
#59
by qeos
оказывается правильный вариант был такой: а вот теперь вопрос еще сложнее.. а если у меня компонента должна встраиваться в форме, то ПодключитьВнешнююКомпоненту я все равно эе должен делать гдето в коде?
#61
by Serginio1
Если тебе нужны создавать окна, то тебе нужны родительские окна IDispatch(pCon).QueryInterface(IExtWndsSupport,pExtWndsSupport); Для контейнеров нужно реализовывать другие интерфейсы и они с ВК никак не связаны.
#62
by Serginio1
56 это выглядит так Загружаем ВК Затем загружаем КОМ объект в котором реализован метод procedure TAddinTypeInfo.InitFrom1C(const pCon: IDispatch); TypeInfo.LoadOleObject("AddinTypeInfo.AddinTypeInfo");
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- ЗУП Оплата праздничных и выходных дней.
- Поле HTML документа не освобождает память.
- Подсчет среднего с нарастающим итогом в СКД
- Перегрузка данных между базами
- Привязка заказа клиента к заказу поставщику в УТ11
- v8: Как таблицу значений выгрузить на управляемую форму в таблицу значений?
- v8: Ошибка 8.3 при записи движений в регистре бухгалтерии.
- v7: Событие при изменении значения реквизита в Справочнике
- Регистр сведений при изменении реквизита ....
- План обмена *.НачатьЗапись
- отключить привилегированный режим
- v7: Поиск элементов справочника в определенной группе
- Как сделать ввод начальных остатков по счету 10.11.2 (Спец. оснастка в экcп.)
- Как через подписку на событие добавить запись в регистр?
- 1C 8.1 и 1С 8.2 на одном сервере. (баян, но 8.2. не видит серверный ключ)
- Как настроить вид расчёта, чтобы он начислялся один раз в месяц, независимо от к
- SalesWorks Мобильная торговля, интеграция 1с 8.2
- Как в УТ 10.3 базовой закрепить при заполнении только один склад?
- Возврат товаров от покупателя и Счет фактуры на аванс
- Тонкий клиент в УТ 10.3