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

(c) Sergey Popov, Usinsk, Komi, 2007

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

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

 

1Cv8 + Delphi-5.
OLE (COM).
Считывание информации.
Справочники.
Фильтрация по реквизиту.

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

Часто бывает необходимо произвести выборку элементов справочника, отфильтровав их с учетом значения какого-либо реквизита.
Рассмотрим этот вопрос на примере справочника "КнигиВидеоАудио" созданной ранее конфигурации.

В контексте справочника есть реквизит типа "Перечисление" вида "ТипНосителя" :


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

 

Ниже представлено содержание этого справочника (только элементы справочника без учета иерархии).


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

Попробуем организовать фильтрацию справочника по реквизиту "ТипНосителя".

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

На рис.3 представлена форма нового проекта.


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

Здесь добавлена кнопка SpeedButton3 (вопросительный знак) и элемент управления TEdit: Edit_EnumVal.
По кнопке SpeedButton3 предоставим Пользователю возможность выбора какого-либо значения из перечисления вида "ТипНосителя".
Название выбранного значения перечисления будем отображать в Edit_EnumVal.
Выборку элементов справочника будем производить в зависимости от состояния CheckBox "Отбор по реквизиту".
Если этот элемент управления отключен - выборка производится так же, как и в контексте предыдущей статьи.
В противном случае - дополнительно отфильтруем выборку по значению выбранного реквизита.

Внесем в раздел объявления формы новое свойство (fEnumVal_ole).

type
 TForm1 = class(TForm)
  ...
  ...
  ...
 public
   { Public declarations }
   //ссылка на выбранное для фильтрации значение реквизита
   
fEnumVal_ole : Variant;
 end;
 

Организуем процесс выборки значения перечисления (для фильтрации) так, как это мы делали  в контексте статьи :

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

Ниже представлен текст обработчика события : нажатие на кнопку SpeedButton3.

 

Теперь модифицируем обработчик события : нажатие на кнопку SpeedButton2 (бегущие человечки) :

Здесь следует отметить, что в данном случае для организации процесса фильтрации элементов справочника мы использовали объект типа "Структурасистемы 1Cv8 .

Синтаксис метода "Выбрать" объекта типа "СправочникМенеджер" (см.техническое описание системы 1Cv8) :

   Выбрать(<Родитель>, <Владелец>, <Отбор>, <Порядок>)
 
Здесь :
  <Отбор> (необязательный параметр)
Тип: Структура. Задает поле и значение отбора открываемой выборки.
Ключ структуры описывает имя поля, а значение структуры - значение отбора по этому полю.
В качестве
  полей для отбора могут задаваться только поля "Код", "Наименование" и реквизиты справочника,
для которых в конфигураторе признак индексирования
установлен в
 значение "Индексировать" или в значение "Индексировать с доп. упорядоч.".
Важно! Структура может содержать только один элемент.
Значение по умолчанию: Неопределено

Проверим, как все это работает.

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

Создадим соединение с 1Cv8.
Нажмем на кнопку "?" и выберем значение перечисления : "Файл".
 


Рис.4. Выбор значения перечисления "ТипНосителя".

Произведем выборку элементов справочника (с фильтрацией по реквизиту "ТипНосителя") с учетом заданного значения перечисления вида "ТипНосителя".

На рис.5 представлен результат выборки.


Рис.5. Результат выборки элементов справочника (с фильтрацией по реквизиту "ТипЗначения")
с учетом заданного значения перечисления вида "ТипНосителя".

Теперь попробуем отобрать элементы справочника по значению "Бумага" реквизита "ТипНосителя".

На рис.6 представлен результат выборки.


Рис.6. Результат выборки элементов справочника (с фильтрацией по реквизиту "ТипЗначения")
с учетом заданного значения перечисления вида "ТипНосителя".

Результаты выборки (в обоих вариантах) можно соотнести с содержанием справочника (рис. 2).

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

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

 

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

 


Hosted by uCoz