Адрес этой странички: http://d1cv8.narod.ru/top_003/d1cv8_20071006_001/d1cv8_20071006_001.htm
Дата: 29.09.2007
Интернет-приложение
к книге
"Delphi и 1С:Предприятие.Программирование информационного обмена"

Глава 3. Подключение к 1С.
Создание
Delphi-компонента, реализующего функционал подключения к 1Cv8.
Расширение функционала.
Список зарегистрированных баз данных 1
Cv8.

 

В предыдущей статье был рассмотрен процесс создания 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 кб) исходные тексты проекта для тестирования.

 


(c) Сергей Попов, респ.Коми, г.Усинск, 2007  Письмецо написать ...


Hosted by uCoz