gifts2017

Автозаполнение адресов в 1С (API Google autocomplete place)

Опубликовал Олександр (d.alexandr) в раздел Программирование - Практика программирования

В данной статье вы увидите пример, как можно с помощью API Google autocomplete place делать подсказки при заполнении адреса

В данной статье мы разберем, как можно с помощью API Google Адресов делать подсказки при заполнении адресов в 1С, например, в заказе клиента "Адрес доставки".
С документацией от google вы можете ознакомиться здесь

Первое, что нам нужно сделать - это получить API key, как это сделать, вы сможете прочитать в документации от гугл, к сожалению, в гугл есть лимит на использования API, и изначально этот лимит 1000 запросов в день, что очень мало, но после подтверждения личности лимит увеличивается до 150000 запросов в день, чего более чем достаточно.

Для того, чтобы у нас в поле "Адрес" появлялись подсказки при вводе текста, на поле необходимо установить событие "АвтоПодбор".

&НаКлиенте
Процедура АдресАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)

Если ЗначениеЗаполнено(Текст) Тогда
autocompletePlaceGoogle(Текст, ДанныеВыбора, СтандартнаяОбработка); 
КонецЕсли;

КонецПроцедуры

Теперь самое основное, опишем процедуру autocompletePlaceGoogle.

Процедура autocompletePlaceGoogle(пАдрес, списокАдресов, СтандартнаяОбработка) Экспорт

СтандартнаяОбработка = Ложь;
//&components=country:ua отбор по стране
ПреобразованныйАдрес = "/maps/api/place/autocomplete/json?input=" + пАдрес + "&types=address&language=ru&key=" + getAPIKeyGoogle();

Соединение = Новый HTTPСоединение("maps.googleapis.com",,,,,,Новый ЗащищенноеСоединениеOpenSSL);

ОтветСервера = Соединение.Получить(Новый HTTPЗапрос(ПреобразованныйАдрес)).ПолучитьТелоКакСтроку();

JSON = Новый ЧтениеJSON;
JSON.УстановитьСтроку(ОтветСервера);

jsonОтвет = ПрочитатьJSON(JSON);

Если НЕ jsonОтвет.Свойство("predictions") ИЛИ НЕ jsonОтвет.Свойство("status") Тогда 
Возврат;
КонецЕсли;

predictions = jsonОтвет.predictions;
status = jsonОтвет.status;

Если status <> "OK" Тогда 
Возврат;
КонецЕсли;

списокАдресов = Новый СписокЗначений;
Для Каждого найденныйАдрес ИЗ predictions Цикл

списокАдресов.Добавить(найденныйАдрес.description);

КонецЦикла; 

КонецПроцедуры // Autococomplete()

Вот такая вот простенькая процедура, но при этом может быть для некоторых очень даже полезная.

Источник

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артур Коржан (1v7) 19.10.15 13:02
Рабочая идея. Главное - нужная.+
baracuda; ppeskov; +2 Ответить
2. Пользователь Инфостарта (infostart user) 19.10.15 14:31
3. kiruha Дронов (kiruha) 19.10.15 16:35
Интересно, но используется 8.3 в коде. На 8.2 можно отредактировать ?
4. Олександр (d.alexandr) 19.10.15 16:50
(3) не получится, так как HTTP-запросы появились в 8.3. Разве что форму сделать как HTML документ и использовать javascript.
5. Александр Анисков (vandalsvq) 19.10.15 19:32
(4) d.alexandr, winhttprequest можно использовать хоть в 8.1, парсер/сериализатор JSON есть здесь на ИС. Так что можно реализовать и в более ранних версиях платформы. Никакого js не понадобится
6. Олександр (d.alexandr) 19.10.15 19:58
(5) так дело ж не в парсере, а в HTTP-запросе.
7. Александр Анисков (vandalsvq) 21.10.15 03:26
(6) d.alexandr, я же написал winhttprequest - вот тебе объект для выполнения запросов.
8. Роман Ложкин (webester) 21.10.15 06:21
(4) я вот это юзал еше в 8.1 или я чего то не понял?
9. Евгений (Evgeniy762004) 21.10.15 10:09
У меня почему-то ругается на getAPIKeyGoogle(). Мол нет такой функции. Версия платформы - 8.3.6.2014. И подскажите пожалуйста какой из пунктов из Google Maps APIs использовать для получения нужного ключа?
10. Олександр (d.alexandr) 21.10.15 11:28
(8) да, действительно можно сделать и так (спасибо что подсказали), единственный минус что постоянно будет происходить запись в файл.
11. Олександр (d.alexandr) 21.10.15 11:32
(9) это функция которая возвращает ключ API:
Функция getAPIKeyGoogle()

Возврат "Ваш ключ API";

КонецФункции // getAPIKeyGoogle()

Почитайте документацию по Google Places API Web Service
12. Олександр (d.alexandr) 21.10.15 11:56
(7) извините, сразу не увидел)
13. Программулькин (Программулькин) 21.10.15 12:05
Ог(9) Evgeniy762004,
Ога, тоже "на getAPIKeyGoogle()" ругается, автор хде на getAPIKeyGoogle() ??
14. Сергей Пшеничников (Зеленоград) 21.10.15 12:11
А для стабильной платформы есть аналогичное?
15. Олександр (d.alexandr) 21.10.15 12:13
(13) выше уже описал, что это всего лишь функция которая возвращает ваш api ключ
16. Олександр (d.alexandr) 21.10.15 12:14
(14) все зависит от того какая для вас платформа стабильная? я например сейчас работаю с 8.3.5.1248
17. Программулькин (Программулькин) 21.10.15 12:15
(11) d.alexandr,
Есть реальный готовый пример?
а то
"error_message" : "This service requires an API key.",
"predictions" : [],
"status" : "REQUEST_DENIED"
не айс....а читать "Почитайте документацию по Google Places API Web Service"
пока ленно... а попробовать охота...
18. Олександр (d.alexandr) 21.10.15 12:48
(17) извините, но свой ключ я здесь публиковать не буду и на это есть причины. А в чем сложность прочитать здесь документацию https://developers.google.com/places/web-service/intro?hl=ru#Authentication и создать свой ключ? Это займет максимум 10 минут.
19. Олександр (d.alexandr) 21.10.15 12:54
если вдруг кто-то не понял, getAPIKeyGoogle() это функция которая возвращает строку с API key, то есть можно написать так:
ПреобразованныйАдрес = "/maps/api/place/autocomplete/json?input=" + пАдрес + "&types=address&language=ru&key=" + "Ваш API key";
20. Сергей Пшеничников (Зеленоград) 21.10.15 12:59
21. Олександр (d.alexandr) 21.10.15 13:03
(20) я уже и забыл что есть такая платформа как 7.7))
22. Константин Нагибович (gradi) 22.10.15 10:04
Что бы данный пример заработал, необходимо активировать "Google Places API Web Service" в консоли разработчика Google.
23. Виталий Трач (vitalya24) 02.12.15 01:23
Клево, прикрутил за 20 минут:) спасибо
24. Alex P (alexdarh) 29.08.16 16:50
Добрый день! использовал приведенный код из примера. Все работает, кроме того, что после ввода символа первого и вывода спискавыбора поле очищается, то есть 2,3 и более не ввести.
1С 8.3.8 УФ
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа