{"id":174851,"date":"2025-01-03T09:00:04","date_gmt":"2025-01-03T02:00:04","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=174851"},"modified":"2026-01-06T14:40:50","modified_gmt":"2026-01-06T07:40:50","slug":"route-planning","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/","title":{"rendered":"Tingkatkan Efisiensi Proses Logistik dengan Route Planning"},"content":{"rendered":"<p>Dalam menghadapi tantangan logistik, perusahaan bisa mengimplementasikan route planning untuk menjaga efisiensi dan ketepatan waktu pengiriman. Tanpa perencanaan rute yang optimal, perusahaan berisiko mengalami pemborosan bahan bakar, keterlambatan distribusi, dan penurunan kepuasan pelanggan.<\/p>\n<p>Dengan bantuan <a href=\"https:\/\/www.hashmicro.com\/id\/transportation-management-software\">transportation management software<\/a>, proses perencanaan rute kini dapat diotomatisasi dan disesuaikan secara real time. Sistem ini membantu memaksimalkan penggunaan armada, menekan biaya operasional, serta meningkatkan produktivitas tim logistik.<\/p>\n<p>Saatnya bisnis Anda beralih dari metode manual ke solusi digital yang lebih cerdas. Dengan perencanaan rute yang terintegrasi, efisiensi operasional bukan lagi sekadar target, melainkan hasil nyata yang bisa Anda capai setiap hari.<\/p>\n<table style=\"border-collapse: collapse; background-color: #fffacd; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); border-radius: 25px 25px 25px 25px;\" width=\"100%\">\n<tbody>\n<tr>\n<td style=\"padding: 15px; border: none;\">\n<h3 style=\"margin-bottom: 10px;\"><span style=\"background-color: #990000; color: #ffffff; padding: 5px;\"><b>Key Takeaways<\/b><\/span><\/h3>\n<ul>\n<li aria-level=\"1\"><a href=\"#route\">Route planning<\/a> adalah proses strategis untuk menentukan rute paling efisien dengan mempertimbangkan faktor seperti kapasitas kendaraan, waktu pengiriman, dan kondisi lalu lintas.<\/li>\n<li aria-level=\"1\"><a href=\"#manfaat\">Manfaat route planning<\/a> antara lain reduksi biaya operasional, peningkatan produktivitas tim lapangan, peningkatan loyalitas pelanggan, dan pengambilan keputusan berbasis data akurat.<\/li>\n<li><a href=\"https:\/\/www.hashmicro.com\/id\/transportation-management-software\">HashMicro TMS<\/a> mengintegrasikan route planning dengan ERP yang mencakup akuntansi, WMS, CRM, serta real-time tracking untuk menurunkan biaya dan meningkatkan produktivitas.<\/li>\n<\/ul>\n<p style=\"text-align: center;\">\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span data-sheets-root=\"1\"><div id=\"toc_group_article\" style=''>\r\n\t<p style='font-size:25px;font-weight:bold; margin-bottom:0px'>\r\n\t\tDaftar Isi:\r\n\t<\/p>\r\n\t<ul id=\"list_toc\" class='list_toc'><\/ul>\r\n<\/div>\r\n\r\n<div id=\"placeholder-toc\"><\/div>\r\n<div id=\"toc\">\r\n    <div class=\"header\">\r\n\t<span class=\"toc-title\" id=\"toc-title\">Daftar Isi<\/span>\t\r\n\t <i class=\"toc-icon\">\r\n        <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#000\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"header-icon\">\r\n          <path d=\"m6 9 6 6 6-6\" \/>\r\n        <\/svg>\r\n      <\/i>\r\n\t<\/div>\r\n    <div class=\"list\">\r\n      <ul id=\"toc-list\"><\/ul>\r\n    <\/div>\r\n <\/div>\r\n\r\n<style>\r\n\/* Simple styling for the TOC *\/\r\n\t\r\n\t#toc ul li:last-child {\r\n    padding-bottom: 16px; \/* Adjust the value as needed *\/\r\n}\r\n\r\n.td-fix-index {\r\n\t transform: unset !important;\r\n     -webkit-transform: unset !important; \r\n}\r\n.footer-contact .td-fix-index {\r\n\t transform: translateZ(0) !important;\r\n     -webkit-transform: translateZ(0) !important; \r\n}\r\n\t.tdb_single_content .tdb-block-inner.td-fix-index{\r\n\t\tposition: static;\r\n\t}\r\n\t\r\n\r\n\r\n\t\r\n#toc {\r\n  background-color: #FFF;\r\n\tpadding: 17px 24px 0px 24px !important;\r\n  margin-bottom: 20px;\r\n\/*   border: 1px solid #9C171E; *\/\r\n  border-radius: 6px;\r\n\tdisplay: none;\r\n  max-width: 100%;\r\n  transition: .4s ease height;\r\n\tmargin-left: 0;\r\n\toverflow: hidden;\r\n}\r\n\r\n#toc .header{\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: space-between;\r\n\tbackground-color: transparent;\r\n}\r\n\t\r\n\t#toc.sticky .header{\r\n\t\tpadding: 4px 0;\r\n\t}\r\n\t\r\n.header p{\r\n  font-size: 18px !important;\r\n  font-weight: 600 !important;\r\n  color: #393939;\r\n   margin-bottom: 0;\r\n  \/* margin-top: 20px; *\/\r\n}\r\n\r\n.toc-icon{\r\n  float: right;\r\n\/*   visibility: hidden; *\/\r\n}\r\n\r\n\t.toc-title{\r\n\t\tmargin-right: auto;\r\n\/* \t\tpadding-left: 20px; *\/\r\n\t\tfont-weight: 600;\r\n\t\talign-self: center;\t}\t\r\n\r\n#toc ul {\r\n  list-style-type: none;\r\n  padding-left: 0;\r\n}\r\n\t\r\n#toc.sticky ul{\r\n\toverflow-y: auto;\r\n\tmax-height: 250px;\r\n\tmargin-top: 0px;\r\n\tpadding-top: 20px;\r\n\/* \tborder-top: 1px solid #d3d3d3; *\/\r\n}\r\n\t\r\n#toc ul li {\r\n\/*   margin-bottom: 10px; *\/\r\n  margin-bottom: 10px;\r\n\tmargin-left: 0;\r\n\ttransition: .2s ease;\r\n\tcursor: pointer;\r\n}\r\n\t\r\n\t#toc.sticky ul li {\r\n\t  margin-right: 10px;\r\n\t}\r\n\t\r\n.td-post-content #toc-list li a:hover, .td-post-content #toc-list a.active{\r\n\tbackground-color: #FFF;\r\n\/* \tpadding: 8px 16px 8px 16px; *\/\r\n\tpadding: 4px 16px 4px 16px;\r\n\tborder-radius: 6px;\r\n\tcolor: #9c171e !important;\r\n\tfont-weight: 600 !important;\r\n}\r\n\t\r\n\t.td-post-content #toc-list li:hover a, .td-post-content #toc-list a.active{\r\n\t\tcolor: #9C171E !important;\r\n\t\tfont-weight: 600 !important;\r\n\t}\r\n\t\r\n.td-post-content #toc-list a.active{\r\n\tfont-weight: bold !important;\r\n\tcolor: #9C171E !important;\r\n}\r\n\t\r\n#toc a, .td-post-content #toc-list a {\r\n  text-decoration: none;\r\n  color: #ea1717 !important;\r\n  transition: .2s ease;\r\n\tfont-weight: 400 !important;\r\n\tdisplay: block;\r\n\t\r\n\tpadding: 4px 16px 4px 0;\r\n}\r\n\r\n#toc.sticky {\r\n  position: fixed;\r\n\/*   top: 73px; *\/\r\n\tbottom: 0;\r\n  z-index: 100; \r\n  box-shadow: 0 2px 5px rgba(0,0,0,0.1); \r\n\twidth: 100%; \r\n\tbackground-color: #FFF;\r\n\/* \tbackground-color: #FFF1F1; *\/\r\n\tborder-bottom: 1px solid #ea1717;\r\n\/*   border: 1px solid #393939; *\/\r\n  box-shadow: 0px 0px 14px 0px #00000040;\r\n  cursor: pointer;\r\n\tanimation: fadein .3s ease;\r\n\tpadding: 12px 16px !important;\r\n}\r\n\t\r\n\t.fadein{\r\n\t\tanimation: fadein .3s ease;\r\n\t}\r\n\t\r\n\t.fadeout{\r\n\t\tanimation: fadeout .3s ease;\r\n\t}\r\n\t\r\n\t\r\n\t@keyframes fadein{\r\n\t\t0% {\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@keyframes fadeout{\r\n\t\t0% {\r\n\t\t\topacity: 1;\r\n\t\t}\r\n\t\t100%{\r\n\t\t\topacity: 0;\r\n\t\t}\r\n\t}\r\n\r\n\t\r\n#toc.sticky .header p{\r\n\tmargin-bottom: 10px;\r\n\tmargin-top: 10px;\r\n}\r\n\r\n#toc.sticky .toc-icon{\r\n  visibility: visible;\r\n\/* \ttransition: 0.4s ease; *\/\r\n}\r\n\t\r\n\t.toc-icon{\r\n\t\talign-items: center;\r\n    \tdisplay: flex;\r\n\t}\r\n\t\r\n\tsvg.header-icon{\r\n\/* \t\tbackground-color: #9c171e; *\/\r\n\t\tbackground-color: #FFF;\r\n\t\tborder-radius: 30px;\r\n\t\tpadding: 5px;\r\n\t}\r\n\r\n#toc.sticky .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\t\r\n\t#toc .list{\r\n\/*   max-height: 0; *\/\r\n  transition: height 0.4s ease;\r\n}\r\n\r\n#toc .header.active .toc-icon{\r\n\ttransform: rotate(0deg); \r\n\topacity: 1;\r\n}\r\n\r\n\t#toc .header.active + .list {\r\n\t  max-height: 200px; \/* Adjust this value as needed *\/\r\n\t  opacity: 1;\r\n\t}\r\n\t\r\n\t#placeholder-toc{\r\n\/* \t\tdisplay: none; *\/\r\n\t}\r\n\t\r\n\t@media (min-width: 768px) and (max-width: 991px){\r\n\t\t#toc.sticky{\r\n\/* \t\t\ttop: 104px; *\/\r\n\t\t\tbottom: 0px;\r\n\t\t}\r\n\t\t\r\n\t\t#toc{\r\n\t\t\twidth: unset !important;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width: 767px){\r\n\t\t#toc{\r\n\t\t\twidth: 100% !important;\r\n\t\t\tdisplay: inline-block;\r\n\t\t}\r\n\t\t\r\n\t\t#toc.sticky{\r\n\t\t\twidth: 90% !important;\r\n\/* \t\t\ttop: 81px; *\/\r\n\t\t\tbottom: 60px;\r\n\t\t\tmargin-left: auto;\r\n\t\t\tmargin-right: auto;\r\n\t\t\tpadding: 0 16px;\r\n\t\t\tright: 5%;\r\n\t\t}\r\n\t}\r\n\t\r\n\t<\/style>\r\n\r\n<style>\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc > li > ul {padding-left: 20px;margin-bottom: 0;}\r\n\t#list_toc{height:max-content;transition:ease-in-out}\r\n\t#list_toc li {margin-bottom: 0;margin-top: 5px;}\r\n\t#list_toc_float li.active > a {color:#b1252d;background: #ffe1e3;}\r\n\t#list_toc_float li a {padding:3px 7px}\r\n\t#list_toc_float li a {\r\n\t\tdisplay: block;\r\n\t\tcolor:#000;\r\n\t\tmargin-bottom: 10px;\r\n\t\ttransition:all 0.2s ease-in-out;\r\n\t\tfont-size:15px\r\n\t}\r\n\t#list_toc_float li{list-style:none;list-style-position:inside; margin-left:0;}\r\n\t#list_toc_float a:hover{color:#b1252d;}\r\n\t\r\n\t#list_toc_float li a{margin-bottom:0px}\r\n\t#toc_group_float{\r\n\t\tline-height: 24px;\r\n\t\tmax-height: calc(100vh - 100px);\r\n\t\toverflow: auto;\r\n\t\tz-index: 99;\r\n\t\tdisplay:none!important;\r\n\t\tbackground:#fff;\r\n\t\ttransition:all 0.5s linear\r\n\t}\r\n\t\r\n\t@media (min-width:1019px){\r\n\t\t#toc_group_float {\r\n\t\t\tdisplay:block!important;\r\n\t\t\t}\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t@media (max-width:768px){\r\n\t\t#toc_group_article {\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\t}\r\n\t\r\n\t \/* custom scrollbar style *\/\r\n::-webkit-scrollbar {\r\n    width: 7px;\r\n}\r\n::-webkit-scrollbar-track {\r\n    background: #d7a2a4;\r\n}\r\n::-webkit-scrollbar-thumb {\r\n    background: #b1252d;\r\n    border-radius: 15px;\r\n}\t\t\r\n\r\n<\/style>\r\n\r\n<script>\r\n\tdocument.addEventListener('DOMContentLoaded', function() {\r\n\t\t\/\/ Fungsi untuk menangani klik pada semua elemen <a> dengan href yang dimulai dengan #\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst targetId = this.getAttribute('href').substring(1);\r\n\t\t\tconst targetElement = document.getElementById(targetId);\r\n\r\n\t\t\tif (targetElement) {\r\n\t\t\t\tconst headerHeight = document.querySelector('#toc .header').offsetHeight;\r\n\t\t\t\tconst navbarHeight = document.getElementById('tdi_34') ? document.getElementById('tdi_34').offsetHeight : 0;\r\n\t\t\t\tconst windowHeight = window.innerHeight;\r\n\t\t\t\tconst targetOffset = targetElement.offsetTop;\r\n\t\t\t\tconst scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight) - navbarHeight - 40;\r\n\r\n\t\t\t\twindow.scrollTo({\r\n\t\t\t\t\ttop: scrollTo,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua elemen <a> di toc-list dan list-toc\r\n\t\tconst titleLinks = document.querySelectorAll('#toc-list a, #list_toc a');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t});\r\n<\/script>\r\n\r\n<!-- ToC List for mobile -->\r\n<script>\r\n \/\/ Generate TOC based on headings\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  \/\/ Get the element that will contain the TOC\r\n  const tocList = document.getElementById('toc-list');\r\n\r\n  \/\/ Get the element with the ID 'article-left'\r\n  const article = document.querySelector('.td-post-content');\r\n\r\n  \/\/ Find all h2 elements within 'myarticle'\r\n  const headers = article.getElementsByTagName('h2');\r\n\r\n  \/\/ Loop through the h2 elements and create a list item for each one\r\n  for (let i = 0; i < headers.length; i++) {\r\n    const header = headers[i];\r\n    const headerText = header.textContent;\r\n\/\/     const headerId = 'header-' + i;\r\n    const headerId = headerText\r\n    .toLowerCase()\r\n    .trim()\r\n    .replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n    .replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n    \/\/ Set an ID for the header if it doesn't have one\r\n    header.setAttribute('id', headerId);\r\n\r\n    \/\/ Create a list item for the TOC\r\n    const listItem = document.createElement('li');\r\n\r\n    \/\/ Create a link for the list item\r\n    const link = document.createElement('a');\r\n    link.setAttribute('href', '#' + headerId);\r\n    link.textContent = headerText;\r\n\r\n    \/\/ Append the link to the list item\r\n    listItem.appendChild(link);\r\n\r\n    \/\/ Append the list item to the TOC list\r\n    tocList.appendChild(listItem);\r\n  }\r\n});\r\n\r\n\/\/ Keep height and placement of content using placeholder in place of TOC\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const placeholderToc = document.querySelector('#placeholder-toc');\r\n\r\n  function setPlaceholderHeight() {\r\n    placeholderToc.style.height = `${toc.offsetHeight}px`;\r\n  }\r\n\r\n  \/\/ Set the initial height of the placeholder\r\n  setPlaceholderHeight();\r\n\r\n  \/\/ Update the height on window resize\r\n  window.addEventListener('resize', setPlaceholderHeight);\r\n});\r\n  const tocTitle = document.querySelector('#toc-title'); \/\/ Assuming header-faq is the element for TOC title\r\n\r\n\/\/ Sticky TOC and update heading\r\n\/\/ document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/   const toc = document.querySelector('#toc');\r\n\/\/   const footer = document.querySelector('.td-footer-template-wrap');\r\n\/\/   const tocParent = toc.parentElement;\r\n\/\/   const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n\/\/   const tocHeight = toc.offsetHeight;\r\n\/\/   const triggerPoint = divTop + tocHeight + 700;\r\n\/\/   const footerHeight = footer.offsetHeight;\r\n\/\/   const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight - footerHeight - footerHeight;\r\n\/\/   const phtoc = document.querySelector('#placeholder-toc');\r\n\/\/   const headers = document.querySelectorAll('.td-post-content h2');\r\n\/\/   const navLinks = document.querySelectorAll('#toc-list a');\r\n\t\r\n\/\/ \tconst panel2 = document.querySelector(\"#toc .list\");\r\n\/\/ \tvar icon = document.querySelector(\".toc-icon\");\r\n\r\n\/\/   let activeLink = null; \/\/ Declare activeLink outside the loop\r\n\t\r\n\/\/   \/\/ Function to handle scroll and add\/remove .sticky class\r\n\/\/   function handleScroll() {\r\n\/\/     const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\/\/     let currentHeader = '';\r\n\r\n\/\/     \/\/ Highlight user progress as the heading comes\r\n\/\/     headers.forEach(header => {\r\n\/\/ \t\tconst headerTop = header.offsetTop;\r\n\/\/ \t\tconst headerHeight = header.clientHeight;\r\n\/\/ \/\/ \t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \/\/ \t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \/\/ \t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \/\/ \t\t\tconsole.log(\"current header text:\", currentHeaderText);\r\n\/\/ \/\/ \t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \/\/ \t\t\tcurrentHeader = currentHeaderId;\r\n\t\t\t\r\n\/\/ \/\/ \t\t\tif(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t\ttocTitle.textContent = 'Daftar Isi';\r\n\/\/ \/\/ \t\t\t}\r\n\/\/ \/\/ \t\t}\r\n\/\/ \t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\ttocTitle.textContent = 'Daftar Isi'; \/\/ Selalu pertahankan judul ini di mobile\r\n\/\/ \t\t} else {\r\n\/\/ \t\t\tif (window.scrollY >= (headerTop - headerHeight + 700)) {\r\n\/\/ \t\t\t\tconst currentHeaderId = header.getAttribute('id');\r\n\/\/ \t\t\t\tconst currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n\/\/ \t\t\t\ttocTitle.textContent = currentHeaderText;\r\n\/\/ \t\t\t\tcurrentHeader = currentHeaderId;\r\n\/\/ \t\t\t}\r\n\/\/ \t\t}\r\n\/\/ \t});\r\n\r\n\/\/     navLinks.forEach(link => {\r\n\/\/       link.classList.remove('active');\r\n\/\/       if(currentHeader != '') {\r\n\/\/ \t\t  if (link.getAttribute('href').includes(currentHeader)) {\r\n\/\/ \t\t\t  link.classList.add('active');\r\n\/\/ \t\t  }\r\n\/\/ \t  }\r\n\/\/     });\r\n\/\/ \/\/     if (windowTop < triggerFooterPoint) {\r\n\/\/ \/\/         toc.style.display = 'block';\r\n\/\/ \/\/ \t}else{\r\n\/\/ \/\/         toc.style.display = 'none';\r\n\/\/ \/\/ \t}\r\n\/\/     \/\/ Update TOC title if sticky\r\n\/\/     if (windowTop > triggerPoint) {\r\n\/\/       if (!toc.classList.contains('sticky')) {\r\n\/\/         phtoc.style.display = \"block\";\r\n\/\/         toc.classList.add('sticky');\r\n\/\/         toc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/         toc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/         toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\tpanel2.style.height = '0px';\r\n\/\/ \t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t  if(window.innerWidth < 767){\r\n\/\/ \/\/ \t\t\t  const tocs = document.querySelector('#toc.sticky');\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar Isi'; \/\/ Reset title\r\n\/\/        \t\t  toc.style.width = '150px'; \/\/ Set width to match the parent element\r\n\/\/ \t\t  }\r\n\/\/       }\r\n\/\/       if (currentHeader) {\r\n\/\/ \/\/         console.log(\"activeLink:\", activeLink);\r\n\/\/         if (activeLink) {\r\n\/\/ \/\/           tocTitle.textContent = activeLink.textContent; \/\/ Update TOC title\r\n\/\/           tocTitle.textContent = activeLink ? activeLink.textContent : \"\"; \/\/ Update title only if activeLink exists\r\n\/\/         }\r\n\/\/       }\r\n\/\/     } else {\r\n\/\/       toc.classList.remove('sticky');\r\n\/\/       phtoc.style.display = \"none\";\r\n\/\/       toc.style.width = 'unset'; \/\/ Reset to original width\r\n\/\/       toc.style.backgroundColor = \"#FFF\";\r\n\/\/       tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\tpanel2.style.height = panel2.scrollHeight + \"px\";\r\n\/\/ \t\ticon.style.transform = \"rotate(180deg)\";\r\n\/\/     }\r\n\/\/   }\r\n\r\n\/\/     \/\/ Attach the scroll event listener to the window\r\n\/\/     window.addEventListener('scroll', handleScroll);\r\n\r\n\/\/     \/\/ Initial call to handleScroll to set the correct state on load\r\n\/\/     handleScroll();\r\n\/\/ });\r\n\t\r\n\/\/ \t\/\/ Open toggle TOC\r\n\/\/ \t  document.addEventListener(\"DOMContentLoaded\", function() {\r\n\/\/ \t\tvar tocHeader = document.querySelector(\"#toc .header\");\r\n\/\/ \t\tvar toc = document.querySelector(\"#toc\");\r\n\/\/ \t\tvar icon = document.querySelector(\".toc-icon\");\r\n\/\/ \t\tconst tocTitle = document.querySelector('#toc-title');\r\n\/\/ \t\tconst tocs = document.querySelector('#toc.sticky');\r\n\/\/  \t\tconst tocParent = toc.parentElement;\t\t  \r\n\r\n\/\/ \t\t  tocHeader.addEventListener(\"click\", function() {\r\n\/\/ \t\t\tvar panel = this.nextElementSibling;\r\n\/\/ \t\t\tif (panel.style.height !== '0px') { \/\/ Check if height is not 0px\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \/\/ \t\t\t\ttoc.style.paddingBottom = '6px'; \r\n\/\/ \t\t\t\tif(window.innerWidth > 768){\r\n\/\/ \t\t\t\t\tif(!toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = \"unset\";\r\n\/\/ \/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t\tif (toc.classList.contains('sticky')){\r\n\/\/ \t\t\t\t\t\ttoc.style.width = '${tocParent.offsetWidth}px';\r\n\/\/ \t\t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t\t}\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = \"unset\"; \/\/ Reset width\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t\ttoc.style.backgroundColor = \"#FFF1F1\";\r\n\/\/ \t\t\t} else {\r\n\/\/ \t\t\t  panel.style.height = panel.scrollHeight + \"px\";\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(0deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t  tocTitle.textContent = 'Daftar isi'; \/\/ Reset title\r\n\/\/ \t\t\t\ttoc.style.paddingBottom = '24px';\r\n\/\/ \t\t\t \tif(window.innerWidth < 767){\r\n\/\/ \t\t\t\t\ttoc.style.width = `${tocParent.offsetWidth}px`; \/\/ Set width to match the parent element\r\n\/\/ \t\t\t\t\ttoc.setAttribute('style', 'width: ' + tocParent.offsetWidth + 'px !important;');\r\n\/\/ \t\t\t\t}\r\n\/\/ \t\t\t}\r\n\/\/ \t\t  });\r\n\r\n\/\/ \t\t  \/\/ Close TOC when a link inside it is clicked\r\n\/\/ \t\t  var tocLinks = document.querySelectorAll(\"#toc .list a\");\r\n\/\/ \t\t  tocLinks.forEach(function(link) {\r\n\/\/ \t\t\tlink.addEventListener(\"click\", function() {\r\n\/\/ \t\t\t  var panel = document.querySelector(\"#toc .list\");\r\n\/\/ \t\t\t  panel.style.height = '0px'; \/\/ Set height to 0 for full collapse\r\n\/\/ \t\t\t  icon.style.transform = \"rotate(180deg)\";\r\n\/\/ \t\t\t  toc.style.backgroundColor = \"#FFF\";\r\n\/\/ \t\t\t});\r\n\/\/ \t\t  });\r\n\/\/ \t\t});\r\n\r\n\/\/ START new JS for ToC improvements\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  const toc = document.querySelector('#toc');\r\n  const footer = document.querySelector('.td-footer-template-wrap');\r\n  const tocParent = toc.parentElement;\r\n  const divTop = tocParent.getBoundingClientRect().top + window.pageYOffset;\r\n  const tocHeight = toc.offsetHeight;\r\n  const triggerPoint = divTop + tocHeight + 1750;\r\n\tconsole.log(triggerPoint)\r\n  const footerHeight = footer.offsetHeight;\r\n  const triggerFooterPoint = footer.getBoundingClientRect().top + window.pageYOffset - footerHeight*3;\r\n  const phtoc = document.querySelector('#placeholder-toc');\r\n  const headers = document.querySelectorAll('.td-post-content h2');\r\n  const navLinks = document.querySelectorAll('#toc-list a');\r\n  \r\n  const panel2 = document.querySelector(\"#toc .list\");\r\n  const icon = document.querySelector(\".toc-icon\");\r\n  const tocTitle = document.querySelector('#toc-title');\r\n\r\n  let activeLink = null;\r\n  let userClosedTOC = false; \/\/ Flag user menutup TOC\r\n\r\n  function handleScroll() {\r\n    const windowTop = window.pageYOffset || document.documentElement.scrollTop;\r\n    let currentHeader = '';\r\n\r\n    \/\/ Update TOC title sesuai header yang terlihat\r\n    headers.forEach(header => {\r\n      const headerTop = header.offsetTop;\r\n      const headerHeight = header.clientHeight;\r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n      } else {\r\n        if (window.scrollY >= (headerTop - headerHeight + 1750)) {\r\n          const currentHeaderId = header.getAttribute('id');\r\n          const currentHeaderText = document.getElementById(currentHeaderId).textContent;\r\n          tocTitle.textContent = currentHeaderText;\r\n          currentHeader = currentHeaderId;\r\n        }\r\n      }\r\n    });\r\n\r\n    navLinks.forEach(link => {\r\n      link.classList.remove('active');\r\n      if(currentHeader && link.getAttribute('href').includes(currentHeader)) {\r\n        link.classList.add('active');\r\n      }\r\n    });\r\n\r\n    if (windowTop > triggerPoint) {\r\n      if (!toc.classList.contains('sticky')) {\r\n        phtoc.style.display = \"block\";\r\n        toc.classList.add('sticky');\r\n        toc.style.width = `${tocParent.offsetWidth}px`;\r\n        toc.style.backgroundColor = \"#FFF\";\r\n        \/\/ Saat sticky, TOC otomatis tertutup\r\n        panel2.style.height = '0px';\r\n        icon.style.transform = \"rotate(180deg)\";\r\n        userClosedTOC = true; \/\/ Set flag supaya tidak terbuka saat scroll\r\n      }\r\n      \r\n      if(window.innerWidth < 767){\r\n        tocTitle.textContent = 'Daftar Isi'; \r\n        toc.style.width = '150px';\r\n      }\r\n\r\n    } else {\r\n      toc.classList.remove('sticky');\r\n      phtoc.style.display = \"none\";\r\n      toc.style.width = 'unset';\r\n      toc.style.backgroundColor = \"#FFF\";\r\n      tocTitle.textContent = 'Daftar isi'; \r\n\r\n      \/\/ Kembalikan panel jika user belum menutup manual\r\n      if(!userClosedTOC) {\r\n        panel2.style.height = panel2.scrollHeight + \"px\";\r\n        icon.style.transform = \"rotate(0deg)\";\r\n      }\r\n    }\r\n  }\r\n\r\n  window.addEventListener('scroll', handleScroll);\r\n  handleScroll();\r\n\r\n  \/\/ Toggle TOC saat user klik\r\n  const tocHeader = document.querySelector(\"#toc .header\");\r\n  tocHeader.addEventListener(\"click\", function() {\r\n    const panel = panel2;\r\n    if (panel.style.height !== '0px') {\r\n      panel.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    } else {\r\n      panel.style.height = panel.scrollHeight + \"px\";\r\n      icon.style.transform = \"rotate(0deg)\";\r\n      userClosedTOC = false;\r\n    }\r\n  });\r\n\r\n  \/\/ Close TOC saat link diklik\r\n  document.querySelectorAll(\"#toc .list a\").forEach(link => {\r\n    link.addEventListener(\"click\", function() {\r\n      panel2.style.height = '0px';\r\n      icon.style.transform = \"rotate(180deg)\";\r\n      userClosedTOC = true;\r\n    });\r\n  });\r\n});\r\n\/\/ END new JS for ToC improvements\r\n\r\n\t\r\n\/\/ \tmake the heading at the center of the viewport\r\n\/\/ \tdocument.addEventListener('DOMContentLoaded', function() {\r\n\/\/     \/\/ Add click event listener to all links in the TOC list\r\n\/\/     document.querySelectorAll('#toc-list a').forEach(anchor => {\r\n\/\/         anchor.addEventListener('click', function (e) {\r\n\/\/             e.preventDefault(); \/\/ Prevent the default behavior of jumping to the anchor\r\n\/\/ \/\/ \t\t\tconsole.log(\"prevent default\");\r\n\/\/             const targetId = this.getAttribute('href').substring(1); \/\/ Get the ID of the target element\r\n\/\/             const targetElement = document.getElementById(targetId); \/\/ Get the target element\r\n\r\n\/\/             if (targetElement) {\r\n\/\/                 const headerHeight = document.querySelector('#toc .header').offsetHeight; \/\/ Get the height of the fixed header\r\n\/\/                 const windowHeight = window.innerHeight; \/\/ Get the height of the viewport\r\n\/\/                 const targetOffset = targetElement.offsetTop; \/\/ Get the top offset of the target element\r\n\/\/                 const scrollTo = targetOffset + (windowHeight \/ 2) + (headerHeight); \/\/ Calculate the scroll position to center the target element\r\n\r\n\/\/                 \/\/ Scroll to the calculated position smoothly\r\n\/\/                 window.scrollTo({\r\n\/\/                     top: scrollTo,\r\n\/\/                     behavior: 'smooth'\r\n\/\/                 });\r\n\/\/             }\r\n\/\/         });\r\n\/\/     });\r\n\/\/ });\r\n<\/script>\r\n\r\n<script>\r\n    \/\/ Scrollspy function to highlight the active TOC item based on the scroll position\r\n  function scrollSpy(tocClass) {\r\n    const scrollPosition = window.scrollY;\r\n\r\n    \/\/ Find the active h2 and h3 headings based on their position in the corresponding TOC\r\n    let activeH2 = null;\r\n    let activeH3 = null;\r\n\r\n    const tocItems = document.querySelectorAll(`.${tocClass} li`);\r\n    tocItems.forEach(item => {\r\n      const a = item.querySelector('a');\r\n      if (!a) return;\r\n      const href = a.getAttribute('href');\r\n      const targetId = href.substring(1); \/\/ Remove the '#' from the href to get the target ID\r\n      const targetElement = document.getElementById(targetId);\r\n      if (!targetElement) return;\r\n\r\n      const targetTop = targetElement.getBoundingClientRect().top + scrollPosition;\r\n      const nextItem = item.nextElementSibling;\r\n      const nextTop = nextItem ? nextItem.getBoundingClientRect().top + scrollPosition : Infinity;\r\n\r\n      if (targetTop <= scrollPosition + 150) {\r\n        if (a.parentElement.parentElement === tocItems) {\r\n          \/\/ The h2 heading is at the root level of the TOC\r\n          activeH2 = { id: targetId, level: 'h2' };\r\n        } \r\n\t\t  else {\r\n          \/\/ The h3 heading is nested under an h2 heading\r\n          const parentH2 = a.parentElement.parentElement.previousElementSibling;\r\n          if (parentH2) {\r\n            const h2Link = parentH2.querySelector('a');\r\n            if (h2Link) {\r\n              const h2Href = h2Link.getAttribute('href');\r\n              const h2Id = h2Href.substring(1);\r\n              activeH2 = { id: h2Id, level: 'h2' };\r\n            }\r\n          }\r\n          activeH3 = { id: targetId, level: 'h3' };\r\n        }\r\n      }\r\n\r\n      if (targetTop > scrollPosition + 150 && nextTop > scrollPosition + 150 && !activeH3) {\r\n        \/\/ Reset the activeH2 when there are no more active h3 headings\r\n        activeH2 = null;\r\n      }\r\n    });\r\n\r\n    \/\/ Update the active state for the TOC items\r\n    tocItems.forEach(item => {\r\n      item.classList.remove('active');\r\n      const a = item.querySelector('a');\r\n      if (a) {\r\n        const href = a.getAttribute('href');\r\n        const targetId = href.substring(1);\r\n        if ((activeH2 && activeH2.id === targetId) || (activeH3 && activeH3.id === targetId)) {\r\n          item.classList.add('active');\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  \/\/ Call scrollSpy for each TOC on window scroll\r\n  const tocClasses = ['list_toc', 'list_toc_float']; \/\/ Add other TOC class names here if you have more than two instances\r\n  tocClasses.forEach(tocClass => {\r\n    window.addEventListener('scroll', () => scrollSpy(tocClass));\r\n  });\r\n<\/script>\r\n\r\n<!-- ToC List for desktop side bar, diganti jadi inject by php, di code snippet \"Sidebar Accordion\" -->\r\n<!-- <script>\r\n\tdocument.addEventListener(\"DOMContentLoaded\", function() {\r\n\r\n        \/\/ Fungsi untuk membuat nested list\r\n        function createNestedList(parentNode, children) {\r\n            if (children.length === 0) return;\r\n\r\n            const nestedUl = document.createElement('ul');\r\n            children.forEach(child => {\r\n                const nestedLi = document.createElement('li');\r\n                const nestedA = document.createElement('a');\r\n                nestedA.textContent = child.title;\r\n                nestedA.href = `#${child.id}`;\r\n                nestedLi.appendChild(nestedA);\r\n                nestedUl.appendChild(nestedLi);\r\n\r\n                if (child.children.length > 0) {\r\n                    createNestedList(nestedLi, child.children);\r\n                }\r\n            });\r\n\r\n            parentNode.appendChild(nestedUl);\r\n        }\r\n\r\n        \/\/ Membuat objek untuk menyimpan daftar h2 dan h3 beserta judulnya\r\n        const headings = [];\r\n\r\n           \/\/ Mengambil semua elemen h2 dan h3\r\n        \/\/ Mengambil semua elemen h2 dan h3\r\n\t\tconst elements = document.querySelectorAll('.td-post-content h2');\r\n\r\n\t\t\tfunction newFormatId(text) {\r\n\t\t\t\tif(text.toLowerCase() === \"key takeaways\") {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tconst result = text.toLowerCase()\r\n\t\t\t\t.trim()\r\n\t\t\t\t.replace(\/[^\\w\\s-]\/g, '')  \/\/ hapus tanda baca\r\n\t\t\t\t.replace(\/\\s+\/g, '-'); \/\/ ganti spasi jadi \"-\"\r\n\r\n\t\t\t\treturn result;\r\n\t\t\t}\r\n\t\r\n\t\telements.forEach(element => {\r\n\t\t\tif (element.tagName === 'H2') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h2\r\n\t\t\t\tif (element.textContent.toLowerCase() === \"key takeaways\") {return;} \/\/ Kalau Key Takeaways, jangan dimasukin\r\n\t\t\t\theadings.push({ level: 'h2', id: id, title: element.textContent, children: [] });\r\n\t\t\t} else if (element.tagName === 'H3') {\r\n\t\t\t\tconst id = newFormatId(element.textContent); \/\/ Hasilkan ID baru\r\n\t\t\t\telement.id = id; \/\/ Tetapkan ID ke elemen h3\r\n\t\t\t\tif (headings.length > 0) {\r\n\t\t\t\t\theadings[headings.length - 1].children.push({ level: 'h3', id: id, title: element.textContent, children: [] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n       \/\/ Membuat list HTML dari objek headings\r\n\t\tconst ul = document.getElementById('list_toc');\r\n\t\tlet currentUl = ul;\r\n\t\theadings.forEach(heading => {\r\n\t\t\tconst li = document.createElement('li');\r\n\t\t\tconst a = document.createElement('a');\r\n\t\t\ta.textContent = heading.title;\r\n\t\t\ta.href = `#${heading.id}`; \/\/ Gunakan ID yang baru dihasilkan\r\n\t\t\tli.appendChild(a);\r\n\r\n\t\t\tif (heading.level === 'h2') {\r\n\t\t\t\tcurrentUl = li;\r\n\t\t\t\tul.appendChild(li);\r\n\t\t\t} else if (heading.level === 'h3') {\r\n\t\t\t\tif (!currentUl.lastElementChild || currentUl.lastElementChild.tagName !== 'UL') {\r\n\t\t\t\t\tconst nestedUl = document.createElement('ul');\r\n\t\t\t\t\tcurrentUl.appendChild(nestedUl);\r\n\t\t\t\t\tcurrentUl = nestedUl;\r\n\t\t\t\t}\r\n\t\t\t\tcurrentUl.appendChild(li);\r\n\t\t\t}\r\n\r\n\t\t\tcreateNestedList(li, heading.children);\r\n\t\t});\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc'\r\n\t\tconst ulFloat = document.getElementById('list_toc');\r\n\r\n\t\t\/\/ Dapatkan isi (child elements) dari ul dengan id 'list_toc'\r\n\t\tconst clonedChildren = ulFloat.cloneNode(true).children;\r\n\r\n\t\t\/\/ Dapatkan elemen ul dengan id 'list_toc_float'\r\n\t\tconst ulToc = document.getElementById('list_toc_float');\r\n\r\n\t\t\/\/ Tambahkan isi yang telah didapatkan dari 'list_toc' ke ul dengan id 'list_toc_float'\r\n\t\tulToc.append(...clonedChildren);\r\n\r\n\r\n        \/\/ Fungsi untuk mengambil tinggi navbar\r\n\t\tfunction getNavbarHeight() {\r\n\t\t\tconst navbar = document.getElementById('tdi_34');\r\n\t\t\treturn navbar ? navbar.offsetHeight : 0;\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menambahkan offset posisi scroll\r\n\t\tfunction scrollToElementWithOffset(elementId) {\r\n\t\t\tconst element = document.getElementById(elementId);\r\n\t\t\tif (element) {\r\n\t\t\t\tconst offset = getNavbarHeight();\r\n\t\t\t\tconst elementPosition = element.getBoundingClientRect().top;\r\n\t\t\t\tconst offsetPosition = elementPosition - offset - 40;\r\n\r\n\t\t\t\twindow.scrollBy({\r\n\t\t\t\t\ttop: offsetPosition,\r\n\t\t\t\t\tbehavior: 'smooth'\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t\/\/ Fungsi untuk menangani klik pada tautan judul\r\n\t\tfunction handleTitleClick(event) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst href = event.target.getAttribute('href').substr(1);\r\n\t\t\tscrollToElementWithOffset(href);\r\n\t\t}\r\n\r\n\t\t\/\/ Tambahkan event listener untuk semua tautan judul\r\n\t\tconst titleLinks = document.querySelectorAll('a[href^=\"#\"]');\r\n\t\ttitleLinks.forEach(link => {\r\n\t\t\tlink.addEventListener('click', handleTitleClick);\r\n\t\t});\r\n\t\t\r\n\t});\r\n    <\/script> -->\r\n<\/span><\/p>\n<p><span data-sheets-root=\"1\">\r\n\r\n<script>\r\n    \/\/ check which image to use based on screensize\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        function updateImageSource() {\r\n            var images = document.querySelectorAll('.responsive-image-banner');\r\n            var screenWidth = window.innerWidth;\r\n\r\n            images.forEach(function(img) {\r\n                var mobileSrc = img.getAttribute('data-mobile-src');\r\n                var desktopSrc = img.getAttribute('data-desktop-src');\r\n\r\n                if (screenWidth < 576 && mobileSrc) {\r\n                    img.setAttribute('src', mobileSrc);\r\n                } else {\r\n                    img.setAttribute('src', desktopSrc);\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initial check\r\n        updateImageSource();\r\n\r\n        \/\/ Update on resize\r\n        window.addEventListener('resize', updateImageSource);\r\n    });\r\n<\/script><\/span><\/p>\n<h2><strong><span id=\"route\">Apa Itu Route Planning?<\/span><\/strong><\/h2>\n<p>Route planning adalah proses menentukan rute paling efisien untuk mencapai beberapa tujuan, dengan mempertimbangkan kapasitas kendaraan, jendela waktu, kondisi lalu lintas, dan prioritas pelanggan. Jadi, fungsinya untuk optimasi waktu tempuh, biaya bahan bakar, dan pemanfaatan armada.<\/p>\n<p>Bagi bisnis, perencanaan rute yang baik menurunkan biaya operasional, menaikkan tingkat ketepatan waktu (on-time rate), dan memperbaiki pengalaman pelanggan. Sebaliknya, rute yang buruk memicu keterlambatan, kelebihan biaya, dan hilangnya kepercayaan.<\/p>\n<p>Karena itu, memakai teknologi route planning membantu meningkatkan produktivitas hari-ke-hari sekaligus menyiapkan skala operasi yang lebih stabil.<\/p>\n<h2><strong><span id=\"manfaat\">Manfaat Strategis Route Planning bagi Pertumbuhan Bisnis<\/span><\/strong><\/h2>\n<p>Di tengah tuntutan pengiriman yang cepat dan biaya operasional yang terus naik, route planning menjadi strategi penting untuk menjaga efisiensi sekaligus meningkatkan kualitas layanan. Berikut beberapa manfaat utama dari penerapan route planning dalam bisnis.<\/p>\n<h3><strong>1. Reduksi biaya operasional<\/strong><\/h3>\n<p>Route planning membantu menurunkan biaya logistik dengan mengoptimalkan jarak tempuh dan waktu perjalanan. Sistem otomatis mempertimbangkan lalu lintas, jarak, dan kapasitas kendaraan, sehingga konsumsi bahan bakar dan jam lembur berkurang.<\/p>\n<p>Dampaknya, biaya perawatan kendaraan menurun dan umur armada lebih panjang, sekaligus meningkatkan efisiensi pengiriman tanpa menambah resource.<\/p>\n<h3><strong>2. Peningkatan produktivitas tim lapangan<\/strong><\/h3>\n<p>Perencanaan rute yang efisien memungkinkan distribusi tugas lebih merata dan waktu kerja lebih optimal. Pengemudi atau teknisi dapat menyelesaikan lebih banyak kunjungan per hari tanpa menambah beban kerja. Hasilnya, produktivitas naik dan waktu idle berkurang.<\/p>\n<h3><strong>3. Peningkatan kepuasan pelanggan<\/strong><\/h3>\n<p>Dengan rute yang tepat, perusahaan dapat memberikan estimasi waktu kedatangan (ETA) yang akurat dan menjaga ketepatan pengiriman. Pelanggan mendapatkan layanan yang lebih cepat dan konsisten, sehingga tingkat kepercayaan dan loyalitas meningkat.<\/p>\n<h3><strong>4. Pengambilan keputusan berbasis data akurat<\/strong><\/h3>\n<p>Software route planning modern mencatat setiap rute, waktu tempuh, dan keterlambatan secara otomatis. Data tersebut membentuk dasar laporan seperti ketepatan pengiriman, biaya per kilometer, dan kinerja pengemudi.<\/p>\n<p>Dengan analisis ini, manajemen dapat mengidentifikasi inefisiensi dan mengambil keputusan berbasis data nyata, bukan asumsi, sehingga perbaikan operasional bisa dilakukan lebih cepat dan terukur.<\/p>\n<h2><strong>Jenis Route Planning<\/strong><\/h2>\n<p>Route planning dapat diterapkan dengan pendekatan yang berbeda, tergantung kebutuhan operasional, jumlah titik pengiriman, dan tingkat kompleksitas rute. Berikut adalah jenis route planning yang umum ditemui.<\/p>\n<h3><strong>1. Route Planning Dinamis<\/strong><\/h3>\n<p>Menangani perubahan real-time seperti macet, order dadakan, atau kendaraan mogok dengan re-optimasi rute dan penugasan ulang ke armada lain. Saat rute diubah, sistem mempertimbangkan time window pelanggan, jam kerja pengemudi, dan kapasitas kendaraan. Hasilnya, layanan tetap berjalan tanpa banyak jeda.<\/p>\n<h3><strong>2. Route Planning Multi-Stop<\/strong><\/h3>\n<p>Mengoptimalkan urutan banyak pemberhentian agar jarak dan waktu tempuh lebih efisien. Dispatcher dapat membuat rute, menetapkan ke pengemudi, dan menghasilkan ETA akurat untuk tiap stop. Cocok untuk kurir, teknisi, atau sales dengan banyak kunjungan harian.<\/p>\n<h3><strong>3. Routing Jalur Tertutup (Closed Loop)<\/strong><\/h3>\n<p>Kendaraan berangkat dari depo\/DC dan wajib kembali ke titik awal di akhir perjalanan (pola \u201cU\u201d). Cocok untuk distribusi yang membutuhkan muat di awal dan rekap di akhir. Pola ini memudahkan kontrol stok kendaraan dan administrasi harian.<\/p>\n<h3><strong>4. Routing Jalur Terbuka (Open Loop)<\/strong><\/h3>\n<p>Kendaraan tidak wajib kembali ke titik awal; perjalanan bisa berakhir di stop terakhir atau lokasi lain yang ditentukan. Umum pada 3PL\/last-mile dengan volume tinggi dan jangka waktu pendek. Mengurangi deadhead miles, tetapi butuh rencana reposisi armada\/pengemudi setelah selesai.<\/p>\n<h2><strong>Perbedaan Perencanaan Rute Manual vs Otomatis<\/strong><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-174988\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis.webp\" alt=\"perbedaan perencanaan rute manual vs otomatis\" width=\"1200\" height=\"675\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis.webp 1200w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-300x169.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-768x432.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-747x420.webp 747w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-150x84.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-696x392.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/perbedaan-perencanaan-rute-manual-vs-otomatis-1068x601.webp 1068w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/p>\n<p>Banyak bisnis masih memakai perencanaan rute manual karena terbiasa, padahal cara ini rentan error dan memakan waktu. Sebaliknya, sistem otomatis mampu memproses data dan kondisi lapangan secara real-time untuk menghasilkan rute paling efisien. Berikut perbedaan utama keduanya.<\/p>\n<h3><strong>1. Keterbatasan perencanaan rute manual<\/strong><\/h3>\n<p>Perencanaan dengan peta\/spreadsheet mengharuskan input dan pengurutan titik satu-per-satu, sehingga memakan waktu saat stop banyak.<\/p>\n<p>Metode ini tidak mempertimbangkan kendala nyata (kapasitas kendaraan, jendela waktu, durasi layanan, jam kerja\/istirahat) dan lambat merespons perubahan real-time (macet, order dadakan). Akibatnya, rute tidak konsisten, biaya (km &amp; lembur) naik, dan sulit diskalakan atau diaudit.<\/p>\n<h3><strong>2. Keunggulan perencanaan rute otomatis<\/strong><\/h3>\n<p>Software menghitung urutan kunjungan optimal dalam hitungan menit dengan memperhitungkan kapasitas, time window, durasi layanan, dan jam kerja (setara menyelesaikan VRP\/VRPTW).<\/p>\n<p>Saat kondisi berubah, sistem re-optimasi dinamis, memperbarui ETA untuk tim dan pelanggan secara otomatis. Hasilnya rute konsisten, SLA lebih terjaga, dan planner fokus ke pengecualian alih-alih hitung rute manual.<\/p>\n<p>Agar lebih mudah melihat perbedaannya secara cepat, berikut ringkasan perencanaan rute manual vs otomatis dalam tabel:<\/p>\n<table>\n<tbody>\n<tr>\n<td style=\"width: 20%; background-color: #990000; color: #ffffff; padding: 5px; text-align: center;\"><b>Aspek<\/b><\/td>\n<td style=\"width: 40%; background-color: #990000; color: #ffffff; padding: 5px; text-align: center;\"><strong>Perencanaan Rute Manual<\/strong><\/td>\n<td style=\"width: 40%; background-color: #990000; color: #ffffff; padding: 5px; text-align: center;\"><strong>Perencanaan Rute Otomatis<\/strong><\/td>\n<\/tr>\n<tr>\n<td><strong>Kecepatan dan effort<\/strong><\/td>\n<td>Input dan pengurutan titik satu-per-satu, makin lama saat stop banyak.<\/td>\n<td>Menghitung urutan kunjungan optimal dalam hitungan menit.<b><br \/>\n<\/b><\/td>\n<\/tr>\n<tr>\n<td><strong>Akurasi dan faktor pembatas<\/strong><\/td>\n<td>Sering tidak memasukkan kapasitas, time window, durasi layanan, jam kerja\/istirahat.<\/td>\n<td>Mempertimbangkan kapasitas, time window, durasi layanan, dan jam kerja secara terstruktur.<b><br \/>\n<\/b><\/td>\n<\/tr>\n<tr>\n<td><strong>Respons real-time<\/strong><\/td>\n<td>Lambat merespons macet, order dadakan, dan perubahan kondisi lapangan.<\/td>\n<td>Re-optimasi dinamis saat kondisi berubah serta memperbarui ETA otomatis.<b><br \/>\n<\/b><\/td>\n<\/tr>\n<tr>\n<td><strong>Konsistensi dan skalabilitas<\/strong><\/td>\n<td>Rute tidak konsisten, biaya (km\/lembur) naik, dan sulit diaudit\/diskalakan.<\/td>\n<td>Rute lebih konsisten, SLA lebih terjaga, dan mudah dipantau serta diskalakan.<b><br \/>\n<\/b><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong>5 Langkah Praktis Implementasi Route Planning<\/strong><\/h2>\n<p>Penerapan route planning memerlukan perencanaan matang, data yang siap, dan tim yang terlatih agar hasilnya optimal. Berikut langkah-langkah praktis yang dapat Anda ikuti.<\/p>\n<h3><strong>1. Audit dan pengumpulan data<\/strong><\/h3>\n<p>Kumpulkan data penting seperti alamat pelanggan, rute historis, kapasitas armada, biaya per km, dan jam kerja pengemudi. Pastikan datanya akurat dan bersih (data cleansing) karena kualitas input menentukan hasil perencanaan. Ini jadi dasar dari seluruh proses implementasi.<\/p>\n<h3><strong>2. Tentukan tujuan dan KPI<\/strong><\/h3>\n<p>Sebelum memilih software, tetapkan tujuan yang terukur\u2014misalnya penghematan bahan bakar 15% atau peningkatan pengiriman 20%. Gunakan KPI yang SMART sebagai acuan evaluasi dan dasar pemilihan fitur. Dengan begitu, keberhasilan proyek bisa diukur objektif.<\/p>\n<h3><strong>3. Pilih software sesuai kebutuhan<\/strong><\/h3>\n<p>Pilih <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/transportation-management-system\/\">rekomendasi software manajemen transportasi terbaik<\/a> dengan fitur seperti optimasi multi-stop, GPS real-time, proof of delivery, dan integrasi ERP. Pastikan skalanya sesuai bisnis Anda, UI-nya mudah digunakan, dan dukungan teknisnya cepat. Solusi yang tepat harus fleksibel dan siap tumbuh bersama operasi Anda.<\/p>\n<h3><strong>4. Pelatihan tim dan sosialisasi<\/strong><\/h3>\n<p>Berikan pelatihan bagi dispatcher, manajer, dan pengemudi agar semua memahami cara kerja sistem dan manfaatnya. Komunikasi yang terbuka membantu menurunkan resistensi dan mempercepat adaptasi. Pastikan tiap peran tahu kontribusinya terhadap hasil akhir.<\/p>\n<h3><strong>5. Monitoring dan optimasi berkelanjutan<\/strong><\/h3>\n<p>Gunakan fitur analitik dan laporan kinerja untuk membandingkan hasil dengan KPI awal. Evaluasi rutin membantu menemukan area yang bisa diperbaiki dan menyesuaikan parameter sistem. Dengan pemantauan berkelanjutan, manfaat route planning akan terus maksimal.<\/p>\n<h2><strong>Integrasi Route Planning dengan Sistem Lain<\/strong><\/h2>\n<p>Agar hasilnya optimal, route planning harus terhubung dengan sistem lain seperti ERP, WMS, dan CRM. Berikut dampak integrasinya terhadap efisiensi operasional.<\/p>\n<h3><strong>1. Integrasi dengan ERP<\/strong><\/h3>\n<p>Integrasi dengan <a href=\"https:\/\/www.hashmicro.com\/id\">ERP seperti HashMicro<\/a> memastikan pesanan baru otomatis masuk ke sistem perencanaan rute tanpa input manual. Setelah pengiriman selesai, data status &amp; bukti digital dikirim balik ke ERP untuk men-trigger invoicing otomatis.<\/p>\n<p>Hasilnya, data antar departemen seperti penjualan, inventaris, dan keuangan tetap sinkron dan efisien. Proses end-to-end pun menjadi lebih cepat, minim human error, dan mudah diaudit.<\/p>\n<h3><strong>2. Integrasi dengan WMS<\/strong><\/h3>\n<p>Koneksi dengan Warehouse Management System (WMS) menyelaraskan aktivitas gudang dan pengiriman. Rute yang sudah dioptimalkan dikirim ke WMS sebagai urutan picking list, sehingga proses pengambilan barang lebih cepat.<\/p>\n<p>Sebaliknya, data stok siap kirim dari WMS mencegah rute berisi pesanan yang belum tersedia. Hasilnya, proses fulfillment lebih lancar, mengurangi delay, dan meningkatkan ketepatan jadwal pengiriman.<\/p>\n<h3><strong>3. Integrasi dengan CRM<\/strong><\/h3>\n<p>Integrasi dengan CRM memberi tim sales dan CS akses real-time ke status pengiriman dan lokasi pengemudi. Informasi seperti preferensi waktu kirim pelanggan juga otomatis diterapkan di optimasi rute.<\/p>\n<p>Dengan begitu, layanan jadi lebih personal, respons lebih cepat, dan kepuasan pelanggan meningkat. Tim internal juga bisa menangani komplain atau perubahan jadwal dengan lebih proaktif karena informasinya selalu ter-update.<\/p>\n<h2><strong>Optimalkan Logistik Anda dengan HashMicro TMS<\/strong><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-174625\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management.webp\" alt=\"fleet management hashmicro\" width=\"1191\" height=\"800\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management.webp 1191w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-300x202.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-1024x688.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-768x516.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-625x420.webp 625w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-150x101.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-696x468.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2024\/02\/hashmicro-fleet-management-1068x717.webp 1068w\" sizes=\"auto, (max-width: 1191px) 100vw, 1191px\" \/><\/p>\n<p><a href=\"https:\/\/www.hashmicro.com\/id\/transportation-management-software\">HashMicro Transportation Management Software<\/a> (TMS) menangani optimasi rute multi-stop, penugasan driver otomatis, geofencing, GPS live tracking, proof of delivery (foto\/e-signature), dan pengiriman ETA ke pelanggan. Aplikasi mobile tetap bisa dipakai saat offline, lalu data tersinkron ketika jaringan tersedia.<\/p>\n<p>TMS terintegrasi dengan Inventory, ERP, dan Accounting sehingga stok dan status pengiriman terbarui, order otomatis berubah jadi pengiriman lalu invoice, serta klaim biaya dan mileage terekam dari GPS.<\/p>\n<p>Dampaknya, waktu proses kirim lebih singkat, biaya per km dan lembur menurun, serta laporan kinerja (on-time rate, drop per trip, biaya per stop) lebih akurat.<\/p>\n<p>Fitur Transportation Management Software HashMicro:<\/p>\n<ul>\n<li><strong>Route &amp; Shipment Planning:<\/strong> Mengoptimalkan perencanaan rute dan pengiriman secara otomatis untuk menemukan jalur paling efisien, menghemat waktu dan biaya bahan bakar.<\/li>\n<li><strong>Real-Time GPS Tracking:<\/strong> Memberikan visibilitas penuh terhadap lokasi setiap armada secara <em>real-time<\/em>, memungkinkan pemantauan proaktif dan respons cepat terhadap kendala di lapangan.<\/li>\n<li><strong>Order Management Integration:<\/strong> Terintegrasi langsung dengan sistem manajemen pesanan untuk memastikan data pengiriman selalu sinkron dan mempercepat proses dari order hingga pengiriman.<\/li>\n<li><strong>Driver &amp; Fleet Management:<\/strong> Mengelola data pengemudi dan armada secara terpusat, termasuk jadwal, riwayat perjalanan, dan pemeliharaan kendaraan untuk menjaga kinerja optimal.<\/li>\n<li><strong>Comprehensive Reporting &amp; Analytics:<\/strong> Menghasilkan laporan analitik yang mendalam tentang kinerja pengiriman, biaya operasional, dan produktivitas pengemudi untuk mendukung pengambilan keputusan berbasis data.<\/li>\n<\/ul>\n<p>Untuk melihat bagaimana solusi kami dapat membantu bisnis Anda secara nyata, jangan ragu untuk mencoba <a href=\"https:\/\/www.hashmicro.com\/id\/tour-produk-gratis\/\">demo gratis<\/a> sekarang juga.<\/p>\n<h2><strong>Kesimpulan<\/strong><\/h2>\n<p>Route planning kini menjadi fungsi strategis yang penting bagi efisiensi dan daya saing bisnis modern. Dengan teknologi cerdas, perusahaan dapat menekan biaya, meningkatkan produktivitas, dan memperkuat kepuasan pelanggan.<\/p>\n<p>Beralih dari metode manual ke otomatisasi seperti <a href=\"https:\/\/www.hashmicro.com\/id\/transportation-management-software\">transportation management software HashMicro<\/a> adalah langkah penting untuk tetap relevan dan tumbuh. Evaluasi proses logistik Anda, tetapkan tujuan, dan manfaatkan solusi digital yang terintegrasi.<\/p>\n<p>Investasi pada route planning bukan sekadar efisiensi, tetapi juga fondasi bagi bisnis yang lebih cerdas, gesit, dan menguntungkan. Jangan lewatkan kesempatan <a href=\"https:\/\/www.hashmicro.com\/id\/tour-produk-gratis\/\">demo gratis<\/a> dan rasakan manfaatnya secara langsung!<\/p>\n<p><span data-sheets-root=\"1\"><a href=\"https:\/\/www.hashmicro.com\/id\/fleet-management?medium=moneysite-banner\" target=\"_blank\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/04\/Fleet.webp\" data-desktop-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/04\/Fleet.webp\" data-mobile-src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/04\/Fleet-2.webp\" alt=\"FleetManagement\" class=\"responsive-image-banner\"><\/a>\r\n\r\n<script>\r\n    \/\/ check which image to use based on screensize\r\n    document.addEventListener(\"DOMContentLoaded\", function() {\r\n        function updateImageSource() {\r\n            var images = document.querySelectorAll('.responsive-image-banner');\r\n            var screenWidth = window.innerWidth;\r\n\r\n            images.forEach(function(img) {\r\n                var mobileSrc = img.getAttribute('data-mobile-src');\r\n                var desktopSrc = img.getAttribute('data-desktop-src');\r\n\r\n                if (screenWidth < 576 && mobileSrc) {\r\n                    img.setAttribute('src', mobileSrc);\r\n                } else {\r\n                    img.setAttribute('src', desktopSrc);\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initial check\r\n        updateImageSource();\r\n\r\n        \/\/ Update on resize\r\n        window.addEventListener('resize', updateImageSource);\r\n    });\r\n<\/script><\/span><\/p>\n<h2><strong>Pertanyaan Seputar Route Planning<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Apa perbedaan antara route planning dan route optimization?<\/strong><\/summary>\n<p>Route planning adalah proses umum menentukan rute, bisa manual atau otomatis. Sementara itu, route optimization adalah proses otomatis menggunakan algoritma untuk menemukan rute paling efisien secara matematis dari berbagai kemungkinan, dengan mempertimbangkan banyak batasan.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Seberapa cepat saya bisa melihat ROI setelah mengimplementasikan software route planning?<\/strong><\/summary>\n<p>ROI dapat bervariasi, namun banyak perusahaan melaporkan penghematan signifikan dalam 3-6 bulan pertama. Penghematan tercepat biasanya terlihat dari penurunan biaya bahan bakar dan pengurangan waktu lembur pengemudi.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Data apa saja yang paling penting untuk memulai perencanaan rute otomatis?<\/strong><\/summary>\n<p>Data paling krusial adalah daftar alamat pengiriman yang akurat, informasi detail armada (kapasitas), dan batasan operasional dasar seperti jam kerja pengemudi serta jendela waktu layanan pelanggan.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Bagaimana sistem menangani perubahan mendadak seperti kemacetan?<\/strong><\/summary>\n<p>Sistem modern bersifat dinamis. Jika ada pembatalan order, dispatcher dapat menghapusnya dan sistem akan menghitung ulang rute terbaik. Untuk kemacetan, sistem yang terintegrasi data lalu lintas real-time dapat secara proaktif menyarankan rute alternatif.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apakah software route planning hanya cocok untuk perusahaan besar?<\/strong><\/summary>\n<p>Tidak. Bisnis kecil dan menengah (UKM) dengan beberapa kendaraan pun bisa mendapatkan manfaat besar. Software modern kini lebih terjangkau, memungkinkan UKM meningkatkan efisiensi dan membangun fondasi untuk pertumbuhan tanpa investasi awal yang besar.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n<p><script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Apa perbedaan antara route planning dan route optimization?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Route planning adalah proses menentukan rute, bisa manual atau otomatis. Route optimization menggunakan algoritma untuk menemukan rute paling efisien dengan mempertimbangkan banyak batasan.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Seberapa cepat saya bisa melihat ROI setelah mengimplementasikan software route planning?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"ROI berbeda di tiap bisnis, namun banyak perusahaan melihat penghematan dalam 3\u20136 bulan pertama. Efisiensi paling cepat terlihat dari pengurangan biaya bahan bakar dan waktu lembur.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Data apa saja yang paling penting untuk memulai perencanaan rute otomatis?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Data krusial mencakup daftar alamat pengiriman yang akurat, detail armada seperti kapasitas kendaraan, serta jam kerja pengemudi dan jendela waktu pelanggan.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Bagaimana sistem menangani perubahan mendadak seperti kemacetan?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Sistem modern bersifat dinamis dan dapat menghitung ulang rute ketika ada pembatalan atau perubahan. Jika terhubung ke data lalu lintas real-time, sistem otomatis menyarankan rute alternatif.\"\n      }\n    },\n    {\n      \"@type\": \"Question\",\n      \"name\": \"Apakah software route planning hanya cocok untuk perusahaan besar?\",\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": \"Tidak. Bisnis kecil dan menengah juga bisa memperoleh manfaat besar karena software modern kini lebih terjangkau dan mudah digunakan tanpa investasi besar.\"\n      }\n    }\n  ]\n}\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dalam menghadapi tantangan logistik, perusahaan bisa mengimplementasikan route planning untuk menjaga efisiensi dan ketepatan waktu pengiriman. Tanpa perencanaan rute yang optimal, perusahaan berisiko mengalami pemborosan bahan bakar, keterlambatan distribusi, dan penurunan kepuasan pelanggan. Dengan bantuan transportation management software, proses perencanaan rute kini dapat diotomatisasi dan disesuaikan secara real time. Sistem ini membantu memaksimalkan penggunaan armada, [&hellip;]<\/p>\n","protected":false},"author":161,"featured_media":174989,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1156],"tags":[],"class_list":{"0":"post-174851","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-transport-management"},"acf":{"post_reviewer":""},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.1 (Yoast SEO v25.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pentingnya Route Planning bagi Proses Logistik<\/title>\n<meta name=\"description\" content=\"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tingkatkan Efisiensi Proses Logistik dengan Route Planning\" \/>\n<meta property=\"og:description\" content=\"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\" \/>\n<meta property=\"og:site_name\" content=\"HashMicro Indonesia\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hashmicro\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-03T02:00:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-01-06T07:40:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Jonathan Kurniawan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:site\" content=\"@hashmicro\" \/>\n<meta name=\"twitter:label1\" content=\"Ditulis oleh\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Kurniawan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 menit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\"},\"author\":{\"name\":\"Jonathan Kurniawan\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/029ac06d135cf8424dfa4f3cb3fef6c5\"},\"headline\":\"Tingkatkan Efisiensi Proses Logistik dengan Route Planning\",\"datePublished\":\"2025-01-03T02:00:04+00:00\",\"dateModified\":\"2026-01-06T07:40:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\"},\"wordCount\":1914,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp\",\"articleSection\":[\"Transport Management\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\",\"name\":\"Pentingnya Route Planning bagi Proses Logistik\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp\",\"datePublished\":\"2025-01-03T02:00:04+00:00\",\"dateModified\":\"2026-01-06T07:40:50+00:00\",\"description\":\"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp\",\"width\":1200,\"height\":675,\"caption\":\"route planning hashmicro\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/id\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tingkatkan Efisiensi Proses Logistik dengan Route Planning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#website\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/\",\"name\":\"HashMicro Indonesia\",\"description\":\"Blog Software Manajemen Bisnis Indonesia #1\",\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"id\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\",\"name\":\"HashMicro Indonesia\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp\",\"width\":924,\"height\":121,\"caption\":\"HashMicro Indonesia\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/hashmicro\",\"https:\/\/x.com\/hashmicro\",\"https:\/\/www.linkedin.com\/company\/hashmicro\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/029ac06d135cf8424dfa4f3cb3fef6c5\",\"name\":\"Jonathan Kurniawan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jonathan-Kurniawan-3-96x96.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jonathan-Kurniawan-3-96x96.webp\",\"caption\":\"Jonathan Kurniawan\"},\"description\":\"Jonathan adalah seorang praktisi dalam bidang procurement, TMS, dan supply chain dengan pengalaman 5 tahun. Spesialis dalam mengulas topik seputar manajemen vendor, budget control procurement, otomatisasi proses pengadaan barang, dan analisis procurement. Tulisannya secara konsisten mendukung pengambilan keputusan bisnis yang lebih strategis.\",\"sameAs\":[\"https:\/\/www.hashmicro.com\/id\/\"],\"gender\":\"laki-laki\",\"knowsAbout\":[\"procurement\",\"pengadaan\",\"pembelian\"],\"knowsLanguage\":[\"Inggris\",\"Indonesia\"],\"jobTitle\":\"Senior Content Writer\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/author\/jonathankurniawan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pentingnya Route Planning bagi Proses Logistik","description":"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/","og_locale":"id_ID","og_type":"article","og_title":"Tingkatkan Efisiensi Proses Logistik dengan Route Planning","og_description":"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2025-01-03T02:00:04+00:00","article_modified_time":"2026-01-06T07:40:50+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp","type":"image\/webp"}],"author":"Jonathan Kurniawan","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Jonathan Kurniawan","Estimasi waktu membaca":"12 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/"},"author":{"name":"Jonathan Kurniawan","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/029ac06d135cf8424dfa4f3cb3fef6c5"},"headline":"Tingkatkan Efisiensi Proses Logistik dengan Route Planning","datePublished":"2025-01-03T02:00:04+00:00","dateModified":"2026-01-06T07:40:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/"},"wordCount":1914,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp","articleSection":["Transport Management"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/","name":"Pentingnya Route Planning bagi Proses Logistik","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp","datePublished":"2025-01-03T02:00:04+00:00","dateModified":"2026-01-06T07:40:50+00:00","description":"Temukan bagaimana route planning dapat meningkatkan kecepatan pengiriman dan membantu Anda mencapai keunggulan kompetitif.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/01\/route-planning-hashmicro.webp","width":1200,"height":675,"caption":"route planning hashmicro"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/route-planning\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Tingkatkan Efisiensi Proses Logistik dengan Route Planning"}]},{"@type":"WebSite","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website","url":"https:\/\/www.hashmicro.com\/id\/blog\/","name":"HashMicro Indonesia","description":"Blog Software Manajemen Bisnis Indonesia #1","publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hashmicro.com\/id\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"id"},{"@type":"Organization","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization","name":"HashMicro Indonesia","url":"https:\/\/www.hashmicro.com\/id\/blog\/","logo":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2023\/11\/hashmicro-logo-blog.webp","width":924,"height":121,"caption":"HashMicro Indonesia"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hashmicro","https:\/\/x.com\/hashmicro","https:\/\/www.linkedin.com\/company\/hashmicro"]},{"@type":"Person","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/029ac06d135cf8424dfa4f3cb3fef6c5","name":"Jonathan Kurniawan","image":{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jonathan-Kurniawan-3-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Jonathan-Kurniawan-3-96x96.webp","caption":"Jonathan Kurniawan"},"description":"Jonathan adalah seorang praktisi dalam bidang procurement, TMS, dan supply chain dengan pengalaman 5 tahun. Spesialis dalam mengulas topik seputar manajemen vendor, budget control procurement, otomatisasi proses pengadaan barang, dan analisis procurement. Tulisannya secara konsisten mendukung pengambilan keputusan bisnis yang lebih strategis.","sameAs":["https:\/\/www.hashmicro.com\/id\/"],"gender":"laki-laki","knowsAbout":["procurement","pengadaan","pembelian"],"knowsLanguage":["Inggris","Indonesia"],"jobTitle":"Senior Content Writer","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/jonathankurniawan\/"}]}},"focus_keyword":"route planning","order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/174851","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/users\/161"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=174851"}],"version-history":[{"count":10,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/174851\/revisions"}],"predecessor-version":[{"id":183035,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/174851\/revisions\/183035"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/174989"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=174851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=174851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=174851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}