Форум: "Базы";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c