Содержание
CreateOleObject(Name : String) : Variant
Создать OLE обьект
Функция CreateOleObject создает OLE-обьект.
Пример (работа с MS Excel):Procedure OnCreate; Var E, W, S : Variant; Begin E := CreateOleObject('Excel.Application'); E.Visible := True; W := E.Workbooks.Add; S := W.Worksheets[1]; S.Range['A1'].FormulaR1C1 := 'Привет мир!'; End;Пример подключения к 1С 8.1 и выборки данных из справочника Контрагенты стандартной конфигурации 1С
(скопируйте фрагмент ниже и вставьте в дерево редактора, выбрав пункт Вставить модуль):
<?xml version="1.0" encoding="windows-1251"?> <Module Type="Form" Name="Con1C" Description="Подключаемся к 1С"> <Form Width="376" Height="384" Icon="-1"> <radiobutton Value="0" Caption="Файловая Информационная База (ИБ)" Left="8" Top="8" Width="215" Height="14" Name="ConType" DataType="Integer"/> <radiobutton Value="1" Caption="Клиент-серверная ИБ " Left="8" Top="48" Width="131" Height="14" Name="ConType" DataType="Integer"/> <edit Caption="Каталог ИБ:" AutoSize="1" Left="16" Top="28" Width="62" Height="13" DataType="String" Readonly="1"/> <edit Left="88" Top="24" Width="280" Height="21" Name="FileName" Border="16" DataType="String" Anchors="5" Special="Path"/> <edit Caption="Сервер:" AutoSize="1" Left="16" Top="64" Width="40" Height="13" DataType="String" Readonly="1"/> <edit Caption="Имя ИБ:" AutoSize="1" Left="16" Top="88" Width="43" Height="13" DataType="String" Readonly="1"/> <edit Caption="Логин:" AutoSize="1" Left="16" Top="120" Width="34" Height="13" DataType="String" Readonly="1"/> <edit Caption="Пароль:" AutoSize="1" Left="16" Top="144" Width="41" Height="13" DataType="String" Readonly="1"/> <edit Left="88" Top="64" Width="280" Height="21" Name="Server" Border="16" DataType="String" Readonly="1" Anchors="5" Readonly="1"/> <edit Left="88" Top="88" Width="280" Height="21" Name="DB" Border="16" DataType="String" Readonly="1" Anchors="5" Readonly="1"/> <edit Left="88" Top="120" Width="280" Height="21" Name="Login" Border="16" DataType="String" Anchors="5"/> <edit Left="88" Top="144" Width="280" Height="21" Name="Password" Border="16" DataType="String" Anchors="5" Special="Password"/> <button Caption="Подключиться" Left="160" Top="168" Width="208" Height="24" Name="Connect" Anchors="4"/> <button Caption="Выбрать Контрагентов из 1С" Left="160" Top="192" Width="208" Height="24" Name="Start" Readonly="1" Anchors="4" Readonly="1"/> <list Config="64\nИдентификатор 1С\nId\nstring\n\n\n\n\n\n64\nНаименование 1С\nName\nstring\n\n\n\n\n\n" Left="8" Top="224" Width="360" Height="152" Name="Table" Border="16" Anchors="15"/> </Form> <Programm Language="Similar Pascal"> var ConHandle:variant;//подключение к 1с Procedure OnContypeChange; Begin FileName.Readonly:=ConType = 1; Server.Readonly:=ConType = 0; DB.Readonly:=ConType = 0; End; Procedure OnConnectClick; var Con:variant; ConnectStr:string; Begin case ConType of 0:begin if FileName.Value = '' then FileName.Error('Выберете каталог ИБ'); ConnectStr:='File=' + Trim(FileName) +'; Usr=' + Trim(Login) + '; Pwd=' + Trim(Password) + ';'; end; 1:begin if Server.Value = '' then Server.Error('Укажите сервер ИБ'); if DB.Value = '' then DB.Error('Укажите название ИБ на сервере'); ConnectStr:='Srvr=' + Trim(Server) + '; Ref=' + Trim(DB) + '; Usr=' + Trim(Login) + '; Pwd=' + Trim(Password) + ';'; end; end; Con:=CreateOleObject('V81.ComConnector'); ConHandle:= Con.Connect(ConnectStr); Start.Enabled:=true; End; Procedure OnStartClick; var OleDS, query1C:variant; i:integer; DS:dataset of Record Id:String; Name:String; end; begin query1C:=ConHandle.NewObject('Запрос'); query1C.Text:='ВЫБРАТЬ Контрагенты.Код, Контрагенты.Наименование ИЗ Справочник.Контрагенты КАК Контрагенты'; OleDS:=query1C.Execute().Choose(); OleDS.Reset(); if OleDS.Count() as integer > 0 then Table.Clear; while OleDS.Next() as boolean do begin i:=DS.Append; DS[i].Id:=OleDS.Get(0)as string; DS[i].Name:=OleDS.Get(1)as string; end; Table.Insert(0,'Id,Name',DS); end; </Programm> </Module>
Для справки.
Платформа использует ниже описанный способ создания OLE-обьекта:
1. Вызов CLSIDFromProgID(name, &clsid)2. Вызов CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IDispatch, &out)
3. Если обьект создать не удалось, вызывается CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, &out)
Используемый способ вызова фунцкий, чтение и установка свойств OLE-обьектов:
1. Вызов GetIDsOfNames(IID_NULL, &name, 1, LOCALE_SYSTEM_DEFAULT, &ids)2. Вызов Invoke(ids, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYGET или _METHOD или _PROPERTYPUT, &args, &ret, &excepinfo, &nArgErr)
Поддерживаемые типы аргументов и возвращаемых значений: VT_BSTR, VT_I4, VT_NULL, VT_BOOL, VT_INT, VT_CY, VT_R8, VT_DISPATCH. Подтипы VT_BYREF, VT_ARRAY и остальные не поддерживаются.