<!DOCTYPE html> <html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" lang="en-us" xml:lang="en-us" class="_Skins_HTML5___Top_Navigation" data-mc-search-type="Stem" data-mc-help-system-file-name="Default.xml" data-mc-path-to-help-system="../../" data-mc-has-content-body="True" data-mc-conditions="Spryker.B2B,Spryker.B2C,Spryker.MultiStore" data-mc-target-type="WebHelp2" data-mc-runtime-file-type="Topic;Default" data-mc-preload-images="false" data-mc-in-preview-mode="false" data-mc-toc-path="Features|Inventory Management"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="msapplication-config" content="../../Skins/Favicons/browserconfig.xml" /> <meta name="description" content="Your product's availability is calculated on a per-store basis. You can manage stocks across all international entities from a single interface." /> <link rel="apple-touch-icon" sizes="180x180" href="../../Skins/Favicons/apple-touch-icon.png" /> <link rel="shortcut icon" href="../../Skins/Favicons/favicon-32x32.png" /> <link rel="icon" sizes="96x96" href="../../Skins/Favicons/favicon-96x96.png" /> <link rel="icon" sizes="32x32" href="../../Skins/Favicons/favicon-32x32.png" /> <link rel="icon" sizes="16x16" href="../../Skins/Favicons/favicon-16x16.png" /> <meta charset="utf-8" /> <meta name="description" content="" /> <meta name="author" content="" /><title>Multiple Warehouse Stock Management | Spryker</title> <!-- Google Tag Manager --> <script>/* <![CDATA[ */(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NP24S2');/* ]]> */</script> <!-- End Google Tag Manager --> <script>/* <![CDATA[ */ var s = document.createElement("script"); s.type = "text/javascript"; s.src = "https://www.googletagmanager.com/gtag/js?id==UA-56589105-4"; document.getElementsByTagName('head').item(0).appendChild(s); /* ]]> */</script> <script>/* <![CDATA[ */ window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-56589105-4'); /* ]]> */</script> <link href="../../Skins/Default/Stylesheets/Slideshow.css" rel="stylesheet" /> <link href="../../Skins/Default/Stylesheets/TextEffects.css" rel="stylesheet" /> <link href="../../Skins/Default/Stylesheets/Topic.css" rel="stylesheet" /> <link href="../../Skins/Default/Stylesheets/Components/Styles.css" rel="stylesheet" /> <link href="../../Skins/Default/Stylesheets/Components/Tablet.css" rel="stylesheet" /> <link href="../../Skins/Default/Stylesheets/Components/Mobile.css" rel="stylesheet" /> <link href="../../Skins/Fluid/stylesheets/foundation.6.2.3.css" rel="stylesheet" /> <link href="../../Skins/Fluid/stylesheets/styles.css" rel="stylesheet" /> <link href="../../Skins/Fluid/stylesheets/tablet.css" rel="stylesheet" /> <link href="../../Skins/Fluid/stylesheets/mobile.css" rel="stylesheet" /> <link href="../../resources/stylesheets/perfect-scrollbar.css" rel="stylesheet" /> <link href="../../resources/stylesheets/prism.css" rel="stylesheet" /> <style>/*<meta />*/ .button.previous-topic-button { -pie-background: url('../../Skins/Default/Stylesheets/Images/navigate-previous.png') no-repeat center center, linear-gradient(#ffffff, #ececec); } .button.next-topic-button { -pie-background: url('../../Skins/Default/Stylesheets/Images/navigate-next.png') no-repeat center center, linear-gradient(#ffffff, #ececec); } .button.print-button { -pie-background: url('../../Skins/Default/Stylesheets/Images/printer.png') no-repeat center center, linear-gradient(#ffffff, #ececec); } .button.expand-all-button { -pie-background: url('../../Skins/Default/Stylesheets/Images/expand.png') no-repeat center center, linear-gradient(#ffffff, #ececec); } .button.collapse-all-button { -pie-background: url('../../Skins/Default/Stylesheets/Images/collapse.png') no-repeat center center, linear-gradient(#ffffff, #ececec); } .needs-pie { behavior: url('../../resources/scripts/PIE-no-motw.htc'); } </style> <link href="../../resources/stylesheets/mainstyles.css" rel="stylesheet" /> <script src="../../resources/scripts/custom.modernizr.js"> </script> <script src="../../resources/scripts/jquery.min.js"> </script> <script src="../../resources/scripts/require.min.js"> </script> <script src="../../resources/scripts/require.config.js"> </script> <script src="../../resources/scripts/foundation.6.2.3_custom.js"> </script> <script src="../../resources/scripts/plugins.min.js"> </script> <script src="../../resources/scripts/MadCapAll.js"> </script> </head> <body> <div class="foundation-wrap off-canvas-wrapper"> <div class="off-canvas-wrapper-inner" data-off-canvas-wrapper=""> <aside class="off-canvas position-right" id="offCanvas" data-off-canvas="" data-position="right" data-mc-ignore="true"> <ul class="off-canvas-drilldown vertical menu off-canvas-list" data-drilldown="" data-mc-back-link="Back" data-mc-css-tree-node-expanded="is-drilldown-submenu-parent" data-mc-css-tree-node-collapsed="is-drilldown-submenu-parent" data-mc-css-sub-menu="vertical menu slide-in-right is-drilldown-submenu" data-mc-include-indicator="False" data-mc-include-icon="False" data-mc-include-parent-link="True" data-mc-include-back="True" data-mc-defer-expand-event="True" data-mc-expand-event="click.zf.drilldown" data-mc-toc="True"> </ul> </aside> <div class="off-canvas-content inner-wrap" data-off-canvas-content=""> <div data-sticky-container="" class="title-bar-container"> <nav class="title-bar tab-bar sticky" data-sticky="" data-options="marginTop:0" style="width:100%" data-sticky-on="small" data-mc-ignore="true"> <div class="middle title-bar-section outer-row clearfix"> <div class="menu-icon-container relative clearfix"> <button class="menu-icon" data-toggle="offCanvas"><span></span> </button> </div> </div> <div class="title-bar-layout outer-row"> <div class="logo-wrapper"><a class="logo" href="../../home.htm" alt="Logo"></a> </div> <div class="navigation-wrapper nocontent"> <ul class="navigation clearfix" data-mc-css-tree-node-has-children="has-children" data-mc-css-sub-menu="sub-menu" data-mc-expand-event="mouseenter" data-mc-top-nav-menu="True" data-mc-max-depth="3" data-mc-include-icon="False" data-mc-include-indicator="False" data-mc-include-children="True" data-mc-include-siblings="True" data-mc-include-parent="True" data-mc-toc="True"> <li class="placeholder" style="visibility:hidden"><a>placeholder</a> </li> </ul> </div> <div class="nav-search-wrapper"> <div class="nav-search row"> <form class="search" action="#"> <div class="search-bar search-bar-container needs-pie"> <input class="search-field needs-pie" type="search" placeholder="Search the Academy" /> <div class="search-filter-wrapper"> <div class="search-filter"> <div class="search-filter-content"> <ul> <li>All Files</li> </ul> </div> </div> </div> <div class="search-submit-wrapper" dir="ltr"> <div class="search-submit" title="Search"> </div> </div> </div> </form> </div> </div> </div> </nav> </div> <section class="main-section"> <div class="row outer-row sidenav-layout"> <div class="sidenav-wrapper"> <div class="sidenav-container"> <ul class="off-canvas-accordion vertical menu sidenav" data-accordion-menu="" data-mc-css-tree-node-expanded="is-accordion-submenu-parent" data-mc-css-tree-node-collapsed="is-accordion-submenu-parent" data-mc-css-sub-menu="vertical menu accordion-menu is-accordion-submenu nested" data-mc-include-indicator="False" data-mc-include-icon="False" data-mc-include-parent-link="False" data-mc-include-back="False" data-mc-defer-expand-event="True" data-mc-expand-event="click.zf.accordionMenu" data-mc-toc="True" data-mc-side-nav-menu="True"> </ul> </div> </div> <div class="body-container" data-mc-content-body="True"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NP24S2" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- End Google Tag Manager (noscript) --> <div class="search-container"> <form class="search" action="#"> <div class="search-bar search-bar-container needs-pie _Skins_SearchTopics mc-component"> <input class="search-field needs-pie" type="search" placeholder="Search" /> <div class="search-filter-wrapper"> <div class="search-filter"> <div class="search-filter-content"> <ul> <li>All Files</li> </ul> </div> </div> </div> <div class="search-submit-wrapper" dir="ltr"> <div class="search-submit" title="Search"> </div> </div> </div> </form> </div> <div class="row collapse"> <div class="top-bar"> <div class="breadcrumbs-block"> <div class="nocontent"> <div class="MCBreadcrumbsBox_0 breadcrumbs" data-mc-breadcrumbs-divider=" > " data-mc-breadcrumbs-count="3" data-mc-toc="True"><span class="MCBreadcrumbsPrefix">You are here: </span> </div> </div> </div> <div> </div> <form class="search" action="#"> <div class="search-bar search-bar-container needs-pie _Skins_SearchHome mc-component"> <input class="search-field needs-pie" type="search" placeholder="Search" /> <div class="search-filter-wrapper"> <div class="search-filter"> <div class="search-filter-content"> <ul> <li>All Files</li> </ul> </div> </div> </div> <div class="search-submit-wrapper" dir="ltr"> <div class="search-submit" title="Search"> </div> </div> </div> </form> </div> <div class="topic-layout"> <div> <div class="side-menu"> <div data-sticky-container="" id="wGw2AQA3qUqOw4O3rTAmiQ"> <div class="sticky sticky-menu" style="width:100%" data-sticky="" data-top-anchor="wGw2AQA3qUqOw4O3rTAmiQ:top" data-bottom-anchor="contentBody:bottom" data-sticky-on="small" data-scroll-container-on="small"> <ul class="nocontent menu _Skins_SideMenu mc-component" data-mc-is-context-sensitive="True" data-mc-linked-toc="Data/Tocs/master.js" data-mc-side-menu="True" data-mc-max-depth="1" data-mc-include-icon="False" data-mc-include-indicator="False" data-mc-include-children="True" data-mc-include-siblings="True" data-mc-include-parent="True" data-mc-toc="True"> </ul> </div> </div> </div> </div> <div> <div class="side-menu"> <div class="toolbar-wrapper"> <div class="widget-github js-widget-github"><a class="widget-github-link js-widget-github-link" href="https://github.com/spryker/spryker-documentation" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="26" height="26" viewBox="0 0 26 26"><path d="M13.5 0C6.057 0 0 6.057 0 13.5c0 5.888 3.791 10.905 9.058 12.745a.463.463 0 0 0 .258.088c1.316.43 2.724.667 4.184.667C20.943 27 27 20.943 27 13.5S20.943 0 13.5 0zm0 .931c6.93 0 12.569 5.639 12.569 12.569 0 5.428-3.459 10.061-8.287 11.818a1.903 1.903 0 0 1-.092-.527v-2.446c0-.975-.477-2.037-.946-2.75 2.584-.436 5.537-1.776 5.537-6.779 0-1.37-.429-2.58-1.275-3.598.186-.611.415-1.9-.225-3.52a.47.47 0 0 0-.291-.272c-.13-.04-1.326-.35-3.806 1.277a12.921 12.921 0 0 0-6.36 0c-2.481-1.63-3.68-1.319-3.809-1.277a.47.47 0 0 0-.29.273C5.582 7.319 5.811 8.607 6 9.218c-.85 1.018-1.279 2.227-1.279 3.598 0 4.957 2.9 6.323 5.463 6.778-.322.407-.66.934-.81 1.47-.661.184-2.018.19-2.929-1.37-.032-.06-.829-1.475-2.4-1.584-.25.002-.882.042-1.035.525-.169.537.424.944.679 1.117l.058.034c.029.015.707.371 1.213 1.644.105.333 1.03 2.84 4.353 2.399.002.367 0 .552-.004.7v.26c0 .15-.045.378-.096.525C4.386 23.558.931 18.924.931 13.5.931 6.57 6.57.931 13.5.931zm6.51 5.375c.5 1.471.158 2.537.035 2.839a.468.468 0 0 0 .089.49c.805.883 1.214 1.952 1.214 3.181 0 4.72-2.796 5.666-5.535 5.97a.464.464 0 0 0-.253.815c.368.314 1.199 1.68 1.199 2.744v2.446c0 .009.001.414.134.809a12.513 12.513 0 0 1-6.792-.002c.135-.396.139-.802.139-.81l.001-.248c.002-.211.006-.497 0-1.266a.473.473 0 0 0-.174-.362.47.47 0 0 0-.391-.09c-3.126.681-3.802-1.576-3.828-1.67l-.016-.047c-.448-1.135-1.037-1.713-1.388-1.975.759.267 1.182 1.007 1.193 1.024 1.231 2.107 3.264 2.162 4.328 1.685a.463.463 0 0 0 .27-.36c.095-.665.826-1.545 1.196-1.87a.464.464 0 0 0 .136-.488.461.461 0 0 0-.39-.324c-2.73-.31-5.524-1.266-5.524-5.98 0-1.228.41-2.3 1.219-3.181a.464.464 0 0 0 .087-.491c-.124-.302-.467-1.364.031-2.837.396.013 1.362.182 2.988 1.286.112.076.256.1.387.063.973-.27 2.058-.416 3.135-.421 1.08.005 2.166.15 3.14.421.131.037.273.013.386-.063 1.635-1.11 2.6-1.275 2.984-1.288z" /></svg></a> </div> <div class="buttons popup-container clearfix topicToolbarProxy _Skins_TopicToolbar mc-component nocontent" style="mc-topic-toolbar-items: PreviousTopic NextTopic Print ExpandAll CollapseAll;"> <div class="button-group-container-left"> <button class="button needs-pie previous-topic-button" title="Navigate previous"> <img src="../../Skins/Default/Stylesheets/Images/transparent.gif" alt="previous topic" /> </button> <button class="button needs-pie next-topic-button" title="Navigate next"> <img src="../../Skins/Default/Stylesheets/Images/transparent.gif" alt="next topic" /> </button> <button class="button needs-pie print-button" title="Print"> <img src="../../Skins/Default/Stylesheets/Images/transparent.gif" alt="print" /> </button> <button class="button needs-pie expand-all-button" data-state1-class="expand-all-button" data-state2-class="collapse-all-button" data-state2-title="Collapse all" title="Expand all" data-state1-title="Expand all"> <img src="../../Skins/Default/Stylesheets/Images/transparent.gif" alt="expand all" /> </button> </div> </div> </div> <div class="js-anchorer main-content"> <h1>Multiple Warehouse Stock Management <img src="../../resources/images/shoptype/b2b_shop.png" /> <img src="../../resources/images/shoptype/b2c_shop.png" /> <img src="../../resources/images/shoptype/mastersuite.png" /> <img src="../../resources/images/shoptype/demoshop.png" /></h1> <p><a href="javascript:void(0);" class="MCTextPopup popup popupHead">MS<span class="MCTextPopupBody MCTextPopupBody_Closed needs-pie popupBody"><span class="MCTextPopupArrow"></span>Multi-store</span></a> </p> <p>Your product's availability is calculated on a per-store basis, meaning you can manage stocks across all international entities from a single interface and make logistics management more efficient.</p> <p>If you have multiple warehouses for storage, your products can have multiple stock quantities to accurately reflect availability. Also, warehouses can be shared between different stores and availability will be reflected accordingly. You can easily manage stocks across all stores and warehouses from a single interface and make logistics management more efficient.</p> <ul> <li value="1">Different stock types (typically used to represent different locations/warehouses) </li> <li value="2"> Is-never-out-of stock products </li> <li value="3">Warehouses shared between different stores</li> </ul> <h2>Stock</h2> <p>Stock defines physical amount of products you have in your warehouse. This article will tell you how the stock module works and how product stock is calculated.</p> <div class="MCDropDown MCDropDown_Closed dropDown"><span class="MCDropDownHead dropDownHead"><a href="javascript:void(0);" class="MCDropDownHotSpot dropDownHotspot MCDropDownHotSpot_ MCHotSpotImage"><img class="MCDropDown_Image_Icon" src="../../Skins/Default/Stylesheets/Images/transparent.gif" height="11" width="16" alt="Closed" data-mc-alt2="Open" />Multiple Storage Locations</a></span> <div class="MCDropDownBody dropDownBody"> <p>Spryker Commerce OS allows to define several storage locations in which the products are being stored. For a product you can have associated multiple stock product entries associated, each of them associated to a storage location.</p> </div> </div> <div class="MCDropDown MCDropDown_Closed dropDown"><span class="MCDropDownHead dropDownHead"><a href="javascript:void(0);" class="MCDropDownHotSpot dropDownHotspot MCDropDownHotSpot_ MCHotSpotImage"><img class="MCDropDown_Image_Icon" src="../../Skins/Default/Stylesheets/Images/transparent.gif" height="11" width="16" alt="Closed" data-mc-alt2="Open" />Product Stock</a></span> <div class="MCDropDownBody dropDownBody"> <p>A product is associated to at least one stock product. Stocks cannot be attached to abstract products (only to concrete products). You can use a specific flag for stock which will indicate that the product associated to the stock (for example, a product with no physical stock) never goes out of stock.</p> <p><a class="MCPopupThumbnailLink MCPopupThumbnailPopup" href="../../resources/images/product_stock.png" data-mc-popup-alt="Product stock"><img class="MCPopupThumbnail img imgThumbnail" data-mc-width="576" data-mc-height="237" src="../../resources/images/product_stock_thumb_0_48.png" alt="Product stock" title="Click me" tabindex="" /></a> </p> </div> </div> <div class="MCDropDown MCDropDown_Closed dropDown"><span class="MCDropDownHead dropDownHead"><a href="javascript:void(0);" class="MCDropDownHotSpot dropDownHotspot MCDropDownHotSpot_ MCHotSpotImage"><img class="MCDropDown_Image_Icon" src="../../Skins/Default/Stylesheets/Images/transparent.gif" height="11" width="16" alt="Closed" data-mc-alt2="Open" />Calculating Current Stock For Products</a></span> <div class="MCDropDownBody dropDownBody"> <p>A product quantity from a stock is being reserved when an order containing it, is being processed. The state machine is doing this job of reserving stocks by setting the <var>reserved</var> flag. In order to calculate the available stock, not only the maintained stock (the sum of stocks from each storage location) is taken into account, but also the currently processed orders.</p> </div> </div> <div class="MCDropDown MCDropDown_Closed dropDown"><span class="MCDropDownHead dropDownHead"><a href="javascript:void(0);" class="MCDropDownHotSpot dropDownHotspot MCDropDownHotSpot_ MCHotSpotImage"><img class="MCDropDown_Image_Icon" src="../../Skins/Default/Stylesheets/Images/transparent.gif" height="11" width="16" alt="Closed" data-mc-alt2="Open" />Shared Warehouses</a></span> <div class="MCDropDownBody dropDownBody"> <p>From Stock module version 4.1.* a store/warehouse mapping has been added.</p> <p>It can be configured in <var>\Pyz\Zed\Stock\StockConfig::getStoreToWarehouseMapping</var> method, which must return an array with the following structure: <pre><code class="language-PHP line-numbers">/** * @return array */ public function getStoreToWarehouseMapping() { return [ 'DE' => [ //key is store name 'Warehouse1', //values are warehouse names from `spy_stock.name` 'Warehouse2', ], 'AT' => [ 'Warehouse2', ], 'US' => [ 'Warehouse2', ], ]; }</code></pre></p> <p>Using this mapping, availability for product will be calculated.</p> </div> </div> <p> </p> <p><b>See also:</b> </p> <ul> <li value="1"><a href="about-inventory.htm">Get a general idea of what inventory is and what differs product stock from availability</a> </li> <li value="2"><a href="stock-availability-management.htm">Learn what the Availability module does and how it works</a> </li> <li value="3"><a href="https://documentation.spryker.com/module_migration_guides/mg-oms.htm">Learn how to migrate to a newer version of OMS module</a> </li> </ul> <p> </p> <p><i>Last review date: Jan. 19th, 2018 </i> </p> </div> </div> </div> </div> </div><a class="scroll-top js-scroll-top" href="#"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="16" viewBox="0 0 12 16"><path fill="#FFF" fill-rule="nonzero" d="M11.82 5.22a.54.54 0 0 1 0 .806.636.636 0 0 1-.852 0L6.607 1.937v13.49a.587.587 0 0 1-.602.573c-.336 0-.611-.258-.611-.573V1.937L1.04 6.026a.647.647 0 0 1-.86 0 .54.54 0 0 1 0-.807L5.573.163a.636.636 0 0 1 .852 0L11.82 5.22z" /></svg></a> <script>/* <![CDATA[ */ function createGithubUrl() { var GITHUB_CONTENT_PATH = '/blob/master/public'; var link = document.querySelector('.js-widget-github-link'); var href = link.getAttribute('href') + GITHUB_CONTENT_PATH + window.location.pathname; link.setAttribute('href', href); } createGithubUrl(); /* ]]> */</script> <script>/* <![CDATA[ */ requirejs.config({ appDir: '', paths: { 'clipboard': ['https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.1/clipboard.min'] } }); require(['clipboard'], function(Clipboard) { console.log(Clipboard); window.Clipboard = Clipboard; }); /* ]]> */</script> <script src="../../resources/scripts/perfect-scrollbar.js"> </script> <script src="../../resources/scripts/imagemapster.js"> </script> <script src="../../resources/scripts/script.js"> </script> <script src="../../resources/scripts/prism.js"> </script> </div> </div> </section><a data-close="true"></a> </div> </div> <script>/* <![CDATA[ */$(document).foundation();/* ]]> */</script> </div> </body> </html>