Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Прямой доступ к базе данных 1С

01.01.2007

Прямой доступ к базе данных 1С

Автор: Рудюк С.А.

https://rudjuk.kiev.ua/

Для обмена данными моей системы Корпорация с 1С я разработал шлюз. Вначале, я пытался организовать обмен данными с помощью механизма OLE, вооружившись рядом статей, опубликованных на сайте http://delphiplus.org и документацией 1С.

Мне удалось подключиться к 1С, получить информацию о полях и данных справочников. Однако, этот способ оказался слишком не стабильным и медленно-работающим. Система не хотела работать, когда 1С завершилась аварийно, кроме того у заказчика пришлось чистить реестр, чтобы OLE срабатывал правильно. И самое, пожалуй главное, так это то, что команды не всегда хотели срабатывать. Приходилось много времени тратить на доступ к элементарным операциям.

В завершение всего, данные, получаемые посредством OLE не очень полезны - часто показываются только те данные, которые действительны на данное время. Так, например, курс валют будет показываться на дату системы, а не выводиться таблица изменений курсов валют.

Поэтому, изрядно повозившись с OLE-механизмом я всё таки решил реализовать прямой доступ к 1С.

В данной статье я описываю где и как получить информацию из таблиц 1С.

Прямой доступ к таблицам в формате dbf-файлов

Прежде всего, необходимо было выбрать компоненты для доступа к таблицам 1С. К dbf-файлам можно получить доступ с помощью BDE, ODBC или компонент прямого доступа. Первые два способа я сразу же отмёл, остался - третий.

Я начал искать бесплатные компоненты для прямого доступа к dbf-файлам. И нашёл превосходную компоненту DegisyData на сайте http://www.degisy.com. С помощью этой компоненты, Вы можете просматривать dbf-файлы, добавлять, изменять и удалять информацию в них.

Хранение информации в 1С

Теперь рассмотрим где же взять информацию о таблицах 1С.

1С для каждого справочника создаёт отдельную таблицу. Таких таблиц получается достаточно большое количество и догадаться о назначении каждой из них довольно тяжело.

Прежде всего следует отметить, что 1С создаёт пары файлов: .DBF-файл (данные) и одноимённый .CDX-файл (индексный файл).

Мы можем CDX файлы удалить - потери информации не будет, так как это индексные файлы. При запуске 1С в монопольном режиме автоматически создадутся необходимые индексные файлы.

Информацию о любом файле базы данных и любом поле Вы можете почерпнуть из текстового файла 1Сv7.DD.

#AccWare Data Dictionary

D=DDV7120|AccWare Data Dictionary (DDCP=1251UKR)|

#

#

#===================================

#==TABLE no 0 : Соединений

# Name |Descr |Type[A/S/U]|DBTableName|ReUsable

T=1SUSERS |Соединений |A |1SUSERS |1

#-----Fields-------

# Name |Descr |Type|Length|Precision

F=USRSCNT |Number of users |N |4 |0

F=NETCHGCN |Count of changes |N |10 |0

#

#====================================

#==TABLE no 1 : Системная

# Name |Descr |Type[A/S/U]|DBTableName|ReUsable

T=1SSYSTEM|Системная |A |1SSYSTEM |1

#-----Fields-------

# Name |Descr |Type|Length|Precision

F=CURDATE |Date of TM |D |8 |0

F=CURTIME |Time of TM |C |6 |0

F=EVENTIDTA |ID Event On TA |C |9 |0

F=DBSIGN |DB Sign |C |3 |0

F=DBSETUUID |UUID of DB set |C |36 |0

F=SNAPSHPER |Snap Shot Period |C |1 |0

F=ACCDATE |Date of Account Tota|D |8 |0

F=FLAGS |FLAGS |N |10 |0

#

#====================================

#==TABLE no 2 : Константы

# Name |Descr |Type[A/S/U]|DBTableName|ReUsable

T=1SCONST |Константы |A |1SCONST |1

#-----Fields-------

# Name |Descr |Type|Length|Precision

F=OBJID |ID obj(0-cons ) |C |9 |0

F=ID |ID parameter |C |4 |0

F=DATE |Fix date |D |8 |0

F=PARTNO |no of part |N |3 |0

F=VALUE |valume |C |23 |0

F=DOCID |ID Document |C |9 |0

F=TIME |Time |C |6 |0

F=ACTNO |Action No |N |6 |0

F=LINENO |LineNo |N |4 |0

F=TVALUE | |C |3 |0

.......

В этом файле написано рядом с английским названием таблицы - русское название, рядом с английским названием поля - его назначение, тип данных и размер. Этой информации вполне достаточно, чтобы понять назначение каждой таблицы и поля базы данных. Я не буду дублировать информацию из этого файла в данной статье.

Пароли пользователей хранятся в папке usrdef. Если удалить этот каталог, то можно входить в систему 1С без пароля с наибольшими правами.

Последнее, что необходимо для шлюза - это история изменений данных пользователями. Эту информацию Вы можете найти в текстовом файле каталога SYSLOG.

20040924;08:49:40;Федоров;E;Docs;DocWriteNew;2;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:49:43;Федоров;E;Docs;DocNotPassed;2;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:49:46;Федоров;E;Docs;DocOpen;3;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:50:15;Федоров;E;Docs;DocWrite;2;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:50:18;Федоров;E;Docs;DocPassed;2;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:50:20;Федоров;E;Docs;DocOpen;3;;O/2196/410;

Приходный кассовый ордер СТ00000001 24.09.2004 08:49:40

20040924;08:50:22;Федоров;E;Docs;DocNew;3;;O/2051/0;

Счет-фактура выданный 0000000001 24.09.2004

20040924;08:50:59;Федоров;E;Docs;DocWriteNew;2;;O/2051/411;

Счет-фактура выданный СТ00000001 24.09.2004 08:50:59

Заключение

Если Вы собираетесь делать шлюз, то предусматривайте в программе возможность программирования, т.к. многие поля придётся декодировать и адаптировать под данные Вашей системы. Но это уже тема отдельной статьи.