Адрес этой странички :
http://doc-prg.narod.ru/art_00012/art_00012.htm
Дата обновления : 25.08.2007
© 25.08.2007 Сергей Попов
Здесь следует отметить, что приведенная ниже статья носит чисто
иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного
обмена крайне рекомендуется использовать фирменное техническое описание системы
1Cv8.
1Cv8 + Delphi-5.
OLE (COM).
Справочники.
Как получить ссылку на справочник.
Статью в виде файла (196 кб) можно скачать здесь: art_00012.zip
В предыдущих примерах (при обращении к информационному содержанию справочников системы) мы получали ссылку на желаемый справочник "явно" :
SbCnt_ole:=s1C8_ole.Справочники.КнигиВидеоАудио;
Это хорошо, когда ведется разработка программного
обеспечения, строго ориентированного на конкретную информационную структуру.
Но если нужно разработать более-менее универсальные средства информационного
обмена - этого явно недостаточно.
Рассмотрим возможные варианты получения ссылок на справочники системы 1Cv8 в контексте механизма OLE Automation.
Создадим новый Delphi-проект (за основу можно взять пример из какой-либо предыдущей статьи).
Рис.1. Форма Delphi-проекта
Get_Ref_to_SbCnt_COM.dpr.
Здесь мы попробуем получить ссылку на справочник КнигиВидеоАудио конфигурации
homelib_06.zip разными
способами :
1.
"явно"= Справочники.КнигиВидеоАудио
Это - "старый" способ, которым мы уже пользовались
ранее
и здесь на нем останавливаться не будем.
2.
по идентификатору='КнигиВидеоАудио'
справочника
Система 1Cv8 в своем контексте имеет свойство "Справочники",
которое представляет собой коллекцию справочников информационной базы.
Получить ссылку на желаемый справочник можно следующим образом :
Спр = Справочники[ИдентификаторСправочника];
Например :
Спр = Справочники["КнигиВидеоАудио"];
Это как раз то, что нам необходимо.
Но ... почему-то это не работает, если такой вызов осуществляется через механизм
OLE Automation ...
Т.е., такая "конструкция" :
SbCnt_ole := s1C8_ole.Справочники['КнигиВидеоАудио'];
инициирует ошибку.
Этот момент можно обойти, если в конфигураторе создать
специальный общий модуль (см. подробно
здесь).
И в контексте этого модуля создать следующую функцию :
Теперь ссылку на "наш" справочник (используя OLE Automation) можно получить след. образом :
SbCnt_ole := s1C8_ole.СправочникПолучить_OLE('КнигиВидеоАудио');
3.
по индексу=0 в коллекции справочников метаданных
Можно получить ссылку на справочник, используя его индекс (номер) в коллекции
объектов метаданных.
Это (вероятно) может пригодиться в очень редких случаях (например, если
нужно прочитать информацию из многих справочников поочередно).
Тем не менее, рассмотрим и этот вариант.
В статье :
1Cv8 +
Delphi-5. OLE (COM). Метаданные информационной базы. Свойства и реквизиты
справочников
были рассмотрены способы считывания свойств объектов метаданных.
Объект метаданных имеет метод Индекс
, который возвращает индекс объекта (метаданных) в коллекции метаданных.
Зная индекс объекта (метаданных) можно получить на него ссылку.
Для этого существует метод Получить
коллекции объектов метаданных.
В данном случае нам
превентивно известно, что у справочника
КнигиВидеоАудио (как
объекта метаданных) индекс=0.
Получив ссылку на объект (коллекции метаданных) можно прочитать его Имя
(идентификатор).
Поэтому, мы можем получить ссылку на справочник следующим образом :
//Получаем ссылку на коллекцию справочников (как объектов
метаданных конфигурации)
Meta_ole:=s1C8_ole.Метаданные.Справочники;
//Потом получаем ссылку на конкретный
справочник (как объект коллекции метаданных конфигурации)
//по его индексу :
V := Meta_ole.Получить(0);
//И, наконец, считываем идентификатор этого справочника
sName:=Trim(V.Имя);
//Далее - используем функцию
СправочникПолучить_OLE (см.выше)
//и получаем ссылку на справочник
SbCnt_ole
:= s1C8_ole.СправочникПолучить_OLE(sName);
Ниже приведен обработчик события : нажатие на кнопку "бегущие человечки" :
Протестируем наш пример.
Должно получиться что-то вроде этого :
Исходные тексты этого примера (12 кб) можно скачать здесь :
get_ref_to_sbcnt_com_v01.zip
Информационную базу 1Cv8 (44 кб)
можно скачать здесь : homelib_06.zip
© 25.08.2007 Сергей Попов