Как программно получить адрес (URL) мобильной информационной базы 1С?

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

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

Различие между Мобильным клиентом и Мобильным приложением

Прежде всего, разберем ключевое различие в поведении системы, которое часто сбивает с толку разработчиков. В экосистеме 1С существует два принципиально разных мобильных решения, и получение адреса в них работает по-разному:

  1. Мобильный клиент: Это, по сути, «тонкий клиент» для мобильного устройства. Он работает в постоянной связи с сервером. В этом случае стандартная функция СтрокаСоединенияИнформационнойБазы() вернет фактический URL веб-сервера (например, http://myserver.com/base).
  2. Мобильное приложение: Это автономная база данных (обычно на SQLite), которая живет на самом устройстве. Она может работать без интернета. Здесь та же самая функция СтрокаСоединенияИнформационнойБазы() вернет путь к файлу во внутренней памяти устройства.

Проанализируем ситуацию: когда разработчик мобильного приложения вызывает СтрокаСоединенияИнформационнойБазы(), он получает результат вида:

File="/data/user/0/com.e1c.mobile/files/1C/1cv8/..."

Это путь к локальному хранилищу, который никак не помогает узнать адрес сервера обновлений или адрес публикации базы на веб-сервере. Выясним, как мы можем получить нужный нам URL.

Использование файла конфигурации ibases.v8i

Как было отмечено в ходе обсуждения, информация об адресе базы (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:


// В мобильном приложении
АдресСервера = Константы.АдресЦентральногоСервера.Получить();
Если ПустаяСтрока(АдресСервера) Тогда
    Сообщить("Адрес сервера не задан. Синхронизация невозможна.");
КонецЕсли;

Альтернативный способ: Параметры запуска и URL-схемы

Существует еще один продвинутый метод — передача адреса через параметры запуска. Платформа 1С поддерживает запуск через протокол e1c://. Выясним, как это работает. Мы можем сформировать специальную ссылку, которая не только откроет приложение, но и передаст в него данные.

Пример ссылки: e1c://run/base?LaunchParameter=URL:https://myserver.ru

В самой конфигурации мобильного приложения мы можем перехватить этот параметр в модуле приложения:


Процедура ПриНачалеРаботыСистемы()
    ПараметрЗапускаСтрока = ПараметрЗапуска;
    Если Найти(ПараметрЗапускаСтрока, "URL:") > 0 Тогда
        // Выделяем адрес из строки и сохраняем его
        НовыйАдрес = Сред(ПараметрЗапускаСтрока, 5);
        Константы.АдресЦентральногоСервера.Установить(НовыйАдрес);
    КонецЕсли;
КонецПроцедуры

Почему это важно?

Важно понимать, что в мобильной платформе 1С функции СтрокаСоединенияИнформационнойБазы() и ПолучитьНавигационнуюСсылку() служат для внутреннего использования платформой (например, для открытия конкретного объекта), а не для сетевой идентификации базы в интернете.

Подведем итог: если ваша задача — программно определить, «откуда пришло» приложение или куда ему «стучаться» за данными, не пытайтесь найти этот адрес в системных переменных. Платформа скрывает эти данные в целях безопасности и из-за особенностей работы ОС. Используйте архитектурный подход: передавайте адрес как часть данных при синхронизации или через параметры инициализации. Это сделает ваш код стабильным и независимым от версий мобильной платформы и обновлений Android или iOS.

← На главную