Адрес этой странички : http://doc-prg.narod.ru/art_00005/art_00005.htm 

(c) Sergey Popov, Usinsk, Komi, 2007

© 28.07.2007 Сергей Попов

Здесь следует отметить, что приведенная ниже статья носит чисто иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного обмена крайне рекомендуется использовать фирменное техническое описание системы 1Cv8.

 

1Cv8 + Delphi-5.
OLE (COM).
Считывание информации.
Справочники.
Реквизиты типа "Перечисление" и "Справочник"

Статью в виде файла (283 кб) можно скачать здесь: art_00005.zip

В предыдущей  статье [4]  были рассмотрены вопросы считывания из справочников реквизитов примитивного типа.
Посмотрим, каким образом можно прочитать реквизиты типа "Прикладной объект" на примере реквизитов типа "Перечисление" и "Справочник".

Сначала откроем Конфигуратор 1Cv8 и внесем следующие изменения в структуру информационной базы :

1. Добавим новое Перечисление вида "ТипНосителя" :

 

В созданное перечисление добавим значения :

 

Список значений перечисления "ТипНосителя" :

 

2. Создадим новый справочник "ФизЛица" (без реквизитов).

 

3.  Добавим два новых реквизита в справочник "КнигиВидеоАудио" :


Список реквизитов справочника "КнигиВидеоАудио"

 

 


4. Заполним оба справочника ("ФизЛица и "КнигиВидеоАудио") соответствующими значениями :

Содержание справочника "КнигиВидеоАудио" :

 

Новый вариант базы данных можно взять здесь : homelib_02.zip

Теперь модернизируем проект из предыдущей статьи следующим образом :

В компоненте StringGrid1 добавим 2 новые колонки :

procedure TForm1.FormCreate(Sender: TObject);
Var
i : integer;
begin
  ...
  ...
  StringGrid1.Cells[4,0]:='
ТипНосителя';
  StringGrid1.Cells[5,0]:='
ВладелецЭтого';
  ...
  ...
end;


Некоторые изменения нужно произвести в обработчике события : щелчок левой кнопкой крысы по компоненту TreeView (визуализация реквизитов элементов справочника). 

procedure TForm1.TreeView1Click(Sender: TObject);
Var
 ...
 
TN_num : integer; //индекс (номер) значения перечисления
 
TN_name : string; //имя значения перечисления
 
TN_ole : variant; //ссылка на реквизит справочника типа перечисление "ТипНосителя"
 ...
begin
 ...
 ...
 //Перебор элементов выборки
 while Sel_ole.Следующий() do
 begin
  if not Sel_ole.ЭтоГруппа then begin
   ...
   ...
   //----------------------------
   //Вычисление имени перечисления
   //Ссылка на объект : реквизит справочника типа перечисление "ТипНосителя"
   
TN_ole:=Sel_ole.ТипНосителя;
   //Индекс (номер) значения (как объекта метаданных)
   
TN_num := s1C8_ole.Перечисления.ТипНосителя.Индекс(TN_ole)*1;
   //Имя значения перечисления (как объекта метаданных)
   
TN_name:=Trim(s1C8_ole.Метаданные.Перечисления.ТипНосителя.ЗначенияПеречисления.Получить(TN_num).Имя);
   //----------------------------
   ...
   ...

   StringGrid1.Cells[4,StringGrid1.RowCount-1]:=
TN_name;

   //--------------------
   //Реквизит справочника типа "Справочник"
   StringGrid1.Cells[5,StringGrid1.RowCount-1]:=Trim(Sel_ole.
ВладелецЭтого.Наименование);
   //--------------------
   ...
   ...
  ...
  end;
 end;
 ...
 ...
end;

Полная версия обработчика события : щелчок левой кнопкой крысы по компоненту TreeView :

 

Скомпилируем наш проект и запустим на выполнение.

Результат представлен ниже :

 
Здесь, думаю, комментарии излишни ...

Исходные тексты этого проекта можно взять здесь (29 кб) :  load_from_sbcnt_ole_v04.zip

Здесь можно скачать базу данных HomeLib (29 кб) : homelib_02.zip

 

© 28.07.2007 Сергей Попов

 


Hosted by uCoz