-
Сергей М. © (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 ?