Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Delphi - Все статьи »

Обсудить на форуме Обсудить на форуме

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

Для обмена данными моей системы Корпорация с 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

Заключение

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


Может пригодится:


Автор: Рудюк С.А
Прочитано: 6331
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру