cancel
Showing results for 
Search instead for 
Did you mean: 

drill down report

Former Member
0 Kudos

hi all,

please tell me how we develope a drill don report in alv to so sort and sub total

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi Ankita,

You can create ALV report by using F.M. 'REUSE_ALV_GRID_DISPLAY'.

When you get the output of the report in ALV format, you can create a layout for it. There are options available for ALV grid to change layout, select layout nad save layout.

You can save the layout in the way you want by giving sum, sort criteria and so on and keep it as default layout. So the next time you execute the report, the default layout will come.

Hope this is useful.

Regards,

Saba

Former Member
0 Kudos

HI ,

THANKS FOR YOUR RPLY

Actully i want a report in dill down format or intrective format in alv only but i dont have any idea for that.

Former Member
0 Kudos

please follow the below code

TYPE-POOLS: slis.

TYPES:

BEGIN OF TT_EKBE,

EBELN TYPE EBELN,

EBELP TYPE EBELP,

BELNR TYPE MBLNR,

BUZEI TYPE MBLPO,

BWART TYPE BWART,

LFBNR TYPE LFBNR,

LFPOS TYPE LFPOS,

XBLNR TYPE XBLNR1,

CPUDT TYPE CPUDT,

CPUTM TYPE CPUTM,

MATNR TYPE MATNR,

WERKS TYPE WERKS_D,

END OF TT_EKBE,

BEGIN OF TT_TIME,

WERKS TYPE WERKS_D,

AVG_TIME TYPE STRING,

END OF TT_TIME,

BEGIN OF TT_FINAL,

WERKS TYPE WERKS_D,

BELNR TYPE MBLNR,

BUZEI TYPE MBLPO,

EBELN TYPE EBELN,

EBELP TYPE EBELP,

MATNR TYPE MATNR,

MAKTX TYPE MAKTX,

LIFNR TYPE ELIFN,

CPUDT TYPE CPUDT,

CPUTM TYPE CPUTM,

LFBNR TYPE LFBNR,

LFPOS TYPE LFPOS,

XBLNR TYPE XBLNR1,

CPUDT2 TYPE CPUDT,

CPUTM2 TYPE CPUTM,

*Changed by Yogendra on 2008/10/07

  • LV_DAYS TYPE I,

LV_DAYS TYPE P DECIMALS 2,

*End of changes

LV_TIME TYPE STRING,

END OF TT_FINAL,

BEGIN OF TT_EKKO,

EBELN TYPE EBELN,

LIFNR TYPE ELIFN,

END OF TT_EKKO,

BEGIN OF TT_MAKT,

MATNR TYPE MATNR,

MAKTX TYPE MAKTX,

END OF TT_MAKT.

DATA:

GV_CPUDT TYPE CPUDT,

GV_WERKS TYPE WERKS_D,

GV_MATNR TYPE MATNR,

GT_EKBE TYPE TABLE OF TT_EKBE,

GS_EKBE TYPE TT_EKBE,

GT_BWART TYPE RANGE OF BWART,

GS_BWART LIKE LINE OF GT_BWART,

GT_MAKT TYPE TABLE OF TT_MAKT,

GS_MAKT TYPE TT_MAKT,

GT_TIME TYPE TABLE OF TT_TIME,

GS_TIME TYPE TT_TIME,

GT_EKKO TYPE TABLE OF TT_EKKO,

GS_EKKO TYPE TT_EKKO,

GT_EKBE_105 TYPE TABLE OF TT_EKBE,

GS_EKBE_105 TYPE TT_EKBE.

DATA:

GV_LAND1 TYPE LAND1,

GT_FINAL TYPE TABLE OF TT_FINAL,

GT_FINAL2 TYPE TABLE OF TT_FINAL,

GS_FINAL TYPE TT_FINAL,

gs_fcat TYPE slis_fieldcat_alv,

gt_fcat TYPE slis_t_fieldcat_alv,

gt_sort TYPE SLIS_T_SORTINFO_ALV,

gs_sort TYPE slis_sortinfo_alv,

gs_layout TYPE slis_layout_alv,

gt_event TYPE slis_t_event,

gv_prog type sy-cprog.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:

SO_CPUDT FOR GV_CPUDT OBLIGATORY,

SO_WERKS FOR GV_WERKS OBLIGATORY,

SO_MATNR FOR GV_MATNR.

SELECTION-SCREEN END OF BLOCK B1.

DATA:

GS_WERKS_SO LIKE LINE OF SO_WERKS.

INITIALIZATION.

gv_prog = sy-cprog.

**---Authorization check for T-code

AUTHORITY-CHECK OBJECT 'ZPRCHK_NEW' :

ID 'TCD' FIELD sy-tcode

ID 'BUKRS' DUMMY

ID 'PRCTR' DUMMY

ID 'SPART' DUMMY

