Shared Top Border

Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Home arrow Sample Code arrow ABAP Reports arrow GL Account creation via file upload
GL Account creation via file upload PDF Print E-mail
User Rating: / 1
PoorBest 
Written by Anon.   
Tuesday, 06 March 2007
Program reads an excel spreadsheet file and, per record, creates a GL Account. REPORT ZFGLUPLD.
***********************************************************************
* Program reads an excel spreadsheet file and, per record, create
* a GL Account.
***********************************************************************
TABLES: T001,                              "Company code
        T077S,                             "Account groups
        TZUN,                              "Sort keys
        T004F,                             "Field status groups
        SKB1,                              "GL Account line
        SKA1.                              "GL Account header

DATA: BEGIN OF TAB OCCURS 2000,
        SAKNR LIKE SKA1-SAKNR,             "GL Account number
        XBILK LIKE SKA1-XBILK,             "Ind for B/S account
        GVTYP LIKE SKA1-GVTYP,             "Ind for P&L account
        KTOKS LIKE SKA1-KTOKS,             "Account group
*       xspeb like ska1-xspeb,             "Block indicator
        TXT20 LIKE SKAT-TXT20,             "Short text
        TXT50 LIKE SKAT-TXT50,             "Long text
        FSTAG LIKE SKB1-FSTAG,             "Field status group
        MITKZ LIKE SKB1-MITKZ,             "Recon.indicator
        MWSKZ LIKE SKB1-MWSKZ,             "Tax category
        WAERS LIKE SKB1-WAERS,             "Currency
        XINTB LIKE SKB1-XINTB,             "Aut.posted
        XKRES LIKE SKB1-XKRES,             "Line item display
        XOPVW LIKE SKB1-XOPVW,             "Open item managed
        ZUAWA LIKE SKB1-ZUAWA,             "Sort key
        FIPOS LIKE SKB1-FIPOS,             "Commitment item
        XMWNO LIKE SKB1-XMWNO,             "Tax not required
        XSALH LIKE SKB1-XSALH,             "Only managed in local bal.
        CODE  LIKE SKB1-BUKRS,             "Company code
        FDLEV LIKE SKB1-FDLEV,             "Planning level
        HBKID LIKE SKB1-HBKID,             "House bank
        HKTID LIKE SKB1-HKTID,             "Account ID
      END OF TAB.

DATA: BEGIN OF BDCTAB OCCURS 100.
        INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCTAB.

DATA: ERROR(1) TYPE C VALUE 'N',           "Error flag
      CNT(4)   TYPE N,                     "Counter
      VAR_NAC(10) TYPE N,                  "Account to numeric format
      VAR(2)   TYPE N,                     "Length variable
      FLAG(1) TYPE C,
      NUM(10) TYPE N.

PARAMETERS: FILE LIKE RLGRAP-FILENAME,
            F_TYP LIKE RLGRAP-FILETYPE DEFAULT 'ASC',
            COA LIKE T004-KTOPL DEFAULT 'CAEK',
            C_CODE LIKE T001-BUKRS DEFAULT '1000',
            IND(1) TYPE C DEFAULT 'N'.

** Upload file into internal table tab
CALL FUNCTION 'WS_UPLOAD'
     EXPORTING
          FILENAME = FILE
          FILETYPE = F_TYP
     TABLES
          DATA_TAB = TAB.

** Validation on input fields (in internal table tab) before starting to
** process the BTCI records
PERFORM VALIDATION.

** Only continue if no validation error occurred
IF ERROR = 'N'.

** Open BTCI session for transaction FS01
  CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
            CLIENT = SY-MANDT
            GROUP  = 'GL_MAST'
            USER   = SY-UNAME
            KEEP   = 'X'.

