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

(c) Sergey Popov, Usinsk, Komi, 2007

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

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

 

1Cv8 + Delphi-5.
OLE (COM).
Считывание информации.
Справочники.
Иерархия групп.
Экспорт дерева групп в Excel

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

В предыдущей статье были рассмотрены вопросы считывания информации из справочников (списки групп и элементов). 
Но в системе 1Cv8 предусмотрена возможность создания иерархических справочников.
После редактирования   "нашей"  базы данных была создана следующая иерархическая структура в справочнике КнигиВидеоАудио.


Рис.1. Иерархическая структура справочника КнигиВидеоАудио


Рассмотрим на простом примере, каким образом можно воссоздать эту же структуру во внешнем приложении при считывании информации с использованием механизма OLE Automation.

Будем использовать следующий алгоритм построения иерархического дерева групп справочника КнигиВидеоАудио :

1. Создать список групп (см. предыдущий пример) справочника таким образом, чтобы формат строки списка был следующим :

     КодГруппы КодРодителя НаименованиеГруппы

2. Конвертировать полученный список таким образом, чтобы его можно было загрузить в виде "дерева" в Delphi-компонент TTreeView 
(метод : LoadFromFile).

3. Сохранить конвертированный список в текстовый файл и загрузить его в TTreeView.

 

Напомню,  что текстовый файл (который должен быть загружен в компонент TTreeView) должен иметь определенную структуру.
Во-первых, строки текстового файла должны следовать в том же порядке, как и "узлы/листья" дерева TTreeView.
Во-вторых, уровень иерархии каждого "узла/листа" определяется количеством символов табуляции (ascii-код=9) в начале каждой строки текстового файла.

Ниже представлен текст простой функции Convert_List_to_Tree, реализующий алгоритм конвертации "обычного" списка (см. пункт 1) в список, "пригодный" для загрузки в TTreeView.


В тексте функции Convert_List_to_Tree используются функции :

  sp_ReplaceCharInString, sp_GetWordFromString, sp_StrToInt, AddTabsToString

их тексты можно посмотреть в исходниках проекта.

Теперь посмотрим, как все это работает.

Создадим новый Delphi-проект (за основу можно взять пример из предыдущей статьи).


Рис.2. Форма проекта Load_from_SbCnt_OLE.dpr

 Теперь создадим обработчик события : нажатие на кнопку "бегущие человечки"

Этот текст достаточно прост и не требует пояснений.

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

Результат считывания "дерева" групп справочника КнигиВидеоАудио  :


Рис.3. Дерево групп справочника КнигиВидеоАудио  

Этот результат можно сравнить  с тем, что приведен на рис.1 .
Здесь комментарий не требуется.

Теперь, попробуем реализовать отбор элементов справочника (книги) для любой группы в дереве групп (рис.3).

Для этого, сформируем обработчик (OnClick) события : щелчок левой кнопкой мышки по компоненту TTreeView.

 

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

Результат :


Сравните его с рис.1.
Здесь все очевидно.

В принципе, на этом можно было бы и закончить эту статью.
Но попробуем "выжать из ситуации" несколько больше полезного.

Ниже приведен текст функции, который на входе получает Delphi-компонент TTreeView и выводит его содержимое (дерево) в Excel (тоже в виде дерева).

 

Здесь приведены тексты вспомогательных функций.

 

 Доработаем наш проект, положив на форму еще одну кнопку.

Создадим обработчик события : нажатие на эту кнопку :

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
   Tree_CopyToExcel('Справочник: КнигиВидеоАудио', TreeView1);
end;

Скомпилируем наш проект и запустим на выполнение.
Ниже представлен результат экспорта дерева в Excel.

 

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

 

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


Hosted by uCoz