ID 'WERKS' DUMMY

ID 'VKORG' DUMMY

ID 'EKORG' DUMMY.

IF sy-subrc NE 0.

MESSAGE i000(vz) WITH TEXT-006 sy-tcode .

LEAVE PROGRAM.

ENDIF.

GS_BWART-sign = 'I'.

GS_BWART-option = 'EQ'.

GS_BWART-low = '103'.

APPEND GS_BWART TO GT_BWART.

GS_BWART-sign = 'I'.

GS_BWART-option = 'EQ'.

GS_BWART-low = '105'.

APPEND GS_BWART TO GT_BWART.

START-OF-SELECTION.

IF NOT SO_WERKS IS INITIAL.

LOOP AT SO_WERKS INTO GS_WERKS_SO.

CALL FUNCTION 'ZCAGL_COUNTRYCODE'

EXPORTING

IM_WERKS = GS_WERKS_SO-LOW

  • IM_SPART =

  • IM_PRCTR =

  • im_bukrs =

IMPORTING

e_land1 = GV_LAND1

.

IF GV_LAND1 NE 'IN'.

MESSAGE i000(8i) WITH TEXT-139 GS_WERKS_SO-LOW TEXT-140 .

LEAVE PROGRAM.

ELSE.

AUTHORITY-CHECK OBJECT 'ZPRCHK_NEW' :

ID 'WERKS' FIELD GS_WERKS_SO-LOW

ID 'TCD' DUMMY

ID 'BUKRS' DUMMY

ID 'PRCTR' DUMMY

ID 'SPART' DUMMY

ID 'VKORG' DUMMY

ID 'EKORG' DUMMY.

IF sy-subrc NE 0.

MESSAGE i000(vz) WITH TEXT-007 GS_WERKS_SO-LOW.

LEAVE PROGRAM.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

PERFORM GET_DATA.

PERFORM SEG_MOV_TYP.

PERFORM OUTPUT_DISPLAY.

PERFORM ALV_LAYOUT.

PERFORM sub_get_event.

PERFORM DISPALY_ALV.

&----


*& Form GET_DATA

&----


-

  • text

----


  • --> p1 text

  • <-- p2 text

----


form GET_DATA .

SELECT EBELN EBELP BELNR BUZEI BWART LFBNR LFPOS XBLNR CPUDT CPUTM MATNR WERKS FROM EKBE INTO TABLE GT_EKBE

WHERE BUDAT IN SO_CPUDT

AND BWART IN GT_BWART

AND MATNR IN SO_MATNR

AND WERKS IN SO_WERKS.

IF NOT GT_EKBE[] IS INITIAL.

**To fetch vendor code

SELECT EBELN LIFNR FROM EKKO INTO TABLE GT_EKKO

FOR ALL ENTRIES IN GT_EKBE

WHERE EBELN = GT_EKBE-EBELN.

**To fetch Material Description

SELECT MATNR MAKTX FROM MAKT INTO TABLE GT_MAKT

FOR ALL ENTRIES IN GT_EKBE

WHERE MATNR = GT_EKBE-MATNR.

ELSE.

MESSAGE TEXT-234 TYPE 'E'.

ENDIF.

endform. " GET_DATA

&----


*& Form SEG_MOV_TYP

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form SEG_MOV_TYP .

SORT GT_EKBE BY BWART.

GT_EKBE_105[] = GT_EKBE[].

**Segregating document with 103 movement type

DELETE GT_EKBE WHERE BWART EQ '105'.

**Segregating document with 105 movement type

DELETE GT_EKBE_105 WHERE BWART EQ '103'.

endform. " SEG_MOV_TYP

&----


*& Form OUTPUT_DISPLAY

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form OUTPUT_DISPLAY .

DATA:

LV_TIME TYPE FAHZTD,

LV_TIME_CHANGE(10) TYPE C,

LV_TIME1 TYPE STRING,

LV_TIME2 TYPE STRING,

LV_TIME_DAY TYPE STRING,

LV_TIME_DAY_INT TYPE P,

LV_TIME_DAY1(7) TYPE N,

LV_TIME_DAY2 TYPE N,

LV_TIME_MOD TYPE I.

LOOP AT GT_EKBE INTO GS_EKBE.

READ TABLE GT_EKBE_105 INTO GS_EKBE_105 WITH KEY LFBNR = GS_EKBE-BELNR

LFPOS = GS_EKBE-BUZEI.

IF SY-SUBRC = 0.

READ TABLE GT_EKKO INTO GS_EKKO WITH KEY EBELN = GS_EKBE-EBELN.

CLEAR:

LV_TIME,

LV_TIME_DAY,

LV_TIME_CHANGE,

LV_TIME_DAY1,

LV_TIME_DAY2,

LV_TIME_MOD.

**TO fetch number of Hrs:Min between to date and time

