Текстовое представление объектов 1С во внешней компонентеЧасто требуется получить текстовое представление объектов 1С, например, чтобы записать их в базу данных или вернуть их из базы данных. Приведен пример внешней компоненты на Delphi. | | Автор статьи: Последняя редакция №1 от 23.01.07 URL: http://kb.mista.ru/article.php?id=449 | |
Ключевые слова: ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр, ВК, Delphi
///////////////////////////////////////////////////////////////////////
function AddInObject.CallAsFunc(lMethodNum: Integer; var pvarRetValue: OleVariant; var paParams: PSafeArray): HResult; stdcall;
{Здесь 1С выполняет код внешних функций}
var
obj : IDispatch;
obj1 : OleVariant;
obj0 : OleVariant;
var s: String;
begin
try
pvarRetValue:=0;
ErrorMsg:='';
case TMethods(lMethodNum) of
methValueToString: //ЗначениеВСтрокуВнутр
begin
obj := OleVariant(i1cv7).AppDispatch;
obj._AddRef;
obj0:=GetNParam(paParams,0); //1-й параметр метода
s:=Variant(obj).ValueToStringInternal(obj0);
pvarRetValue:=s; //возвращаем строку вида {"B","0","0","12","0","0"," 2 "}
end;
methValueFromString: begin //ЗначениеИзСтрокиВнутр
obj := OleVariant(i1cv7).AppDispatch;
obj._AddRef;
s:=GetNParam(paParams,0); //1-й параметр метода - строка вида {"B","0","0","12","0","0"," 2 "}
s:=trim(s);
s:=DoubleQuotes(s); //удваиваем кавычки
obj1:=Variant(obj).EvalExpr('ЗначениеИзСтрокиВнутр("'+s+'")');
pvarRetValue:=IDispatch(obj1); //возвращаем ссылку на объект
end;
else begin
CallAsFunc := S_FALSE;
Exit;
end;
end; //case
except
on E: Exception do begin
ShowErrorLog(E.Message);
ErrorMsg:=E.Message;
end;
end;
CallAsFunc := S_OK;
end;
|