При работе с 1С через терминалы сбора данных (ТСД) по удаленному рабочему столу программисты часто сталкиваются с аппаратными ограничениями устройств. Маленький физический размер экрана (например, 5 на 8 см) делает стандартные системные диалоги практически непригодными для использования: кнопки «Да», «Нет» или «ОК» оказываются слишком мелкими, и кладовщикам трудно попасть по ним пальцем. Стандартная функция Вопрос() позволяет стилизовать текст сообщения с помощью объекта ФорматированнаяСтрока, но она никак не влияет на геометрические размеры самих кнопок.
В этой статье мы разберем несколько стратегий решения этой проблемы: от создания собственных форм до настройки параметров платформы и операционной системы.
Проанализируем самый надежный способ, к которому рано или поздно приходят все разработчики мобильных решений на базе RDP — это отказ от стандартного метода Вопрос() в пользу разработки собственной универсальной формы. Это позволяет полностью контролировать визуальное представление элементов.
Разберем по шагам, как это реализовать:
ОбщаяФорма.ДиалогВопросаТСД).Рассмотрим пример кода для вызова такой формы из программного модуля:
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТекстВопроса", "Выполнить загрузку данных?");
ПараметрыФормы.Вставить("Заголовок", "Подтверждение");
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ДиалогВопросаТСД", ПараметрыФормы, , , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
В самой форме в обработчике нажатия кнопки мы просто закрываем форму, возвращая результат:
&НаКлиенте
Процедура КомандаДа(Команда)
Закрыть(КодВозвратаДиалога.Да);
КонецПроцедуры
Этот метод гарантирует, что кнопки будут именно того размера, который удобен пользователю на конкретной модели ТСД.
Выясним, какие штатные средства платформы могут помочь без радикального переписывания кода. В 1С:Предприятие реализован специальный режим «тактильного управления», предназначенный для работы на устройствах с сенсорным экраном.
Проанализируем ситуацию: когда этот режим активирован, платформа автоматически увеличивает отступы между элементами и делает некоторые системные элементы крупнее. Активировать его можно несколькими способами:
/TouchInterface.Хотя это не даст такого же гибкого контроля, как собственная форма, это может значительно улучшить общую эргономику приложения на ТСД без изменения программного кода.
Посмотрим на проблему с точки зрения системного администрирования. Поскольку работа ведется через удаленный рабочий стол, отрисовкой окон занимается ОС сервера. Если мы изменим настройки масштабирования (DPI) для пользователя на стороне сервера, Windows увеличит все элементы интерфейса, включая системные шрифты и заголовки кнопок диалога Вопрос().
Для этого необходимо:
Важно: Этот метод затронет абсолютно все приложения в сессии пользователя, что может быть как плюсом, так и минусом.
Если вы работаете в современной типовой конфигурации (например, «Розница 2.3» или «Управление торговлей 11»), в них уже могут быть реализованы механизмы для работы на малых экранах. Проанализируем пример из конфигурации «Розница».
В ней существует общая форма ФормаРМКУправляемаяИнформацииОбОшибке или механизмы обработки РМК (рабочего места кассира). В этих формах кнопки изначально проектировались под сенсорные мониторы. Вы можете найти в коде вызовы через ОбщегоНазначенияКлиент.СообщитьПользователю или аналогичные методы Библиотеки стандартных подсистем (БСП). В БСП часто используется форма СтандартныйВопрос, которую можно один раз кастомизировать в конфигураторе, и это изменение применится ко всем вызовам в системе.
Рассмотрим подробнее использование метода ПоказатьВопрос(). Хотя сам по себе переход на асинхронность не меняет визуальный размер кнопок, он является обязательным для современных конфигураций 1С. При работе в веб-клиенте или мобильном клиенте (не RDP), асинхронные окна отрисовываются средствами браузера или мобильной ОС, которые часто автоматически адаптируют размер кнопок под палец пользователя.
Пример использования асинхронного метода:
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьОтвет", ЭтотОбъект);
Текст = Новый ФорматированнаяСтрока("Вы уверены?", Новый Шрифт(,,Истина, 16));
ПоказатьВопрос(ОписаниеОповещения, Текст, РежимДиалогаВопрос.ДаНет);
Резюме: Если вам требуется гарантированный результат и удобство для кладовщика, наиболее правильным путем будет создание собственной общей формы с крупными кнопками. Это позволит вам не зависеть от настроек масштабирования Windows и ограничений платформы по стилизации стандартных диалогов.