This is obscure but maybe somebody has already gone through this brain damage?
In 2024.1 the RDD for the invoice isn’t ARForm anymore, its ARInvoice.
Which is fine except that our invoices broke. So I rebuilt them using a copy of the new standard ARInvoice RDD. Again, fine BUT the ARForm RDD had a calculated field on InvcDtl for the StateTaxID. This held the tax ID for the ship to address on the shipment (the one on the invoice header is the main customer tax ID, which isn’t correct if they have different ones for different ship tos). Epicor has even documented this in KB0120265: “The ship to tax id should be available as a calculated field in InvcDtl table named “StateTaxID” and you can customize the layout to show this detail.”
ARForm rdd has the field:
Ok great. Except its not there anymore. Anyone been able to hunt it down in the ARInvoice rdd? It’s not trivial to add the logic to a custom rdd to retrieve this. And I don’t think I can go back and rebuild it again using the ARForm rdd. The actual field is ShipTo.ResaleID
Is it possible they have coded it into the InvcHead CustResaleID Calculated field?
This is a big reason why the way they do calculated fields really gets to me, the magic they do behind the scenes in a DLL file is stupid.
Edit to Add: The AR Invoice is the only form I have had to touch during my test upgrade from 2022.2 to 2024.1 and I suspect it was like you, a complete re-write from their base form and copying over the new RDD to my own. It seems like every upgrade though I go through this with ARForm.
From my searching, I didn’t see it in the ARInvoice either and I doubt you missed it. It would still require recreating the field, but this is the best I could track down for how StateTaxID is being set in ARForm.
In C#
if (InvcDtl.UseOTS)
{
StateTaxID = InvcDtl.OTSResaleID
}
Else
{
if (ShipTo != null) //If ShipTo record exists, based on Company, CustNum, InvcDtl.ShipToNum
{
StateTaxID = ShipTo.ResaleID;
}
}
if (ShipTo != null) //If ShipTo record exists, based on Company, CustNum, InvcDtl.ShipToNum
{
if (string.IsNullOrEmpty(StateTaxID))
{
StateTaxID = ShipTo.ResaleID;
}
}
if (Customer != null) //If Customer record exists, based on Company, CustNum
{
if (string.IsNullOrEmpty(StateTaxID))
{
StateTaxID = Customer.ResaleID;
}
}
In plain language:
If InvcDtl.UseOTS is true
StateTaxID = InvcDtl.OTSResaleID
Else If InvcDtl.UseOTS is false AND there is a ShipTo record
StateTaxID = ShipTo.ResaleID
If there is a ShipTo record AND StateTaxID has not been set yet
StateTaxID = ShipTo.ResaleID
If there is a Customer record AND StateTaxID has not been set yet
StateTaxID = Customer.ResaleID