Saturday 24 December 2011

USER EXIT FOR ANY TCODE


*&---------------------------------------------------------------------*
*& Report  ZUSEREXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
" Developed By :
"Created On : 24.12.2011 16:31:08
        INPUT:


    OUTPUT:

Report zuserexit no standard page heading.
tables : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
         tables : tstct.
data : jtab like tadir occurs with header line.
data : field1(30).
data : v_devclass like tadir-devclass.
parameters : p_tcode like tstc-tcode obligatory.

select single from tstc where tcode eq p_tcode.
if sy-subrc eq 0.
   select single from tadir where pgmid = 'R3TR'
                    and object = 'PROG'
                    and obj_name = tstc-pgmna.
   move : tadir-devclass to v_devclass.
      if sy-subrc ne 0.
         select single from trdir where name = tstc-pgmna.
         if trdir-subc eq 'F'.
            select single from tfdir where pname = tstc-pgmna.
            select single from enlfdir where funcname =
            tfdir-funcname.
            select single from tadir where pgmid = 'R3TR'
                               and object = 'FUGR'
                               and obj_name eq enlfdir-area.

            move : tadir-devclass to v_devclass.
          endif.
       endif.
       select from tadir into table jtab
                     where pgmid = 'R3TR'
                       and object = 'SMOD'
                       and devclass = v_devclass.
        select single from tstct where sprsl eq sy-langu and
                                         tcode eq p_tcode.
        format color col_positive intensified off.
        write:/(19) 'Transaction Code - ',
             20(20) p_tcode,
             45(50) tstct-ttext.
                    skip.
        if not jtab[] is initial.
           write:/(95) sy-uline.
           format color col_heading intensified on.
           write:/1 sy-vline,
                  'Exit Name',
                 21 sy-vline ,
                 22 'Description',
                 95 sy-vline.
           write:/(95) sy-uline.
           loop at jtab.
              select single from modsapt
                     where sprsl = sy-langu and
                            name = jtab-obj_name.
                   format color col_normal intensified off.
                   write:/1 sy-vline,
                          jtab-obj_name hotspot on,
                         21 sy-vline ,
                         22 modsapt-modtext,
                         95 sy-vline.
           endloop.
           write:/(95) sy-uline.
           describe table jtab.
           skip.
           format color col_total intensified on.
           write:/ 'No of Exits:' , sy-tfill.
        else.
           format color col_negative intensified on.
           write:/(95) 'No User Exit exists'.
        endif.
      else.
          format color col_negative intensified on.
          write:/(95) 'Transaction Code Does Not Exist'.
      endif.

Thursday 22 December 2011

MATERIAL MASTER - SAP MM & QM

REPORT  ZATERIAL_MASTER_MM60.

TABLES : Mseg,MARA.  

TYPE-POOLS: SLIS.

DATA: G_REPID LIKE SY-REPID,
GS_PRINT            TYPE SLIS_PRINT_ALV,
T_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
GT_EVENTS           TYPE SLIS_T_EVENT,
I_SORT TYPE SLIS_T_SORTINFO_ALV,
GS_LAYOUT           TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT         TYPE SLIS_T_FIELDCAT_ALV,
GS_CELL TYPE SLIS_LINEINFO,
FIELDCAT_LN LIKE LINE OF GT_FIELDCAT.

DATA : T_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
DATA : IT_EVENTS   TYPE SLIS_T_EVENT WITH HEADER LINE.
DATA : L_LIST(105) TYPE C.        "Store the Top-of-page headings
DATA : WRK_NAME    TYPE T001-BUTXT.
DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.
DATA : LS_SORT     TYPE TABLE OF SLIS_SORTINFO_ALV.
DATA : WA_SORT     LIKE LINE OF LS_SORT.
DATA : GS_VARIANT  LIKE DISVARIANT,
       G_SAVE.

*************************************************

DATA BEGIN OF itab OCCURS 0,

        matnr TYPE mara-matnr,
        ersda TYPE mara-ersda,
        ernam TYPE mara-ernam,
        aenam TYPE mara-aenam,
        mtart TYPE mara-mtart,
        LAEDA TYPE mara-LAEDA,
        mbrsh TYPE mara-mbrsh,
        matkl TYPE mara-matkl,
        bismt TYPE mara-bismt,
        meins TYPE mara-meins,
        ferth TYPE mara-ferth,
        SPART TYPE mara-SPART,
        XCHPF TYPE mara-XCHPF,    "Created On : 22.12.2011 11:30:31
        maktx TYPE makt-maktx,


        vprsv TYPE mbew-vprsv,
        stprs TYPE mbew-stprs,
        peinh TYPE mbew-peinh,
        bklas TYPE mbew-bklas,
        verpr TYPE mbew-verpr,
        BWKEY TYPE mbew-BWKEY,

          MAABC TYPE MARC-MAABC,
          WERKS TYPE MARC-WERKS,
          EKGRP TYPE MARC-EKGRP,
          DISMM TYPE MARC-DISMM,
          DISPO TYPE MARC-DISPO,
          QMATV TYPE MARC-QMATV,
          SSQSS TYPE MARC-SSQSS,

        vtext TYPE tspat-vtext,
        spras type tspat-spras,

         text(24) TYPE c,

       END OF itab.

SELECT-OPTIONS : MATNR FOR mseg-MATNR.

START-OF-SELECTION.
  SELECT   MATNR
           ernam
           meins
           ferth
           SPART
           LAEDA
           MATKL
           MTART
           XCHPF
           INTO (itab-MATNR,itab-ernam,itab-meins,itab-ferth,ITAB-SPART,ITAB-LAEDA,ITAB-MATKL,ITAB-MTART,ITAB-XCHPF)
           FROM mara
          WHERE MATNR IN MATNR.


  IF itab-XCHPF = 'X' .
  itab-text = 'YES'.
ELSEIF itab-XCHPF = ' '  .
  itab-text = 'NO' .
  ENDIF.

      APPEND itab.
    ENDSELECT.

  LOOP AT itab.
    SELECT SINGLE MAKTX FROM MAKT INTO itab-MAKTX
        WHERE MATNR EQ itab-MATNR
          AND SPRAS EQ 'EN'.

    MODIFY itab.
  ENDLOOP.

LOOP AT itab.
SELECT SINGLE MAKTX FROM MAKT INTO itab-MAKTX
WHERE MATNR EQ itab-MATNR
AND SPRAS EQ 'EN'.

MODIFY itab.
ENDLOOP.

LOOP AT itab.
SELECT SINGLE vtext FROM tspat INTO itab-vtext
WHERE spart EQ itab-spart
AND SPRAS EQ 'EN'.

MODIFY itab.
ENDLOOP.


LOOP AT itab.
SELECT vprsv stprs peinh bklas verpr FROM mbew INTO (itab-vprsv,itab-stprs,itab-peinh,itab-bklas,itab-verpr)
WHERE MATNR EQ itab-MATNR
    and bwkey eq 'BRHP'.
endselect.
MODIFY itab.
ENDLOOP.

LOOP AT itab.
SELECT MAABC DISMM DISPO QMATV SSQSS FROM MARC INTO (itab-MAABC,itab-DISMM,itab-DISPO,itab-QMATV,itab-SSQSS)
WHERE MATNR EQ itab-MATNR AND
 werks eq 'BRHP' .

endselect.


  IF itab-QMATV = 'X' .
  itab-text = 'YES'.
ELSEIF itab-QMATV = ' '  .
  itab-text = 'NO' .
  ENDIF.

MODIFY itab.
ENDLOOP.

***** TO DISPLAY USING ALV
  PERFORM BUILD.
  PERFORM GET_EVENTS.
  PERFORM SUB_COMMENT_BUILD USING T_LIST_TOP_OF_PAGE.
  PERFORM CALL_ALV.

*&------------Form  BUILD
FORM BUILD.
  DATA: FIELDCAT_IN TYPE SLIS_FIELDCAT_ALV.
  REFRESH GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'MATNR'.
  FIELDCAT_LN-TABNAME   = 'itab'.
   FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MATERIAL NO.'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'MAKTX'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '25'.
  FIELDCAT_LN-SELTEXT_L = 'MATERIAL DESC.'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.
*
  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'MTART'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MATERIAL TYPE'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'MATKL'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MATERIAL GRP'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.


  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'ERNAM'.
  FIELDCAT_LN-TABNAME   = 'itab'.
      FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'Created by'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'LAEDA'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'LAST CHANGE'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'SPART'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'DIVISION'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'VTEXT'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'DIV TEXT'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.


  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'STPRS'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'STD.PRICE'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'VERPR'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MOVING PRICE'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'VPRSV'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'PRICE CONTROL'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'PEINH'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'PRICE UNIT'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'MAABC'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'ABC IND'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'BKLAS'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'VALUATION CLASS'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'DISMM'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MRP TYPE'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'XCHPF'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'BACH INDICATOR'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'DISPO'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'MRP CONTROLLER'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'QMATV'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'INSP.SETUP'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.

  CLEAR FIELDCAT_LN.
  FIELDCAT_LN-FIELDNAME = 'SSQSS'.
  FIELDCAT_LN-TABNAME   = 'itab'.
  FIELDCAT_LN-just = 'C'.
  FIELDCAT_LN-outputlen = '15'.
  FIELDCAT_LN-SELTEXT_L = 'QM CTRL KEY'.
  FIELDCAT_LN-NO_ZERO = 'X'.
  APPEND FIELDCAT_LN TO GT_FIELDCAT.


  G_REPID = SY-REPID.
  GS_VARIANT-REPORT = G_REPID.
  G_SAVE           = 'A'.

ENDFORM.                    "BUILD
*&---------------Form  CALL_ALV
DATA T_LAYOUT TYPE SLIS_LAYOUT_ALV.
*&---------------------------------------------------------------------*
*&      Form  CALL_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CALL_ALV.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM = G_REPID
      I_SAVE             = G_SAVE
      IS_VARIANT         = GS_VARIANT
      IT_FIELDCAT        = GT_FIELDCAT[]
      IT_EVENTS          = IT_EVENTS[]
    TABLES
      T_OUTTAB           = itab
    EXCEPTIONS
      PROGRAM_ERROR      = 1
      OTHERS             2.

ENDFORM.                    "CALL_ALV
*&      Form  GET_EVENTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_EVENTS .

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE     = 0
    IMPORTING
      ET_EVENTS       = IT_EVENTS[]
    EXCEPTIONS
      LIST_TYPE_WRONG = 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.

  READ TABLE IT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                                INTO IT_EVENTS.
  IF SY-SUBRC = 0.

    MOVE T_FORMNAME_TOP_OF_PAGE TO IT_EVENTS-FORM.
    APPEND IT_EVENTS.

  ENDIF.

ENDFORM.                    " get_events
*&---------------------------------------------------------------------*
*&      Form  sub_comment_build
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_T_LIST_TOP_OF_PAGE  text
*----------------------------------------------------------------------*
FORM SUB_COMMENT_BUILD  USING  I_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.

  DATA: LS_LINE TYPE SLIS_LISTHEADER.

  CLEAR LS_LINE.

  LS_LINE-TYP  = 'H'.
  LS_LINE-INFO = 'xyz Limited'.
  APPEND LS_LINE TO I_TOP_OF_PAGE.

  LS_LINE-TYP  = 'H'.
  LS_LINE-INFO = 'Material Master'.
  APPEND LS_LINE TO I_TOP_OF_PAGE.

  CLEAR: LS_LINE, L_LIST.

  LS_LINE-TYP  = 'S'.
  LS_LINE-INFO = L_LIST.
  APPEND LS_LINE TO I_TOP_OF_PAGE.

ENDFORM.                    " sub_comment_build
*&---------------------------------------------------------------------*
*&      Form  top_of_page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TOP_OF_PAGE.

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = T_LIST_TOP_OF_PAGE.

ENDFORM.                    "TOP_OF_PAGE

Wednesday 21 December 2011

LOCK & UNLOCK OBJECTS IN ABAP SAP

 


INPUT SCREEN
OUTPUT SCREEN

 
REPORT ZLOCKUNLOCK.
TABLES: TRDIR.
PARAMETERS: PROGRAM LIKE TRDIR-NAME OBLIGATORY.
PARAMETERS: EDITOR LIKE TRDIR-EDTX.
SELECT SINGLE FROM TRDIR WHERE NAME = PROGRAM.
TRDIR-EDTX = EDITOR.
MODIFY TRDIR.
IF SY-SUBRC EQ 0.
WRITE: / 'Editor Lock update Successful ', TRDIR-NAME.
IF TRDIR-EDTX = 'X'.
WRITE: ' Lock'.
ELSE.
WRITE: ' UnLock'.
ENDIF.
ELSE.
WRITE: / 'Editor Lock update Unsuccessful ', TRDIR-NAME.
ENDIF.

SALES DELIEVERY REPORT - SAP SD - Z REPORT


INPUT SCREEN

OUTPUT SCREEN

*&---------------------------------------------------------------------*
*& Report  ZSD_DELIVERY_VALUE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZSD_DELIVERY_VALUE.

TYPE-pools : slis.

TABLES: LIKP.

TYPES : BEGIN OF T_LIKP,
        VBELN    TYPE VBELN_VL,
        LFDAT    TYPE     LFDAT_V,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        ORT01    type ORT01_GP,
        END OF T_LIKP,

        BEGIN OF T_LIPS,
        VBELN    TYPE LIKP-VBELN,
        POSNR    TYPE POSNR_VL ,
        PSTYV    TYPE PSTYV_VL ,
        MATNR    TYPE MATNR ,
        WERKS    TYPE WERKS_D,
        LGORT    TYPE LGORT_D,
        CHARG    TYPE CHARG_D ,
        LFIMG    TYPE LFIMG,
        MEINS    TYPE MEINS ,
        VGBEL    TYPE VGBEL ,
        VGPOS    TYPE VGPOS,
        MAKTX    TYPE MAKTX  ,
        VTWEG    type VTWEG,
        VTEXT    TYPE VTXTK ,
        END OF T_LIPS,

        BEGIN OF T_VBAP,
        VBELN    TYPE     VBELN_VA,
        POSNR    TYPE     POSNR_VA ,
        MATNR    TYPE     MATNR,
        CHARG    TYPE     CHARG_D,
        KWMENG TYPE   KWMENG,
        NETWR    TYPE     NETWR_AP,
        MWSBP    TYPE     MWSBP  ,
        END OF T_VBAP,

        BEGIN OF T_FINAL,
        VBELN    TYPE VBELN_VL,
        POSNR    TYPE POSNR_VL ,
        LFDAT    TYPE     LFDAT_V,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        ORT01    type ORT01_GP,
        VTWEG    type VTWEG,
        VTEXT    TYPE VTXTK ,
        VGBEL    TYPE VGBEL ,
        VGPOS    TYPE VGPOS,
        MATNR    TYPE MATNR ,
        MAKTX    TYPE MAKTX  ,
        KWMENG TYPE   KWMENG,
        NETWR    TYPE     NETWR_AP,
        MWSBP    TYPE     MWSBP  ,
        LFIMG    TYPE LFIMG,
        DSVAL    TYPE     NETWR_AP,
        END OF T_FINAL,

        BEGIN OF t_lfa1,
        KUNNR    TYPE     KUNWE,
        NAME1    TYPE     NAME1_GP,
        END OF t_lfa1.


DATA : I_LIKP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE,
       I_LIPS TYPE STANDARD TABLE OF T_LIPS WITH HEADER LINE,
       I_VBAP TYPE STANDARD TABLE OF T_VBAP WITH HEADER LINE,
       I_FINAL TYPE STANDARD TABLE OF T_FINAL WITH HEADER LINE,
       i_lfa1 TYPE STANDARD TABLE OF t_lfa1 WITH HEADER LINE,
       I_LIKP_TEMP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE.



DATA:       W_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

SELECTION-SCREEN BEGIN OF BLOCK S_DL WITH FRAME TITLE G_TITLE.
  SELECT-OPTIONS : S_VBELN FOR I_LIKP-VBELN,
                   S_LFDAT FOR I_LIKP-LFDAT,
                   S_KUNNR FOR I_LIKP-KUNNR,
                   s_vtweg for i_lips-vtweg.
SELECTION-SCREEN END OF BLOCK s_dl.


AT SELECTION-SCREEN on VALUE-REQUEST FOR S_VBELN-LOW.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'LIKP'
      FIELDNAME                 = 'VBELN'
     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_VBELN-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

AT SELECTION-SCREEN on VALUE-REQUEST FOR S_VBELN-HIGH.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'LIKP'
      FIELDNAME                 = 'VBELN'
     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_VBELN-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  AT SELECTION-SCREEN on VALUE-REQUEST FOR S_KUNNR-LOW.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'RF02D'
      FIELDNAME                 = 'KUNNR'
*     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_KUNNR-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


  AT SELECTION-SCREEN on VALUE-REQUEST FOR S_KUNNR-HIGH.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME                   = 'RF02D'
      FIELDNAME                 = 'KUNNR'
