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

(c) Sergey Popov, Usinsk, Komi, 2007

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

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

1Cv8 + Delphi-5 .. 7.
OLE (COM).

Как "побороть" глюк в 1Cv80 ... 1Cv82, связанный с открытием форм в InProc COM-Server.
 


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


Как было показано в предыдущей статье - 1Cv8 "криво" работает с формами, открываемыми в контексте  InProc COM-server.
Причина этого - неизвестна. 
Может быть у программистов 1C была веская причина для этого, а может быть просто банальная ошибка в коде.

 Но "гадай - не гадай", а работать надо.

Есть простой способ, позволяющий обойти эту проблему.

Идея заключается в том, что нужно создать простую внешнюю компоненту, которая будет содержать только один метод (Соединить), подгружающий OutProc-server (некий "стартер"), который (в свою очередь) подгружает в собственное адресное пространство "проблемный" InProc-server и возвращает соотв.ссылку во внешнюю компоненту.

Ниже - иллюстрирующие схемы :

 

 

Попробуем реализовать это на практике.
В качестве "проблемного" InProc-server возьмем COM_InProc_d5 из предыдущей статьи.

Ниже приведены "картинки",  по-шагово иллюстрирующие этот процесс. 


1. Создаем OutProc-server ("стартер") - COM_InProc_d5_Starter.exe

Сначала создадим обычное приложение :

 

 

Теперь "превратим" его в OutProc COM-server :

 

Доработаем следующим образом исходный текст, сгенерированный средой Delphi :

 

Чтобы наш OutProc-server был доступен для других приложений необходимо его зарегистрировать в Windows.
Для этого достаточно его один раз запустить, как обычное приложение.

 

 


2. Теперь нужно создать простую внешнюю компоненту для 1Cv8.

Этот вопрос детально рассмотрен в книге "Delphi и 1С:Предприятие. Программирование информационного обмена" и здесь.

Поэтому в данной статье углубляться в этом вопросе не буду.

Ниже представлен исходник реализации метода внешней компоненты  Соединить() :

 

DLL-файл ( COM_InProc_d5_vk.dll ) внешней компоненты нужно разместить в том же каталоге ( ...\Bin\ ) , где находится исполняемый модуль программы 1Cv8.

 


3. Тестирование.

Для тестирования будем использовать внешнюю обработку, созданную в контексте предыдущей статьи.

Доработанный исходный текст которой представлен ниже :

 

После того, как внешняя обработка будет открыта в режиме RealTime (), на экране появится окно нашего "стартера" (OutProc COM-server).

 

Теперь, при вызове метода  ShowMyForm_2 (для этого нужно нажать на кнопку ShowMyForm_2 на форме внешней обработки), никаких проблем не возникает :

 


В результате "испытаний" данного способа был получен и еще один полезный побочный эффект.

А именно: можно легко передать в любой внешний (как OutProc, так и InProc) COM-объект (который не является внешней компонентой) ссылку на 1С !

В след. статье этот эффект будет рассмотрен подробно.

 


 

Все исходные тексты рассмотренного примера можно скачать здесь (416 Кб).

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

 

 

 

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

 


Hosted by uCoz
-->