Как стать автором
Обновить

Как подружить 1С 7.7 и Postgres

Время на прочтение2 мин
Количество просмотров11K
Для такого популярного программного продукта, как 1С: Предприятие, разработчикам приходится обеспечивать кроссплатформенность и совместимость с большим числом приложений. В частности, с каждой новой версией добавляется поддержка всё новых СУБД.

Многие предприятия (преимущественно малые и средние) по-прежнему не торопятся переходить от версии 7.7 к 8.х. А в этом случае единственная предусмотренная разработчиками совместимая СУБД – Microsoft SQL. Вариант весьма затратный для небольшой компании: помимо лицензий на рабочие станции и MS SQL Server, требуется приобрести еще и MS Server.

Альтернативным решением может стать технология SELTA@Etersoft, разработанная питерской компанией Etersoft. SELTA используется в связке со свободной СУБД Postgre SQL и позволяет 1С 7.7 работать с SQL-базами. Продукт является коммерческим и позиционируется разработчиком как доступная (стоимость решения составляет от 15000 р.) альтернатива MS SQL Server.

SELTA@Etersoft — это эмулятор работы MS SQL Server на Postgre SQL. транслирующий SQL-запросы из диалекта T-SQL в pgSQL. Установка и настройка SELTA@Etersoft на клиентском ПК тривиальна: запуск инсталлятора, настройка соединения с Postgre SQL и создание БД через GUI в несколько кликов мыши. Намного интереснее рассмотреть технологию изнутри. На первый взгляд, SELTA@Etersoft при обработке каждого запроса выполняет следующие действия:

ПО отправляет запрос

SELECT TOP 2 * FROM tab;
.
.
.


Запрос принимается, транслируется и отправляется Postgre SQL

SELECT * FROM tab LIMIT 2;
.


Postgre SQL принял запрос, обработал, вернул результат, который возвращается ПО, сделавшему запрос.

Все эти действия и называются трансляцией из одного диалекта SQL в другой.
Драйвер ODBC для MS SQL сервера в реестре меняется на драйвер Postgres. Запросы в этом драйвере отлавливаются, парсятся, и переделываются в формат Postgre SQL.

image

Для того, чтобы такая эмуляция стала возможной, в SELTA@Etersoft решается ряд проблем, связанных с несхожестью двух СУБД, в частности, различие блокировок и отсутствие динамических курсоров в Postgres. Например, проблема с отсутствующими динамическими запросами решена таблицей с изменениями и автоматическим созданием триггеров на все таблицы с фиксированием всех изменений. Благодаря этому драйвер узнаёт, требуется ли пересоздать курсор, созданный динамическим.

Между тем, такая схема работы создаёт ограничения в использовании SELTA@Etersoft и не позволяет транслятору стать полностью универсальным. В настоящий момент он поддерживает только программы, работающие через ODBC-драйвер. Однако в планах разработчиков – реализовать SELTA@Etersoft в виде сервера, что обеспечит совместимость со всеми приложениями, использующими MS SQL.

Достаточно нетривиальна система блокировок Postgres и MS SQL Server. Но этот вопрос выходит за рамки первого знакомства с технологией, и он может быть рассмотрен подробнее в продолжении статьи, если вызовет интерес со стороны читателей.
Теги:
Хабы:
+17
Комментарии16

Публикации

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн