SELTA/Документация

Материал из Etersoft wiki
Перейти к: навигация, поиск


SELTA@Etersoft - это программный продукт, выполняющий трансляцию SQL-запросов из диалекта T-SQL (базы данных MS SQL Server) в pl/pgSQL (база данных PostgreSQL). Он позволяет программам, предназначенным для работы только с MS SQL Server, работать со свободной СУБД PostgreSQL.

Создать универсальный транслятор запросов практически невозможно, поэтому данный продукт предназначен только для некоторых приложений, в частности 1С:Предприятие 7.7.

SELTA@Etersoft работает как под ОС Windows, так и Linux (при помощи WINE@Etersoft SQL).


Содержание


Общее


Поддерживаемые программы

  • 1С:Предприятие 7.7 SQL
* конфигурация Бухгалтерия
* конфигурация Зарплата
* конфигурация Торговля и Склад
* конфигурация Производство и Услуги
* расширение 1С++


Планируется поддерживать

* САМО-Тур
* WinСмета SQL
* MonitorCRM
* КМ-Школа
* MarkSQL


О 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:

Консоль MS SQL Server

Установка и настройка

Получение дистрибутива SELTA@Etersoft

Для установки SELTA@Etersoft на клиентских машинах Вам потребуется дистрибутив (файл selta.msi) требующийся версии из

О текущих вышедших версиях, а так же о релиз кадидатах вы можете узнать в разделе Обновления и новости


Также Вам потребуется файл лицензии, подробнее о его получении смотрите в разделе Получение лицензии


После загрузки воспользуйтесь инструкцией по установке.


SELTA@Etersoft - Пошаговая инструкция по установке и настройке

1. Установите клиентскую часть SELTA@Etersoft, выполнив инструкцию Установка SELTA@Etersoft

2. Добавьте в рабочий каталог транслятора файл лицензии

3. Произведите на сервере Установку PostgreSQL

4. Создайте базы данных для работы, согласно Инструкции по настройке

5. Перенесите данные 1C:Предприятия 7.7 в базу /PostgreSQL, выполнив инструкцию: Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7 или Перенос данных из DBF в PostgreSQL для 1С 7.7.

Установка SELTA@Etersoft

SELTA@Etersoft может быть установлена на Windows 2000 и выше, либо на WINE@Etersoft SQL 1.0 и выше.

Установка продукта очень проста: на каждой клиентской машине достаточно запустить установочный файл selta.msi и следовать дальнейшим инструкциям.

В WINE@Etersoft установка выполняется командой

$ wine start selta.msi

Особенности установки на Vista


selta_setup.png


Перед установкой рекомендуется закрыть все приложения, которые используют ODBC-драйверы.

Внимательно ознакомьтесь с Лицензионным соглашением:


selta_setup_license.png


Укажите путь установки SELTA@Etersoft:


selta_setup_path.png


После этого установочная программа скопирует файлы транслятора в указанный каталог и добавит необходимую информацию в реестр.


selta_setup_end.png


На этом установка завершена.


Обратите внимание

Для одновременного использования SELTA@Etersoft и MS SQL для разных приложений имеется специальный скрипт-обертка(подробнее читайте Запуск/остановка SELTA при запуске программ).

Также возможно временное отключение SELTA@Etersoft - для переключения используйте Центр управления SELTA@Etersoft.


При проблемах установки selta.msi

Если при установке происходит ошибка, запустите установку командой

winexp start selta.msi

Если и в этом случае происходит ошибка, то запустите установку командой

msiexec /i selta.msi /l*v C:\selta.log

и пришлите в службу поддержки файл selta.log


Файл лицензии SELTA@Etersoft

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


Файл лицензии можно получить на вашей персональной странице продукта после приобретения.


Доступ к странице Вы можете получить двумя способами:

  1. При заказе SELTA@Etersoft на сайте http://sales.etersoft.ru страница создаётся после оплаты продукта, информация о доступе к ней высылается на Вашу электронную почту;
  1. При покупке коробочной версии через наших партнеров потребуется зарегистрироваться на нашем сайте, указав серийный номер продукта, который можно найти в лицензионном соглашении, поставляемом в коробке вместе с продуктом.


Для того, чтобы добавить файл лицензии в SELTA@Etersoft, запустите Центр управления SELTA@Etersoft (продукт должен быть предварительно установлен на клиентской машине). Если ни один файл лицензии не был добавлен в систему ранее, программа при запуске попросит это сделать:


selta_add_license.png


Если у Вас уже есть файл с лицензией, укажите к нему путь:


selta_select_license.png


Если указанный файл пройдет проверку подлинности, он будет скопирован в рабочий каталог SELTA@Etersoft


selta_license_succ.png


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


Postgre@Etersoft

Postgre@Etersoft — это специальные сборки свободной реляционной СУБД PostgreSQL, в которые включены все изменения, необходимые для работы SELTA@Etersoft и серверов 1С:Предприятие 8.1 и 1С:Предприятие 8.2.

Об изменениях по отношению к оригинальной версии PostgreSQL смотрите в разделе Изменения, внесённые в PostgreSQL.

Вы можете приобрести поддержку Postgre@Etersoft на сайте продаж.

Поддерживаемые платформы

Платформы, для которых собран Postgre@Etersoft, можно увидеть на странице продукта при заказе сборки SELTA@Etersoft или Postgre@Etersoft. Обратите внимание, что в зависимости от выбора платформы, Вам будет предоставлена полная, либо базовая поддержка на вашей системе.


Приоритетными при тестировании и сборке новых версий являются платформы ALT Linux Server, Ubuntu Server, CentOS. Мы рекомендуем ставить PostgreSQL на них.

Пакеты доступны как в 32-битных, так и в 64-битных версиях.


Установка СУБД

Инструкция приводится на примере ALT Linux 5.0. Для других систем могут быть свои особенности.

  • Установка происходит под root
$ su -
Password:
  • Готовим место под пакеты
# cd ~
# mkdir pg
# cd pg
  • Скачиваем пакеты, проверяем, что всё скачалось

Стабильные пакеты для различных систем можно получить здесь:

# wget ftp://updates.etersoft.ru/pub/Etersoft/Postgre@Etersoft/stable/ALTLinux/5.0/*.rpm

.....

# ls 
postgresql-8.3eter-8.3.8-alt1.M50.2.1.i586.rpm
postgresql-8.3eter-contrib-8.3.8-alt1.M50.2.1.i586.rpm
postgresql-8.3eter-server-8.3.8-alt1.M50.2.1.i586.rpm

