Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Delphi + 1Cv77   Найти похожие ветки 

 
Dmitry_177   (2007-08-02 11:18) [0]

Подскажите как можно считать все значения реквизитов из справочника?

делаю я так:

procedure TForm1.Button1Click(Sender: TObject);   // Соединение с 1C
begin
 Ole1C := CreateOleObject("V77.Application");
 Ole1C.Initialize(Ole1C.RMTrade, "/DC:\1C_BUX\1SBDB", "");
end;

procedure TForm1.Button2Click(Sender: TObject);   // Перечисляем все справочники в ListBox-е
var
 CountSprav: Integer;
 iSprav: Integer;
 OleSprav: OleVariant;
 Str: string;
begin
 ListBox1.Items.Clear;

 if VarIsEmpty(Ole1C) then
   Exit;

 CountSprav := Ole1C.Метаданные.Справочник * 1;
 Application.ProcessMessages;
 if CountSprav = 0 then
   Exit;

 for iSprav := 1 to CountSprav do
   begin
     OleSprav := Ole1C.Метаданные.Справочник(iSprav * 1);
     if VarIsEmpty(OleSprav) then
       Exit;
     Str := Trim(OleSprav.Идентификатор) + " (" + Trim(OleSprav.Синоним) + ")";
     ListBox1.Items.Add(Str);
     Application.ProcessMessages;
   end;
end;

procedure TForm1.ListBox1Click(Sender: TObject);  // При выборе справочника из списка во второй справочник вывожу все реквизиты и их значения
var
 OleSprav: OleVariant;
 OleSpravObj: OleVariant;
 OleRecv: OleVariant;
 CountCol: Integer;
 iCol: Integer;
 Str: string;
begin
 ListBox2.Items.Clear;

 OleSpravObj := Ole1C.CreateObject("Справочник." + Trim(Ole1C.Метаданные.Справочник((ListBox1.ItemIndex + 1) * 1).Идентификатор));
 if VarIsEmpty(OleSpravObj) then
   Exit;

 OleSprav := Ole1C.Метаданные.Справочник((ListBox1.ItemIndex + 1) * 1);
 if VarIsEmpty(OleSprav) then
   Exit;

 CountCol := OleSprav.Реквизит * 1;
 Application.ProcessMessages;
 if CountCol = 0 then
   Exit;

 if OleSpravObj.ВыбратьЭлементы > 0 then
   while OleSpravObj.ПолучитьЭлемент > 0 do
     begin
       Str := "Наименование: " + Trim(OleSpravObj.Наименование);
       ListBox2.Items.Add(Str);
       Application.ProcessMessages;

       for iCol := 1 to CountCol do
         begin
           OleRecv := OleSprav.Реквизит(iCol * 1);
           Str := Trim(OleRecv.Идентификатор) + " (" + Trim(OleRecv.Синоним) + "): ";
           Application.ProcessMessages;

           if AnsiUpperCase(Trim(OleRecv.Тип)) = "ЧИСЛО" then
             Str := Str + FloatToStr(OleSpravObj.ПолучитьАтрибут(OleRecv.Идентификатор));    // вот здесь ошибка почему-то при считывании из 1С

           if AnsiUpperCase(Trim(OleRecv.Тип)) = "СТРОКА" then
             Str := Str + Trim(OleSpravObj.ПолучитьАтрибут(OleRecv.Идентификатор));

           if AnsiUpperCase(Trim(OleRecv.Тип)) = "ДАТА" then
             Str := Str + Trim(OleSpravObj.ПолучитьАтрибут(OleRecv.Идентификатор));

           ListBox2.Items.Add(Str);
           Application.ProcessMessages;
         end;
       ListBox2.Items.Add("");
     end;
end;


 
Dmitry_177   (2007-08-02 11:21) [1]

пардон:

procedure TForm1.ListBox1Click(Sender: TObject);  // При выборе справочника из списка во второй список вывожу все реквизиты и их значения


 
Dmitry_177   (2007-08-02 11:32) [2]

пробовал так:

Str := Str + IntToStr(OleSpravObj.ПолучитьАтрибут(OleRecv.Идентификатор));

и так:

Str := Str + Trim(OleSpravObj.ПолучитьАтрибут(OleRecv.Идентификатор));

всеравно..


 
dolmat   (2007-08-02 12:17) [3]

Я напрямую в базы лезу если надо


 
Dmitry_177   (2007-08-03 09:21) [4]

а кто-нибудь работал с 1С в качестве OLE-сервера?


 
Сергей М. ©   (2007-08-03 09:58) [5]


> вот здесь ошибка


Какая ?


 
Dmitry_177   (2007-08-03 10:16) [6]

я уже разобрался :)
затык происходит на периодических реквизитах, надо так:
....
if CountCol = 0 then
  Exit;
OleSpravObj.ИспользоватьДату(Date,1);
if OleSpravObj.ВыбратьЭлементы > 0 then
...



Страницы: 1 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
2-1194347844
Lebedev
2007-11-06 14:17
2007.12.09
Нижние индексы и греческий шрифт.


15-1194734939
Johnmen
2007-11-11 01:48
2007.12.09
А где Digitman?


2-1194979500
Б. Гейтс
2007-11-13 21:45
2007.12.09
Над контролом ли мышь? (API only)


15-1194613990
авыф
2007-11-09 16:13
2007.12.09
как сделать так, чтобы контролы, расположенные на форме нельзя


15-1194550591
С№
2007-11-08 22:36
2007.12.09
Такое и на С#