{"id":172995,"date":"2025-10-21T15:42:16","date_gmt":"2025-10-21T08:42:16","guid":{"rendered":"https:\/\/www.hashmicro.com\/id\/blog\/?p=172995"},"modified":"2026-03-12T14:10:57","modified_gmt":"2026-03-12T07:10:57","slug":"odoo-vs-zahir","status":"publish","type":"post","link":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/","title":{"rendered":"Perbandingan Antara Odoo vs Zahir"},"content":{"rendered":"<p>Memilih software untuk mengelola operasional bisnis bukan hal yang sederhana. Banyak perusahaan akhirnya membandingkan Odoo dan Zahir karena keduanya sama-sama menawarkan sistem terintegrasi untuk membantu proses kerja jadi lebih tertata.<\/p>\n<p>Meski begitu, pendekatan keduanya tidak sama. Odoo dikenal dengan pilihan modul yang luas dan fleksibilitas kustomisasi, sedangkan Zahir lebih dulu dikenal lewat kekuatannya di akuntansi sambil tetap menawarkan solusi bisnis terintegrasi, termasuk ERP.<\/p>\n<p>Karena itu, perusahaan perlu melihat lebih dari sekadar nama besar atau fitur umum. Perbandingan yang tepat akan membantu bisnis menilai sistem mana yang lebih sesuai dengan kebutuhan operasional, anggaran, dan rencana pertumbuhan jangka panjang<\/p>\n<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 \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>\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 style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"#odoo\">Odoo<\/a> adalah software ERP open-source yang membantu bisnis mengelola akuntansi, inventaris, dan penjualan dalam satu sistem terintegrasi.<\/li>\n<li aria-level=\"1\"><a href=\"#zahir\">Zahir<\/a> adalah software akuntansi lokal yang dirancang untuk membantu bisnis mengelola keuangan, laporan, dan transaksi secara efisien.<\/li>\n<li aria-level=\"1\"><a href=\"https:\/\/www.hashmicro.com\/id\/sistem-erp\">Software ERP HashMicro<\/a> sebagai alternatif Odoo dan Zahir mengintegrasikan berbagai proses bisnis.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><strong>Apa Itu Odoo dan Zahir?<\/strong><\/h2>\n<p>Sebelum membandingkan fitur, penting untuk memahami posisi Odoo dan Zahir terlebih dahulu. Keduanya sama-sama digunakan untuk membantu pengelolaan bisnis, tetapi punya pendekatan yang berbeda.<\/p>\n<h3><strong><span id=\"odoo\">1. Apa itu Odoo?<\/span><\/strong><\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-177625\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr.webp\" alt=\"payroll rumah sakit\" width=\"1920\" height=\"1080\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr.webp 1920w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-300x169.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-1024x576.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-768x432.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-1536x864.webp 1536w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-747x420.webp 747w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-150x84.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-696x392.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/odoo-hr-1068x601.webp 1068w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/p>\n<p>Odoo adalah software bisnis berbasis modul yang dapat digunakan untuk mengelola berbagai proses, seperti CRM, akuntansi, inventaris, penjualan, hingga manufaktur. Sistem ini banyak dipilih karena fleksibel dan dapat disesuaikan dengan kebutuhan perusahaan.<\/p>\n<p>Pendekatan modular membuat bisnis bisa mulai dari fitur yang paling dibutuhkan, lalu menambah modul lain seiring pertumbuhan operasional. Namun, tingkat fleksibilitas yang tinggi juga sering membuat implementasinya membutuhkan penyesuaian yang lebih detail.<\/p>\n<h3><strong><span id=\"zahir\">2. Apa itu Zahir?<\/span><\/strong><\/h3>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-173033\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr.webp\" alt=\"aplikasi lembur greatday hr\" width=\"1172\" height=\"626\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr.webp 1172w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-300x160.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-1024x547.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-768x410.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-786x420.webp 786w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-150x80.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-696x372.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/09\/aplikasi-lembur-zahir-hr-1068x570.webp 1068w\" sizes=\"auto, (max-width: 1172px) 100vw, 1172px\" \/><\/p>\n<p>Zahir dikenal sebagai software yang kuat dalam pengelolaan akuntansi dan keuangan bisnis. Seiring waktu, Zahir juga menghadirkan fitur yang lebih luas untuk mendukung operasional perusahaan, termasuk kebutuhan bisnis yang lebih terintegrasi.<\/p>\n<p>Banyak bisnis mempertimbangkan Zahir karena tampilannya relatif mudah dipahami dan lebih dekat dengan kebutuhan pembukuan di Indonesia. Meski begitu, kekuatan utamanya tetap paling terasa pada sisi keuangan, sehingga perusahaan perlu menilai apakah cakupan fiturnya sudah sesuai dengan kebutuhan operasional yang lebih luas.<\/p>\n<h2><strong>Perbandingan Odoo vs Zahir dari Sisi Bisnis<\/strong><\/h2>\n<p>Memilih software bisnis tidak cukup hanya melihat daftar fitur. Perusahaan juga perlu mempertimbangkan biaya, kemudahan penggunaan, fleksibilitas, dan kemampuan sistem untuk mengikuti pertumbuhan bisnis.<\/p>\n<div style=\"overflow-x: auto; margin: 24px 0; font-family: Arial, sans-serif;\">\n<table style=\"width: 100%; border-collapse: separate; border-spacing: 0; background: #ffffff; border: 1px solid #eadfe2; border-radius: 14px; overflow: hidden; box-shadow: 0 6px 18px rgba(111,29,27,0.08); font-size: 14px; line-height: 1.7; color: #2b2b2b;\">\n<thead>\n<tr>\n<th style=\"background: #6f1d1b; color: #fff; padding: 14px 16px; text-align: left; width: 22%; font-size: 14px;\">Aspek<\/th>\n<th style=\"background: #6f1d1b; color: #fff; padding: 14px 16px; text-align: left; width: 39%; font-size: 14px;\">Odoo<\/th>\n<th style=\"background: #6f1d1b; color: #fff; padding: 14px 16px; text-align: left; width: 39%; font-size: 14px;\">Zahir<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 14px 16px; vertical-align: top; font-weight: bold; background: #fcf7f8; border-top: 1px solid #f1e7e9;\">Posisi produk<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Platform bisnis terintegrasi<\/li>\n<li>Modulnya luas<\/li>\n<li>CRM, accounting, inventory, project, manufacturing<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Lekat dengan software akuntansi online<\/li>\n<li>Fokus kuat di keuangan<\/li>\n<li>Juga menawarkan solusi ERP\/enterprise<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 16px; vertical-align: top; font-weight: bold; background: #fcf7f8; border-top: 1px solid #f1e7e9;\">Cakupan fitur<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Modul bisnis lebih lengkap<\/li>\n<li>Cocok untuk lintas divisi<\/li>\n<li>Bisa berkembang sesuai kebutuhan<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Fitur inti bisnis sudah tersedia<\/li>\n<li>Invoice, dashboard, inventory, laporan<\/li>\n<li>Lebih fokus pada operasional dasar<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 16px; vertical-align: top; font-weight: bold; background: #fcf7f8; border-top: 1px solid #f1e7e9;\">Fleksibilitas<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Lebih fleksibel dan modular<\/li>\n<li>Punya ekosistem open-source<\/li>\n<li>Cocok untuk kebutuhan yang lebih kompleks<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Lebih praktis untuk mulai cepat<\/li>\n<li>Penyesuaian cenderung lebih terbatas<\/li>\n<li>Cocok untuk kebutuhan yang lebih standar<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 16px; vertical-align: top; font-weight: bold; background: #fcf7f8; border-top: 1px solid #f1e7e9;\">Model penggunaan<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Tersedia paket berlangganan<\/li>\n<li>All apps, support, hosting, maintenance<\/li>\n<li>Ada opsi on-premise<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Tersedia cloud subscription<\/li>\n<li>Ada opsi on-premise atau beli putus<\/li>\n<li>Lebih familiar bagi bisnis lokal<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 14px 16px; vertical-align: top; font-weight: bold; background: #fcf7f8; border-top: 1px solid #f1e7e9;\">Kecocokan bisnis<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Cocok untuk proses bisnis yang lebih luas<\/li>\n<li>Baik untuk ekspansi modul bertahap<\/li>\n<li>Pas untuk kebutuhan lintas fungsi<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 14px 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Cocok untuk fokus akuntansi dan operasional inti<\/li>\n<li>Lebih dekat ke kebutuhan bisnis Indonesia<\/li>\n<li>Pas untuk proses yang lebih sederhana<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<h3><strong>1. Model bisnis dan harga<\/strong><\/h3>\n<p>Odoo menggunakan model berlangganan, dan halaman resminya menampilkan paket dengan akses ke banyak aplikasi dalam satu platform. Namun, biaya total tetap bisa bertambah jika perusahaan membutuhkan implementasi partner, hosting tertentu, atau kustomisasi tambahan.<\/p>\n<p>Zahir juga menyediakan model berlangganan, sekaligus opsi on-premise atau beli putus untuk kebutuhan tertentu. Bagi banyak bisnis di Indonesia, pendekatan ini bisa terasa lebih sederhana saat memilih paket sesuai skala usaha.<\/p>\n<h3><strong>2. Kelengkapan modul<\/strong><\/h3>\n<p>Dari sisi cakupan fitur, Odoo menawarkan modul yang sangat luas. Sistem ini mencakup CRM, sales, accounting, inventory, POS, project, manufacturing, purchase, maintenance, hingga quality dalam satu ekosistem.<\/p>\n<p>Zahir punya fitur penting untuk kebutuhan bisnis sehari-hari, seperti akuntansi, invoice, dashboard, kas dan bank, inventory, serta laporan keuangan. Jadi, kekuatannya paling terasa pada pengelolaan keuangan dan operasional dasar yang terhubung.<\/p>\n<h3><strong>3. Fleksibilitas sistem<\/strong><\/h3>\n<p>Odoo dikenal fleksibel karena berbasis modular dan memiliki ekosistem open-source yang besar. Ini membuatnya lebih mudah dikembangkan ketika perusahaan membutuhkan proses yang lebih kompleks atau penyesuaian yang lebih spesifik.<\/p>\n<p>Zahir cenderung lebih praktis untuk bisnis yang ingin sistem yang lebih langsung dipakai. Pendekatan ini bisa memudahkan perusahaan yang tidak ingin terlalu banyak penyesuaian teknis di awal. Inference ini didukung oleh positioning Zahir yang lebih menonjolkan kemudahan software akuntansi online dibanding ekosistem kustomisasi terbuka seperti Odoo.<\/p>\n<h3><strong>4. Skalabilitas bisnis<\/strong><\/h3>\n<p>Odoo lebih cocok untuk perusahaan yang ingin menambah modul seiring pertumbuhan bisnis. Karena modulnya luas, perusahaan bisa mulai dari kebutuhan tertentu lalu berkembang ke fungsi lain dalam platform yang sama.<\/p>\n<p>Zahir tetap bisa mendukung bisnis yang berkembang, terutama pada area akuntansi, inventory, dan operasional inti.<\/p>\n<p>Namun, untuk perusahaan yang membutuhkan cakupan proses yang sangat luas atau alur yang lebih kompleks, Odoo biasanya memberi ruang pengembangan yang lebih besar. Bagian ini merupakan inferensi dari perbedaan cakupan modul resmi kedua platform.<\/p>\n<h3><strong>5. Implementasi dan dukungan<\/strong><\/h3>\n<p>Odoo menyediakan support resmi pada paketnya, tetapi untuk implementasi yang lebih kompleks biasanya perusahaan juga mempertimbangkan partner. Hal ini terlihat dari pricing configurator dan estimator resmi yang memasukkan opsi partner dalam proses implementasi.<\/p>\n<p>Zahir terlihat lebih dekat dengan pasar Indonesia, baik dari bahasa, positioning produk, maupun model penawarannya. Karena itu, banyak bisnis lokal bisa merasa lebih familiar saat memulai penggunaan, terutama jika fokus utamanya masih di akuntansi dan pembukuan.<\/p>\n<p><strong>Baca Juga:<\/strong> <a href=\"https:\/\/www.hashmicro.com\/id\/blog\/syspro-erp\/\">Review SYSPRO ERP 2026: Fitur, Kekurangan &amp;amp; Alternatifnya<\/a><\/p>\n<h2><strong>Kapan Memilih Odoo dan Kapan Memilih Zahir?<\/strong><\/h2>\n<p>Memilih software bisnis sebaiknya disesuaikan dengan kebutuhan operasional perusahaan. Odoo dan Zahir bisa sama-sama membantu bisnis, tetapi kecocokannya berbeda tergantung proses kerja, skala usaha, dan fokus utama perusahaan.<\/p>\n<p>Secara umum, Odoo lebih cocok untuk perusahaan yang membutuhkan modul bisnis yang lebih luas. Sementara itu, Zahir lebih relevan untuk bisnis yang ingin fokus pada akuntansi, pembukuan, dan operasional inti yang lebih praktis.<\/p>\n<h3><strong>1. Pilih Odoo jika bisnis punya proses yang lebih kompleks<\/strong><\/h3>\n<p>Odoo lebih cocok untuk perusahaan yang membutuhkan alur kerja lintas divisi, seperti penjualan, inventory, manufaktur, quality, dan project dalam satu sistem. Odoo juga punya fitur BoM, work orders, dan quality yang mendukung kebutuhan produksi yang lebih detail.<\/p>\n<p>Contohnya, perusahaan manufaktur dengan banyak variasi produk atau proses produksi bertahap biasanya akan lebih terbantu dengan sistem yang modular. Selain itu, Odoo juga menyediakan website dan portal, sehingga lebih relevan untuk bisnis yang ingin menghubungkan operasional dengan kanal digital.<\/p>\n<h3><strong>2. Pilih Zahir jika fokus utama ada di akuntansi dan operasional dasar<\/strong><\/h3>\n<p>Zahir lebih cocok untuk bisnis yang ingin memprioritaskan pencatatan keuangan, invoice, kas dan bank, inventory, dan laporan yang rapi. Dari positioning resminya, kekuatan Zahir memang paling terlihat pada kebutuhan akuntansi dan pengelolaan bisnis harian.<\/p>\n<p>Karena itu, Zahir bisa lebih pas untuk UKM atau perusahaan dagang yang ingin sistem yang lebih familiar dan tidak terlalu berat di sisi teknis. Pilihan ini biasanya relevan ketika kebutuhan utama bisnis masih berpusat pada keuangan, penjualan, dan kontrol stok dasar.<\/p>\n<div style=\"overflow-x: auto; margin: 24px 0; font-family: Arial, sans-serif;\">\n<table style=\"width: 100%; border-collapse: separate; border-spacing: 0; background: #ffffff; border: 1px solid #eadfe2; border-radius: 14px; overflow: hidden; box-shadow: 0 6px 18px rgba(111,29,27,0.08); font-size: 14px; line-height: 1.7; color: #2b2b2b;\">\n<thead>\n<tr>\n<th style=\"background: #6f1d1b; color: #fff; padding: 14px 16px; text-align: left; width: 50%; font-size: 15px;\">Pilih Odoo jika&#8230;<\/th>\n<th style=\"background: #6f1d1b; color: #fff; padding: 14px 16px; text-align: left; width: 50%; font-size: 15px;\">Pilih Zahir jika&#8230;<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Bisnis butuh modul yang lebih luas, seperti CRM, inventory, manufacturing, project, dan quality.<\/li>\n<li>Perusahaan ingin memakai satu sistem untuk banyak divisi.<\/li>\n<li>Proses kerja cukup kompleks dan butuh penyesuaian lebih lanjut.<\/li>\n<li>Ada rencana menambah modul seiring pertumbuhan bisnis.<\/li>\n<li>Bisnis ingin menghubungkan operasional dengan website atau portal digital.<\/li>\n<\/ul>\n<\/td>\n<td style=\"padding: 16px; vertical-align: top; border-top: 1px solid #f1e7e9;\">\n<ul style=\"margin: 0; padding-left: 18px;\">\n<li>Fokus utama bisnis ada pada akuntansi, invoice, kas dan bank, serta laporan keuangan.<\/li>\n<li>Perusahaan ingin sistem yang lebih praktis dan lebih familiar untuk pasar Indonesia.<\/li>\n<li>Kebutuhan operasional masih berada di level inti, seperti pembukuan, penjualan, dan stok dasar.<\/li>\n<li>Tim membutuhkan software yang lebih mudah dipahami sejak awal.<\/li>\n<li>Bisnis belum memerlukan alur ERP yang terlalu kompleks.<\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<style>\r\n.cta-in-article-image .desktop-banner{\r\n    display: none;\r\n    text-align: center;\r\n}\r\n.cta-in-article-image .desktop-mobile{\r\n    display: block;\r\n    text-align: center;\r\n    width: 100%;\r\n}\r\n\t.cta-in-article a {\r\n\t\tfont-size: 0px !important;\r\n\t\tcolor: #fff; \r\n\t\tpadding: 0px !important; \r\n\t\tborder-radius: 0px !important; \r\n\t\tdisplay: block !important; \r\n\t\ttext-decoration: none; \r\n\t}\r\n\t\r\n\t.cta-in-article {\r\n\t\tmargin: 0px !important;\r\n\t\tpadding: 0px !important;\r\n\t\tbox-shadow: none !important;\r\n\t}\r\n\t\r\n@media (min-width: 650px) {\r\n    .cta-in-article-image .desktop-banner {\r\n        display: block!important;\r\n    }\r\n}\r\n@media (min-width: 650px) {\r\n   .cta-in-article-image .desktop-mobile {\r\n        display: none!important;\r\n    }\r\n}\r\n<\/style>\r\n<div class=\"cta-in-article-image\">\r\n\t<a href=\"https:\/\/www.hashmicro.com\/id\/offer\/download-skema-harga-software-erp?blog&utm_source=blog&medium=banner-article\" target=\"_blank\" rel=\"noopener\">\r\n\t\t<div id=\"desktop-banner-container\">\r\n\t\t\t<div class=\"desktop-banner\">\r\n\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/02.Skema-Harga-web-resized.webp\" alt=\"download skema harga software erp\">\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t<div id=\"mobile-banner-container\">\r\n\t\t\t<div class=\"desktop-mobile\">\r\n\t\t\t\t<img decoding=\"async\" width=\"372\" height=\"465\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/02.-Skema-Harga-Mobile-372px.webp\" alt=\"download skema harga software erp\">\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t<\/a>\r\n<\/div>\n<h2><strong>Memperkenalkan HashMicro sebagai Alternatif<\/strong><\/h2>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-190318\" src=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM.webp\" alt=\"biaya peluang\" width=\"1903\" height=\"846\" srcset=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM.webp 1903w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-300x133.webp 300w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-1024x455.webp 1024w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-768x341.webp 768w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-1536x683.webp 1536w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-945x420.webp 945w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-150x67.webp 150w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-696x309.webp 696w, https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/03\/biaya-peluang-HM-1068x475.webp 1068w\" sizes=\"auto, (max-width: 1903px) 100vw, 1903px\" \/><\/p>\n<p>Selain Odoo dan Zahir, ada juga HashMicro yang sering dipertimbangkan oleh bisnis di Indonesia.<\/p>\n<p>HashMicro menampilkan ERP terintegrasi dengan banyak modul bisnis, fitur yang bisa dikustomisasi, serta solusi untuk berbagai industri.<\/p>\n<p>Pendekatan ini membuat HashMicro lebih relevan untuk perusahaan yang ingin memakai sistem yang lebih luas, tetapi tetap membutuhkan penyesuaian sesuai alur kerja masing-masing.<\/p>\n<p>Jadi, posisinya bukan sekadar alternatif tambahan, melainkan opsi lain bagi bisnis yang ingin menyeimbangkan fleksibilitas, cakupan modul, dan dukungan implementasi.<\/p>\n<h3><strong>1. Unlimited user<\/strong><\/h3>\n<p>HashMicro menyebut bahwa sistem ERP-nya menawarkan unlimited user license, sehingga perusahaan dapat menambah pengguna tanpa biaya lisensi tambahan per user. Poin ini bisa menjadi pertimbangan bagi bisnis yang ingin melibatkan lebih banyak tim dalam satu sistem.<\/p>\n<h3><strong>2. Bisa dikustomisasi dengan dukungan lokal<\/strong><\/h3>\n<p>HashMicro juga menekankan bahwa modulnya dapat disesuaikan dengan kebutuhan bisnis. Selain itu, mereka memiliki kehadiran dan support di Indonesia, sehingga perusahaan bisa mempertimbangkannya jika membutuhkan pendampingan yang lebih dekat selama implementasi.<\/p>\n<h3><strong>3. Solusi untuk berbagai industri<\/strong><\/h3>\n<p>Di situs resminya, HashMicro menampilkan solusi untuk banyak sektor, seperti manufaktur, konstruksi, retail, F&amp;B, distribusi, hingga jasa. Ini memberi gambaran bahwa sistemnya memang diposisikan untuk kebutuhan industri yang berbeda, bukan hanya fungsi bisnis umum.<\/p>\n<h2><strong>Kesimpulan<\/strong><\/h2>\n<p>Pada akhirnya, pilihan antara Odoo, Zahir, dan software lain perlu disesuaikan dengan kebutuhan bisnis masing-masing. Odoo lebih cocok untuk perusahaan yang membutuhkan modul luas dan fleksibilitas tinggi, sedangkan Zahir lebih relevan untuk bisnis yang ingin fokus pada akuntansi dan operasional inti.<\/p>\n<p>Di luar dua opsi tersebut, <a href=\"https:\/\/www.hashmicro.com\/id\/sistem-erp\">HashMicro<\/a> juga bisa menjadi alternatif bagi perusahaan yang mencari sistem ERP yang lebih terintegrasi dan dapat disesuaikan dengan kebutuhan bisnis.<\/p>\n<p>Dengan mempertimbangkan kecocokan fitur, kemudahan implementasi, biaya, dan arah pertumbuhan perusahaan, bisnis dapat memilih software yang paling tepat untuk mendukung operasional jangka panjang.<\/p>\n<h2><strong>Pertanyaan Seputar Odoo vs Zahir<\/strong><\/h2>\n<ul class=\"bottom_faq\">\n<li>\n<details>\n<summary><strong>Apa perbedaan utama antara Odoo dan Zahir?<\/strong><\/summary>\n<p>Perbedaan utama terletak pada filosofi dasar: Odoo adalah platform ERP modular berbasis open-source yang sangat fleksibel, sementara Zahir berawal dari software akuntansi kuat yang berevolusi menjadi ERP dengan fokus pada kemudahan penggunaan untuk pasar Indonesia.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Untuk bisnis skala apa Odoo lebih cocok?<\/strong><\/summary>\n<p>Odoo cocok untuk berbagai skala bisnis, dari UKM hingga korporasi besar, terutama bagi mereka yang membutuhkan kustomisasi alur kerja yang sangat spesifik dan memiliki sumber daya untuk mengelola implementasi yang lebih kompleks.<\/p>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary><strong>Apakah Zahir cukup untuk perusahaan manufaktur?<\/strong><\/summary>\n<p>Untuk manufaktur sederhana dengan kebutuhan utama pada pencatatan keuangan dan inventaris dasar, Zahir mungkin cukup. Namun, untuk proses manufaktur yang kompleks yang memerlukan fitur MRP, kontrol kualitas, dan penjadwalan produksi mendalam, solusi ERP yang lebih komprehensif seperti Odoo atau HashMicro lebih direkomendasikan.<\/p>\n<\/details>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Memilih software untuk mengelola operasional bisnis bukan hal yang sederhana. Banyak perusahaan akhirnya membandingkan Odoo dan Zahir karena keduanya sama-sama menawarkan sistem terintegrasi untuk membantu proses kerja jadi lebih tertata. Meski begitu, pendekatan keduanya tidak sama. Odoo dikenal dengan pilihan modul yang luas dan fleksibilitas kustomisasi, sedangkan Zahir lebih dulu dikenal lewat kekuatannya di akuntansi [&hellip;]<\/p>\n","protected":false},"author":162,"featured_media":173008,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5],"tags":[],"class_list":{"0":"post-172995","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-erp"},"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>Perbandingan Antara Odoo vs Zahir<\/title>\n<meta name=\"description\" content=\"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.\" \/>\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\/odoo-vs-zahir\/\" \/>\n<meta property=\"og:locale\" content=\"id_ID\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Perbandingan Antara Odoo vs Zahir\" \/>\n<meta property=\"og:description\" content=\"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\" \/>\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-10-21T08:42:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-12T07:10:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-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=\"Hendra Gunawan\" \/>\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=\"Hendra Gunawan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimasi waktu membaca\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 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\/odoo-vs-zahir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\"},\"author\":{\"name\":\"Hendra Gunawan\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/7eb92f40eba8b038fa552ba13cd6d88a\"},\"headline\":\"Perbandingan Antara Odoo vs Zahir\",\"datePublished\":\"2025-10-21T08:42:16+00:00\",\"dateModified\":\"2026-03-12T07:10:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\"},\"wordCount\":1651,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp\",\"articleSection\":[\"ERP\"],\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\",\"name\":\"Perbandingan Antara Odoo vs Zahir\",\"isPartOf\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp\",\"datePublished\":\"2025-10-21T08:42:16+00:00\",\"dateModified\":\"2026-03-12T07:10:57+00:00\",\"description\":\"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#breadcrumb\"},\"inLanguage\":\"id\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"id\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp\",\"width\":1200,\"height\":675,\"caption\":\"odoo-vs-zahir-hashmicro\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.hashmicro.com\/id\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Perbandingan Antara Odoo vs Zahir\"}]},{\"@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\/7eb92f40eba8b038fa552ba13cd6d88a\",\"name\":\"Hendra Gunawan\",\"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\/Hendra-Gunawan-96x96.webp\",\"contentUrl\":\"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Hendra-Gunawan-96x96.webp\",\"caption\":\"Hendra Gunawan\"},\"description\":\"Hendra adalah ERP Specialist senior dengan pengalaman lebih dari 6 tahun dalam implementasi dan optimasi sistem ERP di berbagai industri. Ia berspesialisasi dalam menulis artikel seputar implementasi dan integrasi modul bisnis, sistem ERP untuk manajemen operasional, dan otomatisasi proses bisnis.\",\"sameAs\":[\"https:\/\/www.hashmicro.com\/id\/\"],\"jobTitle\":\"Hendra Gunawan - Senior Content Writer - ERP Specialist\",\"url\":\"https:\/\/www.hashmicro.com\/id\/blog\/author\/hendra-gunawan\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Perbandingan Antara Odoo vs Zahir","description":"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.","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\/odoo-vs-zahir\/","og_locale":"id_ID","og_type":"article","og_title":"Perbandingan Antara Odoo vs Zahir","og_description":"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.","og_url":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/","og_site_name":"HashMicro Indonesia","article_publisher":"https:\/\/www.facebook.com\/hashmicro","article_published_time":"2025-10-21T08:42:16+00:00","article_modified_time":"2026-03-12T07:10:57+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp","type":"image\/webp"}],"author":"Hendra Gunawan","twitter_card":"summary_large_image","twitter_creator":"@hashmicro","twitter_site":"@hashmicro","twitter_misc":{"Ditulis oleh":"Hendra Gunawan","Estimasi waktu membaca":"10 menit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#article","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/"},"author":{"name":"Hendra Gunawan","@id":"https:\/\/www.hashmicro.com\/id\/blog\/#\/schema\/person\/7eb92f40eba8b038fa552ba13cd6d88a"},"headline":"Perbandingan Antara Odoo vs Zahir","datePublished":"2025-10-21T08:42:16+00:00","dateModified":"2026-03-12T07:10:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/"},"wordCount":1651,"commentCount":0,"publisher":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#organization"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp","articleSection":["ERP"],"inLanguage":"id","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/","url":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/","name":"Perbandingan Antara Odoo vs Zahir","isPartOf":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage"},"image":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp","datePublished":"2025-10-21T08:42:16+00:00","dateModified":"2026-03-12T07:10:57+00:00","description":"Odoo vs Zahir, tentukan pilihan terbaik untuk bisnis Anda dengan membandingkan biaya, skalabilitas, kustomisasi, dan alternatif 2025.","breadcrumb":{"@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#breadcrumb"},"inLanguage":"id","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/"]}]},{"@type":"ImageObject","inLanguage":"id","@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#primaryimage","url":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/odoo-vs-zahir-hashmicro.webp","width":1200,"height":675,"caption":"odoo-vs-zahir-hashmicro"},{"@type":"BreadcrumbList","@id":"https:\/\/www.hashmicro.com\/id\/blog\/odoo-vs-zahir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hashmicro.com\/id\/blog\/"},{"@type":"ListItem","position":2,"name":"Perbandingan Antara Odoo vs Zahir"}]},{"@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\/7eb92f40eba8b038fa552ba13cd6d88a","name":"Hendra Gunawan","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\/Hendra-Gunawan-96x96.webp","contentUrl":"https:\/\/www.hashmicro.com\/id\/blog\/wp-content\/uploads\/2025\/10\/Hendra-Gunawan-96x96.webp","caption":"Hendra Gunawan"},"description":"Hendra adalah ERP Specialist senior dengan pengalaman lebih dari 6 tahun dalam implementasi dan optimasi sistem ERP di berbagai industri. Ia berspesialisasi dalam menulis artikel seputar implementasi dan integrasi modul bisnis, sistem ERP untuk manajemen operasional, dan otomatisasi proses bisnis.","sameAs":["https:\/\/www.hashmicro.com\/id\/"],"jobTitle":"Hendra Gunawan - Senior Content Writer - ERP Specialist","url":"https:\/\/www.hashmicro.com\/id\/blog\/author\/hendra-gunawan\/"}]}},"focus_keyword":"odoo vs zahir","order_j":"","_links":{"self":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/172995","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\/162"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/comments?post=172995"}],"version-history":[{"count":5,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/172995\/revisions"}],"predecessor-version":[{"id":190827,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/posts\/172995\/revisions\/190827"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media\/173008"}],"wp:attachment":[{"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/media?parent=172995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/categories?post=172995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hashmicro.com\/id\/blog\/wp-json\/wp\/v2\/tags?post=172995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}