В процессе разработки и сопровождения мобильных приложений на платформе 1С:Предприятие часто возникает необходимость оперативного обновления конфигурации у пользователей. Стандартный механизм «Перезапуск из конфигуратора» (или AutoUpdate) позволяет автоматически подтягивать изменения при каждом запуске приложения. Однако на практике разработчики сталкиваются с проблемой: если интернет-соединение нестабильно или имеет низкую скорость, автоматическая загрузка может «зависнуть», блокируя работу пользователя. При проектировании таких систем полезно заранее изучить особенности и ограничения мобильной платформы 1С, чтобы избежать архитектурных ошибок.
В данной статье мы разберем, как реализовать механизм гибкого управления этим параметром. Мы проанализируем, почему стандартные ключи запуска не подходят для мобильной платформы, и рассмотрим пошаговый алгоритм программного изменения настроек подключения непосредственно из кода мобильного приложения.
При использовании мобильного приложения без публикации (без сборки полноценного .apk или .ipa файла) обновление конфигурации происходит через механизм HTTP-отладки или публикации на веб-сервере. В настройках информационной базы в самом мобильном клиенте за это отвечает галочка «Перезапуск из конфигуратора». Если она включена, приложение при старте опрашивает сервер на наличие новой версии. В качестве альтернативы стандартному обновлению можно организовать взаимодействие мобильного приложения с центральной базой через HTTP-сервисы.
Многие разработчики пытаются управлять этим поведением через метод ЗавершитьРаботуСистемы(), передавая в него параметры запуска. Рассмотрим типичные заблуждения относительно ключей командной строки:
/AppAutoInstallLastVersion — предназначен исключительно для десктопной версии платформы и управляет обновлением самого «движка» (клиента), а не конфигурации./UpdateDBCfg — используется в конфигураторе для обновления структуры базы данных и не имеет смысла для мобильного клиента./N, /P, /URL — позволяют авторизоваться или открыть конкретное приложение, но не влияют на внутреннюю настройку автоматического обновления.Проанализировав документацию и опыт коллег, мы приходим к выводу: прямого ключа командной строки для активации режима обновления «на лету» не существует. Однако решение кроется в структуре хранения настроек мобильного приложения.
Все параметры информационных баз, добавленных в мобильное приложение, хранятся в текстовом файле ibases.v8i. Этот файл располагается во внутренней памяти мобильного устройства в защищенной директории приложения. Настройка «Перезапуск из конфигуратора» соответствует строке AutoUpdate=1 в описании конкретной базы.
Выясним причину, почему это работает: мобильная платформа при старте считывает этот файл. Если мы программно изменим значение AutoUpdate с 0 на 1 (или наоборот), то при следующем запуске платформа применит новую настройку.
Разберем по шагам, как реализовать кнопку в мобильном приложении, которая будет включать автообновление и перезапускать систему.
Шаг 1. Определение пути к файлу настроек
В операционной системе Android файлы приложения обычно находятся по пути: /data/data/[ИмяПакетаПриложения]/files/1cv8/ibases.v8i. Однако нам не нужно прописывать путь жестко. Мы можем использовать методы работы с файловой системой 1С.
Шаг 2. Поиск и чтение файла
Рассмотрим пример кода, который находит файл настроек и считывает его содержимое:
// Определяем путь к документам приложения
ПутьКФайлу = ДокументыПанелиУправления() + "1cv8/ibases.v8i";
ФайлНастроек = Новый Файл(ПутьКФайлу);
Если ФайлНастроек.Существует() Тогда
Чтение = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
ТекстФайла = Чтение.Прочитать();
Чтение.Закрыть();
КонецЕсли;
Шаг 3. Модификация параметра AutoUpdate
Нам необходимо найти в тексте секцию текущей базы и заменить (или добавить) строку AutoUpdate. Проанализируем ситуацию: если база одна, задача упрощается. Если баз несколько, нужно ориентироваться на имя текущей информационной базы (параметр Connect или ID).
// Пример простой замены для включения обновления
НовыйТекст = СтрЗаменить(ТекстФайла, "AutoUpdate=0", "AutoUpdate=1");
// Если параметра не было вовсе, его нужно добавить в секцию базы
Если СтрНайти(ТекстФайла, "AutoUpdate") = 0 Тогда
НовыйТекст = ТекстФайла + Символы.ПС + "AutoUpdate=1";
КонецЕсли;
Шаг 4. Запись файла и перезапуск
После модификации текста его нужно сохранить обратно в тот же файл и инициировать завершение работы. Пользователю останется только запустить приложение снова (в некоторых случаях можно использовать ЗапуститьПриложение, но на мобильных ОС это работает специфично).
Запись = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Запись.Записать(НовыйТекст);
Запись.Закрыть();
// Завершаем работу, чтобы настройки вступили в силу при следующем старте
ЗавершитьРаботуСистемы(Ложь);
При реализации данного метода обратим внимание на следующие моменты:
ibases.v8i без Root-прав, но само приложение 1С может редактировать свои настройки без ограничений.ibases.v8i может содержать параметр UpdateURL. Если вы используете автономный режим, убедитесь, что этот URL указывает на корректный адрес публикации.AutoUpdate может не спасти от зависания. В таких случаях рекомендуется использовать механизм «Автономных конфигураций», где обновление происходит в фоновом режиме через систему взаимодействия или HTTP-сервисы, а не при старте основного потока приложения.ibases.v8i может потребоваться полная очистка кэша, если платформа не «подхватила» изменения. Однако для параметра AutoUpdate это обычно не требуется.Мы проанализировали нестандартный, но эффективный способ управления жизненным циклом мобильного приложения. Поскольку штатных средств для динамического управления галочкой «Перезапуск из конфигуратора» через встроенный язык напрямую не предусмотрено, прямое редактирование файла ibases.v8i остается самым надежным инструментом программиста.
Этот подход позволяет реализовать в приложении удобный для пользователя интерфейс: например, кнопку «Проверить наличие обновлений», которая сама включит нужный режим, перезапустит приложение, а после успешного обновления может программно выключить этот режим обратно, чтобы не замедлять каждый последующий старт системы.