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