on 10-14-2008 1:01 PM
hi all,
please tell me how we develope a drill don report in alv to so sort and sub total
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
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.
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.