Интеграция приложений (Interbase + 1C)
Модератор: kdv
Я бы посоветовал зайти с другой стороны. Более производительно и надежно - написать внешнюю компоненту 1С и из нее отслеживать изменения как в 1С (вызывая при записи элемента справочника метод компоненты), так и в ИБ (подписавшись из компоненты на события базы). В этом случае не будет использоваться тормозной код
App1C := CreateOleObject('V8.COMConnector');
Connect1C := App1C.Connect('Srvr="okulov";Ref="ovvDemo";...
можно будет не бояться падений udf и вообще все будет в шоколаде
App1C := CreateOleObject('V8.COMConnector');
Connect1C := App1C.Connect('Srvr="okulov";Ref="ovvDemo";...
можно будет не бояться падений udf и вообще все будет в шоколаде
Внешняя компонента 1С - in-proc сервер, реализующий несколько обязательных условий для подключения. 1С загружает его при выполнении метода "ЗагрузитьВнешнююКомпоненту". Описание можно найти в "Технологии разработки внешних компонент", методичке 1С.
Загрузив компоненту в ПриНачалеРаботыСистемы() создаешь объект компоненты, экспортируемый из глобального модуля. В событии записи элемента справочника 1С вызываешь метод объекта компоненты, к-й добавляет запись в ИБ (через IBX, FIBplus и т.п.). А при возникновении эвента - компонента создает соответствующий элемент в справочнике 1С, это выполняется быстро, поскольку в компоненте доступен IDispatch 1С-ки (передается в Init - при инициализации компоненты).
Загрузив компоненту в ПриНачалеРаботыСистемы() создаешь объект компоненты, экспортируемый из глобального модуля. В событии записи элемента справочника 1С вызываешь метод объекта компоненты, к-й добавляет запись в ИБ (через IBX, FIBplus и т.п.). А при возникновении эвента - компонента создает соответствующий элемент в справочнике 1С, это выполняется быстро, поскольку в компоненте доступен IDispatch 1С-ки (передается в Init - при инициализации компоненты).
Тут наверно будет проблема, если допустим кто-то добавить новую запись в TechnologiCS (Interbase), а в 1С ни кто не работает, т.е. ловить эвент некому. И если несколько пользователей работают в 1С, то каждый будет ловить эвенты и пытаться добавить новую запись в 1С, добавленную в TechnologiCS (Interbase) ?
Можно сделать специального пользователя 1С - Репликатор. Только его сеанс загружает компоненту и он постоянно в 1С. Конечно, в этом случае возможна рассинхронизация данных.
Полноценную систему написать сложнее. в 8-ке получить соответствие Объект1С.Свойство <-> ТаблицаБД.ПолеТаблицы из внешнего приложения несколько проблемно (хотя я знаю человека, продающего решение для репликации баз 1С 8-ки).
Полноценную систему написать сложнее. в 8-ке получить соответствие Объект1С.Свойство <-> ТаблицаБД.ПолеТаблицы из внешнего приложения несколько проблемно (хотя я знаю человека, продающего решение для репликации баз 1С 8-ки).
В доке "технология создания внешних компонент" написанно:
- ПодключитьВнешнююКомпоненту
Описание:
Внешние компоненты подключаются функцией встроенного языка ПодключитьВнешнююКомпоненту . Внешняя компонента может быть как динамически загружаемой библиотекой (например, DLL или OCX), так и ПРИЛОЖЕНИЕМ.