#axapta #x
#axapta #x
Вопрос:
Как закрыть заказ на покупку после обновления packingSlip с помощью кода?
Я знаю, что у меня может быть разное количество в purchLine.receivedNow для каждой строки покупки, и мне нужно разнести упаковочную накладную и закрыть заказ на покупку, независимо от того, сколько товаров доставлено.
Я пытаюсь опубликовать packingSlip через x в AX 2009, и он работает нормально. Однако мне нужно одновременно закрыть заказ на покупку.
Мне в основном нужно:
purchParmline.closed = true;
есть идеи о том, как это реализовать? Я искал и нашел много разных способов размещения заказов на покупку, но ничего, что отвечало бы на мой вопрос.
void postPackingSlip(purchId _purchId, num _packingSlipId)
{
PurchFormLetter PurchFormLetter;
PurchTable PurchTable;
;
PurchTable = PurchTable::find(_purchId,true);
purchFormLetter = purchFormLetter::construct(DocumentStatus::PackingSlip);
PurchFormLetter.update(PurchTable, _packingSlipId , today(), PurchUpdate::ReceiveNow ,AccountOrder::None,NoYes::No,NoYes::No);
}
Я также пытался сделать это таким образом, но безуспешно
void postPackingSlipOld(purchId _purchId, num _packingSlipId)
{
PurchFormLetter purchFormLetter;
PurchTable purchTable;
purchparmtable purchParmtable;
ParmId parmId;
PurchLine purchLine;
purchparmline purchparmline;
;
purchTable=PurchTable::find(_purchId);
purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
purchFormLetter.createParmUpdate();
purchParmtable = purchParmtable::find(_purchid, _packingSlipId);
purchFormLetter.createParmTable(purchParmTable,purchTable);
purchParmTable.Num = _packingSlipId;
purchParmTable.insert();
while select purchLine
where purchLine.PurchId == purchTable.purchId
{
purchParmLine.ParmId = purchParmTable.ParmId;
purchParmLine.InitFromPurchLine(purchLine);
purchParmLine.ReceiveNow = PurchLine.PurchReceivedNow;
purchParmLine.TableRefId = purchParmTable.TableRefId ;
purchParmLine.closed = true;
purchParmLine.setQty(DocumentStatus::PackingSlip,false, true);
purchParmLine.setLineAmount();
purchParmLine.insert();
}
purchFormLetter.proforma (false);
purchFormLetter.specQty (PurchUpdate::ReceiveNow);
purchFormLetter.transDate (today());
purchFormLetter.run();
}
Ответ №1:
Я немного не понимаю, о чем вы спрашиваете, но если это для AX09, и вы хотите «закрыть» заказ. Я думаю, это то же самое, что перейти к строке заказа, выполнить Functions>Deliver Remainder
и выбрать Cancel Quantity
.
Если это то, что вы хотите, я считаю, что логика в Cancel Quantity
:
PurchLine.RemainPurchPhysical = 0;
PurchLine.RemainInventPhysical = 0;
PurchLine.update();
И update()
заботится об изменении статусов.
Комментарии:
1. Спасибо за это, Алекс. Сначала это не сработало, потому что мне пришлось обновить таблицу покупок, чтобы увидеть изменения.