Адрес этой странички:
http://d1cv8.narod.ru/top_003/d1cv8_20070929_001/d1cv8_20070929_001.htm Дата: 29.09.2007 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Глава 3. Подключение к
1С.
Создание Delphi-компонента, реализующего
функционал подключения к 1Cv8.
В статье "Создание Delphi-компонента, реализующего функционал подключения к 1Cv7" детально рассмотрен один из возможных вариантов Delphi-компонента для подключения к программе 1Cv7, как серверу OLE Automation.
Теперь попробуем создать Delphi-компонент,
реализующий подключение к программе 1Cv8, как
серверу автоматизации.
Но прежде, чем приступить к
программированию - напомню следующее :
Система 1С:Предприятие (версия 8) предоставляет
возможность интеграции практически с
любыми внешними программами и
оборудованием на основе общепризнанных
открытых стандартов и протоколов передачи
данных.
В частности, система 1Cv8 поддерживает механизм OLE Automation в качестве как сервера, так и клиента.
При этом возможны два варианта подключения к 1Cv8 :
1. OLE Automation Client/Server.
В этом случае запускается полноценное
приложение 1С:Предприятие 8.
И система 1Cv8 предоставляет доступ ко всем
свойствам и методам своего глобального
контекста, имеет дополнительные свойства и
методы для выполнения действий,
специфичных для работы в режиме OLE Automation, а
также предоставляет возможность
выполнять действия аналогичные интерактивным
действиям.
При этом из внешнего приложения можно
управлять видимостью главного окна 1Cv8.
При таком варианте подключения имя сервера
COM-объекта (системы 1Cv8) = V8.Application
ВАЖНО !
При использовании второго варианта
достигается более быстрая установка
соединения, более быстрое обращение к
свойствам и методам объектов системы 1Cv8, а
также меньший расход ресурсов операционной
системы, но нет возможности использовать
возможности пользовательского интерфейса.
Строка инициализации программы 1Cv8, как сервера OLE Automation может содержать следующие параметры :
Файловый вариант Б.Д.:
File=ПолныйПуть\Trade
Usr=Пользователь
Pwd=Пароль
Клиент-серверный вариант Б.Д.:
Srvr=Server1C (имя сервера, где запущен
сервер приложений 1С)
Ref=Trade (имя базы данных на сервере
приложений 1С)
Usr=Пользователь
Pwd=Пароль
Более подробно об этом можно прочитать на
сайте фирмы 1С (http://www.v8.1c.ru/)
в разделе "Интеграция с другими
системами" (http://v8.1c.ru/overview/integration.htm).
А также на других сайтах интернета (например,
на http://kb.mista.ru/article.php?id=35
и http://doc-prg.narod.ru/art_00001/art_00001.htm)
Теперь приступим к созданию Delphi-компонента.
О том, с чего начать (базовые операции по
созданию Delphi-компонентов) - подробно
описано здесь
и более останавливаться на этом не будем.
Имя нашего Delphi-компонента : TConnectTo1Cv8
Родительский компонент : TComponent
Имя package-файла : sp1Cv8_OLE.dpk
Закладка палитры компонентов в среде Delphi : 1Cv8
Сделаем следующие изменения (красный цвет) в тексте, автоматически созданном Delphi для нашего компонента.
type
TConnectTo1Cv8 = class(TComponent)
private
{ Private declarations }
//Флаг:
//если true - соединение с программой
1С:Предприятие v8 открыто,
//в противном случае - false
fActive : boolean;
//Флаг: если true - окно видимо,
//в противном случае - нет
//Актуально только, если fThisConnect_Is_COM := false;
fVisible : boolean;
//Флаг: Тип соединения.
//если true - тип соединения : COM-соединение,
//в противном случае - OLE Automation Client/Server
fThisConnect_Is_COM : boolean;
//ссылка на 1С:Предприятие v8, как сервер OLE Automation
fole1Cv8 :
Variant;
//--------------------------------------------------
//ИНИЦИАЛИЗАЦИЯ ПРОГРАММЫ
1С:ПРЕДПРИЯТИЕ v8
//строка инициализации программы
1С:Предприятие
fInitStr : string;
//Имя программы 1С:Предприятие v8, как сервера OLE Automation
fAppName : string;
//Имя Пользователя
fUsr
: string;
//Пароль для авторизации Пользователя
fPwd
: string;
//Флаг : если TRUE - то файловый вариант базы данных.
//В противном случае - клиент-серверный
fThisDB_Is_Files : boolean;
//............................................
//Файловый вариант базы данных
//ПолныйПуть к базе данных
fFile : string;
//............................................
//............................................
//Клиент-серверный вариант базы данных
//имя сервера, где запущен сервер приложений 1С
fSrvr : string;
//имя базы данных на сервере приложений 1С
fRef : string;
//............................................
//--------------------------------------------------
protected
{ Protected declarations }
//Процедура формирования строки
инициализации
//программы 1С:Предприятие
v8
procedure BuildInitStr;
//Метод, реализующий подключение
(отключение) к 1Cv8,
//как серверу автоматизации
procedure mSetActive(Value :
boolean);
//Метод, реализующий подключение (отключение) к 1Cv8,
//Актуально только, если fThisConnect_Is_COM := false;
procedure
mSetVisible(Value : boolean);
//метод, "отвечающий" за изменение значения fThisConnect_Is_COM
procedure mSetThisConnectIsCOM(Value :
boolean);
//метод, "отвечающий" за изменение
значения fAppName
procedure mSetAppName(Value :
string);
//метод, "отвечающий" за изменение
значения fUsr
procedure mSetUsr(Value :
string);
//метод, "отвечающий" за изменение
значения fPwd
procedure mSetPwd(Value :
string);
//метод, "отвечающий" за изменение
значения
fThisDB_Is_Files
procedure mSetThisDBisFiles(Value :
boolean);
//метод, "отвечающий" за изменение
значения fFile
procedure mSetFile(Value :
string);
//метод, "отвечающий" за изменение
значения fSrvr
procedure mSetSrvr(Value :
string);
//метод, "отвечающий" за изменение
значения fRef
procedure mSetRef
(Value :
string);
public
{ Public declarations }
//"Опубликуем" значение fole1Cv7, как
свойство (только для чтения)
property ole1Cv8:
Variant
read fole1Cv8;
//"Опубликуем" значение fInitStr, как
свойство (только для чтения)
property InitStr: string read
fInitStr;
//Конструктор компонента
(унаследованный от TComponent)
constructor Create(AOwner:
TComponent); override;
//Деструктор компонента
(унаследованный от TComponent)
destructor Destroy; override;
published
{ Published declarations }
//Свойство Active компонента
//(подключение (отключение) к 1Cv8,как серверу автоматизации)
property Active: boolean read fActive write mSetActive;
//Свойство Visible1Cv8 компонента
//(Визуализация окна 1Cv8)
//Актуально только, если ThisConnect_Is_COM := false;
property
Visible1Cv8: boolean read fVisible write mSetVisible;
//Флаг: Тип соединения.
//если true - тип соединения : COM-соединение,
//в противном случае - OLE Automation Client/Server
property ThisConnect_Is_COM: boolean read fThisConnect_Is_COM write mSetThisConnectIsCOM default FALSE;
//Имя программы 1С:Предприятие
v 8, как сервера автоматизации
property AppName1Cv8: string read fAppName write mSetAppName;
//Имя Пользователя
property UserName: string read fUsr write mSetUsr;
//Пароль для авторизации Пользователя
property Password: string read fPwd write mSetPwd;
//Вариант базы данных.
//Если TRUE - то файловый вариант базы данных.
//В противном случае - клиент-серверный
property ThisDB_Is_Files: boolean read fThisDB_Is_Files write mSetThisDBisFiles default TRUE;
//ПолныйПуть к базе данных
//(если файловый вариант базы данных)
property FilePath: string read fFile write mSetFile;
//имя сервера, где запущен сервер приложений 1С
//(если клиент-серверный вариант базы данных)
property cs_Server: string read fSrvr write mSetSrvr;
//имя базы данных на сервере приложений 1С
//(если клиент-серверный вариант базы данных)
property cs_NameDB: string read fRef write mSetRef;
end;
Теперь приступим к реализации объявленных в контексте компонента методов и
свойств.
Сначала перекроем конструктор и деструктор компонента (которые унаследованы от предка TComponent).
Текст метода BuildInitStr
представлен ниже :
Более подробно о ключах запуска 1Cv8 можно прочитать в спец. литературе по 1С:Предприятие v8.
Ниже представлена реализация остальных методов компонента :
Ниже представлены исходные тексты
функций ConnectTo1C8_Application,
ConnectTo1C8_COM и YesLinkToVariant.
Теперь протестируем наш Delphi-компонент.
Создадим новый Delphi-проект и на форму
проекта положим наш компонент.
Присвоим свойству FilePath компонента соотв.
значение
(полный путь к файлам локальной
информационной базы 1Cv8).
Рис.1 Форма проекта и компонент
TConnectTo1Cv8
на форме
Теперь попробуем присвоить свойству
Active компонента
ConnectTo1Cv81 значение
TRUE.
После инициализации программы 1Cv8 свойство
Active
компонента примет значение TRUE (рис.
2).
Рис.2 После того, как программа 1С:Предприятие
v 8 загрузилась, инициализация
системы завершилась и на экране появилось
окно приложения - свойство Active компонента
приняло значение TRUE.
Теперь присвоим свойству
Visible1Cv8 компонента
ConnectTo1Cv81 значение
FALSE.
Окно программы 1Cv8 исчезнет с экрана
монитора (рис.3).
Рис.3 Окно программы 1Cv8 исчезло с
экрана монитора
"Экзотики" ради можно расположить на форме проекта Delphi-компоненты TConnectTo1Cv8 и TConnectTo1Cv7 и потестировать их совместно. Результат представлен на рис.4.
Рис.4 Совместное
тестирование Delphi-компонентов
TConnectTo1Cv8 и TConnectTo1Cv7
До этого момента мы тестировали компонент
TConnectTo1Cv8
при варианте соединения : OLE Automation Client/Server
Результат можно было оценить визуально (появится ли на экране монитора окно программы 1Cv8 или нет).
При варианте соединения : COM-соединение -
дело обстоит сложнее, поскольку окно 1Cv8 не
может быть видимо в принципе.
Чтобы ценить работоспособность нашего
компонента в этом режиме - доработаем наш
проект следующим образом :
Рис.5 Форма проекта после
модификации
Ниже представлен обработчик события: нажатие на кнопку "Запуск 1Cv8" :
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
//Запуск 1Cv8 в режиме сервера автоматизации
ConnectTo1Cv81.Active:=true;
end;
Ниже представлен обработчик события: нажатие на кнопку "Список справочников" :
Подробно о способах работы с метаданными
системы 1Cv8 можно прочитать в специальной
литературе по 1Cv8 и в интернете.
Например, на сайте: http://doc-prg.narod.ru
Протестируем наш модифицированный проект.
Результат представлен ниже :
Рис.6 Результат считывания списка
справочников (1Cv8).
Тип соединения: COM-соединение.
Вот, собственно, и все по этой теме ...
Здесь можно скачать (40 кб)
исходные
тексты созданного Delphi-компонента.
Здесь можно скачать (10
кб) исходные тексты проектов для
тестирования.
Здесь - скачать (44 кб)
тренировочную информационную базу 1Cv8.
Продолжение - расширение функционала компонента: формирование списка зарегистрированных информационных баз 1Cv8.