В данной статье делюсь опытом создания прототипа TMS (Transportation Management Systems) – ИТ-решения для планирования и контроля исполнения перевозок (доставок/поставок) товаров, оборудования и людей, «собственными силами» или, так сказать, сделанного «на электронной коленке из подручных средств». На дворе непростые времена: общий экономический кризис, специфическое состояние ИТ-отрасли и рынка труда (как в сегменте ИТ, так и по направлению, связанному с логистикой), а также специфика ситуации на вашем предприятия и с вашей ИТ-службой, могут заставить искать какие-то нестандартные пути для получения такого рода ИТ-решения для автоматизации транспортной логистики. Например, путем создания и внедрения TMS «из подручных средств». Речь пойдет о подходе, в рамках которого ИТ-решение конструируется из доступных, относительно свободно распространяемых компонентов, а вам предлагается писать связующий программный код для получения законченного прикладного ИТ-решения. И создавать это решение можно на «простеньком» компьютере – без использования продвинутого «железа» и «софта», без «облаков» и т.д.,  т.е. на своей «электронной коленке». Создание «на коленке» компонентной базы такого ИТ-решения, как то – «вычислительный движок» для оптимизации маршрутов, геокодер, обработчик дорожных графов для вычисления «матрицы расстояний» (расстояний и продолжительностей при перемещении между каждой возможной парой точек доставки/поставки из решаемой задачи), геоинформационный визуализатор и др., представляется утопичным: за разумное время в одиночку - почти невозможно. Посмотрим на мой путь, который вы можете пройти сами, вместе со мной или в комбинированном режиме. Центром вашего ИТ-решения является «вычислительный движок», на вход которому подаются данные о заказах доставки/поставки и данные о транспортных ресурсах (транспортных средствах или курьерах), а на выходе из которого вы получаете (суб)оптимальное решение задачи – списки точек доставки/поставки из заказов, привязанные к транспортным ресурсам. Я выбрал метаэвристический алгоритм оптимизации «Ruin and Recreate» (описание здесь) и реализующий его опен-сорс’овский «движок» jsprit (исходный код здесь). Для получения «матрицы расстояний» используются бесплатные свободно распространяемые карты (графы) из проекта OpenStreetMap, которые можно загружать, например, отсюда: http://download.geofabrik.de/ Но для того, чтобы эффективно выудить из дорожного графа данные для «матрицы расстояний» вам нужно специальное средство, например, такое: https://github.com/graphhopper/graphhopper Этот компонент берет на вход геокоды (географические координаты) точек доставки/поставки, а не адреса в привычном нам виде. Для качественного и бесплатного геокодирования я использую такие геоинформационные сервисы (их API), как например, Google Карты и пробный (тестовый) ключ доступа с квотой 2500 запросов в сутки. Это означает, что при необходимости вы можете ежедневно расширять свою «матрицу расстояний» комбинациями с 2500 новыми адресами (что вполне себе прилично). Осталось выбрать веб-сервер, если вы хотите создать свое ИТ-решение в виде приложения для веб (как вариант можно делать десктоп’ное-приложение). Я, исходя из своих соображений, выбрал IIS (Internet Information Services). Кстати, для начала вполне подойдет версия Express: ее просто настроить для целей отладки при разработке, тестирования и пробной эксплуатации вашего ИТ-решения пользователями. Ну а раз я выбрал IIS, то и связующий программный код мне пришлось писать на C#/.Net. Пользовательский интерфейс для логиста/диспетчера, загружающего задачу доставки/поставки на сервер и получающего табличное и графическое представление, можно быстро разработать, например, средствами ASP.Net. А возможно, вы создаете свое решение как расширение корпоративной информационной системы (типа ERP-системы) в виде веб-сервиса, то и веб-интерфейс не нужен – логист/диспетчер работает через интерфейс расширяемой системы. А вот пользовательский интерфейс веб-приложения для исполнителя транспортной работы (водителя/экспедитора, курьера) лучше создавать с использованием нейтральных технологий типа JavaScript. Замечу, что выбор веб-сервера может оказывать непосредственное влияние на способ реализации приложения для исполнителя, но необязательно. В моем ИТ-решение это приложение написано на «чистом» JavaScript, а для передачи сообщений о результатах работы используется API посредством HTTP/Rest. (Примечание: помимо этого вы можете подключить внешние инструменты BI (бизнес-аналитики), значительно повысив ценность и возможности своего ИТ-решения для управляющих сотрудников вашей компании.) Как все это выглядит представлено на скриншотах ниже, а также здесь: https://sites.google.com/view/freetms/home В конечном итоге, вы получаете ИТ-решение с условно-нулевой стоимостью программных компонентов – функциональных блоков, но при этом должны очень тщательно выполнить системный анализ и написать новый связывающий эти компоненты программный код. В процессе этого (продумывания и реализации связей) вы можете увеличить суммарный эффект за счет кастомизации – разработать ИТ-решение именно под специфику вашего предприятия и его задач в области транспортной логистики. Не все аспекты и детали создания ИТ-решения возможно раскрыть в этой статье – такую цель я не ставил, но для первичной оценки подхода вполне достаточно. Всем желаю успехов в работе! С удовольствием обсужу различные связанные вопросы и вне публикации.