如何在使用代码更新packingSlip后关闭采购订单

时间:2016-09-29 12:01:00

标签: axapta x++

如何在使用代码更新packingSlip后关闭采购订单?

我知道我可以在purchLine.receivedNow中为每个purchLine提供不同的数量,我需要发布装箱单并关闭采购订单,无论交付多少物品。

我想在AX 2009中通过x ++发布packingSlip,它运行正常。 但是,我需要同时关闭采购订单。

我基本上需要:

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 个答案:

答案 0 :(得分:1)

我对你所问的问题略显灰暗,但如果它适用于AX09并且你想要"关闭" PO。我认为这与进入PO行并执行Functions>Deliver Remainder并选择Cancel Quantity相同。

如果那是你想要的,我相信Cancel Quantity中的逻辑只是:

PurchLine.RemainPurchPhysical = 0;
PurchLine.RemainInventPhysical = 0;
PurchLine.update();

update()负责改变状态。

相关问题