project QadFinancials > class BBudget > method BudgetWBSCreate

Description

This method will create a single budgetWBS-record based on the input informationand return temp-tables that contain the newly created records.


Parameters


icBudgetTcRowidinputcharacterBudget; BudgetTcRowid
icBudgetWBSTcRowidinputcharacterBudgetWBSTcRowid; tc_rowid of the current node you are on
icNewBudgetWBSCodeinputcharacterBudgetWBSCode; Code of the new WBS-node
iiNewBudgetWBSLineNumberinputintegerNewBudgetWBSLineNumber
ilCreateChildinputlogicalCreateChild;
true if the new node should be a child of the current node
false if the new mode should be on the same level as the current one
icBudgetWBSFDSCodeinputcharacterBudgetWBSFDSCode; optional value for field tBudgetWBSFDSCode
icBudgetWBSFDSListinputcharacterBudgetWBSFDSList; optional value for field tBudgetWBSFDSList
tNewBudgetWBSoutputtemp-tableTemp-table containing the new BudgetWBS-records
tNewBudgetVersionFigureoutputtemp-tableTemp-table containing the new BudgetVersionFigure-records
tNewBudgetVersionGLFigoutputtemp-tableTemp-table containing the new BudgetVersionGLFig-records
icNewBudgetWBSTopicDescriptioninputcharacter
ilNewBudgetWBSIsPrintDescinputlogical
icNewBudgetGroupCodeinputcharacter
icNewAltCOAGroupCodeinputcharacter
icNewBudgetWBSFDSLinkinputcharacter
icNewBudgetWBSCategoryinputcharacter
oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBudget.BudgetWBSCreateMultipleSub


program code (program6/bbudget.p)