*     SEARCHHELP                = 'VMVL'
*     SHLPPARAM                 = ' '
*     DYNPPROG                  = ' '
*     DYNPNR                    = ' '
     DYNPROFIELD               = 'S_KUNNR-LOW'
*     STEPL                     = 0
*     VALUE                     = ' '
*     MULTIPLE_CHOICE           = ' '
*     DISPLAY                   = ' '
*     SUPPRESS_RECORDLIST       = ' '
*     CALLBACK_PROGRAM          = ' '
*     CALLBACK_FORM             = ' '
*     SELECTION_SCREEN          = ' '
*   IMPORTING
*     USER_RESET                =
*   TABLES
*     RETURN_TAB                =
*   EXCEPTIONS
*     FIELD_NOT_FOUND           = 1
*     NO_HELP_FOR_FIELD         = 2
*     INCONSISTENT_HELP         = 3
*     NO_VALUES_FOUND           = 4
*     OTHERS                    = 5
            .
  IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
START-OF-SELECTION .

PERFORM GET_DATA.

perform process_data.

PERFORM bulid_alv.

end-of-SELECTION.

PERFORM display_alv.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA .

SELECT  a~VBELN
        a~LFDAT
        a~KUNNR
        b~NAME1
        b~ORT01
   FROM LIKP as a INNER JOIN KNa1 as b on a~kunnr = b~kunnr
   INTO TABLE I_LIKP
   WHERE a~VBELN IN S_VBELN
   AND   a~LFDAT IN S_LFDAT
   AND   a~KUNNR IN S_KUNNR.

*SELECT  VBELN
*        LFDAT
*        KUNNR
*   FROM LIKP
*   INTO TABLE I_LIKP
*   WHERE VBELN IN S_VBELN
*   AND   LFDAT IN S_LFDAT
*   AND   KUNNR IN S_KUNNR.

  IF SY-SUBRC = 0.


*I_LIKP_TEMP[] = I_LIKP[].
*
*SORT I_LIKP_TEMP ASCENDING BY KUNNR.
*
*DELETE ADJACENT DUPLICATES FROM I_LIKP_TEMP COMPARING KUNNR.
*SELECT KUNNR
*       NAME1
*  FROM LFA1
*  INTO TABLE I_LFA1
*  FOR ALL ENTRIES IN I_LIKP_TEMP
*  WHERE KUNNR = I_LIKP_TEMP-KUNNR.
*
*  LOOP AT I_LFA1.
*
*    I_LIKP-KUNNR = I_LFA1-KUNNR.
*    MODIFY I_LIKP FROM I_LIKP TRANSPORTING NAME1 WHERE KUNNR =
*I_LFA1-KUNNR.
*
*  ENDLOOP.


    SELECT  A~VBELN
            A~POSNR
            A~PSTYV
            A~MATNR
            A~WERKS
            A~LGORT
            A~CHARG
            A~LFIMG
            A~MEINS
            A~VGBEL
            A~VGPOS
            b~MAKTX
            a~vtweg
            c~VTEXT
      FROM  LIPS as a INNER JOIN makt AS B ON A~MATNR = B~MATNR
                      INNER JOIN tvtwt as c on a~vtweg = c~vtweg

      INTO TABLE I_LIPS
      FOR ALL ENTRIES IN I_LIKP
      WHERE A~VBELN = I_LIKP-VBELN
      and   a~vtweg in s_vtweg
      and   c~SPRAS = 'EN'
      AND   B~SPRAS = 'EN'.


      IF SY-SUBRC = 0.

      SELECT   VBELN
               POSNR
               MATNR
               CHARG
               KWMENG
               NETWR
               MWSBP
        FROM VBAP
        INTO TABLE I_VBAP
        FOR ALL ENTRIES IN I_LIPS
        WHERE VBELN = I_LIPS-VGBEL
        AND   POSNR = I_LIPS-VGPOS.
      ELSE.
        MESSAGE 'No records found' TYPE 'E'.
      ENDIF.

  ELSE.
    MESSAGE 'No records found' TYPE 'E'.
  ENDIF.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  process_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_data .

LOOP AT i_lips.

  i_final-VBELN = i_lips-vbeln.
  i_final-posnr = i_lips-posnr.
  i_final-vgbel = i_lips-vgbel.
  i_final-vgpos = i_lips-vgpos.
  i_final-MATNR = i_lips-matnr.
  i_final-lfimg = i_lips-lfimg.
  I_FINAL-MAKTX = I_LIPS-MAKTX.
  i_final-VTWEG    = i_lips-VTWEG.
  i_final-VTEXT    = i_lips-VTEXT.

  READ TABLE i_likp with key VBELN = I_lips-VBELN.
  IF SY-SUBRC = 0.
    I_FINAL-KUNNR = I_LIKP-KUNNR.
    I_FINAL-NAME1 = I_LIKP-NAME1.
    I_FINAL-LFDAT = I_LIKP-LFDAT.
    i_final-ORT01 = i_likp-ORT01.
  ENDIF.

  READ TABLE I_VBAP WITH KEY VBELN = I_LIPS-VGBEL
                             POSNR = I_LIPS-VGPOS.
  IF SY-SUBRC = 0.

    I_FINAL-KWMENG = I_VBAP-KWMENG.
    I_FINAL-NETWR  = I_VBAP-NETWR.
    I_FINAL-MWSBP  = I_VBAP-MWSBP.

  ENDIF.


  I_FINAL-DSVAL = ( I_FINAL-NETWR + I_FINAL-MWSBP ) / I_FINAL-KWMENG.
  I_FINAL-DSVAL = I_FINAL-DSVAL * I_FINAL-LFIMG.

  APPEND I_FINAL.

ENDLOOP.



ENDFORM.                    " process_data
*&---------------------------------------------------------------------*
*&      Form  bulid_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM bulid_alv .

  REFRESH I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VBELN'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.


  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'KUNNR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Customer Code'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'NAME1'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Customer Name'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'ORT01'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'City'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.



  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VTWEG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Distribution Code'.
   W_FIELDCAT-seltext_m = 'Dist Code'.
   W_FIELDCAT-seltext_s = 'D code'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VTEXT'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Distribution Channel'.
  W_FIELDCAT-seltext_m = 'Dist Channel'.
   W_FIELDCAT-seltext_s = 'D Channel'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'LFDAT'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery date'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VGBEL'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Sales Order Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'VGPOS'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Line Item'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'MATNR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Material Number'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'KWMENG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Sales Order Quantity'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'NETWR'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Net Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'MWSBP'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Total Tax Sales Order Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.

  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'LFIMG'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Quantity'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.


  CLEAR W_FIELDCAT.
  W_FIELDCAT-FIELDNAME = 'DSVAL'.
  W_FIELDCAT-TABNAME   = 'I_FINAL'.
  W_FIELDCAT-SELTEXT_L = 'Delivery Value'.
*  W_FIELDCAT-COL_POS   = 1.
  W_FIELDCAT-NO_ZERO   = 'X'.
*  W_FIELDCAT-OUTPUTLEN = 5.
  APPEND W_FIELDCAT TO I_FIELDCAT.



ENDFORM.                    " bulid_alv
*&---------------------------------------------------------------------*
*&      Form  display_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .

  DATA : G_SYUCOMM  TYPE SY-UCOMM.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING
      I_CALLBACK_PROGRAM                = SY-REPID
*      I_CALLBACK_PF_STATUS_SET          = 'STDPOPBX_FULLSCREEN'
*      I_CALLBACK_USER_COMMAND           = 'USER_COMMAND'
*      I_CALLBACK_TOP_OF_PAGE            = 'TOP_OF_PAGE'
      IT_FIELDCAT                       = I_FIELDCAT
      I_DEFAULT                         = 'X'
      I_SAVE                            = 'A'
     TABLES
       T_OUTTAB                          = I_FINAL
    EXCEPTIONS
      PROGRAM_ERROR                     = 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.


ENDFORM.                    " display_alv
 

Tuesday 20 December 2011

CUSOMER LEDGER REPORT - Z REPORT

CUSOMER LEDGER REPORT - Z REPORT

INPUT SCREEN :
 
 OUTPUT SCREEN :
                            
REPORT  ZCLEDGER LINE-SIZE 145..
"* ABAP Z REPORT

TYPE-POOLS: SLIS.

TABLES: KNA1,
BKPF,
BSEG.

*----------------------------------------------------------------------*
*                      DECLARATION FOR ALV GRID.                       *
*----------------------------------------------------------------------*
DATA: REPORT_ID  LIKE SY-REPID.
DATA: I_LAYOUT   TYPE SLIS_LAYOUT_ALV.
DATA: I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.


TYPES:BEGIN OF TY_BKPF,
      BUKRS TYPE BKPF-BUKRS,
      BELNR TYPE BKPF-BELNR,
      GJAHR TYPE BKPF-GJAHR,
      BUDAT TYPE BKPF-BUDAT,
      BLART TYPE BKPF-BLART,
      END OF TY_BKPF.

TYPES:BEGIN OF TY_BSEG,
      BUKRS TYPE BSEG-BUKRS,
      BELNR TYPE BSEG-BELNR,
      GJAHR TYPE BSEG-GJAHR,
      KUNNR TYPE BSEG-KUNNR,
      BUZID TYPE BSEG-BUZID,
      AUGBL TYPE BSEG-AUGBL,
      SHKZG TYPE BSEG-SHKZG,
      WRBTR TYPE BSEG-WRBTR,
      END OF TY_BSEG.

TYPES:BEGIN OF TY_FINAL,
      ZUONR   LIKE BSEG-ZUONR,
      BELNR   LIKE BSEG-BELNR,
      BLART   LIKE BKPF-BLART,
      UMSKZ   LIKE BSEG-UMSKZ,
      SGTXT   LIKE BSEG-SGTXT,
      BLDAT   LIKE BSEG-BZDAT,
      DEBIT   LIKE BSEG-WRBTR,
      CREDIT  LIKE BSEG-WRBTR,
      XBLNR   LIKE BSID-XBLNR,
      AUGBL   LIKE BSID-AUGBL,
       AUGBL2   LIKE BSID-AUGBL,
       XBLNR2 LIKE BSID-XBLNR,


      END OF TY_FINAL.
TYPES:BEGIN OF TY_BSEG2,
      BUKRS TYPE BSEG-BUKRS,
      BELNR TYPE BSEG-BELNR,
      GJAHR TYPE BSEG-GJAHR,
      KUNNR TYPE BSEG-KUNNR,
      BLDAT TYPE BSAD-BLDAT,
      AUGBL TYPE BSEG-AUGBL,
      SHKZG TYPE BSEG-SHKZG,
      WRBTR TYPE BSEG-WRBTR,
      ZUONR TYPE BSEG-ZUONR,
      SGTXT TYPE BSEG-SGTXT,
      WRBTR1 TYPE BSEG-WRBTR,
      WRBTR2 TYPE BSEG-WRBTR,
      END OF TY_BSEG2.
TYPES:BEGIN OF TY_SUM,
      KUNNR LIKE KNA1-KUNNR,
      WRBTR1 LIKE BSID-WRBTR,
      WRBTR2 LIKE BSID-WRBTR,
      END OF TY_SUM.