CALL FUNCTION 'SD_CALC_DURATION_FROM_DATETIME'

EXPORTING

i_date1 = GS_EKBE-CPUDT

i_time1 = GS_EKBE-CPUTM

i_date2 = GS_EKBE_105-CPUDT

i_time2 = GS_EKBE_105-CPUTM

IMPORTING

E_TDIFF = LV_TIME

  • E_DATE2_EARLY =

EXCEPTIONS

INVALID_DATETIME = 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.

CALL FUNCTION 'CONVERSION_EXIT_TSTRN_OUTPUT'

EXPORTING

input = LV_TIME

IMPORTING

OUTPUT = LV_TIME_CHANGE

.

REPLACE ALL OCCURRENCES OF REGEX ',' IN LV_TIME_CHANGE WITH SPACE.

  • GS_FINAL-LV_TIME = LV_TIME_CHANGE.

SPLIT LV_TIME_CHANGE AT ':' INTO LV_TIME1 LV_TIME2.

CONDENSE LV_TIME1.

LV_TIME_CHANGE = LV_TIME1.

IF LV_TIME1 = SPACE.

LV_TIME1 = 0.

ENDIF.

IF LV_TIME2 = SPACE.

LV_TIME2 = 0.

ENDIF.

CONCATENATE LV_TIME1 ':' LV_TIME2 INTO GS_FINAL-LV_TIME.

LV_TIME_DAY_INT = LV_TIME_CHANGE / 24.

LV_TIME_DAY = LV_TIME_DAY_INT.

SPLIT LV_TIME_DAY AT '.' INTO LV_TIME_DAY1 LV_TIME_DAY2.

LV_TIME_MOD = LV_TIME_CHANGE MOD 24.

IF LV_TIME_MOD GT 0.

LV_TIME_DAY = LV_TIME_DAY1 + 1.

ENDIF.

IF LV_TIME_DAY = 1.

LV_TIME_DAY = 0.

ENDIF.

IF LV_TIME < 100.

LV_TIME = 000.

ENDIF.

READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = GS_EKBE-MATNR.

IF SY-SUBRC = 0.

GS_FINAL-MAKTX = GS_MAKT-MAKTX.

ENDIF.

GS_FINAL-BELNR = GS_EKBE-BELNR.

GS_FINAL-BUZEI = GS_EKBE-BUZEI.

GS_FINAL-EBELN = GS_EKBE-EBELN.

GS_FINAL-EBELP = GS_EKBE-EBELP.

GS_FINAL-MATNR = GS_EKBE-MATNR.

GS_FINAL-LIFNR = GS_EKKO-LIFNR.

GS_FINAL-CPUDT = GS_EKBE-CPUDT.

GS_FINAL-CPUTM = GS_EKBE-CPUTM.

GS_FINAL-LFBNR = GS_EKBE_105-BELNR.

GS_FINAL-LFPOS = GS_EKBE_105-BUZEI.

GS_FINAL-CPUDT2 = GS_EKBE_105-CPUDT.

GS_FINAL-CPUTM2 = GS_EKBE_105-CPUTM.

GS_FINAL-XBLNR = GS_EKBE-XBLNR.

GS_FINAL-WERKS = GS_EKBE-WERKS.

GS_FINAL-LV_DAYS = LV_TIME_DAY.

APPEND GS_FINAL TO GT_FINAL.

ENDIF.

ENDLOOP.

SORT GT_FINAL BY WERKS BELNR BUZEI.

GT_FINAL2[] = GT_FINAL[].

PERFORM TIME_CALC.

endform. " OUTPUT_DISPLAY

&----


*& Form ALV_LAYOUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form ALV_LAYOUT .

gs_fcat-fieldname = 'WERKS'.

gs_fcat-no_out = 'X'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'WERKS'.

gs_fcat-key = ' '.

gs_fcat-no_out = ' '.

gs_fcat-seltext_m = text-115.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'EBELN'.

gs_fcat-seltext_m = text-103.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'EBELP'.

gs_fcat-seltext_m = text-104.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'MATNR'.

gs_fcat-seltext_m = text-105.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'MAKTX'.

gs_fcat-seltext_m = text-116.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LIFNR'.

gs_fcat-seltext_m = text-106.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'XBLNR'.

gs_fcat-seltext_m = text-117.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'BELNR'.

gs_fcat-seltext_m = text-101.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'BUZEI'.

gs_fcat-seltext_m = text-102.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUDT'.

gs_fcat-seltext_m = text-107.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUTM'.

gs_fcat-seltext_m = text-108.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LFBNR'.

gs_fcat-seltext_m = text-113.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LFPOS'.

gs_fcat-seltext_m = text-114.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUDT2'.

gs_fcat-seltext_m = text-109.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUTM2'.

gs_fcat-seltext_m = text-110.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LV_DAYS'.

gs_fcat-seltext_l = text-111.

gs_fcat-do_sum = 'C'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LV_TIME'.

gs_fcat-seltext_l = text-112.

gs_fcat-do_sum = 'C'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_sort-spos = '1'.

gs_sort-fieldname = 'WERKS'.

gs_sort-up = 'X'.

gs_sort-subtot = 'X'.

APPEND gs_sort TO gT_sort.

gs_layout-no_totalline = 'X'.

endform. " ALV_LAYOUT

&----


*& Form DISPALY_ALV

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form DISPALY_ALV .

IF NOT GT_FINAL[] IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = gv_prog

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = 'USER'

  • I_CALLBACK_TOP_OF_PAGE = 'TOP'

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE = Text-A00

  • I_GRID_SETTINGS =

IS_LAYOUT = gs_layout

IT_FIELDCAT = gt_fcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

IT_SORT = GT_SORT

  • IT_FILTER =

  • IS_SEL_HIDE =

I_DEFAULT = 'X'

I_SAVE = 'A'

  • IS_VARIANT =

IT_EVENTS = gt_event

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = gt_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.

ELSE.

MESSAGE TEXT-234 TYPE 'I'.

ENDIF.

endform. " DISPALY_ALV

&----


*& Form sub_get_event

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form sub_get_event .

CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

DATA: lv_event TYPE slis_alv_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

i_list_type = 4

IMPORTING

et_events = gt_event

EXCEPTIONS

list_type_wrong = 0

OTHERS = 0.

  • Subtotal

READ TABLE gt_event INTO lv_event

WITH KEY name = slis_ev_subtotal_text.

IF sy-subrc = 0.

MOVE c_formname_subtotal_text TO lv_event-form.

MODIFY gt_event FROM lv_event INDEX sy-tabix.

ENDIF.

endform. " sub_get_event

&----


*& Form subtotal_text

&----


  • text

----


  • -->P_TOTAL text

  • -->P_SUBTOT_TEXT text

----


FORM subtotal_text USING

p_total TYPE tt_final

p_subtot_text TYPE slis_subtot_text.

p_subtot_text-display_text_for_subtotal

= TEXT-120.

READ TABLE GT_TIME INTO GS_TIME WITH KEY WERKS = p_total-WERKS.

IF SY-SUBRC = 0.

p_total-LV_TIME = GS_TIME-AVG_TIME.

ENDIF.

ENDFORM. "subtotal_text

&----


*& Form TIME_CALC

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form TIME_CALC .

DATA:

LV_TIME(10) TYPE C,

LV_HRS TYPE STRING,

LV_MIN TYPE STRING,

LV_HRS_INT TYPE I,

LV_MOD TYPE I,

LV_STRING TYPE STRING,

LV_MIN_INT2 TYPE I,

LV_MIN_INT TYPE I,

LV_MIN_INT_SUM TYPE I,

LV_COUNT TYPE I.

LOOP AT GT_FINAL2 INTO GS_FINAL .

LV_COUNT = LV_COUNT + 1.

LV_TIME = GS_FINAL-LV_TIME.

SPLIT LV_TIME AT ':' INTO LV_HRS LV_MIN.

LV_HRS_INT = LV_HRS.

LV_MIN_INT = LV_MIN.

LV_HRS_INT = LV_HRS_INT * 60.

LV_MIN_INT_SUM = LV_MIN_INT_SUM + ( LV_MIN_INT + LV_HRS_INT ).

GS_TIME-WERKS = GS_FINAL-WERKS.

AT END OF WERKS.

LV_MIN_INT_SUM = LV_MIN_INT_SUM / LV_COUNT.

LV_MIN_INT2 = LV_MIN_INT_SUM / 60.

LV_MOD = LV_MIN_INT_SUM MOD 60.

LV_HRS = LV_MIN_INT2.

LV_MIN = LV_MOD.

CONDENSE: LV_HRS,

LV_MIN.

IF LV_MIN < 10.

CONCATENATE '0' LV_MIN INTO LV_MIN.

ENDIF.

CONCATENATE LV_HRS ':' LV_MIN INTO LV_STRING.

CONDENSE LV_STRING.

GS_TIME-AVG_TIME = LV_STRING.

APPEND GS_TIME TO GT_TIME.

CLEAR:

LV_TIME,

LV_HRS,

LV_MIN,

LV_HRS_INT,

LV_MOD,

LV_STRING,

LV_MIN_INT2,

LV_MIN_INT_SUM,

LV_MIN_INT,

LV_COUNT.

ENDAT.

ENDLOOP.

Former Member
0 Kudos

please follow the below code

TYPE-POOLS: slis.

TYPES:

BEGIN OF TT_EKBE,

EBELN TYPE EBELN,

EBELP TYPE EBELP,

BELNR TYPE MBLNR,

BUZEI TYPE MBLPO,

