Адрес этой странички :
http://doc-prg.narod.ru/art_00010/art_00010.htm
Дата последнего обновления : 25.08.2007
© 24.08.2007 Сергей Попов
Здесь следует отметить, что приведенная ниже статья носит чисто
иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного
обмена крайне рекомендуется использовать фирменное техническое описание системы
1Cv8.
1Cv8 + Delphi-5.
OLE (COM).
Метаданные информационной базы.
Свойства и реквизиты справочников.
Статью в виде файла (277 кб) можно скачать здесь: art_00010.zip
В
предыдущей статье был рассмотрен
пример,
иллюстрирующий считывание списка справочников и перечислений из информационной
базы 1Cv8.
Расширим функционал этого примера и попробуем прочитать свойства справочника
(как объекта метаданных) и список его реквизитов.
На рис.1 представлена форма нашего Delphi-проекта.
Рис.1. Форма проекта
meta_1cv8_COM.dpr
Свойство Items
компонента
List_What_1 содержит
след. строки :
наименованию
индексу
Внесем изменения в обработчик создания формы :
procedure
TForm1.FormCreate(Sender: TObject);
begin
...
...
List_What_1.ItemIndex:=0;
Edit_Meta_Name.Text:='КнигиВидеоАудио';
end;
Создадим обработчик события компонента ListBox1 : "Двойной щелчок мышкой"
procedure
TForm1.ListBox1DblClick(Sender: TObject);
begin
if ListBox1.ItemIndex>=0 then begin
Edit_Meta_Name.Text:=ListBox1.Items[ListBox1.ItemIndex];
end;
end;
Ниже приведен текст обработчика события : нажатие на кнопку "?".
Здесь требуются некоторые дополнительные пояснения ...
Прежде, чем считывать
свойства заданного справочника - нужно получить ссылку на этот справочник, как
объект метаданных.
Это можно сделать двумя (как минимум) способами, используя методы
Найти и
Получить объекта
Метаданные.Справочники
системы 1Cv8.
//Получаем ссылку на
коллекцию справочников (как объекты метаданных)
Meta_ole:=s1C8_ole.Метаданные.Справочники;
if List_What_1.ItemIndex=0 then begin
//Обращаясь к методу "Найти" объекта "Метаданные.Справочники"
- получаем ссылку
//на справочник по его Идентификатору
V:=Meta_ole.Найти(Edit_Meta_Name.Text);
end;
if List_What_1.ItemIndex=1 then begin
//Обращаясь к методу "Получить" объекта "Метаданные.Справочники"
- получаем ссылку
//на справочник по его Индексу
V:=Meta_ole.Получить(StrToInt(Edit_Meta_Name.Text));
end;
Когда мы желаем
получить свойства справочника примитивных типов (строка, дата, число,
логический) - это можно
сделать "прямым" считыванием.
Например :
ListBox1.Items.Add('ПолноеИмя='+Trim(V.ПолноеИмя));
ListBox1.Items.Add('Иерархический='+Trim(V.Иерархический));
ListBox1.Items.Add('ДлинаНаименования='+Trim(V.ДлинаНаименования));
Но здесь следует помнить, что для логических значений :
значение = -1
- это TRUE в "терминах" OLE Automation,
а = 0 ->
FALSE
Если свойства
справочника имеют "объектный тип", то требуется соответственно иной подход.
В этом примере мы (для визуализации значений свойств "объектных типов")
использовали
функцию EvalExprStr_OLE
из статьи :
1Cv8.
Возможный вариант эмуляции метода EvalExpr (системы 1Cv7)
Например, так :
Sx := Trim(s1C8_ole.EvalExprStr_OLE(V.ОсновноеПредставление));
ListBox1.Items.Add('ОсновноеПредставление='+Sx);
Кстати, если использовать функцию
EvalExprStr_OLE для
визуализации значений свойств логического типа,
то возвращаемые программой
1Cv8 значения принимают "привычный" вид (истина,
ложь).
Например,
если прочитать так :
ListBox1.Items.Add('Иерархический='+Trim(V.Иерархический));
то результат будет следующим :
А если так :
V1 :=
s1C8_ole.EvalExprStr_OLE(V.Иерархический);
ListBox1.Items.Add('Иерархический_='+Trim(V1));
то результат будет следующим :
Список реквизитов
справочника можно прочитать следующим образом :
Здесь дополнительный комментарий не требуется ...
Скомпилируем наш Delphi-проект и запустим программу на выполнение.
После соединения с 1Cv8 - прочитаем свойства и реквизиты справочника КнигиВидеоАудио, как объекта метаданных (нужно нажать на кнопку "?").
Результат считывания представлен ниже :
Для сравнения - ниже представлен соответствующий фрагмент
текстового файла, куда из 1С-конфигуратора была
выгружена структура
информационной базы
homelib_05.zip.
Исходные тексты этого проекта можно взять здесь (15 кб) : meta_1cv8_com_v02.zip
Здесь можно скачать базу данных
HomeLib (38 кб) :
homelib_05.zip
© 24.08.2007 Сергей Попов