Прямий доступ до бази даних 1С, Інші СУБД, Бази даних, статті

Рудюк С.А.,
rudjuk.kiev.ua

Для обміну даними моєї системи Корпорація з 1С я розробив шлюз. Спочатку, я намагався організувати обмін даними за допомогою механізму OLE, озброївшись рядом статей, опублікованих на сайті delphiplus.org і документацією 1С.

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

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

Тому, неабияк повозитися з OLE-механізмом я все таки вирішив реалізувати прямий доступ до 1С.

У даній статті я описую де і як отримати інформацію з таблиць 1С.

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

Перш за все, необхідно було вибрати компоненти для доступу до таблиць 1С. До dbf-файлів можна отримати доступ за допомогою BDE, ODBC або компонент прямого доступу. Перші два способи я відразу ж відкинув, залишився – Третій.

Я почав шукати безкоштовні компоненти для прямого доступу до dbf-файлів. І знайшов чудову компоненту DegisyData на сайті 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; 8:49:40; Федоров; E; Docs; DocWriteNew; 2;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:49:43; Федоров; E; Docs; DocNotPassed; 2;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:49:46; Федоров; E; Docs; DocOpen; 3;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:50:15; Федоров; E; Docs; DocWrite; 2;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:50:18; Федоров; E; Docs; DocPassed; 2;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:50:20; Федоров; E; Docs; DocOpen; 3;; O/2196/410;
Прибутковий касовий ордер СТ00000001 24.09.2004 8:49:40
20040924; 8:50:22; Федоров; E; Docs; DocNew; 3;; O/2051/0;
Рахунок-фактура виданий 0000000001 24.09.2004
20040924; 8:50:59; Федоров; E; Docs; DocWriteNew; 2;; O/2051/411;
Рахунок-фактура виданий СТ00000001 24.09.2004 8:50:59

Висновок

Якщо Ви збираєтеся робити шлюз, то передбачайте в програмі можливість програмування, тому що багато поля доведеться декодувати і адаптувати під дані Вашої системи. Але це вже тема окремої статті.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*