Адрес этой странички :
http://doc-prg.narod.ru/art_00013/art_00013.htm
Дата обновления : 06.10.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 Сергей Попов