При разработке решений на мобильной платформе 1С программисты часто сталкиваются с необходимостью узнать адрес, по которому мобильное устройство связывается с центральным сервером. Это может потребоваться для программной настройки синхронизации, получения обновлений конфигурации или отправки специфических запросов к веб-сервисам. Однако стандартные методы, привычные нам по работе с «настольной» версией 1С, в мобильной среде ведут себя иначе. Рассмотрим подробно, как решить эту задачу, и проанализируем технические нюансы работы мобильной платформы.
Прежде всего, разберем ключевое различие в поведении системы, которое часто сбивает с толку разработчиков. В экосистеме 1С существует два принципиально разных мобильных решения, и получение адреса в них работает по-разному:
СтрокаСоединенияИнформационнойБазы() вернет фактический URL веб-сервера (например, http://myserver.com/base).СтрокаСоединенияИнформационнойБазы() вернет путь к файлу во внутренней памяти устройства.Проанализируем ситуацию: когда разработчик мобильного приложения вызывает СтрокаСоединенияИнформационнойБазы(), он получает результат вида:
File="/data/user/0/com.e1c.mobile/files/1C/1cv8/..."
Это путь к локальному хранилищу, который никак не помогает узнать адрес сервера обновлений или адрес публикации базы на веб-сервере. Выясним, как мы можем получить нужный нам URL.
Как было отмечено в ходе обсуждения, информация об адресе базы (UpdateURL) содержится в служебном файле ibases.v8i. Этот файл создается платформой при добавлении информационной базы в список. Рассмотрим структуру этого файла:
Внутри секции конкретной базы можно найти параметр Connect или UpdateURL. Если бы мы могли прочитать этот файл программно, проблема была бы решена. Однако здесь мы сталкиваемся с механизмом «песочницы» (sandboxing) мобильных операционных систем Android и iOS.
Проанализируем ограничения: мобильное приложение 1С не имеет прав на чтение файлов в системных директориях платформы без специальных разрешений или Root-прав. Тем не менее, если вы разрабатываете тиражируемое решение, полагаться на доступ к ibases.v8i нельзя, так как путь к нему может меняться от версии к версии платформы.
Поскольку встроенный язык 1С на мобильной платформе не предоставляет прямого метода ПолучитьURLОбновления(), самым надежным и профессиональным способом является явное хранение адреса внутри самой базы. Разберем, как это реализовать по шагам.
Шаг 1. Создание константы. В конфигурации мобильного приложения создадим константу АдресЦентральногоСервера (тип Строка), предварительно подготовив API, используя Swagger в 1С.
Шаг 2. Первичное заполнение. При первом запуске или при создании начального образа мобильной базы (если используется механизм автономных рабочих мест), мы можем программно записать адрес сервера в эту константу.
Рассмотрим пример кода при создании начального образа на стороне основной базы:
// На стороне сервера (основная база)
Процедура ПриСозданииНачальногоОбраза(Настройки)
// Записываем URL, который будет доступен в мобильной базе
Константы.АдресЦентральногоСервера.Установить("https://api.myserver.ru/trade");
КонецПроцедуры
Шаг 3. Использование в мобильном коде. Теперь в любой момент работы мобильного приложения мы можем легко получить этот адрес, организовав обмен через подсистему PAPI:
// В мобильном приложении
АдресСервера = Константы.АдресЦентральногоСервера.Получить();
Если ПустаяСтрока(АдресСервера) Тогда
Сообщить("Адрес сервера не задан. Синхронизация невозможна.");
КонецЕсли;
Существует еще один продвинутый метод — передача адреса через параметры запуска. Платформа 1С поддерживает запуск через протокол e1c://. Выясним, как это работает. Мы можем сформировать специальную ссылку, которая не только откроет приложение, но и передаст в него данные.
Пример ссылки: e1c://run/base?LaunchParameter=URL:https://myserver.ru
В самой конфигурации мобильного приложения мы можем перехватить этот параметр в модуле приложения:
Процедура ПриНачалеРаботыСистемы()
ПараметрЗапускаСтрока = ПараметрЗапуска;
Если Найти(ПараметрЗапускаСтрока, "URL:") > 0 Тогда
// Выделяем адрес из строки и сохраняем его
НовыйАдрес = Сред(ПараметрЗапускаСтрока, 5);
Константы.АдресЦентральногоСервера.Установить(НовыйАдрес);
КонецЕсли;
КонецПроцедуры
Важно понимать, что в мобильной платформе 1С функции СтрокаСоединенияИнформационнойБазы() и ПолучитьНавигационнуюСсылку() служат для внутреннего использования платформой (например, для открытия конкретного объекта), а не для сетевой идентификации базы в интернете.
Подведем итог: если ваша задача — программно определить, «откуда пришло» приложение или куда ему «стучаться» за данными, не пытайтесь найти этот адрес в системных переменных. Платформа скрывает эти данные в целях безопасности и из-за особенностей работы ОС. Используйте архитектурный подход: передавайте адрес как часть данных при синхронизации или через параметры инициализации. Это сделает ваш код стабильным и независимым от версий мобильной платформы и обновлений Android или iOS.