При разработке мобильных решений на платформе 1С:Предприятие разработчики часто сталкиваются с парадоксальной ситуацией: при наборе текста в редакторе модулей объект СредстваМультимедиа успешно определяется, контекстная подсказка выводит доступные методы и свойства, но при попытке сохранить модуль или запустить синтаксическую проверку система выдает ошибку: «Переменная не определена (СредстваМультимедиа)».
Проанализируем ситуацию, выясним внутренние причины такого поведения платформы и разберем по шагам надежные способы устранения этой проблемы.
Главная причина кроется в разделении контекстов выполнения и синтаксического контроля в среде разработки. Контекстная подсказка Конфигуратора берет информацию из глобального словаря типов платформы, где объект СредстваМультимедиа зарегистрирован. Однако физически этот объект доступен исключительно на стороне мобильного клиента или в автономном мобильном приложении.
Когда мы нажимаем кнопку сохранения или запускаем проверку модуля, встроенный компилятор проверяет код поочередно для всех вариантов клиентов, которые активны в конфигурации (включая обычный тонкий клиент, толстый клиент и сервер). Поскольку в среде стандартного ПК-клиента объекта СредстваМультимедиа не существует, платформа прерывает компиляцию и сообщает о неопределенной переменной.
Рассмотрим основной способ решения, который позволяет явно указать платформе, в каком контексте должен компилироваться блок работы с мультимедиа. Ограничим код директивами препроцессора, проверяющими мобильную среду.
Посмотрим на пример правильного оформления кода:
#Если МобильныйКлиент ИЛИ МобильноеПриложениеКлиент Тогда
// Код работы с камерой, аудиозаписью или сканированием
Если СредстваМультимедиа.ПоддерживаетсяФотоснимок() Тогда
// Вызов методов мультимедиа
КонецЕсли;
#КонецЕсли
Благодаря такой конструкции синтаксический анализатор Конфигуратора при эмуляции работы тонкого или толстого клиента для ПК просто пропустит этот блок кода, и модуль успешно сохранится без ошибок.
Если проект разрабатывается исключительно как мобильное приложение и никогда не будет работать на десктопных рабочих станциях, разберем системные настройки структуры метаданных:
Назначение использования. Если там указано значение «Персональный компьютер и мобильное устройство» или «Персональный компьютер», переключим его на «Мобильное устройство». Это отключит лишние проверки для ПК-платформ.Клиент (управляемое приложение) и убедимся, что установлены флаги Клиент (мобильное приложение) или Мобильный клиент.Рассмотрим подробнее, как отключить избыточный контроль непосредственно в среде разработки, если менять структуру метаданных нежелательно:
Тонкий клиент, Сервер, Толстый клиент) и оставим активными только Мобильное приложение-клиент и Мобильный клиент.Даже после успешного прохождения синтаксической проверки важно учитывать особенности выполнения кода на реальных устройствах:
СредстваМультимедиа.ПоддерживаетсяФотоснимок(), СредстваМультимедиа.ПоддерживаетсяАудиозапись() или СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихкодов().ПоказатьСделатьФотоснимок()), так как блокирующие модальные окна в мобильной среде не поддерживаются.