Как настроить внешнее подключение к 1С 8.3 из Linux на Python?

Системный администратор 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

Перед системными администраторами и разработчиками часто встает задача интеграции 1С с внешними системами, работающими на операционных системах семейства Linux. В среде Windows классическим решением был технологический инструмент COMConnector, однако на платформе Linux этот механизм недоступен. Рассмотрим подробно, как организовать безопасное и эффективное чтение данных из информационной базы 1С 8.3 с помощью сторонних скриптов на Python.

Вариант 1. Разработка HTTP-сервисов или Web-сервисов внутри 1С

Самым надежным и архитектурно правильным способом интеграции является создание собственных API-эндпоинтов на стороне 1С. Это позволяет полностью изолировать внешнее приложение от внутренней структуры таблиц базы данных и отсекать невалидные запросы на уровне платформы.

Разберем основные преимущества данного подхода:

  1. Получение актуальных данных «на лету»: внешняя утилита отправляет HTTP-запрос (например, GET-запрос с каталожным номером товара) и мгновенно получает готовый ответ.
  2. Формирование удобного формата: сервер 1С самостоятельно собирает данные из справочников или регистров и сериализует их в формат JSON или XML, с которым удобно работать в Python.
  3. Безопасность: стороннему приложению не требуются прямые учетные данные от СУБД MS SQL. Доступ разграничивается стандартными ролями и пользователями 1С через HTTP Basic Authentication.

Для реализации этого метода необходимо опубликовать базу данных 1С на веб-сервере (IIS или Apache) и написать модуль HTTP-сервиса в Конфигураторе.

Вариант 2. Использование встроенного REST API (OData)

Если нет возможности писать собственный код обработки HTTP-запросов на языке 1С, вы можете воспользоваться встроенным в платформу 1С 8.3 интерфейсом OData. Данный механизм позволяет автоматически предоставить REST API к объектам метаданных без написания кода.

Рассмотрим по шагам, как задействовать OData для решения задачи:

  1. Опубликуйте базу данных на веб-сервере с включенной опцией публикации стандартного интерфейса OData.
  2. В Конфигураторе раздайте права доступа (роль) для специального пользователя 1С только на чтение нужных справочников или регистров.
  3. Сформируйте HTTP-запрос из Python-скрипта к нужному объекту.

Для извлечения графических файлов (фотографий товаров), хранящихся в реквизитах типа «Хранилище значения», OData предлагает удобный механизм: к URL запроса добавляется суффикс /$value. В ответ веб-сервер возвращает бинарный поток файла, который Python сразу может сохранить на диск или передать далее по цепочке.

Вариант 3. Прямое чтение таблиц базы данных MS SQL

В случаях, когда требуется максимальная скорость чтения или нет возможности опубликовать веб-сервер, допустимо прямое подключение к базе данных MS SQL Server из Linux-машины. Платформа 1С разрешает выполнение операторов SELECT сторонними утилитами, однако здесь необходимо учитывать ряд технических особенностей.

Для подключения из Python на Linux используются специализированные драйверы:

  1. Установите в операционной системе Linux официальный драйвер msodbcsql17 или msodbcsql18.
  2. Используйте библиотеку pyodbc или pymssql для выполнения SQL-запросов.

Так как 1С формирует имена физических таблиц (например, _Reference123) и полей (например, _Fld4567) динамически, вам потребуется узнать их соответствие. Выяснить структуру хранения можно прямо из Конфигуратора или с помощью встроенного метода платформы:

СтруктураБазы = ПолучитьСтруктуруХраненияБазыДанных();

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

Важные нюансы прямого чтения MS SQL:

1. Извлечение картинок: изображения хранятся в полях типа VARBINARY(MAX) или IMAGE. Платформа 1С сжимает файлы алгоритмом Deflate/Zlib и добавляет служебный бинарный заголовок. Чтобы получить исходную картинку в Python, необходимо сдвинуть указатель за пределы платформенного заголовка и распаковать массив байтов с помощью встроенного модуля zlib.

2. Преобразование GUID: ссылки 1С хранятся в базе данных в виде BINARY(16). Порядок байтов в них отличается от стандартного представления UUID в Windows/Linux, поэтому при выборке идентификаторов их необходимо конвертировать специальной функцией перестановки байтов.

3. Использование SQL-представлений (Views): чтобы упростить выборку из Python и изолировать скрипт от изменений названий полей, рекомендуется создать на стороне MS SQL отдельное представление (SQL View) или регламентным заданием в 1С заполнять простой промежуточный регистр с примитивными типами данных (строки, числа, даты).

Вариант 4. Промежуточная база данных или шина сообщений

Если прямое чтение из боевой базы нежелательно по соображениям нагрузки или безопасности, проанализируем архитектурные схемы с промежуточным звеном:

  1. Создание промежуточной БД: в 1С настраивается внешнее связывание (например, с базой PostgreSQL) через механизм «Внешние источники данных». Регламентное задание в 1С по расписанию выгружает актуальные карточки товаров и ссылки на картинки в эту промежуточную базу, а утилита на Python читает готовые данные из нее.
  2. Очереди сообщений (RabbitMQ / Apache Kafka): при изменении товара в 1С срабатывает подписка на событие, которая отправляет JSON-пакет с описанием и фото в брокер сообщений. Python-скрипт на Linux выступает в роли подписчика и обрабатывает входящие события.

Подводя итог, для разовых выборок или небольших проектов отличным выбором станет использование протокола OData или HTTP-сервисов. Если же требуется высокая производительность при передаче больших объемов данных, рекомендуем использовать прямое чтение MS SQL через SQL-представление или выгрузку в промежуточный кэш.

← На главную