Адрес этой странички : http://doc-prg.narod.ru/art_00010/art_00010.htm 
Дата последнего обновления : 25.08.2007
 

(c) Sergey Popov, Usinsk, Komi, 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 Сергей Попов

 


Hosted by uCoz