При разработке мобильных решений на платформе 1С:Предприятие 8.3 часто возникает задача интеграции с существующими корпоративными базами данных, такими как MySQL. Однако специфика мобильной платформы накладывает существенные ограничения на способы прямой связи с внешними СУБД. В рамках этой статьи мы разберем, почему прямое соединение является нежелательным, и проанализируем наиболее эффективные архитектурные подходы для решения этой задачи.
Начнем с того, что мобильная платформа 1С существенно отличается от «большой» версии для настольных компьютеров. Рассмотрим основные причины, по которым мы не можем просто использовать ВнешниеИсточникиДанных (ODBC), как мы привыкли это делать в Windows-клиенте:
Таким образом, нам необходимо создать промежуточное звено, которое будет выступать шлюзом между мобильным приложением и базой данных MySQL.
Наиболее надежный и современный метод — это создание «веб-прокладки». Рассмотрим этот процесс подробнее. Мы можем развернуть HTTP-сервис на стороне основной базы 1С или написать отдельный небольшой микросервис на языке программирования, поддерживающем работу с MySQL (например, PHP, Python или Node.js).
Алгоритм работы выглядит следующим образом:
HTTPЗапрос.ВнешниеИсточникиДанных или через COM-объект (если это Windows-сервер) и получает результат.Разберем пример кода для мобильного приложения, который запрашивает данные через HTTP:
// В мобильном приложении формируем запрос к нашему сервису
Соединение = Новый HTTPСоединение("myserver.ru", , Логин, Пароль, , 30, Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/v1/get_mysql_data?id=123");
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Читаем JSON с данными из MySQL
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Обрабатываем полученную структуру
КонецЕсли;
Исключение
Сообщить("Ошибка связи: " + ОписаниеОшибки());
КонецПопытки;
Проанализируем ситуацию: если ваша задача не требует автономной работы мобильного устройства без интернета, стоит рассмотреть технологию Мобильный клиент. В отличие от мобильного приложения, мобильный клиент является «зеркалом» основной информационной базы.
В этом случае работа с MySQL настраивается стандартными средствами 1С на сервере:
ВнешнийИсточникДанных в основной конфигурации.Это избавляет разработчика от необходимости вручную писать API и обрабатывать JSON, так как платформа берет транспорт данных на себя.
Выясним причину, по которой опытные разработчики настаивают на жесткой инкапсуляции логики обмена. Как было отмечено в обсуждении, не стоит размазывать код запросов к внешним источникам по всей конфигурации.
Создайте отдельный общий модуль, например, ИнтеграцияВнешниеБД. Вся работа с MySQL должна быть скрыта внутри одной функции. Рассмотрим пример правильного вызова из кода формы мобильного приложения:
// В коде формы мы не знаем, откуда берутся данные
ПараметрыЗапроса = Новый Структура("Артикул", Объект.Артикул);
ТаблицаЦен = МодульИнтеграции.ПолучитьДанныеИзВнешнейСистемы(ПараметрыЗапроса);
// А внутри модуля МодульИнтеграции сегодня может быть HTTP-запрос,
// а завтра — чтение из локального файла или Система Взаимодействия
Этот подход позволяет легко изменить источник данных (например, если вы решите перейти с MySQL на PostgreSQL или веб-сервис другого поставщика), не переписывая интерфейсную часть приложения.
При реализации обмена важно учитывать следующие моменты:
ЧтениеJSON для десериализации данных.HTTPСоединение (например, 10-30 секунд), чтобы приложение не «зависало» при потере пакетов.Проанализировав возможности платформы, мы приходим к выводу, что прямое программное подключение мобильной 1С к MySQL невозможно и технически нецелесообразно. Правильный путь — создание HTTP-сервиса на стороне серверной 1С, который будет выступать надежным и безопасным посредником. Это обеспечит стабильность работы приложения в условиях мобильных сетей и позволит сохранить чистоту архитектуры вашего кода.