Question

Project Accounting & Field Service Setup Help

  • 9 September 2022
  • 7 replies
  • 180 views

Userlevel 5
Badge +2

I’ve been working learning the Project Accounting module and need some help with setup. I’ve reached out to our partner but also wanted to see if there were any experienced users that would be willing to help me out.

My main issue right now is figuring out how to get Project Transactions (labor, material, charges) to post correctly when billed from an Appointment. Service Order Type only allows one Account Group to be assigned and when the Project Transaction is created everything gets tagged to that group. I don’t know if the Allocation Rules would fix the issue because I can’t seem to get it to work like I think it’s supposed to. Thoughts? I really need to get this setup as it would be a big game changer for us.


7 replies

Userlevel 4
Badge +1

Hey, @amajors

I actually just got done with a proof of concept for this exact issue. I ended up creating a customization to handle it. I created a rowpersisting event on the corresponding RegisterEntry that gets generated. It finds the account group associated to the stock/non-stock item and reassigns it on the corresponding project transaction. Code below that extends RegisterEntry graph. Again, proof of concept, we are in the sales solution cycle on this. I also have an open case with Acumatica on this to see if there are workarounds in the system without having to do a customization. Will post here if I make heads or tails of it.

        //Details Event Handler
protected void PMTran_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
{

var row = (PMTran)e.Row;
InventoryItem item = PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, row.InventoryID);
if (item != null)
{
PMAccountGroup account = PXSelect<PMAccountGroup, Where<PMAccountGroup.accountID, Equal<Required<PMAccountGroup.accountID>>>>.Select(Base, item.COGSAcctID);
if (account != null)
{
row.AccountGroupID = account.GroupID;
cache.Update(row);
}
}

}

 

Userlevel 5
Badge +2

@rhooper91 have you tried an import scenario to update the Project Transaction before release? I’m not knowledgeable enough to create one that works but I would think that you could update the Group based on the inventory item account.

Userlevel 4
Badge +1

@amajors

I have not tried with import scenario but I imagine it would totally be possible. You would create the generic inquiry to search for new project transactions and include the current and join the future account group from the item in that table. I would imagine you could drop lines from the table where the current == future account group to prevent it from getting too large. 
 

You could then write a business event to trigger when a new record is added to that table that triggers the import scenario to “correct” the project transaction.

 

That is essentially what my code is doing, it’s just doing it in real time. The problem I have with import scenarios is that there will always be a gap in time between when the transaction is created and when the import scenario triggers and in that you can find yourself with some transactions that never got corrected before they were released. So if you go the import scenario route it should be supported with a good process to ensure releasing unadjusted transactions won’t happen.

Userlevel 5
Badge +2

Hey, @amajors

I actually just got done with a proof of concept for this exact issue. I ended up creating a customization to handle it. I created a rowpersisting event on the corresponding RegisterEntry that gets generated. It finds the account group associated to the stock/non-stock item and reassigns it on the corresponding project transaction. Code below that extends RegisterEntry graph. Again, proof of concept, we are in the sales solution cycle on this. I also have an open case with Acumatica on this to see if there are workarounds in the system without having to do a customization. Will post here if I make heads or tails of it.

        //Details Event Handler
protected void PMTran_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
{

var row = (PMTran)e.Row;
InventoryItem item = PXSelect<InventoryItem, Where<InventoryItem.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, row.InventoryID);
if (item != null)
{
PMAccountGroup account = PXSelect<PMAccountGroup, Where<PMAccountGroup.accountID, Equal<Required<PMAccountGroup.accountID>>>>.Select(Base, item.COGSAcctID);
if (account != null)
{
row.AccountGroupID = account.GroupID;
cache.Update(row);
}
}

}

 

How are you dealing with the duplication of quantities. From my tests the Project Type Appointment creates a PM transaction and then the inventory transaction duplicates the parts on the project.

Userlevel 4
Badge +1

@amajors,

In my scenario I was just proving out that it could be done. I would imagine that if an inventory transaction was also released on an inventory item and the account group is not aligned, the same process would need to occur to correct the additional entry that gets generated on appointment completion. So you would be updating both.

Again.. not ideal. The ideal would be for the system to allow for defaulting based on the item but until that’s instituted, this appears to be the next best thing- whether through customization or import scenario.

Also, to confirm I’m reading you correctly, are you stating that the item gets double counted if project inventory is turned on? Or are you asking how to correct the inventory entry that gets created? My response above corresponds to the latter.

Userlevel 7
Badge

Hi @amajors - were you able to find a solution? Thank you!

Userlevel 5
Badge +2

Hi @amajors - were you able to find a solution? Thank you!

Not at this time. Without a change to the system via update or customization, I don’t see this working which is extremely disappointing since we invested in it and it doesn’t do what we expected.

Reply


About Acumatica ERP system
Acumatica Cloud ERP provides the best business management solution for transforming your company to thrive in the new digital economy. Built on a future-proof platform with open architecture for rapid integrations, scalability, and ease of use, Acumatica delivers unparalleled value to small and midmarket organizations. Connected Business. Delivered.
© 2008 — 2024  Acumatica, Inc. All rights reserved