Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

определить зону по адресу в 1С

определить зону по адресу в 1С
Я
   lero84
 
10.10.18 - 11:36
Здравствуйте!
Есть Управление торговлей и взаимоотношениями с клиентами (CRM), редакция 2.0 (2.0.19.20). Необходимо определять зону доставки по адресу. Цену мы определять хотим сами.
У Яндекса есть конструктор карт, думаю там отрисовать зоны и проверять как-то попадание.
может есть другие варианты решения,  более простые.
Подскажите пожалуйста
 
 
   DeeK
 
1 - 10.10.18 - 11:48
насколько мне известно пользование шо гугловскими шо яндексовыми картами платно
   arsik
 
2 - 10.10.18 - 11:52
(0) У нас так реализовано. Работает. Зоны рисует человек в яндекс картах. Потом зоны загружаются в 1С. Далее 1С уже проверяет какой зоне принадлежит точка.
(1) Яндекс бесплатно, до определенного предела. Не помню сколько запросов в месяц.
   DeeK
 
3 - 10.10.18 - 12:02
(2) 25000 в день, но
"Бесплатная версия API не предназначена для проектов с ограниченным доступом, например, когда он раздается по приглашениям или открыт только для сотрудников внутри компании."
   Cyberhawk
 
4 - 10.10.18 - 12:03
Есть сервис преобразования адреса в координаты
   Cyberhawk
 
5 - 10.10.18 - 12:03
Зная координаты точки и координаты границ зоны ты уже сам без всякого сервиса определишь попадание точки внутрь
   arsik
 
6 - 10.10.18 - 12:14
(5) Ну да. Там само сложное по адресу координаты получить.
   Cyberhawk
 
7 - 10.10.18 - 12:32
(6) https://tech.yandex.ru/maps/geocoder/
Стоимость для коммерсов от 120 тыр в год
   lero84
 
8 - 10.10.18 - 13:02
всем спасибо огромное! координаты адреса получить получилось, но как зоны загрузить в 1С, или как понять координаты границ зоны..
   arsik
 
9 - 10.10.18 - 13:13
(8) Вот так попробуй. Это в 8.1. Ну и в принципе этот кусок - рыба. Разберешься я думаю.
Функция ЗагрузитьКартуОнлайн()
    локСервер = "api-maps.yandex.ru";
    Соединение = кцРаботаСИнтернет.СоздатьHTTPСоединение(локСервер,,,,,Истина);
    локИмяФайла = ПолучитьИмяВременногоФайла();
    локТФ = Новый ТекстовыйДокумент;
    
    кцРаботаСИнтернет.HTTPСоединениеПолучить(Соединение,"services/constructor/1.0/js/?sid="+СокрЛП(ИД),локИмяФайла);
    локТФ.Прочитать(локИмяФайла,КодировкаТекста.UTF8);
    СтруктураСтрокой = ПолучитьСтруктуруСтрокой(локТФ.ПолучитьТекст());
    
    ТекстОшибки = "";
    СтруктураКарты = ПроцедурыОбменаССайтом.JSONparse(СтруктураСтрокой,ТекстОшибки);
    Если ТекстОшибки<>"" Тогда
        Сообщить("Ошибка разбора JSON: "+ТекстОшибки);
        Возврат Ложь;
    КонецЕсли;
    
    Для Каждого Полигон из СтруктураКарты.geoObjects.features Цикл
        Если Полигон.geometry.type = "Polygon" Тогда
            СтрокаТаблицы = дРайонов.Строки.Добавить();
            СтрокаТаблицы.ИмяПолигона = СокрЛП(Полигон.properties.name);
            для Каждого Вершина из Полигон.geometry.coordinates[0] Цикл
                СтрокаКоординат = СтрокаТаблицы.Строки.Добавить();
                СтрокаКоординат.Долгота = Вершина[0];
                СтрокаКоординат.Широта = Вершина[1];
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Истина;
КонецФункции

   Cyberhawk
 
10 - 10.10.18 - 13:14
(8) Если точка левее правой границы зоны и правее левой границы зоны и выше нижней границы зоны и ниже верхней границы зоны тогда бинго конецесли
 
 Рекламное место пустует
   arsik
 
11 - 10.10.18 - 13:16
+(9) Вот еще без этого куска будет непонятно. Криво конечно, но работает.
Функция ПолучитьСтруктуруСтрокой(ТекстДЖ)
    Начало = Найти(ТекстДЖ,"""maps"":[{");
    врСтр = Сред(ТекстДЖ,Начало);
    Стек = 0;
    счВсего = СтрДлина(врСтр);
    Для сч = 1 по счВсего Цикл
        смв = Сред(врСтр,сч,1);
        Если смв = "[" Тогда 
            Стек = Стек+1;
        ИначеЕсли смв = "]" Тогда 
            Стек = Стек-1;
            Если Стек = 0 Тогда
                Прервать;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    возврат Сред(врСтр,9,сч-1);
КонецФункции

   arsik
 
12 - 10.10.18 - 13:17
(10) Неверно. Вот верный вариант.
http://catalog.mista.ru/public/166497/
   Cyberhawk
 
13 - 10.10.18 - 13:21
(12) Не подходит под условия в (5)
   arsik
 
14 - 10.10.18 - 13:26
(13) С чего это? Чем не подходит то?
Но на самом деле сейчас мы этим, комплексным анализом, не пользуемся. Внутренняя web апи есть, которая связана с посгресной базой. У постгреса есть спец таблицы для геокоординат и запросы к ним быстрее делаются.
Ну и при комплексном анализе нужно было проверять все области. Т.к. одна область могла входить в другую. В постгресе все по щелчку пальца, + выдает все области попадания, допустим, с сортировкой по площади.
   arsik
 
15 - 10.10.18 - 13:32
+(14) Что бы было понятно. Если точка внути "района города", постгре выдаст все 3 области, например по возрастанию площади.
https://i.imgur.com/nGSCJlK.png
   Cyberhawk
 
16 - 10.10.18 - 13:41
(14) "сам без всякого сервиса"
   Cyberhawk
 
17 - 10.10.18 - 13:45
А что за "внутренняя веб апи", локальный сервис что ли какой?
   arsik
 
18 - 10.10.18 - 13:51
(16) Комплексный анализ и работает сам без всякого сервиса, только координаты точки через сервис получаем. А далее уже с загруженными ранее полигонами работаем. Технология вот отсюда https://habr.com/post/125356/. Просто на 1С код портирован.
(17) Веб-приложение (http-сервис в терминах 1С) прикрученное к постгресной базе. На входе адрес, на выходе зоны в json.
   Cyberhawk
 
19 - 10.10.18 - 13:53
(18) Ага, теперь понял, спс. Географические зоны 1С помню что УГ какое-то в этом плане.
   arsik
 
20 - 10.10.18 - 14:03
(19) обработка в (12) не пользуется географическими зонами. Изначально мы пробовали - но это какое то говнище.
Там 1 функция. На входе - координаты вершин полигона и координаты точки. На выходе - булево.
   Cyberhawk
 
21 - 10.10.18 - 14:03
(20) Я понял. Про географические зоны просто упомянул из того, что вспомнил о них - впечатление схожее )
   lero84
 
22 - 12.10.18 - 10:59
(20) Большое спасибо Вам и всем кто принимал участие!!
все поняла, уже в разработке. а то не знала как подступится к задаче)
Посылаю лучи добра и радости!!!


Список тем форума
Рекламное место пустует  Рекламное место пустует
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует