При разработке комплексных систем, где веб-сайт выступает фронтендом, а 1С — бэкендом для обработки заказов, часто возникает задача прямой интеграции. В рамках локальной разработки, например, при выполнении курсовых проектов или создании прототипов, веб-стек часто разворачивается с помощью Open Server Panel (OSP). Рассмотрим подробно, как настроить получение данных в 1С из базы данных (обычно MySQL или MariaDB), которая работает внутри этого окружения.
Ситуация следующая: на локальном компьютере запущен Open Server, в котором крутится сайт и база данных. На этом же компьютере установлена 1С. Нам необходимо «навести мосты» между ними. Существует три основных подхода к решению этой задачи, и мы разберем каждый из них по шагам.
Этот метод считается классическим для интеграции «на лету» без изменения метаданных конфигурации 1С. Для его реализации нам потребуется технология Microsoft ActiveX Data Objects (ADO). Однако важно помнить: для того чтобы 1С «понимала» СУБД из Open Server, в операционной системе должен быть установлен соответствующий драйвер.
Шаг 1: Установка драйвера. Выясним, какая СУБД используется в OSP (чаще всего это MySQL). Вам необходимо скачать и установить MySQL ODBC Connector. Внимание: разрядность драйвера должна совпадать с разрядностью платформы 1С. Если вы используете 32-битную версию 1С, вам нужен 32-битный ODBC драйвер, даже если Windows у вас 64-битная.
Шаг 2: Программная реализация. Проанализируем пример кода для подключения. В отличие от MS SQL, строка подключения для MySQL будет иметь специфический формат. Разберем пример:
&НаКлиенте
Процедура ПодключитьсяКMySQL(Команда)
// Параметры подключения к Open Server
Сервер = "127.0.0.1"; // Или localhost
Порт = "3306";
БазаДанных = "имя_вашей_базы";
Пользователь = "root";
Пароль = ""; // В OSP по умолчанию пустой
// Инициализация COM-объекта
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
// Формируем строку соединения для MySQL ODBC драйвера
СтрокаСоединения = "Driver={MySQL ODBC 8.0 Unicode Driver};"
+ "Server=" + Сервер + ";"
+ "Port=" + Порт + ";"
+ "Database=" + БазаДанных + ";"
+ "User=" + Пользователь + ";"
+ "Password=" + Пароль + ";"
+ "Option=3;";
Соединение.ConnectionString = СтрокаСоединения;
Соединение.Open();
Сообщить("Успешное подключение к MySQL на Open Server!");
// Пример выполнения простого запроса
ЗапросSQL = "SELECT * FROM orders LIMIT 10";
Рекордсет = Соединение.Execute(ЗапросSQL);
Пока НЕ Рекордсет.EOF Цикл
// Обработка данных
Сообщить("Заказ №: " + Рекордсет.Fields("id").Value);
Рекордсет.MoveNext();
КонецЦикла;
Соединение.Close();
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Обратите внимание на параметр Driver. Его имя должно в точности совпадать с тем, как драйвер называется в системном окне «Источники данных ODBC».
Если вы планируете работать с базой сайта постоянно, лучший способ — интегрировать её в дерево метаданных конфигурации 1С. Это позволит использовать стандартные запросы 1С (на языке 1С) к таблицам сайта.
Разберем алгоритм настройки:
СайтНаOSP).Теперь данные из OSP будут доступны в коде так же легко, как и данные обычных справочников:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаказыСайта.id КАК Идентификатор,
| ЗаказыСайта.sum КАК Сумма
|ИЗ
| ВнешнийИсточникДанных.СайтНаOSP.Таблица.orders КАК ЗаказыСайта";
Результат = Запрос.Выполнить();
Проанализируем архитектурно верный подход. Прямое подключение к базе данных считается «небезопасным» и жестко связывает две системы. Если вы измените структуру таблиц в PHP-коде сайта, 1С «сломается». Чтобы этого избежать, используем HTTPСоединение.
Схема работы:
Пример кода на стороне 1С:
&НаСервере
Процедура ПолучитьДанныеССервера()
Сервер = "mysite.local"; // Домен в Open Server
Соединение = Новый HTTPСоединение(Сервер);
Запрос = Новый HTTPЗапрос("/api/get_orders.php");
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Содержимое = Ответ.ПолучитьТелоКакСтроку();
// Далее используем ЧтениеJSON для разбора данных
Сообщить("Данные получены: " + Содержимое);
КонецЕсли;
Исключение
Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Проанализируем проблемы, с которыми вы можете столкнуться при интеграции 1С и Open Server Panel:
1. Проблема кодировки. 1С работает в Unicode (UTF-16). Базы данных в OSP часто используют UTF-8 или cp1251. При использовании ADODB, если вместо русских букв вы видите вопросы или «кракозябры», сразу после открытия соединения выполните команду:
Соединение.Execute("SET NAMES cp1251");
Это заставит MySQL отдавать данные в кодировке, которую Windows-компоненты ADO поймут корректно.
2. Настройки доступа в MySQL. По умолчанию пользователь root в Open Server может подключаться только с localhost (127.0.0.1). Если 1С и OSP на одном ПК — проблем нет. Но если вы попытаетесь подключиться с другого компьютера в сети, вам нужно будет в phpMyAdmin выдать права пользователю для доступа с хоста %.
3. Особенности Open Server 6. В новейших версиях OSP (6.0 и выше) модули СУБД изолированы. Убедитесь, что в настройках модуля MySQL разрешены внешние порты, и вы используете правильный IP-адрес. В ряде случаев указание 127.0.0.1 работает стабильнее, чем localhost.
Для простых задач и курсовых проектов быстрее всего использовать Способ 1 (ADODB). Для глубокой интеграции в бизнес-логику предприятия выбирайте Способ 2 (Внешние источники данных). Если же вы строите современную масштабируемую систему — ориентируйтесь на Способ 3 (HTTP-сервисы), так как он избавляет от необходимости возиться с ODBC-драйверами на каждом рабочем месте пользователя.