Legacy platform

Sort while pick

A store associate must be able to sort products in a batch while picking them.

A store associate can put products from a batch into separate totes for each order while picking the products. After all the products are picked, the store associate can assign each tote to a staging location.

Solution

The following section describes APIs, user exits, services, and other components.

From the Batches screen, a store associate can choose to Pick a new batch or Continue to pick an in-progress batch.
Pick new batch
On the Batches screen, when the store associate clicks Pick to pick products in a new batch, the createStoreBatch API is called to create a batch record, the batch status changes to 1100, which indicates open batch and the batch is assigned to the current store associate. All the shipment lines that were returned by the getStoreBatchList API for that batch are passed to the createStoreBatch API, which returns the BatchNo and StoreBatchKey attributes. If a shipment line is already being picked as part of another batch or being picked via single order picking, an appropriate error message is displayed.
Pick in-progress batch

On the Batches screen, a store associate can click Continue to pick products for an in-progress batch. If the store associate is not the person who began picking the batch, a confirmation window prompts the store associate to confirm whether to continue picking or not. If the store associate chooses to continue, then the manageStoreBatch API is called, which updates the AssignedToUserID of the batch to the current store associate.

For more information about the APIs and validations, see the Javadoc.

Products in the batch
The getStoreBatchDetails API is called to fetch the batch and products in the batch. The batch is fetched by using either the mandatory StoreBatchKey or BatchNo and OrganizationCode attributes. If these attributes are not passed, the API throws an error. If there is no record corresponding to the StoreBatchKey, the API throws an error.
  • The getStoreBatchDetails API internally calls the getShipmentLineList API to retrieve the shipment lines for StoreBatchKey attribute that is passed in the input. Therefore, the bundle parents are not fetched to form the batch line.
  • Once the shipment lines are fetched, the batch lines are formed for every unique product. If the ItemID and UnitOfMeasure are common for two shipment lines, then a single batch line is formed for the product.
  • If the PickLocationSeq attribute is set at the ShipmentLine level, then the API displays the products in the order in which they must be picked up. The sequence in which the products are displayed can be customized by implementing the YCDGetBatchPickPriorityUE user exit.
  • The store associate can refine the batch lines to display all the products in the batch or only the products to be picked. The BackroomPickComplete=N attribute is used to filter and display only the unpicked batch lines.
  • The product details, such as product image, pick location, department and the quantity to be picked are returned by the API in the output. The Pick and Record Shortage links are also displayed.
The store associate can either scan a product bar code to pick a product or manually pick the product.
  • Pick products in the SCAN mode: When the store associate scans a product, the tote assignment screen is displayed. The registerBatchPick API is called with the Mode attribute set to SCAN and the API uses the StoreBatchKey attribute to determine the BatchType attribute, which is SORT_WHILE_PICKING. The following logic is executed internally:
    • The translatebar code API is called with the bar codeData and bar codeType attribute set to Item to fetch the product information.
    • Shipment lines with the same ItemID and UnitOfMeasure and having the same BatchKey as that passed in the input are retrieved.
    • Only those shipment lines with the attributes BackroomPickComplete="N" and IsPickable="Y" are considered and the shipment line with the least BatchPickPriority is updated with the pick quantity.
  • Pick products in the MANUAL mode: When the store associate selects a product and then clicks Pick, the tote assignment screen is displayed. The registerBatchPick API is called with the Mode attribute set to MANUALPICK and the API uses the StoreBatchKey attribute to determine the BatchType attribute, which is SORT_WHILE_PICKING. The following logic is executed internally:
    • The registerBatchPick API reads the mandatory Item element from the input to get the product information.
    • Shipment lines with the same ItemID and UnitOfMeasure and having the same BatchKey as that passed in the input are retrieved.
    • Only those shipment lines with the attributes BackroomPickComplete="N" and IsPickable="Y" are considered and the shipment line with the lowest value for BatchPickPriority is updated with the pick quantity.

    When the store associate picks a product, the tote assignment screen is displayed where the store associate can proceed to place the product in a tote. If there is a shortage of products during pick, the store associate can record shortage before placing the picked products in a tote.

  • Record Shortage: The store associate can select a product and choose to record shortage if there are insufficient quantities to fulfill the batch. The quantity of the product that the store associate marks short is displayed.
    When a store associate clicks Record Shortage for a product in a batch, the following logic is executed:
    • The getCommonCodeList API is called with the CodeType as YCD_PICK_SHORT_RESOL to fetch shortage reasons. By default, the only shortage reason is Inventory Shortage. When a store associate applies Inventory Shortage as the shortage reason, products are back-ordered based on default implementation. However, if you want to implement a custom logic and handle custom shortage reasons, you can use the handleShortageForBatchLineUE user exit.
      The recordShortageForBatchPick API is called to determine the shipment and shipment line that need to be marked as short. The store associate picks the available products, and the remaining value is marked as short. The default shortage reason, Inventory Shortage, is used.
      • When the store associate chooses to save the shortage, the shortage quantity is updated on the shipment line.
      • The API cancels the batch if all of the products in a batch are marked as short. In addition to canceling the batch, the shipment is also canceled if all of the products in the shipment are marked short.
      The following validations are performed by the recordShortageForBatchPick API:
      • The StoreBatchKey and ShortageReason attributes, along with the Item element are mandatory inputs to the API. If the mandatory inputs are not passed, then the appropriate error messages are displayed.
      • If the shortage reason is not valid, the appropriate error message is displayed. Once the store associate clicks OK, the shortage is applied and the user is taken to the original screen.
