Skip to main content
Solved

Updating INTranSplit from Custom Graph Throws "Source cannot be empty" and "Transaction Date cannot be empty"

  • July 27, 2026
  • 3 replies
  • 69 views

Forum|alt.badge.img+3

Hi Team,

I am trying to update a custom field on the INTranSplit DAC from a custom graph. The update itself succeeds, but when I call Save.Press(), Acumatica throws the following validation errors:

Error: Updating 'IN Transaction Split' record raised at least one error.
Error: 'Source' cannot be empty.
Error: 'Transaction Date' cannot be empty.

The custom field (UsrPickedQty) exists on INTranSplit, and I am only updating that extension field.

 

public class TestGraph : PXGraph<TestGraph>
{
public SelectFrom<INTranSplit>
.InnerJoin<INTran>
.On<INTranSplit.FK.Tran>
.InnerJoin<INLocation>
.On<INTranSplit.locationID.IsEqual<INLocation.locationID>
.And<INTranSplit.siteID.IsEqual<INLocation.siteID>>>
.Where<
INTran.tranType.IsEqual<INTranType.assembly>
.And<INTranSplit.lotSerialNbr.IsNotNull>>
.OrderBy<INTranSplit.lineNbr.Asc>
.View Picked;

public PXAction<DummyDAC> UpdateSplit;

[PXButton]
[PXUIField(DisplayName = "Update Split")]
protected virtual IEnumerable updateSplit(PXAdapter adapter)
{
foreach (INTranSplit split in Picked.Select().RowCast<INTranSplit>()
.Where(x => x.RefNbr == "000039"))
{
split.GetExtension<AKINTranSpliteExt>().UsrPickedQty = 2;

Picked.Update(split);

Save.Press();
}

return adapter.Get();
}
}

What is the recommended way to update a custom field on INTranSplit and persist the change?

Version: 26R1

Best answer by Naveen Boga

@SaiKrishnaV  A couple of months ago, I ran into a similar issue when I tried updating INTranSplit directly. After investigating, I realized that the correct solution was to update the appropriate DAC. In my case, updating INComponentTran instead of INTranSplit resolved the issue.

I'm not sure which DAC applies in your scenario, but I'd recommend finding the correct parent DAC to update. In most cases, Acumatica's business logic will automatically update the corresponding custom field on INTranSplit.

3 replies

Forum|alt.badge.img+8
  • Captain II
  • July 27, 2026

There’s logic that’s running within the DAC that might be interfering with the update of the record outside of the graph it’s usually used with.

OrigModule, for example, as a PXDBDefault attribute:

[PXDBDefault(typeof(INRegister.origModule))]

Same with TranDate:

[PXDBDefault(typeof(INRegister.tranDate))]

And, most importantly, RefNbr has a PXDBDefault along with PXParent.

[PXDBDefault(typeof(INRegister.refNbr))]
[PXParent(typeof(FK.Tran))]

So these may be causing the DAC to look for values from it’s Parent when you’re trying to save.

If you only need to update those fields, one way to avoid PXDatabase calls would be to use CacheAttached to modify those attributes on those fields within your specific graph.


Naveen Boga
Captain II
Forum|alt.badge.img+20
  • Captain II
  • Answer
  • July 28, 2026

@SaiKrishnaV  A couple of months ago, I ran into a similar issue when I tried updating INTranSplit directly. After investigating, I realized that the correct solution was to update the appropriate DAC. In my case, updating INComponentTran instead of INTranSplit resolved the issue.

I'm not sure which DAC applies in your scenario, but I'd recommend finding the correct parent DAC to update. In most cases, Acumatica's business logic will automatically update the corresponding custom field on INTranSplit.


Forum|alt.badge.img+3
  • Author
  • Captain I
  • July 28, 2026

@Naveen Boga Thank you for the suggestion! I will try this.