Report_(703)

<< Click to Display Table of Contents >>

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

Report_(703)

Objektif

Creating Report

Result

Source Code

Kode Transaksi

SE38 - ABAP Editor

Tabel

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

Kontributor

Danar Andri Prasetyo ( danaruto131@yahoo.com )

 

 

 

Membuat Report

1.Buka SE38

2.Buat Program Baru,

Nama Program        : ZRE_INSPECTION_POINT ( Functional Specification )

Judul                : 703 - Report Inspection Point

 

3.Simpan di Local Object.

4.Kita buat screen utama dengan kode 2000

Tampilkan Langkah-langkahnya

 

5.Sekarang, didalam layar Screen 2000, kita akan buat 3 subscreen

Tampilkan Langkah-langkahnya

6.Kemudian kita buat screen "0100" untuk selection screen

Tampilkan Langkah-langkahnya

7.Kemudian kita akan membuat screen '0200' untuk  ALV HEADER

Tampilkan Langkah-langkahnya

8.Sekarang, Berlanjut membuat screen '0300' untuk  ALV Detail Screen

DTampilkan Langkah-langkahnya

9.Sekarang, kita buat screen kosong. Beri nama screen '3000'. Tujuan pembuatan screen ini untuk menggantikan screen 100,200,300 saat disembunyikan

Tampilkan Langkah-langkahnya

10.Deklarasikan Tabel

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

11.Deklarasikan Variabel

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.Deklarasikan 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.Deklarasikan Initialization untuk label text

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.Deklarasikan start-of-selection pemanggilan screen

START-OF-SELECTION.

  CALL SCREEN 2000.

 

END-OF-SELECTION.

15.Simpan dan aktifkan Program

ar0228

16.Sekarang kita tuliskan, coding pada Screen 2000

17.Klik ganda pada screen 2000

ar0229

18.Edit Flow logic

Sebelum

PROCESS BEFORE OUTPUT.

 MODULE status_2000.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_2000.

 

Setelah

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.Simpan dan Aktifkan

ar0230

20.Klik ganda pada MODULE USER_COMMAND_2000

21.Akan muncul menu pop up

ar0231 , kemudian klik tombol Yes

22.Pilih main program

ar0232 then click ar0233

23.Edit Module User command 2000

Sebelum

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

*&      Module  USER_COMMAND_2000  INPUT

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

*       text

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

MODULE user_command_2000 INPUT.

 

ENDMODULE.                 " USER_COMMAND_2000  INPUT

 

Setelah

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

*&      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.Simpan dan Aktifkan

ar0234

25.Klik ganda pada screen 0100

ar0235

26.Edit Flow Logic

Sebelum

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0100.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0100.

Setelah

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.Simpan Screen 100

28.Klik ganda pada  MODULE status_0100.

29.Akan muncul menu pop up

ar0236  kemudian klik tombol Yes

30.Pilih main program

ar0237 then click ar0233

31.Edit Module Status_0100 output

Sebelum

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

*&      Module  status_0100  OUTPUT

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

*       text

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

module status_0100 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0100  OUTPUT

 

Setelah

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

*&      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.

 

* untuk kontrol aktif yang dibutuhkan

  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.Klik ganda pada screen 0100

ar0235

33.Klik Ganda Pada "user_command_0100".

34.Akan muncul menu pop up

ar0238kemudian klik tombol Yes.

35.Pilih main program

ar0239

36.Edit Module user_command_0100 Input

Sebelum

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

*&      Module  user_command_0100  INPUT

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

*       text

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

MODULE user_command_0100 INPUT.

 

ENDMODULE.                 " user_command_0100  INPUT

 

Setelah

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

*&      Module  user_command_0100  INPUT

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

*       text

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

MODULE user_command_0100 INPUT.

* untuk 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.Simpan dan Aktifkan

ar0240

ar0241

38.Klik ganda pada screen 0200

ar0242

39.Edit Flow Logic

Sebelum

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0200.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0200.

Setelah

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.Simpan  dan Aktifkan Screen 200

ar0243

41.Klik ganda pada  MODULE status_0200.

42.Akan muncul menu pop up

ar0244,kemudian klik tombol Yes

43.Pilih main program

ar0237 then click ar0233

44.Edit Module Status_0200 output

Sebelum

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

*&      Module  status_0200  OUTPUT

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

*       text

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

module status_0200 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0200  OUTPUT

 

Setelah

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

*&      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.Simpan dan aktifkan

ar0245

46.Klik Ganda pada screen 0200

ar0242

47.Klik Ganda pada "user_command_0200".

48.Akan muncul menu pop up.

ar0246, kemudian klik tombol Yes

49.Pilih main program

ar0239

50.Edit Module user_command_0200 Input

Sebelum

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

*&      Module  user_command_0200  INPUT

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

*       text

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

MODULE user_command_0200 INPUT.

 

ENDMODULE.                 " user_command_0200  INPUT

 

Setelah

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

*&      Module  user_command_0200  INPUT

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

*       text

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

module user_command_0200 input.

* untuk 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.Simpan dan aktifkan

ar0247

52.Klik ganda pada screen 0300

ar0248

53.Edit Flow Logic

Sebelum

PROCESS BEFORE OUTPUT.

* MODULE STATUS_0300.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_0300.

Setelah

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.Simpan dan aktifkan Screen 300

ar0249

55.Klik ganda pada  MODULE status_0300.

56.Akan muncul menu pop up

ar0250 kemudian klik tombol Yes

57.Pilih main program

ar0237 Kemudian klik ar0233

58.Edit Module Status_0300 output

Sebelum

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

*&      Module  status_0300  OUTPUT

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

*       text

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

module status_0300 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

  

endmodule.                 " status_0300  OUTPUT

 

Setelah

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

*&      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.

 

* untuk kontrol aktif yang dibutuhkan

  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.Simpan dan Aktifkan

ar0245

60.Klik ganda pada screen 0300

ar0248

61.Klik ganda pada "user_command_0300".

62.Akan muncul menu pop up

ar0251kemudian klik tombol Yes

63.Pilih main program

ar0239

64.Edit Module user_command_0300 Input

Sebelum

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

*&      Module  user_command_0300  INPUT

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

*       text

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

MODULE user_command_0300 INPUT.

 

ENDMODULE.                 " user_command_0300  INPUT

 

Setelah

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

*&      Module  user_command_0300  INPUT

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

*       text

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

module user_command_0300 input.

* untuk 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.Simpan dan aktifkan

ar0245

66.Coba jalankan program dengan mengeklik ar0252

67.Hasilnya seperti gambar dibawah, tapi masih ada error jika anda mengeklik "Header Inspection Point" dan "Detail Inspection Point"

ar0253

68.Error ini disebabkan belum adanya kode sintak pada ALV. Jadi kita perlu mengkoding di ALV.

69.Untuk menyelesaikan masalah itu, kita wajib membuat subscreen '1200' untuk ALV Header Container

Tampilkan Langkah-langkahnya

70.Sekarang kita akan membuat screen 1300 for ALV Detail Container

Display Steps

71.Kembali ke program utama, Deklarasikan variabel baru, sebelum deklarasi tabel. Variabel tersebut adalah gi_header dan 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.Simpan dan aktifkan program

ar0245

73.Tambahkan variabel baru setelah deklarasi tabel.

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 Deklarasi variabel sebelumnya

Sebelum

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.

 

Setelah

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

Sebelum

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

*&      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

 

Setelah

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

*&      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.Buat Function FM_REFRESH dibawah modul 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.Buat Function FM_PROSES dibawah 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.

 

*hapus data pada grid dulu

  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.

 

* mengambil data quantity

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qase

  FROM qase

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos.

 

* mengambil data quality

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qasr

  FROM qasr

    FOR ALL ENTRIES IN gi_qals

  WHERE

    prueflos EQ gi_qals-prueflos.

 

* mengambil data spesifikasi untuk data quality

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qpct

  FROM qpct

    FOR ALL ENTRIES IN gi_qasr

  WHERE

    codegruppe = gi_qasr-gruppe1.

 

* mengambil data hasil untuk data quality

  SELECT *

    INTO CORRESPONDING FIELDS OF TABLE gi_qpam

  FROM qpam

    FOR ALL ENTRIES IN gi_qamv

  WHERE

    auswahlmge = gi_qamv-auswmenge1.

 

*copy data ke 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.Buat Function FM_PROSES_DETAIL

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

*&      Form FM_PROSES_DETAIL

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

*       text

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

FORM fm_proses_detail USING pv_index.

  DATA: lv_counter TYPE i.

*  BUAT GI_DETAIL

  LOOP AT  gi_detail.

    DELETE gi_detail.

  ENDLOOP.

  CLEAR gi_detail.

 

  READ TABLE gi_header INDEX pv_index.

 

*  Tambahkan Data Quantitatif

  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.

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

*  Tambahkan Data Qualitatif

  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.

*        Tambahkan 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.

 

*        Tambahkan Hasil

        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.

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

*  Tambahkan Specifikasi 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.Buat fm_create_specification di akhir koding.

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

*&      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.Simpan Program

81.Sekarang, Kita akan buat OOP(Object Oriented Programing), jadi kita dapat membuat objek ZRE_QM011_CLASSES. Ketikkan INCLUDE ZRE_QM011_CLASSES. diawal baris koding setelah sintak

REPORT  zre_inspection_point.

 

82.klik ganda pada ZRE_QM011_CLASSES

83.Akan muncul menu pop up

ar0292 kemudian klik tombol Yes

ar0293 kemudian klik tombol Yes

 

84.akan terbuat include program

ar0294

85.Klik Save ar0295 pada(di) local object

86.Ketikkan koding dari Class

Tampilkan Kode Sintak

87.Simpan dan kembali program utama

88.Edit Module  STATUS_1200  OUTPUT

Sebelum

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

*&      Module  STATUS_1200  OUTPUT

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

*       text

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

MODULE status_1200 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_1200  OUTPUT

 

Setelah

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

*&      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

Sebelum

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

*&      Module  STATUS_1300  OUTPUT

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

*       text

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

MODULE status_1300 OUTPUT.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

ENDMODULE.                 " STATUS_1300  OUTPUT

 

Setelah

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

*&      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.Buat subroutine baru fm_build_alv_object_header yang kita deklarasikan sebelumnya

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

*&      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.Buat subroutine baru fm_build_alv_object_detail yang dideklarasikan sebelumnya

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

*&      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.Sekarang, untuk mendefinsikan field-field dari ALV, kita perlu mengetikkan kode dibawah. Ketikkan sebelumnya 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.Sekarang kita perlu membuat subroutine untuk 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.Kemudian kita perlu membuat subroutine untuk 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.Sekarang, kita akan mengerjakan fitur 'on click hotspot' pada ALV header, jadi kita dapat mengeklik nya. Buat sub routine dibawah. Kita dapat meletakkan koding setelah 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.Buat 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.Buat 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.Kita perlu mengeload data untuk ALV, Jadi kita perlu membuat subroutine. Kita dapat membuat 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.Kita juga perlu mengunload data dari ALV, jadi kita perlu mengkoding 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 atau aktifkan koding yang telah kita inaktifkan tadi.

Sebelum

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.

 

Setelah

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.Sekarang, kita buat program include utilities. Ketikkan koding dibawah, pada akhir baris koding.

INCLUDE zre_qm011_utilities.

102.Klik ganda pada zre_qm011_utilities

103.Akan muncul menu pop up

ar0272 kemudian klik tombol Yes

104.Sekarang kita akan buat include baru

ar0273

105.Klik save ar0295 pada local object

106.Ketikkan koding pada program include.

Tampilkan Kode sintak

 

107.Simpan dan aktifkan program include.

ar0274

108.Buka zre_qm011_classes dengan mengeklik ganda pada object include

ar0275

109.Simpan dan aktifkan zre_qm011_classes

ar0276

110.Kembali ke program utama

111.Simpan dan aktifkan program

ar0277

112.Jalankan program dengan mengeklik tombol excecute ar0278

 

Hasil

Seleksi Input

ar0279

 

ar0280

Output

ar0281

ar0282

 

 

 

 

 

Kode Sintak Program Utama

 

Kode sintak ZRE_QM011_CLASSES

 

Kode Sintak ZRE_FI010_UTILITIES