Is the InventoryQtyAdjAdapter designed to plunge you into madness?
Or a more helpful question - has anyone successfully used this adapter?
I am boinking my way thru and it’s a damn mess. If I explicitly create a row in InventoryQtyAdjData - ala adj.InventoryQtyAdjData.InventoryQtyAdj.AddInventoryQtyAdjRow() then I get the error:
Cannot insert duplicate key row in object ‘Erp.PartFIFOCost’ with unique index ‘IX_PartFIFOCost’. The duplicate key value is (CP, X002, , 1, 2017-09-08, 1, 0).
The statement has been terminated.
Hmmm, I wasn’t aware I was inserting that row…
Otherwise creating my own copies of the datasets I get this error:
ttInventoryQtyAdj record not found.
Both datasets seem the same so I am puzzled.
You have to create a new ttInventoryQtyAdj, if I remember. I have some sample code somewhere. I think its in the office but if you can, create that tt and add it, then you should be ok. i think it changed at a certain patch, maybe 10.1.400.7.
I am on V10.1.500.19. If you have some sample code I’d much appreciate it. I wouldn’t even know where\how to add a new ttInventoryQtyAdj record.
Sure – will do. It’s a bpm basically. You can type it as a var which is kinda’ lazy, or define your ttDataSet.DataTable.Row type which can be put in a try catch and initialised to null.
I got it working using the created DS. After comparing the 2 ds’s, I guess I forgot to modify the actual data and set to modified lol
Here is some basic working code. Note that I have lot’s of info hardcoded for my use and little to no error checking (yet) - buyer beware.:
public static void Adjust(string PartNum, string BinNum, decimal AdjustQty)
string WH = "CPMAIN";
InventoryQtyAdjAdapter adj = new InventoryQtyAdjAdapter(oTrans);
string Company = ((Session)epiSession).CompanyID;
const string ReasonCode = "PHY";//S
string LotNum = ""; //??
const string Reference = "PhysInvCC";
DateTime TransDate = DateTime.Now;
//Get from part eventually...
string UnitOfMeasure = "EA";
string StkUOMCode = UnitOfMeasure;
string OnHandUOM = UnitOfMeasure;
string PCID = "";
Guid SysRowID = Guid.Empty;
string PartIUM = UnitOfMeasure;
string PartSalesUM = UnitOfMeasure;
bool multipleMatches = false;
string question, serialWarning;
string negact, pcmsg;
bool reqUserInput = false;
bool snRequired = false;
adj.GetPartXRefInfo(ref PartNum, null, null, ref UnitOfMeasure, out serialWarning, out question, out multipleMatches); //get any xrefs
InventoryQtyAdjDataSet iqadj = adj.GetInventoryQtyAdj(PartNum,""); //??ea?
InventoryQtyAdjBrwDataSet ibrw = adj.GetInventoryQtyAdjBrw(PartNum, WH, out primaryBin); //used to get mainly bin info?
adj.NegativeInventoryTest(PartNum, WH, BinNum, LotNum, "", UnitOfMeasure, 1, AdjustQty, out negact, out pcmsg);
bool preSetOK = adj.PreSetInventoryQtyAdj(out reqUserInput);
adj.CheckSN(PartNum, WH, out snRequired);
iqadj.Tables.Rows["RowMod"] = "M";
iqadj.Tables.Rows["ReasonCode"] = ReasonCode;
iqadj.Tables.Rows["BinNum"] = BinNum;
iqadj.Tables.Rows["AdjustQuantity"] = AdjustQty;
iqadj.Tables.Rows["Reference"] = Reference;
adj.SetInventoryQtyAdj(iqadj, out ptran);
@Chris Found it! I was trying to read the bpm file by unzipping it! I would be lost without my years of gathering sample code…. I have recently been thinking about releasing an api of helpers for standard customisation tasks module by module…anyway as attached. Hope it helps.
InventoryQtyAdjTableset JobAsmblDS = new InventoryQtyAdjTableset ();
var tt = new SelectedJobAsmblRow();
if(tt == null)
throw new Ice.BLException("Error: Record Not Found; InventoryQtyAdjTableset ");
tt.Company = Session.CompanyID;
tt.RowMod = “A”;
export.bpm (269 KB)
I too had considered creating a friendly API. Maybe someday. Thanks for your help.
No worries. As I said it was problematic even in bl tester due to the failure to create that record but the good thing about the framework nowadays is you can do a lot of reflection.
I put your code into my customization with custom assemblies:
and I get the errors below.
I know it is something simple, but please help!
430 InventoryQtyAdjDataSet iqadj = adj.GetInventoryQtyAdj(PartNum,""); //??ea?
431 InventoryQtyAdjBrwDataSet ibrw = adj.GetInventoryQtyAdjBrw(PartNum, WH, out primaryBin); //used to get mainly bin info?
Compiling Custom Code …
----------errors and warnings------------
Error: CS0246 - line 430 (938) - The type or namespace name ‘InventoryQtyAdjDataSet’ could not be found (are you missing a using directive or an assembly reference?)
Error: CS0246 - line 431 (939) - The type or namespace name ‘InventoryQtyAdjBrwDataSet’ could not be found (are you missing a using directive or an assembly reference?)
** Compile Failed. **
Most likely using statements missing.
Try using Erp.Tablesets;