(через OLE; в данном случае рассматривается подключение к "1C-предприятие версии 7.7")
© 08.12.2002 Сергей Попов
Создадим простое приложение, которое считывает список из справочника "ФизическиеЛица".
Пример (в формате MS Word) можно скачать здесь (792 Кб)
Шаг N 1. (скачать, 177 Кб)
Создадим проект с именем Project1
Положим на форму 2-а компонента
типа TPanel (у Panel1 свойство Align установим равным AlTop, а у Panel2 -
AlClient)
На
Panel1 положим кнопку Button1 (TButton) и установим свойство Caption =
"Соединить"
Положим на Panel1 еще 4 компонента :
Label1, Edit1, Label2, Edit2
Установим
:
- свойство Caption :
Label1.Caption -
"Имя 1C-сервера = "
Label2.Caption - "Строка
инициализации = "
- свойство Text :
Edit1.Text - "V77.Application"
Edit2.Text -
"/DF:\1CV77\ATCDEMO"
Должно получиться что-то вроде этого:

Некоторые пояснения.
Edit1.Text содержит имя 1C, как OLE - сервера
автоматизации.
В нашем случае мы указали : V77.Application
Возможные
значения (согласно документации по 1C) :
- V1СEnterprise.Application -
версия независимый ключ;
- V77.Application - версия зависимый
ключ;
- V77S.Application - версия зависимый ключ, SQL версия;
-
V77L.Application - версия зависимый ключ, локальная версия;
-
V77M.Application - версия зависимый ключ, сетевая версия.
Edit2.Text содержит строку инициализации 1C
В
нашем случае мы указали : /DF:\1CV77\ATCDEMO
Т.е., указали только
местонахождение Базы Данных, к которой желаем подключиться
(в этом
примере : указан каталог F:\1CV77\ATCDEMO)
Возможные значения ключей
(согласно документации по 1C) :
/D - Имя каталога (папки), где
располагается База Данных
/N - Имя Пользователя
/P - Пароль
доступа
Пример : /DC:\1CV77\ATCDEMO /NАдмин
/P123
В исходном тексте программы добавим следующее (выделено жирным красным
цветом) :
uses
ComObj,
Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,
ExtCtrls,
StdCtrls;
type
TForm1 =
class(TForm)
Panel1:
TPanel;
Panel2:
TPanel;
Button1:
TButton;
Label1:
TLabel;
Label2:
TLabel;
Edit1:
TEdit;
Edit2:
TEdit;
procedure
Button1Click(Sender: TObject);
private
{ Private declarations
}
Ole1C :
OleVariant;
public
{ Public declarations
}
end;
Переменная Ole1C (типа OleVariant) будет использована в
дальнейшем, как указатель на объект 1C (OLE - сервер автоматизации).
Сделаем двойной щелчок по компоненту Button1 и изменим
стандартный обработчик события - нажатие на кнопку - следующим образом
:
procedure
TForm1.Button1Click(Sender: TObject);
Var
ResOpen : integer;
begin
Ole1C :=
CreateOleObject(Edit1.Text);
ResOpen:=Ole1C.Initialize(Ole1C.RMTrade, Edit2.Text, '');
end;
Строка :
Ole1C :=
CreateOleObject(Edit1.Text);
собственно,
"запускает" программу 1C, как OLE - сервер автоматизации (имя указано в
Edit1.Text)
Строка
:
ResOpen:=Ole1C.Initialize(Ole1C.RMTrade, Edit2.Text,
'');
инициализирует 1C, согласно нашим "указаниям"
(Edit2.Text)
Более подробно можно почитать соотв. документацию по
1C
Откомпилируем и запустим приложение Project1.exe
Нажмите на кнопку
"Соединить".
Если все указано корректно (содержание Edit1.Text
и Edit2.Text),
программа 1C должна запуститься (как OLE сервер
автоматизации).
Если в строке инициализации НЕ указаны имя пользователя и(или)
пароль доступа, то следует запрос :
Если не
корректно указан каталог Базы Данных, то следует запрос :
После загрузки и инициализации программы 1C, ссылка на 1C
хранится в переменной Ole1C.
Следует
помнить, что программа 1С:Предприятие (как и все создаваемые объекты OLE
Automation), выступающая в качестве объекта OLE Automation в другой программе,
будет находиться в памяти компьютера до удаления или изменения значения
переменной, содержащей ее в качестве объекта.
Именно поэтому, мы вынесли
объявление переменной Ole1C "за пределы"
обработчика : TForm1.Button1Click
Явных (видимых) признаков
того, что мы запустили 1C - нет.
Для того, что убедиться в этом, нужно
запустить диспетчер задач (по комбинации Ctrl+Alt+Del).
В списке задач можно
увидеть : 
Следует отметить, что после того, как Project1.exe будет
закрыт - автоматически выгрузится из памяти и 1C.
Шаг N 2.(скачать, 180Кб)
Продолжим наш проект.
На
Panel2 положим компонент ListBox1 (TListBox). Свойство Align установим равным
AlClient.
Рядом с кнопкой Button1 ("Соединить") положим на Panel1 кнопку Button2
(установим свойство Caption = ФизЛица)
Получится что-то вроде этого :
В исходном тексте
программы добавим описание переменной OleFizLica
private
{ Private declarations
}
Ole1C : OleVariant;
OleFizLica :
OleVariant;
public
{ Public declarations
}
end;
var
Form1: TForm1;
Сделаем двойной щелчок по компоненту Button2 и изменим стандартный
обработчик события - нажатие на кнопку - следующим образом :
procedure
TForm1.Button2Click(Sender: TObject);
begin
OleFizLica :=
Unassigned;
if not VarIsEmpty(Ole1C) then
begin
OleFizLica:=Ole1C.CreateObject('Справочник.ФизическиеЛица');
end;
end;
Строка :
OleFizLica := Unassigned;
Здесь
"обнуляется" значение переменной OleFizLica.
Тем самым, если ранее был
создан какой-либо OLE-объект, на который ссылалась эта переменная, он будет
уничтожен.
Строка :
if not VarIsEmpty(Ole1C) then
begin
Здесь проверяется, чтобы значение переменной Ole1C не было
"пустым".
Т.е., если Ole1C имеет "не пустое" значение, то это значит (в
контексте нашего проекта), что программа 1C запущена и связь с ней
установлена.
Строка
:
OleFizLica:=Ole1C.CreateObject('Справочник.ФизическиеЛица');
Здесь
создается объект, который ссылается на справочник "ФизическиеЛица".
Если
такой справочник существует, то в дальнейшем, переменная OleFizLica будет
содержать ссылку на него.
Откомпилируем и запустим приложение Project1.exe
Нажмите на кнопку
"Соединить". После того, как загрузится программа 1C, нажмите на кнопку
"ФизЛица".
Если все указано корректно , то ничего не произойдет
(никаких дополнительных сообщений не будет)
Это значит, что все OK.
Шаг N 3. (скачать, 184 Кб)
Сделаем двойной щелчок по компоненту Button2 и еще раз изменим обработчик
события нажатия на кнопку следующим образом :
Строки N 3,4,5,6 теперь понятны.
Строка N 7
:
if not VarIsEmpty(OleFizLica) then begin
Здесь проверяется, что
объект, ссылающийся на справочник "ФизическиеЛица" действительно создан.
Строки N 8..13
Здесь реализован стандартный алгоритм на языке
1C по перебору элементов справочника.
Строка N 11
ListBox1.Items.Add(OleFizLica.Код+'
'+OleFizLica.Наименование);
Здесь продемонстрирован один из вариантов
обращения к реквизитам справочника по именам.
Строка N 16
OleFizLica :=
Unassigned;
Здесь "обнуляется" значение
переменной OleFizLica.
Тем самым, мы уничтожаем созданный нами объект,
чтобы зря не занимать ресурсы.
Следует отметить, что поскольку (в нашем
случае) мы используем переменную OleFizLica только в
"пределах" обработчика
procedure TForm1.Button2Click(Sender: TObject),
то мы могли бы и объявить эту переменную в этом обработчике.
Откомпилируем и запустим приложение Project1.exe
Нажмите на кнопку
"Соединить". После того, как загрузится программа 1C, нажмите на кнопку
"ФизЛица".
Если все указано корректно , то в ListBox1 будет
содержание справочника "ФизическиеЛица".
Т.е., будет что-то вроде этого
:
Вот, собственно, и все (чего мы хотели).
Copyright© 2002 Сергей Попов
Другие примеры работы в Delphi с 1С...