При попытке интегрировать 1С с базой данных Oracle разработчики часто сталкиваются с целым рядом трудностей. Типичная ситуация: вы пытаетесь настроить Внешний источник данных (ВИД), устанавливаете ODBC-драйвер, но при добавлении пользовательского DSN в администраторе драйверов вместо имен баз данных (TNS service name) отображаются непонятные закорючки (кракозябры). Проанализируем эту ситуацию подробно и разберем по шагам, как правильно организовать подключение, прочитать данные из таблиц и представлений, а также какие архитектурные подходы вообще существуют.
Частая ошибка на старте — смешивание инструкций по настройке разных технологий. Рассмотрим подробнее два основных метода получения данных из Oracle в 1С:
Выясним причину проблем с кодировкой при настройке драйверов. Появление "закорючек" вместо текста связано с неверно настроенной локалью клиента Oracle. В экосистеме Oracle за кодировку отвечает специальная системная переменная — NLS_LANG. Если ее значение (например, AMERICAN_AMERICA.WE8MSWIN1252) не совпадает с кодировкой самой базы данных или операционной системы, текст будет искажаться.
Чтобы решить проблему с кракозябрами в TNS Service Name и в самих данных, необходимо добавить или изменить переменную среды Windows (или параметр в реестре) NLS_LANG, установив корректное значение. Для кириллицы часто используются значения RUSSIAN_RUSSIA.CL8MSWIN1251 или RUSSIAN_RUSSIA.AL32UTF8 (в зависимости от настроек самой БД).
Для подключения к Oracle требуется наличие клиента на той машине, где будет выполняться запрос (если это Управляемые формы и тонкий клиент — то на сервере 1С). Разберем по шагам, как это сделать оптимально:
Вам не обязательно устанавливать полновесный клиент Oracle, который весит гигабайты и сложен в настройке. Существует Oracle Instant Client — компактный архив с минимально необходимым набором библиотек. Его достаточно распаковать в нужную директорию.
Далее системе необходимо понимать, где находится файл tnsnames.ora, который описывает параметры подключений (хосты, порты, SID). Создайте системную переменную TNS_ADMIN и укажите в ней путь к папке, в которой лежит ваш файл tnsnames.ora. Драйвер (будь то ODBC для ВИД или OLE DB для ADO) обратится к этой переменной, найдет файл конфигурации сети и успешно установит связь с сервером базы данных.
После успешной настройки подключения через ADO (или ВИД), перед нами часто встает задача — узнать, какие таблицы вообще есть в базе. Проанализируем, какие системные представления Oracle помогают получить нужную информацию. Если мы работаем через ADO, мы можем выполнить прямой SQL-запрос.
Для получения списка всех доступных таблиц используется запрос:
SELECT table_name
FROM all_tables
Если вам нужно получить список представлений (Views), логика точно такая же. Вместо таблиц используется системное представление ALL_VIEWS:
SELECT view_name
FROM all_views
Рассмотрим дополнительные системные таблицы, которые могут оказаться крайне полезными при разработке динамических читалок:
USER_TABLES и USER_VIEWS — используются для получения объектов, принадлежащих исключительно текущему пользователю. Это позволяет отсечь огромное количество системных таблиц Oracle и ускорить выполнение запроса.ALL_TAB_COLUMNS — важнейшее представление, позволяющее получить список всех колонок для конкретной таблицы или View, а также узнать их типы данных.В современных реалиях (например, при размещении баз в 1C:Fresh или при строгих ограничениях безопасности от системных администраторов) установка ODBC-драйверов и клиента Oracle на сервер 1С может быть запрещена или невозможна. Проанализируем альтернативное решение — использование микросервисов.
Вместо прямого подключения из 1С, вы можете развернуть легкий микросервис на языке программирования Go (Golang). В Go есть библиотеки (например, драйвер go-ora), которые реализуют сетевой протокол Oracle самостоятельно (Pure Go). Это означает, что для такого микросервиса не требуется установка Oracle Client, драйверов ODBC или файла tnsnames.ora.
Схема работы выглядит так: микросервис компилируется в один исполняемый файл и запускается на любом доступном сервере. Он подключается к Oracle напрямую. Для 1С этот микросервис предоставляет простой HTTP REST API. Платформа 1С отправляет обычный HTTP-запрос (GET или POST) с помощью объекта HTTPСоединение и получает данные в удобном формате JSON. Это полностью изолирует 1С от проблем с драйверами сторонних баз данных и делает интеграцию максимально стабильной и переносимой.