Данная обработка создана с целью упростить решение задачи разбиения точек доставки на рейсы логистом ВРУЧНУЮ с использованием карт и сервисов Гугл. Обработка не использует никаких метаданных конфигураций — адреса доставки и данные машин и водителей загружаются из файлов экселя, итоговые маршруты также выгружаются в эксель — поэтому она будет работать на любой конфигурации, использующей управляемые формы и на любой платформе, начиная с 8.3
ВНИМАНИЕ – для работы сервисов Гугл необходим ключ. В данной обработке ЕСТЬ ключ, но он исключительно тестовый, для проверки работы обработки. Как только по нему пройдет первая сотня запросов (т.е. примерно 5 запусков обработки) ключ будет отключен. Поэтому ключ Вы должны получить сами. Подробную инструкцию по получению ключа Гугл я писать не буду, любой айтишник думаю справится с этим без труда. Уточню только то что для нормальной работы обработки к ключу должны быть привязаны три API — Geocoding API, Directions API и Maps JavaScript API и к проекту, по которому получен ключ должны обязательно подключена ОПЛАТА. В режиме без оплаты Гугл эти три сервиса просто НЕ ПРЕДОСТАВЛЯЕТ. Впрочем, вы можете воспользоваться т.н. «тестовым периодом» и получить от Гугл безвозмездный кредит на услуги сервисов в размере 300 долларов. Один запрос к одному сервису стоит 0.14 цента, тысяча запросов соответственно стоят $1.4.
Исходные данные – есть N адресов доставки и K автомобилей с водителями. Требуется разбить все точки доставки по автомобилям и составить маршруты движения для каждого автомобиля. Еще раз напоминаю, что обработка специально сделана без привязки к какой бы то ни было конфигурации, поэтому предполагаем что и адреса и водители загружаются в неё из экселевских файлов.
Структура файлов экселя
- Адреса, колонки – «Контрагент, адрес доставки, адрес отправки, вес груза, объем груза»
- Перевозчики – «Водитель, автомобиль, грузоподъемность, объем кузова»
(образцы файлов есть в архиве)
Открываем обработку, и сразу же на первой вкладке загружаем в нее адреса из файлика с адресами. Если структура файла соответствует образцам, то все загружается без ошибки. Дальше на выбор или проверяем каждый адрес с помощью кнопки «Показать адрес на карте» или нажимаем кнопку «Проверить все адреса без отображения на карте». Во втором случае на карте ничего не показывается, но тем не менее пропустить этот этап нельзя – по этой кнопке каждый адрес геокодируется, определяются его широта и долгота, а также расстояние от точки отправки до точки доставки.
После того, как все точки проверены и геокодированы, в правом верхнем углу нажимаем кнопку «Адреса проверены». Обработка открывает вторую вкладку и начинает добавлять уже проверенные точки на вторую карту – ту, на которой собственно и будет проходить основная работа по созданию маршрутов. Добавление точке проходит довольно медленно – примерно секунда-полторы на каждую точку. За это время можно загрузить из второго экселевского файла список перевозчиков, нажав на кнопку «Загрузить перевозчиков»
Перевозчики загружаются в таблицу слева и каждая строка таблицы раскрашивается в свой цвет. Теперь осталось только подождать пока обработка не сообщит «Все точки добавлены на карту» (в окне сообщений справа), закрыть это окно сообщений и начать разбивать точки по водителям и машинам.
Делается это очень просто – в таблице перевозчиков курсор ставится на строчку с машиной, а на карте мышкой нажимается нужная точка адреса. Она сразу же окрашивается в тот же цвет что и строка таблицы, а в таблице внизу под картой добавляется строка с параметрами точки. Набрав все точки для данного водителя/машины переходим на следующую строчку таблицы перевозчиков и повторяем все процедуру пока не останется ни одной «свободной» точки. Свободные точки отличаются и цветом и (немного) формой маркера, так что перепутать их с уже разнесенными по машинам не получится. Разнесение можно многократно корректировать – то есть точку которую скажем уже разнесли на машину 1, можно спокойно переразнести на машину 3 или 5 – достаточно просто нажать на нее еще раз выбрав в таблице слева третью или пятую строку. При этом из таблицы снизу для первой строки перевозчиков эта точка исчезнет и соответственно добавится в таблицу для строки 3 или 5.
Кроме того, при наборе точек обработка проверяет заполненность машину уже набранными точками – если добавление новой точки превысит вместимость машины по весу или объему добавить её не удастся – точка не окрасится в цвет машины, а вместо этого вы увидите сообщение – «Машина заполнена, выберете другую»
После того как все точки разнесены по машинам, необходимо создать для каждой строки таблицы перевозчиков маршрут на карте. Для этого ставим курсор на строку таблицы и нажимаем внизу под картой кнопку «Показать маршрут на карте». На карте строится маршрут, затем ждем еще 2-3 секунды пока под картой не появятся цифры длины маршрута в км и времени передвижения в часах. Затем передвигаемся на следующую строку и повторяем нажатие кнопки. При нажатии кнопки «Показать маршрут на карте» предыдущий маршрут с карты исчезает, но в данных обработки все характеристики маршрута сохраняются, включая оптимизационное упорядочивание точек маршрута (решение т.н. «задачи коммивояжера») .
После того как все строки таблицы перевозчиков «прощелканы», остается только получить итоговые результаты. Нажимаем кнопку «Выгрузить маршруты в эксель», программа предлагает выбрать каталог для выгрузки. Каждый маршрут выгружается в отдельный файл эксель в виде подробной таблицы этапов движения практически аналогичный инструкциям «навигатора»
1 |
Направляйтесь на юг по пр-д Краснополянский в сторону ул. Ленина |
335,00 |
58,00 |
2 |
Поверните направо на ул. Шереметьевская |
1 331,00 |
99,00 |
3 |
Продолжайте движение по ш. лобненское |
1 687,00 |
185,00 |
4 |
ш. лобненское поворачивает направо и переходит в ул. Авиационная |
1 359,00 |
143,00 |
5 |
Поверните направо на ш. Шереметьевское |
2 898,00 |
161,00 |
6 |
Направляйтесь по съезду в сторону M-11Платная дорога |
1 130,00 |
106,00 |
7 |
На развилке держитесь левее и выезжайте на M-11Платная дорога |
16 599,00 |
733,00 |
8 |
Держитесь левее |
5 220,00 |
280,00 |
9 |
Плавный поворот направо |
557,00 |
61,00 |
10 |
Поверните налево в сторону ш. Дмитровское |
31,00 |
2,00 |
11 |
Поверните направо на ш. Дмитровское |
2 732,00 |
256,00 |
12 |
Продолжайте движение по ул. Бутырская |
1 514,00 |
161,00 |
13 |
Плавный поворот налево, продолжайте движение по ул. Бутырская |
345,00 |
25,00 |
14 |
Сверните на съезд БУТЫРСКИЙ ВАЛ ул. |
56,00 |
10,00 |
15 |
На развилке держитесь правее и следуйте по знакам на 3-е КОЛЬЦО-налево МИРА пр-т |
159,00 |
34,00 |
16 |
Продолжайте движение по пл. Савеловского Вокзала |
87,00 |
30,00 |
17 |
Выезжайте на 3-е кольцо |
6 844,00 |
501,00 |
Всё, на этом работа обработки закончена.
Я прекрасно понимаю, что в таком виде обработка практически бесполезна – она никак не встроена ни в какую реальную учетную систему, загрузка в неё данных из экселя не особенно удобна, а выгруженные из неё данные практически и вовсе бесполезны . Однако на её основе вы сможете создать свои собственные обработки, уже способные «напрямую» работать с вашей текущей учетной системой на основе 1С. Как вариант – вы можете заказать создание такой «персонифицированной под Вас» обработки мне. Пишите, звоните — договоримся.
Каким алгоритмом решается задача коммивояжера?
Не знаю — это делает Гугл при построении маршрута. В запросе на построение маршрута передается параметр — «optimizeWaypoints: true» (оптимизировать порядок точек = истина ) и гугл как-то его оптимизирует.
Я проверял «жадным алгоритмом» — у гугла получается лучше
Спасибо, интересно!
Но для нашей страны Яндекс карты все же более актуальны.
И что такое один запрос?
На показ каждой точки на карте — это запрос? Или группу точек показать можно одним запросом? Или запрос — это расчет маршрута?
Показ одной точки — это один запрос. И расчет маршрута — это один запрос. В среднем один цикл работы обработки с тестовыми параметрами для данной обработки (20 адресов, 8 машин) — это около 50 запросов, что обойдется вам в 7 центов или примерно 4 рубля. Более менее реальные параметры — скажем собственный транспортный цех в 40-60 машин и несколько сотен точек доставки — полное составление маршрутов будет стоить раз в 10 дороже — т.е. рублей 40 ежедневно. Вот такие финансовые затраты на работу обработки
Что касается большей актуальности Яндекса по сравнению с Гуглом, то простите, не могли бы Вы объяснить В ЧЕМ ИМЕННО эта «большая актуальность» проявляется? Я проверял обработку в общей сумме на нескольких тысячах адресов. Гугл не выдал ни одной ошибки геокодирования. Наверное и Яндекс бы не выдал, но чем Гугл хуже, если результат одинаков?
(4)
Информацией о трафике на дорогах.
(5)
При построении маршрутов Яндекс НЕ УЧИТЫВАЕТ информацию о пробках. Не знаю почему, но это так… У компании, в которой я сейчас работаю, есть ключ Яндекса для автоматической разбивки на маршруты, так что я это абсолютно точно знаю. И, кстати необходимость в ручной разбивке возникла у наших логистов именно потому что Яндекс, не учитывая пробки, при автоматической разбивке зачастую не укладывается ни в какие временные нормативы по суммарному времени маршрута — водителю приходится проводить за рулем по 12-14 часов вместо восьми
(6) С трудом верится. Может имеет смысл обратиться в ТП яндекса? Может нужно что-то дополнительно указывать в парметрах или есть другие методы api.
Ну может быть и так, я не совсем в курсе. Этой обработкой занимаюсь не я — у нас в компании восемь программистов, из которых четыре 1с-ника. Попробую завтра уточнить у коллеги-прогера, который отвечает за связь с яндексом — мож он и правда чего-то не доделал. Но логисты ругаются матом на то, что приходит от Яндекса по ключу автоматического разбиения на маршруты…
не знаю как там с автоматическими сервисами, но если вы зайдете вручную в гугл карты, и составите маршрут, то будет выбран оптимальный с учетом пробок на дорогах, так что информация о трафике на дорогах у гугла точно есть
другой вопрос что маршрут строится с учетом ТЕКУЩИХ пробок, а если вы планируете маршрут на день с утра, когда пробок нет, то результат такого планирования предсказать не сложно
(9) Вроде как и у Гугла и у Яндекса есть функция ПРОГНОЗИРОВАНИЯ пробок на определенное время на основе средних показателей за предыдущие периоды. Но если она и есть, я её не нашел и поэтому в этой обработке .не использую.
(8) Разве яндекс не требует мани за API?
Требует. И гугл требует. Я об этом и пишу
А код в обработке открыт ?
P S есть фирмочка кот сидит на 1с 7.7 — хочу попробовать перепелить на семерку
Открыт
коллеги, я тут открываю форму, а у меня поле карты чистенькое. при этом сохраненный макет в файл открывается просто прекрасно и без мата…
догадываюсь, что гдет настройка, но где и какая…
(4)
откуда такие тарифы? Гугл говорит о том, что для запросов до 1 тысячи — бесплатно, а свыше — уже плати…
решение от меня пока не забанили… свой «счетчик» и когда контролька по ключу подбирается к заветной тысяче — ключик автоматически исключается из вариантов.
….
Какие у Вас, сударь, платформа и операционка? Одно должно соответствовать другому. Если у Вас в операционке по умолчанию в качестве браузера используется EDGE, а не IE, то платформа должна быть не ниже 14-ой.
(19) «вот где собака покопалась…» (с) М.С.Г
ось: Вынь2012 и по-умолчанию установлен браузер FireFox, но это браузер профиля. в оси вот поменял.
Платформа ниже 14й. правда.
ситуация не изменилась.
мдя, картина маслом. Проблема устраняется только при открытии в платформе выше. в данном случае 14 и 15.
блин, а в них же глюков…
(21)
Ну извините… моя конторка на 14 платформе уже почти год как — ничего, справляемся.
Кстати, не сочтите за мелочность — вроде как среди списка скачавших мою обработочку Вас нет.
Задача коммивояжера не решает поставленной «задачи разбиения точек доставки на рейсы логистом»
Это классическая задача vehicle routing problemhttps://en.wikipedia.org/wiki/Vehicle_routing_problem является NP сложной = простым перебором не решить
Варианты решения:
https://www.optaplanner.org/ = open source решение
Optaplanner
OpenDoorLogisticshttps://www.opendoorlogistics.com/people/ = еще одно интересное решение на java
строит «оптимальные» маршрутыhttps://maxoptra.ru/ за сравнительно небольшие деньги.
Интересно кто-то использует построение «оптимальных» маршрутов ? и как это все выглядит на практике?
в своё время пытался обобщить опыт вhttps://redmine.kb99.pro/projects/cvrp
но пришел к выводу, что основная проблема «оптимальных маршрутов» находится в плоскости людей принимающих решение = через логистов проходит очень много МЦ и никто не захочет просто так отдать этот сладкий кусок
(23)
Конечно не решает. Я же здесь многократно написал что данная обработка для РУЧНОГО разбиения на машины. А задача коммивояжера работает только для оптимизации маршрута обхода УЖЕ отобранных точек по каждой машине. Обработку разбивки на машины с использованием трех основных алгоритмов (Кларка-Райта, «заметания» и «метода потенциалов») собираюсь выложить в ближайшие пару недель
(24)
И это тоже есть. Но это за пределами зоны ответственности программиста…
Скачал не работает, 1С:Предприятие 8.3 (8.3.15.1747)… Страница не отображается ,hfepth IE =11
Видимо проблема в «несовпадении» операционки (т. е. используемого операционкой эксплорера) и платформы. Какая у Вас платформа? Для IE7 подойдет любая 8.3, а вот для IE =11 платформа должны быть не ниже 8.3.14
8.3.15.1747 ИЕ =11… Хрен пойми что 1С нужно
На сервере и на клиенте браузер по умолчанию ИЕ = 11
Посмотрите настройки безопасности эксплорера. Там используются три сайта (посмотрите в макете Гугл), все они должны быть добавлены в список доверенных сайтов
Загружаю список адресов, становлюсь на строчку, давлю «показать на карте» карта пустая
https://*google.ru
https://*google.com в безопасных узлах на сервере 1С и на терминальном сервере… Я не сомневаюсь что ваша обработка работает но хрен его как заставить ее работать у себя
Давайте начнем с начала. Просто карту показывает? Не точки на карте, а просто саму карту Гугл без точек?
Нет белая страница
Вот это сайты — не через звездочку, а точно по наименованию
developers.google.com
maps.google.com
должны быть добавлены в список доверенных
Еще. откройте макет (который макет гугл), найдите в нем вот эту строку
<met a http-equiv=»X-UA-Compatible» content=»IE=10″>
и попробуйте поменять на
<met a http-equiv=»X-UA-Compatible» content=»IE=11″>
возможно это поможет
(34) это проблемы совместимости. Или безопасности. Но скорее всего совместимости. Попробуйте запустить на каком-нить ДРУГОМ компутере — с другой операционкой
Ключ гугла Вы используете мой? Или получили свой?
Свой, апи гугла работают, все считается не отображается результат в поле html документа
А вот этот АПИ — Maps JavaScript API — вы подключили? Посмотрите в консоли проектов гугла — есть по нему запросы?
Maps JavaScript API
Google
Maps for your website
API включен
javascript:void(0);
То есть АПИ включен, а запросов к нему ноль. Это однозначно настройки безопасности — ваш компутер блокирует попытки обращения к этому сервису. Вы не пробовали то, что я выше написал — запустить обработку на компутере с другой операционкой или другими настройками безопасности?
На другом компе работает, хотя на своем тоже настроил
Напишите, что пришлось изменить — вдруг пригодится еще кому-то объяснять