Как исправить ошибку «Тип не определен (ДанныеАдреса)» в мобильном приложении 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке мобильных приложений на платформе 1С часто возникает необходимость работать с картами и геопозиционированием. Однако при попытке программно получить координаты объекта по его адресу разработчики могут столкнуться с ошибкой: «Тип не определен (ДанныеАдреса)».

Проанализируем причину этой проблемы, разберем по шагам её решение, а также рассмотрим важные нюансы работы с геоданными и варианты построения маршрутов на карте.

Выясним причину ошибки

Специализированные типы и функции для работы с геопозиционированием — такие как ДанныеАдреса, ГеографическиеКоординаты, ПолучитьМестоположениеПоАдресу() и ПоказатьНаКарте() — доступны исключительно на стороне клиента мобильного устройства.

Если код исполняется на сервере, на обычном тонком клиенте для ПК или вне клиентского контекста мобильного приложения, платформа 1С просто «не знает» о существовании типа ДанныеАдреса. В результате компилятор выдает ошибку о неопределенном типе.

Решение проблемы: ограничение контекста выполнения

Для устранения ошибки необходимо явно указать платформе, что данный участок кода должен компилироваться и выполняться только в контексте мобильного клиента. Для этого используем инструкции препроцессора #Если МобильноеПриложениеКлиент Тогда или #Если МобильныйКлиент Тогда.

Рассмотрим правильный пример написания кода:


Координаты = Неопределено;

#Если МобильноеПриложениеКлиент Тогда
    СтруктураАдреса = Новый Структура();
    СтруктураАдреса.Вставить("Страна", Объект.Страна);
    СтруктураАдреса.Вставить("Город", Объект.Город);
    СтруктураАдреса.Вставить("Улица", Объект.Улица);
    СтруктураАдреса.Вставить("Дом", Объект.Дом);

    ДанныеАдреса = Новый ДанныеАдреса(СтруктураАдреса);
    Координаты = ПолучитьМестоположениеПоАдресу(ДанныеАдреса);
#КонецЕсли

Если Координаты <> Неопределено Тогда
    ПоказатьНаКарте(Координаты);
Иначе
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "Не заполнены поля, описывающие адрес клиента!";
    Сообщение.Поле = "Объект.Страна";
    Сообщение.Сообщить();
КонецЕсли;

Дополнительные настройки платформы и мобильного устройства

Помимо корректного контекста исполнения кода, обратим внимание на обязательные условия для работы геокодирования:

  1. Разрешения в конфигурации: В свойствах конфигурации в разделе «Используемая функциональность мобильного приложения» необходимо проверить наличие флага «Геопозиционирование». Без этой настройки сборка приложения не будет иметь доступа к геослужбам ОС.
  2. Наличие интернет-соединения: Метод ПолучитьМестоположениеПоАдресу() делает запрос к внешним картографическим сервисам операционной системы. Если на устройстве отсутствует интернет, метод вернет Неопределено.
  3. Полнота адреса: Для более точного определения координат рекомендуется добавлять в структуру адреса не только страну, город и улицу, но и поле "Регион" (область или край).

Способы построения маршрутов между точками

Если задача мобильного приложения не ограничивается отображением одной точки, а требует построения маршрута между двумя и более точками, рассмотрим основные практические подходы:

  1. Вызов внешних навигаторов через URL-схемы (Deeplinks):

    С помощью глобального метода ЗапуститьПриложение() можно передать сформированную ссылочную команду внешнему приложению (например, Яндекс.Навигатору, Яндекс.Картам или Google Maps) с координатами начальной и конечной точек. Операционная система перенаправит пользователя в установленный навигатор, где автоматически построится маршрут.

  2. Встраивание карты через Поле HTML-документа:

    На управляемую форму добавляется элемент с типом Поле HTML-документа. В него загружается веб-страница с подключенным API карт (Яндекс.Карты API, Google Maps API или Leaflet/OpenStreetMap). Взаимодействие между 1С и JavaScript позволяет передавать координаты и динамически прорисовывать трек прямо внутри формы приложения.

  3. Запросы к REST API картографических сервисов:

    Для расчета расстояния и получения точек маршрута без показа графической карты используются объекты HTTPСоединение и HTTPЗапрос. Сервис возвращает данные в формате JSON, которые затем обрабатываются алгоритмами 1С.

← На главную