Содержание:
1. Геопозиция в системе конфигурации 1С
2. Как настроить определение клиентского адреса в системе программы 1С
1. Геопозиция в системе конфигурации 1С
В данной статье будет описано то, как работать с координатами в системе 1С, которые используются в определении геопозиции. Для начала, рассмотрим то, как происходит реализация, в формах клиентских команд, геопозиции. Необходимо создать обработчик клиента для команды «ПоказатьНаКарте», чтобы увидеть локацию клиента, согласно адресу, на карте. Заполнить обработчик необходимо так, как демонстрируется на примере программного кода ниже:
&НаКлиенте
Процедура ПоказатьКарту(Команда)
Координаты = ПолучитьКоординатыКлиента();
Если Координаты <> Неопределено Тогда
ПоказатьНаКарте(Координаты);
Иначе
// Сообщим пользователю о том, что информация не консистентна
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не заполнены поля, описывающие адрес клиента!";
Сообщение.Поле = "Объект.Страна";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
Первым делом, внутри обработчика, нужно обратиться к функции «ПолучитьКоординатыКлиента», с её помощью система получит координаты местоположения клиента.
Далее следует выполнить метод «ПоказатьНаКарте()», в нём будут переданы координаты. А для, непосредственно, отображения места на карте система программы 1С задействует карты Google Maps, в мобильной системе 1С обращение к картам идёт «прямо», без дополнительных установок.
В случае, когда координаты не были определены, это означает, что у клиента не были прописаны реквизиты, тогда появится сообщение об ошибке.
Далее представлен пример программного кода с использованием функции «ПолучитьКоординатыКлиента»:
&НаКлиенте
Функция ПолучитьКоординатыКлиента()
Координаты = Неопределено;
Если Объект.Широта <> 0 ИЛИ Объект.Долгота <> 0 Тогда
Координаты = Новый ГеографическиеКоординаты(Объект.Широта, Объект.Долгота);
Иначе
СтруктураДанныхАдреса = Новый Структура();
СтруктураДанныхАдреса.Вставить("Страна",Объект.Страна);
СтруктураДанныхАдреса.Вставить("Город",Объект.Город);
СтруктураДанныхАдреса.Вставить("Улица",Объект.Улица);
СтруктураДанныхАдреса.Вставить("Дом",Объект.Дом);
ДанныеАдреса = Новый ДанныеАдреса(СтруктураДанныхАдреса);
Координаты = ПолучитьМестоположениеПоАдресу(ДанныеАдреса);
КонецЕсли;
Возврат Координаты;
КонецФункции
В этой функции важно то, что б были заполнены данные «Широта» и «Долгота», на основе которых создаётся объект «ГеографическиеКоординаты».
Для случая, когда эти данные не были заполнены, необходимо создать структуру, которая будет иметь следующие поля: «Страна», «Город», «Улица», «Дом», - их нужно заполнить, в соответствии с клиентским адресом. Дальше, основываясь на структуре, нужно создать объект «ДанныеАдреса». Для наиболее конкретного описания и определения местонахождения, желательно заполнить поля «Индекс» и «Регион». Далее воспользуемся методом «ПолучитьМестоположениеПоАдресу()», после чего будут получены координаты локации клиента по адресу его нахождения, которые располагаются внутри объекта «ДанныеАдреса».
Для наглядности, рассмотрим работу данного функционала на планшете, для этого нужно запустить клиентскую форму, далее в функциональном меню запускаем командную группу «Геопозицирование», после чего, обращаемся к команде «Показать на карте». Результатом данных операций будет следующее, как показано на скриншоте с примером ниже:
Показать на карте
В данном примере клиент имел только адрес, без координат. В случае, если клиент имеет заполненные координаты, то на карте будут отображены лишь они.
Стоит отметить, что для того, чтобы команды выполнялись необходимо, чтобы в планшете, во вкладке «Местоположение» были проставлены нужные настройки, которые продемонстрированы на скриншоте ниже:
2. Как настроить определение клиентского адреса в системе программы 1С
Далее рассмотрим как сделать так, что б можно было определить клиентский адрес, зная его координаты. Для данной процедуры нужно создать обработчик клиента к команде «ИспользоватьТекущееМестоположение» и внести данные, как показано далее:
&НаКлиенте
Процедура ИспользоватьТекущееМестоположение(Команда)
Провайдер = СредстваГеопозиционирования.ПолучитьСамогоЭнергоЭкономичногоПровайдера();
Если СредстваГеопозиционирования.ОбновитьМестоположение(Провайдер.Имя, 60) Тогда
ДанныеМестоположения = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
ДанныеАдреса = ПолучитьАдресПоМестоположению(ДанныеМестоположения.Координаты);
Если ДанныеАдреса <> Неопределено Тогда
Объект.Страна = ДанныеАдреса.Страна;
Объект.Город = ДанныеАдреса.Город;
Объект.Улица = ДанныеАдреса.Улица;
Объект.Дом = ДанныеАдреса.Дом;
Объект.Широта = ДанныеМестоположения.Координаты.Широта;
Объект.Долгота = ДанныеМестоположения.Координаты.Долгота;
Модифицированность = Истина;
Иначе
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не удалось установить адрес по местоположению!";
Сообщение.Сообщить();
КонецЕсли;
Иначе
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не удалось получить данные от провайдера геопозиционирования!";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
В данном обработчике, при помощи контекстного свойства «СредстваГеопозицированния», будет получено разрешение к инструментам по геопозиции.
При помощи метода «ОбновитьМестоположение()» отправляем наименование провайдера по геопозицированию, после чего провайдер определит текущую информацию о локации клиента. Далее выполняем метод «ПолучитьПоследнееМестоположение()», этот метод имеет свойство «Координаты», которое содержит текущие координаты клиента. При помощи данных координат, воспользовавшись методом «ПолучитьАдресПоМестоположению()», будет получен адрес в объектном виде «ДанныеАдреса», в нём адрес будет описан, как структура.
Далее нужно внести информацию по реквизитам, аналогично заполняются реквизиты с координатами. В случае, когда в структуре «ДанныеАдреса» нет определения, то необходимо вывести окно об ошибке.
Также, очень удобной будет команда, которая через карты прокладывает путь от местонахождения курьера до локации, в которой находится клиент. Чтобы реализовать данную команду, нужно создать обработчик для клиента для команды «ПроложитьМаршрут», как демонстрируется на примере программного кода ниже:
&НаКлиенте
Процедура ПроложитьМаршрут(Команда)
ДанныеМестоположения = Неопределено;
Провайдер = СредстваГеопозиционирования.ПолучитьСамогоЭнергоЭкономичногоПровайдера();
Если СредстваГеопозиционирования.ОбновитьМестоположение(Провайдер.Имя, 60) Тогда
ДанныеМестоположения = СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
КонецЕсли;
Если ДанныеМестоположения = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не удалось установить текущее местоположение!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
КоординатыКлиента = ПолучитьКоординатыКлиента();
Если КоординатыКлиента = Неопределено Тогда
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не удалось установить расположение клиента!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Запуск = Новый ЗапускПриложенияМобильногоУстройства("android.intent.action.VIEW", "http://maps.google.com/maps?saddr=" + XMLСтрока(ДанныеМестоположения.Координаты.Широта) + "," + XMLСтрока(ДанныеМестоположения.Координаты.Долгота) + "&daddr=" + XMLСтрока(КоординатыКлиента.Широта) + "," + XMLСтрока(КоординатыКлиента.Долгота));
Запуск.Запустить(Ложь);
КонецПроцедуры
Рассмотрим то, как будет работать данная функция для планшета. Для этого, запустим клиентскую форму и выберем команды по геопозицированию, после чего обращаемся к команде «Проложить маршрут», результат будет следующий:
Проложить маршрут
Стоит отметить, что для выполнения действий по нахождению местоположения и маршрута, на устройстве должен быть выход в Интернет.
В данной статье было рассмотрено то, как в системе 1С получать координаты, зная адрес клиента, как определять адрес, зная координаты, а также как сделать так, что от курьера до клиента будет проложен маршрут.
Специалист компании "Кодерлайн"
Айдар Фархутдинов