|


Прямий доступ до бази даних 1С
Автор: Рудюк С.О.
Internet: 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
|
Висновок
Якщо Ви збираєтеся робити шлюз, передбачайте у програмі можливість програмування, т.к. багато поля доведеться декодувати та адаптувати під дані Вашої системи. Але це вже тема окремої статті.
Обговорити на форумі

|