OrderAlloc.AllocateByLotBin returns "underlying provider failed on enlisttransaction"

In my continuing saga to automate the Epicor 10 Fulfillment screen, I have successfully mimicked the steps the screen executes to allocate by Lot/Bin each line in the grid. I am finally to the final step of actually doing the allocation step (OrderAlloc.AllocateByLotBin). From Epicor’s Object Browser, it looks like a pretty straight forward call. However, like OrderAlloc.GetListOfOrders, it isn’t straight forward and isn’t properly documented.

When I execute it, I receive a message stating “underlying provider failed on enlisttransaction”. Does this method require a transaction or am I missing something else in order to execute this that isn’t apparent? An online search doesn’t come up with anything concerning this error and an Epicor screen customization, so this appears to be a pretty rare issue.

1 Like

I have exactly the same issue. Did you ever find an answer to this?

Well I did find a solution, but I had to use a combination of the customization and a BPM to get it to work. I also bent the rules a bit and had the BPM update the necessary tables directly to complete the goal.

I know Epicor frowns on that, but when their data adapter isn’t working as expected and isn’t well documented, you have to do what you can with the tools provided.

Ouch. Ok, what I thought wasn’t going to be terribly difficult turns out to be. I’m going to try the BPM route as well. thank you!

Have you tried testing using BL Tester?

I’m working on building a screen that will allow Inventory Transfer for Allocated Items. I refer to it on this post: Inventory Transfer Allocated Stock

I’ve just traced the necessary calls, and I have this list. All are within the OrderAlloc dll


Are you hitting all those calls?

OK, got it. I was able to get the error that you were getting. In the call to OrderAlloc.AllocateByLotBin, these were the minimum things that I needed to set in the dataset:

PartAllocLot[x] table (where x is the row that you want to allocate from)
Allocate - set to true
NewAllocatedQty = int

PartAllocTran table
ReleaseToPicking= true
Adhoc = true
RowMod = U

I think the thing that solves the error is making the PartAllocTran row dirty by changing a field. In my business case we want to release to Picking, and we don’t use allocation templates so changing these 2 fields to true makes the row U state and all is happy.

Thank you! I also found this morning that the Tran columns need to be set entirely.

Also, it’s either initiate all the columns or use the getlist then OrderAllocationGetRows to pre-fill it. I’m working on this now and will report back.

I was able to get it to work in BLTester without using these 2 calls:


As listed in my previous post, I only have to set a few fields

Allocate(true), NewAllocatedQty(qty), ReleaseToPicking(true),Adhoc(true)

Thank you, Mark! I’ll let you know what happens. Saved me a lot of agony.

I was able to follow through what you have above and was able to allocate a LOT. The allocation shows up successfully in the PartAlloc table. However, the part bin record is not updating.

I’ll post back if I find something else.

Scratch that. I was adding a row to the PartAllocLot instead of using what was returned …


I was able to skip GetLotOnHandByWhseCodeZoneBinType and create my own PartAllocLot row from a baq. The key is to make sure to specify the warehouse on the AllocateByLotBin call. That makes the PartBin record update.

Also, the PartAllocTran column for Adhoc is “AddHoc” in the datatable… this threw me a few times