Landed cost for transfer orders

Has anybody come up with any new ideas on how to do this since Transfer Orders Freight Costs Question?

  • Site A always transfers the product to Site B
  • Product is average cost
  • Sites have separate cost IDs
  • The cost of the freight to transfer the product should be distributed into the material burden at the receiving site, exactly how the landed cost module does it on a normal receipt

I know that isn’t how Epicor works. I am looking for ideas people have come up with to customize the system to work this way. Other than doing a manual calculation and cost adjustment after each transfer order receipt, I am not sure what else could be done.

2 Likes

At the Receiving site, are you saying that you want the PLT-STK transaction to show the unit freight cost in the MtlBurUnitCost field?

This will require a BPM on the PartTran table, because this is ONLY transaction related… so all the usual caveats on BPMs on PartTran (one of the most, if not the most-hammered table in all of Epicor).

You’d need a UD field probably on Transfer Shipment Entry so the shipping site could enter the shipping cost, and then a BPM on PartTran to calculate the “unit” freight cost and populate the field. I’m pretty certain it won’t be that easy, but it might be a start.

3 Likes

I am heavily interested in this as well. We ship between our sites and use external freight services (maybe a $500 trucking cost) and want to disperse that cost across the material goods so the landed cost to the next facility is a bit higher. I will test out job but just noting we are looking into this as well and will flag if I find any good solution besides the quick job.

1 Like

I actually solved this but didn’t have a minute to come back and write the solution. When the transfer order is shipped, a record is created in the plant tran table. That record carries the cost elements from the sending site. Then when you receive the transfer order, those values are used to average the cost into the receiving site. So the solution is to override the mtl bur cost on that record in preprocessing. So much simpler than I thought it would be.

2 Likes

Interesting I will look into this! Thanks

2 Likes

I’m still building the UI components to facilitate the dispersal but the foundation works. Whenever I finish it I will come back and put screenshots.

1 Like

Well now that I have continued to mull this over, I am not sure what the impact on accounting is going to be. Because the inventory value leaving site A is x, but the inventory value arriving at site B is x+y. Where does that variance end up? And is it going to cause a discrepancy in the books at some point? Things I would be able to answer if I was an accountant.

There should be a GL control that would be configured to split the costs out for freight. Not sure what it would be…

There could be a custom posting rule to get a bit more granular if the person with the corduroy jacket with leather elbow patches needed it.

Right but if we are just shoving it into material burden, how does Epicor know that it’s freight?

anyone out there with better thoughts on how this could be handled.

Perhaps you don’t want to use MTLBurden you want to keep it separate. If you did that then a custom posting rule would be easier as you would be able to use the BAQ lookup functionality to have a baq that looked up the parttran and the “new transfer freight field”. On receipt you could just fire a BPM to work out the split, cross referencing the Landed cost and the indirect charges etc that were disbursed.

But we do want it reflected in the cost of the part, so I think it has to go into mtl burden. I will have to think on it more.

1 Like

The GL control for Transfer Definitions includes a Transfer Cost Variance account context which will be where any difference in cost from Site A to Site B ends up - for us this is a P&L account that captures the difference in costs when we ship parts across the country (one site might have higher labor costs than the other for the same part, if base labor rates are different). I imagine the difference in material burden from the STK-PLT transaction in site A and the PLT-STK transaction in site B will end up here.

EDIT TO ADD: These controls are site-to-site specific, so I don’t think you can change it specifically for material burden. But you could create a report to show the freight charged per month on transfers and do a journal entry to net-out the transfer cost variance account with the freight you paid. Anything left in the account would be “true” transfer cost variance. Some companies might be ok with leaving it all as-is, others might want to split it out.

2 Likes

That’s the bit I was looking for… Thanks :clap:

Amazing!

Scrap my hairbrained idea… :exploding_head:

1 Like

Ok finally coming back here to document the solution. This was done in 2024.1.5.

  1. Add a UD field for the freight cost to erp.TFShipHead

  2. Add a UD field to capture the additional mtl bur unit cost to PlantTran

  3. Create an updateable BAQ on PlantTran to update the UD field in Plant Tran. I wasn’t able to get my UBAQ to work in the kinetic grid to actually post the update, but, you still have to have it because otherwise the kinetic grid is not editable. It ended up being a little complicated because I am pre-calculating the potential distribution of the freight by either quantity or weight, so that the user has the option to accept those distributions OR manually type in the distribution they prefer. I believe this is why the kinetic grid choked on it (either the subquery, the calculated fields, or both). But haven’t had time to get support to accept a bug.

  4. Create a function you can use to pass in the additional cost value and transaction num, and update the plant tran table, since the UBAQ doesn’t work in Kinetic.

var context = Ice.Services.ContextFactory.CreateContext<ErpContext>(); 
        var svcPT = Ice.Assemblies.ServiceRenderer.GetService<Erp.Contracts.PlantTranSearchSvcContract>(context);
        Erp.Tablesets.PlantTranSearchTableset tsPlantTran = new Erp.Tablesets.PlantTranSearchTableset();
        this.CallService<Erp.Contracts.PlantTranSearchSvcContract>(pt => {
                          tsPlantTran = svcPT.GetByID(TranNum);
                          tsPlantTran.PlantTran[0].RowMod="U";
                          tsPlantTran.PlantTran[0]["AddMtlBurUnitCost_c"] = AddlBur;
                          svcPT.Update(ref tsPlantTran);
                          
                          });
  1. Add a preprocessing BPM on Erp.BO.TransOrderReceipt.CustomUpdate. When you ship a transfer order, a record is created in the plant tran table with the cost components that represent the costs of the part in the sending site. This BPM is to take the field in plant tran that contains the material burden cost element, and add in the value from the UD field. That way when the receipt processes, it is incorporating that additional amount.

  1. Add a layer to Erp.UI.TransOrderShipEntry. Add a control that allows the user to type in the freight amount (bound to the UD field on TFShipHead).

  2. Add a layer to Erp.UI.TransOrderReceipt. This layer ended up being pretty complicated to build because the base application has some difficult (or impossible?) to evade logic that prevented me from simply sticking my plant tran UD field into the existing interface. It demands a receipt date when all you are trying to do is update the UD field. So to get around that I just added a separate tab with its own panel card grid which ended up being nicer anyway I think.

  • Add a new tab page for the landed cost controls
  • Add a panel card grid. I used the provider model to hook the grid up to my updatable BAQ so I could make the UD field on plant tran editable.
  • Add a combo box so they can pick whether they want to distribute the freight by quantity, weight, or manually.
  • Add a button for the apply command.
  • Add an on click event for the button with a data view condition to iterate through the rows in the grid.
  • Add an iterate event to send the transaction number and desired freight cost over to the function to actually save the value in the UD field, since the UBAQ doesn’t work.

That’s pretty much it. Once they have applied the freight they can receive the transfer order as normal.

After selecting distribution method and applying:

3 Likes