Библиотека функций для работы с базами 1С Предприятие 7.7

Работа с DBF 1С 7.7

РаботаСdBF.zip

1cdllrun — это библиотека функций для работы с базами 1С Предприятие 7.7 (dbf-файлы) в режиме реального времени, т.е. с одновременным отражением изменений в программе 1С Предприятие(в сетевом режиме).

Может использоваться в программах, написанных на любом языке программирования, поддерживающем вызовы dll-функций.

Область применения — интеграция собственных программ, разработок с системой 1С Предприятие 7.7, экспорт данных в базы 1С Предприятие.

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

Формат cdx-файлов, используемых в программе 1С Предприятие, несколько отличается от стандартного. После внесения изменений с помощью систем разработки, поддерживающих формат cdx (таких, например, как Delphi, FoxPro), 1С Предприятие некорректно отражает данные из модифицированной таблицы, ограничивая тем самым возможность непосредственного доступа к базам.

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

Возможности программы:
— чтение/запись данных
— добавление/удаление записей
— перемещение по таблице
— смена активного индекса
— блокировка записи
— чтение физического номера записи
Поддерживаемые типы таблиц:
— Справочники ScXXX
— Документы DhXXX, DtXXX
— таблицы 1sjourn, 1sentry, 1soper

СОСТАВ

RunDll\ — тестовый пример использования библиотеки
Source\ — исходники
readme.txt — файл описания
cdbeng.ini — ini-файл с примером настроек
funcs.pas — объявления функций для Delphi
1cdllrun.dll — откомпилированный модуль библиотеки

НАСТРОЙКА

Для доступа к базам данных 1cdllrun использует функции dll-библиотек программы 1С Предприятие bkend.dll, dbeng32.dll, type32.dll, которые необходимо переписать из каталога программы 1С Предприятие. В файле cdbeng.ini необходимо указать путь к базе данных в параметре 1CBase, а в параметре DDict — имя файла Data Dictionary (по умолчанию 1cv7.dd). В файле 1cv7.dd приводится описание таблиц и полей каждой таблицы базы данных. Открытие таблиц базы данных производится одной операцией в соответствии со списком файла Data Dictionary. Поэтому можно указать свой файл Data Dictionary, в котором оставить только те таблицы, которые нужны для работы.

ОПИСАНИЕ БИБЛИОТЕКИ

Библиотека позволяет получить одновременный доступ к десяти таблицам независимо от количества открытых таблиц (описанных в файле Data Dictionary).

Чтобы увеличить количество доступных таблиц нужно изменить размер массива ArrStore в файле 1crundll.cpp.

Описание функций для языка C/C++ дано в файле RunDll\RunDll.h, для Delphi — в файле funcs.pas. В каталоге RunDll содержится пример использования библиотеки на языке C/C++.

При вызове функций в параметре TableName необходимо указывать имя таблицы в верхнем регистре. Например: 1SJOURN, 1SENTRY, SC591. Для полей типа DATE параметр FieldValue должен указываться в формате «mmddyyyy» без разделительных знаков, например, «10202002». Поля, содержащие время записи (например, поле TIME в таблице 1sjourn.dbf) не обрабатываются, а заполняются автоматически — по текущему времени.

В функции TDelete второй параметр определяет тип действия над записью:
0 — вызывает физическое удаление записи, аналогичное Delete в Delphi, FoxPro;
1 — удаление, согласно спецификации 1С, заполнением поля Ismark (для некоторых типов таблиц).

Все изменения, сделанные с помощью функции TSetField вступают в силу только после вызова TUpdate. Нумерация полей в таблицах начинается с нуля. При добавлении записей ключевые, автоинкрементные поля заполняются автоматически. При этом обновляется также таблица 1suidctl.dbf, содержащая последнее значение автоинкрементного поля.

Для перемещения по таблицам используются две функции. Функция TNGoto реализует перемещение к записи по ключевому, автоинкрементному полю.

КОМПИЛЯЦИЯ

Компиляцию программы нужно производить в компиляторе Visual C++ v.6.0, что связано с искажением имен экспортируемых функций программы 1С Предприятие.

В созданный проект, помимо файлов, содержащихся в каталоге Source архива, нужно добавить библиотеки импорта type32.lib, dbeng32.lib, bkend.lib в раздел Resource Files. Получить библиотеки импорта можно с помощью программы lib из состава Visual C++ из файлов описания модуля, которые можно создать при помощи утилиты impdef.exe, поставляемой в пакете Borland C++.

Описанные действия выполняются следующими командами:
impdef type32 type32.dll
impdef dbeng32 dbeng32.dll
impdef bkend bkend.dll
lib /machine:Ix86 /OUT:type32.lib /DEF:type32.def
lib /machine:Ix86 /OUT:dbeng32.lib /DEF:dbeng32.def
lib /machine:Ix86 /OUT:bkend.lib /DEF:bkend.def

При выполнении программы возможна ошибка при высвобождении памяти в деструкторе ~CString(), связанная с корявой эмуляцией класса CString. Чтобы избежать этой ошибки, нужно в свойствах проекта во вкладке C/C++ выбрать категорию Code Generation и установить в свойствах Use run-time library значение Debug Multithreaded или Debug Single-Threaded. Можно также создать проект на основе классов MFC.