Настоящее поле ввода собственного реквизита: native метод активирует режим редактирования, пользователь вводит контрольный текст; server задает политику сворачивания и состав мобильной панели.
Где и как запускать
Полный модуль своей ОбщаяФорма.МобильныйВвод85: server создания/политики, только мобильный client начала ввода.
Подготовка
Создайте отдельную пустую CF УчебныйМобильныйВвод85 без бизнес-объектов и расширений на 8.5.1.1343. Подготовьте собственный тестовый мобильный клиент или мобильное приложение с управляемыми формами, совместимые с этой платформой; настольный запуск не проверяет клавиатуру.
Создайте ОбщаяФорма.МобильныйВвод85 с УчебныйТекст85 Строка 100 и Состояние85 Строка 500. ПолеТекста85 вида Поле ввода, ПутьКДанным = УчебныйТекст85, доступное, не только просмотр, без маски и обработчика выбора.
Создайте команды НачатьСвойВвод85 и ПроверитьСвойВвод85 и реальные кнопки КнопкаВвода85, КнопкаПроверки85. Кнопки принадлежат самой форме, а не чужой панели. Не включайте автоматическое заполнение командной панели.
В редакторе формы исходный СоставКоманднойПанелиНаМобильномУстройстве оставьте пустым: код сам добавляет две собственные кнопки. Реквизит статуса выведите только для просмотра.
Свяжите ПриСозданииНаСервере и две команды с полным приведенным модулем. Откройте только свою форму на собственном тестовом мобильном устройстве или эмуляторе.
Никаких камер, микрофонов, календарей, адресных книг, почты, записи данных и внешнего API урок не требует. Инструментами устройства, приложение, публикация и сеть не запускаются.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
УчебныйТекст85 = "Урок85";
ЭтотОбъект.СворачиваниеЭлементовПоВажности = СворачиваниеЭлементовФормыПоВажности.НеИспользовать;
Если ЭтотОбъект.СворачиваниеЭлементовПоВажности <> СворачиваниеЭлементовФормыПоВажности.НеИспользовать Тогда
ВызватьИсключение "Своя мобильная форма не должна скрывать элементы по важности";
КонецЕсли;
Состав = ЭтотОбъект.СоставКоманднойПанелиНаМобильномУстройстве;
Если Состав.Количество() <> 0 Тогда
ВызватьИсключение "Для учебного построения нужен собственный пустой состав мобильной панели";
КонецЕсли;
Состав.Добавить(Элементы.КнопкаВвода85);
Состав.Добавить(Элементы.КнопкаПроверки85);
Если Состав.Количество() <> 2 Или Состав.Найти("КнопкаВвода85") <> Элементы.КнопкаВвода85
Или Состав.Найти("КнопкаПроверки85") <> Элементы.КнопкаПроверки85 Тогда
ВызватьИсключение "В собственной мобильной панели должны быть две настоящие кнопки формы";
КонецЕсли;
Состояние85 = "Выберите ввод: начальный текст Урок85, ожидаемый результат Урок85-готово";
КонецПроцедуры
&НаКлиенте
Процедура НачатьСвойВвод85(Команда)
#Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
ТекущийЭлемент = Элементы.ПолеТекста85;
Если ТекущийЭлемент <> Элементы.ПолеТекста85 Тогда
ВызватьИсключение "Нужно активное собственное поле ввода";
КонецЕсли;
ЭтотОбъект.НачатьРедактированиеЭлемента();
#Иначе
ВызватьИсключение "НачатьРедактированиеЭлемента недоступен в настольном клиенте";
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвойВвод85(Команда)
Если УчебныйТекст85 <> "Урок85-готово" Тогда
Состояние85 = "Введите ровно Урок85-готово в собственное поле и повторите проверку";
Возврат;
КонецЕсли;
Состояние85 = "Собственный ввод принят; текст хранится только в реквизите формы";
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
На сервере устанавливается НеИспользовать сворачивание по важности. Это разрешенный server контекст: desktop client для данного свойства не заявлен.
СоставКоманднойПанелиНаМобильномУстройстве readonly как свойство; возвращенная коллекция модифицируется своими native Добавить, а не заменяется новой коллекцией.
Состав получает два реальных КнопкаФормы из Элементы; Count и Find проверяют именно их идентичность, не строки имен вместо объектов.
Клиентский метод сначала делает реальное ПолеТекста85 текущим. НачатьРедактированиеЭлемента не принимает элемент аргументом: он работает с ТекущийЭлемент формы.
Для обычного текста появляется системный механизм ввода или экранная клавиатура, зависящие от клиента и OS. Метод не вводит за пользователя строку автоматически.
ПроверитьСвойВвод85 принимает лишь Урок85-готово; любое другое значение остается в памяти и дает понятный повторный шаг.
Как проверить результат
На собственном мобильном устройстве видны обе реальные команды; состав содержит ровно 2 кнопки.
Начальный текст Урок85. Нажмите ввод: активным должно быть ПолеТекста85, затем введите Урок85-готово и нажмите проверку.
Статус подтверждает только реально введенное точное значение, не вызов клавиатуры.
Неверный текст дает просьбу исправить, не ложный успех и не запись в базу.
Desktop кнопка ввода отказывает до вызова mobile-only native метода; это ожидаемый негативный контекст.
Если исходная мобильная панель не пустая, creation guard отказывает до Добавить: очистите только настройку собственной учебной формы вручную.
Ожидаемый результат
Три API формы связаны с настоящим текущим полем, ручным вводом и собственной readonly-коллекцией двух кнопок.
На что обратить внимание
Нельзя вызывать mobile-only метод из тонкого desktop клиента.
Внешний вид клавиатуры зависит от OS; отдельный UI тест обязателен.
Не назначайте значение readonly свойства СоставКоманднойПанелиНаМобильномУстройстве.
Настройка сворачивания не гарантирует, что все элементы поместятся на узком экране без прокрутки.
Нет автозаписи формы и нет доступа к настоящим персональным данным.
Мобильный клиент здесь не запускался, runtimeExecuted = False.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.