Адрес этой странички : http://doc-prg.narod.ru/art_00001/art_00001.htm
© 22.07.2007 Сергей Попов
Здесь следует отметить, что приведенная ниже статья носит
чисто иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного
обмена крайне рекомендуется использовать фирменное техническое описание системы
1Cv8.
1Cv8 + Delphi-5.
OLE (COM).
Запуск программы 1С:Предприятие (версия 8.0)
Статью в виде файла (150 кб) можно скачать здесь: art_00001.zip
Система 1С:Предприятие (версия 8) предоставляет возможность интеграции практически с любыми внешними программами и оборудованием на основе общепризнанных открытых стандартов и протоколов передачи данных.
В частности, система 1Cv8 поддерживает механизм OLE Automation в качестве как сервера, так и клиента.
При этом возможны два варианта подключения к 1Cv8 :
1. OLE Automation Client/Server.
В этом случае запускается полноценное
приложение 1С:Предприятие 8.
И система 1Cv8 предоставляет доступ ко всем
свойствам и методам своего глобального
контекста, имеет дополнительные свойства и
методы для выполнения действий,
специфичных для работы в режиме OLE Automation, а
также предоставляет возможность
выполнять действия аналогичные интерактивным
действиям.
При этом из внешнего приложения можно
управлять видимостью главного окна 1Cv8.
ВАЖНО !
При использовании второго варианта
достигается более быстрая установка
соединения, более быстрое обращение к
свойствам и методам объектов системы 1Cv8, а
также меньший расход ресурсов операционной
системы, но нет возможности использовать
возможности пользовательского интерфейса.
Более подробно об этом можно прочитать на сайте фирмы 1С (http://www.v8.1c.ru/) в разделе "Интеграция с другими системами" (http://v8.1c.ru/overview/integration.htm). А также на других сайтах интернета (например, на http://kb.mista.ru/article.php?id=35).
Рассмотрим оба варианта подключения к
системе 1Cv8 на простых примерах ( локальные
базы данных - файловый вариант).
Примеры тестировались на программе 1С:Предприятие 8.0 (8.0.12.21).
Вариант : OLE Automation Client/Server.
Исходники этого примера (9 кб) можно
скачать здесь : connect_to_1c8_ole.zip
ВАЖНО.
При таком варианте подключения имя
сервера COM-объекта (системы 1Cv8) = V8.Application
1. Создадим Delphi-проект (Connect_to_1C8_OLE) и разместим на форме следующие компоненты (рис. 1).
Рис. 1. Форма приложения "Connect_to_1C8_OLE.exe"
2. В секцию Public declarations (объявления класса формы) добавим переменную s1C8_ole: variant.
type
TForm1 = class(TForm)
...
private
{ Private declarations }
public
{ Public declarations }
s1C8_ole :
variant;
end;
3. Добавим в раздел Uses этого модуля ссылку на модуль ComObj.
uses
ComObj,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons, ComCtrls;
4. Создадим обработчик события: нажатие на кнопку "1С" (рис.1) :
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
s1C8_ole:=UnAssigned;
s1C8_ole:=ConnectTo1C8_Application(Trim(Edit_1C8_Name.Text),
Trim(Edit_Init.Text),
CheckBox1.Checked);
if YesLinkToVariant(s1C8_ole) then begin
ShowMessage('Есть соединение');
end
else begin
ShowMessage('Ошибка');
end;
end;
И обработчик события: нажатие на CheckBox
"Видимость" (рис.1) :
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
//Проверяем, существует ли соединение с 1Cv8
if YesLinkToVariant(s1C8_ole) then begin
if CheckBox1.Checked then begin
//делаем окно 1Cv8 видимым
s1C8_ole.Visible:=true;
end
else begin
//делаем окно 1Cv8 невидимым
s1C8_ole.Visible:=false;
end;
end;
end;
Тексты функций ConnectTo1C8_Application и YesLinkToVariant приведены ниже.
function YesLinkToVariant(HandleAny : Variant) : boolean;
//Проверяет, корректна ли ссылка (HandleAny)
begin
Result:=FALSE;
if not VarIsEmpty(HandleAny) then Result:=TRUE;
end;
Здесь следует отметить, что строка инициализации (функции ConnectTo1C8_Application и ConnectTo1C8_COM) может содержать следующие параметры :
Файловый вариант Б.Д.:
File=ПолныйПуть\Trade
Usr=Пользователь
Pwd=Пароль
Клиент-серверный вариант Б.Д.:
Srvr=Server1C (имя сервера, где запущен сервер приложений 1С)
Ref=Trade (имя базы данных на сервере приложений 1С)
Usr=Пользователь
Pwd=Пароль
5. Скомпилируем и запустим наше приложение.
Рис. 2. Главное окно приложения "Connect_to_1C8_OLE.exe"
Нажав на кнопку "1С" (рис.2) получим следующее сообщение :
Рис. 3. Сообщение о некорректности
параметров в строке инициализации
В данном случае строка инициализации была
вообще пуста ...
Здесь следует отметить, что при таком же
обращении (пустая строка инициализации) к
программе 1С:Предприятие версии 7.7 - на
экране высвечивалось диалоговое окно
выбора базы данных из списка
зарегистрированных в системе.
Теперь укажем в строке инициализации полный путь к какой-либо существующей локальной базе данных :
Рис. 4. Главное окно приложения "Connect_to_1C8_OLE.exe"
и "нажмем" на кнопку "1С" (рис.4).
В результате запуститься программа 1Cv8 (как сервер OLE Automation) и появится главное окно приложения 1Cv8 (рис.5).
Рис. 5. Главное окно приложения 1Cv8
Вот, собственно, и все ...
Исходники этого примера (9 кб) можно скачать
здесь : connect_to_1c8_ole.zip
Вариант : COM-соединение.
Исходники этого примера (8 кб) можно
скачать здесь : connect_to_1c8_com.zip
ВАЖНО.
При таком варианте подключения имя COM-объекта (системы 1Cv8) = v8.COMConnector
1. Создадим Delphi-проект (Connect_to_1C8_COM) и разместим на форме следующие компоненты (рис.6)
Рис. 6. Форма приложения "Connect_to_1C8_COM.exe"
2. В секцию Public declarations (объявления класса формы) добавим переменную s1C8_ole: variant.
type
TForm1 = class(TForm)
...
private
{ Private declarations }
public
{ Public declarations }
s1C8_ole :
variant;
end;
3. Добавим в раздел Uses этого модуля ссылку на модуль ComObj.
uses
ComObj,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons, ComCtrls;
4. Создадим обработчик события: нажатие на кнопку "1С" (рис.6) :
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
s1C8_ole:=UnAssigned;
s1C8_ole:=ConnectTo1C8_COM(Trim(Edit_1C8_Name.Text),
Trim(Edit_Init.Text));
if YesLinkToVariant(s1C8_ole) then begin
ShowMessage('Есть COM-соединение');
end
else begin
ShowMessage('Ошибка');
end;
end;
Текст функции ConnectTo1C8_COM приведен ниже.
5. Скомпилируем и запустим наше приложение и укажем в строке инициализации полный путь к какой-либо существующей локальной базе данных :
Рис. 7. Главное окно приложения "Connect_to_1C8_COM.exe"
и "нажмем" на кнопку "1С" (рис.7).
На экране появится "наше" сообщение (рис.8).
Рис. 8. Сообщение об удачном соединении с 1Cv8
Но (как и должно быть) окна 1Cv8 на
экране нет.
Исходники этого примера (8 кб) можно
скачать здесь : connect_to_1c8_com.zip
© 22.07.2007 Сергей Попов