Как закрыть заказ на покупку после обновления packingSlip с помощью кода

#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. Спасибо за это, Алекс. Сначала это не сработало, потому что мне пришлось обновить таблицу покупок, чтобы увидеть изменения.