Экспресс-конвертер SQL-DBF для 1С 7.7.   

Многие предприятия, использующие DBF версию 1C Предприятие 7.7, по мере увеличения объемов БД сталкиваются со следующими проблемами:

1) Увеличение времени переиндексации при первом входе в систему.
2) Нарушение агрегации данных в результате сбоев (например, нарушение индексов).
3) Проблема ожидания блокировок (ожидание разблокировки транзакцией).
4) Общее "торможение" системы.

В результате этих проблем все более актуальным становится вопрос перехода на SQL версию. При переходе на SQL версию 1С Предприятие 7.7. ИТ службы сталкиваются со следующими проблемами:
1) Замедление проведения при массовом перепроведении документов (http://www.softpoint.ru/article_id11.htm).
2) В целом, перепроведение документов медленнее, чем в монопольном режиме DBF.
3) Некоторые отчеты под MSSQL работают некорректно.
4) Неудобства интерфейса, например, при прокрутке экранных форм.

Не все компании готовы оптимизировать модули документов и отчетов под работу c SQL, а даже если и готовы, то это требует какого-то времени. При этом очень часто необходима операция перепроведения документов, которая в монопольном режиме 1С DBF значительно быстрее в силу специфических применяемых механизмов кэширования.

Конечно, возможно рассмотреть вариант, когда база будет регулярно выгружаться из DBF в SQL и обратно стандартными средствами 1С, но на больших БД это время может оказаться очень большим.

В этой статье я попытаюсь рассмотреть  различия в структуре 1C DBF и SQL форматов, а также методы быстрого их преобразования.

Сравним структуру файлов DBF и структуру таблиц на примере таблицы _1sjourn.

Необходимо сразу отметить, что в DBF она называется 1sjourn.dbf а в SQL _1sjourn. Отличие в именах на подчеркивание впереди связано с невозможностью в SQL назвать таблицу с цифрой в начале наименования.

Структура файла 1sjourn.dbf

 

Структура таблицы _1sjourn


Как мы видим, отличие в структуре существует. Например, в DBF версии отсутствует поле Row_id т.к. оно там попросту не нужно. В DBF версии есть свой внутренний нумератор строк.  Поле Date_Time_IDDOC является фактически суммой полей – Date,Time,IDDOC. Подобная связка полей обусловлена структурой индексов в SQL. Несмотря на отличия, мы видим, что в целом структура совпадает. Почему же так долго происходит выгрузка-загрузка данных? В SQL для анализа этой проблемы достаточно включить профайлер и настроить трассу при выполнении загрузки-выгрузки данных в SQL.  Мы увидим, что при подобном экспорте происходит ряд избыточных действий по проверке удалению агрегационных записей.

Пример кода из трассы :

Delete from RG438 where PERIOD={d '2003-03-01'}; Delete from RG438 where PERIOD={d '2003-02-01'} and SP442=0 and SP443=0
go
Insert RG438 select {d '2003-03-01'},SP4064,SP439,SP441,SP445,SP2833,SP442,SP443 from RG438 where PERIOD={d '2003-02-01'}
Go

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

Решение компании SoftPoint позволяет как программно, так и интерактивно реализовать экспресс преобразование форматов базы данных под управлением 1С Предприятие 7.7. В данном решении используются средства наиболее эффективного экспорта данных, ускорение в случае использования этого решения по сравнению со стандартными средствами 1С составляет от 10 до 100 раз.

Рассмотрим краткое описание концепции реализации этого продукта.

Существуют различные средства доступа к данным в формате DBF и SQL.  Например, для того что бы из MSSQL сервера обращаться к данным в формате DBF достаточно подключить linked server выбрав в нем провайдером доступа Driver={Microsoft Visual FoxPro Driver}.

sp_addlinkedserver
@server = 'dbf',
@provider = 'MSDASQL',
@srvproduct = '',
@provstr = 'Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=serdyukDemoDB;SourceType=DBF;Exclusive=No;

BackgroundFetch=Yes;Null=No;Deleted=Yes'


После этого будет возможно обращение к данным DBF с использованием некоторых конструкций SQL.

SELECT * FROM OPENQUERY(DBF,'select * from DH1582')

Указанный ниже запрос вернет выборку данных с файла DH1582.DBF, как будто бы он был таблицей SQL.

Для того, что бы быстро преобразовать данные из DBF в SQL, необходимо произвести импорт объектов посредством провайдера. Затем привести в соответствие поля и индексы таблиц. После чего, просто скопировав MD и DDS файлы, можно будет пользоваться в рабочем режиме базой данных в формате SQL.

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

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

 


 Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").