DATA:IT_BKPF TYPE STANDARD TABLE OF TY_BKPF,
     IT_BSEG TYPE STANDARD TABLE OF TY_BSEG,
     IT_BSEG1 TYPE STANDARD TABLE OF TY_BSEG,
     IT_BSEG2 TYPE STANDARD TABLE OF TY_BSEG,
     IT_FINAL TYPE STANDARD TABLE OF TY_FINAL.

DATA:WA_BKPF TYPE TY_BKPF,
     WA_BSEG TYPE TY_BSEG,
     WA_BSEG1 TYPE TY_BSEG,
     WA_BSEG3 TYPE TY_BSEG,
     WA_BSEG2 TYPE TY_BSEG2,
*     WA_BSAD TYPE TY_BSAD,
     WA_FINAL TYPE TY_FINAL,
     WA_SUM TYPE TY_SUM.
DATA : BEGIN OF ITAB OCCURS 0,
       BUDAT LIKE BSID-BUDAT, "posting date
KUNNR LIKE BSID-KUNNR, "customer no
WRBTR LIKE BSID-WRBTR, "amount in document
SHKZG LIKE BSID-SHKZG, "debit/credit indicator
SHKZG1 LIKE BSID-SHKZG, "debit/credit indicator

BUKRS LIKE BSID-BUKRS,
BELNR(30),
BLART LIKE BSID-BLART,
BLDAT LIKE BSID-BLDAT,
XBLNR LIKE BSID-XBLNR,
XBLNR2 LIKE BSID-XBLNR,

ZUONR LIKE BSID-ZUONR,
SGTXT LIKE BSID-SGTXT,
WRBTR_S LIKE BSID-WRBTR, "amount in document
WRBTR_H LIKE BSID-WRBTR, "amount in document
AMOUNT LIKE  BSID-WRBTR,
AUGBL LIKE BSID-AUGBL,
BUDAT1 LIKE BSID-BUDAT,
AUGDT LIKE BSID-AUGDT,
*SGTXT LIKE BSID-SGTXT,
GJAHR LIKE BSID-GJAHR,
BSCHL LIKE BSID-BSCHL,
BUZEI LIKE BSID-BUZEI,
CHE_NO LIKE BSID-XBLNR,
VBELN LIKE BSID-VBELN,
NAME1 LIKE KNA1-NAME1,
XRAGL LIKE BSID-XRAGL,
AUGBL2 LIKE BSID-AUGBL,
XNEGP LIKE BSID-XNEGP ,
HKONT LIKE BSAD-HKONT,
XBLNR1 LIKE BSAD-XBLNR,
       END OF ITAB.
DATA : ITAB1 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : ITAB2 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : ITAB3 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : ITAB4 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : ITAB5 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : ITAB6 LIKE ITAB OCCURS 0 WITH HEADER LINE.
DATA : BEGIN OF FINAL OCCURS 0,
        BUDAT LIKE BSID-BUDAT,
        ZUONR LIKE BSID-ZUONR,
        WRBTR_S LIKE BSID-WRBTR ,
        XBLNR1  LIKE BSID-XBLNR,
        AUGDT   LIKE BSID-AUGDT,
        WRBTR_H LIKE BSID-WRBTR,
        VBELN LIKE BSID-VBELN,
        BELNR LIKE BSID-BELNR,
        NAME1 LIKE KNA1-NAME1,
        KUNNR LIKE KNA1-KUNNR,
        BUDAT1 LIKE BSID-BUDAT,
        BLART LIKE BSID-BLART,
        BSCHL LIKE BSID-BSCHL,
        AUGBL LIKE BSID-AUGBL,
       END OF FINAL.
DATA:DATE1 TYPE SY-DATUM,
CLO LIKE BSID-WRBTR,
SUM_S LIKE BSID-WRBTR,
SUM_H LIKE BSID-WRBTR.
.
DATA : KEYBALANCE TYPE TABLE OF  BAPI3007_3 WITH HEADER LINE.
DATA : AMT TYPE P DECIMALS 2.
DATA : DEBIT_TOT TYPE BSAD-WRBTR.
DATA : CREDIT_TOT TYPE BSAD-WRBTR.
DATA : CLOSE_AMT TYPE P DECIMALS 2.

************************************************************************
*Parameters
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK MYSEL WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: P_BUKRS FOR BSEG-BUKRS NO INTERVALS OBLIGATORY.
SELECT-OPTIONS: S_KUNNR FOR BSEG-KUNNR NO-EXTENSION NO INTERVALS
OBLIGATORY.
SELECT-OPTIONS: S_BUDAT FOR BKPF-BUDAT OBLIGATORY.
*  PARAMETERS    : P_GJAHR TYPE BKPF-GJAHR OBLIGATORY.
SELECTION-SCREEN END OF BLOCK MYSEL.
DATA: V_BK(4).
DATA: T_KUNNR LIKE S_KUNNR OCCURS 0 WITH HEADER LINE.

************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
  REPORT_ID = SY-REPID.


******OPENING BALANCE CALCULATION
  DATE1 = S_BUDAT-LOW - 1.

  LOOP AT P_BUKRS.

    CALL FUNCTION 'BAPI_AR_ACC_GETKEYDATEBALANCE'
      EXPORTING
        COMPANYCODE  = P_BUKRS-LOW
        CUSTOMER     = S_KUNNR-LOW
        KEYDATE      = DATE1
        BALANCESPGLI = 'X'
      TABLES
        KEYBALANCE   = KEYBALANCE[].

    READ TABLE KEYBALANCE WITH KEY SP_GL_IND = ''.
    IF SY-SUBRC = 0.
    ELSE.
      CLEAR KEYBALANCE-LC_BAL.
    ENDIF.

    AMT = AMT + KEYBALANCE-LC_BAL.
    CLEAR:P_BUKRS-LOW.
  ENDLOOP.

