SELTA/Документация
SELTA@Etersoft — программный продукт, который транслирует SQL-запросы из диалекта T-SQL (MS SQL Server) в SQL и PL/pgSQL PostgreSQL. Он позволяет программам, рассчитанным только на MS SQL Server, работать со свободной СУБД PostgreSQL.
Универсальный транслятор создать практически невозможно, поэтому SELTA предназначена для определённых приложений, прежде всего 1С:Предприятия 7.7 (SQL-версии).
Клиентская часть SELTA работает в Windows (32- и 64-битная версии) и в Linux под WINE@Etersoft SQL. Сервер — PostgreSQL 10 и новее: PostgreSQL для 1С (в ALT Linux — из репозитория) или PostgreSQL дистрибутива с модулем postgresql-mchar; для Linux есть пакет selta-server со скриптом настройки сервера.
Текущая версия — 1.1.6 (схема 116, ревизия eter2).
Общее
Устройство 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.
Поддерживаемые программы
- 1С:Предприятие 7.7 SQL (32-битное):
- * конфигурация Бухгалтерия
- * конфигурация Зарплата
- * конфигурация Торговля и Склад
- * конфигурация Производство и Услуги
- * расширение 1С++
Проверено с платформой 1С:Предприятие 7.70.027.
64-битные программы, которые обращаются к базе 1С как к MS SQL Server через ODBC (например, Excel x64 или MS Query), работают через 64-битную SELTA selta64.msi (подробнее).
1С:Предприятие 8 работает с PostgreSQL для 1С напрямую, SELTA ему не нужна.
Поддержку других программ для MS SQL Server мы готовы обсудить — пишите на selta@etersoft.ru.
О SQL и 1С
Недоступность SQL по сети
О unixODBC
Настройка SQL сервера под 1С
1. Установить под Windows MS SQL. на вопрос про идентификацию выбрать смешанный режим
2. Запустить SQL менеджер, там создать новую базу, сохранить ее на диск.
3. Запустить 1С, добавить новую базу и указать путь созданной sql базы.
4. запустить для нее Конфигуратор. Выбрать Администрирование, Настройка SQL. Указать там сервер, пароль (который указан для базы при установке ms sql ). таким образом 1С подключена к sql базе
5. Если необходимо загрузить данные из существующей dbf базы, то зайти в ее Конфигуратор, Выгрузить данные. Затем зайти в Конфигуратор sql базы Загрузить данные.
Некоторая информация которая может быть полезна при работе с MS SQL:
Установка и настройка
SELTA@Etersoft — пошаговая инструкция по установке и настройке
- Получите дистрибутив и лицензию: после заказа в каталоге заказа лежат
selta.lic, клиентскиеselta.msi/selta64.msiи серверные пакеты для вашей системы (получение SELTA). - Подготовьте сервер PostgreSQL (какой выбрать):
- ALT Linux:
epm install ./selta-server-*.rpm; - другой Linux:
epm install ./postgresql-mchar-* ./selta-server-*, либо PostgreSQL для 1С и толькоselta-server; - затем
# selta-pg-setup init --allow 192.168.1.0/24— подробно в selta-pg-setup; - сервер на Windows: PostgreSQL для 1С и ручная настройка.
- ALT Linux:
- Создайте базы для 1С:
# selta-pg-setup create-db buhили в Центре управления SELTA. - Установите клиентскую часть на каждом рабочем месте:
selta.msi(установка) и добавьте файл лицензии. - Подключите 1С: в Конфигураторе укажите сервер, базу, пользователя и пароль (подключение 1С:Предприятия).
- Перенесите данные 1С:Предприятия 7.7: из MS SQL Server или из DBF.
Обновление существующей установки — Обновление SELTA с прошлой версии.
Получение дистрибутива SELTA@Etersoft
После заказа SELTA@Etersoft вы получаете ссылку на каталог заказа. В нём лежат:
| Файл | Назначение |
|---|---|
selta.lic |
файл лицензии |
Windows/selta.msi, Windows/seltaEng.msi |
клиентская часть, 32-битная (русская и английская). Нужна для 1С:Предприятия 7.7 на любой Windows, в том числе 64-битной. |
Windows/selta64.msi, Windows/seltaEng64.msi |
клиентская часть, 64-битная — только для 64-битных программ (подробнее) |
x86_64/<система>/selta-server-* |
серверный пакет для выбранной при заказе системы: скрипт selta-pg-setup и схема SELTA |
x86_64/<система>/postgresql-mchar-* |
для систем без PostgreSQL для 1С: модуль mchar для PostgreSQL дистрибутива (варианты) |
Текущая версия — 1.1.6 (ревизия eter2). Список версий и систем: updates.etersoft.ru/pub/Etersoft/SELTA@Etersoft. Новости — Обновления и новости.
Дальше — пошаговая инструкция.
Сервер PostgreSQL для SELTA@Etersoft
Начиная с версии 1.1.4 SELTA@Etersoft работает с современным PostgreSQL. Собственные сборки Postgre@Etersoft (8.x, 9.2) больше не нужны: свои патчи ядра и модули SELTA не требуются.
Что нужно серверу
- PostgreSQL 10 или новее. Проверены версии 11, 12, 15, 16 и 18.
- Модуль mchar (типы
mchar/mvarchar). Это единственный модуль из PostgreSQL для 1С, который нужен схеме SELTA. Остальные модули редакции для 1С (fasttrun, fulleq, online_analyze, plantuner) нужны 1С:Предприятию 8; SELTA их не требует, но, если они установлены, их стоит включить. - Настройки (их выставляет selta-pg-setup):
standard_conforming_strings = off escape_string_warning = off client_min_messages = error shared_preload_libraries = 'mchar' # у PostgreSQL для 1С: 'mchar, fasttrun, fulleq, online_analyze, plantuner' listen_addresses = '*'
- Базы в кодировке UTF8 с локалью
ru_RU.UTF-8; служебная базаmasterсо схемой SELTA. - Доступ клиентов по сети в
pg_hba.confс паролем (scram-sha-256илиmd5) и пароль у пользователя, под которым работает 1С (обычноpostgres).
Варианты
1. ALT Linux: PostgreSQL для 1С из репозитория (рекомендуется)
В репозиториях ALT есть PostgreSQL в редакции для 1С (postgresqlNN-1C-server, -contrib) с модулем mchar. Пакет selta-server ставит его сам вместе со скриптом настройки:
| Ветка ALT | PostgreSQL для 1С |
|---|---|
| Sisyphus, p11 | 18 |
| c10f2 | 16 |
| p10, c10f1 | 15 |
| p9, c9f2, c9f1 | 12 |
| p8 | 11 |
# epm install ./selta-server-*.rpm # selta-pg-setup init --allow 192.168.1.0/24 # selta-pg-setup create-db buh
2. Другой дистрибутив: PostgreSQL дистрибутива и postgresql-mchar
На Debian, Astra Linux, Ubuntu, РЕД ОС, Rocky Linux, МСВСфера, AlterOS, РОСА и других дистрибутивах нет PostgreSQL для 1С. Здесь используется обычный PostgreSQL дистрибутива (12 и новее) и наш пакет postgresql-mchar: модуль mchar из PostgreSQL для 1С, перенесённый на обычный PostgreSQL (etersoft/postgresql-mchar). Пакет postgresql-mchar сам ставит сервер PostgreSQL дистрибутива.
# epm install ./postgresql-mchar-*.rpm ./selta-server-*.rpm (на Debian/Ubuntu — .deb) # selta-pg-setup init --allow 192.168.1.0/24 # selta-pg-setup create-db buh
Отличия от PostgreSQL для 1С:
- сравнения, индексы и
LIKEпоmchar/mvarcharработают так же, в том числеLIKE 'abc%'по индексу (условия на индекс строит сам модуль); - индекс для
LIKEиспользуется только по обычному (без учёта регистра) индексу; - нет модулей fasttrun, fulleq, online_analyze, plantuner — SELTA они не нужны.
3. Другой дистрибутив: PostgreSQL для 1С от 1С или Postgres Pro
Можно поставить PostgreSQL для 1С из дистрибутива 1С (releases.1c.ru) или Postgres Pro для 1С. Тогда ставится только selta-server, без postgresql-mchar: mchar входит в эти сборки. selta-pg-setup находит такие установки сам (/opt/pgpro/1c-N, /usr/pgsql-N, /usr/lib/postgresql/N). Не ставьте рядом PostgreSQL дистрибутива: на Debian он сразу создаёт свой кластер на том же порту 5432.
4. Сервер PostgreSQL на Windows
SELTA работает и с PostgreSQL для 1С под Windows. Скрипта настройки для Windows нет: выставьте настройки из раздела «Что нужно серверу» в postgresql.conf, разрешите доступ клиентов в pg_hba.conf, а базы создайте в Центре управления SELTA (кнопки «Создать БД», «Инициализировать», «Обновить SELTA»). Центр управления при подключении проверяет, что у сервера есть модуль mchar.
Старые серверы Postgre@Etersoft 8.x и 9.2
SELTA 1.1.6 по-прежнему подключается к Postgre@Etersoft 9.2, но этот сервер больше не развивается и не проверяется. Перенесите базы на один из вариантов выше: Действия при обновлении PostgreSQL.
Как проверить сервер
На Linux: selta-pg-setup status — покажет настройки, версию mchar, базы SELTA и их версии, код возврата не 0, если что-то не так. Вручную:
$ psql -U postgres -c "SHOW standard_conforming_strings" -c "SHOW client_min_messages" -c "SHOW shared_preload_libraries" $ psql -U postgres -c "SELECT name, default_version FROM pg_available_extensions WHERE name = 'mchar'" $ psql -U postgres -d buh -c "SELECT * FROM pg_selta_version"
selta-pg-setup — настройка сервера PostgreSQL для SELTA
selta-pg-setup — скрипт из пакета selta-server для Linux. Он настраивает установленный PostgreSQL для SELTA@Etersoft, создаёт базы со схемой SELTA и обновляет схему. Версия пакета совпадает с версией SELTA (1.1.6 — схема 116); схема берётся из /usr/share/selta-server/sql. Исходный код: etersoft/selta-server.
Запускается от root. С базами скрипт работает от пользователя postgres через локальный сокет, поэтому пароль ему не нужен.
Быстрый старт
# selta-pg-setup init --allow 192.168.1.0/24 # сервер, настройки, доступ из сети, база master # selta-pg-setup create-db buh # база для 1С со схемой SELTA # selta-pg-setup status # проверка
После этого в Конфигураторе 1С в параметрах SQL укажите сервер (имя или адрес машины с PostgreSQL), базу buh, пользователя postgres и его пароль (см. Подключение 1С:Предприятия).
Команды
| Команда | Что делает |
|---|---|
init |
Создаёт кластер, если его нет, настраивает сервер, включает и перезапускает службу, создаёт базу master. Повторный запуск безопасен.
|
create-db ИМЯ... |
Создаёт базы (UTF8, локаль кластера) и ставит в них схему SELTA. Отказывает, если база уже есть. |
install-db ИМЯ... |
Ставит схему SELTA в уже созданные пустые базы. Отказывает, если в базе уже есть SELTA. |
upgrade [ИМЯ...] |
Обновляет схему SELTA до версии пакета во всех базах SELTA, включая master (или в указанных). Цепочка скриптов 8308selta_up_* выполняется одной транзакцией на базу: при ошибке база остаётся прежней.
|
status |
Показывает найденный сервер, настройки, версию mchar и версии SELTA в базах. Код возврата не 0, если настройки не подходят или базы нужно обновить. |
Параметры
| Параметр | Значение |
|---|---|
--allow СЕТЬ |
Сеть клиентов для pg_hba.conf, например 192.168.1.0/24 или 10.0.0.5/32. Можно указать несколько раз.
|
--auth МЕТОД |
Проверка пароля для --allow: scram-sha-256 (по умолчанию) или md5. SELTA с версии 1.1.4 умеет оба.
|
--listen АДРЕСА |
listen_addresses, по умолчанию *.
|
--locale ЛОКАЛЬ |
Локаль нового кластера и баз. По умолчанию ru_RU.UTF-8, если её нет — C.UTF-8, иначе C.
|
--password-file ФАЙЛ |
Пароль пользователя postgres (первая строка файла).
|
Пароль postgres нужен для входа 1С по сети. Он задаётся, когда скрипт создаёт новый кластер или когда у существующего кластера пароля нет, а указан --allow (так создают кластер пакеты Debian и RH). Пароль берётся из --password-file, спрашивается на терминале, а без терминала создаётся случайный и записывается в /root/selta-postgres.password (права 600).
Что делает init
- Находит установленный PostgreSQL (см. ниже). Если его нет — сообщает, что поставить.
- Если кластера нет — создаёт его: UTF8, выбранная локаль, контрольные суммы страниц, локальный вход
peer, сетевой — с паролем. На Debian/Astra/Ubuntu — черезpg_createcluster. - Дописывает в
pg_hba.confблок между строками# BEGIN selta-pg-setupи# END selta-pg-setupс сетями--allow. При повторном запуске блок заменяется, а не дублируется; остальное в файле не трогается. - Включает автозапуск службы и запускает сервер. Без systemd (например, в контейнере) использует
pg_ctlилиpg_ctlcluster. - Через
ALTER SYSTEM(файлpostgresql.auto.conf) задаёт:listen_addresses;shared_preload_libraries— добавляет к уже заданным установленные модули из списка mchar, fasttrun, fulleq, online_analyze, plantuner;standard_conforming_strings = off,escape_string_warning = off,client_min_messages = error;online_analyze.verbose = off, если модуль online_analyze есть.
- Перезапускает сервер и проверяет настройки, наличие mchar и версию PostgreSQL (не ниже 10).
- Создаёт базу
masterсо схемой SELTA.
Типы mchar/mvarchar в новых базах создаются CREATE EXTENSION mchar. Если расширения нет, а библиотека mchar есть (старые сборки), — скриптом 8308mchar.sql.
Какой PostgreSQL находит скрипт
| Раскладка | Программы | Данные | Служба |
|---|---|---|---|
| Postgres Pro для 1С | /opt/pgpro/1c-N/bin |
/var/lib/pgpro/1c-N/data |
postgrespro-1c-N
|
| Debian, Astra Linux, Ubuntu | /usr/lib/postgresql/N/bin |
кластер N/main, настройки в /etc/postgresql/N/main |
postgresql@N-main
|
PGDG и сборки в /usr/pgsql-N |
/usr/pgsql-N/bin |
/var/lib/pgsql/N/data |
postgresql-N
|
| RH-подобные (РЕД ОС, Rocky, РОСА…) | /usr/bin |
/var/lib/pgsql/data |
postgresql
|
| ALT Linux | /usr/bin |
из /etc/sysconfig/postgresql (по умолчанию /var/lib/pgsql/data) |
postgresql
|
Поиск идёт в этом порядке; из нескольких версий берётся старшая. Порт берётся из настроек кластера (по умолчанию 5432). Переопределить можно переменными окружения SELTA_PGBIN, SELTA_PGDATA, SELTA_PGPORT, SELTA_SERVICE, например:
# SELTA_PGBIN=/usr/lib/postgresql/16/bin SELTA_PGDATA=/srv/pg16 SELTA_PGPORT=5433 selta-pg-setup status
Проверены: ALT p8, p9, c9f2, p10, c10f2, p11, Sisyphus (PostgreSQL для 1С 11–18), Debian 12, Ubuntu 24.04, Rocky Linux 9 (PostgreSQL дистрибутива с postgresql-mchar). Раскладки PGDG и Postgres Pro для 1С пока проверены только по описанию.
Пример вывода status
# selta-pg-setup status server: PostgreSQL 15.18 on x86_64-alt-linux-gnu, ... layout: alt, /usr/bin, service postgresql data: /var/lib/pgsql/data, port 5432 listen: * preload: mchar, fasttrun, fulleq, online_analyze, plantuner standard_conforming_strings: off client_min_messages: error mchar: 2.2.1 package: SELTA schema 116 databases: buh: SELTA 116 master: SELTA 116
После обновления пакета
При обновлении selta-server пакет подсказывает выполнить:
# selta-pg-setup upgrade
Подробнее — Обновление SELTA с прошлой версии.
Частые ошибки
no PostgreSQL server found— сервер не установлен. На ALT поставьтеselta-server(он тянет PostgreSQL для 1С), на других системах —postgresql-mcharили PostgreSQL для 1С.the mchar module is not installed— у сервера нет mchar: поставьтеpostgresql-mcharдля этой версии PostgreSQL или используйте PostgreSQL для 1С.PostgreSQL does not accept connections— сервер не поднялся; смотрите журнал службы (journalctl -u СЛУЖБА) илиpgstartup.logв каталоге данных.- 1С не подключается по сети — проверьте, что сеть клиента указана в
--allow, порт 5432 открыт в межсетевом экране и уpostgresесть пароль.
Создание баз данных
После подготовки сервера PostgreSQL (варианты) создайте базы, с которыми будет работать 1С. Каждая база должна содержать схему SELTA текущей версии. Кроме баз 1С нужна служебная база master: 1С подключается к ней первой, как к MS SQL Server.
На сервере Linux: selta-pg-setup
# selta-pg-setup init --allow 192.168.1.0/24 # создаёт и master # selta-pg-setup create-db buh zarplata # новые базы со схемой SELTA # selta-pg-setup install-db existing_empty # схема в уже созданную пустую базу
Подробно — selta-pg-setup.
С клиента: Центр управления SELTA
Так создают базы на сервере под Windows или без пакета selta-server. Все действия выполняются в Центре управления SELTA@Etersoft; ярлыки на него есть на Рабочем столе и в меню Пуск.
В главном меню выберите Утилиты → Инициализация БД и укажите параметры подключения к серверу PostgreSQL: адрес (порт — через запятую или двоеточие, например srv,5433), пользователь (владелец баз, обычно postgres) и пароль.
При подключении Центр управления проверяет, что у сервера есть модуль mchar, и предупреждает, если его нет. Если на сервере нет базы master, он предложит её создать — соглашайтесь. Затем откроется окно Инициализации баз данных:
Слева — список баз и их состояние. Для новой базы нажмите «Создать БД» и введите имя латинскими буквами:
Созданная база появится в конце списка с версией SELTA, для которой она предназначена. Пустые базы, созданные ранее, помечены «Не инициализировано»: выберите их и нажмите «Инициализировать». Подробнее о кнопках — в описании утилиты.
Установка SELTA@Etersoft
Клиентская часть ставится на каждое рабочее место, где запускается 1С:Предприятие 7.7. Для 1С нужен selta.msi (32-битный) — и на 32-битной, и на 64-битной Windows. selta64.msi ставится дополнительно, только если базу 1С через «SQL Server» открывают 64-битные программы (подробнее).
Перед установкой:
- закройте программы, которые используют ODBC (1С, Excel, MS Query);
- удалите предыдущую версию или ревизию SELTA — см. Обновление с прошлой версии;
- SELTA ставится поверх драйвера ODBC «SQL Server» из Windows (MDAC) и сохраняет его; без этого драйвера установка откатывается.
Установка: запустите selta.msi и следуйте указаниям — примите лицензионное соглашение и выберите каталог (по умолчанию C:\Program Files\Selta; для 32-битной версии на 64-битной Windows — C:\Program Files (x86)\Selta).
Установщик копирует файлы, регистрирует драйвер SELTA вместо драйвера «SQL Server», заменяет odbcbcp.dll в системном каталоге (исходный сохраняется как ms_odbcbcp.dll) и создаёт ярлык Центра управления SELTA. После установки добавьте файл лицензии.
Тихая установка с журналом (например, для развёртывания по сети):
msiexec /i selta.msi /qn /l*v C:\selta-install.log
Тихое удаление:
msiexec /x selta.msi /qn
Linux (WINE@Etersoft SQL)
В WINE@Etersoft SQL (с MDAC) установка выполняется командой
$ wine msiexec /i selta.msi
Встроенный ODBC-диспетчер Wine без MDAC не подходит: он переключает драйвер в режим Unicode, и запросы с кириллицей от 1С не проходят.
Одновременная работа с MS SQL Server
SELTA подменяет драйвер «SQL Server». Чтобы работать с настоящим MS SQL Server, SELTA можно временно выключить в Центре управления или использовать скрипт-обёртку (Запуск/остановка SELTA при запуске программ).
При проблемах установки
Запустите установку с журналом:
msiexec /i selta.msi /l*v C:\selta.log
и пришлите C:\selta.log и Install.log из каталога SELTA в службу поддержки. Ошибка вида «установка SELTA возможна только поверх WINE@Etersoft SQL» в Install.log означает, что в системе нет драйвера «SQL Server».
Файл лицензии SELTA@Etersoft
Для работы транслятора нужен файл лицензии selta.lic: в нём номер лицензии, владелец, тип и срок действия, подписанные Etersoft. Без действующей лицензии драйвер SELTA не загружается, и 1С не может подключиться.
Файл лицензии лежит в каталоге вашего заказа вместе с дистрибутивом (получение SELTA); его также можно получить на персональной странице продукта после приобретения. Доступ к странице:
- при заказе на sales.etersoft.ru — после оплаты, данные для входа приходят по электронной почте;
- при покупке коробочной версии у партнёров — зарегистрируйтесь на сайте, указав серийный номер из лицензионного соглашения.
Чтобы добавить лицензию, запустите Центр управления SELTA@Etersoft. Если лицензии ещё нет, он попросит указать файл:
Файл, прошедший проверку подлинности, копируется в каталог SELTA:
Можно и вручную скопировать selta.lic в каталог SELTA (по умолчанию C:\Program Files\Selta или C:\Program Files (x86)\Selta), например при развёртывании на многие машины. Для 64-битной SELTA файл кладут и в её каталог. При удалении SELTA лицензия остаётся в каталоге.
Срок действия проверяется по дате UTC: DATE_START — первый день действия лицензии, DATE_END — день окончания.
Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7
Самый простой способ загрузки данных в базу — штатная выгрузка и загрузка самой 1С (Конфигуратор → Администрирование → Выгрузить/Загрузить данные). Это делается так же, как при работе с MS SQL Server или DBF (пошаговая инструкция).
Если база на MS SQL Server очень большая и её невозможно выгрузить в zip-архив, перенесите данные утилитой Конвертор. Перенос идёт в два этапа: создание структуры базы в PostgreSQL и перенос самих данных.
Создание структуры базы данных
Создайте на сервере пустую базу со схемой SELTA: selta-pg-setup create-db buh на сервере Linux или «Создать БД» в Центре управления.
Запустите 1С 7.7, создайте новую информационную базу и откройте её в Конфигураторе. В Администрирование → Параметры базы данных SQL укажите параметры подключения к PostgreSQL (подключение 1С) и созданную базу.
Загрузите .md-файл конфигурации, для которой переносите данные, и сохраните её. При этом создаются все таблицы, индексы и хранимые процедуры. Запускать полученную конфигурацию в режиме Предприятия не требуется.
Перенос самих данных
Запустите Центр управления SELTA, в главном меню выберите Утилиты → Конвертор:
Нажмите «MS SQL Server → CSV», укажите параметры подключения к MS SQL Server с исходной базой и папку на клиенте, куда будут скопированы данные:
Нажмите «Выполнить» и дождитесь окончания: копирование всех таблиц может занять продолжительное время.
Затем нажмите «CSV → PostgreSQL» и укажите параметры подключения к базе, в которой сохранена ваша конфигурация:
Нажмите «Выполнить» и дождитесь окончания (для больших баз — до нескольких часов). После этого база готова к работе: запускайте 1С.
Если в дампе таблиц больше, чем в базе (дамп делался с работающей базы 1С, а загружается в «чистую» конфигурацию), будет ошибка:
Чтобы её избежать, установите флажок «Пропускать таблицы, отсутствующие в базе».
Современный PostgreSQL проверяет длину строк mvarchar(n) при загрузке: значение длиннее столбца даёт ошибку value too long for type mvarchar(n), а не сохраняется, как в старых сборках Postgre@Etersoft 9.2. Исправьте такие данные в исходной базе.
, порядок немного отличается — см. перенос распределённой базы.
Загрузка CSV-дампа в MS SQL Server выполняется аналогично (при выключенной SELTA).
Перенос данных и структуры базы из DBF-формата на сервер PostgreSQL
Для переноса базы из DBF в PostgreSQL нужна сетевая (SQL) версия 1С 7.7. Порядок действий:
- Откройте Конфигуратор 1С, выберите «Администрирование» → «Выгрузить данные» и выгрузите базу в zip-архив. Закройте Конфигуратор.
- Создайте на сервере пустую базу со схемой SELTA:
selta-pg-setup create-db buhили «Создать БД» в Центре управления SELTA. - Добавьте новую информационную базу в 1С и откройте её в Конфигураторе; формат хранения данных — «MS SQL Server».
- В «Администрирование» → «Параметры базы данных SQL» укажите сервер PostgreSQL, созданную базу, пользователя и пароль (подключение 1С).
- Откройте «Администрирование» → «Загрузить данные», выберите zip-архив, полученный при выгрузке, и нажмите «OK».
Обновление
Обновление SELTA@Etersoft с прошлой версии
SELTA состоит из клиентской части (MSI на каждом рабочем месте) и схемы SELTA в каждой базе PostgreSQL (устройство). Версии клиента и схемы должны совпадать: клиент 1.1.6 работает со схемой 116. Если схема в базе старше клиента, драйвер не выполняет запросы 1С и возвращает ошибку SELTA need update. Если схема новее клиента — SELTA not success. Поэтому клиентов и базы обновляют вместе.
Порядок обновления
- Завершите работу всех пользователей 1С с базами SELTA.
- Сделайте резервную копию каждой базы:
# su - postgres -c "pg_dump -Fc -f /var/backup/buh.dump buh"
- Обновите серверную часть и схему в базах:
- Linux с пакетом selta-server: обновите пакет (
epm upgradeилиepm install ./selta-server-*.rpm) и выполните# selta-pg-setup upgrade- Команда обновит все базы SELTA, включая
master. Проверка —selta-pg-setup status.
- Без selta-server (сервер на Windows или настроенный вручную): на любом клиенте с новой версией SELTA откройте Центр управления → Инициализация БД, выберите базу и нажмите «Обновить SELTA». Так обновите каждую базу, включая
master.
- Linux с пакетом selta-server: обновите пакет (
- На каждом рабочем месте удалите старую SELTA (Панель управления → Программы, или
msiexec /x selta.msi) и установите новую (установка). Файл лицензииselta.licпри удалении остаётся в каталоге SELTA; если его нет — добавьте заново (лицензия). - Запустите 1С. После обновления, затронувшего конфигурацию, выполните действия при обновлении конфигурации 1С.
Обновление схемы идёт цепочкой скриптов 8308selta_up_A_to_B.sql от версии базы до текущей, одной транзакцией на базу. При ошибке база остаётся в прежней версии, а данные 1С не меняются.
Особенности версий
- Новая ревизия той же версии (например, 1.1.6-eter1 → 1.1.6-eter2): схема не меняется, обновляется только клиент. Перед установкой удалите предыдущую ревизию: у них одинаковый код продукта, и установщик иначе откажет.
- 32 и 64 бита: обновляйте
selta.msiиselta64.msiпо отдельности; удаление одной не трогает другую. - С 1.1.4 и старше на 1.1.5 и новее: модуль сервера
seltapgaddonбольше не нужен,host_name()написана на SQL. При восстановлении дампа такой базы на новый сервер будут две ошибки проhost_name(): их исправляет обновление схемы. - С 1.1.0–1.1.3: схемы 111–113 исправляли LIKE; после обновления
LIKEработает по правилам MS SQL Server (хвостовые пробелы,[...],ESCAPE). - С 1.0.x: обновите сначала до 1.1.x на старом сервере кнопкой «Обновить SELTA», затем переносите базу на новый сервер (ниже).
Переход со старого сервера Postgre@Etersoft на новый PostgreSQL
SELTA 1.1.4 и новее работает с PostgreSQL 10+ (варианты сервера). Базы со старого сервера Postgre@Etersoft 8.x/9.x переносят дампом:
- На старом сервере:
pg_dump -Fc -f buh.dump buh(лучше утилитойpg_dumpновой версии, подключившись к старому серверу по сети). - На новом сервере подготовьте PostgreSQL:
selta-pg-setup init ...(скрипт настройки). - Создайте пустую базу в UTF8 и восстановите дамп:
# su - postgres -c "createdb -E UTF8 -l ru_RU.UTF-8 -T template0 buh && pg_restore -d buh buh.dump"
- Обновите схему:
# selta-pg-setup upgrade buh - В Конфигураторе 1С укажите новый сервер в параметрах SQL.
Если дамп сделан более новой версией PostgreSQL, чем сервер, на который его восстанавливают (например, дамп 18 на сервер 15), pg_restore его не читает. Переведите дамп в SQL утилитой версии дампа (pg_restore -f buh.sql buh.dump) и загрузите его psql -d buh -f buh.sql; ошибку про неизвестный параметр transaction_timeout можно пропустить.
Базу, в которой типы mchar созданы старым скриптом, а не расширением, перевести в расширение нельзя (на PostgreSQL 13+); она работает как есть.
История требований к прежним версиям PostgreSQL — Действия при обновлении PostgreSQL.
|
Актуально для SELTA 1.1.4 и новее. Сборки Postgre@Etersoft 8.x/9.x больше не нужны: SELTA работает с PostgreSQL 10+ в редакции для 1С или с PostgreSQL дистрибутива и модулем postgresql-mchar (варианты сервера). Перенос баз со старого сервера (дамп, восстановление, обновление схемы) — в разделе Обновление SELTA с прошлой версии. Ниже — история требований к старым версиям Postgre@Etersoft. |
Действия при обновлении /PostgreSQL
В этом разделе описываются действия, которые необходимо выполнить при изменении версии PostgreSQL, независимо от того, изменили ли вы при этом версию Selta. Обратите внимание, что часть из них проделывается с Selta, а часть с PostgreSQL. Если действия не указаны, значит они не требуются.
Release 9.0
- Postgre:
- Требуется выполнить операцию dump/restore, при переходе с более ранних версий.
- Selta:
- обновление баз не требуется, для всех, кто переходит с версий после 8.3.8, Если вы обновились с версии до 8.3.8, следуйте инструкциям Selta 8.3.8
Release 8.4.2 - 8.4.3
- Postgre:
- Операция dump/restore не требуется для тех, кто переходит с версий 8.4.x, но если вы переходите с версии до 8.4, следуйте инструкциям к 8.4.1
- Selta:
- обновление баз не требуется, для всех, кто переходит с версий после 8.3.8, Если вы обновились с версии до 8.3.8, следуйте инструкциям Selta 8.3.8
Release 8.4.1
- Postgre:
- Требуется выполнить операцию dump/restore, при переходе с более ранних версий.
- Selta:
- обновление баз не требуется, для всех, кто переходит с версий после 8.3.8, Если вы обновились с версии до 8.3.8, следуйте инструкциям Selta 8.3.8
Release 8.3.8
- Postgre:
- Операция dump/restore не требуется для всех, кто переходит с версий 8.3.x. Требуется выполнить операцию REINDEX.
- Selta:
- Требуется обновление баз, при переходе с более ранних версий.
Release 8.3.2 - 8.3.7
(поддерживается начиная с Selta 1.0.5)
- Postgre:
- Операция dump/restore не требуется для тех, кто переходит с версий 8.3.x, но если вы переходите с версии до 8.3.1, следуйте инструкциям к 8.3.1
- Selta:
- обновление баз не требуется, для всех, кто переходит с версий 8.3.x. Если вы обновились с версии до 8.3, следуйте инструкциям Selta 8.3
Release 8.3.1
(поддерживается начиная с Selta 1.0.5)
- Postgre:
- Операция dump/restore не требуется для всех, кто переходит с версий 8.3.x. Однако вам может понадобится переиндексировать текстовые поля после обновления.
- Selta:
- обновление баз не требуется, для всех, кто переходит с версий 8.3.x. Если вы обновились с версии до 8.3, следуйте инструкциям Selta 8.3
Release 8.3
(поддерживается начиная с Selta 1.0.5)
- Postgre, Selta:
- Для корректной работы требуются выполнить операции
- независимо от того, обновляли ли вы версию Selta, обязательно сделайте обновление ваших баз:
- На клиентской машине запустите графическую утилиту SELTA ( Общее описание ), в главном меню выберите пункт Инициализация БД, и обновите ранее созданные базы до новой версии SELTA (подробнее в разделе Инициализация баз данных), или создайте новые.
Release 8.2.11-8.2.8
- Postgre:
- Операция dump/restore не требуется для всех, кто переходит с весий 8.2.x.
- Однако, если вы переходите с версии до 8.2.7, следуйте инструкциям 8.2.7
Release 8.2.7 - ...
- Postgre:
- Операция dump/restore не требуется для всех, кто переходит с версий 8.2.x, но вам может понадобится переиндексировать текстовые поля после обновления.
Использование
Подключение 1С:Предприятия
Запуск системы
После установки SELTA@Etersoft и лицензии на клиенте и подготовки сервера PostgreSQL (пошаговая инструкция) запустите 1С в режиме Конфигуратора и в параметрах SQL (Администрирование → Параметры базы данных SQL) укажите:
- сервер — DNS-имя или IP-адрес сервера PostgreSQL; если порт не 5432, укажите его через запятую:
srv,5433; - база данных — имя базы со схемой SELTA (например, созданной
selta-pg-setup create-db buh); - пользователь —
postgresили другой пользователь PostgreSQL с правами на базу; - пароль — пароль этого пользователя (для
postgresего задаёт selta-pg-setup init).
На сервере должна быть служебная база master: 1С подключается к ней первой.
Если 1С сообщает SELTA need update, схема SELTA в базе старше клиента: обновите базу (обновление).
Функция T-SQL HOST_NAME() возвращает имя компьютера клиента, как в MS SQL Server (с версии 1.1.6).
FAQ по SQL-версии программы 1С: Предприятие 7.7
Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7. Пошаговая инструкция
Если у Вас база данных на MS SQL Server не очень большого объема и её возможно выгрузить в zip-архив, вы можете воспользоваться вариантом 1 (перенос структуры и данных БД средствами 1С)
Если у Вас база данных на MS SQL Server очень большого объема и ее невозможно выгрузить в zip-архив, вы можете воспользоваться вариантом 2. (перенос структуры БД средствами 1c, и данных БД средствами SELTA(ковертор))
Вариант 1: Загрузка структуры и данных с помощью 1С (не работает с большими БД.)
1. Средствами 1С выгрузите базу (SELTA выключена, 1С подключена к базе MS SQL):
- (1С Конфигуратор → Администрирование → Выгрузить данные... (указать путь))
2. Включите SELTA (Центр управления SELTA → «Запустить»).
3. Создайте новую пустую базу со схемой SELTA (если уже есть — удалите и создайте заново):
- на сервере Linux:
selta-pg-setup create-db buh(подробнее); - или в Центре управления SELTA: Утилиты → Инициализация БД (параметры сервера PostgreSQL) → «Создать БД».
4. Добавьте информационную базу в 1С (не забудьте создать для неё пустой каталог):
- (1С окно запуска → Добавить (название и путь))
5. В Конфигураторе 1С настройте базу из пункта 4 на сервер PostgreSQL и базу из пункта 3 (параметры подключения):
- (1С Конфигуратор → Администрирование → Параметры базы данных SQL)
6. В базе из пункта 4 загрузите данные средствами 1С (из файла, выгруженного в пункте 1):
- (1С Конфигуратор → Администрирование → Загрузить данные... (указать путь))
7. Скопируйте каталоги пользователей из каталога информационной базы 1С (пункт 1) в каталог информационной базы 1С (пункт 4).
- Просмотр/изменение пути пользователей:
- (1С Конфигуратор → Администрирование → Пользователи → пользователь → вкладка Атрибуты → Рабочий каталог)
Вариант 2: Загрузка структуры с помощью 1с и данных с помощью SELTA
Суть процесса
1. Средствами 1С выгрузите пустую базу той же конфигурации, которую собираетесь использовать (SELTA выключена, 1С подключена к базе MS SQL или DBF):
- (1С Конфигуратор → Администрирование → Выгрузить данные... (указать путь))
2. В Центре управления SELTA выгрузите данные из вашей рабочей базы на MS SQL Server в CSV:
- (Утилиты → Конвертор → «MS SQL Server → CSV» (параметры базы и путь))
3. Включите SELTA (Центр управления SELTA → «Запустить»).
4. Создайте новую пустую базу со схемой SELTA (если уже есть — удалите и создайте заново):
- на сервере Linux:
selta-pg-setup create-db buh(подробнее); - или в Центре управления SELTA: Утилиты → Инициализация БД → «Создать БД».
5. Добавьте информационную базу в 1С (не забудьте создать для неё пустой каталог):
- (1С окно запуска → Добавить (название и путь))
6. В Конфигураторе 1С настройте базу из пункта 5 на сервер PostgreSQL и базу из пункта 4 (параметры подключения):
- (1С Конфигуратор → Администрирование → Параметры базы данных SQL)
7. В базе из пункта 5 загрузите средствами 1С выгрузку пустой базы из пункта 1 — так создаётся структура:
- (1С Конфигуратор → Администрирование → Загрузить данные... (указать путь))
8. В Центре управления SELTA загрузите CSV-дамп из пункта 2 в базу из пункта 4. Данные, которые уже есть в базе PostgreSQL, сотрутся, из CSV добавятся:
- (Утилиты → Конвертор → «CSV → PostgreSQL» (параметры базы и путь))
9. Скопируйте каталоги пользователей из каталога информационной базы 1С (пункт 1) в каталог информационной базы 1С (пункт 5).
- Просмотр/изменение пути пользователей:
- (1С Конфигуратор → Администрирование → Пользователи → пользователь → вкладка Атрибуты → Рабочий каталог)
, действия могут отличаться от описанных — см. перенос распределённой базы.
Инструкция по запуску и применению Selta@Etersoft через командную строку
Эта возможность появилась в SELTA@Etersoft с версии 1.0.4.
Основной запускаемый файл seltacmd.exe
1. Запуск без параметров.
- seltacmd.exe
- При запуске без параметров не происходит никаких действий. Только выводит сообщение с подсказкой о том, как получить полный help.
- Сообщение:
- -? This help
2. Запуск с параметром '-?'. Запуск help.
- seltacmd.exe -?
- При запуске с параметром '-?' не происходит никаких действий
- Выводит полный help.
- Сообщение:
seltacmd.exe [options]
-io Input or Output. y - Output (SQL -> csv),n - output (csv -> SQL)
-s MSSQL or ~PgSql. y - MSSQL, n - pSql
-h ip Address or name (SSID).
-n Name DB.
-u username DB.
-p Password.
-pt Backup patch on ' ' .
-? This help
-st Start or stop Selta. y - start, n-stop.
-d Upload dump.
Example:
convert
seltacmd.exe -io y -s n -h 192.168.0.1 -u admin -p mypassw -n mydb -pt C:\BACKUP\
or
start
seltacmd.exe -st y
or
upload dump
seltacmd.exe -d 'C:\BACKUP\mydump.sql' -h 192.168.0.1 -u admin -p mypassw -n mydb
ok
3. Запуск конвертации БД
- Для запуска конвертации необходимо ввести параметры
'-io' - Что надо конвертировать. 'y' - SQL -> csv, 'n' csv -> SQL '-s' - Какую СУБД использовать. 'y' - MSSQL, 'n' - pSql '-h' - ip адрес или имя SQL сервера, который будет учавствовать в конвертации '-n' - имя используемой БД '-u' - имя пользователя, обладающего необходимыми правами использования БД. '-p' - пароль пользователь '-pt' - Путь к бэкапу БД (обязательно в ' ')
- Например:
seltacmd.exe -io y -s n -h 192.168.0.1 -n dbname1 -u admin -p mypassw -pt 'C:\BACKUP\'
- Порядок указания параметров не важен.
- Если не введены все необходимые для конвертации данные, они будут спрошены. Их можно ввести.
- Например:
- enter Input or Output. y - Output (SQL -> csv),n - output (csv -> SQL):
- Но хотя бы один из параметров конвертации должен быть введен.
4. Запуск с параметром '-st'. Запуск/остановка selta
- Для запуска/остановки selta необходимо ввести параметры
- '-st' Что требуется сделать 'y'- запустить, 'n' остановить
- Например:
- seltacmd.exe -st y
Примечание:
- Действия 2,3,4 можно производить как по отдельности, так и вместе.
- Например:
- seltacmd.exe -? -io y -s n -h 192.168.0.1 -n dbname1 -u admin -p mypassw -pt 'C:\BACKUP\' -st y
5. Запуск с параметром '-d'. Загрузка mssql-дампа на сервер PostgreSQL
- Для загрузки sql-дампа на сервер, необходимо указать парамерт -d <путь к файлу>
- Например:
- seltacmd.exe -d 'msdump.sql' -h myserver -n databasename -u postgres -p pgpassword
Запуск/остановка SELTA при запуске программ
Чтобы одновременно работать с PostgreSQL через SELTA и с MS SQL Server, используйте пакетный файл ExecWSS.bat. Включить и выключить SELTA можно также из Центра управления или командой SeltaCmd.exe -st y / -st n (командная строка).
Описание ExecWSS.bat
- Вызов справки:
ExecWSS.bat /?
- Запуск SELTA:
ExecWSS.bat START
- Остановка SELTA:
ExecWSS.bat STOP
- Запуск SELTA с вызовом программы:
ExecWSS.bat START foo
- Остановка SELTA с вызовом программы:
ExecWSS.bat STOP foo
Пример использования ExecWSS.bat
Ярлык для запуска 1С с выключенной SELTA:
- Скопируйте ExecWSS.bat в каталог SELTA (
C:\Program Files\Selta\; для 32-битной SELTA на 64-битной Windows —C:\Program Files (x86)\Selta\). - Создайте ярлык на рабочем столе (правой кнопкой мыши → Создать → Ярлык).
- В поле «Укажите размещение объекта» введите
"C:\Program Files\Selta\ExecWSS.bat" STOP "C:\Program Files\1Cv77\BIN\1cv7s.exe"и нажмите «Далее». - Введите имя ярлыка, например «1С MS SQL», и нажмите «Готово».
- Смените значок: Свойства ярлыка → Сменить значок → файл
%ProgramFiles%\1Cv77\BIN\1cv7s.exe.
Теперь этот ярлык выключает SELTA и запускает 1С с базами MS SQL Server. Такой же ярлык с START вместо STOP запускает 1С с базами PostgreSQL.
Замечания
С помощью ExecWSS.bat можно запустить одновременно программу, работающую с MS SQL, и программу, работающую с PostgreSQL через SELTA. Учтите: SELTA должна быть в нужном состоянии в момент подключения программы к базе, а не в момент её запуска.
Для включения/выключения SELTA нужны права администратора — см. Права, требующиеся для запуска/остановки SELTA.
Принцип работы динамических курсоров SELTA.
: описывается принцип работы SELTA начиная с версии 1.0.6
Данный материал поможет Вам в тонкой настройки ваших БД, работающих через SELTA, тем самым улучшив скорость их работы.
Принцип работы
В настоящий момент в связи с отсутствием динамических курсоров в PostgreSQL в SELTA имитируется их работа в odbc драйвере.
При каждом вызове метода SQLFetch для динамического курсора в ODBC драйвере проверяется наличие изменений в таблице (или нескольких), на основе которой был создан курсор. Обновления курсора происходит, только если в таблице произошли изменения.
За фиксирование изменений в таблицах, отвечает таблица pg_table_changes*, содержащая в себе имя таблиц и количество изменений.
Изменения в таблицу pg_table_changes добавляют триггеры, имеющиеся у таблиц, созданных SELTA.
Замечание:
изменения не всех таблиц фиксируются в pg_table_changes, соответственно, не у всех таблиц есть триггеры. Если обновляется динамический курсор, основанный на таблице, изменения в которой не фиксируются, курсор пересоздаётся.
Почему надо настраивать
В связи с тем, что наличие у таблицы триггера замедляет работу с таблицей (изменения данных), целесообразно использовать триггеры не у всех таблиц.
Создастся или не создастся триггер на таблицу и соответствующая запись в pg_table_changes, зависит от того, соответствует ли имя таблицы маскам, хранящимся в таблице pg_trigger_table_mask**.
Настройка
1. Сделайте список таблиц, для которых нужно делать триггеры. Нужно делать триггеры для таблиц, для которых часто создаются и обновляются динамические курсоры, и редко меняется информация ( например справочники). И не нужно делать триггеры, если динамические курсоры не создаются и не обновляются(или это происходит редко).
2. Заполните на основе этого списка таблицу pg_trigger_table_mask.
3. Запустите функцию pg_create_delete_trigger_from_mask() ("SELECT pg_create_delete_trigger_from_mask()"), будут созданы нужные триггеры на таблицы, ненужные удалены, записи в таблице pg_table_changes обновятся, в соответствии с таблицей pg_trigger_table_mask,
Эти действия можно проделывать неограниченное число раз.
1с
Для таблиц 1с имеются стандартные маски они создадутся при создании, инициализации, или обновлении бд.
|
mask |
include |
equal |
|
sc% |
t |
f |
|
cj% |
t |
f |
|
_1sjourn |
t |
t |
|
1stoper |
t |
t |
|
_1soper |
t |
t |
|
_1scorent |
t |
t |
|
_1sentry |
t |
t |
|
_1saccs |
t |
t |
|
pg_% |
f |
f |
Для добавления вручную вы можете выполнить следующие запросы:
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('sc%', true, false);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('cj%', true, false);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1sjourn', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('1stoper', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1soper', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1scorent', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1sentry', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1saccs', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('_1sconst', true, true);
INSERT INTO pg_trigger_table_mask (mask, include, equal) VALUES ('pg_%', false, false);
Приложение
- Таблица pg_table_changes
- tabname Имя таблицы
- numberchanges Количество изменений
Таблица создается и модифицируется с помощью триггеров и функций, правка вручную не требуется.
- Таблица pg_trigger_table_mask
- mask маска
- include Входит в выборку (true делать для таблицы с такой маской триггер и запись в pg_table_changes, false -- не деклать)
- equal Соответствие (true - точное('='), false не точное ('LIKE'))
Заполните поле mask, include, equal в соответствии с тем, какие триггеры нужны для БД, а какие нет.
Для создания триггера для таблицы с именем table1, требуется написать имя таблицы в поле mask, указать, что ее следует включать в выборку -- в поле include = true, и точное соответствие equal = true
|
mask |
include |
equal |
|
table1 |
true |
true |
Для НЕ создания триггера для таблицы с именем table2, требуется написать имя таблицы в поле mask, указать, что её НЕ следует включать в выборку -- в поле include = false, и точное соответствие equal = true
|
mask |
include |
equal |
|
table2 |
false |
true |
Для создания триггера для всех таблиц с именами начинающимеся с tb, дожны написать имя маску в поле mask ('tb%'), указать, что её следует включать в выборку -- в поле include = true, и неточное соответствие equal = false
|
mask |
include |
equal |
|
tb% |
true |
false |
Аналогично этому можно создать маску для исключения группы таблиц из выборки.
Ссылки на сторонние дополнения
- Настройка курсоров на триггерах для 1C 7.7+Selta+Postgresql — Дополнение для удобной настройки триггеров от Djelf.
Необходимые действия при обновлении конфигурации 1с.
После обновления конфигурации 1С пересоздайте триггеры динамических курсоров: в Центре управления → Инициализация БД выберите базу и нажмите «Пересоздать курсоры».
То же можно сделать запросом к базе (через psql, pgAdmin или тест запросов SELTA с префиксом !!):
SELECT pg_create_delete_trigger_from_mask();
Подробнее — принцип работы динамических курсоров SELTA.
Центр управления SELTA@Etersoft
Назначение
Утилита Selta.exe облегчает настройку и обслуживание SELTA@Etersoft. Она показывает владельца лицензии, серийный номер, версию транслятора и баз данных, позволяет включать и выключать SELTA, добавлять лицензию, создавать, инициализировать и обновлять базы, переносить данные из MS SQL Server в PostgreSQL и обратно, проводить диагностику. У 32-битной и 64-битной SELTA свой Центр управления: каждый управляет своей разрядностью.
Включение/выключение SELTA, лицензию и создание баз выполняйте с правами администратора (подробнее).
Главное окно
При установке на рабочем столе и в меню Пуск создаются ярлыки для запуска Центра управления.
Главное окно содержит название и версию продукта, имя владельца и серийный номер. Внизу — текущее состояние транслятора и кнопка его включения/выключения.
Когда SELTA@Etersoft запущена, программы, обращающиеся к «SQL Server», работают с PostgreSQL через транслятор. Когда SELTA@Etersoft приостановлена, возвращается исходный драйвер, и программы работают с MS SQL Server.
Главное меню
- Инициализация баз данных — создание, удаление, инициализация, обновление и диагностика баз;
- Конвертор — перенос данных из MS SQL Server в PostgreSQL и обратно через CSV-дамп;
- Диагностика — проверка компонентов SELTA@Etersoft, включение/выключение журнала SELTA;
- Транслятор запросов — проверка трансляции SQL-запросов;
- Лицензия и документация — сведения о лицензии и справка;
- Загрузить дамп — загрузка дампа MS SQL в PostgreSQL.
Конвертор и Инициализация баз данных при выключенной SELTA недоступны.
Инициализация баз данных
Данная утилита предназначена для работы с базами данных. При выборе в меню главного окна Центра управления SELTA@Etersoft пункта: Утилиты - Инициализация БД, откроется диалоговое окно с приглашением ввести параметры подключения к СУБД:
Начиная с версии 1.0.7 можно указывать порт подключения. Для этого в поле Адрес сервера PostgreSQL после адреса через запятую введите порт(допускается через двоеточие).
После нажатия кнопки Соединение будет выведено либо сообщение об ошибке (например "неверный пароль") или, в случае успеха, откроется окно Инициализации Баз Данных:
В верхней части окна расположен список баз данных, которые доступны на данный момент. В данный список не включаются системные базы данных PostgreSQL - template0 и template1
Список будет пуст, если ни одной базы не было создано ранее.
Рядом с именами баз указаны их статусы:
- Не инициализировано - база не содержит элементов SELTA@Etersoft
- Ошибка - база содержит некоторые элементы SELTA@Etersoft, но они повреждены
- SELTA@Etersof <версия> - база данных содержит элементы SELTA@Etersoft указанной версии. Эта версия может не совпадать с текущей, установленной на клиенте.
Функциональность
Утилита Инициализации баз данных выполняет следующие функции:
Создание новых баз данных
Все созданные базы данных автоматически инициализируются элементами SELTA@Etersoft текущей версии. Если инициализация не удаётся, созданная база удаляется. Нельзя создать базы с именами template0 и template1. Имена баз сводятся к нижнему регистру; имя должно состоять из латинских букв и цифр (цифра не может быть первой), без пробелов.
Если на сервере нет служебной базы master, при подключении утилита предложит её создать — соглашайтесь: 1С подключается к ней первой. Если у сервера нет модуля mchar, утилита предупредит об этом: базы SELTA на таком сервере создать нельзя (варианты сервера).
На сервере Linux то же самое делает команда selta-pg-setup create-db (selta-pg-setup).
Инициализация баз данных
Доступно только для баз, помеченных как Не инициализировано. Для выбранной в списске базы данных будет произведена инициализация - в базе будут созданы типы данных, таблицы и функции, необходимые для работы SELTA@Etersoft. Если на каком-то шаге инициализации возникнет ошибка - все изменения будут откачены до исходного состояния базы. Если Вы по ошибке инициализировали не ту базу данных - можно сразу вызвать функцию Деинициализации, это не приведет к потере Ваших данных.
: не надо инициализировать БД postgres.
Удаление баз данных
Удалить можно любую базу данных, не зависимо от ее состояния. В этот момент ни один пользователь не должен быть подключен к удаляемой базе. Удаление базы приведет к полному уничтожению всех ее данных!
Переименование баз данных
Переименовать можно любую базу данных, не зависимо от ее состояния. В этот момент ни один пользователь не должен быть подключен к удаляемой базе.
Деинициализация
Удаление элементов SELTA@Etersoft из базы: будут удалены все функции, таблицы и типы данных, созданные ранее.
! При выполнении этой процедуры Вы можете потерять свои данные! При удалении типов данных удаляются так же все таблицы и функции, в которых они используются!!! Данную функцию безопасно использовать сразу после Инициализации базы, т.к. гарантированно не были созданы таблицы с использованием новых типов. Инициализация не изменяет уже существующие таблицы. Деинициализация доступна только для баз данных, проинициализированных текущей версией SELTA@Etersoft. Если вы хотите удалить элементы старых версий SELTA@Etersoft - сначало произведите процедуру Обновления до текущей версии.
Обновить SELTA
Обновление схемы SELTA@Etersoft в базе с предыдущей версии до текущей: добавляются новые элементы и удаляются устаревшие, данные 1С не меняются. Вся цепочка обновлений выполняется одной транзакцией: при ошибке база остаётся в прежней версии. Обновить можно только старую версию до текущей. Обновите так каждую базу 1С и базу master.
На сервере Linux все базы, включая master, обновляет одна команда selta-pg-setup upgrade. Порядок обновления клиентов и баз — Обновление SELTA с прошлой версии.
Пересоздать курсоры
Пересоздание курсоров SELTA подробнее об этом. Это действие требуется, например после обновления конфигурации 1с.
Диагностика
Доступна для любой базы данных. Данная процедура производит полную проверку базы на наличие компонентов SELTA@Etersoft и формирует отчет, который можно сохранить в файл и отправить в нашу службу технической поддержки, при возникновении проблем.
Тест запросов к базе данных
Тестирование запросов к базе данных SELTA подробнее об этом.
Конвертор
Утилита переносит данные из MS SQL Server в PostgreSQL и обратно. Переносятся только данные: структуру базы (таблицы, индексы, хранимые процедуры) создают отдельно — для 1С 7.7 Конфигуратором, см. Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7.
Перенос идёт через промежуточный CSV-дамп: сначала таблицы выгружаются из одной базы в текстовые файлы, затем загружаются в другую.
Главное окно утилиты:
- «PostgreSQL → CSV» — выгрузка данных из PostgreSQL в CSV-дамп;
- «MS SQL Server → CSV» — выгрузка данных из MS SQL Server в CSV-дамп;
- «CSV → PostgreSQL» — загрузка CSV-дампа в PostgreSQL;
- «CSV → MS SQL Server» — загрузка CSV-дампа в MS SQL Server (при выключенной SELTA).
Формат CSV-дампа:
- каждая таблица — в отдельном текстовом файле с именем таблицы;
- файл
_list_tables.infсодержит список всех таблиц; - все значения заключены в кавычки, кавычки внутри значений удваиваются;
- столбцы разделяются точкой с запятой
;, строки — переводом строки; - кодировка — кодировка Windows (ANSI; для русской Windows — CP1251).
Окно выгрузки из базы в CSV-дамп:
Укажите параметры подключения к базе и путь, куда сохранить дамп: там будет создан каталог с именем базы, в него лягут файлы дампа. «Выполнить» начинает копирование; для очень больших баз оно занимает до нескольких часов. В окне состояния видно, какая таблица копируется и сколько уже скопировано.
Окно загрузки CSV-дампа в базу:
Укажите параметры подключения к базе и путь к файлу _list_tables.inf дампа. Загрузка занимает больше времени, чем выгрузка.
Если в дампе таблиц больше, чем в базе (дамп делался с работающей базы 1С, а загружается в «чистую» конфигурацию), будет ошибка:
Чтобы её избежать, установите флажок «Пропускать таблицы, отсутствующие в базе».
При загрузке в PostgreSQL проверяется длина строк mvarchar(n): значение длиннее столбца даёт ошибку value too long for type mvarchar(n).
То же из командной строки — SeltaCmd.exe.
Диагностика
Утилита диагностики SELTA@Etersoft производит проверку элементов транслятора в системе: проверяется наличие и версии необходимых dll, а так же ключи реестра.
Для проведения диагностики нажмите кнопку Запуск, в текстовом поле Результат диагностики появится лог операции, который можно скопировать или сохранить в файл. При возникновении проблем с SELTA@Etersoft вы можете отправить этот лог диагностики в нашу службу технической поддержки, что может значительно упростить решение проблем.
В нижней части окна расположены элементы управления для "Журнала сообщений SELTA@Etersoft". Он представляет собой файл логов транслятора, который включает в себя все SQL запросы, которые поступили в транслятор, и его ответы - SQL запросы на языке pl/pgSQL. Данные логи могут быть очень полезны при выявлении ошибок работы транслятора.
Тест запросов
Данная утилита позволяет проверить, как работает сам транслятор запросов, какие SQL запросы поддерживаются, а какие нет, и, возможно, выявить ошибки трансляции.
В верхнее текстовое поле вводится SQL запрос для MS SQL Server, и после нажатия кнопки Тест в нижнем поле появляется запрос для PostgreSQL.
Если результат трансляции начинается со строк:
"ERROR: can not translate query: "
то это означает, что либо данных запрос транслятором не поддерживается, либо он содержит синтаксические ошибки.
Тест запросов к БД
Запросы можно проверить и прямо на базе, с выводом результатов: тест запросов к базе запускается из Инициализации баз данных.
Запрос вводится в верхнее поле («Введите текст SQL запроса...») в формате MS SQL Server. Результат трансляции можно посмотреть, установив флажок «Показывать результаты трансляции».
В нижнем поле («Результат выполнения запроса») — статус выполнения и возвращённые данные.
Чтобы выполнить запрос PostgreSQL без трансляции, начните его с !!.
Загрузить дамп
Данная утилита предназначена для загрузки mssql-дампа базы на сервер PostgreSQL. При выборе в меню главного окна Центра управления SELTA@Etersoft пункта: Утилиты – Загрузить дамп, откроется диалоговое окно с приглашением ввести параметры подключения к СУБД и путь к файлу дампа:
Также возможно указывать порт подключения. Для этого в поле "Имя сервера" после адреса через запятую введите порт(допускается через двоеточие).
После нажатия кнопки "Загрузить" произойдет трансляция и загрузка дампа на сервер.
Чтобы загрузить дамп на MS SQL Server, нужно остановить сельту (кнопка "Приостановить" на главном окне), и выполнить загрузку аналогично.
Лицензия и документация
В разделе Справка в меню главного окна имеются пункты О программе, Лицензия и Помощь. Они позволяют просмотреть информацию о продукте, его версии и владельце:
Удаление продукта
Удаление SELTA@Etersoft
В Windows SELTA@Etersoft удаляют обычным образом: Панель управления → Программы и компоненты (или Параметры → Приложения). Из командной строки:
msiexec /x selta.msi /qn
32-битная и 64-битная SELTA удаляются по отдельности.
При удалении возвращается исходный драйвер «SQL Server» и исходная odbcbcp.dll, так что программы снова работают с MS SQL Server.
В Linux под WINE@Etersoft удаление вызывается командой
wine uninstaller
или wine msiexec /x selta.msi.
Деинсталлятор не удаляет файл лицензии и журналы в каталоге SELTA@Etersoft: при установке новой версии лицензия остаётся на месте (обновление).
Базы данных на сервере удаление клиента не затрагивает — см. Очистка PostgreSQL от элементов SELTA.
Очистка PostgreSQL от элементов SELTA@Etersoft
Сначала выгрузите из базы все данные, представляющие ценность (pg_dump или выгрузка средствами 1С).
- Удалить схему SELTA из базы — в Центре управления → Инициализация БД выберите базу и нажмите «Деинициализация». Удаляются функции, таблицы и типы SELTA, а также типы
mchar/mvarchar, в том числе расширение mchar, если оно было создано черезCREATE EXTENSION. Вместе с типами удаляются и таблицы 1С, в которых они используются, поэтому деинициализация безопасна только для пустой базы. - Удалить базу целиком — «Удаление БД» в той же утилите или на сервере:
# su - postgres -c "dropdb buh"
Служебную базу master удаляют так же, когда SELTA на сервере больше не нужна. Пакеты selta-server и postgresql-mchar на сервере Linux удаляются обычными средствами системы (epm remove selta-server); базы при этом остаются.
Разработка
Как тестировать
В первую очередь необходимо проверять, прогружаются (сохраняются) ли MD файлы конфигурации:
при этом в базе данных создаются все таблицы, индексы и хранимые процедуры, в некоторые таблицы заносятся первые данные, т.е. создаётся структура базы данных.
Если MD файл не прогружается (1С вылетает с ошибкой), то вы можете переслать файл конфигурации нам, с указанием названия конфигурации, и наши программисты добавят в Транслятор необходимую новую функциональность. Этот процесс обычно занимает не более одного дня. Внесённые исправления повлияют и на работоспособность других конфигураций, т.к. они добавляют транслятору универсальность, а не решают некоторые частности.
Далее следует проверить, загружается ли 1С с только что созданной конфигурацией в монопольном и обычном режимах: при этом идет проверка целостности базы, на некоторых конфигурациях инициализируются константы и прочие данные.
Третий этап - проверка работы различных элементов системы: формирование отчётов, проведение документов и т.д. Эти операции следует делать на заполненной данными базе. О том, как перенести данные из MS SQL Server в PostgreSQL смотрите ниже в разделе *установка*
Варианты ошибок
При работе 1С через транслятор SELTA@Etersoft может возникнуть несколько типов ошибок:
- Самые простые — транслятор встречает конструкцию, которую не умеет распознать. Запрос не выполняется, ODBC-драйвер возвращает ошибку, 1С показывает её и, как правило, завершает работу. Такие ошибки решаются быстрее всего добавлением правил в транслятор.
- Нужно выяснить, какой запрос не поддерживается; проще всего — по журналу SELTA.
- Более сложные — при вызове хранимых процедур: ошибки, которые база не замечает при создании процедуры, но которые проявляются при определённых параметрах. Драйвер отправляет запрос, PostgreSQL возвращает ошибку, 1С её показывает. После исправления транслятора базу приходится пересоздавать: хранимые процедуры создаются только при загрузке MD-файла конфигурации.
- Нужно выяснить, какая процедура выполнялась и с какими параметрами; проще всего — по журналу PostgreSQL.
- Самые сложные — ни драйвер, ни база ошибок не возвращают, но запросы или процедуры содержат логические ошибки, и 1С работает неправильно (например, отчёты пустые, хотя должны быть заполнены). Их находят, выполняя одни и те же действия с MS SQL Server и PostgreSQL и сравнивая результаты. Обычно они возникают из-за тонкостей различия MS SQL Server и PostgreSQL.
- Начните с трассировки ODBC: она должна совпадать для обеих баз. Расхождение в цепочке ODBC-вызовов указывает на ошибку, с этого места включайте остальные журналы.
Для разработчиков в репозитории selta есть автоматические проверки (каталог tests/): проверки схемы SELTA на сервере (sql-probe, sql-lifecycle, LIKE со сверкой с эталоном SQL Server 2022), тесты драйвера через настоящий ODBC и TCP (installed-*); для серверного пакета — контейнерный тест tests/container-test.sh в selta-server.
|
План ниже выполнен: полное описание собрано в SELTA/Документация (общее описание и устройство, установка SELTA и PostgreSQL, перенос баз, специфика 1С, лицензирование). |
План документации
Общее описание
Установка SELTA
Установка PostgreSQL
Технические подробности
Поддерживаемые приложения
Что не работает
Планы
Конвертация базы
Специфика для 1С
Лицензирование
Описание PostgreSQL
Описание языка
|
Историческая страница: план доработки ODBC API в начале разработки. Номера строк относятся к старому psqlodbc. Сейчас транслятор вызывается из |
Функции ODBC API
Полный список функций перечислен в
http://www.intuit.ru/department/database/cdba2/2/
Здесь перечислены функции драйвера ODBC PostgreSQL, которые необходимо реализовать для поддержки 1С 7.7.
Соединение с источником данных
Все функции реализованы
Получение информации о драйверах и об источниках данных
Все функции реализованы
Изменение атрибутов драйверов и получение информации об атрибутах драйверов
Все функции реализованы
Изменение полей дескриптора и получение информации о полях дескриптора
Все функции реализованы
Подготовка SQL-запросов
SQLPrepare (odbcapi.c 639) - Компилирует SQL-оператор для последующего выполнения, требуется встроить транслятор
SQLBindParameter (odbcapi.c 1621) - Связывает буфер с параметрами, используемыми в SQL-операторе, возможно потребуется менять
Остальные функции реализованы полностью
Выполнение запросов
SQLExecDirect (odbcapi.c 331) - Выполняет SQL-оператор, требуется встроить транслятор
SQLNativeSql (odbcapi.c 1254) - Возвращает текст SQL-оператора, преобразованного конкретным драйвером, но не выполняет его, надо с этим подумать, что возвращать
SQLDescribeParam (odbcapi.c 1081) - Возвращает описание параметров, используемых в откомпилированном SQL-операторе, возможно понадобится менять
SQLNumParams (odbcapi.c 1275) - Возвращает число параметров в откомпилированном SQL-операторе, возможно понадобится менять
Остальные функции реализованы
Извлечение результатов и информации о них
SQLColAttribute (odbcapi30.c 115)- "Возвращает информацию о столбце результирующего набора. В отличие от функции SQLColAttribute, позволяет получить более обширную информацию о столбце, включая информацию, определяемую конкретным драйвером", скорее всего придется изменять, есть так же функция SQLColAttributes, надо разобраться
Остальные функции реализованы
Функции каталога
Все функции реализованы
Освобождение оператора
Все функции реализованы
Освобождение соединения
Все функции реализованы
|
Историческая страница: сравнение СУБД при выборе в 2007 году (версии того времени). Выбран PostgreSQL; сейчас SELTA работает с PostgreSQL 10–18 — SELTA/PostgreSQL. |
Выбор СУБД для использования в транслятора
Для реализации SELTA@Etersoft был выбран PostgreSQL.
Всю сравнительную характеристику баз можно посмотреть на сайте:
ttp://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems
MS SQL Server
Версии:
6.50.201 Original SQL Server 6.5 release
6.50.213 SQL Server 6.5 with Service Pack 1
6.50.240 SQL Server 6.5 with Service Pack 2
6.50.258 SQL Server 6.5 with Service Pack 3
6.50.281 SQL Server 6.5 with Service Pack 4
6.50.415 SQL Server 6.5 with Service Pack 5
6.50.416 SQL Server 6.5 with Service Pack 5a
7.00.842 SQL Server 7.0 with Service Pack 2
SQL Server 2000 (8.0) - основная для 1С 7.7
SQL Server 2005 (9.0)
Язык хранимых функций: T-SQL
Sybase
Sybase Adaptive Server Enterprise (ASE)
Стоимость сервера - $4200
Стоимость одного коннекта к серверу $1300
Варианты баз данных
Все базы должны иметь дистрибутивы для ОС Linux и желательно Windows, максимально поддерживать функциональность MS SQL, иметь высокое быстродействие и расширяемость.
Для каждой из приведённых баз данных есть доступ к исходным кодам как самих баз, так и к ODBC драйверам.
Последняя версия 8.2.3
Процедурные языки: PL/pgSQL, pl/Tcl, Pl/Perl и pl/Python. Кроме них, существует поддержка PHP, Java, Ruby, R, shell.
Документация: http://www.linuxshare.ru/postgresql/manual/index.html
Лицензия: BSD ( http://cylib.iit.nau.edu.ua/Mirrors/ask.km.ru/unics/bsd.html )
Достоинства:
Эту базу выбрала компания 1С
Недостатки:
Не поддерживаются Materialized view, но могут быть эмулированы на процедурных языках
Слабый графический интерфейс
Firebird
Последняя версия 2.0.1
Процедурные языки: PSQL
Документация: http://www.firebirdsql.org/index.php?op=doc
Лицензия: initial developer's public license
Достоинства:
База считается наиболее схожей с MS SQL
Недостатки:
Согласно лицензии, любые изменения исходного кода базы должны быть так же открытыми
Не поддерживаются Temporary table, Materialized view (only common views)
Последняя версия 5.2.7
Процедурный язык: есть
Документация: http://linux.yaroslavl.ru/docs/www/mysql/man/manual.ru_toc.html
Лицензия: GPL
Достоинства:
Лёгкая, быстрая
Недостатки:
Считается, что она меньше всего соответствует стандартам SQL
Не поддерживаются Materialized view, но могут быть эмулированы на процедурных языках
IBM DB2
Требует изучения.
|
Историческая страница: планы начала разработки. Реализован вариант «транслятор в виде ODBC-драйвера»: изменённый драйвер psqlodbc и транслятор |
Разработка транслятора
Транслятор в виде прокси-сервера
Планируется реализовать транслятор в виде прокси-сервера протокола TDS,
чтобы обеспечить работу приложений, не использующих ODBC.
Транслятор в виде ODBC-драйвера
Основная проблема создания транслятора - преобразование функций из используемого в MS SQL языка TSQL в язык выбранной базы данных.
Для этого необходимо на уровне ODBC драйвера преобразовывать SQL запросы, корректировать ответы, а также дописать недостающие функции в самой базе (в виде подключаемого модуля).
Запросы для 1С 7.7
Большая часть запросов, посылаемых 1С к серверу, хранится в файле BkEnd.dll, некоторые хранимые процедуры для работы с таблицами базы данных хранятся в файле 1Cv7.DDS (в каталоге программы). Файлы, которые хранятся в каталоге с базой: 1Cv7.MD - файл с метаданными, в нем хранится все то что можно посмотреть в Конфигураторе, 1Cv7.DDS - файл описание метаданных, в этом файле хранится описание таблиц базы данных MS SQL Server, а также хранимые процедуры, 1Cv7.DBA - файл с описанием настроек доступа к MS SQL Server-у, имя сервера, логин и пароль, usrdef\users.usr - файл описания пользователей 1С.
Что понадобится сделать
- Реализация системных хранимых функций, которые есть в MS SQL (выдают системную информацию о базе)
- Системные таблицы: доступ к ним осуществляется из системных функций
- Расширенные хранимые функции MS SQL (поставляются с дистрибутивом в отдельных dll)
- Типы данных (bigint, sql_variant, table и т.д.)
- Реализация операторов языка T-SQL: предварительный транслятор кода, который пользователь посылает на сервер через ODBC (в том числе запросы на создание хранимых функций) + реализация дополнительных функций (которых нет в заменяющей базе) в качестве дополнительных модулей.
- Если с приложением поставляются отдельные dll для MS SQL, в которых хранятся расширенные хранимые функции, то их придётся банально переписывать под заменяющую базу, либо эмулировать API, под который они написаны. В 1С этот механизм не используется.
Основные проблемы скорее всего возникнут с реализацией блокировок.
Транслятор в виде клиентской библиотеки
Транслятор в виде клиентской библиотеки, заменяющей оригинальную, вряд ли будет реализован.
Изменение версии SELTA
Версия SELTA — это и версия клиента (MSI), и версия схемы SELTA в базах: SELTA 1.1.6 — схема 116. Клиент работает только со схемой своей версии (обновление). Новую версию поднимают, когда меняется SQL схемы или её поведение. Если выпуск уже опубликован с этой схемой, менять её можно только в новой версии. Если меняются только программы (драйвер, транслятор, GUI), а схема прежняя, поднимают ревизию.
Подробные проверенные команды сборки — в BUILDING.md репозитория selta.
Новая версия (новая схема)
На примере перехода 1.1.5 → 1.1.6 (коммит «Bump to SELTA 1.1.6»):
selta/version.h— единственный источник версии:#define CURRENT_VERSION 116#define CURRENT_VERSION_NUM 1,1,6,0#define CURRENT_VERSION_STR "SELTA@Etersoft v.1.1.6"#define CURRENT_REVISION 1— ревизия сбрасывается на 1.RELEASEVER YESдаёт именаselta-1.1.6-eter1.msi, иначе к имени добавляется дата. Версию MSI и ресурсовMakefile.verберёт отсюда.
SharedCode/CheckSeltaVer.h— вALL_VERSION[]добавить предыдущую версию передCURRENT_VERSION:static const int ALL_VERSION[] = {90, 91, ..., 114, 115, CURRENT_VERSION, 0};- По этому списку Центр управления строит цепочку файлов обновления.
gui/InitDB/Scripts/8308/— все скрипты схемы лежат в одном каталоге8308и начинаются с8308. Каталоги0и8300больше не используются.- В
8308selta_install.sqlзаписать новую версию:insert into pg_selta_version values (116, (select case when current_database() = 'master' then 'master SELTA@ 1.1.6' else 'SELTA@Etersoft v.1.1.6' end));
- Добавить
8308selta_up_115_to_116.sql:- в начале — проверка, что база имеет схему 115 или 116 (функция-guard в
pg_temp, которая бросает исключение для другой версии); - изменения, те же, что в
8308selta_install.sql; - в конце —
UPDATE public.pg_selta_version SET num = 116, ver = ... WHERE ver LIKE '%SELTA%'; - без своих
BEGIN/COMMIT: и Центр управления, иselta-pg-setup upgradeвыполняют всю цепочку в одной транзакции.
- в начале — проверка, что база имеет схему 115 или 116 (функция-guard в
- Если удаляемые объекты изменились — поправить
8308selta_uninstall.sql. - Списки объектов для диагностики (
gui/InitDB/selta_install.h,mchar.h) сборка GUI генерирует сама из8308selta_install.sqlи8308mchar.sqlскриптомgui/InitDB/create_list.sh.
- В
msi/idt/File.idtиmsi/idtENG/File.idt(одинаково в обоих, файлы в CP1251 и с CRLF):- добавить строку нового файла, короткое имя 8.3 должно быть уникальным:
8308selta_up_115_to_116.sql SCRIPTS8308 sl115116.sql|8308selta_up_115_to_116.sql 1000 16896 218
- последнее поле — номер в CAB. Все SQL-файлы
8308упакованы вscripts8308.cabпо алфавиту, поэтому номера должны идти в алфавитном порядке имён: новый файл занимает своё место, номера следующих строк увеличиваются на 1; - размер (
1000) при сборке подставляетmsi/prepare-idt.py.
- добавить строку нового файла, короткое имя 8.3 должно быть уникальным:
msi/idt/Media.idtиmsi/idtENG/Media.idt— поле LastSequence строки#scripts8308.cabравно последнему номеру изFile.idt(было 221, стало 222).- Тесты
tests/sql-probe.sql,tests/sql-like.sql,tests/sql-like-reference.sql,tests/mssql-like-reference.pyпроверяют номер схемы — заменить на новый. - Документация: раздел выпуска в
BUILDING.md, новости на вики.
Makefile не отслеживает зависимости от заголовков: после правки selta/version.h или SharedCode/CheckSeltaVer.h собирайте с нуля (make clean или новое дерево из git archive). Иначе драйвер со старой CURRENT_VERSION ответит на запросы SELTA not success, а selta.dll понесёт старую строку версии.
Новая ревизия (схема та же)
Только selta/version.h: увеличить CURRENT_REVISION и четвёртое число CURRENT_VERSION_NUM (версию файлов), например 1,1,6,2 и CURRENT_REVISION 2 для 1.1.6-eter2. Скрипты и IDT не меняются. Код продукта MSI у ревизий одинаковый, поэтому новую ревизию ставят после удаления старой.
Сборка выпуска
- 32-битная:
make TOOLCHAIN=mingw CHECK_LICENSE=1 binaries, затем упаковкаmake -C msiпод 32-битным Wine —selta-<версия>-eter<ревизия>.msiиseltaEng-...msi. - 64-битная: то же с
MINGW=x86_64-w64-mingw32, в отдельном дереве —selta-...x64.msiсо своими кодами продукта и компонентов (их выводитprepare-idt.py). CHECK_LICENSE=0— тестовая сборка без проверки лицензии с суффиксом-test; в выдачу заказов её не кладут.- Выпуск выкладывается в
pvt/Etersoft/SELTA@Etersoft/<версия>/Windows/какselta-<версия>-eter<ревизия>.x86.msiи.x64.msi, ссылкиselta.msi,seltaEng.msi,selta64.msi,seltaEng64.msiпереводятся на них.
Серверный пакет selta-server
Схема SELTA для Linux поставляется пакетом selta-server (selta-pg-setup). После новой версии SELTA:
- скопировать скрипты из репозитория selta:
./update-sql.sh ../selta <коммит или тег>— обновятсяsql/,sql/VERSION(номер схемы) иsql/SOURCE(коммит); - поднять
Versionвselta-server.specдо версии SELTA; - проверить в контейнерах:
tests/container-test.sh(ALT — пакетом, другие дистрибутивы — деревом исходников с postgresql-mchar), в том числе обновление с предыдущей схемы.
Обновления и новости
Исправления, намеченные к версии 1.1.1
08.11.2026: SELTA@Etersoft 1.1.6-eter2, 64-битная версия
- Исправлена ошибка драйвера в 1.1.6-eter1: при подключении освобождался неинициализированный указатель, что могло приводить к сбою (#17315).
- Впервые выпущена 64-битная клиентская часть
selta64.msiдля 64-битных программ; для 1С:Предприятия 7.7 по-прежнему нужна 32-битнаяselta.msi. Обе ставятся на один компьютер (подробнее). - Перед установкой eter2 удалите eter1. Схема в базах не меняется.
Сервер
- Пакет selta-server со скриптом selta-pg-setup: настраивает PostgreSQL, создаёт базы со схемой SELTA, обновляет схему. Собирается для всех веток ALT (PostgreSQL для 1С 11–18) и для других дистрибутивов.
- Пакет postgresql-mchar: модуль mchar для обычного PostgreSQL 12–18, в том числе индексы для LIKE. SELTA работает с PostgreSQL дистрибутива (варианты сервера).
07.11.2026: SELTA@Etersoft 1.1.6
HOST_NAME()возвращает имя компьютера клиента, как в MS SQL Server: драйвер передаёт его серверу при подключении (схема 116).- Удаление элементов SELTA из базы («Деинициализация») удаляет и
sp_dropmessage, и расширение mchar. - Поддержаны базы, где mchar создан через
CREATE EXTENSION mchar.
07.11.2026: SELTA@Etersoft 1.1.5
- Больше не нужен модуль сервера
seltapgaddon:host_name()написана на SQL. Подходят готовые пакеты PostgreSQL для 1С без наших патчей (схема 115). - Центр управления при подключении проверяет наличие модуля mchar на сервере.
06.11.2026: SELTA@Etersoft 1.1.4
- Поддержка PostgreSQL 10–18 в редакции для 1С: определение версии сервера, системный каталог PostgreSQL 11–18 в схеме и драйвере (схема 114).
- Вход по паролю SCRAM-SHA-256.
- Исправлена кнопка «Инициализировать» в Центре управления (не работала с 1.1.2) и ложные сообщения диагностики.
06.11.2026: SELTA@Etersoft 1.1.1–1.1.3
- LIKE переведён на правила MS SQL Server и сверен с SQL Server 2022: хвостовые пробелы,
char(n),[...]и[^...], обратные диапазоны,ESCAPE,LIKE NULL, «ё» в[а-я](схемы 111–113). - LIKE работает без патча ядра PostgreSQL.
15.06.2011: SELTA@Etersoft 1.1.0
Исправления и дополнения
- Полностью переписан транслятор запросов SELTA. Новый транслятор запросов основывается на GOLD parser. Это позволяет еще быстрее добавлять новые типы запросов. Транслятор стал еще более стабильным. (#4210)
- Добавлено большое количество новых запросов включая WITH ROLLUP и WITH CUBE (#6161)
- Добавлена возможность загрузки БД в postgres прямо из дампа MS SQL сервера. (#2196)
- Добавлена поддержка Postgres 9.0 (#2196)
Полный список исправлений к версии 1.1.0
5.10.2010: SELTA@Etersoft 1.0.8
Исправления и дополнения
- исправлена ошибка "SQLState 01001, The content was changedbefore updation" (#2544)
- поддержка версии PostgreSQL 8.4.* Внимание! Ознакомьтесь с Действиями при обновлении Postgre (#4458 #5330)
- Добавлена поддержка новых запросов (#4031,#5192, 4727)
- Полностью протестирована работа SELTA с Windows 7, Windows 2008 (x86, x64) (#2360, #4744, #5393)
- Исправлена проблема вылета из 1С при формировании отчетов по выплате заработной платы (#4198)
- Исправлена проблема при передаче NUMERIC (1с++) (#4387)
- Исправлена ошибка при передаче из CSV спец. символов (#5124)
- Улучшена GUI SELTA (#4248, #5359)
Полный список исправлений к версии 1.0.8
23.06.2009: SELTA@Etersoft 1.0.7
Исправления и дополнения
- Реализован новый принцип работы блокировок, делающий возможным просмотр данных, во время проведения документов(#3785)
- Устранена ошибка, возникающая при работе с динамическими курсорами ("cursor "dyn_cur_ХХХХХХ" already exists" и "cursor "dyn_cur_ХХХХХХ" not exists") (#3785)
- Добавлена возможнось выбора порта при подключении к Postgres (#3912)
- Исправлены ошибки при работе в Windows 2000.
Версия 1.0.7. работает только с версиями PostgreSQL не ранее 8.3.5 . Для перехода с версий 8.2.* внимательно ознакомьтесь с инструкцией по переходу.
Полный список исправлений к версии 1.0.7
После обновления требуется запустить 1с в монопольном режиме.
01.04.2009: SELTA@Etersoft 1.0.6
Исправления и дополнения
- Новый принцип работы динамических курсоров, что позволяет увеличить быстродействие при скроллинге больших журналов и уменьшить нагрузку на PostgreSQL при этом*.(#3516) Рекомендуем прочитать об этом подробнее
- Исправлена ошибка с зависанием при отмене проводки либо перепроводки в 1с ТиС.(#3459)
- Исправлена ошибка вызывающая падение при расчете зарплаты , и при загрузке обновлений (УРБД) в PostgreSQL 9.3.X (#3596).
- Добавлены ранее не транслируемые запросы, вызывающие падение при загрузке обновлений (УРБД) (#3719 #3677)
- Исправлена ошибка, вызывающая падение SELTA при наличии нескольких пользователей в PostgreSQL .(#2829)
- Добавлена поддержка MS Windows Vista
- Реализован механизм одновременного использования SELTA@Etersoft + PostgreSQL и MS SQL. (Подробнее читайте Запуск/остановка SELTA при запуске программ)
Полный список исправлений к версии 1.0.6
26.12.2008: SELTA@Etersoft 1.0.5
Исправления и дополнения
- поддержка версии PostgreSQL 8.3.* Внимание! Ознакомьтесь с Действиями при обновлении Postgre
- Поддержка windows 2000
- Возможность работы с использованием пользовательского реестра.
- Решение проблемы с дублирующимися ключами при изменении времени документов
- Решение проблемы с дублирующимися ключами при загрузки в непустую бд, либо создании документов в конфигураторе.
Полный список исправлений к версии 1.0.5
17.11.2008: SELTA@Etersoft 1.0.4
Исправления и дополнения
- поддержка версии PostgreSQL 8.2.9 и 8.2.11
- выявлена и исправлена причина зависания процессов PostgreSQL (#1805)
- исправлен откат транзакции при работе с динамическими курсорами(#1605, #2231)
- добавлена консоль SQL-запросов (#1014)
- добавлена возможность работы с SELTA@Etersoft из командной строки(#2427)
- добавлена поддержка новых запросов в транслятор
Полный список исправлений к версии 1.0.4
Архив изменений для старых версий...
Часто задаваемые вопросы
- Q: Что делать в случае появления ошибки SQL при проведении некоторых документов, формировании отчётов?
- A: Скорее всего SELTA@Etersoft не может транслировать запрос. Создайте логи и отправьте их разработчикам.
- Q: Что делать в случае появления ошибки при загрузке данных в 1С:Конфигураторе (Администрирование → Загрузить данные)?
- A: Скорее всего ошибка в загружаемых данных. Выполните тестирование и исправление исходной базы. Если не помогает, создайте логи и отправьте их разработчикам.
- Q: 1С сообщает
value too long for type mvarchar(14). - A: Значение длиннее столбца. Старые сборки Postgre@Etersoft 9.2 не проверяли длину mvarchar при загрузке, современный PostgreSQL для 1С и postgresql-mchar проверяют. Исправьте исходные данные или структуру в конфигурации.
- Q: В Конфигураторе 1С 7.7 при сохранении конфигурации появляется сообщение вида
NOTICE: CREATE TABLE will create implicit sequence ... WARNING: nonstandard use of \\ in a string literal at character 31 NOTICE: function __orderselta_trigfunc_computed() does not exist, skipping
и операция прерывается.
- A: 1С считает ошибкой любое сообщение сервера. Сервер настроен не полностью: нужны
client_min_messages = error,standard_conforming_strings = off,escape_string_warning = off. На Linux выполнитеselta-pg-setup init(подробнее), на Windows выставьте их вpostgresql.conf(настройки сервера).
- Q: 1С сообщает
SELTA need updateилиSELTA not success. - A: Версия схемы SELTA в базе не совпадает с версией клиента:
need update— база старше, обновите её (selta-pg-setup upgradeили «Обновить SELTA» в Центре управления);not success— база новее, обновите SELTA на клиенте. См. обновление.
- Q: Драйвер не загружается, Центр управления говорит, что лицензия ещё не действует или истекла.
- A: Проверьте
DATE_STARTиDATE_ENDвselta.lic. Срок сверяется по дате UTC, поэтому лицензия, выданная сегодня до 03:00 по Москве, может начать действовать только после 03:00. Лицензии выдаются с началом на день раньше даты заказа.
- Q: Какую SELTA ставить на 64-битную Windows?
- A: Для 1С:Предприятия 7.7 — 32-битную
selta.msi: 1С 7.7 бывает только 32-битной.selta64.msiнужна только 64-битным программам, которые открывают базу 1С через «SQL Server». Обе можно поставить вместе. Подробнее.
- Q: Установщик не ставит новую ревизию SELTA поверх старой.
- A: Удалите предыдущую версию или ревизию и установите новую. Лицензия при удалении остаётся.
- Q: Нужен ли сервер PostgreSQL от Etersoft?
- A: Нет. С версии 1.1.4 подходит PostgreSQL 10+ в редакции для 1С или обычный PostgreSQL 12+ с модулем postgresql-mchar. Варианты сервера.
- Q: Какие требуется дать права для запуска/остановки SELTA?
- A: См. Права, требующиеся для запуска/остановки SELTA.
- Q: После приостановки/удаления SELTA@Etersoft не запускается MS Enterprise Manager, ошибка подключения 126.
- A: SELTA была удалена или приостановлена с ошибкой. Запустите файл MsSqlRepair.reg.
- Q: При установке на 64-битную Windows Server появляется ошибка «не могу найти файл odbcbcp.dll», и установка отменяется.
- A: Не хватает прав. Нужны права на запись в системный каталог и в раздел реестра
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\SQL Server(для 64-битной SELTA —HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\SQL Server).
- Q: Будет ли транслятор поддерживать 1С:Предприятие 8?
- A: Нет: 1С:Предприятие 8 само работает с PostgreSQL для 1С.
- Q: Планируется ли расширение списка поддерживаемых приложений?
- A: Мы готовы рассмотреть поддержку других программ для MS SQL Server — пишите на selta@etersoft.ru.
- Q: У меня очищается список документов после копирования/изменения после обновления конфигурации.
- A: Необходимые действия при обновлении конфигурации 1С.
Взаимодействие с разработчиками и коллегами
Пишите разработчикам и в службу поддержки по адресу: selta@etersoft.ru
Подписка на публичный список рассылки по SELTA@Etersoft:

