Report_(703)

<< Click to Display Table of Contents >>

Navigation:  All About ABAP Technique > English > ABAP Report > Class in ALV >

Report_(703)

Objective

Creating Report

Result

Source Code

Transaction Code

SE38 - ABAP Editor

Tables

QALS    - Inspection lot record

QAPP    - Inspection point

QAMV   - Characteristic specifications for inspection processing

QMPT    -

QASE    - Results table for the sample unit

QAPPW - Data dictionary fields for inspection during production

QASR    - Sample results for inspection characteristics

QPAM   - Inspection catalog selected sets

QPCT    - Code texts

Support

Video

Contributors

Danar Andri Prasetyo ( danaruto131@yahoo.com )

 

 

Creating Report

1.Open SE38

2.Create New Program,

Program Name        : ZRE_INSPECTION_POINT ( Functional Specification )

Title                : 703 - Report Inspection Point

 

3.Save at Local Object.

4.We make main screen with code 2000

Display Steps

 

5.Now, Inside Screen 2000 layout, we'll make 3 subscreen

Display Steps

6.Then we make screen "0100" for selection screen

Display Steps

7.Then we make screen '0200' for  ALV HEADER

Dsiplay Steps

8.Now, continue to make screen '0300' for  ALV Detail Screen

Display Steps

9.Now, we make blank screen. Name it with screen '3000'. The aim of this screen is to substitute screen 100,200,300 when they are hide

Display Steps

10.DeclareTables

TABLES : qals, qapp, qamv, qpmt, qase, qappw, qasr, qpam, qpct.

11.Declare variable

DATA : gv_screen1(4) TYPE n VALUE '1100',

       gv_screen2(4) TYPE n VALUE '3000',

       gv_screen3(4) TYPE n VALUE '3000'.

 

DATA : gv_pb1(1) VALUE 'X',

       gv_pb2(1) VALUE ' ',

       gv_pb3(1) VALUE ' '.

 

DATA : ok_code TYPE sy-ucomm,

       save_ok TYPE sy-ucomm.

 

12.Declare Input Screen

 

SELECTION-SCREEN BEGIN OF SCREEN 1100 AS SUBSCREEN.

SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text_001.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(15) text_002 FOR FIELD so_matnr.

SELECT-OPTIONS so_matnr FOR qals-matnr.

SELECTION-SCREEN COMMENT 70(21) gv_info.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(15) text_003 FOR FIELD so_c2.

SELECT-OPTIONS so_c2 FOR qapp-userc2.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(15) text_004 FOR FIELD so_pru.

SELECT-OPTIONS so_pru FOR qals-prueflos.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(15) text_005 FOR FIELD so_d1.

SELECT-OPTIONS so_pru FOR qapp-userd1.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK a.

SELECTION-SCREEN END OF SCREEN 1100.

 

13.Declare Initialization for text label

INITIALIZATION.

  text_001 = 'Selection Screen'.

  text_002 = 'Material'.

  text_003 = 'Production Lot'.

  text_004 = 'Inspection Lot'.

  text_005 = 'Inspection Date'.

 

  gv_info = 'Total data : - '.

 

14.Declare start-of-selection with call of screen

START-OF-SELECTION.

  CALL SCREEN 2000.

 

END-OF-SELECTION.

15.Save and Activate Program

ar0228

16.Now we will code at Screen 2000

17.Double click at screen 2000

ar0229

18.Edit Flow logic

Before

PROCESS BEFORE OUTPUT.

 MODULE status_2000.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_2000.

 

After

PROCESS BEFORE OUTPUT.

 MODULE status_2000.

 CALL SUBSCREEN sa_1 INCLUDING sy-repid '0100'.

 CALL SUBSCREEN sa_2 INCLUDING sy-repid '0200'.

 CALL SUBSCREEN sa_3 INCLUDING sy-repid '0300'.

 

PROCESS AFTER INPUT.

  CALL SUBSCREEN sa_1.

  CALL SUBSCREEN sa_2.

  CALL SUBSCREEN sa_3. 

 MODULE USER_COMMAND_2000.

 

19.Save and activate

ar0230

20.Double click at MODULE USER_COMMAND_2000

21.It will show pop up,

ar0231 just click 'yes' button

22.Choose main program

ar0232 then click ar0233

23.Edit Module User command 2000

Before

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

 

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

  save_ok = ok_code.

  CLEAR ok_code.

  CASE save_ok.

    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

      LEAVE PROGRAM.

    WHEN 'EXECUTE'.

*      PERFORM fm_proses.

      gv_screen1 = '3000'.

      gv_screen2 = '1200'.

      gv_screen3 = '1300'.

      gv_pb1 = ' '.

      gv_pb2 = 'X'.

      gv_pb3 = 'X'.

 

    WHEN 'REFRESH'.

*      PERFORM fm_refresh.

*      PERFORM fm_proses.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

24.Save and Activate

ar0234

25.Double click at screen 0100

ar0235

26.Edit Flow Logic

Before

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0100.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0100.

After

PROCESS BEFORE OUTPUT.

 MODULE status_0100.

  CALL SUBSCREEN sa_100 INCLUDING sy-repid gv_screen1.

 

PROCESS AFTER INPUT.

 MODULE user_command_0100.

  CALL SUBSCREEN sa_100.

 

27.Save  Screen 100

28.Double click at  MODULE status_0100.

29.It will show pop up

ar0236 just click 'yes' button

30.Choose main program

ar0237 then click ar0233

31.Edit Module Status_0100 output

Before

*&---------------------------------------------------------------------*

*&      Module  status_0100  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module status_0100 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0100  OUTPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  status_0100  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_0100 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

* for de-active all control

  CASE screen-group1.

   WHEN 'G1A'.

     screen-active = 0.

   WHEN 'G1B'.

     screen-active = 0.

  ENDCASE.

 

* for active control which needed

  LOOP AT SCREEN.

    IF gv_pb1 = 'X'.

      CASE screen-group1.

         WHEN 'G1A'.

           screen-active = 0.

         WHEN 'G1B'.

           screen-active = 1.

      ENDCASE.

    ELSEIF gv_pb1 = ' '.

      CASE screen-group1.

         WHEN 'G1A'.

           screen-active = 1.

         WHEN 'G1B'.

           screen-active = 0.

      ENDCASE.

    ENDIF.

 

    MODIFY SCREEN.

  ENDLOOP.

 

ENDMODULE.                 " status_0100  OUTPUT

 

32.Double click at screen 0100

ar0235

33.Double Click at "user_command_0100".

34.It will show pop up.

ar0238just click yes button.

35.Choose main program

ar0239

36.Edit Module user_command_0100 Input

Before

*&---------------------------------------------------------------------*

*&      Module  user_command_0100  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

 

ENDMODULE.                 " user_command_0100  INPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  user_command_0100  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_0100 INPUT.

* for assign variable

  save_ok = ok_code.

  CASE save_ok.

    WHEN 'PB_100_1'.

      gv_pb1 = 'X'.

      gv_screen1 = 1100.

    WHEN 'PB_100_2'.

      gv_pb1 = ' '.

      gv_screen1 = 3000.

  ENDCASE.

 

ENDMODULE.                 " user_command_0100  INPUT

 

37.Save And Activate

ar0240

ar0241

38.Double click at screen 0200

ar0242

39.Edit Flow Logic

Before

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0200.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0200.

After

PROCESS BEFORE OUTPUT.

 MODULE status_0200.

 CALL SUBSCREEN sa_200 INCLUDING sy-repid gv_screen2.

 

PROCESS AFTER INPUT.

 MODULE user_command_0200.

 CALL SUBSCREEN sa_200.

 

40.Save  and Activate Screen 200

ar0243

41.Double click at  MODULE status_0200.

42.It will show pop up

ar0244 just click 'yes' button

43.Choose main program

ar0237 then click ar0233

44.Edit Module Status_0200 output

Before

*&---------------------------------------------------------------------*

*&      Module  status_0200  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module status_0200 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0200  OUTPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  status_0200  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_0200 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

* for de-active all control

  CASE screen-group1.

   WHEN 'G2A'.

     screen-active = 0.

   WHEN 'G2B'.

     screen-active = 0.

  ENDCASE.

 

* for active control which needed

  LOOP AT SCREEN.

    IF gv_pb2 = 'X'.

      CASE screen-group1.

         WHEN 'G2A'.

           screen-active = 0.

         WHEN 'G2B'.

           screen-active = 1.

      ENDCASE.

    ELSEIF gv_pb2 = ' '.

      CASE screen-group1.

         WHEN 'G2A'.

           screen-active = 1.

         WHEN 'G2B'.

           screen-active = 0.

      ENDCASE.

    ENDIF.

 

    MODIFY SCREEN.

  ENDLOOP.

 

ENDMODULE.                 " status_0200  OUTPUT

 

45.Save And Activate

ar0245

46.Double click at screen 0200

ar0242

47.Double Click at "user_command_0200".

48.It will show pop up.

ar0246just click yes button.

49.Choose main program

ar0239

50.Edit Module user_command_0200 Input

Before

*&---------------------------------------------------------------------*

*&      Module  user_command_0200  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_0200 INPUT.

 

ENDMODULE.                 " user_command_0200  INPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  user_command_0200  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module user_command_0200 input.

* for assign variable

  save_ok = ok_code.

  CASE save_ok.

    WHEN 'PB_200_1'.

      gv_pb2 = 'X'.

      gv_screen2 = 1200.

    WHEN 'PB_200_2'.

      gv_pb2 = ' '.

      gv_screen2 = 3000.

  ENDCASE.

  

endmodule.                 " user_command_0200  INPUT

 

51.Save and Activate

ar0247

52.Double click at screen 0300

ar0248

53.Edit Flow Logic

Before

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0300.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0300.

After

PROCESS BEFORE OUTPUT.

 MODULE status_0300.

 CALL SUBSCREEN sa_300 INCLUDING sy-repid gv_screen3.

 

PROCESS AFTER INPUT.

 MODULE user_command_0300.

 CALL SUBSCREEN sa_300.

 

54.Save  and Activate Screen 300

ar0249

55.Double click at  MODULE status_0300.

56.It will show pop up

ar0250 just click 'yes' button

57.Choose main program

ar0237 then click ar0233

58.Edit Module Status_0300 output

Before

*&---------------------------------------------------------------------*

*&      Module  status_0300  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module status_0300 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0300  OUTPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  status_0300  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module status_0300 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

* for de-active all control

  CASE screen-group1.

   WHEN 'G3A'.

     screen-active = 0.

   WHEN 'G3B'.

     screen-active = 0.

  ENDCASE.

 

* for active control which needed

  LOOP AT SCREEN.

    IF gv_pb3 = 'X'.

      CASE screen-group1.

         WHEN 'G3A'.

           screen-active = 0.

         WHEN 'G3B'.

           screen-active = 1.

      ENDCASE.

    ELSEIF gv_pb3 = ' '.

      CASE screen-group1.

         WHEN 'G3A'.

           screen-active = 1.

         WHEN 'G3B'.

           screen-active = 0.

      ENDCASE.

    ENDIF.

 

    MODIFY SCREEN.

  ENDLOOP.

  

endmodule.                 " status_0300  OUTPUT

 

59.Save And Activate

ar0245

60.Double click at screen 0300

ar0248

61.Double Click at "user_command_0300".

62.It will show pop up.

ar0251just click yes button.

63.Choose main program

ar0239

64.Edit Module user_command_0300 Input

Before

*&---------------------------------------------------------------------*

*&      Module  user_command_0300  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_0300 INPUT.

 

ENDMODULE.                 " user_command_0300  INPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  user_command_0300  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

module user_command_0300 input.

* for assign variable

  save_ok = ok_code.

  CASE save_ok.

    WHEN 'PB_300_1'.

      gv_pb3 = 'X'.

      gv_screen3 = 1300.

    WHEN 'PB_200_2'.

      gv_pb3 = ' '.

      gv_screen3 = 3000.

  ENDCASE.

endmodule.                 " user_command_0300  INPUT

65.Save and Activate

ar0245

66.Test Run Program by Click ar0252

67.And the output like picture below, but there are still any error if you click "Header Inspection Point" and "Detail Inspection Point"

ar0253

68.This error cause by there is no code for ALV yet. So we have to code it.

69.For solve we have to make subscreen '1200' for ALV Header Container

Display Steps

70.Now we will create screen 1300 for ALV Detail Container

Display Steps

71.Back to main program, Declare new variable, before Table delcaration. That variable are gi_header and gi_detail.

 

TYPE-POOLS : icon, ole2.

 

TYPES : BEGIN OF gt_header,

        matnr LIKE qals-matnr,    "material

        ktextmat LIKE qals-ktextmat, "description

        werk LIKE qals-werk,      "plant

        aufnr LIKE qals-aufnr,    "production order

        prueflos LIKE qals-prueflos,  "Inspection Lot

        userc2 LIKE qapp-userc2,      "Production Lot

        userd1 LIKE qapp-userd1,      "Inspection Date

        art LIKE qals-art,            "inspection type yang ditampilkan

        slwbez LIKE qals-slwbez,      "untuk generate Inspection Point

        pruefpkt LIKE qappw-pruefpkt,  "inspection point

        ppsortkey LIKE qapp-ppsortkey,

        time(8),

        date(10),

        prolot(10),

        probenr LIKE qapp-probenr,

        werks LIKE qals-werk,

        chk,

        num TYPE i,

        icon(4),

        child_num TYPE i,

        child TYPE i,

       END OF gt_header.

 

DATA : gi_header TYPE TABLE OF gt_header WITH HEADER LINE.

 

TYPES : BEGIN OF gt_detail.

        INCLUDE STRUCTURE gi_header.

 

TYPES : merknr LIKE qamv-merknr,     "No posisi document

        verwmerkm LIKE qamv-verwmerkm, "characteristic

        kurztext LIKE qpmt-kurztext,    "short text utk characteristic

        toleranzob LIKE qamv-toleranzob, " Batas bawah utk spesification

        toleranzob_char LIKE qaqee-toleranzob,

        toleranzun LIKE qamv-toleranzun,  "batas atas spesifications

        toleranzun_char LIKE qaqee-toleranzun,

        sollwert LIKE qamv-sollwert,

        sollwert_char LIKE qaqee-sollwert,

        stellen LIKE qamv-stellen,

        sollwni LIKE qamv-sollwni,

        tolunni LIKE qamv-tolunni,

        tolobni LIKE qamv-tolobni,

 

        pruefkat LIKE qmkst-pruefkat,

        masseinhsw LIKE qamv-masseinhsw,

        steuerkz LIKE qamv-steuerkz,

 

        tolgrenze LIKE qamkr-tolgrenze, " spesification

 

        messwert LIKE qase-messwert,      "result 1

        messwert_c LIKE qaqee-messwert,   "result 1

        messwert_char(40),

        original_input LIKE qase-original_input,    "result 2

        mbewertg LIKE qase-mbewertg,      " valuation

 

        END OF gt_detail.

 

72.Save and activate program

ar0245

73.Add new variable declaration after table declaration.

DATA:

      gi_detail TYPE TABLE OF gt_detail WITH HEADER LINE,

      gi_qals TYPE TABLE OF qals WITH HEADER LINE,

      gi_qapp TYPE TABLE OF qapp WITH HEADER LINE,

      gi_qamv TYPE TABLE OF qamv WITH HEADER LINE,

      gi_qpmt TYPE TABLE OF qpmt WITH HEADER LINE,

      gi_qase TYPE TABLE OF qase WITH HEADER LINE,

      gi_qasr TYPE TABLE OF qasr WITH HEADER LINE,

      gi_qpam TYPE TABLE OF qpam WITH HEADER LINE,

      gi_qpct TYPE TABLE OF qpct WITH HEADER LINE.

 

DATA: gi_receiver LIKE STANDARD TABLE OF somlreci1 WITH HEADER LINE,

      gi_message LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE.

 

74.Edit Declaration variable before

Before

DATA : gv_screen1(4) TYPE n VALUE '1100',

       gv_screen2(4) TYPE n VALUE '3000',

       gv_screen3(4) TYPE n VALUE '3000'.

 

DATA : gv_pb1(1) VALUE 'X',

       gv_pb2(1) VALUE ' ',

       gv_pb3(1) VALUE ' '.

 

DATA : ok_code TYPE sy-ucomm,

       save_ok TYPE sy-ucomm.

 

After

DATA : gv_screen1(4) TYPE n VALUE '1100',

       gv_screen2(4) TYPE n VALUE '3000',

       gv_screen3(4) TYPE n VALUE '3000'.

 

DATA : gv_pb1(1) VALUE 'X',

       gv_pb2(1) VALUE ' ',

       gv_pb3(1) VALUE ' '.

 

DATA : ok_code TYPE sy-ucomm,

       save_ok TYPE sy-ucomm.

 

DATA: tc_header TYPE REF TO cl_gui_custom_container,

      tg_header TYPE REF TO cl_gui_alv_grid,

      tc_detail TYPE REF TO cl_gui_custom_container,

      tg_detail TYPE REF TO cl_gui_alv_grid,

      go_event_receiver_header TYPE REF TO lcl_event_receiver,

      go_event_receiver_detail TYPE REF TO lcl_event_receiver.

 

DATA: gw_fieldcat_header TYPE lvc_t_fcat,

      gw_fieldcat_detail TYPE lvc_t_fcat.

 

DATA: gv_row_no TYPE i.

 

75.Edit User_command_2000

Before

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

  save_ok = ok_code.

  CLEAR ok_code.

  CASE save_ok.

    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

      LEAVE PROGRAM.

    WHEN 'EXECUTE'.

*      PERFORM fm_proses.

      gv_screen1 = '3000'.

      gv_screen2 = '1200'.

      gv_screen3 = '1300'.

      gv_pb1 = ' '.

      gv_pb2 = 'X'.

      gv_pb3 = 'X'.

 

    WHEN 'REFRESH'.

*      PERFORM fm_refresh.

*      PERFORM fm_proses.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE user_command_2000 INPUT.

  save_ok = ok_code.

  CLEAR ok_code.

  CASE save_ok.

    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.

      LEAVE PROGRAM.

    WHEN 'EXECUTE'.

      PERFORM fm_proses.

      gv_screen1 = '3000'.

      gv_screen2 = '1200'.

      gv_screen3 = '1300'.

      gv_pb1 = ' '.

      gv_pb2 = 'X'.

      gv_pb3 = 'X'.

 

    WHEN 'REFRESH'.

      PERFORM fm_refresh.

      PERFORM fm_proses.

  ENDCASE.

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

76.Make Function FM_REFRESH under module USER_COMMAND_2000  INPUT

*&---------------------------------------------------------------------*

*&      Form FM_REFRESH

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_refresh.

  gv_screen1 = '1100'.

  gv_screen1 = '3000'.

  gv_screen1 = '3000'.

  gv_pb1 = 'X'.

  gv_pb2 = ' '.

  gv_pb3 = ' '.

 

  LOOP AT gi_header.

    DELETE gi_header.

  ENDLOOP.

ENDFORM.                "FM_REFRESH

 

77.Make Function FM_PROSES under module "USER_COMMAND_0300 INPUT"

*&---------------------------------------------------------------------*

*&      Form FM_PROSES

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_proses.

  DATA : lv_rowcount(6),

         lv_counter TYPE i,

         lv_text1 TYPE string,

         lv_text2 TYPE string,

         lv_text3 TYPE string.

 

*delete data at grid first

  LOOP AT gi_header.

    DELETE gi_header.

  ENDLOOP.

  LOOP AT gi_detail.

    DELETE gi_detail.

  ENDLOOP.

 

  SELECT *

  FROM qals

    INTO CORRESPONDING FIELDS OF TABLE gi_qals

  WHERE

    matnr IN so_matnr AND

    prueflos IN so_pru AND

    art IN ('03','04').

 

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qapp

  FROM qapp

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos AND

    userc2 IN so_c2 AND

    userd1 IN so_d1.

 

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qamv

  FROM qamv

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos.

 

* collect quantities data

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qase

  FROM qase

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos.

 

* collect qualities data

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qasr

  FROM qasr

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos.

 

* collect data specification for qualities data

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qpct

  FROM qpct

    FOR ALL ENTRIES IN gi_qasr

  WHERE

    codegruppe = gi_qasr-gruppe1.

 

* collect data result for qualities data

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qpam

  FROM qpam

    FOR ALL ENTRIES IN gi_qamv

  WHERE

    auswahlmge = gi_qamv-auswmenge1.

 

*copy data to GI_HEADER

  LOOP AT gi_qals.

*    gi_header-test = '@2\QHide@'.

    GI_HEADER-NUM = LV_COUNTER.

    MOVE-CORRESPONDING GI_QALS TO GI_HEADER.

    SHIFT GI_HEADER-MATNR LEFT DELETING LEADING '0' IN CHARACTER MODE.

    SPLIT gi_header-ppsortkey AT '|' INTO lv_text1 lv_text2 lv_text3.

    gi_header-userc2 = lv_text2.

    gi_header-icon = icon_expand.

    gi_header-child = 0.

    gi_header-child_num = 0.

    APPEND gi_header.

  ENDLOOP.

  SORT gi_header BY num child_num.

 

  CONCATENATE 'Total data :' lv_rowcount INTO gv_info.

ENDFORM.

 

78.Make Function FM_PROSES_DETAIL

*&---------------------------------------------------------------------*

*&      Form FM_PROSES_DETAIL

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_proses_detail USING pv_index.

  DATA: lv_counter TYPE i.

*  CREATE GI_DETAIL

  LOOP AT  gi_detail.

    DELETE gi_detail.

  ENDLOOP.

  CLEAR gi_detail.

 

  READ TABLE gi_header INDEX pv_index.

 

*  Add Quantitatif Data

  LOOP AT gi_qase WHERE prueflos = gi_header-prueflos AND detailerg =

gi_header-probenr.

    LOOP AT gi_qamv WHERE prueflos = gi_qase-prueflos AND merknr =

gi_qase-merknr.

      MOVE-CORRESPONDING gi_header TO gi_detail.

      MOVE-CORRESPONDING gi_qamv TO gi_detail.

      MOVE-CORRESPONDING gi_qase TO gi_detail.

      IF gi_detail-messwert <= gi_detail-toleranzob AND

gi_detail-messwert >= gi_detail-toleranzun.

        gi_detail-icon = icon_checked.

      ELSE.

        gi_detail-icon = icon_cancel.

      ENDIF.

      APPEND gi_detail.

 

    ENDLOOP.

 

  ENDLOOP.

*--------------------------------------------------------------------*

*  Add Qualitatif Data

  LOOP AT gi_qasr WHERE prueflos = gi_header-prueflos AND probenr =

gi_header-probenr.

 

    LOOP AT gi_qamv WHERE prueflos = gi_qase-prueflos AND merknr =

gi_qasr-merknr.

      READ TABLE gi_qase WITH KEY prueflos = gi_header-prueflos

                                  detailerg = gi_header-probenr

                                  merknr = gi_qasr-merknr.

      IF sy-subrc <> 0.

        MOVE-CORRESPONDING gi_header TO gi_detail.

        MOVE-CORRESPONDING gi_qamv TO gi_detail.

        MOVE-CORRESPONDING gi_qasr TO gi_detail.

*        Add Specification

        READ TABLE gi_qpct WITH KEY codegruppe = gi_qasr-gruppe1 code =

gi_qasr-code1.

        CONCATENATE gi_qasr-code1 gi_qpct-kurztext INTO

gi_detail-messwert_char SEPARATED BY space.

 

*        Add Result

        READ TABLE gi_qpam WITH KEY werks = gi_header-werks

                                    auswahlmge = gi_qamv-auswmenge1.

        gi_detail-tolgrenze = gi_qpam-ktx01.

        IF gi_qasr-code1 = '10'.

          gi_detail-icon = icon_checked.

        ELSE.

          gi_detail-icon = icon_cancel.

        ENDIF.

        APPEND gi_detail.

      ENDIF.

 

    ENDLOOP.

  ENDLOOP.

*--------------------------------------------------------------------*

*  Add Specification untuk data Kuantitatif

  FREE lv_counter.

  LOOP AT gi_detail.

    ADD 1 TO lv_counter.

    break abap08.

    IF gi_detail-tolgrenze IS INITIAL.

      PERFORM fm_create_specification USING lv_counter.

      PERFORM fstring_ausgeben USING 'X'

                                     gi_detail-messwert

                                     gi_detail-stellen

                            CHANGING gi_detail-messwert_c.

      gi_detail-messwert_char = gi_detail-messwert_c.

      MODIFY gi_detail.

    ENDIF.

  ENDLOOP.

*--------------------------------------------------------------------*

 

  SORT gi_detail BY merknr.

 

  IF gv_pb3 = 'X'.

    CALL METHOD

      tg_detail->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

  ENDIF.

 

ENDFORM.                    "FM_PROSES_DETAIL

 

79.Make fm_create_specification at the end of line coding.

*&---------------------------------------------------------------------*

*&      Form  fm_create_specification

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_create_specification USING pv_tabix.

  DATA: l_string         LIKE qamkr-tolgrenze,

        l_length         TYPE i,

        l_length_write   TYPE i,

        l_maximum_length TYPE i VALUE 40,

        lv_qmkst LIKE STANDARD TABLE OF qmkst WITH HEADER LINE.

  READ TABLE gi_detail INDEX pv_tabix.

  FREE gi_detail-tolgrenze.

  IF gi_detail-tolgrenze IS INITIAL.

    MOVE gi_detail-steuerkz TO lv_qmkst.

    CLEAR l_string.

    CLEAR l_length.

* Untere Toleranz

    PERFORM fstring_ausgeben USING 'X'

                                   gi_detail-toleranzun

                                   gi_detail-stellen

                          CHANGING gi_detail-toleranzun_char.

* Obere Toleranz

    PERFORM fstring_ausgeben USING 'X'

                                   gi_detail-toleranzob

                                   gi_detail-stellen

                          CHANGING gi_detail-toleranzob_char.

 

    IF NOT gi_detail-tolunni IS INITIAL.

      IF   gi_detail-tolobni IS INITIAL.

* Nur untere Toleranzgrenze

        MOVE '>=' TO l_string.

        l_length = STRLEN( l_string ) + 2.

      ENDIF.

* Untere Toleranzgrenze übernehmen

      CONDENSE gi_detail-toleranzun_char.

      l_length_write = STRLEN( gi_detail-toleranzun_char ).

      ADD l_length TO l_length_write.

 

      IF l_length_write LE l_maximum_length.

        WRITE gi_detail-toleranzun_char TO l_string+l_length.

      ENDIF.

 

      IF NOT gi_detail-tolobni IS INITIAL.

        l_length = STRLEN( l_string ).

        l_length_write = l_length + 2.

 

        IF l_length_write LE l_maximum_length.

          WRITE ' .. ' TO l_string+l_length.

        ENDIF.

      ENDIF.

    ENDIF.

 

    IF NOT gi_detail-tolobni IS INITIAL.

      CONDENSE gi_detail-toleranzob_char.

      IF gi_detail-tolunni IS INITIAL.

* Nur obere Toleranzgrenze

        MOVE '<=' TO l_string.

        l_length = STRLEN( l_string ) + 2.

      ELSE.

        l_length = STRLEN( l_string ) + 1.

      ENDIF.

 

      l_length_write = STRLEN( gi_detail-toleranzob_char ).

      ADD l_length TO l_length_write.

 

      IF l_length_write LE l_maximum_length.

        WRITE gi_detail-toleranzob_char TO l_string+l_length.

      ENDIF.

    ENDIF.

 

    IF    gi_detail-tolunni IS INITIAL

      AND gi_detail-tolobni IS INITIAL.

* Keine Toleranzgrenze zum Merkmal

      IF NOT gi_detail-sollwni IS INITIAL.

* Sollwert zum Merkmal gepflegt

        PERFORM fstring_ausgeben USING 'X'

                                       gi_detail-sollwert

                                       gi_detail-stellen

                              CHANGING gi_detail-sollwert_char.

 

        WRITE gi_detail-sollwert_char TO l_string.

      ELSE.

        IF NOT lv_qmkst-messwerte IS INITIAL.

* Quantitative Rückmeldung ohne quantitative Vorgaben

* Nachfolgend wird noch eine evtl. vorhandene Maßeinheit gesetzt

          CLEAR l_string.

 

        ELSEIF NOT lv_qmkst-pruefkat IS INITIAL.

** Auswahlmenge vorhanden

*          MOVE GI_DETAIL-QPAMKTXT1  TO L_STRING.

 

        ELSEIF lv_qmkst-bewfhlzhl IS INITIAL.

** Anzahl der fehlerhaften Einheiten sind zurückzumelden

*          IF (   P_QAQEE-ERFSICHT EQ '11'

*              OR P_QAQEE-ERFSICHT EQ '12' )

*           AND LV_QMKST-ESTUKZ EQ URWERT_CHAR.

*            MOVE 'Accepted <-> Rejected' TO L_STRING.

*          ELSE.

*            MOVE 'Number of nonconforming units' TO L_STRING.

*          ENDIF.

        ELSE.

* Anzahl Fehler sind zurückzumelden

          MOVE 'No. of defects' TO l_string.

        ENDIF.

      ENDIF.

    ENDIF.

 

    IF    NOT gi_detail-masseinhsw IS INITIAL

      AND NOT lv_qmkst-quantitat  IS INITIAL.

* Maßeinheit übernehmen

      l_length = STRLEN( l_string ) + 1.

      l_length_write = STRLEN( gi_detail-masseinhsw ).

      ADD l_length TO l_length_write.

 

      IF l_length_write LE l_maximum_length.

        WRITE gi_detail-masseinhsw TO l_string+l_length.

      ENDIF.

    ENDIF.

 

    IF l_string IS INITIAL.

* Keine Vorgabeninformationen vorhanden

      MOVE text-104 TO l_string.

    ENDIF.

 

* Hilfsfeld in Merkmalsstruktur übernehmen

    MOVE l_string TO gi_detail-tolgrenze.

  ENDIF.

 

ENDFORM.                    "fm_create_specification

 

80.Save Program

81.Now, we'll make OOP(Object Oriented Programing) so we'll create object ZRE_QM011_CLASSES. Type INCLUDE ZRE_QM011_CLASSES. at the first line coding after syntax

REPORT  zre_inspection_point.

 

82.double click at ZRE_QM011_CLASSES

83.It's will show pop up

ar0292 just click yes button

ar0293just click yes button

 

84.It's will create include program

ar0294

85.Click Save ar0295 at local object

86.Type code of Class

Display Code

87.Save and back to main program

88.Edit Module  STATUS_1200  OUTPUT

Before

*&---------------------------------------------------------------------*

*&      Module  STATUS_1200  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_1200 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_1200  OUTPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  STATUS_1200  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_1200 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

IF tc_header IS INITIAL.

 

    PERFORM fm_build_alv_object_header.

 

  ELSE.

    CALL METHOD

      tg_header->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

 

  ENDIF.

ENDMODULE.                 " STATUS_1200  OUTPUT

 

89.Edit Module  STATUS_1300  OUTPUT

Before

*&---------------------------------------------------------------------*

*&      Module  STATUS_1300  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_1300 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_1300  OUTPUT

 

After

*&---------------------------------------------------------------------*

*&      Module  STATUS_1300  OUTPUT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

MODULE status_1300 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

IF tc_detail IS INITIAL.

 

    PERFORM fm_build_alv_object_detail.

 

  ELSE.

 

    CALL METHOD

      tg_detail->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

 

  ENDIF.

ENDMODULE.                 " STATUS_1300  OUTPUT

 

90.Make new subroutine fm_build_alv_object_header which we define before

*&---------------------------------------------------------------------*

*&      Form  FM_BUILD_ALV_OBJECT_HEADER

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_build_alv_object_header.

*to define container

  CREATE OBJECT tc_header

     EXPORTING container_name = 'FC_HEADER'.

     

*to insert grid into it's container     

  CREATE OBJECT tg_header

     EXPORTING i_parent = tc_header.

 

  CREATE OBJECT go_event_receiver_header.

  PERFORM fm_build_fieldcat_header TABLES gw_fieldcat_header.

 

  CREATE OBJECT go_event_receiver_header.

  SET HANDLER go_event_receiver_header->handle_toolbar FOR tg_header.

  SET HANDLER go_event_receiver_header->handle_user_command FOR

tg_header.

  SET HANDLER go_event_receiver_header->handle_hotspot_click FOR

tg_header.

  SET HANDLER go_event_receiver_header->handle_button_click FOR

tg_header.

  SET HANDLER go_event_receiver_header->handle_double_click FOR

tg_header.

 

  CALL METHOD

    tg_header->set_table_for_first_display

    EXPORTING

      i_save           = 'U'

      i_structure_name = 'GI_HEADER'

    CHANGING

      it_outtab        = gi_header[]

      it_fieldcatalog  = gw_fieldcat_header[].

 

ENDFORM.                    "FM_BUILD_ALV_OBJECT_HEADER

 

91.Make new subroutine fm_build_alv_object_detail which we define before

*&---------------------------------------------------------------------*

*&      Form  FM_BUILD_ALV_OBJECT_DETAIL

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_build_alv_object_detail.

  CREATE OBJECT tc_detail

     EXPORTING container_name = 'FC_DETAIL'.

  CREATE OBJECT tg_detail

     EXPORTING i_parent = tc_detail.

 

  CREATE OBJECT go_event_receiver_detail.

  PERFORM fm_build_fieldcat_detail TABLES gw_fieldcat_detail.

 

  CREATE OBJECT go_event_receiver_detail.

  SET HANDLER go_event_receiver_detail->handle_toolbar FOR tg_detail.

  SET HANDLER go_event_receiver_detail->handle_user_command FOR

tg_detail.

  SET HANDLER go_event_receiver_detail->handle_hotspot_click FOR

tg_detail.

  SET HANDLER go_event_receiver_detail->handle_button_click FOR

tg_detail.

 

  CALL METHOD

    tg_detail->set_table_for_first_display

    EXPORTING

      i_save           = 'U'

      i_structure_name = 'GI_DETAIL'

    CHANGING

      it_outtab        = gi_detail[]

      it_fieldcatalog  = gw_fieldcat_detail[].

 

ENDFORM.                    "FM_BUILD_ALV_OBJECT_DETAIL

 

92.Now, to define fields of ALV, we need to type code below. Type it before fm_build_alv_object_header

*&---------------------------------------------------------------------*

*&      Form  F_FIELDCATG

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM f_fieldcatg USING

                      t_alv_fieldcat TYPE lvc_t_fcat

                      value(fu_types)  "0

                      value(fu_fname)  "1

                      value(fu_reftb)  "2

                      value(fu_refld)  "3

                      value(fu_noout)  "4

                      value(fu_outln)  "5

                      value(fu_fltxt)  "6

                      value(fu_reptxt) "7

                      value(fu_coltxt) "8

                      value(fu_dosum)  "9

                      value(fu_hotsp)  "10

                      value(fu_dec)    "11

                      value(fu_waers)

                      value(fu_meins)

                      value(fu_meins_f)

                      value(fu_waers_f)

                      value(fu_checkbox)

                      value(fu_fixcolumn)

                      value(fu_icon)

                      value(fu_edit)

                      value(fu_key)

                      .

 

 

  DATA: ld_fieldcat  TYPE lvc_t_fcat WITH HEADER LINE.

  CLEAR: ld_fieldcat.

  ld_fieldcat-tabname       = fu_types.

  ld_fieldcat-fieldname     = fu_fname.

  ld_fieldcat-ref_table     = fu_reftb.

  ld_fieldcat-ref_field     = fu_refld.

  ld_fieldcat-no_out        = fu_noout.

  ld_fieldcat-outputlen     = fu_outln.

  ld_fieldcat-seltext       = fu_fltxt.

  ld_fieldcat-reptext       = fu_reptxt.

  ld_fieldcat-coltext       = fu_coltxt.

  ld_fieldcat-do_sum        = fu_dosum.

  ld_fieldcat-hotspot       = fu_hotsp.

  ld_fieldcat-decimals_o    = fu_dec.

  ld_fieldcat-currency      = fu_waers.

  ld_fieldcat-quantity      = fu_meins.

  ld_fieldcat-qfieldname    = fu_meins_f.

  ld_fieldcat-cfieldname    = fu_waers_f.

  ld_fieldcat-checkbox      = fu_checkbox.

  ld_fieldcat-fix_column    = fu_fixcolumn.

  ld_fieldcat-icon          = fu_icon.

  ld_fieldcat-edit          = fu_edit.

  ld_fieldcat-key          = fu_key.

  APPEND ld_fieldcat TO t_alv_fieldcat.

 

ENDFORM.                    "F_FIELDCATG

 

93.Now we need to make subroutine for Form  FM_BUILD_FIELDCAT_HEADER

*&---------------------------------------------------------------------*

*&      Form  FM_BUILD_FIELDCAT_HEADER

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->FT_REPORT  text

*----------------------------------------------------------------------*

FORM fm_build_fieldcat_header TABLES ft_report.

  PERFORM f_fieldcatg USING gw_fieldcat_header 'GI_HEADER' :

*  'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' ''

*,

*  'TEST' 'GI_HEADER' 'TEST' '' '10' '' '' '' '' '' '' '' '' '' '' '' ''

* '' '' '',

  'NUM' 'GI_HEADER' 'NUM' '' '6' '' '' 'Number' '' '' '' '' '' '' '' ''

'' '' '' '',

  'MATNR' 'GI_HEADER' 'MATNR' '' '13' '' '' 'Material' '' '' '' '' '' ''

 '' '' '' '' '' '',

  'KTEXTMAT' 'GI_HEADER' 'KTEXTMAT' '' '25' '' '' 'Description' '' '' ''

 '' '' '' '' '' '' '' '' '',

  'WERK' 'GI_HEADER' 'WERK' '' '5' '' '' 'Plant' '' '' '' '' '' '' '' ''

 '' '' '' '',

  'AUFNR' 'GI_HEADER' 'AUFNR' '' '13' '' '' 'Production Order' '' '' ''

'' '' '' '' '' '' '' '' '',

  'ICON' 'GI_HEADER' 'ICON' '' '3' '' '' '' '' 'X' '' '' '' '' '' '' ''

'X' '' '',

  'PRUEFLOS' 'GI_HEADER' 'PRUEFLOS' '' '13' '' '' 'Inspection Lot' '' ''

 '' '' '' '' '' '' '' '' '' '',

*  'CHILD_NUM' 'GI_HEADER' 'CHILD_NUM' '' '8' '' '' 'CHILD_NUM' '' '' ''

* '' '' '' '' '' '' '' '' '',

  'ART' 'GI_HEADER' 'ART' '' '4' '' '' 'Type' '' '' '' '' '' '' '' '' ''

 '' '' '',

  'TIME' 'GI_HEADER' 'TIME' '' '8' '' '' 'Time' '' '' '' '' '' '' '' ''

'' '' '' '',

  'DATE' 'GI_HEADER' 'DATE' '' '12' '' '' 'Inspection' '' '' '' '' '' ''

 '' '' '' '' '' '',

  'PROLOT' 'GI_HEADER' 'PROLOT' '' '10' '' '' 'Prod. Lot' '' '' '' '' ''

 '' '' '' '' '' '' ''

*  'PROBENR' 'GI_HEADER' 'PROBENR' '' '10' '' '' 'PROBENR' '' '' '' ''

*'' '' '' '' '' '' '' ''

*  'PRUEFPKT' 'GI_HEADER' 'PRUEFPKT' '' '13' '' '' 'Inspection Point' ''

* '' '' '' '' '' '' '' '' '' '' '',

  .

ENDFORM.                    "FM_BUILD_FIELDCAT_HEADER

 

94.Then we need to make subroutine for Form  FM_BUILD_FIELDCAT_DETAIL

*&---------------------------------------------------------------------*

*&      Form  FM_BUILD_FIELDCAT_DETAIL

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->FT_REPORT  text

*----------------------------------------------------------------------*

FORM fm_build_fieldcat_detail TABLES ft_report.

 

  PERFORM f_fieldcatg USING gw_fieldcat_detail 'GI_DETAIL' :

*  'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' ''

*,

*  'NUM' 'GI_DETAIL' 'NUM' '' '6' '' '' 'Number' '' '' '' '' '' '' '' ''

* '' '' '' '',

  'MERKNR' 'GI_DETAIL' 'MERKNR' '' '4' '' '' 'NO' '' '' '' '' '' '' ''

'' '' '' '' '',

  'VERWMERKM' 'GI_DETAIL' 'VERWMERKM' '' '10' '' '' 'Characteristic' ''

'' '' '' '' '' '' '' '' '' '' '',

  'KURZTEXT' 'GI_DETAIL' 'KURZTEXT' '' '30' '' '' 'Short Text' '' '' ''

'' '' '' '' '' '' '' '' '',

  'TOLGRENZE' 'GI_DETAIL' 'TOLGRENZE' '' '14' '' '' 'Specification' ''

'' '' '' '' '' '' '' '' '' '' '',

  'MESSWERT_CHAR' 'GI_DETAIL' 'MESSWERT_CHAR' '' '16' '' '' 'Result' ''

'' '' '' '' '' '' '' '' '' '' '',

  'ICON' 'GI_DETAIL' 'ICON' '' '8' '' '' 'Valuation' '' '' '' '' '' ''

'' '' '' 'X' '' ''

  .

 

ENDFORM.                    "FM_BUILD_FIELDCAT_DETAIL

 

95.Now, we'll do feature 'on click hotspot' at ALV header, so we can click it. Create sub routine below. We can code it after ALV object detail

*&---------------------------------------------------------------------*

*&      Form  FM_ON_CLICK_HOTSPOT

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->I_ROW_ID     text

*      -->                 text

*      -->I_COLUMN_ID  text

*      -->                 text

*      -->IS_ROW_NO    text

*----------------------------------------------------------------------*

FORM fm_on_click_hotspot USING i_row_id TYPE lvc_s_row

             i_column_id TYPE lvc_s_col

            is_row_no TYPE lvc_s_roid.

 

*  READ TABLE GI_HEADER INDEX I_ROW_ID.

*  IF SY-SUBRC IS INITIAL.

*    GV_ROW_NO = I_ROW_ID.

*  ENDIF.

  READ TABLE gi_header INDEX i_row_id.

  IF gi_header-icon IS INITIAL.

 

  ELSEIF gi_header-icon = icon_expand.

    PERFORM fm_load_child_header USING gi_header-prueflos gi_header-werk

 i_row_id.

  ELSEIF gi_header-icon = icon_collapse.

    PERFORM fm_unload_child_header USING gi_header-prueflos i_row_id.

  ENDIF.

ENDFORM.                    "FM_ON_CLICK_HOTSPOT

 

96.Create subroutine fm_on_Button_click

*&---------------------------------------------------------------------*

*&      Form  fm_on_BUTTON_CLICK

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_ES_COL_ID  text

*      -->P_ES_ROW_NO  text

*----------------------------------------------------------------------*

FORM fm_on_button_click  USING    p_es_col_id

                                  p_es_row_no.

  READ TABLE gi_header INDEX p_es_row_no.

  IF sy-subrc IS INITIAL.

    gv_row_no = p_es_row_no.

  ENDIF.

ENDFORM.                    " fm_on_BUTTON_CLICK

 

97.Create subroutine fm_on_double_click

*&---------------------------------------------------------------------*

*&      Form  FM_ON_DOUBLE_CLICK

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->P_E_ROW  text

*      -->P_E_COLUMN  text

*      -->P_ES_ROW_NO  text

*----------------------------------------------------------------------*

FORM fm_on_double_click  USING    p_e_row

                                  p_e_column

                                  p_es_row_no TYPE lvc_s_roid.

*  BREAK ABAP08.

  DATA: lv_row_id TYPE i.

  lv_row_id = p_es_row_no-row_id.

  READ TABLE gi_header INDEX lv_row_id.

  IF gi_header-icon IS INITIAL.

    PERFORM fm_proses_detail USING lv_row_id.

  ENDIF.

ENDFORM.                    " FM_ON_DOUBLE_CLICK

 

98.We need to load data for ALV, so we need to make subroutine for it too. we create FM_load_child_header

*&---------------------------------------------------------------------*

*&      Form  FM_load_child_header

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

FORM fm_load_child_header USING pv_prueflos pv_werks pv_i_row_id TYPE

lvc_s_row.

  DATA: lv_rowcount(6),

        lv_counter TYPE i,

        lv_row_id TYPE i,

        lv_text1(6),

        lv_text2(10),

        lv_text3(10),

        lv_werks LIKE qals-werk.

 

  lv_werks = pv_werks.

  READ TABLE gi_header WITH KEY prueflos = pv_prueflos icon =

icon_expand.

  IF sy-subrc = 0.

    gi_header-icon = icon_collapse.

*  GI_HEADER-CHK = 'X'.

    FREE lv_counter.

    LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.

      ADD 1 TO lv_counter .

    ENDLOOP.

    IF lv_counter > 0.

      MODIFY gi_header INDEX sy-tabix.

      FREE lv_counter.

      LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.

        ADD 1 TO lv_counter .

        CLEAR gi_header.

        FREE  gi_header-num.

        gi_header-werks = lv_werks.

        gi_header-prueflos = gi_qapp-prueflos.

        gi_header-child_num = lv_counter.

        gi_header-child = pv_i_row_id.

        SPLIT gi_qapp-ppsortkey AT '|' INTO lv_text1 lv_text2 lv_text3.

        CONCATENATE lv_text1+0(2) lv_text1+2(2) lv_text1+4(2) INTO

gi_header-time SEPARATED BY ':' .

        CONCATENATE lv_text2+6(2) lv_text2+4(2) lv_text2+0(4) INTO

gi_header-date SEPARATED BY '/' .

 

        gi_header-prolot = lv_text3.

        gi_header-probenr = gi_qapp-probenr.

 

        SHIFT gi_header-prolot LEFT DELETING LEADING '0' IN CHARACTER

MODE.

 

        APPEND gi_header.

 

      ENDLOOP.

 

      IF lv_counter > 0.

        SORT gi_header BY prueflos child_num child.

 

        pv_i_row_id-index = pv_i_row_id-index + lv_counter + 4.

 

        CALL METHOD

          tg_header->refresh_table_display

          EXPORTING

            i_soft_refresh = 'X'.

 

        CALL METHOD

          tg_header->set_current_cell_via_id

          EXPORTING

            is_row_id = pv_i_row_id.

      ENDIF.

 

    ENDIF.

  ENDIF.

 

ENDFORM.                    "FM_load_child_header

 

99.We also need to unload data from ALV, so we need to code FM_unload_child_header

*&---------------------------------------------------------------------*

*&      Form  FM_UNLOAD_CHILD_HEADER

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*      -->PV_NUM       text

*      -->PV_PRUEFLOS  text

*----------------------------------------------------------------------*

FORM fm_unload_child_header USING pv_prueflos pv_i_row_id TYPE lvc_s_row

.

  DATA: lv_rowcount(6),

        lv_counter TYPE i.

  LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.

    ADD 1 TO lv_counter.

  ENDLOOP.

 

  IF lv_counter > 0.

    LOOP AT gi_header WHERE child_num > 0 AND prueflos = pv_prueflos.

      DELETE gi_header INDEX sy-tabix.

    ENDLOOP.

    LOOP AT gi_header WHERE prueflos = pv_prueflos.

      gi_header-icon = icon_expand.

      MODIFY gi_header.

    ENDLOOP.

 

    pv_i_row_id-index = pv_i_row_id-index + lv_counter.

    CALL METHOD

      tg_header->refresh_table_display

      EXPORTING

        i_soft_refresh = 'X'.

 

    CALL METHOD

      tg_header->set_current_cell_via_id

      EXPORTING

        is_row_id = pv_i_row_id.

  ENDIF.

ENDFORM.                    "FM_UNLOAD_CHILD_HEADER

 

100.Edit or active declaration that we already inactive.

Before

DATA: tc_header TYPE REF TO cl_gui_custom_container,

      tg_header TYPE REF TO cl_gui_alv_grid,

      tc_detail TYPE REF TO cl_gui_custom_container,

      tg_detail TYPE REF TO cl_gui_alv_grid.

*      go_event_receiver_header TYPE REF TO lcl_event_receiver,

*      go_event_receiver_detail TYPE REF TO lcl_event_receiver.

 

*DATA: gw_fieldcat_header TYPE lvc_t_fcat,

*      gw_fieldcat_detail TYPE lvc_t_fcat.

 

*DATA: gv_row_no TYPE i.

 

After

DATA: tc_header TYPE REF TO cl_gui_custom_container,

      tg_header TYPE REF TO cl_gui_alv_grid,

      tc_detail TYPE REF TO cl_gui_custom_container,

      tg_detail TYPE REF TO cl_gui_alv_grid,

      go_event_receiver_header TYPE REF TO lcl_event_receiver,

      go_event_receiver_detail TYPE REF TO lcl_event_receiver.

 

DATA: gw_fieldcat_header TYPE lvc_t_fcat,

      gw_fieldcat_detail TYPE lvc_t_fcat.

 

DATA: gv_row_no TYPE i.

 

101.Now, we create include utilities program. Type code below at the end of line coding.

INCLUDE zre_qm011_utilities.

102.Double click at zre_qm011_utilities

103.It will show pop up

ar0272 Just click Yes button

104.Now we'll create new include

ar0273

105.Click save ar0295 at local object

106.Type Code at program include.

Display Code

 

107.Save and Activate include program.

ar0274

108.Go to zre_qm011_classes by double click at object include

ar0275

109.Save and Activate zre_qm011_classes

ar0276

110.Back to main program

111.Save and activate

ar0277

112.Run program by click execute button ar0278

 

Result

Input Selection

ar0279

 

ar0280

Output

ar0281

ar0282

 

 

 

 

 

Source Code Main program

 

Source ZRE_QM011_CLASSES

 

 

Source ZRE_FI010_UTILITIES