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

Login

Login to view more content!!!





Lost Password?
No account yet? Register

Registered Access

Poll

What area of ABAP are you interested in?
 
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

Statistics

Contribution Activity
Utilities: 38
Tips and Tricks: 330
Sample Code: 164
Total Contributions: 545

Member Activity
Members: 6061 since 2/1/2007!
New: 0 since yesterday!
Visitors: 959193

Newest Members

Welcome our newest members:

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