Разберем достаточно распространенную и неочевидную задачу: необходимо разработать мобильное приложение (а точнее, мобильный клиент), которое должно отображать вес с оборудования (весов). Особенность в том, что интеграция с оборудованием традиционно реализована через COMОбъект. Рассмотрим, почему при вызове с мобильного устройства объект создается, но возвращает ошибку, и проанализируем эффективные способы решения этой проблемы.
На практике часто встречается следующая ситуация: код инициализации COM-объекта обернут в серверный вызов. Например:
#Если НЕ МобильноеПриложениеСервер Тогда
Терминал = Новый COMОбъект("Controller.ScAuto");
#КонецЕсли
Если мы запускаем данный код через обычный тонкий клиент с компьютера, к которому физически подключены весы, метод Терминал.GetWeight(1, 5) успешно возвращает вес. Однако при вызове этого же кода из мобильного клиента метод возвращает -5000 (что в контексте драйвера означает "Терминал не обнаружен"). Сам COM-объект при этом создается без ошибок.
Выясним причину такого поведения. Дело в архитектуре мобильного клиента и клиент-серверного взаимодействия 1С:
&НаСервере).Новый COMОбъект("Controller.ScAuto") на сервере, этот объект создается на машине сервера 1С, а не на локальном рабочем месте, где стоят весы.USR1CV8). Он физически изолирован от локальных COM или USB-портов пользователя. Именно поэтому драйвер загружается, но "не видит" физическое оборудование.Если же сервер 1С и рабочее место с весами — это один и тот же компьютер, то проблема может заключаться в правах: службе сервера 1С нужно дать права на доступ к портам или запускать сервер от имени администратора. Однако в полноценной сети такой подход не сработает.
Использование COM-объектов на сервере для связи с локальным оборудованием клиентов считается устаревшей практикой. Рассмотрим более надежные и современные решения для работы мобильного клиента с весами.
COMОбъект.Помимо связи с оборудованием, при разработке мобильного клиента возникает проблема с интерфейсом: маленькие формы с несколькими элементами могут открываться в виде небольших окошек, не используя всю полезную площадь экрана телефона или планшета.
Разберем по шагам, что нужно делать, чтобы форма гарантированно растянулась на весь экран мобильного устройства:
РастягиватьПоГоризонтали и РастягиватьПоВертикали в значение Да. Это заставит платформу вытолкнуть границы формы до краев доступного экрана.РежимОткрытияОкна при программном вызове формы. Избегайте независимого режима, который может отображать форму как всплывающее диалоговое окно.
КлиентскоеПриложение.УстановитьРежимОсновногоОкна(
РежимОсновногоОкнаКлиентскогоПриложения.ПолноэкранноеРабочееМесто
);
Проанализировав все эти шаги, мы можем сделать интерфейс приложения удобным, а работу с внешним оборудованием — стабильной и независимой от специфики COM-технологий на мобильных устройствах.