** For every record in the internal table TAB, check if the account
** already exist in the SAP tables SKA1 and SKB1 (for the company code).
** If not existing, call form fill_fs01 to populate the screens to
** create the account.
  LOOP AT TAB.
    SKB1 = SPACE.
    VAR_NAC = TAB-SAKNR.             "Write account no. to numeric field
    FLAG = 'Y'.
    IF TAB-CODE NE SPACE AND
       TAB-CODE NE C_CODE.
      FLAG = 'N'.
    ENDIF.
    IF FLAG = 'Y'.
      IND = 'Y'.
      NUM = TAB-SAKNR.
      TAB-SAKNR = NUM.
      SELECT SINGLE * FROM SKA1 WHERE KTOPL = COA AND
                                      SAKNR = TAB-SAKNR.
      IF SY-SUBRC NE 0.
        IND = 'N'.
      ENDIF.
      SELECT SINGLE * FROM SKB1 WHERE BUKRS = C_CODE AND
                                      SAKNR = VAR_NAC.
      IF SY-SUBRC NE 0.

        PERFORM FILL_FS01.
        ADD 1 TO CNT.
      ELSE.
        WRITE: / TAB-SAKNR.
      ENDIF.
    ENDIF.
  ENDLOOP.
  WRITE: / CNT,'G/L accounts created for company'.
  WRITE: C_CODE.

** Close BTCI session
  CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDIF.

*---------------------------------------------------------------------*
*       FORM VALIDATION                                               *
*---------------------------------------------------------------------*
* Validate the input records in the internal table TAB                *
*    - GL Account length                                              *
*    - Company code                                                   *
*    - Account type (B/S or P&L)                                      *
*    - Account group                                                  *
*    - Tax category                                                   *
*    - Recon. indicator                                               *
*    - Sort key                                                       *
*    - Field status group                                             *
*---------------------------------------------------------------------*
FORM VALIDATION.
  LOOP AT TAB.
    VAR = STRLEN( TAB-SAKNR ).
    IF VAR NE 6.
      WRITE: / 'Incorrect account length: ',TAB-SAKNR.
      ERROR = 'Y'.
    ENDIF.

    IF C_CODE NE SPACE.
      T001 = SPACE.
      SELECT SINGLE * FROM T001 WHERE BUKRS = C_CODE.
      IF SY-SUBRC NE 0.
        WRITE: / 'Incorrect company code: ',C_CODE.
        ERROR = 'Y'.
      ENDIF.
    ENDIF.

    IF TAB-XBILK EQ SPACE AND TAB-GVTYP EQ SPACE.
      WRITE: / 'Account must be either B/S or I/S: ',TAB-SAKNR.
      ERROR = 'Y'.
    ENDIF.

    TRANSLATE TAB-KTOKS TO UPPER CASE.
    T077S = SPACE.
    SELECT SINGLE * FROM T077S WHERE KTOPL = COA AND
                                     KTOKS = TAB-KTOKS.
    IF SY-SUBRC NE 0.
      WRITE: / 'Incorrect account group: ',TAB-SAKNR, TAB-KTOKS.
      ERROR = 'Y'.
    ENDIF.

    IF TAB-MWSKZ NE '-' AND
       TAB-MWSKZ NE '+' AND
       TAB-MWSKZ NE '*' AND
       TAB-MWSKZ NE '<' AND
       TAB-MWSKZ NE '>' AND
       TAB-MWSKZ NE '-B' AND
       TAB-MWSKZ NE '+B' AND
       TAB-MWSKZ NE 'A0' AND
       TAB-MWSKZ NE 'A1' AND
       TAB-MWSKZ NE 'V0' AND
       TAB-MWSKZ NE 'V9' AND
       TAB-MWSKZ NE SPACE AND
       TAB-MWSKZ NE 'V1'.
      WRITE: / 'Incorrect tax indicator: ',TAB-MWSKZ.
      ERROR = 'Y'.
    ENDIF.

    TRANSLATE TAB-MITKZ TO UPPER CASE.
    IF TAB-MITKZ NE 'A' AND
       TAB-MITKZ NE 'D' AND
       TAB-MITKZ NE 'K' AND
       TAB-MITKZ NE SPACE.
      WRITE: / 'Incorrect reconciliation indicator: ',TAB-MITKZ.
      ERROR = 'Y'.
    ENDIF.

    IF TAB-ZUAWA NE SPACE.
      TZUN = SPACE.
      SELECT SINGLE * FROM TZUN WHERE ZUAWA = TAB-ZUAWA.
      IF SY-SUBRC NE 0.
        WRITE: / 'Incorrect sort category: ',TAB-ZUAWA.
        ERROR = 'Y'.
      ENDIF.
    ENDIF.

    T004F = SPACE.
    SELECT SINGLE * FROM T004F WHERE BUKRS = '0001' AND
                                     FSTAG = TAB-FSTAG.
    IF SY-SUBRC NE 0.
      WRITE: / 'Incorrect field status: ',TAB-FSTAG.
      ERROR = 'Y'.
    ENDIF.
  ENDLOOP.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM FILL_FS01                                                *