Adding products to totes
After scanning or manually picking the products, the store associate can add the products to totes. In the tote assignment screen, you can either scan a tote or manually enter the tote number in the Place in Tote # field. For both manual picks and scanned picks, the output of the registerBatchPick API is used to retrieve the tote information. For a given shipment line, the YFS_STORE_BATCH_LOCATION table is queried with the ShipmentKey and the BatchKey attributes. If a record is retrieved, the Tote ID is populated in the Place in the Tote # field.
  • If a tote ID is not already populated in the Place in Tote # field, the store associate can scan a tote, or manually enter the tote ID. Once a tote is scanned, the translatebar code API is called with the bar codeData attribute and bar codeType as StoreToteId to return the ToteID. However, if the Tote translation required rule is disabled, the translatebar code API call is skipped and the value in the Place in Tote # field is directly updated in the database without any translation. Once a tote is scanned or entered, the product is added to the tote.
  • If a tote ID is already populated in the Place in Tote # field, the store associate must click Save to add a product to the tote. The registerBatchPick API is called in the UPDATE mode with the BackroomPickedQuantity and ToteID attributes to update the shipment line and display the information on the UI.
  • If there are other totes associated with the product, they are displayed with the associated quantity of the product. The - button is enabled and + button is hidden, so the quantity is not editable.
    Notes:
    • The store associate cannot save the pick until a tote is scanned or entered.
    • If the tote field is left blank or a store associate manually enters a tote ID that is already associated with another order, the appropriate error messages are displayed.
  • If the store associate clicks Save, either unpicked or all products are displayed, where the store associate can click Edit corresponding to a product to modify totes in the tote assignment screen. The store associate can reduce the quantity of a product from a tote with the lowest SLA and add the product to a tote with higher SLA thus allowing higher SLA orders to be fulfilled first.
  • The getStoreBatchDetails API is called to refresh the screen and display all the products or only the products to be picked based on the filter selected.

Modifying totes
After the store associate adds at least one unit of a product to a tote, the Products screen is refreshed and the Edit link is enabled for that product in the batch. The store associate can click Edit to go to the tote assignment screen where totes are listed in the ascending order of SLA.
Note: In the Edit mode, the Place in Tote # field is not displayed. Therefore, the store associate cannot add products to a new tote or remove an existing tote.

When the store associate clicks Edit for a product that is partially picked, the registerBatchPick API is called with the Mode attribute set to MANUAL to retrieve the tote information for the product. When the store associate clicks Edit for a product that is completely picked, the getStoreBatchDetails API is called by passing the StoreBatchKey, ItemID, and UnitOfMeasure attributes in the input, to retrieve the tote information for the product.

To reduce the quantity of the product in a tote, the store associate can click the - button as required. The registerBatchPick API is called with the Mode attribute set to UPDATE. In the UPDATE mode, the following API actions take place:
  • The StoreBatchKey and the BackroomPickedQty are passed in the input to the registerBatchPick API to update the shipment line.
  • The changeShipment API is called to update the BackroomPickedQty attribute of the shipment line.
Once the quantity is reduced as required, the store associate clicks Done in the tote assignment screen and a tote rearrangement check is performed. If the quantity of product being reduced belongs to an order with higher SLA than another order containing the same product, a tote rearrangement is required and consequently an appropriate warning message is displayed. This warning message informs the store associate to fulfill higher SLA orders first. On the message window, the store associate can click either Yes or No. However, if the order has the lowest SLA, then tote rearrangement is not required and the store associate returns to the Batches screen.
Note: To pick the quantity of the product reduced from a tote, the store associate has to use the Pick flow again.
Once a batch is completely picked, only then the changeShipmentStatus API is called. Multiple validations are performed to change the status of shipments, some of them are as follows:
  • If the shipment corresponding to a given shipment line is not already in Backroom Pick in Progress status, the changeShipmentStatus API is called to change the shipment status from Ready For Backroom Pick to Backroom Pick in Progress.
  • If the shipment is completely picked, then the changeShipmentStatus is additionally called to update the status to Ready for Customer Pickup in case of Pickup in Store orders and Ready for Packing in case of Ship from Store orders.

