As Of Posted Code (IPCD) and G/L Date Update (DGL) in Cardex (F4111)

Purpose of Document

This document is to give brief explanation on how Cardex (F4111) gets inserted and updated. Through EnterpriseOne, as a word Ledger implies, only limited applications can update Cardex (Item Ledger). Additionally this document will explain PostedCodeInventory (IPCD, As Of Posted Code) or cAsOfPostedCode: This code designates the status of the posting of each particular transaction in the Inventory Ledger file.  And this document may answer when F4111.DGL (jdGLDate) is determined.

Through this document, user can understand better on which routine(s) insert/update Cardex (Item Ledger) File (F4111).

Table of Contents

Note that any change made against item quantity, cost or location/lot are recorded into Item Ledger (F4111) so in this document the term 'Inventory Transaction' is broadly used. For detail, refer to <Document 1276239.1> - E1: 41: Inventory Transaction MBF XT4111Z1 Clarification.

Inventory Transaction Master Business Function (XT4111Z1, Inventory Transactions) follows a typical transaction master business function flow except that this function is to be called other master business function which is made up of,

A typical routine to write/Insert Item Ledger

End Document MBF (Master Business Function) of calling routine (e.g., F4312EndDoc (XT4312Z1) in P4312 - Purchase Order Receipt)
   |--- F4111EndDocument (XT4111Z1, F4111 End Document)
          |--- InventoryCardexShell (B4100050, F4111 Format Item Ledger Record)
                |--- WriteCardexRecord (B4100040, F4111 Write Item Ledger)
                         |--- sql> Insert into F4111

Business functions which insert/update F4111:

The list of business function below can add or update F4111.

Related Functions Action Calling XT4111Z1 Calling B4100050 Calling B4100040 IPCD Others
B3100730 (UpdateRoutingForPOReceipts, F3112 Update Routings for PO Receipts)       Y ds4100040.cAsOfPostedCode = _J('X') Only writes an IM record for quantities issued to cardex (Does NOT currently write a record for scrapped quantities) for Outside Operation.
B3100770 (B3100770CompletionsEditDoc, W. O. Completions Edit Doc)   Y     dsXT4111Z1.cAsOfPostedCode = _J('S')  
B3102080 (Co_ByCompletionsEditLine, Co_By Completions Edit Line)   Y     lpdsXT4111Z1->cAsOfPostedCode = _J('S')  
B3102270 (F3111WOIssuesEditLine , F3111 WO Issues Edit Line)   Y     dsXT4111Z1.cAsOfPostedCode = _J('S')  
B3104260 (ItemLedgerDetailUpdateProcessing, Item Ledger Detail Update Processing) Update       If as-is ipcd = 'S' then set ' ' otherwise maintain the original value based on ICU, DGL, PID and KCO
Update F4111.IPCD only
This function updates the Item Ledger file (F4111) and the GL date in the F39120W (Advanced Stock Valuation)  table.