*---------------------------------------------------------------------*
*  Populate relevant screens for transaction FS01                     *
*---------------------------------------------------------------------*
FORM FILL_FS01.
  CLEAR BDCTAB.
  REFRESH BDCTAB.
  BDCTAB-PROGRAM  = 'SAPMF02H'.
  BDCTAB-DYNPRO   = '0402'.
  BDCTAB-DYNBEGIN = 'X'.
  APPEND BDCTAB.

  CLEAR BDCTAB.
  BDCTAB-FNAM     = 'RF02H-SAKNR'.             "Account number
  BDCTAB-FVAL     = TAB-SAKNR.
  APPEND BDCTAB.

  CLEAR BDCTAB.
  BDCTAB-FNAM     = 'RF02H-BUKRS'.           "Company code
*  if tab-cco eq space.
  BDCTAB-FVAL     = C_CODE.
*  else.
*    bdctab-fval     = tab-cco.
*  endif.
  APPEND BDCTAB.

  IF IND = 'N'.
    CLEAR BDCTAB.
    BDCTAB-PROGRAM  = 'SAPMF02H'.
    BDCTAB-DYNPRO   = '0310'.
    BDCTAB-DYNBEGIN = 'X'.
    APPEND BDCTAB.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKAT-TXT20'.         "Short text
    BDCTAB-FVAL     = TAB-TXT20.
*   bdctab-fval     = tab-ltx(20).
    APPEND BDCTAB.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKAT-TXT50'.         "Long text
    BDCTAB-FVAL     = TAB-TXT50.
    APPEND BDCTAB.

    IF TAB-XBILK NE SPACE.
      CLEAR BDCTAB.
      BDCTAB-FNAM     = 'SKA1-XBILK'.       "B/S indicator
      BDCTAB-FVAL     = 'X'.
      APPEND BDCTAB.
    ENDIF.

    IF TAB-GVTYP NE SPACE.
      CLEAR BDCTAB.
      BDCTAB-FNAM     = 'SKA1-GVTYP'.       "P&L indicator
      BDCTAB-FVAL     = 'X'.
      APPEND BDCTAB.
    ENDIF.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKA1-KTOKS'.         "Account group
    BDCTAB-FVAL     = TAB-KTOKS.
