Начать реальный мобильный ввод в своем поле и построить собственную командную панель

Учебные задачи

Настоящее поле ввода собственного реквизита: native метод активирует режим редактирования, пользователь вводит контрольный текст; server задает политику сворачивания и состав мобильной панели.

Где и как запускать

Полный модуль своей ОбщаяФорма.МобильныйВвод85: server создания/политики, только мобильный client начала ввода.

Подготовка

  1. Создайте отдельную пустую CF УчебныйМобильныйВвод85 без бизнес-объектов и расширений на 8.5.1.1343. Подготовьте собственный тестовый мобильный клиент или мобильное приложение с управляемыми формами, совместимые с этой платформой; настольный запуск не проверяет клавиатуру.

  2. Создайте ОбщаяФорма.МобильныйВвод85 с УчебныйТекст85 Строка 100 и Состояние85 Строка 500. ПолеТекста85 вида Поле ввода, ПутьКДанным = УчебныйТекст85, доступное, не только просмотр, без маски и обработчика выбора.

  3. Создайте команды НачатьСвойВвод85 и ПроверитьСвойВвод85 и реальные кнопки КнопкаВвода85, КнопкаПроверки85. Кнопки принадлежат самой форме, а не чужой панели. Не включайте автоматическое заполнение командной панели.

  4. В редакторе формы исходный СоставКоманднойПанелиНаМобильномУстройстве оставьте пустым: код сам добавляет две собственные кнопки. Реквизит статуса выведите только для просмотра.

  5. Свяжите ПриСозданииНаСервере и две команды с полным приведенным модулем. Откройте только свою форму на собственном тестовом мобильном устройстве или эмуляторе.

  6. Никаких камер, микрофонов, календарей, адресных книг, почты, записи данных и внешнего 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 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. На сервере устанавливается НеИспользовать сворачивание по важности. Это разрешенный server контекст: desktop client для данного свойства не заявлен.

  2. СоставКоманднойПанелиНаМобильномУстройстве readonly как свойство; возвращенная коллекция модифицируется своими native Добавить, а не заменяется новой коллекцией.

  3. Состав получает два реальных КнопкаФормы из Элементы; Count и Find проверяют именно их идентичность, не строки имен вместо объектов.

  4. Клиентский метод сначала делает реальное ПолеТекста85 текущим. НачатьРедактированиеЭлемента не принимает элемент аргументом: он работает с ТекущийЭлемент формы.

  5. Для обычного текста появляется системный механизм ввода или экранная клавиатура, зависящие от клиента и OS. Метод не вводит за пользователя строку автоматически.

  6. ПроверитьСвойВвод85 принимает лишь Урок85-готово; любое другое значение остается в памяти и дает понятный повторный шаг.

Как проверить результат

  1. На собственном мобильном устройстве видны обе реальные команды; состав содержит ровно 2 кнопки.

  2. Начальный текст Урок85. Нажмите ввод: активным должно быть ПолеТекста85, затем введите Урок85-готово и нажмите проверку.

  3. Статус подтверждает только реально введенное точное значение, не вызов клавиатуры.

  4. Неверный текст дает просьбу исправить, не ложный успех и не запись в базу.

  5. Desktop кнопка ввода отказывает до вызова mobile-only native метода; это ожидаемый негативный контекст.

  6. Если исходная мобильная панель не пустая, creation guard отказывает до Добавить: очистите только настройку собственной учебной формы вручную.

Ожидаемый результат

Три API формы связаны с настоящим текущим полем, ручным вводом и собственной readonly-коллекцией двух кнопок.

На что обратить внимание

  1. Нельзя вызывать mobile-only метод из тонкого desktop клиента.

  2. Внешний вид клавиатуры зависит от OS; отдельный UI тест обязателен.

  3. Не назначайте значение readonly свойства СоставКоманднойПанелиНаМобильномУстройстве.

  4. Настройка сворачивания не гарантирует, что все элементы поместятся на узком экране без прокрутки.

  5. Нет автозаписи формы и нет доступа к настоящим персональным данным.

  6. Мобильный клиент здесь не запускался, runtimeExecuted = False.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.