Kinetic Function -- Return Material Error

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, "", ""); 
        }
        
      }

Funny thing about letting your brain sit overnight. Of course, I needed to reverse the from/to parts, warehouses, etc.

Here’s the good stuff for anyone interested:

        // 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";
        }
        
        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))
        {
          if (issueDirection == -1) // return
          {
            ttIssueReturn_xRow.RowMod = "U";

            ttIssueReturn_xRow.FromJobNum = key1;
            issueReturn.OnChangeFromJobNum(key1, ref dsIssueReturn, issueReturnString);
            
            ttIssueReturn_xRow.RowMod = "U";
            issueReturn.OnChangeFromAssemblySeq(0, ref dsIssueReturn, issueReturnString);
            
            ttIssueReturn_xRow.FromJobSeq = mtlSeq; 
            
            ttIssueReturn_xRow.RowMod = "U";
            issueReturn.OnChangeFromJobSeq(ref dsIssueReturn, issueReturnString, out message2);

            ttIssueReturn_xRow.PartNum = partNum; 
            ttIssueReturn_xRow.FromJobPartNum = jobPartNum; 
            ttIssueReturn_xRow.FromJobSeqPartNum = partNum; 
            ttIssueReturn_xRow.FromAssemblyPartNum = jobPartNum; 
            ttIssueReturn_xRow.RowMod = "U";

            issueReturn.OnChangePartNum(ref dsIssueReturn, issueReturnString);

            ttIssueReturn_xRow.ToWarehouseCode = warehouseCode; 
            ttIssueReturn_xRow.RowMod = "U";
            issueReturn.OnChangeToWarehouse(ref dsIssueReturn, issueReturnString);
            
            ttIssueReturn_xRow.ToBinNum = binNum; 
            ttIssueReturn_xRow.RowMod = "U";
           
            ttIssueReturn_xRow.TranQty = partWeight; 
            ttIssueReturn_xRow.RowMod = "U";
            issueReturn.OnChangeTranQty(ttIssueReturn_xRow.TranQty, ref dsIssueReturn); 
            
            ttIssueReturn_xRow.RowMod = "U";
           
            qtyTransacted = true;
            
          }
          else // issue
          {
            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);
  
  
            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);
            
            ttIssueReturn_xRow.TranQty = partWeight; 
            ttIssueReturn_xRow.RowMod = "U";
            issueReturn.OnChangeTranQty(ttIssueReturn_xRow.TranQty, ref dsIssueReturn); 
            
            ttIssueReturn_xRow.RowMod = "U";
           
            qtyTransacted = true;
          }
        }
 
        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, "", ""); 
        }
      }
1 Like