Адрес этой странички : http://doc-prg.narod.ru/art_00005/art_00005.htm
© 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 Сергей Попов