При разработке мобильных приложений на платформе 1С:Предприятие разработчики часто сталкиваются со специфическими ошибками компиляции и исполнения. Наиболее распространенные из них связаны с тем, что среда разработки (Конфигуратор) или исполняющая среда не могут определить некоторые системные переменные, методы или перечисления. Разберем подробно, почему возникают ошибки с неопределенностью переменной ВариантСобытияЗвонкаСредствТелефонии и метода НачатьУстановкуВнешнейКомпоненты, как правильно настроить разрешения телефонии и обойти ограничения эмуляторов мобильных устройств.
Системное перечисление ВариантСобытияЗвонкаСредствТелефонии предназначено исключительно для работы в рамках мобильной платформы 1С. Оно используется для определения состояния звонка (например, входящий, исходящий, звонок завершен) при обработке событий телефонии.
Если вы пытаетесь запустить код или проверить его синтаксис в обычном настольном клиенте (тонком, толстом или в самом Конфигураторе без специальных настроек), платформа выдаст ошибку: «Переменная не определена (ВариантСобытияЗвонкаСредствТелефонии)». Настольная версия платформы 1С:Предприятие просто «не знает» о существовании этого перечисления, так как на стационарных ПК нет встроенных средств мобильной телефонии.
Для решения этой проблемы проанализируем структуру нашего кода и применим инструкции препроцессора. Весь код, взаимодействующий с мобильными функциями, необходимо строго ограничивать директивами компиляции:
#Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда
// Здесь размещается код работы с телефонией
ПараметрыЗвонка = ВариантСобытияЗвонкаСредствТелефонии.Прием;
#КонецЕсли
Также важно правильно настроить сам Конфигуратор для проверки синтаксиса. Выполним следующие шаги:
Метод НачатьУстановкуВнешнейКомпоненты является асинхронной процедурой глобального контекста. Ошибка его неопределенности чаще всего связана с неверным контекстом вызова или устаревшим режимом совместимости конфигурации.
Выясним основные причины этой ошибки:
&НаСервере), платформа выдаст ошибку. Перенесите код строго в процедуры с директивой &НаКлиенте.Даже если код написан без синтаксических ошибок, при запуске приложения на мобильном устройстве функции телефонии могут не работать. Это происходит из-за политики безопасности мобильных операционных систем (Android и iOS), которые требуют явного согласия пользователя и настройки разрешений со стороны приложения.
Разберем по шагам, как предоставить мобильному приложению 1С доступ к функциям телефонии:
Если эти свойства не будут отмечены, операционная система Android заблокирует любые попытки приложения обратиться к звонкам, что приведет к аварийному завершению работы или ошибке доступа.
Часто разработчики пытаются протестировать функции набора номера или обработки звонков внутри виртуальных машин (например, через встроенный эмулятор Android Studio или сторонние эмуляторы вроде Nox, BlueStacks, VMware).
Важно понимать: большинство виртуальных машин по умолчанию не эмулируют работу полноценного сотового модуля связи (GSM). На таких устройствах нет SIM-карты, поэтому системные вызовы телефонии будут возвращать пустые значения или вызывать ошибки.
Рассмотрим пример кода, который позволяет программно проверить, поддерживает ли текущее устройство функции телефонии, прежде чем вызывать связанные с ними методы:
#Если МобильноеПриложениеКлиент ИЛИ МобильныйКлиент Тогда
Если СредстваТелефонии.ПоддерживаетсяОбработкаЗвонков() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Обработка звонков поддерживается на данном устройстве!";
Сообщение.Сообщить();
Иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Внимание: Обработка звонков НЕ поддерживается!";
Сообщение.Сообщить();
КонецЕсли;
Если СредстваТелефонии.ПоддерживаетсяНаборНомера() Тогда
// Код для набора номера телефона
КонецЕсли;
#КонецЕсли
Если при запуске этого кода на эмуляторе вы получаете сообщение о том, что функции не поддерживаются, это означает, что отладку данного функционала необходимо перенести на реальное физическое Android-устройство с установленной SIM-картой. Отладка на живом устройстве — это единственный надежный способ убедиться в работоспособности модулей телефонии.
В процессе финальной сборки приложения в файлы .apk (для Android) разработчики иногда сталкиваются со сбоями в работе утилиты "Сборщик мобильных приложений 1С" (особенно при использовании виртуальных сред сборки на базе VMware Player).
Проанализируем основные причины сбоев сборщика и способы их устранения:
Соблюдение правил контекстной разработки, своевременная проверка поддерживаемости функций через объект СредстваТелефонии и правильная настройка прав в свойствах мобильного приложения позволят вам избежать большинства проблем при интеграции телефонии в решения на платформе 1С.