Refer detail here.
B4100040 (WriteCardexRecord, F4111 Write Item Ledger) Insert         Refer to typical inventory transaction above
B4100050 (InventoryCardexShell, F4111 Format Item Ledger Record)       Y   Inventory Cache is written through Edit Line routine and this function is calling WriteCardexRecords
B4100090 (LotMasterCardexShell, F4111 Format Item Ledger for Lot Master)       Y dsWriteCardex.cAsOfPostedCode = _J('X') Call WriteCardexRecord
This function can be called where program ID ends in 4108, 41081 and 41280 (e.g., P41280)
This record can be written as,
"Lot Status Change"
"Grade Change"
"Potency Change"
** Check routines which call  LotMasterCardexShell
B4100230 (LocationCardexShell, F4111 Format Item Ledger for Location Update)       Y dsWriteCardex.cAsOfPostedCode = lpDS->cPostingCode Call WriteCardexRecord
Call this to write "Location Add" for szTransactionExplanation
** Check routines which call LocationCardexShell
B4100850 (UpdateF4111ForAsOfGen, F4111 - Update For As-Of Gen) Update       dsF4111.ilipcd = lpDS->cPostedCodeInventory
Update DGL and IPCD
Refer to <Document 625402.1> - E1: 41: As Of Processing (P4111/ P41112/ R41760 / R41540/ R41542)
B4100870 (ClearF41112AndIPCDFromF4111, Clear F41112 And IPCD From F4111) Update       dsF4111.ilipcd = _J(' ') after deleting F41112
Update IPCD = ' ' where IPCD = 'Y' (Processed - R41542)
This is rollback of As Of Processing. Refer above document.
This function is available for 9.1
B4100910 (F4111CheckIntegrityWithF0911, F4111 Check Integrity With F0911)           Refer to <Document 1678098.1> - E1: 41: 9.1 Enhancement - Inventory to G/L Reconciliation Process (P41500/R41500/R41501)
B4100960 (F4111ToF0911Reconciliation, F4111 To F0911 Reconciliation)            
B4100961 (UpdateGPFInF0911, Update GPF In F0911)            
B4103110 (ConsignmentAdjCommit, Consignment Adjustment Commit)     Y   dsInvtry.cAsOfPostedCode   = lpdsCache->cAsOfPostedCode Call InventoryCardexShell
to write "Standard Cost Change" when there is cost variance for szTransactionExplanation or szExplanation.
B4200670 (UpdateF4111ForSalesUpdate, F4111 Update Cardex for Sales Update) Update       Update KCO*, DOC*, DCT*, ICU*, DGL*, DCTO, DOCO, KCOO, LNID, IPCD = 'Y', TERM*, UKID, TDAY*, USER*, PID*, CRDJ* Refer B4200670***
B4208020 (DoLineLevelInventorySales, Do Line Level Inventory Sales)           If F4211.SO02 = 1 (Commit took place during shipment confirmation) then call (UpdateF4111ForSalesUpdate,
Else,
 Call F4111EditLine to write Cardex (cAsOfPostedCode not assigned so it is set to ' ')
N3103060 (RevalueInventoryOnActualCostCalc, Revalue Inventory On Actual Cost Calculation) Update       Multiple functions
   |--- F3102FileServer (N3103030, F3102 File Server)
          |--- RevalueInventoryOnActualCostCalc
IPCD = "X"
TREF = "WO"
PID = "ER31114"
Update the parent scrap - IS from P31114

See <Document 855913.1> - E1: 31A: How the IPCD Code Works with Different Manufacturing Transactions
N4200790 (F42UI05EditLine, F42UI05 Edit Line)   Y     P4205 or equivalent
   |--- F42UI05EditLine
          |--- F4111EditLine (cAsOfPostedCode = 'S' in writing inventory cache
 
N4900540 (DeliverConfirmEditLine, Deliver Confirm Edit Line)   Y       Same with N4200790
N4900730 (DispositionLoadIntCallInvServer, Disposition Load Internal Call Inventory Server)   Y       Calling F4111EditLine without specifying cAsOfPostedCode
N54R0028 (UpdateStock, Update Stock from Work Order)   Y       Calling F4111EditLine without specifying cAsOfPostedCode
XT4111Z1 (F4111EditLine, F4111 Edit Line)     Y   Specify cAsOfPostedCode in calling F4111EditLine except for update Scrap Quantity (which sets AsOfPostedCost = X) Inventory Transaction Master Business Function. Generally this function gets called by other transactional master business function.
F4111EditLine: validate/defaults and cache for inventory transaction
F4111EndDoc: commits cache created through Edit Line

XXXXXEditLine
   |--- F4111EditLine

XXXXXEndDocument
   |--- F4111EndDocument
         |--- InventoryCardexShell
                  |--- WriteCardexRecord
                      |--- Insert F4111
XT4113Z1 (F4113FSEditLine, F4113 FS Edit Line)   Y        
XT4114Z1 (F4114EditLine, F4114 Edit Line)   Y        
XT4116Z1 (F4116FSEditLine, F4116 FS Edit Line)   Y        
XT4312Z2 (F4312EditLine, F43121 Edit Line)   Y     No assignment except outside operation (If F4311.LITM ends with *OP then set cAsOfPostedCode = 'X')  

    R31802A (Manufacturing Accounting Journal Entries

(For detail, refer to <Document 625975.1> - E1: 31A: R31802A Manufacturing Accounting Setup and Use )
   |--- WorkOrderProcessing (B3104170, Work Order Processing)
          |--- ItemLedgerDetailUpdateProcessing (B3104260, Item Ledger Detail Update Processing) which gets called when F0911FSEditLine (B0900049, F0911 Edit Line) does not contain any error (so GL Cache got created).

    B4200670 (UpdateF4111ForSalesUpdate, F4111 Update Cardex for Sales Update)

  • This function will only be called if inventory was updated in Shipment Confirmation (P4205) (i.e., F4211.SO02 = '1'). The F4111 record will be fetched with sales order number, sales order type, and sales order key company in the doc, dct, and kco fields and sales order line number to LNID.  If no record existed in the file bypass processing.  If there is a record and the As Of Posted is ither Y or S then clear the As Of Posted field and update the following fields : the GL Date, Batch Number.
  • F4111.IPCD = 'S' and F4211.SO02 = '1' during Ship Confirmation  (See <Document 1268884.1> - E1: 42: Fields SO01-SO20 in the Sales Order Detail file (P4210/P42101/R42565/F4211/F49211))
  • Set F4111.IPCD = ' ' in Sales Update
  •     R42800 (Sales Update)

       |--- UpdateInventoryAndSales (B4208020, Update Inventory And Sales)
                |--- DoLineLevelInventorySales (B4208020, Do Line Level Inventory Sales) this is wrapper function to handle inventory transaction during Sales Update
                        |--- UpdateF4111ForSalesUpdate (B4200670, F4111 Update Cardex for Sales Update) [When F4211.SO02 = '1', that is, F4111 has been written through Shipment Confirmation]
                        |--- F4111EditLine (XT4111Z1, F4111 Edit Line) [When F4111 was not written through Shipment Confirmation]

    (Note: this callstack applies only to 8.10 and above)

       : In case you follow general routine of sales order processing, 

    PostedCodeInventory (IPCD, As Of Posted Code)

    PostedCodeInventory (IPCD, As Of Posted Code) or cAsOfPostedCode: This code designates the status of the posting of each particular transaction in the Inventory Ledger file.  Valid codes are,

    Codes Description 01 Others
      Not posted to the As Of File  
    S Item Value Yet to be Impacted  The value of your inventory has yet to be impacted by the transaction.
    X Movement with no Value Change  The transaction was a movement of inventory only that had no effect on its value. 
    Y Posted to the As Of File  This transaction has been recorded in the 'As Of' generation file (F41112)

    Note:

    GL Date Update (F4111.DGL)

    Why lots of cardex (F4111) records do not have GL Date (F4111.DGL) which is foreign key for General Ledger (F0911)?

    Answer 1> For some transaction, creation of G/L and/or update of Cardex is performed through subsequent application (e.g, R31802A, R42800 etc.) General way to set G/L Date can be,

             : Note that any transaction which does not affect G/L should not have G/L date from Cardex.