Thanks Adam, this is very helpful. I looked at the headers before and wouldn’t have found this relation without your comment. For other reading, the [originalsalesline].InventTransId == [ReplacementSalesLine].InventTransIdReturn.
Below are the basics for creating an RMA from the sales line via X++ for anybody interested. You will need to modify this to make it work, but it’s the basics.:
// Ripped out of Forms\SalesCopying
void writeTmpFrmVirtual(TmpFrmVirtual _tmpFrmVirtual, tableId _tableId, recId _recId, Num _id, LineNum _lineNum = 0, TransDate _transDate = systemdateget(), Qty _qty = 0)
{
_tmpFrmVirtual.TableNum = _tableId;
_tmpFrmVirtual.RecordNo = _recId;
_tmpFrmVirtual.Id = _id;
_tmpFrmVirtual.LineNum = _lineNum;
_tmpFrmVirtual.TransDate = _transDate;
_tmpFrmVirtual.Qty = _qty;
_tmpFrmVirtual.write();
}
;
// Create your RMA header here
// [Put your code here for ReturnOrder]
// End RMA header create
writeTmpFrmVirtual(tmpFrmVirtualHeader, originalSalesTable.TableId, originalSalesTable.RecId, custInvoiceJour.InvoiceId);
while select salesLine
where salesLine.SalesId == originalSalesTable.SalesId
{
writeTmpFrmVirtual(tmpFrmVirtualLines,
salesLine.TableId,
salesLine.RecId,
custInvoiceJour.InvoiceId,
salesLine.LineNum,
custInvoiceJour.InvoiceDate,
salesLine.SalesQty);
}
salesCopying = SalesCopying::construct(SalesPurchCopy::CreditNoteHeader);
salesCopying.initParameters(returnOrder, // This is the RMA header, aka SalesTable type
tmpFrmVirtualLines,
tmpFrmVirtualHeader,
1,
NoYes::Yes,
NoYes::No,
NoYes::No,
NoYes::Yes,
NoYes::Yes);
// These two commented lines are used if you are doing this manually
//salesCopying.promptRemoveSettlement();
//salesCopying.promptConvertCurrencyCode();
salesCopying.parmCustInvoiceJour(custInvoiceJour);
salesCopying.copy();