Адрес этой странички : http://doc-prg.narod.ru/art_00001/art_00001.htm 

(c) Sergey Popov, Usinsk, Komi, 2007

© 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.

2. COM-соединение.
В этом случае запускается относительно небольшой внутрипроцессный COM-сервер (модуль приложения программы 1С:Предприятие 8 не используется). 
Следовательно, недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса системы 1С:Предприятие 8. 
А также невозможно из внешнего приложения управлять видимостью главного окна 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 Сергей Попов


Hosted by uCoz