/* ==================================================================================================== */
    /* Replace unknown values // Check existance of the tBudget record and the tBudgetWBS rec (conditional) */
    /* Validation; when starting from the root-node it is not possible to create a node on the same level   */
    /* ==================================================================================================== */
    if icBudgetWBSTcRowid = ?
    then assign icBudgetWBSTcRowid = "":U.
    if icNewBudgetWBSCode = ? or icNewBudgetWBSCode = "":U
    then assign icNewBudgetWBSCode = trim(#T-29'New topic':15(579)t-29#).    
    if icBudgetTcRowid = "":U or icBudgetTcRowid = ?
    then do :
        assign oiReturnStatus = -3
               vcMessage      = trim(#T-30'You must enter the budget identification (row ID) for the creation of budget topics.':255(535)T-30#).
        <M-4 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-456':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
        Return.
    end. /* if icBudgetTcRowid  = ? or */
    else do :
        find tBudget where 
             tBudget.tc_Rowid = icBudgetTcRowid 
             no-lock no-error.
        if not available tBudget
        then do :
            assign oiReturnStatus = -3
                   vcMessage      = trim(substitute(#T-31'Cannot find the budget based on its row ID (&1).':255(448)t-31#,string(icBudgetTcRowid))).
            <M-5 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-457':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            Return.
        end. /* if not available tBudget */
    end. /* not if iiBudgetID = 0 or */
    if icBudgetWBSTcRowid  = "":U and 
       ilCreateChild      <> true
    then do :
        assign oiReturnStatus = -3
               vcMessage      = trim(#T-32'You cannot create a budget WBS topic on the same level as the ROOT node.':255(580)t-32#).
        <M-19 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-479':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
        Return.
    end. /* if icBudgetWBSTcRowid = 0 or icBudgetWBSTcRowid = ? */
    if icBudgetWBSTcRowid <> "":U 
    then do :
        find tBudgetWBS where 
             tBudgetWBS.tc_ParentRowid  = tBudget.tc_Rowid     and 
             tBudgetWBS.tc_Rowid        = icBudgetWBSTcRowid and 
             tBudgetWBS.tc_Status      <> "D":U
             no-lock no-error.
        if not available tBudgetWBS
        then do :
            assign oiReturnStatus = -3
                   vcMessage      = trim(substitute(#T-33'Cannot find the current budget WBS topic based on its row ID &1.':255(450)t-33#,string(icBudgetWBSTcRowid))).
            <M-7 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-458':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            Return.
        end. /* if not available tBudgetWBS */
    end. /* if icBudgetWBSTcRowid <> "":U */
    
    /* ==================================================== */
    /* No action allowed if the budget is not yet validated */
    /* ==================================================== */
    if tBudget.BudgetStatus = {&BUDGETSTATUS-INITIAL}
    then do :
        assign oiReturnStatus = -3
               vcMessage      = trim(#T-34'You must validate the budget structure before maintaining the WBS.':255(451)t-34#).
        <M-22 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-494':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
        Return.
    end. /* if tBudget.BudgetStatus = {&BUDGETSTATUS-INITIAL} */
    
    /* ======================================================================================================== */
    /* To easy the following of this method-code we make sure that viParentBudgetWBSID and viParentBudgetWBSSeq */
    /* always points to the node wherefor we want to create a child (as if ilCreateChildOfCurrentWBSID = true)  */
    /* When both these data-items contain a value the tBudgetWBS should also point to the parent of the new one */
    /* ======================================================================================================== */
    if ilCreateChild = false
    then do :
        /* Get the WBSrecord based on the input */
        find bBudgetWBS where 
             bBudgetWBS.tc_ParentRowid  = tBudget.tc_Rowid   and 
             bBudgetWBS.tc_Rowid        = icBudgetWBSTcRowid and 
             bBudgetWBS.tc_Status      <> "D":U
             no-lock no-error. /* no error-check needed; already done before this */
        /* Get the parent of the WBSrecord based on the previous found WBSrecord */
        find tBudgetWBS where 
             tBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid              and 
             tBudgetWBS.BudgetWBS_ID   = bBudgetWBS.ParentBudgetWBS_ID and 
             tBudgetWBS.tc_Status     <> "D":U
             no-lock no-error.
    end. /* if ilCreateChild = false */
    else find tBudgetWBS where 
              tBudgetWBS.tc_ParentRowid  = tBudget.tc_Rowid   and 
              tBudgetWBS.tc_Rowid        = icBudgetWBSTcRowid and 
              tBudgetWBS.tc_Status      <> "D":U
              no-lock no-error.
    if available tBudgetWBS
    then assign viParentBudgetWBSID  = tBudgetWBS.BudgetWBS_ID
                vdParentBudgetWBSSeq = tBudgetWBS.BudgetWBSSeq.
    else assign viParentBudgetWBSID  = 0
                vdParentBudgetWBSSeq = 0.
    
    /* =================================================== */
    /* Find out the FDS information for the new WBS-record */
    /* =================================================== */
    if available tBudgetWBS /* tBudgetWBS points to the parent of the new node */
    then do :
        find tBudgetFDS where                                
             tBudgetFDS.tc_ParentRowid  = tBudget.tc_Rowid            and 
             tBudgetFDS.BudgetFDSSeq    = tBudgetWBS.BudgetFDSSeq + 1 and
             tBudgetFDS.tc_Status      <> "D":U
             no-error.
        if not available tBudgetFDS
        then do :
            assign oiReturnStatus = -3
                   vcMessage      = trim(substitute(#T-35'The system cannot create a child node for the current budget WBS topic because it is unable to find level &1 of the budget COA.':255(581)t-35#,string(tBudgetWBS.BudgetFDSSeq + 1))).
            <M-21 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-481':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            Return.
        end. /* if not available tBudgetFDS */
        assign viNewRecordFDSID   = tBudgetFDS.BudgetFDS_ID
               vcNewRecordFDSType = tBudgetFDS.BudgetFDSType
               viNewRecordFDSSeq  = tBudgetFDS.BudgetFDSSeq.
    end. /* if ilCreateChildOfCurrentWBSID = true */
    else do :
        find tBudgetFDS where                                
             tBudgetFDS.tc_ParentRowid  = tBudget.tc_Rowid and 
             tBudgetFDS.BudgetFDSSeq    = 1 and
             tBudgetFDS.tc_Status      <> "D":U
             no-error.
        if not available tBudgetFDS
        then do :
            assign oiReturnStatus = -3
                   vcMessage      = trim(#T-36'The system cannot create a root budget WBS topic because it cannot find the first level of the budget COA.':255(582)t-36#).
            <M-20 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-480':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            Return.
        end. /* if not available tBudgetFDS */
        assign viNewRecordFDSID   = tBudgetFDS.BudgetFDS_ID
               vcNewRecordFDSType = tBudgetFDS.BudgetFDSType
               viNewRecordFDSSeq  = tBudgetFDS.BudgetFDSSeq.
    end. /* not if available tBudgetWBS */
    
    /* ========================================================================== */
    /* Reset the output temp-table                                                */
    /* ========================================================================== */
    empty temp-table tNewBudgetWBS.
    empty temp-table tNewBudgetVersionFigure.
    empty temp-table tNewBudgetVersionGLFig.
    
    /* ====================================================================================== */
    /* Define the SafStructure and the SafConcept in case this is a SafType and it is not the */
    /* highest SafLevel. If so, then the SafStructure it taken from the highest level and the */
    /* concept is taken from the SafStructure level base on the level within the WBS-tree.    */
    /* ====================================================================================== */
    if vcNewRecordFDSType = {&BUDGETFDSTYPE-SAF}                 and /* new node is of type SAF */
       available(tBudgetWBS)                                     and /* a parent-node exists */
       (tBudgetWBS.BudgetFDSType = {&BUDGETFDSTYPE-SAF} or
        tBudgetWBS.BudgetFDSType = {&BUDGETFDSTYPE-TOTAL}) /* the parent-code is of type SAF/Total */ 
    then SAFSETTINGSBLOCK : DO :
        /* Get the highest SAF-parent; at the end bBudgetWBS contains the highest saf-level */
        assign viSAFCyclingBudgetWBSID    = tBudgetWBS.BudgetWBS_ID
               viSAFCyclingBudgetWBSSAFID = 0
               viSAFCyclingCounter        = 1.
        repeat :
            find first bBudgetWBS where 
                       bBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid        and
                       bBudgetWBS.BudgetWBS_ID   = viSAFCyclingBudgetWBSID and 
                       bBudgetWBS.tc_Status      <> "D":U                  and
                       (bBudgetWBS.BudgetFDSType  = {&BUDGETFDSTYPE-SAF} or   
                        bBudgetWBS.BudgetFDSType  = {&BUDGETFDSTYPE-TOTAL})
                       no-lock no-error.
            if available bBudgetWBS
            then do :
                assign viSAFCyclingBudgetWBSID = bBudgetWBS.ParentBudgetWBS_ID.
                if bBudgetWBS.BudgetFDSType = {&BUDGETFDSTYPE-SAF}
                then assign viSAFCyclingBudgetWBSSAFID = bBudgetWBS.BudgetWBS_ID
                            viSAFCyclingCounter        = viSAFCyclingCounter + 1.
            end. /* if available bBudgetWBS */
            else leave.
        end. /* repeat */  
        if viSAFCyclingBudgetWBSSAFID = 0
        then leave SAFSETTINGSBLOCK.
        find bBudgetWBS where 
             bBudgetWBS.tc_ParentRowid = tBudget.tc_Rowid           and
             bBudgetWBS.BudgetWBS_ID   = viSAFCyclingBudgetWBSSAFID and 
             bBudgetWBS.tc_Status      <> "D":U
             no-lock no-error.
        if not available bBudgetWBS       or
           bBudgetWBS.SafStructure_ID = 0 or 
           bBudgetWBS.SafStructure_ID = ?
        then leave SAFSETTINGSBLOCK.
        /* Get the safstructure of the tBudgetWBS record */
        <Q-12 run SafConceptCodeByLine (all) (Read) (NoCache)
          (input bBudgetWBS.SafStructure_ID, (SafStructure_ID)
           input viSAFCyclingCounter, (SafStructureLineNumber)
           input ?, (SafStructureCode)
           output dataset tqSafConceptCodeByLine) in BSafStructure >
        find first tqSafConceptCodeByLine
             no-lock no-error.
        if not available tqSafConceptCodeByLine
        then do :
            assign oiReturnStatus = -3
                   vcMessage      = trim(substitute(#T-37'Cannot define level &1 of the SAF structure &2.':255(583)t-37#,string(viSAFCyclingCounter),string(bBudgetWBS.SafStructure_ID))).
            <M-13 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-463':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            Return.
        end. /* if not av. tqSafConceptCodeByLine */
        assign viNewRecordSafStructureID   = bBudgetWBS.SafStructure_ID
               vcNewRecordSafStructureCode = bBudgetWBS.tcSafStructureCode
               viNewRecordSafConceptID     = tqSafConceptCodeByLine.tiSafConcept_ID
               vcNewRecordSafConceptCode   = tqSafConceptCodeByLine.tcSafConceptCode.
    end. /* if vcNewRecordFDSType = {&BUDGETFDSTYPE-SAF} */
    
    /* ================================================================================================ */
    /* Calculate the WBS sequence for new record:                                                       */
    /* - When parent = root-node then use a fixed jump                                                  */
    /* - Otherwise:  take the average of the highest child and the next WBS on the same or higher level */
    /* ================================================================================================ */
    <M-27 run BudgetWBSCreateGetSequence
       (input  icBudgetTcRowid (icBudgetTcRowid), 
        input  viParentBudgetWBSID (iiParentBudgetWBSID), 
        input  viNewRecordFDSSeq (iiNewRecordFDSSeq), 
        output vcNewRecordWBSSeq (ocNewRecordWBSSeq), 
        output viFcReturnSuper (oiReturnStatus)) in BBudget>    
    if viFcReturnSuper <> 0 
    then do :
        assign oiReturnStatus = viFcReturnSuper
               vcMessage      = trim(#T-38'An internal error has occurred while calculating the sequence of the new node.':255(584)T-38#) + chr(10) + 
                                trim(substitute(#T-39'Parent node ID: &1.':255(585)T-39#,string(viParentBudgetWBSID))) + chr(10) +  
                                trim(substitute(#T-40'The COA sequence of the new node is &1.':255(586)t-40#,string(viNewRecordFDSSeq))) + chr(10) +  
                                trim(substitute(#T-41'Return Status: &1.':255(587)T-41#,string(oiReturnStatus))).
        <M-28 run SetMessage (input  vcMessage (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-1923':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
        Return.
    end. /* if viFcReturnSuper <> 0 */
    
    /* =========================================================== */
    /* Create the new WBS-record and a corresponding output record */
    /* =========================================================== */
    <M-11 run AddDetailLine
       (input  'BudgetWBS':U (icTable), 
        input  tBudget.tc_Rowid (icParentRowid), 
        output viFcReturnSuper (oiReturnStatus)) in BBudget>
    if viFcReturnSuper < 0 
    then do :
        assign oiReturnStatus = viFcReturnSuper.
        return.
    end. /* if viFcReturnSuper < 0  */
    assign tBudgetWBS.BudgetFDS_ID       = viNewRecordFDSID
           tBudgetWBS.BudgetFDSType      = vcNewRecordFDSType    
           tBudgetWBS.BudgetFDSSeq       = viNewRecordFDSSeq
           tBudgetWBS.SafStructure_ID    = viNewRecordSafStructureID
           tBudgetWBS.SafConcept_ID      = viNewRecordSafConceptID
           tBudgetWBS.tcSafStructureCode = vcNewRecordSafStructureCode
           tBudgetWBS.tcSafConceptCode   = vcNewRecordSafConceptCode
           tBudgetWBS.BudgetWBSCode      = icNewBudgetWBSCode
           tBudgetWBS.BudgetWBSLineNumber= iiNewBudgetWBSLineNumber
           tBudgetWBS.BudgetWBSTopicDescription = icNewBudgetWBSTopicDescription
           tBudgetWBS.BudgetWBSIsPrintDesc      = ilNewBudgetWBSIsPrintDesc
           tBudgetWBS.tcBudgetGroupCode         = icNewBudgetGroupCode
           tBudgetWBS.tcAltCOAGroupCode         = icNewAltCOAGroupCode
           tBudgetWBS.BudgetWBSFDSLink          = icNewBudgetWBSFDSLink.
           if icNewBudgetWBSCategory = "" or icNewBudgetWBSCategory = ?
           then assign tBudgetWBS.BudgetWBSCategory = {&BUDGETWBSCATEGORY-ASSET}. 
           else if icNewBudgetWBSCategory = {&BUDGETWBSCATEGORY-INCOME-TR}
                then assign tBudgetWBS.BudgetWBSCategory ={&BUDGETWBSCATEGORY-INCOME}.
                else if icNewBudgetWBSCategory = {&BUDGETWBSCATEGORY-EXPENSE-TR}
                     then assign tBudgetWBS.BudgetWBSCategory = {&BUDGETWBSCATEGORY-EXPENSE}.
                     else if icNewBudgetWBSCategory = {&BUDGETWBSCATEGORY-LIABILITY-TR}
                          then tBudgetWBS.BudgetWBSCategory = {&BUDGETWBSCATEGORY-LIABILITY}.
           
           /* tBudgetWBS.BudgetWBSSeq       = vdNewRecordWBSSeq */
    assign tBudgetWBS.BudgetWBSFDSList   = icBudgetWBSFDSList
           tBudgetWBS.BudgetWBSFDSCode   = icBudgetWBSFDSCode
           tBudgetWBS.ParentBudgetWBS_ID = viParentBudgetWBSID
           tBudgetWBS.tcBudgetWBSSeqStr  = vcNewRecordWBSSeq.

    assign vcBudgetWBSFDSCodeFrom = "":U
           vcBudgetWBSFDSCodeTo   = "":U
           vcBudgetWBSFDSCode     = "":U
           vcBudgetWBSFDSList     = "":U.
    <M-2 run InterpretFDSLink
       (input  icNewBudgetWBSFDSLink (icBudgetFDSLink), 
        output vcBudgetWBSFDSCodeFrom (ocBudgetWBSFDSCodeFrom), 
        output vcBudgetWBSFDSCodeTo (ocBudgetWBSFDSCodeTo), 
        output vcBudgetWBSFDSCode (ocBudgetWBSFDSCode), 
        output vcBudgetWBSFDSList (ocBudgetWBSFDSList), 
        output viFcReturnSuper (oiReturnStatus)) in BBudget>
    assign tBudgetWBS.BudgetWBSFDSFromCode = vcBudgetWBSFDSCodeFrom
           tBudgetWBS.BudgetWBSFDSToCode   = vcBudgetWBSFDSCodeTo
           tBudgetWBS.BudgetWBSFDSCode     = vcBudgetWBSFDSCode
           tBudgetWBS.BudgetWBSFDSList     = vcBudgetWBSFDSList.

    create tNewBudgetWBS.
    buffer-copy tBudgetWBS except BudgetWBSSeq to tNewBudgetWBS.
    
    /* ============================================================= */
    /* Create new VersionFigure-records for the new budgetWBS record */
    /* DO the same for the corresponding output records              */
    /* ============================================================= */
    for each tBudgetVersion where 
             tBudgetVersion.tc_ParentRowid  = tBudget.tc_Rowid and 
             tBudgetVersion.tc_Status      <> "D":U
             no-lock :
        if (tBudget.tcProjectCode <> "":U and tBudget.tcProjectCode <> ?) or
           (tBudget.tcCostCentreCode <> "":U and tBudget.tcCostCentreCode <> ?)
        then do :
            <M-25 run AddDetailLine (input  'BudgetVersionFigure':U (icTable), 
                     input  tBudgetVersion.tc_Rowid (icParentRowid), 
                     output viFcReturnSuper (oiReturnStatus)) in BBudget>
            if viFcReturnSuper < 0 
            then do :
                assign oiReturnStatus = viFcReturnSuper.
                return.
            end. /* if viFcReturnSuper < 0  */
            assign tBudgetVersionFig.BudgetWBS_ID         = tBudgetWBS.BudgetWBS_ID
                   tBudgetVersionFig.tiBudgetFDSSeq       = tBudgetWBS.BudgetFDSSeq
                   tBudgetVersionFig.tcBudgetFDSType      = tBudgetWBS.BudgetFDSType
                   tBudgetVersionFig.tcBudgetWBSCode      = tBudgetWBS.BudgetWBSCode
                   tBudgetVersionFig.tcBudgetWBSSeq       = tBudgetWBS.tcBudgetWBSSeqStr
                   tBudgetVersionFig.tiParentBudgetWBS_ID = tBudgetWBS.ParentBudgetWBS_ID.
            create tNewBudgetVersionFigure.
            buffer-copy tBudgetVersionFig to tNewBudgetVersionFigure.
        end. /* Project or CC budget */
        else do :
            <M-26 run AddDetailLine (input  'BudgetVersionGLFig':U (icTable), 
                         input  tBudgetVersion.tc_Rowid (icParentRowid), 
                         output viFcReturnSuper (oiReturnStatus)) in BBudget>
            if viFcReturnSuper < 0 
            then do :
                assign oiReturnStatus = viFcReturnSuper.
                return.
            end. /* if viFcReturnSuper < 0  */
            assign tBudgetVersionGLFig.BudgetWBS_ID         = tBudgetWBS.BudgetWBS_ID
                   tBudgetVersionGLFig.tiBudgetFDSSeq       = tBudgetWBS.BudgetFDSSeq
                   tBudgetVersionGLFig.tcBudgetFDSType      = tBudgetWBS.BudgetFDSType
                   tBudgetVersionGLFig.tcBudgetWBSCode      = tBudgetWBS.BudgetWBSCode
                   tBudgetVersionGLFig.tiBudgetWBSLineNumber= tBudgetWBS.BudgetWBSLineNumber
                   tBudgetVersionGLFig.tcBudgetWBSTopicDescription = tBudgetWBS.BudgetWBSTopicDescription
                   tBudgetVersionGLFig.tlBudgetWBSIsPrintDesc      = tBudgetWBS.BudgetWBSIsPrintDesc
                   tBudgetVersionGLFig.tcBudgetGroupCode           = tBudgetWBS.tcBudgetGroupCode
                   tBudgetVersionGLFig.tcAltCOAGroupCode           = tBudgetWBS.tcAltCOAGroupCode
                   tBudgetVersionGLFig.tcBudgetWBSFDSLink          = tBudgetWBS.BudgetWBSFDSLink
                   tBudgetVersionGLFig.tcBudgetWBSCategory         = if tBudgetWBS.BudgetWBSCategory = "" or tBudgetWBS.BudgetWBSCategory = ?
                                                                     then {&BUDGETWBSCATEGORY-ASSET}
                                                                     else tBudgetWBS.BudgetWBSCategory
                   tBudgetVersionGLFig.tcBudgetWBSSeq       = tBudgetWBS.tcBudgetWBSSeqStr
                   tBudgetVersionGLFig.tiParentBudgetWBS_ID = tBudgetWBS.ParentBudgetWBS_ID.
            create tNewBudgetVersionGLFig.
            buffer-copy tBudgetVersionGLFig to tNewBudgetVersionGLFig.
        end. /* not Project or CC budget */
    end. /* for each */