Главная страница
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.49 MB
Время: 0.02 c
2-1194847372
Layner
2007-11-12 09:02
2007.12.09
Запуск приложения от другого пользователя и выход(logout) из XP


15-1194338110
Costy
2007-11-06 11:35
2007.12.09
Вопрос по литературе


2-1194936903
ice321i
2007-11-13 09:55
2007.12.09
Вопрос с запросом


15-1194439274
Kerk
2007-11-07 15:41
2007.12.09
Нужно 10wmz


2-1194873717
PASZLIB
2007-11-12 16:21
2007.12.09
PASZLIB