Вопрос импортозамещения и ухода от экосистемы Microsoft часто заставляет системных администраторов искать альтернативные способы работы старых, но стабильных систем. Платформа 1С:Предприятие 7.7 (в народе называемая «клюшками») исторически жестко привязана к Microsoft SQL Server. Рассмотрим подробнее, можно ли подружить эту ветеранскую систему с мощной СУБД Oracle и какие технические преграды встретятся на нашем пути.
Проанализируем архитектуру взаимодействия платформы 7.7 с базами данных. В отличие от современной версии 8.3, где существует прослойка абстракции (Data Access Layer), в версии 7.7 движок базы данных bkend.dll жестко ориентирован на диалект T-SQL, специфичный для MS SQL Server.
Разберем основные причины несовместимости:
GETDATE(), ISNULL(), а также специфические конструкции для работы с временными таблицами (через символ #). Oracle использует совершенно иной синтаксис (PL/SQL).Посмотрим на ситуацию со стороны программиста. Если нам жизненно необходимо хранить данные в Oracle, мы можем использовать технологию прямых запросов. Для этого нам понадобятся внешние компоненты, такие как 1С++ или Rainbow.
Рассмотрим алгоритм действий при таком подходе:
ODBC соединение.ODBCRecordset из библиотеки 1С++ для выполнения запросов напрямую к Oracle.Пример инициализации соединения через 1С++ мог бы выглядеть следующим образом:
// Создаем объект соединения
БазаДанных = СоздатьОбъект("ODBCDatabase");
// Указываем строку соединения с Oracle
СтрокаСоединения = "Driver={Oracle in OraClient11g_home1};Dbq=MY_ORACLE_DB;Uid=myUser;Pwd=myPassword;";
Если БазаДанных.Соединение(СтрокаСоединения) = 0 Тогда
Сообщить("Не удалось подключиться к Oracle!");
КонецЕсли;
Важный нюанс: Этот метод не делает Oracle основной базой 1С. Он лишь позволяет 1С выступать в роли интерфейса к данным Oracle. Вам придется вручную описывать логику записи, проведения документов и формирования отчетов, полностью минуя штатные механизмы 1С.
Выясним, существуют ли готовые трансляторы. В истории сообщества 1С известен проект SELTA от компании Etersoft. Эта прослойка перехватывает запросы от bkend.dll и переводит их в формат, понятный для PostgreSQL.
К сожалению, для Oracle полноценного коммерческого решения такого уровня не существует. Теоретически можно использовать Oracle Transparent Gateway для MS SQL Server. В этой схеме 1С подключается к «фиктивному» MS SQL, который перенаправляет запросы в Oracle. Однако на практике:
Если ваша цель — полностью уйти от продуктов Microsoft, проанализируем вопрос терминального сервера. Пользователи часто хотят запустить 1С 7.7 под Wine на Linux. В этом случае возникает проблема организации многопользовательской работы.
Разберем основные шаги реализации такой схемы:
X2Go, FreeRDS или LTSP. Это позволит пользователям подключаться к Linux-серверу и запускать 1С в графическом режиме.Подведем итог нашему исследованию. Прямого и простого способа нажать кнопку «Использовать СУБД Oracle» в 1С 7.7 не существует. Если ваша инфраструктура требует отказа от MS SQL, у вас есть три пути:
Первый путь: Перевод 1С 7.7 на PostgreSQL с использованием транслятора SELTA. Это наиболее близкое к «коробочному» решение для работы под Linux без MS SQL.
Второй путь: Полная переработка логики работы с данными через прямые запросы (Direct SQL). Это трудоемкий процесс, требующий высокой квалификации программиста 1С. В этом случае Oracle будет использоваться как хранилище данных, а 1С — как оболочка для форм и интерфейса.
Третий путь (наиболее рекомендуемый): Миграция на платформу 1С:Предприятие 8.3. В «восьмерке» поддержка Oracle реализована штатно на уровне платформы. Это позволит вам сохранить все преимущества работы с Oracle (масштабируемость, надежность, инструменты администрирования) без необходимости изобретать «костыли» для версии 7.7.
Помните: Любое нестандартное решение для 1С 7.7 несет в себе риски повреждения данных при обновлении платформы или росте нагрузки. Перед принятием решения обязательно проведите нагрузочное тестирование на копии базы, используя синтетические тесты проведения большого количества документов в многопользовательском режиме.