Устанавливаем пакеты

Для работы требуется установить следующие пакеты PostgreSQL:

  • postgresql-8.3eter
  • postgresql-8.3eter-contrib
  • postgresql-8.3-eter-server
# rpm -ihv *.rpm
Preparing... ##################################################
postgresql-8.3eter ##################################################
postgresql-8.3eter-contrib ##################################################
postgresql-8.3eter-server ##################################################
Running /usr/lib/rpm/posttrans-filetriggers

Удаляем rpm, больше они не понадобятся:

# rm *.rpm
rm: remove regular file `postgresql-8.3eter-8.3.8-alt1.M50.2.1.i586.rpm'? y
rm: remove regular file `postgresql-8.3eter-contrib-8.3.8-alt1.M50.2.1.i586.rpm'? y
rm: remove regular file `postgresql-8.3eter-server-8.3.8-alt1.M50.2.1.i586.rpm'? y

Запускаем

Запускаем, при первом запуске инициализируемый postgres -- создается окружение баз данных

# /etc/init.d/postgresql start
Initializing database: [ DONE ]
Starting postgresql service: [ DONE ]

если этого не произошло, смотрите ошибки в логе запуска /var/lib/pgsql/pgstartup.log.



Возможные ошибки

Несоответствие SHMMAX и SHMALL

# /etc/init.d/postgresql start
The current value of SHMMAX is too low for postgresql to run.
Please edit /etc/sysctl.conf and set this value to at least 134217728:
kernel.shmmax = 134217728

Значение SHMMAX (максимальный размер сегмента разделяемой памяти в байтах) слишком мало для запуска PostgreSQL.

Решение: Установите значение shmmax на указанное (или больше, если требуется согласно /var/lib/pgsql/pgstartup.log), внеся строку

kernel.shmmax=134217728

в /etc/sysctl.conf

Возможно придётся добавить ещё

kernel.shmall=134217728

После чего для вступления изменений в силу выполнить

sysctl -p /etc/sysctl.conf.

Занятый порт

Одна из проблем, из-за которой может не запускаться PostgreSQL, может быть вызвана невозможностью использования выбранного порта.

PostgreSQL не смог запуститься:

#/etc/init.d/postgresql start
Starting postgresql service: [ FAILED ]

И в /var/lib/pgsql/pgstartup.log

# cat /var/lib/pgsql/pgstartup.log
ПОДСКАЗКА: Is another postmaster already running on port 80? If not, wait a few seconds and retry.
LOG: не получилось создать сокет IPv6: Семейство адресов не поддерживается протоколом
WARNING: could not create listen socket for "*"
FATAL: could not create any TCP/IP sockets

Это означает, что скорее всего порт, используемый PostgreSQL занят. По умолчанию это 5432.

Проверяем это, смотрим, кто использует порт

# netstat -plan | grep 5432


Пути решения:

  1. Решить проблему с программой, которая использует порт. Изменить её порт.
  2. Изменить порт PostgreSQL.

Для этого нужно указать номер порта в файле /etc/sysconfig/postgresql, добавив строку

PGPORT=55432

или любой другой удобный номер порта


Подробности по установке смотрите здесь:

Настройка PostgreSQL

В наших сборках PostgreSQL уже заложены необходимые минимальные настройки для работы СУБД с SELTA@Etersoft.

Инициализация базы производится автоматически при первом запуске PostgreSQL, файлы баз данных будут храниться в каталоге /var/lib/pgsql/data, владелец каталога и процессов PostgreSQL устанавливается пользователь postgres, который создается автоматически, при установке пакетов.


  • Для того, чтобы иметь возможность подключиться к нему, мы должны задать пароль главному пользователю СУБД - владельцу всех баз данных - postgres, это выполняется это следующим образом:

Сначала в файле конфигурации /var/lib/pgsql/data/pg_hba.conf изменяем строчку:

local           all          all                ident sameuser

на строчку:

local           all          all                trust


  • Сохраним изменения и перезапустим PostgreSQL, для вступлений изменений настроек, командой
# /etc/init.d/postgresql restart
Stopping postgresql service: [ DONE ]
Starting postgresql service: [ DONE ]


  • Зададим пароль для работы с PostgreSQL.

Для этого требуется выполнить запрос.

$ psql -U postgres -d template1 -c "ALTER USER postgres PASSWORD 'новый пароль'"

Проверяем:

$ psql -U postgres -W 
Password for user postgres: 
Welcome to psql 8.3.8-eter1, the PostgreSQL interactive terminal.


  • Если вы хотите запретить локальный доверенный доступ (без пароля), поменяйте обратно настройки. Строчку "local all all trust" следует заменить обратно на "local all all ident sameuser" и перезапустить сервис постгри, чтобы отключить возможность подключения локальным пользователем без пароля.


Консоль SQL запросов PostgreSQL

В состав PostgreSQL входит утилита командной строки psql. Для её запуска на сервере, на котором работает PostgreSQL нужно выполнить следующую команду:

$ psql -U postgres

C помощью утилиты psql можно выполнять SQL запросы и просматривать результаты их выполнения, например:


$ psql -U postgres
# select upper('q');
# \quit


Проверка работоспособности

  • Проверяем статус сервера:
#/etc/init.d/postgresql status
pg_ctl: выполняется сервер (PID: 31805)
/usr/bin/postgres "-p" "5432" "-D" "/var/lib/pgsql/data"

Сервер запущен. Если, это не так, запустите сервер, так, как было описано выше.


  • Проверяем, использование порта
# netstat -plan | grep 5432
tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN      31805/postmaster
unix  2      [ ACC ]     STREAM     LISTENING     311449 31805/postmaster    /tmp/.s.PGSQL.5432

Требующейся нам порт используется postmaster, как и должно быть.


  • Смотрим установленную версию
# psql -U postgres -c "SELECT version()"

                                                           version 

----------------------------------------------------------------------------------------------

--------------------------------

 PostgreSQL 8.3.8-eter1 on i586-alt-linux-gnu, compiled by GCC i586-alt-linux-gcc (GCC) 4.3.2 

20081105 (ALT Linux 4.3.2-alt9)

(1 row)


После проверки работоспособности желательно провести оптимизацию настроек PostgreSQL в соответствии с возможностями вашего сервера: Оптимизация настроек PostgreSQL.

Создание дампа и загрузка дампа

Дамп должен делаться так:

  1. pg_dump -F p $NAMEDATABASE > $FILEBACKUP -U $USERDATABASE

Восстанавливать из него нужно так:

  1. psql -o $FILELOG -d $NAMEDATABASE -f $FILEBACKUP -U $USERDATABASE

Ссылки


Действия при обновлении /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:
Для корректной работы требуются выполнить операции
автоматически:Операции необходимые для перехода к версии postgreSQL 8.3
независимо от того, обновляли ли вы версию 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, но вам может понадобится переиндексировать текстовые поля после обновления.


Создание баз данных

После установки клиентской части и сервера PostgreSQL необходимо создать базы данных на сервере, с которыми будут работать Ваши программы.

Вся настройка и диагностика SELTA@Etersoft производится в Центре управления SELTA@Etersoft. Для его запуска на клиентской машине создаются ярлыки на Рабочем столе и группа в меню Пуск.


selta_main_on.png


В главном меню этого окна выберите Утилиты - Инициализация БД.

В открывшемся окне укажите параметры подключения к серверу PostgreSQL:


selta_init_login.png


Если вы правильно указали имя сервера с СУБД, имя пользователя (владельца баз) и пароль, то откроется окно утилиты Инициализации Баз данных:


selta_init.png


В левой части окна располагается список уже созданных баз данных. Если Вы только что установили PostgreSQL, то этот список скорее всего будет пуст.

Для создания базы данных нажмите кнопку Создать БД, в открывшемся диалоге укажите латинскими буквами имя новой базы:


selta_init_newname.png


Если возникли ошибки при создании базы, то появится диалогове окно с текстом этой ошибки, в противном случае созданная вами база появится в конце списка баз данных. Справа от имени базы данных будет указано, для работы с какой версией SELTA@Etersoft она предназначена.

Если у Вас уже есть ранее созданные (пустые) базы данных, то в списске они будут помечены как Не инициализировано. Если Вы хотите использовать их, то выделите их в списске и нажмите кнопку Инициализировать. Подробнее о функциональности утилиты Инициализация баз данных читайте в Документации


Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7

Самый простой способ загрузки данных в базу - штатными средствами загрузки-выгрузки самой 1С. Эта операция выполняется точно так же, как при работе с MS SQL Server или DBF базой.


Если у Вас база данных на MS SQL Server очень большого объема и ее невозможно выгрузить в zip-архив, вы можете перенести данными при помощи специальной утилиты - Конвертор. Для этого необходимо выполнить несколько операций, которые подразделяются на 2 этапа: создание структуры базы в PostgreSQL и перенос самих данных.

Выполните пошагово следующие инструкции:


Создание структуры базы данных

Для создания структуры базы данных запустите 1С 7.7, создайте новую информационную базу и загрузитесь в режиме конфигуратора.

В пункте Администрирование - Параметры базы данных SQL укажите параметры для подключения к PostgreSQL, в качестве имени базы укажите ту базу, которую создали ранее.

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


Перенос самих данных

Для переноса самих данных воспользуйтесь графической утилитой Конвертор. Запустите Графическую утилиту Selta, в главном меню выберите Утилиты - Конвертор:


selta_convert.png



Выберите кнопку "MS SQL Server -> CSV", в открывшемся окне укажите укажите параметры подключения к MS SQL Server, на котором лежит база данных, из которой Вы переносите данные, а в качестве пути для Дампа укажите папку на машине клиента, в которую будут скопированы данные:


selta_convert_go_csv.png


Нажмите Выполнить и дождитесь выполнения операции, копирование всех таблиц может занять продолжительное время.

Далее, полученный CSV-Дамп необходимо загрузить в PostgreSQL

Запустите Конвертор, выберите кнопку CSV -> PostgreSQL. В открывшемся диалоге необходимо указать параметры подключения к базе, в которой до этого была сохранена Ваша конфигурация:


selta_convert_go_db.png


Нажмите Выполнить и дождитесь выполнения операции, копирование всех таблиц может занять продолжительное время (для больших баз до нескольких часов).

После окончания копирования база готова к работе, можете запускать 1С и работать с ней в обычном режиме!


Если в дампе таблиц больше, чем в базе данных (так бывает, если Дамп делался с работающей БД 1С, а восстанавливается в "чистую" конфигурацию) будет возвращена ошибка


selta_convert_error_exist.png


Для избежание подобной ошибки, установите флажок "Пропускать таблицы отсутствующие в базе".


Если вы используете распределенную базу 1С
, действия по переносу будут слегка отличаются от описанных. Прочитайте об том подробнее здесь


Загрузка CSV дампа в MS SQL Server выполняется аналогично.


LTA/Перенос

Использование


Подключение 1С:Предприятия

Запуск системы

После того, как SELTA@Etersoft установлена, и настроен соответствующим образом PostgreSQL, можно запускать 1С.

Первый запуск 1С производится в режиме конфигуратора и в параметрах подключения укажите (вкладка Администрирование -> Параметры базы данных SQL):

  • имя сервера - DNS-имя или IP адрес сервера с PostgreSQL
  • имя базы данных - test_sql
  • имя пользователя - postgres
  • пароль - пароль, который вы задавали ранее командой ALTER USER для пользователя postgres


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с произвести выгрузку базы из 1с. (SELTA выключена. 1с подключен к базе MSSQL)

(1с конфигуратор->меню Администрирование->Выгрузить данные... (ввести путь))

2. Включить Selta.

(SELTA Запустить)
3. Создать (
!)новую(
!) БД с помощью графической оболочки SELTA. (Если уже есть, удалить и заново создать)
(SELTA меню Утилиты -> Инициализация БД (ввести параметры сервера Postgre)-> Создание БД (ввести имя новой БД)

4. Добавить информационную базу в 1с. (не забудьте создать пустой каталог с базой.)

(1c окно запуск -> добавить (ввести назание и путь))

5. Настройте в конфигураторе 1с базу из пункта 4 на сервер Postgre (созданную в пункте 3) (имя пользователя должно быть такое, как при создании в пункте 3)

(1с конфигуратор->меню Администрирование->Параметры базы данных SQL (ввести параметры БД))

6. В БД(4) средствами 1с произвести загрузку данных (из места куда была произведена выгрузка в пункте 1).

(1с конфигуратор->меню Администрирование->Загрузить данные... (ввести путь))

7. Скопировать каталоги пользователей из каталога информационой базы 1с (пункт 1) в каталог информационой базы 1с (пункт 4)

Просмотр/изменение пути пользователей:
(1с конфигуратор->меню Администрирование->Пользователи->Выбрать пользователя->вкладка атрибуты->рабочий каталог)




Вариант 2: Загрузка структуры с помощью 1с и данных с помощью SELTA

                             Суть Процесса
CSVDumpSteps2-2.svg
1. Средствами 1С произвести выгрузку (
!)пустой(
!) базы из 1с, той же конфигурации, что

собираетесь использовать. (Selta выключена. 1с подключен к базе MSSQL или dbf)

(1с конфигуратор->меню Администрирование->Выгрузить данные... (ввести путь))

-> 2! С помощью графической оболочки SELTA произвести конвертацию данных MSSQL -> CSV (из Вашей БД 1с на MS SQL сервере(уже не пустой))

(SELTA меню Утилиты -> Конвертор -> MS SQL SERVER --> CSV ->(ввести параметры БД и путь)

3. Включить Selta.

(SELTA Запустить)
4. Создать (
!)новую(
!) БД с помощью графической оболочки SELTA. (Если уже есть, удалить и заново создать)
(SELTA меню Утилиты -> Инициализация БД (ввести параметры сервера Postgre)-> Создание БД (ввести имя новой БД))

5. Добавить информационную базу в 1с. (не забудьте создать пустой каталог с базой.)

(1c окно запуск -> добавить (ввести назание и путь))

6. Настройте в конфигураторе 1с базу из пункта 5 на сервер Postgre (созданную в пункте 4) (имя пользователя должно быть такое, как при создании в пункте 4)

(1с конфигуратор->меню Администрирование->Параметры базы данных SQL (ввести параметры БД))

7. В БД(пункт 4) средствами 1с произвести загрузку данных (из места куда была

произведенна выгрузка в пункте 1).

(1с конфигуратор->меню Администрирование->Загрузить данные... (ввести путь))

-> 8! С помощью графической оболочки SELTA произвести конвертацию данных CSV -> Postgre

(путь из пункта 2, БД из пункта 4) (Данные, которые уже есть в БД Postgre сотруться, из

CSV добавятся.)

(SELTA меню Утилиты -> Конвертор -> CSV --> PostgreSQL ->(ввести параметры БД и путь)

9. Скопировать каталоги пользователей из каталога информационой базы 1с (пункт 1) в каталог информационой базы 1с (пункт 5)

Просмотр/изменение пути пользователей:
(1с конфигуратор->меню Администрирование->Пользователи->Выбрать пользователя->вкладка атрибуты->рабочий каталог)


Если вы используете распределенную базу 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 вы можете воспользоваться batch файлом ftp://updates.etersoft.ru/pub/Etersoft/SELTA@Etersoft/accessoryfiles/ExecWSS.bat.



Описание ExecWSS.bat

  • Вызов справки:
>ExecWSS.bat /?
  • Запуск SELTA
>ExecWSS.bat START
  • Остановка SELTA
>ExecWSS.bat STOP
  • Запуск SELTA c вызовом программы
>ExecWSS.bat START foo
  • Остановка SELTA c вызовом программы
>ExecWSS.bat STOP foo

Пример использования ExecWSS.bat

В примере показано, как создать ярлык для запуска программы 1с с остановленной SELTA

  1. Скопируйте файл ExecWSS.bat из ftp://updates.etersoft.ru/pub/Etersoft/SELTA@Etersoft/accessoryfiles/ExecWSS.bat в папку с SELTA (C:\Program Files\Selta\)
  1. Создайте ярлык на рабочем столе. (нажмите правой кнопкой мыши на рабочем столе, выберите New->Shortcut(Создать->Ярлык))
  1. Сделайте ярлык для программы 1с (В появившемся окне в поле "Type the location of the item"(Укажите размещение объекта) введите ["C:\Program Files\Selta\ExecWSS.bat" STOP "C:\Program Files\1Cv77\BIN\1cv7s.exe"] ), затем нажмите кнопку Далее.
  1. Введите имя ярлыка (В поле Type a name for this shortcut:(Введите имя ярлыка) введите [1c ms sql]). Нажмите кнопку Finish(Готово)
  1. Меняем иконку у ярлыка (нажмите правой кнопкой мыши на созданном ярлыке, Properties(Свойства) -> Change Icon ...(Сменить значок...) -> Look for icons in this file(Искать значки в следующем файле), введите [%ProgramFiles%\1Cv77\BIN\1cv7s.exe], выбирете иконку, OK ).

После этих действий при нажатии на созданный ярлык будет останавливаться SELTA и запускаться 1с, где вы можете использовать ваши базы для MS SQL. Вы можете создать такой же ярлык, заменив в нем ["C:\Program Files\Selta\ExecWSS.bat" STOP "C:\Program Files\1Cv77\BIN\1cv7s.exe"] на ["C:\Program Files\Selta\ExecWSS.bat" START "C:\Program Files\1Cv77\BIN\1cv7s.exe"] для запуска 1с с использованием PostgreSQL


Замечания

Вы можете с помощью ExecWSS.bat запустить одновременно и программу использующую ms sql и PostgreSQL с SELTA, но будьте внимательны, со SELTA должна быть в нужном Вам состоянии в момент подключения к базе SQL, а не в момент запуска программы.


Для корректого запуска/остановки 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**.


Настройка##LINKTOFTN ftnd1##

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с имеются стандартные маски они создадутся при создании, инициализации, или обновлении бд.

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



Аналогично этому можно создать маску для исключения группы таблиц из выборки.


Ссылки на сторонние дополнения:

    1. FTN ftnd1##http://infostart.ru/projects/3801/ Дополнение для удобной настройки триггеров от Djelf.


Необходимые действия при обновлении конфигурации 1с.

После обновления конфигурации, необходимо пересоздать триггеры. Это можно сделать в GUI Selta (кнопка пересоздать триггеры).

Так же вы можете сделать это другим способом. выполнив в бд такую функцию, pg_create_delete_trigger_from_mask() ("SELECT pg_create_delete_trigger_from_mask()") (вы можете прочитать подробнее об этом) любым удобным вам способом (через консоль бд pgsql, в pgadmin, интерфейс SELTA.)


Центр управления SELTA@Etersoft

Назначение

Данная утилита предназначена для облегчения настройки и обслуживания SELTA@Etersoft. Она позволяет просмотреть информацию о владельце копии SELTA@Etersoft, серийный номер, версию ПО (как самого транслятора, так и информацию о базах данных), так же доступны средства Инициализации баз данных, конвертирования данных из MS SQL Server в PostgreSQL и обратно, и средства диагностики продукта.


Главное окно

При установке продукта, на рабочем столе и в меню Пуск создаются необходимые ярлыки для запуска центра управления.

Главное окно программы представлено на следующем рисунке:


selta_main_on.png


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

В нижней части окна показан текущий статус транслятора и кнопка его Включения/Отключения.

Когда SELTA@Etersoft Запущена, программы работают с PostgreSQL посредством транслятора.

Если SELTA@Etersoft Приостановлена, то возобновляется работа с MS SQL Server


selta_main_off.png


Главное меню

Главное меню окна дает доступ к различным утилитам:

  • Конвертор - перенос данных из MS SQL Server в PostgreSQL и обратно посредством CSV дампа.
  • Диагностика - проведение диагностики компонентов SELTA@Etersoft, включение/выключение логов SELTA


Конвертор и Инициализация баз данных при выключенной SELTA недоступны.


Инициализация баз данных

Данная утилита предназначена для работы с базами данных. При выборе в меню главного окна Центра управления SELTA@Etersoft пункта: Утилиты - Инициализация БД, откроется диалоговое окно с приглашением ввести параметры подключения к СУБД:


selta_init_login.png

Начиная с версии 1.0.7 можно указывать порт подключения. Для этого в поле Адрес сервера PostgreSQL после адреса через запятую введите порт(допускается через двоеточие).


После нажатия кнопки Соединение будет выведено либо сообщение об ошибке (например "неверный пароль") или, в случае успеха, откроется окно Инициализации Баз Данных:


selta_init.png


В верхней части окна расположен список баз данных, которые доступны на данный момент. В данный список не включаются системные базы данных PostgreSQL - template0 и template1

Список будет пуст, если ни одной базы не было создано ранее.

Рядом с именами баз указаны их статусы:

- Не инициализировано - база не содержит элементов SELTA@Etersoft
- Ошибка - база содержит некоторые элементы SELTA@Etersoft, но они повреждены
- SELTA@Etersof <версия> - база данных содержит элементы SELTA@Etersoft указанной версии. Эта версия может не совпадать с текущей, установленной на клиенте.


Функциональность

Утилита Инициализации баз данных выполняет следующие функции:

Создание новых баз данных

Все созданные базы данных автоматически инициализируются элементами SELTA@Etersoft текущей версии. Если инициализация не удается - то созданная база будет удалена. Нельзя создать базы с именами template0, template1, master. Все имена баз сводятся к нижнему регистру. База данных должна состоять из латинских символов и цифр (кроме первого символа) и без пробелов.

Инициализация баз данных

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

Внимание
: не надо инициализировать БД postgres.
Удаление баз данных

Удалить можно любую базу данных, не зависимо от ее состояния. В этот момент ни один пользователь не должен быть подключен к удаляемой базе. Удаление базы приведет к полному уничтожению всех ее данных!

Переименование баз данных

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

Деинициализация

Удаление элементов SELTA@Etersoft из базы: будут удалены все функции, таблицы и типы данных, созданные ранее.

Внимание
! При выполнении этой процедуры Вы можете потерять свои данные! При удалении типов данных удаляются так же все таблицы и функции, в которых они используются!!! Данную функцию безопасно использовать сразу после Инициализации базы, т.к. гарантированно не были созданы таблицы с использованием новых типов. Инициализация не изменяет уже существующие таблицы. Деинициализация доступна только для баз данных, проинициализированных текущей версией SELTA@Etersoft. Если вы хотите удалить элементы старых версий SELTA@Etersoft - сначало произведите процедуру Обновления до текущей версии.
Обновить SELTA

Обновление компонентов SELTA@Etersoft в базе с предыдущей версии до новой. Данная функция добавляет новые элементы SELTA@Etersoft в базу и удаляет устаревшие. Данная функция не приводит к потере Ваших данных. Обновить можно только старую версию до текущей.

Пересоздать курсоры

Пересоздание курсоров SELTA подробнее об этом. Это действие требуется, например после обновления конфигурации 1с.

Диагностика

Доступна для любой базы данных. Данная процедура производит полную проверку базы на наличие компонентов SELTA@Etersoft и формирует отчет, который можно сохранить в файл и отправить в нашу службу технической поддержки, при возникновении проблем.

Тест запросов к базе данных

Тестирование запросов к базе данных SELTA подробнее об этом.


Конвертор

Данная утилита позволяет переносить данные из MS SQL Server в PostgreSQL и обратно.

Производится перенос только данных, структуру базы (таблицы, индексы, хранимые процедуры) требуется создавать отдельно (Для 1С 7.7 это делается при помощи конфигуратора, подробнее смотрите в разделе Перенос данных из MS SQL Server в PostgreSQL для 1С 7.7).

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

На следующем рисунке представлено главное окно утилиты:


selta_convert.png


"PostgreSQL > CSV" - выгрузка данных из PostgreSQL в CSV-дамп

"MS SQL Server > CSV" - выгрузка данных из MS SQL Server в CSV-дамп

"CSV > PostgreSQL" - загрузка данных из CSV-дампа в PostgreSQL

"CSV > MS SQL Server" - загрузка данных из CSV-дампа в MS SQL Server


CSV-дамп имеет следующий формат:

- все таблицы выгружаются в текстовые файлы (на каждую таблицу по одному файлу, имена файлов соответствуют именам таблиц)
- дополнительно создается файл _list_tables.inf который содержит список всех таблиц
- все записи экранированы кавычками
- все кавычки внутри записей дублируются
- столбцы разделяются знаком ";" (точка с запятой)
- строки разделяются знаком переноса на новую строку
- кодировка файлов – ASCII


При нажатии кнопки копирования данных из Базы в CSV-дамп открывается следующее окно:


selta_convert_go_csv.png


Здесь необходимо ввести параметры подключения к базе и указать путь, по котрому будет сохранен дамп: по указанному вами пути будет создан каталог с именем базы, и уже в него будут помещены файлы CSV-Дампа.

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


При нажатии кнопки копирования данных из CSV-Дампа в базу открывается окно:


selta_convert_go_db.png


Здесь так же указываются параметры подключения к базе данных и путь к CSV-Дампу - путь к файлу _list_tables.inf, который содержит вспомогательную информацию.

При нажатии кнопки Выполнить начнется копирование данных в базу, данная операция занимает больше времени, чем Создание CSV-Дампа.


Если в дампе таблиц больше, чем в базе данных (так бывает, если Дамп делался с работающей БД 1С, а восстанавливается в "чистую" конфигурацию) будет возвращена ошибка


selta_convert_error_exist.png


Для избежание подобной ошибки, установите флажок "Пропускать таблицы отсутствующие в базе".


Загрузка CSV дампа в MS SQL Server выполняется аналогично.


Диагностика

Утилита диагностики SELTA@Etersoft производит проверку элементов транслятора в системе: проверяется наличие и версии необходимых dll, а так же ключи реестра.

Selta diag.png

Для проведения диагностики нажмите кнопку Запуск, в текстовом поле Результат диагностики появится лог операции, который можно скопировать или сохранить в файл. При возникновении проблем с SELTA@Etersoft вы можете отправить этот лог диагностики в нашу службу технической поддержки, что может значительно упростить решение проблем.

В нижней части окна расположены элементы управления для "Журнала сообщений SELTA@Etersoft". Он представляет собой файл логов транслятора, который включает в себя все SQL запросы, которые поступили в транслятор, и его ответы - SQL запросы на языке pl/pgSQL. Данные логи могут быть очень полезны при выявлении ошибок работы транслятора.


Тест запросов

Данная утилита позволяет проверить, как работает сам транслятор запросов, какие SQL запросы поддерживаются, а какие нет, и, возможно, выявить ошибки трансляции.


selta_translate.png


В верхнее текстовое поле вводится SQL запрос для MS SQL Server, и после нажатия кнопки Тест в нижнем поле появляется запрос для PostgreSQL.

Если результат трансляции начинается со строк:

"ERROR: can not translate query: "

то это означает, что либо данных запрос транслятором не поддерживается, либо он содержит синтаксические ошибки.


Тест запросов к БД

Также можно протестировать запросы непосредственно к БД, с выводом результатов с помощью теста запросов к БД как запустить тест запросов к БД.


selta_test_query.png


Запросы вводятся в верхнее поле (Введите текст SQL запроса...). SQL запрос вводится в формате MS SQL Server. Результат трансляции можно посмотреть, установив флажок Показывать результаты трансляции.

В нижнем поле (Результат выполнения запроса). Вы можете видеть статус выполнения запроса, и возвращенные результаты.

Для запросов в формате PGSQL, без трансляции, введите "!!" перед запросом.


Загрузить дамп

Данная утилита предназначена для загрузки mssql-дампа базы на сервер PostgreSQL. При выборе в меню главного окна Центра управления SELTA@Etersoft пункта: Утилиты – Загрузить дамп, откроется диалоговое окно с приглашением ввести параметры подключения к СУБД и путь к файлу дампа:

Selta uploaddump.png


Также возможно указывать порт подключения. Для этого в поле "Имя сервера" после адреса через запятую введите порт(допускается через двоеточие).

После нажатия кнопки "Загрузить" произойдет трансляция и загрузка дампа на сервер.


Чтобы загрузить дамп на MS SQL Server, нужно остановить сельту (кнопка "Приостановить" на главном окне), и выполнить загрузку аналогично.


Лицензия и документация

В разделе Справка в меню главного окна имеются пункты О программе, Лицензия и Помощь. Они позволяют просмотреть информацию о продукте, его версии и владельце:


selta_about.png



selta_license.png



selta_help.png

Удаление продукта


Удаление SELTA@Etersoft

Для ОС Windows деинсталяция SELTA@Etersoft производится самым обычным образом - через Панель управления - Установка и удаление программ.

При работе SELTA@Etersoft на ОС Linux Утилиту установки и удаления программ можно вызвать командой:


wine uninstaller


Деинсталятор не удаляет файлы лицензии и логов, расположенных в рабочей директории SELTA@Etersoft.


Очистка PostgreSQL от элементов SELTA@Etersoft

Для удаления элементов SELTA@Etersoft из баз данных в PostgreSQL воспользуйтесь утилитой Инициализация баз данных: функцией Деинициализации, либо удалением баз данных.

Предварительно выгрузите из базы все данные, представляющие ценность.

Для очистки PostgreSQL от элементов SELTA@Etersoft Beta 1 и ниже рекомендуется переустановить PostgreSQL, если это затруднительно - обратитесь в службу технической поддержки, Вам предоставят инструкцию и необходимые скрипты для очистки системных баз PostgreSQL.

Разработка

Как тестировать

В первую очередь необходимо проверять, прогружаются (сохраняются) ли MD файлы конфигурации:

при этом в базе данных создаются все таблицы, индексы и хранимые процедуры, в некоторые таблицы заносятся первые данные, т.е. создаётся структура базы данных.


Если MD файл не прогружается (1С вылетает с ошибкой), то вы можете переслать файл конфигурации нам, с указанием названия конфигурации, и наши программисты добавят в Транслятор необходимую новую функциональность. Этот процесс обычно занимает не более одного дня. Внесённые исправления повлияют и на работоспособность других конфигураций, т.к. они добавляют транслятору универсальность, а не решают некоторые частности.


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


Третий этап - проверка работы различных элементов системы: формирование отчётов, проведение документов и т.д. Эти операции следует делать на заполненной данными базе. О том, как перенести данные из MS SQL Server в PostgreSQL смотрите ниже в разделе *установка*


Варианты ошибок

При работе 1С через транслятор SELTA@Etersoft может возникнуть несколько типов ошибок:

  1. Самые простые ошибки - это когда транслятор встречает новую конструкцию, которую не способен распознать. При этом выполнение SQL запроса не производится, ODBC драйвер возвращает ошибку, которая появляется в 1С во всплывающем меню, и после этого 1С, как правило, аварийно завершает свою работу. Такие ошибки решаются быстрее всего методом добавления новых правил в транслятор.
В этом случае необходимо выявить, какой запрос не поддерживается, сделать это проще всего при помощи логов SELTA.
  1. Более сложные ошибки, возникают обычно при вызове хранимых процедур: некоторые запросы содержат в себе ошибки, которые не выявляются базой данных на этапе создания хранимых процедур, но всплывают при определённых входных параметрах при вызове этих процедур. В этом случае ODBC драйвер отправляет запрос на выполнение, PostgreSQL возвращает ошибку, которая так же отображается в 1С во всплывающем окне. После исправления таких ошибок в трансляторе, приходится пересоздавать базу данных, т.к. необходимо заменить все Хранимые процедуры, которые создаются только при загрузке MD файла конфигурации.
В этом случае нужно выявить, какая ХП выполнялась, с какими параметрами, сделать это проще всего при помощи логов СУБД PostgreSQL)
  1. Наиболее сложные ошибки - когда ни ODBC драйвер, ни база данных ошибок не возвращают, но при этом запросы или хранимые процедуры содержат логические ошибки, и работа элементов 1С происходит не правильно (например формируются пустые отчёты, когда на самом доле они должны быть заполнены данными). Такие ошибки можно обнаружить только выполняя одни и те же операции подключившись к MS SQL Server и PostgreSQL (на разных машинах, или по очереди) и сравнивая результаты действий. Такие ошибки обычно возникают вследствие различных тонкостей работы MS SQL Server и PostgreSQL.
Лучше всего для начала включить Трассировку ODBC. Она должна полностью совпадать для обеих баз. Если есть различия в цепочке выполнения ODBC-команд – это может указывать на ошибку, и с этого места можно включать все дополнительные логи, чтобы ответить на вопрос Почему так происходит.

Страница с информацией логах

Известные проблемы

Имеющиеся записи в Багзилле

Добавить запись в Багзиллу

Требования к бета-версии завязываем на багу 800.


План документации

Общее описание

Установка SELTA

Установка PostgreSQL

Технические подробности

Поддерживаемые приложения

Что не работает

Планы

Конвертация базы

Специфика для 1С

Лицензирование

Описание PostgreSQL

Описание языка


Функции 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, надо разобраться

Остальные функции реализованы


Функции каталога

Все функции реализованы


Освобождение оператора

Все функции реализованы


Освобождение соединения

Все функции реализованы


Выбор СУБД для использования в транслятора

Для реализации 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 драйверам.


PostgreSQL

Последняя версия 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)



MySQL

Последняя версия 5.2.7

Процедурный язык: есть

Документация: http://linux.yaroslavl.ru/docs/www/mysql/man/manual.ru_toc.html

Лицензия: GPL


Достоинства:

Лёгкая, быстрая


Недостатки:

Считается, что она меньше всего соответствует стандартам SQL

Не поддерживаются Materialized view, но могут быть эмулированы на процедурных языках


IBM DB2

Требует изучения.


Разработка транслятора

Транслятор в виде прокси-сервера

Планируется реализовать транслятор в виде прокси-сервера протокола 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С.


Что понадобится сделать

  1. Реализация системных хранимых функций, которые есть в MS SQL (выдают системную информацию о базе)
  1. Системные таблицы: доступ к ним осуществляется из системных функций
  1. Расширенные хранимые функции MS SQL (поставляются с дистрибутивом в отдельных dll)
  1. Типы данных (bigint, sql_variant, table и т.д.)
  1. Реализация операторов языка T-SQL: предварительный транслятор кода, который пользователь посылает на сервер через ODBC (в том числе запросы на создание хранимых функций) + реализация дополнительных функций (которых нет в заменяющей базе) в качестве дополнительных модулей.
  1. Если с приложением поставляются отдельные dll для MS SQL, в которых хранятся расширенные хранимые функции, то их придётся банально переписывать под заменяющую базу, либо эмулировать API, под который они написаны. В 1С этот механизм не используется.


Основные проблемы скорее всего возникнут с реализацией блокировок.



Транслятор в виде клиентской библиотеки

Транслятор в виде клиентской библиотеки, заменяющей оригинальную, вряд ли будет реализован.


Изменение версии Selta

1. selta/version.h

Заменить версии на текущие (текстовую(CURRENT_VERSION) и числовую (CURRENT_VERSION_STR))

#define CURRENT_VERSION 105
#define CURRENT_VERSION_STR "SELTA@Etersoft v.1.0.5"

2. gui/InitDB/initdb.cpp

добавить в версии(ALL_VERSION[]) предыдущую версию. Текущую не надо -- это CURRENT_VERSION.
int ALL_VERSION[] = {90, 91, 92, 100, 101, 102, 103, 104, CURRENT_VERSION, 0};


3. gui/InitDB/Scrips/

Файлы лежат в директориях, с названиями соответствующими версии Postgre (сейчас 0, 8300)
где в директории Scripts/0 лежат sql скрипты для версий от начальной до 8.3. В директории Scripts/8300 -- от 8.3 до последней.
Все файлы в этих директориях должны начинатся с символов названия директории (8300/8300mchar.h)

а) <тукущая версия Selta>selta_install.sql (0/0selta_install.sql 8300/8300selta_install.sql)

изменить selta_install.sql всех директориях.
Заме нить версии на текущие
insert into pg_selta_version values (105, 'SELTA@Etersoft v.1.0.5');

б) selta_up_<предыдущая версия>_to_<текуая версия>.sql

добавить файлы во все директории selta_up_<предыдущая версия>_to_<текуая версия>.sql (0/0selta_up_104_to_105.sql 8300/8300selta_up_104_to_105.sql)
В этих фалах должно быть текщая версия SELTA
insert into pg_selta_version values (105, 'SELTA@Etersoft v.1.0.5');
и script регистрации версии postgre(находится в selta_install.sql)

4. msi/idt/File.idt

Добавить все файлы созданные в 3.б
<имя_файла> SCRIPT<текущая версия pg> <имя_файла> <РазмерФайла> 16896 <связь>
<связь> - следует указать номер, который не должен совпадать со значениями <связь> других файлов. Проследите что бы он не превышал максимальный номер поля DiskId в файле Media.mdt у соответсвующего cab файла.
8300selta_up_104_to_105.sql SCRIPTS8300 8300slt_up7.sql|8300selta_up_104_to_105.sql 1000 16896 134




При добавлении скриптов связанных с версией Postgres

1. gui/InitDB/Scrips/

Добавляем директорию с номером версии Postgres(соответствующем тому, что будет добавлен скриптом, лежащем в selta_install.sql в pg_selta_version), начиная с которого требуются специфические скрипты
8300

2. gui/InitDB/Scrips/

Добавляем в директорию, созданную в п.1 файлы
  • <текущая версия pg>mchar.sql (8300mchar.sql)
  • <текущая версия pg>uninstall_mchar.sql (8300uninstall_mchar.sql)
  • <текущая версия pg>selta_install.sql (8300selta_install.sql)
  • <текущая версия pg>selta_uninstall.sql (8300selta_uninstall.sql)
  • <текущая версия pg>selta_up_<предыдущая версия>_to_<текущая версия>.sql** (8300selta_uninstall.sql)

3. msi/Makefile

  • Добавить переменную SCDIR
SCDIR<текущая версия pg> = ..\\gui\\InitDB\\Scripts\\<текущая версия pg>
  • Добавить переменную SCDIRL
SCDIRL<текущая версия pg> = ..\\gui\\InitDB\\Scripts\\<текущая версия pg>
  • Добавить переменную SQLFILES
SQLFILES<текущая версия pg>=$(shell echo $(SCDIRL<текущая версия pg>)/*.sql | sort )
  • Добавить cab
scripts<текущая версия pg>.cab:
ALLARG= ; for i in $(SQLFILES<текущая версия pg>) ; do ALLARG="$$ALLARG $(SCDIR<текущая версия pg>)\\`basename $$i` " ; done ; \
$(CABARC) $@ $$ALLARG
  • Добавть в список cab:
ALLCAB= <....> scripts<текущая версия pg>.cab


SCDIR8300= ..\\gui\\InitDB\\Scripts\\8300
SCDIRL8300= ../gui/InitDB/Scripts/8300
....
ALLCAB=selta.cab seltacmd.cab psql.cab exec.cab odbc.cab scripts0.cab scripts8300.cab
....
scripts8300.cab:
ALLARG= ; for i in $(SQLFILES8300) ; do ALLARG="$$ALLARG $(SCDIR8300)\\`basename $$i` " ; done ; \
$(CABARC) $@ $$ALLARG




4. msi/idt/File.idt

Добавить все файлы из директории, созданной в п.1
<имя_файла> SCRIPT<текущая версия pg> <имя_файла> <РазмерФайла> 16896 <связь>


8300mchar.sql SCRIPTS8300 8300mchar.sql 29000 16896 120
....
8300uninstall_mchar.sql SCRIPTS8300 8300u_mchar.sql|8300uninstall_mchar.sql 1000 16896 180



<связь> -- следует указать неодинаковые номера больше того, который является самым большим в этом поле.

5. msi/idt/Media.idt

Добавить cab файл созданный в в.3
<номер по порядку> <связь> #<имя cab файла>
<связь> -- следует указать самое большое значение связи из п.4.
9 180 #scripts8300.cab


6. msi/idt/Component.idt

SCRIPTS<текущая версия pg> <ID> SCRIPTS<текущая версия pg> 2
<ID> -- GUID. Можно создать с помощью Orca.
SCRIPTS8300 {48B4E64D-E5B4-4D78-A5B6-ED9F5ED6151B} SCRIPTS8300 2


7. msi/idt/Directory.idt

Добавить создаваемую директорию
SCRIPTS<текущая версия pg> SCRIPTS <текущая версия pg>
SCRIPTS8300 SCRIPTS 8300


8. msi/idt/idtENG

Скопируйте все измененые фалы msi/idt/ в msi/idtENG/


Обновления и новости

Планы по версии 1.1

Планы по версии 2.0


Исправления, намеченные к версии 1.1.1


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)
  • Добавлена поддержка новых запросов (#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

Исправления и дополнения

  • Исправлена ошибка с зависанием при отмене проводки либо перепроводки в 1с ТиС.(#3459)
  • Исправлена ошибка вызывающая падение при расчете зарплаты , и при загрузке обновлений (УРБД) в PostgreSQL 9.3.X (#3596).
  • Добавлены ранее не транслируемые запросы, вызывающие падение при загрузке обновлений (УРБД) (#3719 #3677)
  • Исправлена ошибка, вызывающая падение SELTA при наличии нескольких пользователей в PostgreSQL .(#2829)
  • Добавлена поддержка MS Windows Vista

Полный список исправлений к версии 1.0.6



26.12.2008: SELTA@Etersoft 1.0.5

Исправления и дополнения

  • Поддержка 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 не может транслировать запрос в PostgreSQL. Создайте логи и отправьте их разработчикам.
  • Q: Что делать в случае появления ошибки при загрузке данных в 1С:Конфигураторе (Администрирование->Загрузить данные)?
  • A: Скорее всего проблема связана с ошибками в загружаемых данных. Выполните тестирование и исправление исходной базы. Если не помогает, создайте логи и отправьте их разработчикам.
  • Q: При первом запуске 1С 7.7 в рабочем режиме, после успешной загрузки, вылетает ошибка:
SQL State: HY000
Native: 7
Message: Error while executing the query
ERROR: value too long for type mvarchar(14)


  • Q: В конфигураторе 1С 7.7 при сохранении конфигурации выскакивает сообщение:
"Message: NOTICE: CREATE TABLE will create implicit sequence "...." for ....", после чего операция прерывается. или 
"SQL State 22P06, Native: -1, WARNING: nonstandard use of \\ in a string literal at character 31"
или
Message: NOTICE:function__orderselta_trigfunc_computed() does not exist, skipping
  • A: 1С неправильно обрабатывает коды возврата при SQL-запросах, она не ожидает что СУБД вернёт какое-то сообщение, и вылетает с ошибкой. Если Вы получаете подобное сообщение (NOTICE) при сохранении конфигурации, значит Вы забыли выполнить один из пунктов настройки PostgreSQL. Для исправления ошибки сделайте следующее:

В файле /var/lib/pgsql/data/postgresql.conf выставить параметр

client_min_messages = error

Не забудьте убрать знак комментария



  • Q: После приостановки/удаления SELTA@Etersoft не могу запустить MS Enterprise Manager, говорит о нехватке/неисправности в какой-то dll-ке, выдает ошибку подключения 126.
  • A: Проблема в неправильном удалении или ошибке при приостановке SELTA@Etersoft. Запустите файл [1].


  • Q: Будет ли поддерживать транслятор 1С:Предприятие 8.0?
  • A: Выпуска SELTA@Etersoft с поддержкой 1С:Предприятия 8.0 не планируется, рекомендуется переходить на 1С:Предприятие 8.1/8.2/8.3, которое может напрямую работать с PostgreSQL.


  • Q: Планируется ли расширение списка поддерживаемых приложений?
  • A: Да. Мы планируем начать сотрудничество с заинтересованными производителями небольших программ.


  • Q: При установке на Windows Server 2008 x64 у меня появляется ошибка вида "не могу найти файл odbcbcp.dll", после чего установка отменяется.
  • A: Проблема в отсутствии прав. Вам необходимо дать права на запись в system32 и в ветку реестра
"HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\SQL Server"

Взаимодействие с разработчиками и коллегами

Пишите разработчикам и в службу поддержки по адресу: selta@etersoft.ru

Подписка на публичный список рассылки по SELTA@Etersoft:

http://lists.etersoft.ru/mailman/listinfo/selta