BWART TYPE BWART,

LFBNR TYPE LFBNR,

LFPOS TYPE LFPOS,

XBLNR TYPE XBLNR1,

CPUDT TYPE CPUDT,

CPUTM TYPE CPUTM,

MATNR TYPE MATNR,

WERKS TYPE WERKS_D,

END OF TT_EKBE,

BEGIN OF TT_TIME,

WERKS TYPE WERKS_D,

AVG_TIME TYPE STRING,

END OF TT_TIME,

BEGIN OF TT_FINAL,

WERKS TYPE WERKS_D,

BELNR TYPE MBLNR,

BUZEI TYPE MBLPO,

EBELN TYPE EBELN,

EBELP TYPE EBELP,

MATNR TYPE MATNR,

MAKTX TYPE MAKTX,

LIFNR TYPE ELIFN,

CPUDT TYPE CPUDT,

CPUTM TYPE CPUTM,

LFBNR TYPE LFBNR,

LFPOS TYPE LFPOS,

XBLNR TYPE XBLNR1,

CPUDT2 TYPE CPUDT,

CPUTM2 TYPE CPUTM,

*Changed by Yogendra on 2008/10/07

  • LV_DAYS TYPE I,

LV_DAYS TYPE P DECIMALS 2,

*End of changes

LV_TIME TYPE STRING,

END OF TT_FINAL,

BEGIN OF TT_EKKO,

EBELN TYPE EBELN,

LIFNR TYPE ELIFN,

END OF TT_EKKO,

BEGIN OF TT_MAKT,

MATNR TYPE MATNR,

MAKTX TYPE MAKTX,

END OF TT_MAKT.

DATA:

GV_CPUDT TYPE CPUDT,

GV_WERKS TYPE WERKS_D,

GV_MATNR TYPE MATNR,

GT_EKBE TYPE TABLE OF TT_EKBE,

GS_EKBE TYPE TT_EKBE,

GT_BWART TYPE RANGE OF BWART,

GS_BWART LIKE LINE OF GT_BWART,

GT_MAKT TYPE TABLE OF TT_MAKT,

GS_MAKT TYPE TT_MAKT,

GT_TIME TYPE TABLE OF TT_TIME,

GS_TIME TYPE TT_TIME,

GT_EKKO TYPE TABLE OF TT_EKKO,

GS_EKKO TYPE TT_EKKO,

GT_EKBE_105 TYPE TABLE OF TT_EKBE,

GS_EKBE_105 TYPE TT_EKBE.

DATA:

GV_LAND1 TYPE LAND1,

GT_FINAL TYPE TABLE OF TT_FINAL,

GT_FINAL2 TYPE TABLE OF TT_FINAL,

GS_FINAL TYPE TT_FINAL,

gs_fcat TYPE slis_fieldcat_alv,

gt_fcat TYPE slis_t_fieldcat_alv,

gt_sort TYPE SLIS_T_SORTINFO_ALV,

gs_sort TYPE slis_sortinfo_alv,

gs_layout TYPE slis_layout_alv,

gt_event TYPE slis_t_event,

gv_prog type sy-cprog.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS:

SO_CPUDT FOR GV_CPUDT OBLIGATORY,

SO_WERKS FOR GV_WERKS OBLIGATORY,

SO_MATNR FOR GV_MATNR.

SELECTION-SCREEN END OF BLOCK B1.

DATA:

GS_WERKS_SO LIKE LINE OF SO_WERKS.

INITIALIZATION.

gv_prog = sy-cprog.

**---Authorization check for T-code

AUTHORITY-CHECK OBJECT 'ZPRCHK_NEW' :

ID 'TCD' FIELD sy-tcode

ID 'BUKRS' DUMMY

ID 'PRCTR' DUMMY

ID 'SPART' DUMMY

ID 'WERKS' DUMMY

ID 'VKORG' DUMMY

ID 'EKORG' DUMMY.

IF sy-subrc NE 0.

MESSAGE i000(vz) WITH TEXT-006 sy-tcode .

LEAVE PROGRAM.

ENDIF.

GS_BWART-sign = 'I'.

GS_BWART-option = 'EQ'.

GS_BWART-low = '103'.

APPEND GS_BWART TO GT_BWART.

GS_BWART-sign = 'I'.

GS_BWART-option = 'EQ'.

GS_BWART-low = '105'.

APPEND GS_BWART TO GT_BWART.

START-OF-SELECTION.

IF NOT SO_WERKS IS INITIAL.

LOOP AT SO_WERKS INTO GS_WERKS_SO.

CALL FUNCTION 'ZCAGL_COUNTRYCODE'

EXPORTING

IM_WERKS = GS_WERKS_SO-LOW

  • IM_SPART =

  • IM_PRCTR =

  • im_bukrs =

IMPORTING

e_land1 = GV_LAND1

.

IF GV_LAND1 NE 'IN'.

MESSAGE i000(8i) WITH TEXT-139 GS_WERKS_SO-LOW TEXT-140 .

LEAVE PROGRAM.

ELSE.

AUTHORITY-CHECK OBJECT 'ZPRCHK_NEW' :

ID 'WERKS' FIELD GS_WERKS_SO-LOW

ID 'TCD' DUMMY

ID 'BUKRS' DUMMY

ID 'PRCTR' DUMMY

ID 'SPART' DUMMY

ID 'VKORG' DUMMY

ID 'EKORG' DUMMY.

IF sy-subrc NE 0.

MESSAGE i000(vz) WITH TEXT-007 GS_WERKS_SO-LOW.

LEAVE PROGRAM.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

PERFORM GET_DATA.

PERFORM SEG_MOV_TYP.

PERFORM OUTPUT_DISPLAY.

PERFORM ALV_LAYOUT.

PERFORM sub_get_event.

PERFORM DISPALY_ALV.

&----


*& Form GET_DATA

&----


-

  • text

----


  • --> p1 text

  • <-- p2 text

----


form GET_DATA .

SELECT EBELN EBELP BELNR BUZEI BWART LFBNR LFPOS XBLNR CPUDT CPUTM MATNR WERKS FROM EKBE INTO TABLE GT_EKBE

WHERE BUDAT IN SO_CPUDT

AND BWART IN GT_BWART

AND MATNR IN SO_MATNR

AND WERKS IN SO_WERKS.

IF NOT GT_EKBE[] IS INITIAL.

**To fetch vendor code

SELECT EBELN LIFNR FROM EKKO INTO TABLE GT_EKKO

FOR ALL ENTRIES IN GT_EKBE

WHERE EBELN = GT_EKBE-EBELN.

**To fetch Material Description

SELECT MATNR MAKTX FROM MAKT INTO TABLE GT_MAKT

FOR ALL ENTRIES IN GT_EKBE

WHERE MATNR = GT_EKBE-MATNR.

ELSE.

MESSAGE TEXT-234 TYPE 'E'.

ENDIF.

endform. " GET_DATA

&----


*& Form SEG_MOV_TYP

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form SEG_MOV_TYP .

SORT GT_EKBE BY BWART.

GT_EKBE_105[] = GT_EKBE[].

**Segregating document with 103 movement type

DELETE GT_EKBE WHERE BWART EQ '105'.

**Segregating document with 105 movement type

DELETE GT_EKBE_105 WHERE BWART EQ '103'.

endform. " SEG_MOV_TYP

&----


*& Form OUTPUT_DISPLAY

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form OUTPUT_DISPLAY .

DATA:

LV_TIME TYPE FAHZTD,

LV_TIME_CHANGE(10) TYPE C,

LV_TIME1 TYPE STRING,

LV_TIME2 TYPE STRING,

LV_TIME_DAY TYPE STRING,

LV_TIME_DAY_INT TYPE P,

LV_TIME_DAY1(7) TYPE N,

LV_TIME_DAY2 TYPE N,

LV_TIME_MOD TYPE I.

LOOP AT GT_EKBE INTO GS_EKBE.

READ TABLE GT_EKBE_105 INTO GS_EKBE_105 WITH KEY LFBNR = GS_EKBE-BELNR

LFPOS = GS_EKBE-BUZEI.

IF SY-SUBRC = 0.

READ TABLE GT_EKKO INTO GS_EKKO WITH KEY EBELN = GS_EKBE-EBELN.

CLEAR:

LV_TIME,

LV_TIME_DAY,

LV_TIME_CHANGE,

LV_TIME_DAY1,

LV_TIME_DAY2,

LV_TIME_MOD.

**TO fetch number of Hrs:Min between to date and time

CALL FUNCTION 'SD_CALC_DURATION_FROM_DATETIME'

EXPORTING

i_date1 = GS_EKBE-CPUDT

i_time1 = GS_EKBE-CPUTM

i_date2 = GS_EKBE_105-CPUDT

i_time2 = GS_EKBE_105-CPUTM

IMPORTING

E_TDIFF = LV_TIME

  • E_DATE2_EARLY =

EXCEPTIONS

INVALID_DATETIME = 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.

CALL FUNCTION 'CONVERSION_EXIT_TSTRN_OUTPUT'

EXPORTING

input = LV_TIME

IMPORTING

OUTPUT = LV_TIME_CHANGE

.

REPLACE ALL OCCURRENCES OF REGEX ',' IN LV_TIME_CHANGE WITH SPACE.

  • GS_FINAL-LV_TIME = LV_TIME_CHANGE.

SPLIT LV_TIME_CHANGE AT ':' INTO LV_TIME1 LV_TIME2.

CONDENSE LV_TIME1.

LV_TIME_CHANGE = LV_TIME1.

IF LV_TIME1 = SPACE.

LV_TIME1 = 0.

ENDIF.

IF LV_TIME2 = SPACE.

LV_TIME2 = 0.

ENDIF.

CONCATENATE LV_TIME1 ':' LV_TIME2 INTO GS_FINAL-LV_TIME.

LV_TIME_DAY_INT = LV_TIME_CHANGE / 24.

LV_TIME_DAY = LV_TIME_DAY_INT.

SPLIT LV_TIME_DAY AT '.' INTO LV_TIME_DAY1 LV_TIME_DAY2.

LV_TIME_MOD = LV_TIME_CHANGE MOD 24.

IF LV_TIME_MOD GT 0.

LV_TIME_DAY = LV_TIME_DAY1 + 1.

ENDIF.

IF LV_TIME_DAY = 1.

LV_TIME_DAY = 0.

ENDIF.

IF LV_TIME < 100.

LV_TIME = 000.

ENDIF.

READ TABLE GT_MAKT INTO GS_MAKT WITH KEY MATNR = GS_EKBE-MATNR.

IF SY-SUBRC = 0.

GS_FINAL-MAKTX = GS_MAKT-MAKTX.

ENDIF.

GS_FINAL-BELNR = GS_EKBE-BELNR.

GS_FINAL-BUZEI = GS_EKBE-BUZEI.

GS_FINAL-EBELN = GS_EKBE-EBELN.

GS_FINAL-EBELP = GS_EKBE-EBELP.

GS_FINAL-MATNR = GS_EKBE-MATNR.

GS_FINAL-LIFNR = GS_EKKO-LIFNR.

GS_FINAL-CPUDT = GS_EKBE-CPUDT.

GS_FINAL-CPUTM = GS_EKBE-CPUTM.

GS_FINAL-LFBNR = GS_EKBE_105-BELNR.

GS_FINAL-LFPOS = GS_EKBE_105-BUZEI.

GS_FINAL-CPUDT2 = GS_EKBE_105-CPUDT.

GS_FINAL-CPUTM2 = GS_EKBE_105-CPUTM.

GS_FINAL-XBLNR = GS_EKBE-XBLNR.

GS_FINAL-WERKS = GS_EKBE-WERKS.

GS_FINAL-LV_DAYS = LV_TIME_DAY.

APPEND GS_FINAL TO GT_FINAL.

ENDIF.

ENDLOOP.

SORT GT_FINAL BY WERKS BELNR BUZEI.

GT_FINAL2[] = GT_FINAL[].

PERFORM TIME_CALC.

endform. " OUTPUT_DISPLAY

&----


*& Form ALV_LAYOUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form ALV_LAYOUT .

gs_fcat-fieldname = 'WERKS'.

gs_fcat-no_out = 'X'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'WERKS'.

gs_fcat-key = ' '.

gs_fcat-no_out = ' '.

gs_fcat-seltext_m = text-115.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'EBELN'.

gs_fcat-seltext_m = text-103.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'EBELP'.

gs_fcat-seltext_m = text-104.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'MATNR'.

gs_fcat-seltext_m = text-105.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'MAKTX'.

gs_fcat-seltext_m = text-116.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LIFNR'.

gs_fcat-seltext_m = text-106.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'XBLNR'.

gs_fcat-seltext_m = text-117.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'BELNR'.

gs_fcat-seltext_m = text-101.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'BUZEI'.

gs_fcat-seltext_m = text-102.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUDT'.

gs_fcat-seltext_m = text-107.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUTM'.

gs_fcat-seltext_m = text-108.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LFBNR'.

gs_fcat-seltext_m = text-113.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LFPOS'.

gs_fcat-seltext_m = text-114.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUDT2'.

gs_fcat-seltext_m = text-109.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'CPUTM2'.

gs_fcat-seltext_m = text-110.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LV_DAYS'.

gs_fcat-seltext_l = text-111.

gs_fcat-do_sum = 'C'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_fcat-fieldname = 'LV_TIME'.

gs_fcat-seltext_l = text-112.

gs_fcat-do_sum = 'C'.

APPEND gs_fcat to gt_fcat.

CLEAR: gs_fcat.

gs_sort-spos = '1'.

gs_sort-fieldname = 'WERKS'.

gs_sort-up = 'X'.

gs_sort-subtot = 'X'.

APPEND gs_sort TO gT_sort.

gs_layout-no_totalline = 'X'.

endform. " ALV_LAYOUT

&----


*& Form DISPALY_ALV

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form DISPALY_ALV .

IF NOT GT_FINAL[] IS INITIAL.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

  • I_BYPASSING_BUFFER = ' '

  • I_BUFFER_ACTIVE = ' '

I_CALLBACK_PROGRAM = gv_prog

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = 'USER'

  • I_CALLBACK_TOP_OF_PAGE = 'TOP'

  • I_CALLBACK_HTML_TOP_OF_PAGE = ' '

  • I_CALLBACK_HTML_END_OF_LIST = ' '

  • I_STRUCTURE_NAME =

  • I_BACKGROUND_ID = ' '

  • I_GRID_TITLE = Text-A00

  • I_GRID_SETTINGS =

IS_LAYOUT = gs_layout

IT_FIELDCAT = gt_fcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

IT_SORT = GT_SORT

  • IT_FILTER =

  • IS_SEL_HIDE =

I_DEFAULT = 'X'

I_SAVE = 'A'

  • IS_VARIANT =

IT_EVENTS = gt_event

  • IT_EVENT_EXIT =

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_HTML_HEIGHT_TOP = 0

  • I_HTML_HEIGHT_END = 0

  • IT_ALV_GRAPHICS =

  • IT_HYPERLINK =

  • IT_ADD_FIELDCAT =

  • IT_EXCEPT_QINFO =

  • IR_SALV_FULLSCREEN_ADAPTER =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

T_OUTTAB = gt_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.

ELSE.

MESSAGE TEXT-234 TYPE 'I'.

ENDIF.

endform. " DISPALY_ALV

&----


*& Form sub_get_event

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form sub_get_event .

CONSTANTS : c_formname_subtotal_text TYPE slis_formname VALUE 'SUBTOTAL_TEXT'.

DATA: lv_event TYPE slis_alv_event.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

i_list_type = 4

IMPORTING

et_events = gt_event

EXCEPTIONS

list_type_wrong = 0

OTHERS = 0.

  • Subtotal

READ TABLE gt_event INTO lv_event

WITH KEY name = slis_ev_subtotal_text.

IF sy-subrc = 0.

MOVE c_formname_subtotal_text TO lv_event-form.

MODIFY gt_event FROM lv_event INDEX sy-tabix.

ENDIF.

endform. " sub_get_event

&----


*& Form subtotal_text

&----


  • text

----


  • -->P_TOTAL text

  • -->P_SUBTOT_TEXT text

----


FORM subtotal_text USING

p_total TYPE tt_final

p_subtot_text TYPE slis_subtot_text.

p_subtot_text-display_text_for_subtotal

= TEXT-120.

READ TABLE GT_TIME INTO GS_TIME WITH KEY WERKS = p_total-WERKS.

IF SY-SUBRC = 0.

p_total-LV_TIME = GS_TIME-AVG_TIME.

ENDIF.

ENDFORM. "subtotal_text

&----


*& Form TIME_CALC

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


form TIME_CALC .

DATA:

LV_TIME(10) TYPE C,

LV_HRS TYPE STRING,

LV_MIN TYPE STRING,

LV_HRS_INT TYPE I,

LV_MOD TYPE I,

LV_STRING TYPE STRING,

LV_MIN_INT2 TYPE I,

LV_MIN_INT TYPE I,

LV_MIN_INT_SUM TYPE I,

LV_COUNT TYPE I.

LOOP AT GT_FINAL2 INTO GS_FINAL .

LV_COUNT = LV_COUNT + 1.

LV_TIME = GS_FINAL-LV_TIME.

SPLIT LV_TIME AT ':' INTO LV_HRS LV_MIN.

LV_HRS_INT = LV_HRS.

LV_MIN_INT = LV_MIN.

LV_HRS_INT = LV_HRS_INT * 60.

LV_MIN_INT_SUM = LV_MIN_INT_SUM + ( LV_MIN_INT + LV_HRS_INT ).

GS_TIME-WERKS = GS_FINAL-WERKS.

AT END OF WERKS.

LV_MIN_INT_SUM = LV_MIN_INT_SUM / LV_COUNT.

LV_MIN_INT2 = LV_MIN_INT_SUM / 60.

LV_MOD = LV_MIN_INT_SUM MOD 60.

LV_HRS = LV_MIN_INT2.

LV_MIN = LV_MOD.

CONDENSE: LV_HRS,

LV_MIN.

IF LV_MIN < 10.

CONCATENATE '0' LV_MIN INTO LV_MIN.

ENDIF.

CONCATENATE LV_HRS ':' LV_MIN INTO LV_STRING.

CONDENSE LV_STRING.

GS_TIME-AVG_TIME = LV_STRING.

APPEND GS_TIME TO GT_TIME.

CLEAR:

LV_TIME,

LV_HRS,

LV_MIN,

LV_HRS_INT,

LV_MOD,

LV_STRING,

LV_MIN_INT2,

LV_MIN_INT_SUM,

LV_MIN_INT,

LV_COUNT.

ENDAT.

ENDLOOP.

Former Member
0 Kudos

hi ,

thanks for rply but i need soted program in which we can total and subtotal the fields and the program which u sent

is not working please sent me some solution