Monday 16 October 2017

BDC PROGRAM FOR FB75 TRANSACTION


*************************************************************************
* PROGRAM TITLE   : ZBDC_FB75
* MODULE          : FI
* PROGRAM TYPE    : BDC PROGRAM
* INPUT           : EXCEL FILE
* OUTPUT          : STANDARD TRANSACTION
* CREATED BY      : PRATIK PRAKASH KAMBLE
* CREATION DATE   : 14.10.2017
*-----------------------------------------------------------------------
* DESCRIPTION : FB75 TRANSACTION BDC PROGRAM
************************************************************************
* Modification history:
* ----------------------------------------------------------------------
* DATE |User ID |TS
* ----------------------------------------------------------------------
************************************************************************


REPORT ZFB75_TESTS NO STANDARD PAGE HEADING LINE-SIZE 255.

INCLUDE ZFB75_TOP.

INCLUDE ZFB75_FORMS.


START-OF-SELECTION.

  PERFORM UPLOAD_FILE.

  PERFORM CALL_BDC.


*&---------------------------------------------------------------------*
*&  Include           ZFB75_TOP
*&---------------------------------------------------------------------*


DATATEXT(4096TYPE OCCURS 0.

DATA:   BDCDATA          LIKE BDCDATA OCCURS WITH HEADER LINE.
DATA:   MESSTAB         TYPE STANDARD TABLE OF BDCMSGCOLL,
             GT_MESSTAB  TYPE STANDARD TABLE OF BDCMSGCOLL,
             GV_STRING     TYPE STRING,
             LV_CHAR          TYPE CHAR1250,
             LV_CHAR1        TYPE CHAR1250,
             LS_CTU             TYPE CTU_PARAMS.

FIELD-SYMBOLS <LS_MESSTAB> TYPE BDCMSGCOLL.           "FOR MESSAGE

*&---------------------------------------------------------------------*
*& DATA DECLARATION
*&---------------------------------------------------------------------*
TYPESBEGIN OF ST_MESSAGE,
        SR_NO     TYPE I,
        LV_MSGTYP TYPE STRING,
        LV_CRSTXT TYPE CHAR1250,
       END OF ST_MESSAGE.

TYPESBEGIN OF TY_FB70,
        SERIAL    TYPE I,
        ACCNT     TYPE INVFO-ACCNT,                  "Customer No.
        BLDAT(10TYPE C,                                       "Doc Date
        XBLNR     TYPE INVFO-XBLNR,                   "Reference
        WAERS     TYPE INVFO-WAERS,                 "Currency Key
        BUPLA     TYPE INVFO-BUPLA,                   "Business Place
        SECCO     TYPE INVFO-SECCO,                 "Section Code
        SGTXT     TYPE INVFO-SGTXT,                   "item text
        HKONT     TYPE ACGL_ITEM-HKONT,         "G/L Account
        WRBTR    TYPE ACGL_ITEM-WRBTR,         "Amount in Document Currency
        MWSKZ     TYPE ACGL_ITEM-MWSKZ,        "Sale Taxes
        SGTXT1    TYPE ACGL_ITEM-SGTXT,          "Item Text
        GSBER1    TYPE ACGL_ITEM-GSBER,         "Business Area
        PRCTR     TYPE ACGL_ITEM-PRCTR,           "Profit Center
        HSN_SAC   TYPE ACGL_ITEM-HSN_SAC,    "HSN or SAC Code
      END OF TY_FB70.


DATAIT_FB75 TYPE TABLE OF TY_FB70 WITH HEADER LINE,
           WA_FB75 TYPE TY_FB70.


DATAIT_FB75_0 TYPE TABLE OF TY_FB70 WITH HEADER LINE,
           WA_FB75_0 TYPE TY_FB70.

DATAIT_EXLOAD LIKE ALSMEX_TABLINE  OCCURS WITH HEADER LINE.

DATALV_TABIX TYPE SY-TABIX,
           LV_ERR   TYPE C.

DATAGT_MSG    TYPE TABLE OF ST_MESSAGE,
      GS_MSG    TYPE ST_MESSAGE,
      GT_FCAT   TYPE SLIS_T_FIELDCAT_ALV,
      GS_FCAT   TYPE SLIS_FIELDCAT_ALV,
      GS_LAYOUT TYPE SLIS_LAYOUT_ALV.

DATAWA_COUNT  TYPE N,
      WA_COUNT1 TYPE STRING,
      LV_TAX_AMOUNT TYPE DMBTR,
      TAX_AMOUNT TYPE DMBTR.

DATAGT_TAX1 TYPE STANDARD TABLE OF RTAX1U15,
      GS_TAX1 TYPE  RTAX1U15.

DATA  LS_CTU_PARAMS TYPE CTU_PARAMS.
      LS_CTU_PARAMS-DISMODE 'A'.
      LS_CTU_PARAMS-UPDMODE 'S'.
      LS_CTU_PARAMS-NOBINPT ' '.

*&---------------------------------------------------------------------*
* SELECTION SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREENBEGIN OF BLOCK B1 WITH FRAME.
PARAMETERSP_FILE TYPE RLGRAP-FILENAME.              "File path
PARAMETERSW_BEGIN TYPE OBLIGATORY,                "Excel sheet start row
            W_END   TYPE OBLIGATORY.                "Excel sheet end row
SELECTION-SCREENEND OF BLOCK B1.

*&---------------------------------------------------------------------*
* SELECTION SCREEN VALIDATION AND INPUT.
*&---------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      PROGRAM_NAME  SYST-CPROG
      DYNPRO_NUMBER SYST-DYNNR
    IMPORTING
      FILE_NAME     P_FILE.


*&---------------------------------------------------------------------*
*&  Include           ZFB75_FORMS
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_FILE
*&---------------------------------------------------------------------*
* CALL EXCEL SHEET FROM SELECTION SCREEN AND UPLOAD IN INTERNAL TABLE
*----------------------------------------------------------------------*


FORM UPLOAD_FILE.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME                P_FILE
      I_BEGIN_COL             '0001'
      I_BEGIN_ROW             W_BEGIN
      I_END_COL               '0012'
      I_END_ROW               W_END
    TABLES
      INTERN                  IT_EXLOAD
    EXCEPTIONS
      INCONSISTENT_PARAMETERS 1
      UPLOAD_OLE              2
      OTHERS                  3.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

  IF IT_EXLOAD IS NOT INITIAL.
    LOOP AT IT_EXLOAD.
      CASE IT_EXLOAD-COL.
        WHEN '0001'.
          IT_FB75-SERIAL    IT_EXLOAD-VALUE.
        WHEN '0002'.
          IT_FB75-ACCNT     IT_EXLOAD-VALUE.
        WHEN '0003'.
          IT_FB75-BLDAT     IT_EXLOAD-VALUE.
        WHEN '0004'.
          IT_FB75-XBLNR     IT_EXLOAD-VALUE.
        WHEN '0005'.
          IT_FB75-WAERS     IT_EXLOAD-VALUE.
        WHEN '0006'.
          IT_FB75-SGTXT     IT_EXLOAD-VALUE.
        WHEN '0007'.
          IT_FB75-HKONT     IT_EXLOAD-VALUE.
        WHEN '0008'.
          IT_FB75-WRBTR     IT_EXLOAD-VALUE.
        WHEN '0009'.
          IT_FB75-MWSKZ     IT_EXLOAD-VALUE.
        WHEN '0010'.
          IT_FB75-SGTXT1    IT_EXLOAD-VALUE.
        WHEN '0011'.
          IT_FB75-PRCTR     IT_EXLOAD-VALUE.
        WHEN '0012'.
          IT_FB75-HSN_SAC   IT_EXLOAD-VALUE.
      ENDCASE.

      AT END OF ROW.
        APPEND IT_FB75.
        CLEAR IT_FB75.
      ENDAT.
    ENDLOOP.

    IT_FB75_0[] IT_FB75[].
    SORT IT_FB75 BY ACCNT.
    DELETE ADJACENT DUPLICATES FROM IT_FB75 COMPARING ACCNT XBLNR.

  ENDIF.
ENDFORM.                    " UPLOAD_FILE
*&---------------------------------------------------------------------*
*&      Form  CALL_BDC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_BDC .

  LOOP AT IT_FB75 INTO WA_FB75.

    PERFORM BDC_DYNPRO      USING 'SAPMF05A'         '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '/00'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'       'G'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-BLDAT'        WA_FB75-BLDAT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'        WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-WAERS'       WA_FB75-WAERS.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'        'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'       'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'    WA_FB75-SGTXT.
    PERFORM BDC_FIELD   USING 'BDC_CURSOR'  'ACGL_ITEM-HSN_SAC(01)'.

    LOOP AT IT_FB75_0 INTO WA_FB75_0 WHERE ACCNT EQ WA_FB75-ACCNT
                                       AND XBLNR EQ WA_FB75-XBLNR.
      WA_COUNT WA_COUNT + 1.
      CONCATENATE 'ACGL_ITEM-HKONT' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-HKONT.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-WRBTR' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-WRBTR.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-MWSKZ' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1  WA_FB75_0-MWSKZ.
      CLEAR WA_COUNT1.

**** To Tax calculate
      IF WA_FB75_0-MWSKZ IS NOT INITIAL.
        TAX_AMOUNT TAX_AMOUNT + WA_FB75_0-WRBTR.
        CLEAR GT_TAX1.
        CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
          EXPORTING
            I_BUKRS '2012'
            I_MWSKZ WA_FB75_0-MWSKZ
            I_WAERS 'INR'
            I_WRBTR WA_FB75_0-WRBTR
          TABLES
            T_MWDAT GT_TAX1.
        LOOP AT GT_TAX1 INTO GS_TAX1.
          LV_TAX_AMOUNT LV_TAX_AMOUNT + GS_TAX1-WMWST.
        ENDLOOP.
      ENDIF.

      CONCATENATE 'ACGL_ITEM-SGTXT' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-SGTXT.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-PRCTR' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1   WA_FB75_0-PRCTR.
      CLEAR WA_COUNT1.

      CONCATENATE 'ACGL_ITEM-HSN_SAC' '(' WA_COUNT ')' INTO WA_COUNT1.
      PERFORM BDC_FIELD USING WA_COUNT1 WA_FB75_0-HSN_SAC.
      CLEARWA_FB75_0WA_COUNT1.
    ENDLOOP.

    WA_FB75-WRBTR =  TAX_AMOUNT + LV_TAX_AMOUNT.

    PERFORM BDC_FIELD   USING 'BDC_CURSOR'   'ACGL_ITEM-HKONT(02)'.
    PERFORM BDC_DYNPRO      USING 'SAPMF05A'        '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=DUMMY'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'    'G'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'     'INVFO-XMWST'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'      WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'      'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'       'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'      WA_FB75-SGTXT.
    PERFORM BDC_DYNPRO      USING 'SAPMF05A'        '1200'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=BS'.
    PERFORM BDC_FIELD       USING 'RF05A-BUSCS'    'G'.
    PERFORM BDC_FIELD       USING 'BDC_CURSOR'        'INVFO-WRBTR'.
    PERFORM BDC_FIELD       USING 'INVFO-ACCNT'       WA_FB75-ACCNT.
    PERFORM BDC_FIELD       USING 'INVFO-XBLNR'       WA_FB75-XBLNR.
    PERFORM BDC_FIELD       USING 'INVFO-WRBTR'     WA_FB75-WRBTR.
    PERFORM BDC_FIELD       USING 'INVFO-XMWST'       'X'.
    PERFORM BDC_FIELD       USING 'INVFO-BUPLA'     'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SECCO'      'NASK'.
    PERFORM BDC_FIELD       USING 'INVFO-SGTXT'     WA_FB75-SGTXT.
    PERFORM BDC_DYNPRO      USING 'SAPMSSY0'         '0120'.
    PERFORM BDC_FIELD       USING 'BDC_OKCODE'       '=BU'.

    CALL TRANSACTION 'FB75' USING BDCDATA
                            MODE 'N'
                            UPDATE 'S'
                            MESSAGES INTO MESSTAB.

    LOOP AT MESSTAB ASSIGNING <LS_MESSTAB>.
      IF <LS_MESSTAB>-MSGTYP EQ 'E' OR <LS_MESSTAB>-MSGTYP EQ 'S' .
        GS_MSG-SR_NO WA_FB75-SERIAL.
        IF LV_ERR IS INITIAL.
          IF <LS_MESSTAB>-MSGTYP EQ 'S' AND <LS_MESSTAB>-MSGNR EQ '060'.
            GS_MSG-LV_MSGTYP 'Error'.
            LV_ERR 'X'.
          ELSEIF <LS_MESSTAB>-MSGTYP EQ 'E' .
            GS_MSG-LV_MSGTYP 'Error'.
            LV_ERR 'X'.
          ELSEIF <LS_MESSTAB>-MSGTYP EQ 'S'.
            GS_MSG-LV_MSGTYP 'Success'.
          ELSE.
            GS_MSG-LV_MSGTYP <LS_MESSTAB>-MSGTYP.
          ENDIF.
        ENDIF.

        CALL FUNCTION 'FORMAT_MESSAGE'
          EXPORTING
            ID        <LS_MESSTAB>-MSGID
            LANG      SY-LANGU
            NO        <LS_MESSTAB>-MSGNR
            V1        <LS_MESSTAB>-MSGV1
            V2        <LS_MESSTAB>-MSGV2
            V3        <LS_MESSTAB>-MSGV3
            V4        <LS_MESSTAB>-MSGV4
          IMPORTING
            MSG       LV_CHAR1
          EXCEPTIONS
            NOT_FOUND 1
            OTHERS    2.
        IF SY-SUBRC <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

        DATA CHAR(1TYPE VALUE ' '.
        CONCATENATE GS_MSG-LV_CRSTXT LV_CHAR1 '/' INTO GS_MSG-LV_CRSTXT SEPARATED BY CHAR.
        CLEAR LV_CHAR1,CHAR.
        AT LAST .
          APPEND GS_MSG TO GT_MSG.
          CLEAR :GS_MSG.
        ENDAT.
      ENDIF.
    ENDLOOP.
    CLEARGS_MSG ,LS_CTU_PARAMS ,LV_TABIXLV_ERR,WA_FB75WA_COUNTTAX_AMOUNTLV_TAX_AMOUNT.
    REFRESHBDCDATA MESSTAB.
  ENDLOOP.

  DELETE GT_MSG WHERE LV_MSGTYP EQ 'W'.
  SORT GT_MSG  BY SR_NO.

*  PERFORM FCAT USING '1' 'SR_NO'     'Excel Row No' 'GT_MSG'  ' '.
  PERFORM FCAT USING '2' 'LV_MSGTYP' 'Message Type' 'GT_MSG'  ' '.
  PERFORM FCAT USING '5' 'LV_CRSTXT' 'Message'      'GET_MSG' ' '.

  GS_LAYOUT-ZEBRA             'X'.
  GS_LAYOUT-COLWIDTH_OPTIMIZE 'X'.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM SY-REPID
      IS_LAYOUT          GS_LAYOUT
      IT_FIELDCAT        GT_FCAT
    TABLES
      T_OUTTAB           GT_MSG
    EXCEPTIONS
      PROGRAM_ERROR      1
      OTHERS             2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    "CALL_BDC
"CALL_BDC

*&---------------------------------------------------------------------*
*&      Form  FCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

FORM FCAT USING P_COL
                P_FIELDNAME
                P_DESCRIPTION
                P_TABNAME
                P_KEY.
  GS_FCAT-COL_POS     P_COL.
  GS_FCAT-FIELDNAME   P_FIELDNAME.
  GS_FCAT-SELTEXT_L   P_DESCRIPTION.
  GS_FCAT-TABNAME     P_TABNAME.
  GS_FCAT-KEY         P_KEY.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.
ENDFORM.                    "fcat


*&---------------------------------------------------------------------*
*&      Form  bdc_dynpro
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO  USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  PROGRAM.
  BDCDATA-DYNPRO   DYNPRO.
  BDCDATA-DYNBEGIN 'X'.
  APPEND BDCDATA.

ENDFORM.                    " BDC_DYNPRO
*&---------------------------------------------------------------------*
*&      Form  BDC_FIELD
*----------------------------------------------------------------------*
FORM BDC_FIELD  USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM FNAM.
  BDCDATA-FVAL FVAL.
  SHIFT BDCDATA-FVAL LEFT DELETING LEADING SPACE.
  APPEND BDCDATA.

ENDFORM.                    "bdc_field

No comments:

Post a Comment