В процессе разработки в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда после разового включения опций мобильного клиента конфигуратор начинает «засыпать» сообщениями об ошибках синтаксиса. Это происходит потому, что платформа пытается скомпилировать код для контекста мобильного приложения, где многие привычные объекты и методы (например, БизнесПроцессы, ПланыСчетов или функция ЗначениеВСтрокуВнутр) попросту не поддерживаются. Даже если вы уже убрали галочки в ролях или свойствах, ошибки могут продолжать сыпаться при каждом обновлении конфигурации базы данных.
В этой статье мы подробно разберем, как полностью избавить конфигуратор от «фантомных» проверок мобильного клиента. Мы пройдем путь от простых настроек интерфейса до глубокой очистки кэша и правильного использования инструкций препроцессора.
Первым делом нам необходимо прояснить важный технический момент: настройки, которые мы видим в меню Сервис — Параметры, и настройки в меню Конфигурация — Проверка конфигурации — это два разных механизма. Параметры редактора отвечают за «подсветку» ошибок в окне модуля в реальном времени. Глобальная же проверка запускается при обновлении базы данных (клавиша F7) или принудительно из меню.
Рассмотрим по шагам, как настроить именно глобальную проверку:
Зачастую именно этот шаг является решающим, так как настройки глобальной проверки сохраняются внутри информационной базы и не всегда синхронизируются с общими параметрами конфигуратора.
Если предыдущий шаг не помог, проанализируем свойства самого верхнего узла в дереве метаданных. У конфигурации есть фундаментальное свойство, определяющее целевую среду исполнения кода.
Разберем алгоритм действий:
Иногда проблема кроется глубже — в свойствах конкретных объектов метаданных. Посмотрим на ситуацию глазами платформы: если у вас есть общий модуль (например, ОбменДаннымиПовтИсп), в свойствах которого установлен флаг Мобильный клиент, 1С обязана проверить его на синтаксическую корректность для этой среды.
Проделаем следующие действия:
Клиент (управляемое приложение), Сервер, Внешнее соединение и т.д.В некоторых случаях нам действительно нужно, чтобы модуль был доступен на мобильном клиенте, но часть его кода (например, работа со сложными бухгалтерскими объектами) там не должна выполняться. Для этого мы используем инструкции препроцессора. Это единственный надежный способ «заткнуть» синтакс-проверку на программном уровне.
Рассмотрим пример кода, который вызывает ошибку:
// Этот код вызовет ошибку в мобильном клиенте
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, БизнесПроцессы.ТипВсеСсылки().Типы());
Чтобы платформа игнорировала этот участок при проверке под мобильный клиент, обернем его в специальную конструкцию:
#Если Не МобильныйКлиент Тогда
// Данный блок будет полностью проигнорирован компилятором мобильного клиента
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, БизнесПроцессы.ТипВсеСсылки().Типы());
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(Результат, ПланыСчетов.ТипВсеСсылки().Типы());
#КонецЕсли
Аналогично поступим с системными функциями, которых нет в мобильной платформе, такими как ЗначениеВСтрокуВнутр:
#Если Не МобильныйКлиент Тогда
СтрокаДерева.Идентификатор = ЗначениеВСтрокуВнутр(СтрокаДерева.Ссылка);
#Иначе
// Альтернативный вариант для мобилок, если нужно
СтрокаДерева.Идентификатор = Строка(СтрокаДерева.Ссылка);
#КонецЕсли
На некоторых релизах платформы (например, ветка 8.3.12) наблюдается баг, при котором настройки «залипают». В этом случае помогает метод «шоковой терапии» для конфигуратора.
Выполним последовательность действий для сброса внутренних флагов:
F7 для применения изменений.F7.Такая манипуляция заставляет платформу принудительно перестроить таблицы соответствия контекстов и зачастую очищает «зависшие» требования к синтаксису.
Если ошибки продолжают появляться, проанализируем влияние расширений. Если в вашу базу подключено расширение, в свойствах которого указано Назначение использования: Мобильный клиент, то основная конфигурация будет проверяться с учетом этого контекста. Проверьте все активные расширения и при необходимости измените их свойства.
Напоследок выполним глубокую очистку кэша конфигуратора:
/ClearCache через командную строку.%AppData%\1C\1cv8).Применяя эти методы комплексно — от настройки диалоговых окон до изоляции кода инструкциями препроцессора — мы сможем полностью избавиться от нежелательных уведомлений и сосредоточиться на разработке основного функционала приложения.