Конференция "Corba" » Idispatch OLE, вызов функций [D7, WinXP]
 
  • Сергей М. © (08.11.06 08:51) [20]
    разъеснить что ?
  • Romkin © (08.11.06 12:50) [21]
    procedure Tr1C_Link.Init1C(ver: Integer; const path: WideString);
    var
      vTmp:OleVariant;
    begin
        Close1C;
        if ver=1 then
           v1CApp:=CreateOleObject('V77.Application')
        else
           v1CApp:=CreateOleObject('V75.Application');
        vTmp:='NO_SPLASH_SHOW';
        try
           v1CApp.Initialize(v1CApp.RMTrade,path,vTmp);
        except
           v1CApp:=UnAssigned;
           raise;
        end;
    end;

    procedure Tr1C_Link.Close1C;
    begin
    //     v1CApp.ExitSystem;
        v1CApp:=UnAssigned;
        v1CDoc:=UnAssigned;
        v1CCurDoc:=UnAssigned;
        v1CForm:=UnAssigned;
    end;

    function Tr1C_Link.RetAllDocs: OleVariant;
    var
      vTmp,vTmpDoc:OleVariant;
    begin
        cdsDocs.EmptyDataSet;
        vTmp:='CreateObject(\"Документ\")';
        vTmpDoc:=v1CApp.EvalExpr(vTmp);
        vTmpDoc.SelectDocuments;
        while vTmpDoc.GetDocument>0 do
              begin
                   cdsDocs.Insert;
                   vTmp:=vTmpDoc.CurrentDocument;
                   cdsDocsN.AsInteger:=Integer(vTmp.DocNum);
                   cdsDocsDate.AsDateTime:=TDate(vTmp.DocDate);
                   cdsDocsKind.AsString:=String(vTmp.Kind);
              end;
        Result:=cdsDocs.Data;
    end;



    Древний код... Дальше сам разбирайся.
    PS. Я бы посоветовал не заморачиваться с запуском 1С (долго), а просто написать OLE object и запускать его из 1С.

    Да, пример path:
    const path='/DD:\Базы_1С\1SBDemo /M /NАдминистратор /P';
  • Zsrg (10.01.07 08:46) [22]
    Попробуй так:

    Ole1C:=pConnection;
    Ole1C := Ole1C.AppDispatch;
    Ole1C.EvalExpr('КаталогИБ()');
  • nick_van_rijn © (15.06.07 13:50) [23]
    один момент по подключению, если в строке пути к базе данных есть пробел, ну например '\Копия Db', то в 1с приходит такой путь '\Копия\' и дальше правильная строка с именем пользователя и пароля как можно это решить?
  • DrAku1a (08.12.08 07:28) [24]

    var
     Disp: IDispatch;
     OV, Ole1c: OleVariant;
    begin
    // ... как-то получаем IDispatch из DLL 1с в Disp
     OV := OleVariant(Disp);
     Ole1c := OleVariant(OV.AppDispatch);
     Ole1c.Сообщить('Превед из Delphi !!!', 'i');
    end;


    Но есть две проблемы:
    1. После этого не выгружается 1С даже при закрытии окна (что-то там глючит со счетчиками ссылок AddRef, _Release).
    2. Можно ли вытащить IDispatch без использования DLL.
    вот это не работает:

    uses SHDocVw, AddInLib, ShellAPI;

    procedure TForm1.Button1Click(Sender: TObject);
    var
     ShellWindow: IShellWindows;
     spDisp: IDispatch;
     k: integer;
     LE: IInitDone;
     OV, Ole1C: OleVariant;
    begin
     OV := Unassigned;
     Ole1c := Unassigned;
     ShellWindow := CoShellWindows.Create;
     // get the running instance of Internet Explorer
     for k := 0 to ShellWindow.Count do
     begin
       spDisp := ShellWindow.Item(k);
       if spDisp = nil then Continue;
       LE := nil;
       spDisp.QueryInterface(IInitDone, LE);
       If LE = nil then Continue;
       OV := OleVariant(spDisp);
       Ole1c := OleVariant(OV.AppDispatch);
       Ole1c.Сообщить('Привет из Delphi');
     end;
     OV := Unassigned;
     Ole1c := Unassigned;
    end;

  • Сергей М. © (08.12.08 08:59) [25]
    Причем здесь вообще какая-то там DLL ?
 
Конференция "Corba" » Idispatch OLE, вызов функций [D7, WinXP]
Есть новые Нет новых   [120359   +37][b:0][p:0.002]