project QadFinancials > class BBankStateImport > method AdditionalUpdatesSwiftStart


Parameters


oiReturnStatusoutputintegerReturn status of the method.


Internal usage


QadFinancials
method BBankStateImport.AdditionalUpdates


program code (program6/bbankstateimport.p)

assign oiReturnStatus = -98.

ASSIGN viCnt                       = 0
       vdtotal                     = 0
       vdtotalcredits              = 0
       vdtotaldebits               = 0
       vdtotalMvmtsPerBalance      = 0
       viLineCount                 = 0
       vlSwift                     = false
       vlIsPrevLine86              = false
       viPrevLine86Id              = 0. 
       
for each tBankStateImportFileContent:
    if left-trim(tBankStateImportFileContent.tcBankStateFileContentLine, '~'':U) begins "940":U
    then do:
        assign vlSwift = true.
        leave.
    end.
end.

if not vlSwift
then do:
    assign oiReturnStatus = -1
           vcmsgReturn    = trim(#T-40'The file you specified is not a SWIFT-MT940 structured file.':255(17911)T-40#).
    
    <M-39 run SetMessage (input  vcMsgReturn (icMessage),
                 input  '':U (icArguments),
                 input  '':U (icFieldName),
                 input  '':U (icFieldValue),
                 input  'E':U (icType),
                 input  3 (iiSeverity),
                 input  '':U (icRowid),
                 input  'QADFIN-4507':U (icFcMsgNumber),
                 input  '' (icFcExplanation),
                 input  '' (icFcIdentification),
                 input  '' (icFcContext),
                 output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>        
end.

swiftfile:
for each tBankStateImportFileContent :

    assign viLineCount     = viLineCount + 1
           viCnt           = viLineCount 
           vcDocLine       = left-trim( tBankStateImportFileContent.tcBankStateFileContentLine,'~'':U).

    
           vcMsgLine       = substitute(#T-25'LINE &1':11(12276)T-25#, string(viLineCount)). 
           
    IF  (NUM-ENTRIES(vcDocLine,":":U) < 3 and not vlIsPrevLine86)
    OR vcDocLine = "":U
    THEN DO:            
        NEXT swiftfile.
    END.

    CASE entry(2,vcDocLine,":":U):
        
        /* HEADER */
        when "940":U 
        then do:
            assign vlIsPrevLine86 = false
                    viPrevLine86Id = 0.
        end. /* when "940":U*/
      
        /* Betaling Referentienummer */
        when "20":U 
        then do:    
            assign vlIsPrevLine86 = false
                   viPrevLine86Id = 0.
        END.
        
        /* rekeningnummer */
        when "25":U 
        then do:
            
             assign vlIsPrevLine86 = false
                    viPrevLine86Id = 0            
                    vcdummy     = trim(substring(vcDocLine,5,35,"CHARACTER":U))
                    viSequence  = 0
                    vcBankAccountInFile = vcdummy.

             if length(vcdummy,"CHARACTER":U) > 3
             then do:                 
                 assign viDummy = integer(substring(vcdummy,length(vcdummy,"CHARACTER":U) - 2, 3, "CHARACTER":U)) no-error.
                 if error-status:error
                 then assign vcDummy = substring(vcDummy,1,length(vcdummy,"CHARACTER":U) - 3,"CHARACTER":U).
             end.
             
             if vcBankAccountInFile <> '':U
             then do :                                          
                 /* Get the BankNumber */ 
                 <Q-19 run BanknumberByBankNumberCurrency (all) (Read) (NoCache)
                    (input viCompanyId, (CompanyId)
                     input vcBankAccountInFile, (Banknumber)
                     input true, (BankNumberIsActive)
                     input {&BANKNUMBERPARENTTYPE-GL}, (BankNumberParentType)
                     input '':U, (CurrencyCode)
                     input ?, (CurrencyID)
                     output dataset tqBanknumberByBankNumberCurrency) in BBankNumber >
                
                find first tqBanknumberByBankNumberCurrency no-error.
                                     
            end.
            
            
            if vcBankAccountInFile = '':U or not available tqBanknumberByBankNumberCurrency
            then do:
                assign oiReturnStatus  = -1
                       vcmsgReturn     = substitute(trim(#T-41'The bank account number $1 cannot be found.':100(56418)t-41#),vcmsgLine,vcBankAccountInFile).

                <M-20 run SetMessage
                   (input  vcMsgReturn (icMessage), 
                    input  '':U (icArguments), 
                    input  'vcBankAccountInFile':U (icFieldName), 
                    input  vcBankAccountInFile (icFieldValue), 
                    input  'E':U (icType), 
                    input  3 (iiSeverity), 
                    input  '':U (icRowid), 
                    input  'QADFIN-3000':U (icFcMsgNumber), 
                    input  '':U (icFcExplanation), 
                    input  '':U (icFcIdentification), 
                    input  '':U (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
            end.
            else do:

                <Q-21 run GLById (all) (Read) (NoCache)
          (input viCompanyId, (CompanyId)
           input tqBanknumberByBankNumberCurrency.tiParentObject_ID, (GLId)
           output dataset tqGLById) in BGL >
                  
                find first tqGLById no-lock no-error.
                if not available tqGLById then do:
                    assign oiReturnStatus  = -1
                           vcmsgReturn     = substitute(trim(#T-29'&1 position 6: No GL account corresponding to the bank account &2 exists.':255(12284)t-29#), vcmsgLine , "":U).                      

               <M-22 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-3001':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
                end.
                else assign vcGLCode = tqGLById.tcGLCode
                            viGLID   = tqGLById.tiGL_ID.  
            end.
            
            /* Get the Currency Field */
            <Q-23 run GLByGLIdMatchedCode (all) (Read) (NoCache)
               (input viCompanyId, (CompanyId)
                input ?, (GLId)
                input vcGLCode, (GLCode)
                output dataset tqGLByGLIdMatchedCode) in BGL >

            
            find first tqGLByGLIdMatchedCode no-lock no-error.

            if available tqGLByGLIdMatchedCode and not tqGLByGLIdMatchedCode.tlGLIsLocalCurrency
            THEN assign vcGLCurrencyCode = tqGLByGLIdMatchedCode.tcCurrencyCode
                        viGLCurrencyId   = tqGLByGLIdMatchedCode.tiCurrency_ID.
            else assign vcGLCurrencyCode =  vcCompanyLC
                        viGLCurrencyId   =  viCompanyLCId.
           
           /*MESSAGE BankAccountInFile  VIEW-AS ALERT-BOX INFO BUTTONS OK.*/
        end. /* when "25":U*/

        /* dagafschriftnummer / volgnummer */
        when "28":U or WHEN "28C":U  
        then do:
            assign vlIsPrevLine86 = false
                   viPrevLine86Id = 0
                   vcDocLine = LEFT-TRIM(vcDocLine,":":U + entry(2,vcDocLine,":":U) + ":":U).    
            if num-entries(vcDocLine,"/":U) = 2
            then assign viBankStateNumber     = int(entry(1,vcDocLine,"/":U)) 
                        viBankstatelineNumber = int(entry(2,vcDocLine,"/":U)) NO-ERROR.
            else do:
                 assign viBankStateNumber     = int(vcDocLine)
                        viSequence            = viSequence + 1
                        viBankstatelineNumber = viSequence NO-ERROR.                        
            end.
                


        end. /* when "28":U*/

        /* boekhoudkunding saldo oud */
        when "60F":U or when "60M":U 
        then do:
            /* *******************************************************************/
            /* OPENING BALANCE                                                   */
            /* *******************************************************************/
            assign vlIsPrevLine86 = false
                   viPrevLine86Id = 0.
            /* check corresponding closage of the balance, cannot open without  */          
            if vlbalanceOpen
            then do:
                assign 
                oiReturnStatus  = -1
                vcmsgReturn     =  substitute(trim(#T-30'&1: The previous opening balance has no corresponding closing balance.':255(12282)T-30#),vcmsgLine).
                                
               <M-13 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-2995':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
                LEAVE swiftfile.                 
            end.
            else assign vlbalanceOpen = yes.
            
            /* Sign of the openingsbalance */
            

            assign vcSign            = (IF SUBSTRING(vcDocLine, 6,1,"CHARACTER":U) = 'D':U then '-':U else '+':U)
                   vdopeningBalance  = dec(VCsIGN + replace(SUBSTRING(vcDocLine, 16,length(vcDocLine,"CHARACTER":U),"CHARACTER":U),",":U,".":U))
                   vcCurrencyCode    = SUBSTRING(vcDocLine, 13,3,"CHARACTER":U)
                   viTempBankStateID = viLineCount.

            
            create tApiBankStateBSI.
            assign tApiBankStateBSI.Company_ID                 = viCompanyId
                   tApiBankStateBSI.BankState_ID               = viLineCount
                   tApiBankStateBSI.BankStateNumber            = string(viBankStateNumber)
                   tApiBankStateBSI.BankStateStatus            = {&BANKSTATESTATUS-UNALLOC}
                   tApiBankStateBSI.BankStateTransactionType   = {&BANKSTATETRANSTYPE-BANK}
                   tApiBankStateBSI.BankStateOpeningBalance    = vdopeningBalance                    
                   tApiBankStateBSI.tc_Rowid                   = string(viCnt)
                   vdtotal                                     = vdtotal + 1.

        end. /* when "60F":U*/
    
        /* *******************************************************************/
        /* Detail Lines                                                      */
        /* *******************************************************************/   
        /* transactie */       
        when "61":U 
        then do:
            
            assign vlIsPrevLine86 = false
                   viPrevLine86Id = 0.
            
            if not available tApiBankStateBSI
            then do :
                assign oiReturnStatus  = -1
                       vcmsgReturn     = substitute(#T-47'&1: This line of type &2 contains information about the header but the header is created in lines with type &3 or &4 and this has to proceed the current line.':255(69599)T-47#,vcmsgLine,"61":U,"60F":U,"60M":U).
                <M-46 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QadFin-8184':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
                next.
            end. /* if not available tApiBankStateBSI */
            
            
            /* Format: 6!n[4!n]2a[1!a]15d1!a3!c16x[//16x] */
            assign viCnt     = viCnt + 1
                   vcDocLine = LEFT-TRIM(vcDocLine,":61:":U).

            if index("RDC":U,substring(vcDocLine,7,1,"CHARACTER":U)) > 0
            then assign viInLineCounter = 7.   /* Only Value date, No Entry Date specified */
            else assign viInLineCounter = 11.  /* Both Value date and Entry Date specified */
            
            /* Debit Credit Mark */
            if SUBSTRING(vcDocLine, viInLineCounter,1,"CHARACTER":U) = "D":U 
            or SUBSTRING(vcDocLine, viInLineCounter,2,"CHARACTER":U) = "RD":U 
            then do:
                assign vcSign = '-':U
                       vlRCRD = SUBSTRING(vcDocLine, viInLineCounter,2,"CHARACTER":U) = "RD":U.
            end.
            else
            if SUBSTRING(vcDocLine, viInLineCounter,1,"CHARACTER":U) = "C":U 
            or SUBSTRING(vcDocLine, viInLineCounter,2,"CHARACTER":U) = "RC":U 
            then do: 
                assign vcSign = '+':U
                       vlRCRD = SUBSTRING(vcDocLine, viInLineCounter,2,"CHARACTER":U) = "RC":U.
            end.
            
            assign viInLineCounter = (if vlRCRD then viInLineCounter + 2 else viInLineCounter + 1).
            
            /* Fund code */                   
            if SUBSTRING(vcDocLine, viInLineCounter,1,"CHARACTER":U) >= 'a':U and
               SUBSTRING(vcDocLine, viInLineCounter,1,"CHARACTER":U) <= 'z':U
            then assign viInLineCounter = viInLineCounter + 1.
            
            /* Amount */
            assign vcAmountInFile  = SUBSTRING(vcDocLine, viInLineCounter,15,"CHARACTER":U)
                   vcAmount        = "":U
                   viLength        = length(vcAmountInFile,"CHARACTER":U). 
            
            getAmmount: 
            do viCounter = 1 to viLength : 
                if index("1234567890.,":U,substring(vcAmountInFile,viCounter,1,"CHARACTER":U)) > 0
                then assign vcAmount = vcAmount + substring(vcAmountInFile,viCounter,1,"CHARACTER":U).
                else leave getAmmount.
                ASSIGN viInLineCounter = viInLineCounter + 1.
            end.            
            ASSIGN vcamount = REPLACE(vcamount,",":U,".":U) .           

            CASE vcSign :
                WHEN  "-":U 
                THEN DO:
                    assign vdtotaldebits   = vdtotaldebits  + dec(vcAmount).                    
                END.
                WHEN  "+":U 
                THEN DO:
                    assign vdtotalcredits  = vdtotalcredits + dec(vcAmount).                   
                END.
            END CASE.

            assign vdTotal                = vdTotal + dec(vcSign + vcAmount)
                   vdtotalMvmtsPerBalance = vdtotalMvmtsPerBalance + dec(vcSign + vcAmount). 

            /* Transaction Type Identification Code */                          
            assign viInLineCounter   = viInLineCounter + 4  .
            
            /* Reference fot the Account Owner */                   
            assign vcBankNumberExt   = TRIM(SUBSTRING(vcDocLine, viInLineCounter,16,"CHARACTER":U))
                   viInLineCounter   = viInLineCounter + 16.
            
            

            create tApiBankStateLineBSI.
            assign tApiBankStateLineBSI.tc_Rowid                   = string(viCnt + 1000000)
                   tApiBankStateLineBSI.tc_ParentRowid             = tApiBankStateBSI.tc_Rowid
                   tApiBankStateLineBSI.Company_ID                 = viCompanyId
                   tApiBankStateLineBSI.BankStateLine_ID           = viCnt + 1000000
                   tApiBankStateLineBSI.BankState_ID               = viTempBankStateID                                      
                   tApiBankStateLineBSI.BankStateLineAmountTC      = dec(VCsIGN  + vcAmount)
                   tApiBankStateLineBSI.BankStateLineExtOriginalTC = dec(VCsIGN  + vcAmount)
                   tApiBankStateLineBSI.BankStateLineDescription   = trim(SUBSTRING(vcDocLine, viInLineCounter,49,"CHARACTER":U))
                   tApiBankStateLineBSI.BankStateLineNumber        = viBankstatelineNumber
                   viBankstatelineNumber                           = viBankstatelineNumber + 1 
                   tApiBankStateLineBSI.BankStateLineExtBankNumber = vcBankNumberExt
                   tApiBankStateLineBSI.BankStateLineExtName       = trim(SUBSTRING(vcDocLine, viInLineCounter,49,"CHARACTER":U))

                   tApiBankStateLineBSI.BankStateLineExtCostCode   = vcCostCode
                   tApiBankStateLineBSI.BankStateLineStatus        = {&BANKSTATELINESTATUS-UNALLOC}                         
                   tApiBankStateLineBSI.BankStateLineInOut         = vcSign 
                   
                   tApiBankStateLineBSI.BankStateLineValueDate     = date(SUBSTRING(vcDocLine, 3,4,"CHARACTER":U) + SUBSTRING(vcDocLine, 1,2,"CHARACTER":U))
                   tApiBankStateLineBSI.BankStateLinePostingDate   = vtPostingDate                                     
                   tApiBankStateBSI.Currency_ID                    = viGLCurrencyId   
                   tApiBankStateBSI.tcCurrencyCode                 = vcGLCurrencyCode 
                   tApiBankStateBSI.tcGLCode                       = vcGLCode
                   tApiBankStateBSI.GL_ID                          = viGLID.
                                 
        end. /* when "61":U*/
        
        /* *******************************************************************/
        /* INFORMATION RECORDS                                               */
        /* *******************************************************************/           
        /* Omschrijving */
        when "86":U then do:
            if not available tApiBankStateLineBSI
            then do :
                assign oiReturnStatus  = 1
                       vcmsgReturn     = substitute(#T-43'&1: This line of type &2 contains information about the lines but the lines are created in lines with type &3 and this has to proceed the current line.':255(69596)T-43#,vcmsgLine,"86":U,"61":U).
                <M-42 run SetMessage
                   (input  vcMsgReturn (icMessage), 
                    input  '':U (icArguments), 
                    input  '':U (icFieldName), 
                    input  '':U (icFieldValue), 
                    input  'W':U (icType), 
                    input  3 (iiSeverity), 
                    input  '':U (icRowid), 
                    input  'QadFin-8182':U (icFcMsgNumber), 
                    input  '' (icFcExplanation), 
                    input  '' (icFcIdentification), 
                    input  '' (icFcContext), 
                    output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
            end. /* if not available tApiBankStateLineBSI */
            else do :
                IF LENGTH(tApiBankStateLineBSI.BankStateLineDescription,"CHARACTER":U) < 128 
                THEN assign tApiBankStateLineBSI.BankStateLineDescription  =  tApiBankStateLineBSI.BankStateLineDescription + " ":U + trim(SUBSTRING(vcDocLine, 5,65,"CHARACTER":U)).
                assign tApiBankStateLineBSI.BankStateLineDescription = substring(tApiBankStateLineBSI.BankStateLineDescription,1,40,"CHARACTER":U).
                assign tApiBankStateLineBSI.BankStateLineInformation = trim(entry(3,vcDocLine,":":U))
                       vlIsPrevLine86 = true
                       viPrevLine86Id = tApiBankStateLineBSI.BankStateLine_ID.
            end. /* if available tApiBankStateLineBSI */
        end. /* when "86":U*/
        /* *******************************************************************/
        /* CLOSING BALANCE                                                   */
        /* *******************************************************************/
        /* boekhoudkundig saldo nieuw */
           when "62F":U 
        OR when "62M":U then do: 
            
            assign vlIsPrevLine86 = false
                   viPrevLine86Id = 0.
                   
            if not available tApiBankStateBSI
            then do :
                assign oiReturnStatus  = -1
                       vcmsgReturn     = substitute(#T-45'&1: This line of type &2 or &3 contains information about the header but the header is created in lines with type &4 or &5 and this has to proceed the current line.':255(69598)T-45#,vcmsgLine,"62M":U,"62F":U,"60F":U,"60M":U).
                <M-44 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QadFin-8183':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
                next.
            end. /* if not available tApiBankStateBSI */
                       
            /* Sign of the closingbalance */   
            
            assign  vcSign = (IF SUBSTRING(vcDocLine, 6,1,"CHARACTER":U) = 'D':U then '-':U else '+':U).             
            ASSIGN  vdClosingBalance = dec(VCsIGN + replace(SUBSTRING(vcDocLine, 16,length(vcDocLine,"CHARACTER":U),"CHARACTER":U),",":U,".":U)).
            
            /* check if total of movements + opening balance = closing balance                       */             
            if vdopeningBalance + vdtotalMvmtsPerBalance <> vdClosingBalance  
            then do:
                assign oiReturnStatus  = -1
                       vcmsgReturn     = substitute(#T-24'&1 position 43: The closing balance &4 does not equal the opening balance &2 plus activity &3.':255(12342)t-24#,vcmsgLine, string(tApiBankStateBSI.BankStateOpeningBalance) , string(vdtotalMvmtsPerBalance), VCsIGN + SUBSTRING(vcDocLine, 16,15,"CHARACTER":U)).
       
                <M-17 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-2997':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
            end.
              
            ASSIGN  tApiBankStateBSI.BankStateMovement       = vdtotalMvmtsPerBalance
                    vdtotalMvmtsPerBalance                   = 0
                    vlbalanceOpen                            = NO
                    tApiBankStateBSI.BankStateClosingBalance =  vdClosingBalance.

            

            
            assign vtPostingDate                               = date(SUBSTRING(vcDocLine, 9,4,"CHARACTER":U) + SUBSTRING(vcDocLine, 7,2,"CHARACTER":U))
                   tApiBankStateBSI.BankStatePostingDate       = vtPostingDate.

             /* Get the Posting Year/Period/Date based on the input date */        
            <Q-33 run PeriodByStartEndDate (first) (Read) (NoCache)
          (input viCompanyId, (CompanyId)
           input vtPostingDate, (Date)
           output dataset tqPeriodByStartEndDate) in BPeriod >

            find first tqPeriodByStartEndDate no-lock no-error.
            if available tqPeriodByStartEndDate
            then assign viPeriodID     = tqPeriodByStartEndDate.tiPeriod_ID
                        viPeriodPeriod = tqPeriodByStartEndDate.tiPeriodPeriod
                        viPeriodYear   = tqPeriodByStartEndDate.tiPeriodYear
                        tApiBankStateBSI.BankStateYear = tqPeriodByStartEndDate.tiPeriodYear.
            else do:
                assign oiReturnStatus  = -1
                       viPeriodID      = ?
                       vcmsgReturn     = substitute(trim(#T-35'&1 - No matching GL period found for posting date &2.':255(12344)T-35#), vcmsgLine, vtPostingDate).

                <M-34 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-3485':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
            end.   

            /* Check Uniqueness */
            <Q-36 assign vlFcQueryRecordsAvailable = BankStateByYear (NoCache)
               (input viCompanyId, (CompanyId)
                input string(viBankStateNumber), (BankStateNumber)
                input tqGLByGLIdMatchedCode.tiGL_ID, (GLID)
                input year(vtPostingDate), (BankStateYear)) in BBankEntry >
            
            if vlFcQueryRecordsAvailable <> false
            then do:
                assign oiReturnStatus  = -1
                       vcmsgReturn     = substitute(trim(#T-38'The bank statement number &2 already exists.':255(14950)t-38#),string(viLineCount - 1), string(viBankStateNumber) + '/':U + string(year(vtPostingDate))  ).
                 <M-37 run SetMessage (input  vcMsgReturn (icMessage),
                     input  '':U (icArguments),
                     input  '':U (icFieldName),
                     input  '':U (icFieldValue),
                     input  'E':U (icType),
                     input  3 (iiSeverity),
                     input  '':U (icRowid),
                     input  'QADFIN-3535':U (icFcMsgNumber),
                     input  '' (icFcExplanation),
                     input  '' (icFcIdentification),
                     input  '' (icFcContext),
                     output viFcReturnSuper (oiReturnStatus)) in BBankStateImport>
                
            end.   
            
            assign tApiBankStateBSI.tiPeriodYear     = viPeriodYear
                   tApiBankStateBSI.BankStateYear    = viPeriodYear
                   tApiBankStateBSI.tiPeriodPeriod   = viPeriodPeriod
                   tApiBankStateBSI.Period_ID        = viPeriodID.
            assign tApiBankStateBSI.Currency_ID                    = viGLCurrencyId   
                   tApiBankStateBSI.tcCurrencyCode                 = vcGLCurrencyCode 
                   tApiBankStateBSI.tcGLCode                       = vcGLCode
                   tApiBankStateBSI.GL_ID                          = viGLID.
            for each tApiBankStateLineBSI where 
                tApiBankStateLineBSI.tc_ParentRowid = tApiBankStateBSI.tc_Rowid:
                assign tApiBankStateLineBSI.BankStateLinePostingDate   = vtPostingDate
                       tApiBankStateLineBSI.tiPeriodYear               = viPeriodYear
                       tApiBankStateLineBSI.tiPeriodPeriod             = viPeriodPeriod                
                       tApiBankStateLineBSI.Period_ID                  = viPeriodID
                      tApiBankStateBSI.BankStateYear                   = viPeriodYear.                                              
            end.

            
                    
        end. /* when "62F":U*/
        /* valutair saldo per boekdatum */
        when "64":U then do:
            assign vcSign = (IF SUBSTRING(vcDocLine, 5,1,"CHARACTER":U) = 'D':U then '-':U else '+':U) 
                   vlIsPrevLine86 = false
                   viPrevLine86Id = 0. 
            
        end. /* when "64":U*/

        /* voruitliggend valutair saldo */
        when "65":U then do:
            assign vcSign = (IF SUBSTRING(vcDocLine, 5,1,"CHARACTER":U) = 'D':U then '-':U else '+':U) 
                   vlIsPrevLine86 = false
                   viPrevLine86Id = 0.
            
        end. /* when "65":U*/
    END CASE.
    
    if vlIsPrevLine86 and SUBSTRING(vcDocLine, 1,4,"CHARACTER":U) <> ":86:":U then do:

        for first tApiBankStateLineBSI where tApiBankStateLineBSI.BankStateLine_ID = viPrevLine86Id:
            assign tApiBankStateLineBSI.BankStateLineInformation = tApiBankStateLineBSI.BankStateLineInformation + vcDocLine.
        end.

    end.
    
END.
if oiReturnStatus = -98 
then assign oiReturnStatus = 0.