Skip to main content
Solved

How to trigger a real-time sales price update when a FIFO cost layer is fully consumed (no lot control)

  • October 6, 2026
  • 2 replies
  • 29 views

Forum|alt.badge.img+6

Hi everyone,

We maintain the sales price of a FIFO inventory item as "cost + fixed markup". Today this is done by a Business Event that runs on a daily schedule​ and sets:

Sales Price = current item cost + 5

The customer is not happy with this because it is not real time. Here is the scenario we hit yesterday: within the same business day, the older/cheaper cost layer was sold out first, and immediately after that we sold a large quantity that had to be issued from a much more expensive cost layer. Because the price update only runs once a day, we kept selling at the old low price even though the cost we were actually issuing had already jumped — so we lost margin on every unit sold after the layer switch.

What we are looking for: a way to recalculate and update the sales price immediately when the current (old) cost layer is fully consumed, instead of waiting for the next scheduled run.
 

Constraints / context:

  • The item is FIFO only — lot/serial control is NOT enabled, so we cannot use lot-specific pricing or lot-level triggers.
  • The current mechanism is a scheduled Business Event (daily frequency) that reads the cost and rewrites the sales price.

Best answer by ray20

This topic is closed due to the situation is more complicated.

Our users create and print sales orders in a batch in the morning; the physical issue happens hours later. So at order-entry time no inventory document exists yet.

Example: item A has layer 1 = 100 pcs @ $10, layer 2 = 500 pcs @ $12. On-hand = 600.

  • SO #1, 60 pcs → should be $15 (10+5)
  • SO #3, 60 pcs → layer 1 is already consumed by SO #1/#2, so it should be $17 (12+5)

But INCostStatus.QtyOnHand is still 100 / 500 while all three orders are being entered — nothing has been issued, so any Business Event or any hook on INReleaseProcess sees "stock is still there" and keeps the price at $15. By the time the issue is released, all three orders are already priced off the cheap layer.

So the real trigger isn't "the layer is consumed" — it's "the layer is already committed​ to earlier orders".

2 replies

Forum|alt.badge.img+6
  • Author
  • Captain II
  • Answer
  • October 7, 2026

This topic is closed due to the situation is more complicated.

Our users create and print sales orders in a batch in the morning; the physical issue happens hours later. So at order-entry time no inventory document exists yet.

Example: item A has layer 1 = 100 pcs @ $10, layer 2 = 500 pcs @ $12. On-hand = 600.

  • SO #1, 60 pcs → should be $15 (10+5)
  • SO #3, 60 pcs → layer 1 is already consumed by SO #1/#2, so it should be $17 (12+5)

But INCostStatus.QtyOnHand is still 100 / 500 while all three orders are being entered — nothing has been issued, so any Business Event or any hook on INReleaseProcess sees "stock is still there" and keeps the price at $15. By the time the issue is released, all three orders are already priced off the cheap layer.

So the real trigger isn't "the layer is consumed" — it's "the layer is already committed​ to earlier orders".


Chris Hackett
Community Manager
Forum|alt.badge.img
  • Acumatica Community Manager
  • October 8, 2026

Thank you for sharing this with the community ​@ray20!