Поищите по фразе "программная разноска" или "создание накладной из кода" - есть варианты и с ручным созданием PurchParmLine, вот, например, тема -
Создание CustInvoiceJour, CustInvoiceSalesLink, CustInvoiceTrans from X++
Сам пишу примерно такой код (разноска отборочной - выбор нужных строк заказа по фильтру и задание для каждой требуемого кол-ва):
X++:
purchParmTable.clear();
purchFormLetter = new PurchFormLetter_PackingSlip_public(true);
purchFormLetter.parmId();
purchFormLetter.initParmPurchTable(purchTable);
purchFormLetter.specQty(PurchUpdate::PackingSlip);
purchFormLetter.transDate(systemdateget());
purchFormLetter.createParmTable(purchParmTable, purchTable);
purchParmTable.Num = packingSlip.PackingSlipId;
purchParmTable.Transdate = packingSlip.DeliveryDate;
purchParmTable.insert();
purchFormLetter.parmPurchParmTable(purchParmTable);
while purchLine //все необходимые фильтры
{
purchParmLine.clear();
purchParmLine.initFromParmTable(purchParmTable);
purchParmLine.initFromPurchLine(purchLine);
purchQuantity = PurchQuantity::construct(DocumentStatus::PackingSlip);
[purchParmLine.ReceiveNow, purchParmLine.RemainBefore, purchParmLine.RemainAfter] =
purchQuantity.qtyPurch(purchLine, purchUpdate::PackingSlip, < ->, false, purchParmTable.PackingSlipIdForUpdate_W);
[purchParmLine.InventNow , purchParmLine.RemainBeforeInvent, purchParmLine.RemainAfterInvent] =
purchQuantity.qtyInvent(purchLine, purchUpdate::PackingSlip, < ->, false, purchParmTable.PackingSlipIdForUpdate_W);
purchLine.PurchReceivedNow = purchParmLine.ReceiveNow;
purchLine.setInventReceivedNow();
purchParmLine.setQty(purchParmTable.ordering, false);
purchParmLine.setInventReceiveNow();
purchParmLine.setLineAmount();
purchParmLine.insert();
}
purchFormLetter.multiForm(true);
purchFormLetter.allowCreateParmTable(true);
purchFormLetter.progressInit("Создание отборочной", 1, '');
purchFormLetter.createParmUpdate();
purchFormLetter.setJournalList();
purchFormLetter.createJournal();