При разработке конфигураций на платформе 1С:Предприятие 8.3 для мобильных устройств часто возникает ситуация, когда формы, специально адаптированные под мобильный интерфейс, отображаются как стандартные формы для настольного компьютера. Эта проблема может проявляться как на самом мобильном устройстве, так и при открытии формы на ПК. Давайте вместе разберем причины такого поведения и рассмотрим подробные шаги для корректного отображения мобильных форм.
Когда мы создаем форму в конфигураторе 1С и указываем, что она предназначена для мобильного клиента, мы ожидаем, что именно она будет использоваться при работе через мобильное приложение. Однако платформа не всегда автоматически выбирает нужную форму. Основная причина кроется в том, как 1С определяет тип клиентского приложения, и в том, какая форма установлена в качестве основной или выбрана по умолчанию.
Для начала, давайте проясним ключевое различие, которое часто вводит в заблуждение разработчиков:
Если вы открываете вашу конфигурацию через веб-браузер на мобильном телефоне, платформа будет считать, что это веб-клиент, и, следовательно, использовать формы, предназначенные для веб-клиента (обычные управляемые формы для ПК).
Наиболее гибкий и рекомендуемый способ обеспечить отображение нужной формы — это использовать событие ОбработкаПолученияФормы в модуле менеджера объекта. Это событие позволяет нам программно указать, какую именно форму следует открыть в зависимости от текущего типа клиентского приложения.
Рассмотрим, как это можно реализовать. Предположим, у вас есть документ (или любой другой объект), для которого вы создали две формы: одна стандартная (например, ФормаОбъекта) и одна мобильная (например, ФормаДокументаМобильная или Форма1, как в примере из сообщения). Наша задача — принудительно открывать мобильную форму, если приложение запущено на мобильном клиенте.
Откройте конфигуратор, найдите нужный объект (например, документ) и перейдите в его модуль менеджера. Добавьте следующий код:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если КлиентскоеПриложение.ТипПриложения = ТипКлиентскогоПриложения.МобильныйКлиент Тогда
// Здесь мы проверяем, является ли текущее приложение Мобильным клиентом
Если ВидФормы = "ФормаОбъекта" Тогда
// Если запрашивается стандартная форма объекта,
// мы подменяем ее на нашу мобильную форму.
ВыбраннаяФорма = "ФормаДокументаМобильная"; // Или "Форма1", если вы так назвали свою мобильную форму
СтандартнаяОбработка = Ложь; // Важно установить в Ложь, чтобы предотвратить стандартную обработку
КонецЕсли;
ИначеЕсли КлиентскоеПриложение.ТипПриложения = ТипКлиентскогоПриложения.МобильноеПриложениеКлиент Тогда
// Если это автономное мобильное приложение (например, для мобильной платформы)
// Возможно, здесь также потребуется своя логика или другая форма
Если ВидФормы = "ФормаОбъекта" Тогда
ВыбраннаяФорма = "ФормаМобильногоПриложения";
СтандартнаяОбработка = Ложь;
КонецЕсли;
Иначе
// Для всех остальных типов клиентов (тонкий клиент, толстый клиент, веб-клиент)
// оставляем стандартную обработку или указываем форму для ПК
СтандартнаяОбработка = Истина; // Позволяем платформе выбрать стандартную форму
КонецЕсли;
КонецПроцедуры
Давайте разберем ключевые моменты этого кода:
Процедура ОбработкаПолученияФормы(...): Эта процедура вызывается платформой каждый раз, когда требуется открыть форму для данного объекта.КлиентскоеПриложение.ТипПриложения: Это свойство позволяет нам определить, через какой тип клиента запущено приложение. Это критически важно для нашего сценария.ТипКлиентскогоПриложения.МобильныйКлиент: Если ваше приложение запускается именно как мобильный клиент (отдельное приложение на Android/iOS, подключенное к веб-серверу), то эта ветка кода будет выполнена.ТипКлиентскогоПриложения.МобильноеПриложениеКлиент: Этот тип используется для автономных мобильных приложений, скомпилированных из мобильной платформы. Если вы работаете именно с таким сценарием, необходимо использовать этот тип. Автор в сообщении 5 уточнил, что использует "клиент", что скорее всего относится к МобильныйКлиент.ВидФормы = "ФормаОбъекта": Здесь мы проверяем, какая форма была запрошена платформой по умолчанию. Чаще всего для объекта это будет "ФормаОбъекта".ВыбраннаяФорма = "ФормаДокументаМобильная": Здесь мы указываем имя формы, которую хотим открыть вместо стандартной. Убедитесь, что имя указано точно так же, как оно задано в конфигураторе для вашей мобильной формы.СтандартнаяОбработка = Ложь: Это очень важный параметр. Установка его в Ложь означает, что мы взяли на себя ответственность за выбор формы, и платформа не должна пытаться найти форму по своим стандартным правилам.Важный нюанс из обсуждения: Как мы выяснили из сообщений 4, 9 и 11, большая часть проблем возникает из-за путаницы между МобильныйКлиент и другими режимами. Если вы работаете с мобильным приложением (автономной базой), то вам нужно использовать ТипКлиентскогоПриложения.МобильноеПриложениеКлиент. Если же вы открыли базу на мобильном устройстве через обычный веб-браузер, то это не МобильныйКлиент, и для него будут применяться правила для веб-клиента. Формы для "мобильного клиента" будут отображаться только в клиенте типа ТипКлиентскогоПриложения.МобильныйКлиент (отдельное приложение).
В некоторых случаях, если вы хотите, чтобы мобильная форма была основной для данного объекта при любом запуске на мобильном клиенте, вы можете установить ее как основную форму для мобильного клиента в свойствах самого объекта.
ФормаОбъекта вы можете попробовать установить ее в свойстве "Основная форма". Это более простой подход, но он может быть менее гибким, если вам нужны разные формы для разных сценариев или если платформа по какой-то причине игнорирует эту настройку.После изменения свойств объекта или добавления кода в модуль менеджера, не забудьте обновить конфигурацию базы данных и протестировать изменения.
Помимо выбора формы, для корректной работы мобильных форм необходимо учитывать ряд рекомендаций по их разработке:
Важность, чтобы подсказать платформе приоритет отображения элементов.#Если МобильныйКлиент Тогда), чтобы включать или исключать фрагменты кода, специфичные для мобильных устройств или не поддерживаемые на них.Эффективное тестирование — ключ к успешной адаптации:
Для того чтобы ваш мобильный клиент мог корректно подключаться к базе, убедитесь, что выполнены следующие шаги:
Итак, проблема с отображением мобильных форм в 1С часто сводится к правильному определению типа клиентского приложения и соответствующему программному управлению выбором формы. Комплексный подход, включающий программные решения, тщательную адаптацию форм и всестороннее тестирование, позволит вам добиться корректного и удобного отображения интерфейса на мобильных устройствах.