Книга знаний

1С:Предприятие / Приемы программирования / Внешние компоненты

Текстовое представление объектов 1С во внешней компоненте

Часто требуется получить текстовое представление объектов 1С, например, чтобы записать их в базу данных или вернуть их из базы данных. Приведен пример внешней компоненты на Delphi.Автор статьи: romix | Редакторы:
Последняя редакция №3 от 23.01.07 | История
URL: http://kb.mista.ru/article.php?id=449

Ключевые слова: ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр, ВК, Delphi


Тестовый пример для скачивания:
http://x-romix.narod.ru/2007_11_22_Rekv.rar
(~58 К, скачивать ЛЕВОЙ кнопкой мыши).


///////////////////////////////////////////////////////////////////////
//Удваивает кавычки " в строке
function DoubleQuotes(str: String): String;
var i: Integer;
var c: char;
begin
  Result:='';
  for i:=1 to Length(str) do begin
    c:=str[i];
    if c='"' then begin
      Result:=Result+'""';
    end else begin
      Result:=Result+c;
    end;
  end;
end;

///////////////////////////////////////////////////////////////////////
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;

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика