static void JobCopySO()
{
SalesTable salesTable = SalesTable::find('SO1-900104');
SalesLine salesLine;
SalesTable salesTableNew;
SalesOrderCopyingContract contract = SalesOrderCopyingContract::newIsCreditNote(false);
SalesCopying salesCopying;
TmpFrmVirtual tmpFrmVirtualLines;
TmpFrmVirtual tmpFrmVirtualHeader;
void writeTmpFrmVirtual(TmpFrmVirtual _tmpFrmVirtual, TableId _tableId, RecId _recId, Num _id, LineNum _lineNum = 0, TransDate _transDate = systemDateGet(), Qty _qty = 0)
{
_tmpFrmVirtual.clear();
_tmpFrmVirtual.TableNum = _tableId;
_tmpFrmVirtual.RecordNo = _recId;
_tmpFrmVirtual.Id = _id;
_tmpFrmVirtual.LineNum = _lineNum;
_tmpFrmVirtual.TransDate = _transDate;
_tmpFrmVirtual.Qty = _qty;
_tmpFrmVirtual.write();
}
// Create your new sales header
salesTableNew.SalesId = NumberSeq::newGetNum(SalesParameters::numRefSalesId()).num();
salesTableNew.initValue();
salesTableNew.CustAccount = salesTable.CustAccount;
salesTableNew.initFromCustTable();
salesTableNew.insert();
// Build header virtual
writeTmpFrmVirtual(tmpFrmVirtualHeader, salesTable.TableId, salesTable.RecId, salesTable.SalesId);
while select salesLine
where salesLine.SalesId == salesTable.SalesId
{
writeTmpFrmVirtual(tmpFrmVirtualLines, salesLine.TableId, salesLine.RecId, salesLine.SalesId, salesLine.LineNum, systemDateGet(), salesLine.SalesQty);
}
contract.parmSalesPurchCopy(SalesPurchCopy::CopyAllHeader);
contract.parmCallingTableSalesId(salesTableNew.SalesId);
contract.parmTmpFrmVirtualLines(tmpFrmVirtualLines);
contract.parmTmpFrmVirtualHeader(tmpFrmVirtualHeader);
contract.parmQtyFactor(1);
contract.parmRecalculateAmount(NoYes::No);
contract.parmReverseSign(NoYes::No);
contract.parmCopyMarkup(NoYes::No);
contract.parmCopyPrecisely(NoYes::No);
contract.parmDeleteLines(NoYes::Yes);
SalesCopying::copyServer(contract.pack(), false);
info(strFmt("Created %1", salesTableNew.SalesId));
}