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

(c) Sergey Popov, Usinsk, Komi, 2007

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

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

 

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

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

В предыдущих  статьях [2] [3]  были рассмотрены вопросы считывания из справочников информации об элементах и группах на уровне кода и наименования. Считывание информации о реквизитах справочников, имеющих примитивный тип (число, строка, дата) ничем не отличается от считывания кода и наименования справочника.

Рассмотрим это на конкретном примере (справочник КнигиВидеоАудио из базы данных HomeLib).

Напомню, что реквизиты справочника имеют следующие атрибуты :

Идентификатор
реквизита
Тип Вид Размер Точность Индекс
Авторы Строка - 100 - +
Издательство Строка - 100 - +
Издание Строка - 50 - -
ДатаИздания Дата - - - +
Цена Число - 15 2 -
Количество Число - 5 0 -
ДополнительнаяИнформация Строка - неограниченная длина - -

 

За основу возьмем проект из предыдущей статьи.
Лишь заменим Delphi-компонент ListBox1 на компонент класса TStringGrid.


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

 

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

 

Далее, изменим обработчик события : нажатие на кнопку "бегущие человечки" (поскольку исчез Delphi-компонент ListBox1) :

 

Изменим обработчик события : щелчок по компоненту TTreeView (визуализация элементов группы справочника) :

Как видно, процесс считывания реквизитов (примитивного типа) элементов справочника - ничем не отличается от считывания кода и наименования элементов справочника.

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

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

 

Точно таким же образом можно прочитать значение реквизита типа "Строка неограниченной длины".

Проверим это на практике.

Создадим новую форму (Form_MemoView) :

 

Создадим метод Execute формы :

procedure TForm_MemoView.Execute(Sx : string);
begin
   RichEdit1.Lines.Text:=Sx; 
   ShowModal;
end;

Создадим обработчик события : двойной щелчок мышкой по компоненту TStringGrid :

 

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

Ниже представлен результат считывания реквизита ДополнительнаяИнформация справочника КнигиВидеоАудио.



Рис.  Визуализация с помощью функции ShowMessage

 

 


Рис.  Визуализация значения реквизита ДополнительнаяИнформация 
в контексте созданной выше формы.


Как видно, значение реквизита ДополнительнаяИнформация содержит специальный символ, который никак не интерпретируется при визуализации. 

ASCII-код этого символа = 182 (десятичное значение) или B6 (шестнадцатиричное значение)

Очевидно, что назначение этого символа в контексте системы 1Cv8 - перевод строки.

Поэтому, изменим метод Execute формы следующим образом :

procedure TForm_MemoView.Execute(Sx : string);
begin
   Sx:=sp_ReplaceCharInString(Sx,$B6{182},10);
   RichEdit1.Lines.Text:=Sx;
   ShowModal;
end;

Текст функции sp_ReplaceCharInString здесь не приводится.
Ее назначение : заменить символы с asci--кодом=$B6 на символы с ascii-кодом=10 (LF или перевод строки).

Результат очевиден :

 

 

 

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

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

 

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

 


Hosted by uCoz