Адрес этой странички : http://doc-prg.narod.ru/art_00013/art_00013.htm 
Дата обновления : 06.10.2007
 

(c) Sergey Popov, Usinsk, Komi, 2007

© 06.10.2007 Сергей Попов

Здесь следует отметить, что приведенная ниже статья носит чисто иллюстративный характер и не претендует на бОльшее.
Для серьезной и углубленной проработки специальных вопросов информационного обмена крайне рекомендуется использовать фирменное техническое описание системы 1Cv8.

1Cv8 + Delphi-5.
Формирование списка зарегистрированных информационных баз системы 1Cv8. 
 

Статью в виде файла (197 кб) можно скачать здесь: art_00013.zip


В отличие от 1Cv7 (где список зарегистрированных информационных баз хранится в системном реестре) , 
в 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  

 

Попробуем использовать эту информацию для программного формирования списка информационных баз системы 1Cv8.

Создадим Delphi-проект. Форма проекта представлена на рис.1.




Рис.1. Форма Delphi-проекта Get_ListDB_1Cv8.dpr.

 

Прежде всего нам нужно программным путем получить полный путь к папке Application Data 
для текущего Пользователя Windows. 
Будем использовать для этого  предложенный на сайте :
    http://www.swissdelphicenter.ch/en/showcode.php?id=233 
алгоритм. 
Текст функции Get_Path_To_SpecialFolder (выполняющей эти действия) приведен ниже :

Функция на входе принимает параметр (значение одной из предопределенных в модуле ShlObj.pas  констант) и возвращает полный путь к соответствующей системной папке.
В нашем случае мы будем использовать константу : CSIDL_APPDATA

Создадим обработчик события: нажатие на кнопку "Где файл: v8ib.lst" (рис.1) :

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
    //Получить полный путь к системной папке : Application Data
    Edit_FN_v8ib_lst.Text := Get_Path_To_SpecialFolder(CSIDL_APPDATA)+'\1C\1Cv8\v8ib.lst';
end;

Скомпилируем наш проект и проверим, как это работает (рис.2) :


Рис.2. Результат тестирования функции 
Get_Path_To_SpecialFolder
.

Здесь комментарий не требуется.


Теперь, создадим обработчик: нажатие на кнопку "Открыть" (рис.1 и 2) :

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
    Memo1.Lines.Clear;
    if FileExists(Edit_FN_v8ib_lst.Text) then begin
        Memo1.Lines.LoadFromFile(Edit_FN_v8ib_lst.Text);
    end
    else begin
        ShowMessage('Файл не найден !');
    end;
end;

Здесь все прозрачно и пояснений не требуется.

Скомпилируем наш проект и прочитаем содержание файла v8ib.lst (рис.3).


Рис.3. Содержание файла v8ib.lst.

"Крякозябры" вместо кириллицы - это следствие того, что файл имеет кодировку UTF-8.
В Delphi-5 нет встроенной функции конвертации кириллицы из кодировки UTF-8 в ANSII.
Поэтому, используем  для этого функцию UTF8ToStrSmart, представленную на форуме :
    http://politics.delphimaster.ru/cgi-bin/forum.pl?id=1188308666&n=0

Текст этой функции (и вспомогательной) приведен ниже :

 

На ее основе создадим функцию конвертации списка TStrings :

function UTF8_to_Str_List(List : TStrings): integer;
Var
    i : integer;
    Sx : string;
begin
    Result:=0;
    if List<>NIL then begin
        if List.Count>0 then begin
            for i:=0 to (List.Count-1) do
            begin
                Sx:=List[i];
                Sx:=UTF8ToStrSmart(Sx);
                List[i]:=Sx;
            end;
        end;
    end;
end;

Теперь, создадим обработчик: нажатие на кнопку "utf8->ansii" (рис.1, 2 и 3) :

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
    UTF8_to_Str_List(Memo1.Lines);
end;

Скомпилируем наш проект, запустим его на выполнение и протестируем функцию UTF8_to_Str_List (рис.4).


Рис.4. Результат тестирование функции 
UTF8_to_Str_List
.

Здесь символ "?" в начале первой строки - это "мусор", который соответствует признаку файла в кодировке UTF-8.
Шестнадцатиричное значение первого слова (2 байта) файла  = EFBB.

Теперь, наконец, нужно просто выделить из текста (рис.3) строки, начинающиеся с символа "[".
Это и будет список зарегистрированных на локальном компьютере информационных баз системы 1Cv8.

По причине тривиальности решения здесь этот код не приводится.

На рис.5 представлен результат тестирования нашего проекта :


Рис.5. Результат тестирование программы. 


Для сравнения, ниже представлен список информационных баз так, 
как это выглядит в Конфигураторе 1Cv8 :


Рис.6. Список информационных баз в Конфигураторе 1Cv8.

 


Исходные тексты этого примера (9 кб) можно скачать здесь : get_listdb_1cv8.zip

Дополнительно по этой теме можно найти информацию в специальной литературе по системе 1Cv8 и в интернете.
Например, на сайтах :
    http://www.intuit.ru/department/office/intro1c/2/3.html
    http://www.samag.ru/art/07.2005/07.2005_11.html
    http://www.kb.mista.ru/article.php?id=481
    http://d1cv8.narod.ru/
    http://www.swissdelphicenter.ch/en/showcode.php?id=233
    и др ...

 

© 06.10.2007 Сергей Попов

 


Hosted by uCoz
-->