Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Delphi + 1Cv77 [D7, 1Cv77]


Dmitry_177 ©   (2007-08-02 11:18:00) 

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

делаю я так:

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-03 10:16:00) [1]

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


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


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


Какая ?


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

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


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

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


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

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

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

и так:

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

всеравно..


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

пардон:

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо