7 Comments for this entry

  • Andy Wu

    Hi Denis,

    Nice inventory closing knowledge sharing. actually, I have encounted long time inventory re-calculation on X2009 SP1.

    You mean is to insert a call to appl.inventUpdateOnhandGlobal().inventUpdateOnhand().parmSkipInventSumLogTTS(true); after every ttsbegin in inventCostItemDim,inventCostClosingCancel_WorkInvent 2 classes, and then inventory rep-calculation will not update InventSumLogTTS table?

    Please give me the confirmation.

    Great thanks!

    Andy

    • denisfed

      Hello Andy

      Yes – you are totally right. You should place a call to the magic function after every ttsbegin in the classes, you mentioned and you won’t have any unnecessary logging from inventory closing and recalculation.

      Regards
      Denis

      • Andy Wu

        Hi Denis,

        I have added the magic function in Class:InventCostItemDim, but I can not fond any ttsbegin in Class:inventCostClosingCancel_WorkInvent. could you give me moew help? Thanks!

        Andy

        • denisfed

          Hello Andy
          Sorry for misleading you. In case of inventCostClosingCancel_WorkInvent, you should place the call to magic function just in the beginning of the method execute().

          A bit of background: ttsbegin/ttscommit statements are placed in the method of the superclass of our class inventCostClosingCancel.run(). This method starts transaction, calls methods init() and execute() and commits transaction. Since method init() does not do anything with inventory transactions, we can simply place the call to the beginning of the execute() method.

          Regards
          Denis

  • Ludovico

    Hi, excuse me if I resume this old post.. But I was wondering, on AX 2009, if you set the OccEnabled flag to YES in the InventSumLogTTS will not all the locks just go away?

    The worst thing that can happen if you do that is that you could encounter some sporadic update exception on the table, when two users edit the same record at the same time.

    Am I wrong?

    • denisfed

      Hello Ludovico
      OccEnabled only influence behavior of select forupdate statement. If you update or insert data, touched records remain locked till end of transaction. So if you are running inventory closing in parallel from several threads, table records will still be locked from time to time, because one of the threads inserted a bunch of changes inventSumLogTts records. Also, in many cases, inserts cause more locks than update would do, because if update operation does not change key fields, it lock just updated record; Insert operation always change some key fields and it causes the whole page to be locked (or even several pages if insert caused a page split).
      Besides, it is not only about locking. In case of average costing model, every inventory closing inserts huge number of records in inventSumLogTTS (say – about 15-20 times of number of inventory transactions closed). These insertions can take more time then update of costing records itself and, according to my experience, disabling this logging decreases closing time by about 50%.
      Regards
      Denis

  • Peter Friberg

    Hi Denis,

    Thanks for the tip, we have used it in an AXAPTA version 4, and it has helped a lot.

    We have used your tip both regarding Inventory closing and Master planning.

    We also modified the Inventory closing a bit for better performance, created an index on the InventSettlement table, and reduced inventory closing time from 15 hours to less than 1 hour.

    And now both Master planning and inventory closing runs without blocking anything 🙂

    Best regards,
    Peter

1 Trackback or Pingback for this entry

Leave a Reply