Рабочее место логиста













Обработка умеет отображать адреса доставки на карте Гугл, позволяет вручную разбивать их по маршрутам (машинам и водителям) , в том числе и зрительно, раскрашивая точки на карте в цвета машин, строить по каждой машине подробный маршрут, оптимизированный по порядку посещения точек доставки (решая «задачу коммивояжера» для каждого маршрута). Обработка не использует никаких метаданных конфигураций — адреса доставки и данные машин и водителей загружаются из файлов экселя, итоговые маршруты также выгружаются в эксель. В архиве находятся — сама обработка, примеры экселевских файлов с адресами и данными водителей и машин, а также один файл итоговой выгрузки получившегося маршрута.

Данная обработка создана с целью упростить решение задачи разбиения точек доставки на рейсы логистом ВРУЧНУЮ с использованием карт и сервисов Гугл. Обработка не использует никаких метаданных конфигураций — адреса доставки и данные машин и водителей загружаются из файлов экселя, итоговые маршруты также выгружаются в эксель — поэтому она будет работать на любой конфигурации, использующей управляемые формы и на любой платформе, начиная с 8.3

ВНИМАНИЕ – для работы сервисов Гугл необходим ключ. В данной обработке ЕСТЬ ключ, но он исключительно тестовый, для проверки работы обработки. Как только по нему пройдет первая сотня запросов (т.е. примерно 5  запусков обработки) ключ будет отключен. Поэтому ключ Вы должны получить сами.  Подробную инструкцию по получению ключа Гугл я писать не буду, любой айтишник думаю справится  с этим без труда. Уточню только то что для нормальной работы обработки к ключу должны быть привязаны три API — Geocoding API, Directions API и Maps JavaScript API и к проекту, по которому получен ключ должны обязательно подключена ОПЛАТА. В режиме без оплаты Гугл эти три сервиса просто НЕ ПРЕДОСТАВЛЯЕТ. Впрочем, вы можете воспользоваться т.н. «тестовым периодом» и получить от Гугл безвозмездный кредит на услуги сервисов в размере 300 долларов. Один запрос  к одному сервису стоит 0.14 цента, тысяча запросов соответственно стоят $1.4.      

 

Исходные данные – есть N адресов доставки и K автомобилей с водителями. Требуется разбить все точки доставки по автомобилям и составить маршруты движения для каждого автомобиля.  Еще раз напоминаю, что  обработка специально сделана без привязки к какой бы то ни было конфигурации, поэтому предполагаем что и адреса и водители загружаются в неё из экселевских файлов.

Структура файлов экселя

  1. Адреса, колонки – «Контрагент, адрес доставки, адрес отправки, вес груза, объем груза»
  2. Перевозчики – «Водитель, автомобиль, грузоподъемность, объем кузова»

 (образцы файлов есть в архиве)

 

Открываем обработку, и сразу же на первой вкладке загружаем в нее адреса из файлика с адресами. Если структура файла соответствует образцам, то все загружается без ошибки. Дальше на выбор или проверяем каждый адрес с помощью кнопки «Показать адрес на карте» или нажимаем кнопку «Проверить все адреса без отображения на карте». Во втором случае на карте ничего не показывается,  но тем не менее пропустить этот этап нельзя – по этой кнопке каждый адрес геокодируется, определяются его широта и долгота, а также расстояние от точки отправки до точки доставки.

После того, как все точки проверены и геокодированы, в правом верхнем углу нажимаем кнопку «Адреса проверены». Обработка открывает вторую вкладку и начинает добавлять уже проверенные точки на вторую карту – ту, на которой собственно и будет проходить основная работа по созданию маршрутов. Добавление точке проходит довольно медленно – примерно секунда-полторы на каждую точку. За это время можно загрузить из второго экселевского файла список перевозчиков, нажав на кнопку «Загрузить перевозчиков»

Перевозчики загружаются в таблицу слева и каждая строка таблицы раскрашивается в свой цвет. Теперь осталось только подождать пока обработка не сообщит «Все точки добавлены на карту» (в окне сообщений справа), закрыть это окно сообщений и начать разбивать точки по водителям и  машинам.

Делается это очень просто – в таблице перевозчиков курсор ставится на строчку с машиной, а на карте мышкой нажимается нужная точка адреса. Она сразу же окрашивается в тот же цвет что и строка таблицы, а в таблице внизу под картой добавляется строка с параметрами точки. Набрав все точки для данного водителя/машины переходим на следующую строчку таблицы перевозчиков и повторяем все процедуру пока не останется ни одной «свободной» точки. Свободные точки отличаются и цветом и (немного) формой маркера, так что перепутать их с уже разнесенными по машинам не получится. Разнесение можно многократно корректировать – то есть точку которую скажем уже разнесли на машину 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С. Как вариант – вы можете заказать создание такой «персонифицированной под Вас» обработки мне. Пишите, звоните — договоримся.