*  ****************************opening balance okkk...
***************OPEN ITEM FROM BSID.
loop at p_bukrs.
  SELECT KUNNR WRBTR SHKZG BUDAT BLDAT BLART AUGDT  ZUONR AUGBL
  SGTXT BELNR BSCHL GJAHR XNEGP HKONT
*BSCHL ,ITAB2-BSCHL

    INTO (ITAB2-KUNNR ,ITAB2-WRBTR ,ITAB2-SHKZG ,
  ITAB2-BUDAT ,ITAB2-BLDAT ,
  ITAB2-BLART,
  ITAB2-AUGDT,ITAB2-ZUONR,
  ITAB2-AUGBL,ITAB2-SGTXT,ITAB2-BELNR,ITAB2-BSCHL,ITAB2-GJAHR,
ITAB2-XNEGP,ITAB2-HKONT) FROM BSID
    WHERE KUNNR = S_KUNNR-LOW
    AND BUKRS = P_BUKRS-LOW
    AND BUDAT IN S_BUDAT.
    APPEND ITAB2.
  ENDSELECT.
LOOP AT ITAB2.
IF ITAB2-SHKZG = 'H'.
ITAB2-WRBTR_H = ITAB2-WRBTR * -1.
MODIFY ITAB2.
ELSE.
IF ITAB2-BLART = 'J1' AND ITAB2-SHKZG = 'S' AND ITAB2-BSCHL = '04' .
ITAB2-WRBTR_H = ITAB2-WRBTR * 1.
MODIFY ITAB2.
ELSE.
ITAB2-WRBTR_S = ITAB2-WRBTR.
MODIFY ITAB2.
ENDIF.
ENDIF.
ENDLOOP.
*************COLLECTION FROM BSAD
  SELECT KUNNR WRBTR SHKZG BUDAT BLDAT BLART AUGDT  ZUONR AUGBL
  SGTXT BELNR XRAGL BSCHL XBLNR GJAHR XNEGP HKONT

    INTO (ITAB-KUNNR ,ITAB-WRBTR ,ITAB-SHKZG ,
  ITAB-BUDAT ,ITAB-BLDAT ,
  ITAB-BLART,
  ITAB-AUGDT,ITAB-ZUONR,
  ITAB-AUGBL,ITAB-SGTXT,ITAB-BELNR,ITAB-XRAGL,ITAB-BSCHL,ITAB-XBLNR,
ITAB-GJAHR,ITAB-XNEGP,ITAB-HKONT) FROM BSAD
    WHERE KUNNR = S_KUNNR-LOW
    AND BUKRS  = P_BUKRS-LOW

    AND BUDAT IN S_BUDAT.
    APPEND ITAB.
  ENDSELECT.
*ENDLOOP.
DATA : A1 LIKE BSID-AUGBL.
LOOP AT ITAB.

A1 = ITAB-BELNR.
IF ITAB-AUGBL = A1 AND ITAB-SHKZG = 'H'.
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'DG'.
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'J1' AND ITAB-BSCHL = '07' AND ITAB-SHKZG = 'S'.  .
ITAB-WRBTR_S = ITAB-WRBTR * 1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'J1' AND ITAB-SHKZG = 'H' AND ITAB-BSCHL <> '07'   .
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.

ELSEIF ITAB-BLART = 'J1' AND ITAB-SHKZG = 'S' AND ITAB-BSCHL <> '07' .
ITAB-WRBTR_H = ITAB-WRBTR * 1.
MODIFY ITAB.

ELSEIF ITAB-BLART = 'AB' AND ITAB-SHKZG = 'S'  .
ITAB-WRBTR_S = ITAB-WRBTR * 1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'AB' AND ITAB-SHKZG = 'H'  .
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.

ELSE.
IF ITAB-BLART = 'LU' AND ITAB-BSCHL = '16' AND ITAB-SHKZG = 'S'.
ITAB-WRBTR_S = ITAB-WRBTR * -1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'LU' AND ITAB-BSCHL = '16' AND ITAB-SHKZG = 'H'.
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'RV' AND ITAB-BSCHL <> '01'.
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'LU' AND  ITAB-BSCHL = '06'
AND ITAB-SHKZG = 'S'.
ITAB-WRBTR_H = ITAB-WRBTR * 1.
MODIFY ITAB.
ELSEIF ITAB-BLART = 'LU' AND  ITAB-BSCHL = '05'
AND ITAB-SHKZG = 'S'.
ITAB-WRBTR_H = ITAB-WRBTR * -1.
MODIFY ITAB.

ELSE.
ITAB-WRBTR_S = ITAB-WRBTR.
MODIFY ITAB.

ENDIF.
ENDIF.
ENDLOOP.
LOOP AT ITAB.
IF ITAB-WRBTR_H <> 0 AND ITAB-SHKZG = 'H' AND ITAB-BSCHL = '15'.

SELECT KUNNR WRBTR SHKZG BUDAT BLDAT BLART AUGDT  ZUONR AUGBL
  SGTXT BELNR XRAGL BSCHL XBLNR GJAHR XNEGP HKONT

    INTO (ITAB3-KUNNR ,ITAB3-WRBTR_H ,ITAB3-SHKZG ,
  ITAB3-BUDAT ,ITAB3-BLDAT ,
  ITAB3-BLART,
  ITAB3-AUGDT,ITAB3-ZUONR,
  ITAB3-AUGBL,ITAB3-SGTXT,ITAB3-BELNR,ITAB3-XRAGL,ITAB3-BSCHL,
ITAB3-XBLNR,
ITAB3-GJAHR,ITAB3-XNEGP,ITAB3-HKONT) FROM BSAD
    WHERE KUNNR = ITAB-KUNNR
    AND BUKRS = P_BUKRS-LOW
    AND AUGBL = ITAB-AUGBL
    AND BSCHL <> '15'.
    APPEND ITAB3.
  ENDSELECT.
  ENDIF.
