Below is sample job to force delete inventtrans, which will take care of invent on hand update.
static void DeleteInventTrans(Args _args)
{
  Dialog          dlg = new Dialog("Delete inventtrans ?");
  DialogField     dlgFld;
  InventMovement  inventMovement;
  PurchLine       purchLine;
  PurchLineRefRecId   recId;
  ;
  dlgFld = dlg.addField(typeid(PurchLineRefRecId));
  if(dlg.run())
  {
      recId = dlgFld.value();
      purchLine = PurchLine::findRecId(recId);
   
      if(purchLine)
      {
          InventMovement = InventMovement::construct(purchLine);
          InventUpd_DeleteMovement::newMovement(
                    inventMovement,true).updateNow();
          info("done");
      }
  }
}
First blog post
9 years ago
