SELTA/Устройство
Устройство SELTA@Etersoft
SELTA@Etersoft позволяет 1С:Предприятию 7.7 (SQL-версии), которое умеет работать только с MS SQL Server, работать с PostgreSQL. Сама 1С не меняется: она думает, что работает с MS SQL Server. SELTA состоит из клиентской части на каждом рабочем месте Windows и серверной части — схемы SELTA в каждой базе PostgreSQL.
Путь запроса
1С:Предприятие 7.7 (32-битное)
│ ODBC, драйвер «SQL Server»
▼
Диспетчер ODBC Windows (odbc32.dll)
│
▼
psqlodbc35wselta.dll — ODBC-драйвер SELTA, зарегистрирован вместо драйвера «SQL Server»
│ текст запроса T-SQL
▼
selta.dll — транслятор T-SQL → SQL/PL/pgSQL PostgreSQL (GOLD Parser)
│ запрос PostgreSQL
▼
сеть, протокол PostgreSQL (TCP 5432, пароль SCRAM-SHA-256 или MD5)
▼
PostgreSQL: база 1С со схемой SELTA (типы mchar/mvarchar, функции и таблицы,
изображающие MS SQL Server) и служебная база master
- 1С открывает подключение к «SQL Server» с указанными в Конфигураторе сервером, базой, пользователем и паролем. Первым делом она подключается к базе
master, как к MS SQL Server. - Диспетчер ODBC загружает драйвер, зарегистрированный под именем «SQL Server». После установки SELTA это драйвер SELTA, а исходный драйвер Microsoft сохраняется и возвращается при выключении или удалении SELTA.
- Драйвер подключается к PostgreSQL, проверяет версию схемы SELTA в базе и отвечает 1С версией MS SQL Server. Затем передаёт серверу имя компьютера клиента для
HOST_NAME(). - Каждый запрос 1С драйвер передаёт транслятору
selta.dll. Транслятор разбирает T-SQL грамматикой GOLD Parser и строит запрос PostgreSQL, вызывающий при необходимости функции схемы SELTA. Запросы с префиксом!!идут на сервер без трансляции (так работают служебные запросы самой SELTA). - Результат PostgreSQL драйвер отдаёт 1С так, как его отдал бы драйвер MS SQL Server.
Клиентская часть (Windows)
Ставится файлом selta.msi (32-битная) или selta64.msi (64-битная) в каталог Program Files\Selta.
| Файл | Назначение |
|---|---|
psqlodbc35wselta.dll |
ODBC-драйвер. Основан на драйвере psqlodbc 8.2 с изменениями SELTA: выдаёт себя за драйвер MS SQL Server, вызывает транслятор, эмулирует динамические курсоры и управление транзакциями MS SQL, поддерживает PostgreSQL 9.2–18 и вход по SCRAM-SHA-256. Исходные коды драйвера открыты по лицензии драйвера PostgreSQL. |
selta.dll |
Транслятор T-SQL (закрытая часть). Проверяет лицензию. |
odbcbcp.dll |
Эмуляция BCP API MS SQL Server (массовая загрузка). Копируется в системный каталог, исходная библиотека сохраняется как ms_odbcbcp.dll.
|
Selta.exe |
Центр управления SELTA@Etersoft: включение и выключение SELTA, лицензия, создание, инициализация, обновление и диагностика баз, конвертор, тест запросов, загрузка дампа. |
SeltaCmd.exe |
Управление из командной строки (конвертор). |
Scripts\8308\*.sql |
Скрипты схемы SELTA: установка, обновление между версиями, удаление. |
selta.lic |
Файл лицензии, добавляется после установки. |
Регистрация в реестре: HKLM\Software\Etersoft\SELTA@Etersoft (путь установки, состояние «включена/выключена»), драйвер «SQL Server» в HKLM\Software\ODBC\ODBCINST.INI\SQL Server. 32-битная версия на 64-битной Windows пишет в 32-битный раздел реестра (Wow6432Node) и в SysWOW64 — именно его видит 32-битная 1С 7.7.
32 и 64 бита
1С:Предприятие 7.7 бывает только 32-битным, поэтому для неё всегда нужна 32-битная SELTA (selta.msi), в том числе на 64-битной Windows. 64-битная SELTA (selta64.msi) нужна только 64-битным программам, которые обращаются к базе 1С как к MS SQL Server (например, Excel x64 или MS Query). Обе версии можно поставить на один компьютер. Учтите: 64-битная SELTA подменяет драйвер «SQL Server» для всех 64-битных программ этого компьютера.
Серверная часть (PostgreSQL)
В каждой базе, с которой работает 1С через SELTA, ставится схема SELTA (версия 1.1.6 — схема 116):
- типы
mcharиmvarchar— аналогиchar/varcharMS SQL Server со сравнением без учёта регистра (модуль mchar, см. варианты PostgreSQL); - системные представления MS SQL Server, к которым обращается 1С:
sysobjects,syscolumns,sysindexes,sysdatabases,sysprocesses,sysmessages,syscomments; - функции MS SQL Server:
OBJECT_ID,DB_ID,SERVERPROPERTY,HOST_NAME,sp_addmessage/sp_dropmessage,DAY/MONTH/YEAR,LEFT/RIGHT,LTRIM/RTRIM,STRи другие; - типизированный LIKE с правилами MS SQL Server (
selta_like; правила сверены с SQL Server 2022: хвостовые пробелы,[...],ESCAPE, «ё»); - служебные функции и таблицы SELTA:
pg_selta_version(версия схемы),selta_supported_mssql_version, динамические курсоры, блокировки (selta_lock_table), триггеры учёта изменений, загрузка таблиц BCP (LoadTable).
База master — служебная, как в MS SQL Server; 1С подключается к ней первой.
Схему ставят, обновляют и удаляют скриптами из Scripts\8308 — из Центра управления на клиенте или скриптом selta-pg-setup на сервере Linux. Обновление идёт цепочкой скриптов 8308selta_up_A_to_B.sql одной транзакцией: при ошибке база остаётся прежней.
Серверу нужны настройки, без которых 1С не работает:
standard_conforming_strings = off,escape_string_warning = off— транслятор строит строки с обратной косой чертой;client_min_messages = error— 1С считает ошибкой любое замечание сервера (NOTICE);- модуль mchar в
shared_preload_libraries; у PostgreSQL для 1С туда же добавляют fasttrun, fulleq, online_analyze, plantuner; - базы в кодировке UTF8, локаль
ru_RU.UTF-8.
selta-pg-setup выставляет их сам.
Лицензия
Файл selta.lic подписан ключом Etersoft (DSA). Без действующей лицензии драйвер не загружается. Срок проверяется по дате UTC: DATE_START — первый день действия, DATE_END — день окончания.
Где лежит исходный код
- драйвер, Центр управления, схема SELTA, MSI — репозиторий selta;
- транслятор — репозиторий goldparser;
- серверный пакет и скрипт настройки — etersoft/selta-server;
- модуль mchar для обычного PostgreSQL — etersoft/postgresql-mchar.