top of page

Creative Solution for shipping broker operations in D365FO

Standard Landed Cost Module:

Below you can see the standard landed cost module structure by design. This is not working for a shipping broker scenario where an additional 4th party is coming into play - the shipping broker. The shipping broker is the middlemen between the ship owner, the shipper as well as the shipment receiver.

Creative workaround:

Below you can see a creative workaround to make the landed cost module a fit for shipping broker (middlemen) operations that want to track voyages but do not maintain inventory per se as just facilitating the negotiations/contracts between shipper, ship owner and shipment receiver.

Visio flow:

See below a full detailed visio flow explaining the workaround step by step. In the section further below, each step is broken down in detail. (in case the screenshot is too small, see further down a break down of the visio flow)


  • Set up Shipment receiver as dummy vendor record. We will later create from the source SO a PO as voyages and landed costs drive of POs only at this point. (not of SOs) The PO transaction will not create any payables as we set the item purchase price of the commodity to be shipped to 0. We simply use the PO later to tie a voyage to a PO and track the voyage along the way.

  • Set up Shipowner as vendor records. (party that facilitates the shipment and gets paid a flus through charge by the broker means us)

  • Set up 1099 Broker as vendor account (only if outsourced broker payments are handled via POs, if handled via vendor invoice journal and payment than neglect this step.) (party that handles the contract negotiations between Shipowner and Shipment receiver and gets paid a percentage of the contract as commission)

  • Allow negative inventory at warehouse level/released product level via item model group

  • Set up charge codes for e.g. initial freight and broker commission (means commission share we will get) and other charges that may apply (AR side) - In this scenario we simply go with those 2 to keep things simple.

  • Initial freight debiting AR - Freight account and crediting the customer/vendor account.

  • Broker Commission debiting Accrued Revenue and crediting AR Freight. That means we are taking a cut of the initial freight charge and accrue it to our revenue. (our cut) The remaining part of the initial freight will be flushed through to the ship owner. Also, later a percentage of our revenue cut will get paid to the outsourced 1099 broker.

  • Set up cost type codes for e.g. freight due to the shipowner and other service set cost types required (AP side)

  • Initial freight due to owner debiting Freight - Outbound and crediting the vendor account.

  • Set up released product for commodities that will be shipped with 0 purchase/sales price (we later create payables/receivables primarily via charges/cost types as we do not physically purchase/stock the product to be shipped anyways)

  • Set up AR auto charges for charges sets on AR side (Sales and Marketing). We set such up to make things more efficient - means every time we create a SO for a contract those charges will default in at the header level and we only need to enter the final data points for initial freight and broker commission. This comes in handy if there are repetitive charges for certain shipments.

  • Set up AP auto cost types for service sets on AP side (Landed cost) We set such up to make things more efficient - means every time we create a PO/Voyage for a contract those charges will default in at the header level and we only need to enter the final data points for flush through charge to be paid to the ship owner.

  • Set up broker commission service item as released product (this is only needed in case we use POs to pay our outsourced 1099 brokers, if we only use invoice journals as well as standard payment proposal we can skip this step)

Process flow - Demo:

See below the first part of the above visio flow.

1. Cargo negotiation outside of D365FO.

2. Manual sales order creation for customer.

As soon as the contract is finalized a SO is created. We use the above configured customer account. We enter the commodity product record to be shipped on the SO lines. This product record has all necessary commodity and shipping codes associated/maintained at the product level. If needed we can attach any contractual terms as attachments and add additional information if needed such as fin dim defaults. For now, we ignore such cherries on the cake. You can see that the SO has a 0 unit price as we set the default sales price for the commodity released product record to 0. That means, we do not create any receivables at this point here.

3. Auto charges (AR Service sets) to be populated with actual initial freight and broker commission (our cut) values:

As explained above via auto charges setup at the header level for customer "Broker customer", the initial freight as well as broker commission (our cut) charge codes default in.

Such default in however with a 0 charge value. We now update such depending on the negotiated contract.

Let's assume the initial freight to be received is 100 USD and our cut is 25 USD.

The charges code for initial freight is set up to debit the customer/vendor type and credit the freight ledger account. The charge code for broker commission is set up to debit freight ledger account and credit revenue ledger account.

4. SO confirmation:

As soon as all data elements are entered, the Sales order is to be confirmed.

See below the SO confirmation process.

The operation processed successfully.

5. SO packing slip posting (batch or manual):

As a next step we post the packing slip that decrements the inventory. As we allowed negative inventory, we are fine to do so here. The packing slip will be posted manually. (but this can also be set up as batch job if needed).

See below the SO packing slip posting process.

After processing the SO changes its status to delivered.

6. Creation of purchase order for shipper at 0 cost via “Create Purchase order from Sales order function”:

As voyages run of POs in D365FO by design (designed for an organization handling inbound shipments via broker – so, not directly designed for broker operations as “middlemen”), we will create a dummy PO as workaround. The PO will be created directly from the SO via “Create Purchase order from Sales order" function. We will have a separate vendor record for our/the smae customer from the original SO to facilitate this process. (Workaround) As soon as the function is triggered, we specify the dummy “customer” vendor record and confirm. Now, a PO is created for our “customer” vendor record with the same commodity product, quantities, warehouse/site information, etc. on the PO lines. The item will again have 0 item cost and no charges are applied here – that means no vendor balance will be accrued at all. All transactions will be posting with 0 financial impact. SO and PO numbers are tied together on the line details via reference field – you can view such on the line details under Product/Item reference and reference type and number.

See below that a PO for the SO was created successfully.

7. PO confirmation

As a next step, wee confirm the dummy PO as required by design on the PO side.

8. Voyage creation for the just confirmed PO:

On the “all voyages” form, we create a new voyage and enter information such as vessel, journey template (point to point, or multi leg cargo), mode of delivery, shipping company (means Shipowner) and BOL information if we are already aware of such. We can add such also at a later point if not available at this point in time. We can alternatively also create a voyage straight from the all POS form via "create new voyage" function.

We went the route via "create new voyage" function on the PO form. See below.

On the next form, the ”voyage editor form”, we will search for the above confirmed PO via query. We select the lines on the PO and add such to the staging list and afterwards to a shipping container. Those steps are required by design. This feature can be very helpful in the scenario of a cargo that contains multiple shipments (e.g. when rented a fill container/ship)

Adding the voyage to the staging list was successful.

We are adding the voyage on staging list to a new container.

We enter details on container information and confirm.

Note, just as a recap: The voyage is tied to the originating PO. You can view such on the PO on the line details under Landed Cost/Voyage.