After the shipment is updated, the registerBatchPick API determines whether the picking process is complete and updates the status of the batch to either 2000 or 3000 where 2000 indicates that 'picking is complete and not staged' whereas 3000 indicates that 'batch picking is complete'.

Assigning a staging location
Once all the products are completely picked, an appropriate confirmation message is displayed and the store associate can choose to either assign a staging location or finish the batch pick process. If the store associate clicks Assign Staging Location, the totes are displayed with an Assign action for each tote.
Note: Assigning a staging location to totes is based on the Staging location required rule. If the rule is enabled, only then the store associate can perform this task.
  • When the store associate proceeds to assign a staging location, the getStoreBatchLocationList API is called with the StoreBatchKey attribute to return the list of totes for a batch. The totes are sorted by delivery method; the pickup in store totes are listed first, followed by the ship from store totes.
  • The store associate then scans or manually enters a tote. If the store associate scans the tote, the translatebar code API is called with the bar codeType set to StoreToteId. The Current Tote screen is displayed with the details of the tote that include tote ID and number of products in the tote. A staging location field is displayed where the store associate can scan the bar code of the staging location or enter the location ID manually.
  • When the store associate scans a staging location, the translatebar code API is called with the bar codeType as HoldLocation to return the staging location ID. However, if the Staging location translation required rule is disabled, the translatebar code API call is skipped and the value in the Place in Staging Location field is directly updated in the database without any translation.

    When the staging location is either scanned or entered manually and the store associate clicks Save, the changeShipment API is called to update the staging location for the order. The store associate is then taken back to the tote list and can continue assigning staging locations for each tote in the batch. The updated tote is highlighted and the staging location is displayed. After a staging location is assigned to every tote, then the manageStoreBatch API is called to update the status of the batch to 3000 (completed batch). The StagedQuantity attribute and the IsStagingComplete attribute set to Y are passed in the input to the changeShipment API to update the shipment line appropriately.

User exits:
  • Custom logic can be implemented by using the com.yantra.pca.ycd.japi.ue.YCDSortBatchLinesUE user exit for the getStoreBatchDetails API to sort the products with a custom implementation.
  • Custom logic can be implemented by using the com.yantra.pca.ycd.japi.ue.YCDGetBatchPickPriorityUE user exit for the createStoreBatch API to calculate the batch pick priority.
  • Custom logic can be implemented to update the inventory by using the com.yantra.pca.ycd.japi.ue.YCDInvokeUpdateInventoryUE user exit, which is called by the registerBatchPick API after each update of the BackroomPickedQuantity attribute on the shipment line.
  • The application behavior on selecting a custom shortage reason can be implemented by using the YCDhandleShortageForBatchLineUE user exit, which is invoked by the recordShortageForBatchPick API.

For more information about the APIs, see the Javadoc.

Device-specific details

None.

Implementation

The following information describes the rules that must be configured for the feature:

  • A store associate must have the following resource permissions to perform batch picking:
    • Batch Pick Orders
    • Manually update quantity while picking
    For more information about administering user group permissions, see Administering User Group Permissions.
  • Configure the Backroom Pick Shortage Resolutions appropriately. By default, a shortage resolution named All Inventory Shortage is available for the default organization. If you want to use the same shortage resolution for a new enterprise, you must either inherit the default organization's properties or use the following values to create the shortage resolution by using the Sterling Business Center.
    • Shortage Resolution: AllInventoryShortage
    • Shortage Resolution Name: Inventory Shortage

    For more information, see Manage backroom pick shortage resolutions. To inherit default organization's properties, see Defining an enterprise's primary information. If you create custom shortage resolutions, then you must have corresponding implementation as well. For more information, see Implementing custom shortage reasons.

  • The Assign Staging Location button is visible only if the Staging location required rule is enabled at the store level in the Sterling Business Center.
  • If you need to support staging location and tote bar code translations, configure the bar code translation preferences appropriately. For more information, see Setting up bar code translation preferences.
  • You must configure bar code types for your enterprise. The following bar code types are used in the application:
    • Item for product translations
    • Tote Id for tote translations. By default, two variations of the bar code type are provided: New Tote and Existing Tote.
    • Hold Location for staging location translations
    bar code types must be defined at the enterprise level in the Applications Manager. The bar code types are provided for the default organization. When you on-board a new enterprise, these bar code types must be created again or copied from the Default organization. To implement bar code translations, the application provides the following services. However, you can override these services to suit your business requirements.
    • YCD_Translate_Bar_Code_ExistingTote
    • YCD_Translate_Bar_Code_NewTote
    • YCD_Translate_Bar_Code_HoldLocation