*   bdctab-fval     = 'PL'.
    APPEND BDCTAB.
  ENDIF.

  CLEAR BDCTAB.
  BDCTAB-PROGRAM  = 'SAPMF02H'.
  BDCTAB-DYNPRO   = '0110'.
  BDCTAB-DYNBEGIN = 'X'.
  APPEND BDCTAB.

  IF TAB-WAERS NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-WAERS'.        "Currency
    IF TAB-WAERS EQ SPACE.
      BDCTAB-FVAL     = 'ZAR'.
    ELSE.
      BDCTAB-FVAL     = TAB-WAERS.
    ENDIF.
    APPEND BDCTAB.
  ENDIF.

  IF TAB-XSALH NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-XSALH'.         "Managed in local currency
    BDCTAB-FVAL     = TAB-XSALH.
    APPEND BDCTAB.
  ENDIF.

  IF TAB-MWSKZ NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-MWSKZ'.         "Tax category
    BDCTAB-FVAL     = TAB-MWSKZ.
    APPEND BDCTAB.
  ENDIF.

  IF TAB-XMWNO NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-XMWNO'.         "Tax not required
    BDCTAB-FVAL     = TAB-XMWNO.
    APPEND BDCTAB.
  ENDIF.

  IF TAB-MITKZ NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-MITKZ'.         "Recon. ind
    BDCTAB-FVAL     = TAB-MITKZ.
    APPEND BDCTAB.
  ENDIF.

  TRANSLATE TAB-KTOKS TO UPPER CASE.
  IF TAB-XOPVW NE SPACE.
    IF TAB-KTOKS NE 'AS'.
      CLEAR BDCTAB.
      BDCTAB-FNAM     = 'SKB1-XOPVW'.       "Open item
      BDCTAB-FVAL     = 'X'.
      APPEND BDCTAB.
    ENDIF.
  ENDIF.

  IF TAB-XKRES NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-XKRES'.         "Line item display
    BDCTAB-FVAL     = 'X'.
    APPEND BDCTAB.
  ENDIF.

  CLEAR BDCTAB.
  BDCTAB-FNAM     = 'SKB1-ZUAWA'.           "Sort key
  IF TAB-ZUAWA EQ SPACE.
    BDCTAB-FVAL     = '001'.
  ELSE.
    BDCTAB-FVAL     = TAB-ZUAWA.
  ENDIF.
  APPEND BDCTAB.

  CLEAR BDCTAB.
  BDCTAB-FNAM     = 'SKB1-FSTAG'.           "Field status group
  BDCTAB-FVAL     = TAB-FSTAG.
  APPEND BDCTAB.

  IF TAB-XINTB NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-XINTB'.         "Automatic posted
    BDCTAB-FVAL     = 'X'.
    APPEND BDCTAB.
  ENDIF.

  TRANSLATE TAB-KTOKS TO UPPER CASE.
  IF TAB-KTOKS EQ 'CASH'.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-FDLEV'.         "Planning level
    BDCTAB-FVAL     = TAB-FDLEV.
    APPEND BDCTAB.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-XGKON'.         "Rel. for cash flow
    BDCTAB-FVAL     = 'X'.
    APPEND BDCTAB.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-HBKID'.         "House bank
    BDCTAB-FVAL     = TAB-HBKID.
    APPEND BDCTAB.

    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-HKTID'.         "Account ID
    BDCTAB-FVAL     = TAB-HKTID.
    APPEND BDCTAB.
  ENDIF.

  IF TAB-FIPOS NE SPACE.
    CLEAR BDCTAB.
    BDCTAB-FNAM     = 'SKB1-FIPOS'.          "Commitment item
    BDCTAB-FVAL     = TAB-FIPOS.
    APPEND BDCTAB.
  ENDIF.

  CLEAR BDCTAB.
  BDCTAB-FNAM     = 'BDC_OKCODE'.
  BDCTAB-FVAL     = '/11'.
  APPEND BDCTAB.

  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            TCODE     = 'FS01'
       TABLES
            DYNPROTAB = BDCTAB.

ENDFORM.

Related Items:

 
< Prev   Next >

Google Search

Google Ads

Shared Bottom Border

Contact Us | Polls | Add URL | Contribute | Privacy | Terms | Feedback

Discussion Forum | BLOG | Consultants: Post your resume | Companies: Advertise on ERPGenie.COM | Post Job
Financials Consultant | Consultant Review | Gallia Consulting | Supply Chain Project | SAP Financials Forum
GenieHoldings.COM, Inc. | Genie Press | WorkflowGenie | ESAGenie | ERPTopSites | ABAP Tips and Tricks | SAP Solutions Database

EDIGenie | Searching Survivor