Адрес этой странички:
http://d1cv8.narod.ru/top_003/d1cv8_20071006_001/d1cv8_20071006_001.htm Дата: 29.09.2007 Интернет-приложение к книге "Delphi и 1С:Предприятие.Программирование информационного обмена" |
Глава 3. Подключение к
1С.
Создание Delphi-компонента, реализующего
функционал подключения к 1Cv8.
Расширение функционала.
Список зарегистрированных баз данных 1Cv8.
В
предыдущей статье был рассмотрен процесс создания Delphi-компонента
(TConnectTo1Cv8), реализующего
функционал подключения к системе
1Cv8, как серверу OLE Automation
Расширим функционал нашего компонента таким образом, чтобы с его помощью можно
было бы прочитать список
зарегистрированных баз данных системы 1Cv8.
В отличие от 1Cv7, где список
зарегистрированных информационных баз
хранится в системном реестре (подробно см.
на стр. 553-557 книги), в 1Cv8 список зарегистрированных
информационных баз хранится в текстовом
файле
v8ib.lst (кодировка UTF-8)
в каталоге
\Application
Data\1C\1Cv8
текущего пользователя на локальном
компьютере (где запускается программа 1С:Предприятие v 8).
Если открыть этот файл в NotePad.exe, то видно, что он имеет структуру, схожую со стандартным INI-файлом :
[Домашняя библиотека]
Connect=File="F:\1C\1Cv8\1cv8.db\HomeLib";
ID=1cd97bfa-4e57-4a23-9ee1-073a0a28e01c
OrderInList=16384
Folder=/
OrderInTree=16384
[Enterprise]
Connect=File="F:\1C\1Cv8\1cv8.db\Enterprise\8_1_0_15";
ID=647840fa-65e0-44e8-ad40-12476f178b92
OrderInList=20480
Folder=/
OrderInTree=32768
[Склад]
Connect=File="F:\1C\1Cv8\1cv8.db\Sklad";
ID=eeb56e95-8504-482a-8dee-8fe80591f811
OrderInList=24576
Folder=/
OrderInTree=49152
Структура хранения информации по каждой информационной базе :
<Наименование информационной базы> <ID> <Connect> <Folder> <OrderInList> <OrderInTree>
Connect - строка соединения с
информационной базой,
ID - внутренний
идентификатор информационной базы,
OrderInList - порядок в списке
при представлении списком
Folder - наименование ветви в
дереве информационных баз,
OrderInTree - порядок в ветви при
представлении деревом.
Более подробно об этом можно прочитать на
сайте "ИНТЕРНЕТ УНИВЕРСИТЕТА" :
http://www.intuit.ru/department/office/intro1c/2/3.html
В статье http://doc-prg.narod.ru/art_00013/art_00013.htm - детально рассмотрены вопросы программирования процесса считывания списка зарегистрированных информационных баз системы 1Cv8 с учетом вышеприведенной информации.
Попробуем применить сделанные там наработки в контексте нашего компонента.
Добавим в раздел public нашего компонента объявления следующих двух методов :
//Получить полное имя файла, где хранится список зарегистрированных
//информацонных баз системы 1Cv8
function Get_FullName_File_v8ib_lst :
string;
//Получить список наименований информационных баз и "строк соединения"
function Get_ListDB_1Cv8(List_NameDB, List_ConnectDB : TStrings) :
integer;
Назначение метода Get_FullName_File_v8ib_lst - вычисление полного имени файла v8ib.lst.
Назначение метода Get_ListDB_1Cv8 - формирование списка наименований зарегистрированных информационных баз (параметр List_NameDB) и списка (List_ConnectDB) с соответствующей информацией об их местоположении.
Реализация этих методов представлена ниже :
Вспомогательные функции (используемые в
этих методах)
UTF8_to_Str_List и Get_Path_To_SpecialFolder
были подробно рассмотрены в статье http://doc-prg.narod.ru/art_00013/art_00013.htm
.
Теперь протестируем наш компонент (предварительно, ест-нно, его нужно переустановить см. статью).
Создадим Delphi-проект ConnectTo1c8.dpr.
Рис.1 Форма проекта ConnectTo1c8.dpr
Создадим обработчик события: нажатие на кнопку "Получить список Б.Д." :
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Edit_FN_v8ib_lst.Text:=ConnectTo1Cv81.Get_FullName_File_v8ib_lst;
ConnectTo1Cv81.Get_ListDB_1Cv8(List_NameDB.Items,List_ConnectDB.Items);
end;
Скомпилируем наш проект и запустим на
выполнение.
Результат тестирования представлен на рис.2.
Рис.2 Результат
тестирования компонента
TConnectTo1Cv8
Для сравнения, ниже представлен список
информационных баз так,
как это выглядит в Конфигураторе 1Cv8 :
Рис.3. Список информационных баз в
Конфигураторе 1Cv8.
Теперь посмотрим, как можно использовать это на практике.
Создадим обработчики событий: щелчок мышкой на списке List_NameDB и List_ConnectDB (синхронизация списков) :
procedure TForm1.List_NameDBClick(Sender: TObject);
begin
if List_NameDB.Focused then begin
List_ConnectDB.ItemIndex:=List_NameDB.ItemIndex;
end;
end;
procedure TForm1.List_ConnectDBClick(Sender: TObject);
begin
if List_ConnectDB.Focused then begin
List_NameDB.ItemIndex:=List_ConnectDB.ItemIndex;
end;
end;
Создадим новую форму диалога (авторизация Пользователя), рис.4.
Рис.4. Диалоговое окно для
авторизации Пользователя .
Теперь, создадим обработчик события: двойной щелчок мышкой на списке List_NameDB :
Назначим этот же обработчик события - в
качестве обработчика для событий :
- нажатие на кнопку "Connect
to 1Cv8"
- двойной щелчок мышкой по списку List_ConnectDB
Рис.5. Обработчики событий для компонентов:
кнопка "Connect to 1Cv8" и
список List_ConnectDB.
Скомпилируем наш проект и запустим его на
выполнение.
Сформировав список информационных баз,
выберем какую-либо из них и нажмем на кнопку
"Connect to 1Cv8".
Программа выдаст запрос на авторизацию
Пользователя.
Рис.6. Авторизация Пользователя.
В случае успешной авторизации откроется окно программы 1С:Предприятие v 8.
Рис.7. Окно программы 1C:Предприятие.
Вот, собственно, и все по этой теме ...
Здесь можно скачать (43 кб)
исходные
тексты созданного Delphi-компонента.
Здесь можно скачать (10
кб) исходные тексты проекта для
тестирования.