Адрес этой странички : http://doc-prg.narod.ru/art_00012/art_00012.htm 
Дата обновления : 25.08.2007
 

(c) Sergey Popov, Usinsk, Komi, 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 Сергей Попов

 


Hosted by uCoz
-->