Skip to main content

#Product Transfer2 discussing

Hello, 

 

Our Technicians perform repairs at customer sites.  

In order to ensure that they have everything they need for the repair, they are often transferred more spare parts than they will actually use. Any unused parts are then returned to the central warehouse (via Transfer request who another user create in Certinia).

However, this creates an issue with inventory updates.  

When a Transfer Request is received, the parts are automatically added to Product Items.   

When the parts are issued from the Field Service warehouse, since they are not consumed against a Work Order, they currently have to be manually removed from the Technicians’ Field Service warehouse based on the return transfer. 

This is a lot of manually work, we have around 80 Technicians and have a lot of transfer reguests for returned parts. 

What good practice advice you can share with me? 

Our implementing company can't create us a working automation for outbound transfer. 

We are in this situation near 2 years and in we dont see a workable solution... 

 

Thanks in advance 

 

 

#Field Service App  #Inventory Item  #Product Transfer

1 answer
  1. Sep 18, 9:27 AM

    Hi Viktoriya,

     

    Manually adjusting inventory for 80 technicians across hundreds of return transfers is completely unsustainable.

     

    In standard Salesforce Field Service (SFS), stock adjustments should never be handled through manual inventory deductions. The platform provides native inventory objects specifically designed to decrement a van’s stock and increment the warehouse automatically: Product Transfers and Return Orders.

     

    Here are the two best-practice architectures to automate this and eliminate manual data entry:

     

    Option 1: Native Product Transfers (Simplest & Best for Van-to-Warehouse Returns)

    Salesforce Field Service has built-in transaction logic on the ProductTransfer object. When a ProductTransfer record is marked Received, Salesforce automatically adjusts ProductItem balances without writing custom code to do math on inventory quantities.

     

    How the Automated Flow Works:

     

    1. Trigger via Certinia Integration / Transfer Request:
      • When the return Transfer Request is created/approved in Certinia (or synced into Salesforce), have your integration or a Record-Triggered Flow automatically create a standard Product Transfer (ProductTransfer) record in Salesforce with:
        • Source Product Item (SourceProductItemId): The Technician’s van inventory record.
        • Destination Location (DestinationLocationId): The Central Warehouse location record.
        • Quantity Sent: Number of unused units being returned.
        • Status: In Transit (or Received).

     

    1. Automated Stock Balance Execution:
      • When the warehouse confirms the return (or when Certinia syncs back receipt), update ProductTransfer.Status = 'Received' and check IsReceived = true.
      • Salesforce’s native engine automatically does the rest:
        • It decrements QuantityOnHand on the Technician's ProductItem.
        • It increments QuantityOnHand on the Central Warehouse's ProductItem.
        • It automatically creates immutable Product Item Transactions (ProductItemTransaction) for full audit history.

     

    Option 2: Return Order + Return Order Line Items (Best for Formal RMA & Asset Tracking)

    If your company requires formal warehouse receiving verification, inspection of returned parts, or serial tracking:

     

    1. Generate a Return Order (ReturnOrder) and associated Return Order Line Items (ReturnOrderLineItem) linked to the Technician’s Service Resource / Location.
    2. Provide your warehouse team (or logistics coordinator) a quick Screen Flow or barcode scan action on the desktop:
      • Select Return Order $\rightarrow$ confirm parts received.
    3. The Flow marks the line items as Received, generating the underlying ProductTransfer that automatically moves inventory off the technician's balance.

     

    Why Your Current Automation Failed & How to Fix It

    Custom automations on ProductItem often fail because developers try to manually calculate and update ProductItem.QuantityOnHand using standard Flow/Apex DML.

     

    • The Rule of SFS Inventory: Never write custom Apex or Flows that run math directly on ProductItem.QuantityOnHand (ProductItem.QuantityOnHand = QuantityOnHand - X). This causes lock contention, concurrency errors, and breaks the transaction ledger.

     

    • The Supported Pattern: Always create a ProductTransfer or ProductConsumed record. Salesforce manages the row-locking and mathematical reconciliation on ProductItem under the hood.

     

    Recommended Next Step

    Ask your development or integration team to stop attempting direct ProductItem updates and instead map Certinia's outbound return payload directly to insert standard ProductTransfer records with IsReceived = true. This leverages native Field Service mechanics and eliminates all manual removal work immediately.

0/9000

A question to pick your brains!!

Currently, for our Engineers to "Check Stock Out" of our Warehouse, I have built a FS Mobile Flow which firstly allows them to choose from a list of Stock Locations (Record Choice Set as Radio Buttons), then navigates to a Record Choice Set of Product Items, where the Location ID is the ID from their first choice.

 

This Product Item record set is display as a Checkbox group. They can then select multiple Product Items. We grab their IDs and then loop through in a screen flow, allowing the engineer to select the quantities that they are taking out. At the end, we create the Product transfer records to move the Product items t the Engineers location.

All well and fine. It works. But....

The experience of it is not great. As our inventory list grows, the number of Checkboxes grows too, making it tricky for an engineer to navigate through the list of the entire stock pile we have and it is taking them 20-40 minutes to remove stock.

 

What I'm hoping to build is some sort of "Crate" or "Batch" number system, whereby our Stock Manager could go to a Work Order (On Desktop) and go through a screen flow where by on each Work Order Line Item, they are presented with Stock Levels per Location, and they select which Location and Quantity, they are taking stock from. This could be performed for one or multiple Work Order Line Items. This would in turn, create a new sequential number for a "Crate" or "Bundle" of Stock, which our Engineer could be given. they Arrive to the warehouse, collect their crate of parts. Open up the FS app, pop this "Crate" number into a Flow, which can then go about making the Product Transfers from the respective location IDs to the Engineers mobile location ID.

 

This would obviously make like a hell of a lot simpler for our engineers.

Has anyone here built anything similar?

Thanks

Paul

6 comments
0/9000

Hello All,

I am having an issue with a validation rule setup on Product Transfer object. Could anyone please help?

 

Aim is: At Product Transfer Object only the Owner of the Destination Location should be able to update the Received, Received By and Quantity Received fields.This should work even upon record creation.

 

I appreciate your help.

Thank you

0/9000