ENDLOOP.

DATA : NAME1 LIKE KNA1-NAME1,
       ORT01 LIKE KNA1-ORT01.
SELECT SINGLE NAME1 ORT01 INTO (NAME1,ORT01) FROM KNA1
WHERE KUNNR = S_KUNNR-LOW
AND SPRAS = 'EN'.

ENDLOOP.
LOOP AT ITAB.
IF ITAB-WRBTR_H <> 0 AND ITAB-SHKZG = 'H' AND ITAB-BSCHL = '15'.
DELETE ITAB.
ENDIF.
ENDLOOP.
LOOP AT ITAB3.
IF ITAB3-SHKZG = 'H'.
ITAB3-WRBTR_H = ITAB3-WRBTR_H * 1.
MODIFY ITAB3.
ELSE.
ITAB3-WRBTR_H = ITAB3-WRBTR_H * -1.
MODIFY ITAB3.
ENDIF.
ENDLOOP.
APPEND LINES OF ITAB3 TO ITAB2.
APPEND LINES OF ITAB TO ITAB2.
*LOOP AT ITAB2.
*WRITE :/  ITAB2-KUNNR,ITAB2-WRBTR_S,ITAB2-WRBTR_H,ITAB2-SHKZG,
*ITAB2-BLART,ITAB2-BSCHL,
*ITAB2-AUGBL,
*ITAB2-BELNR.
*AT LAST.
*SUM.
*WRITE : / ITAB2-WRBTR_S,ITAB2-WRBTR_H.
*ENDAT.
*ENDLOOP.
SORT ITAB2 BY AUGBL.
SORT ITAB2 BY BUDAT AUGBL .
 SKIP.
  WRITE : / ITAB2-KUNNR.
  ULINE.
  SKIP.
  SORT FINAL BY  AUGDT .
  SKIP.
  SKIP.
  WRITE : /2 ' XYZ LIMITED.'.
  SKIP.
  WRITE : /2 ' Party Code :' , 16 S_KUNNR-LOW ,
          42 'Party Name: ',   NAME1.
  WRITE :/42 'City :       ', ort01.
  skip.
  write :/2 '  Run Period : ', s_budat-low , ' to  ', s_budat-high.
  SKIP.
  ULINE.
  WRITE : /1 SY-VLINE ,2 'Opening Balance as on Date ',s_BUDAT-LOW , ' '
 , 50  AMT,         145 SY-VLINE.
  ULINE.
  WRITE : /1 SY-VLINE ,2 'Post. Date',
           13 SY-VLINE, 16 'Comm.Inv No' ,
           31 SY-VLINE ,38 'Debit' ,
           49 SY-VLINE ,50 '     Cheque No' CENTERED,
           70 SY-VLINE, 71 'Cheque Date',
           83 SY-VLINE, 84 '    Credit',
           100 SY-VLINE, 101 'Comm.Inv No',
           115 SY-VLINE , 116 'Rec.DocNo',
           127 sy-vline, 128 'Doc No',
           140 sy-vline, 141 'D.T.',
           145 sy-vline..
  ULINE.
  loop at itab2.
  if itab2-wrbtr_h <> 0.
     itab2-budat = itab2-augdt.
     itab2-vbeln = itab2-zuonr.
     modify itab2.
     ELSE.
     ITAB2-AUGBL = SPACE.
     MODIFY ITAB2.
endif.
if itab2-wrbtr_s <> 0.
   itab2-augdt = space.
   itab2-vbeln = space.
   modify itab2.
else.
    itab2-zuonr = space.
    itab2-budat = itab2-augdt.
   modify itab2.
endif.


 SELECT SINGLE ZUONR INTO ITAB2-che_no FROM BSEG
   WHERE BELNR = ITAB2-augbl
   AND GJAHR = ITAB2-GJAHR
   AND BUKRS = P_BUKRS-LOW.
   modify itab2.
  endloop.
  SORT ITAB2 BY AUGBL.
  SORT ITAB2 BY BUDAT AUGBL.
  DELETE ITAB2 WHERE BUDAT < S_BUDAT-LOW AND BUDAT <> '00000000'.
  LOOP AT ITAB2 .
*WHERE BLART <> 'LU' AND BSCHL <> '15'.
    WRITE : /1 SY-VLINE ,2  ITAB2-BUDAT,
    13 SY-VLINE ,14 ITAB2-ZUONR,
     31 SY-VLINE ,32 ITAB2-WRBTR_S ,
     49 SY-VLINE ,50 ITAB2-che_no,
     70 SY-VLINE ,71 ITAB2-AUGDT,
    83 SY-VLINE ,84  ITAB2-WRBTR_H,
    100 SY-VLINE ,101 ITAB2-VBELN,
     115 SY-VLINE,116 ITAB2-AUGBL,
    127 SY-VLINE ,128 itab2-BELNR,140 SY-VLINE ,141 itab2-BLART ,145
SY-VLINE..
 AT LAST.
      ULINE.
      SUM.
      WRITE : /1 SY-VLINE ,2 'TOTAL :',
             31 SY-VLINE ,32 ITAB2-WRBTR_S ,49 SY-VLINE ,
             83 SY-VLINE ,84 ITAB2-WRBTR_H,100 sy-vline,
             145 SY-VLINE .
      ULINE.
    ENDAT.
  ENDLOOP.
  LOOP AT ITAB2 .
    SUM_S = SUM_S + ITAB2-WRBTR_S.
    SUM_H = SUM_H + ITAB2-WRBTR_H.
  ENDLOOP.
  CLO = AMT + SUM_S + SUM_H.

  WRITE : /1 SY-VLINE ,2 'Closing Balance as on Date ',
  s_BUDAT-HIGH , ' :  ' , 84 clo,145 SY-VLINE .
  ULINE.