Hey there,
This code fragment below processes either a material issue or a material return, depending upon the variable issueDirection. I’m issuing and (trying to) return from data in a UD table, which will be exactly the same for the issue and return.
The issue part works fine. But the return gets an error of:
“Unit of measure not found for Class: UOM:”
The trace in Return Material is not helpful. I’ve tried an OnChangeUM with no apparent difference.
Anyone done this? Willing to share?
Thanks,
Joe
// get material sequence
int mtlSeq = 10;
var jobMtl_xRow = (from row in erpContext.Db.JobMtl
where row.Company == Session.CompanyID &&
row.JobNum == key1 &&
row.PartNum == partNum
select new {row.Company, row.MtlSeq}).FirstOrDefault();
if (jobMtl_xRow != null)
{
mtlSeq = jobMtl_xRow.MtlSeq;
}
// issue
string msg = "";
string issueType = "STK-MTL";
bool plNegQtyAction = true;
dsIssueReturn = new Erp.Tablesets.IssueReturnTableset();
bool requiresUserInput = false;
bool qtyTransacted = false;
string issueReturnString = "IssueMaterial";
if (issueDirection == -1)
{
issueType = "MTL-STK";
issueReturnString = "ReturnMaterial"; // ---guessing about this---
}
issueReturn.GetNewIssueReturnToJob(key1,0,issueType,Guid.Empty,out msg, ref dsIssueReturn);
string message1 = "";
string message2 = "";
foreach(var ttIssueReturn_xRow in (from row in dsIssueReturn.IssueReturn
where row.Company == Session.CompanyID
select row))
{
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeToJobNum(ref dsIssueReturn, issueReturnString, out message2);
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeToAssemblySeq(ref dsIssueReturn, issueReturnString);
ttIssueReturn_xRow.ToJobSeq = mtlSeq;
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangingToJobSeq(mtlSeq, ref dsIssueReturn);
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeToJobSeq(ref dsIssueReturn, issueReturnString, out message2);
ttIssueReturn_xRow.PartNum = partNum;
ttIssueReturn_xRow.ToJobPartNum = jobPartNum;
ttIssueReturn_xRow.ToJobSeqPartNum = partNum;
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangePartNum(ref dsIssueReturn, issueReturnString);
// ----gets the error at this point----
ttIssueReturn_xRow.TranQty = partWeight;
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeTranQty(ttIssueReturn_xRow.TranQty, ref dsIssueReturn);
ttIssueReturn_xRow.FromWarehouseCode = warehouseCode;
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeFromWarehouse(ref dsIssueReturn, issueReturnString);
ttIssueReturn_xRow.FromBinNum = binNum;
ttIssueReturn_xRow.RowMod = "U";
issueReturn.OnChangeFromBinNum(ref dsIssueReturn);
// ---- partIUM and UM are "LB" which is correct ----
this.PublishInfoMessage("uom " + ttIssueReturn_xRow.PartIUM + " " + ttIssueReturn_xRow.UM , Ice.Common.BusinessObjectMessageType.Information, Ice.Bpm.InfoMessageDisplayMode.Individual, "", "");
ttIssueReturn_xRow.RowMod = "U";
qtyTransacted = true;
}
// ---- never gets this far in the return ----
if (qtyTransacted)
{
issueReturn.PrePerformMaterialMovement(ref dsIssueReturn, out requiresUserInput);
issueReturn.PerformMaterialMovement(plNegQtyAction, ref dsIssueReturn, out message1, out message2);
string direction = "";
if (issueDirection == 1)
{
issued = true;
issueDate = DateTime.Now;
direction = "Issued";
}
else if (issueDirection == -1)
{
reversed = true;
reversedDate = DateTime.Now;
reversedBy = callContextClient.CurrentUserId;
direction = "Reversed";
}
this.PublishInfoMessage("Charge " + direction, Ice.Common.BusinessObjectMessageType.Information, Ice.Bpm.InfoMessageDisplayMode.Individual, "", "");
}
}