41 Comments

  1. insurgut

    Каким алгоритмом решается задача коммивояжера?

    Reply
  2. Torin99

    Не знаю — это делает Гугл при построении маршрута. В запросе на построение маршрута передается параметр — «optimizeWaypoints: true» (оптимизировать порядок точек = истина ) и гугл как-то его оптимизирует.

    Я проверял «жадным алгоритмом» — у гугла получается лучше

    Reply
  3. Terve!R

    Спасибо, интересно!

    Но для нашей страны Яндекс карты все же более актуальны.

    И что такое один запрос?

    На показ каждой точки на карте — это запрос? Или группу точек показать можно одним запросом? Или запрос — это расчет маршрута?

    Reply
  4. Torin99

    Показ одной точки — это один запрос. И расчет маршрута — это один запрос. В среднем один цикл работы обработки с тестовыми параметрами для данной обработки (20 адресов, 8 машин) — это около 50 запросов, что обойдется вам в 7 центов или примерно 4 рубля. Более менее реальные параметры — скажем собственный транспортный цех в 40-60 машин и несколько сотен точек доставки — полное составление маршрутов будет стоить раз в 10 дороже — т.е. рублей 40 ежедневно. Вот такие финансовые затраты на работу обработки

    Что касается большей актуальности Яндекса по сравнению с Гуглом, то простите, не могли бы Вы объяснить В ЧЕМ ИМЕННО эта «большая актуальность» проявляется? Я проверял обработку в общей сумме на нескольких тысячах адресов. Гугл не выдал ни одной ошибки геокодирования. Наверное и Яндекс бы не выдал, но чем Гугл хуже, если результат одинаков?

    Reply
  5. user1166203

    (4)

    Информацией о трафике на дорогах.

    Reply
  6. Torin99

    (5)

    При построении маршрутов Яндекс НЕ УЧИТЫВАЕТ информацию о пробках. Не знаю почему, но это так… У компании, в которой я сейчас работаю, есть ключ Яндекса для автоматической разбивки на маршруты, так что я это абсолютно точно знаю. И, кстати необходимость в ручной разбивке возникла у наших логистов именно потому что Яндекс, не учитывая пробки, при автоматической разбивке зачастую не укладывается ни в какие временные нормативы по суммарному времени маршрута — водителю приходится проводить за рулем по 12-14 часов вместо восьми

    Reply
  7. triviumfan

    (6) С трудом верится. Может имеет смысл обратиться в ТП яндекса? Может нужно что-то дополнительно указывать в парметрах или есть другие методы api.

    Reply
  8. Torin99

    Ну может быть и так, я не совсем в курсе. Этой обработкой занимаюсь не я — у нас в компании восемь программистов, из которых четыре 1с-ника. Попробую завтра уточнить у коллеги-прогера, который отвечает за связь с яндексом — мож он и правда чего-то не доделал. Но логисты ругаются матом на то, что приходит от Яндекса по ключу автоматического разбиения на маршруты…

    Reply
  9. Oldsad

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

    другой вопрос что маршрут строится с учетом ТЕКУЩИХ пробок, а если вы планируете маршрут на день с утра, когда пробок нет, то результат такого планирования предсказать не сложно

    Reply
  10. Torin99

    (9) Вроде как и у Гугла и у Яндекса есть функция ПРОГНОЗИРОВАНИЯ пробок на определенное время на основе средних показателей за предыдущие периоды. Но если она и есть, я её не нашел и поэтому в этой обработке .не использую.

    Reply
  11. Intercititude

    (8) Разве яндекс не требует мани за API?

    Reply
  12. Torin99

    Требует. И гугл требует. Я об этом и пишу

    Reply
  13. KontoraB

    А код в обработке открыт ?

    P S есть фирмочка кот сидит на 1с 7.7 — хочу попробовать перепелить на семерку

    Reply
  14. Torin99

    Открыт

    Reply
  15. serejkin

    коллеги, я тут открываю форму, а у меня поле карты чистенькое. при этом сохраненный макет в файл открывается просто прекрасно и без мата…

    догадываюсь, что гдет настройка, но где и какая…

    Reply
  16. serejkin

    (4)

    В среднем один цикл работы обработки с тестовыми параметрами для данной обработки (20 адресов, 8 машин) — это около 50 запросов, что обойдется вам в 7 центов или примерно 4 рубля.

    откуда такие тарифы? Гугл говорит о том, что для запросов до 1 тысячи — бесплатно, а свыше — уже плати…

    решение от меня пока не забанили… свой «счетчик» и когда контролька по ключу подбирается к заветной тысяче — ключик автоматически исключается из вариантов.

    ….

    Reply
  17. Torin99

    Какие у Вас, сударь, платформа и операционка? Одно должно соответствовать другому. Если у Вас в операционке по умолчанию в качестве браузера используется EDGE, а не IE, то платформа должна быть не ниже 14-ой.

    Reply
  18. serejkin

    (19) «вот где собака покопалась…» (с) М.С.Г

    ось: Вынь2012 и по-умолчанию установлен браузер FireFox, но это браузер профиля. в оси вот поменял.

    Платформа ниже 14й. правда.

    ситуация не изменилась.

    Reply
  19. serejkin

    мдя, картина маслом. Проблема устраняется только при открытии в платформе выше. в данном случае 14 и 15.

    блин, а в них же глюков…

    Reply
  20. Torin99

    (21)

    Ну извините… моя конторка на 14 платформе уже почти год как — ничего, справляемся.

    Кстати, не сочтите за мелочность — вроде как среди списка скачавших мою обработочку Вас нет.

    Reply
  21. phsin

    Задача коммивояжера не решает поставленной «задачи разбиения точек доставки на рейсы логистом»

    Это классическая задача vehicle routing problem https://en.wikipedia.org/wiki/Vehicle_routing_problem является NP сложной = простым перебором не решить

    Варианты решения:

    Optaplanner https://www.optaplanner.org/ = open source решение

    OpenDoorLogistics https://www.opendoorlogistics.com/people/ = еще одно интересное решение на java

    строит «оптимальные» маршруты https://maxoptra.ru/ за сравнительно небольшие деньги.

    Интересно кто-то использует построение «оптимальных» маршрутов ? и как это все выглядит на практике?

    Reply
  22. phsin

    в своё время пытался обобщить опыт в https://redmine.kb99.pro/projects/cvrp

    но пришел к выводу, что основная проблема «оптимальных маршрутов» находится в плоскости людей принимающих решение = через логистов проходит очень много МЦ и никто не захочет просто так отдать этот сладкий кусок

    Reply
  23. Torin99

    (23)

    Конечно не решает. Я же здесь многократно написал что данная обработка для РУЧНОГО разбиения на машины. А задача коммивояжера работает только для оптимизации маршрута обхода УЖЕ отобранных точек по каждой машине. Обработку разбивки на машины с использованием трех основных алгоритмов (Кларка-Райта, «заметания» и «метода потенциалов») собираюсь выложить в ближайшие пару недель

    Reply
  24. Torin99

    (24)

    И это тоже есть. Но это за пределами зоны ответственности программиста…

    Reply
  25. Glagoleva

    Скачал не работает, 1С:Предприятие 8.3 (8.3.15.1747)… Страница не отображается ,hfepth IE =11

    Reply
  26. Torin99

    Видимо проблема в «несовпадении» операционки (т. е. используемого операционкой эксплорера) и платформы. Какая у Вас платформа? Для IE7 подойдет любая 8.3, а вот для IE =11 платформа должны быть не ниже 8.3.14

    Reply
  27. Glagoleva

    8.3.15.1747 ИЕ =11… Хрен пойми что 1С нужно

    Reply
  28. Glagoleva

    На сервере и на клиенте браузер по умолчанию ИЕ = 11

    Reply
  29. Torin99

    Посмотрите настройки безопасности эксплорера. Там используются три сайта (посмотрите в макете Гугл), все они должны быть добавлены в список доверенных сайтов

    Reply
  30. Glagoleva

    Загружаю список адресов, становлюсь на строчку, давлю «показать на карте» карта пустая

    https://*google.ru

    https://*google.com в безопасных узлах на сервере 1С и на терминальном сервере… Я не сомневаюсь что ваша обработка работает но хрен его как заставить ее работать у себя

    Reply
  31. Torin99

    Давайте начнем с начала. Просто карту показывает? Не точки на карте, а просто саму карту Гугл без точек?

    Reply
  32. Glagoleva

    Нет белая страница

    Reply
  33. Torin99

    Вот это сайты — не через звездочку, а точно по наименованию

    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″>

    возможно это поможет

    Reply
  34. Torin99

    (34) это проблемы совместимости. Или безопасности. Но скорее всего совместимости. Попробуйте запустить на каком-нить ДРУГОМ компутере — с другой операционкой

    Reply
  35. Torin99

    Ключ гугла Вы используете мой? Или получили свой?

    Reply
  36. Glagoleva

    Свой, апи гугла работают, все считается не отображается результат в поле html документа

    Reply
  37. Torin99

    А вот этот АПИ — Maps JavaScript API — вы подключили? Посмотрите в консоли проектов гугла — есть по нему запросы?

    Reply
  38. Glagoleva

    Maps JavaScript API

    Google

    Maps for your website

    API включен

    javascript:void(0);

    Reply
  39. Torin99

    То есть АПИ включен, а запросов к нему ноль. Это однозначно настройки безопасности — ваш компутер блокирует попытки обращения к этому сервису. Вы не пробовали то, что я выше написал — запустить обработку на компутере с другой операционкой или другими настройками безопасности?

    Reply
  40. Glagoleva

    На другом компе работает, хотя на своем тоже настроил

    Reply
  41. Torin99

    Напишите, что пришлось изменить — вдруг пригодится еще кому-то объяснять

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *