Views 239
Visitors 120

Report_(703)

Home 
| Top Page | Threads |
Previous  Next

Objektif

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

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

Klik "ar0015" untuk melihat semua objek
Klik kanan pada Object Tree, dan pilih "Screen"

ar0163ar0164ar0166

Buat Screen 2000

ar0167 then click ar0168

Isikan Short description dengan "Main Screen"

ar0169

Simpan screen 2000

 

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

Tampilkan Langkah-langkahnya

Klik LayOut ar0170 dari screen 2000
Klik 'subscreen area' ar0172 dan tempatkan pada screen painter, lakukan sebanyak 3 kali.

ar0173

Klik salah satu dan ubah propertinya seperti gambar dibawah dengan mengeklik ar0171

ar0174

Klik lainnya dan ubah propertinya seperti gambar dibawah

ar0175

Klik lainnya lagi dan ubah propertinya seperti gambar dibawah

ar0176

Simpan dan tutup screen painter
Ketikkan 'OK_CODE' pada field setelah 'SA_3'

ar0177

Simpan dan klik tab 'Flow logic'
Aktifkan 'MODULE STATUS_2000' kemudian klik ganda
Akan muncul menu pop up, kemudian klik tombol Yes

ar0178

Klik main program

ar0179 then click ar0180

Akan muncul menu pop up, kemudian klik tombol Yes

ar0181

Ubah Program utama

Sebelum

REPORT  ZRE_INSPECTION_POINT                    .

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

*&      Module  STATUS_2000  OUTPUT

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

*       text

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

module STATUS_2000 output.

*  SET PF-STATUS 'xxxxxxxx'.

*  SET TITLEBAR 'xxx'.

 

endmodule.                 " STATUS_2000  OUTPUT

 

Setelah

REPORT  ZRE_INSPECTION_POINT                    .

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

*&      Module  STATUS_2000  OUTPUT

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

*       text

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

module STATUS_2000 output.

  SET PF-STATUS 'ST_2000'.

  SET TITLEBAR 'TITTLE_2000'.

 

endmodule.                 " STATUS_2000  OUTPUT

 

Klik ganda pada 'TITTLE_2000'
Akan muncul menu pop up, kemudian klik tombol Yes

ar0182ar0183

Isikan title dengan "Selection Screen Report 703"

ar0184 then click ar0180

Klik ganda pada 'ST_2000'
Akan muncul menu pop up, kemudian klik tombol Yes

ar0185

Isikan Short text dengan Status 2000

ar0186

Buka Application toolbar, buat tombol "EXECUTE" dan "REFRESH" lihat gambar dibawah

ar0187

**) properties dari EXECUTE

ar0188

**) properties dari REFRESH

ar0189

Buka Function Keys, buat BACK,EXIT, and CANCEL

ar0190

Simpan dan Aktifkan ST_2000

ar0191

ar0192

Kembali ke program utama

 

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

Tampilkan Langkah-langkahnya

Klik kanan pada Screen-> create

ar0193ar0194

Isikan Screen Number dengan 0100

ar0195

Isikan Short description dengan "Selection Screen" dan Screen Type with "Subscreen"

ar0196

Klik LayOut ar0170 from screen 100
Klik dan tempatkan 'Push Button' pada screen painter twice
Klik dan tempatkan 'Text Field' pada screen painter
Klik dan tempatkan 'Subscreen Area' pada screen painter
Klik salah satu dari  'Push Button' dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0197

Klik 'Text Field' dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0198

Klik 'Push Button' lainnya dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0199

Klik 'Subscreen Area' dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0200

Hasilnya seperti dini

ar0201

Simpan dan tutup screen painter
Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions'
Isikan Group1 dan function code sgambar berikut

ar0202

Simpan dan aktifkan

ar0203

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

Tampilkan Langkah-langkahnya

Klik kanan pada Screen-> create

ar0204ar0194

Isikan Screen Number dengan 0200

ar0205

Isikan Short description dengan "List Inbound Delivery" dan Screen Type dengan "Subscreen"

ar0206

Klik LayOut ar0170 dari screen 200
Klik dan tempatkan 'Push Button' pada screen painter dua kali
Klik dan tempatkan 'Text Field' pada screen painter
Klik dan tempatkan 'Subscreen Area' pada screen painter
Klik salah satu dari 'Push Button' dan ubah properti seperti gambar dibawah dengan mengeklik ar0171

ar0207

Klik 'Text Field' dan ubah properti seperti gambar dibawah dengan mengeklik ar0171

ar0208

Klik 'Push Button' lainnya dan ubah properti seperti gambar dibawah dengan mengeklik ar0171

ar0209

Klik 'Subscreen Area' dan ubah properti seperti gambar dibawah dengan mengeklik ar0171

ar0210

Hasilnya seperti gambar dibawah

ar0211

Simpan dan tutup screen painter
Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions'
Isikan Group1 dan function code gambar berikut

ar0223

Simpan dan aktifkan

ar0213

Kembali keprogram utama

 

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

DTampilkan Langkah-langkahnya

Klik kanan pada Screen-> create

ar0214ar0194

Isikan Screen Number dengan 0300

ar0205

Isikan Short description dengan "Detail Inbound Delivery" dan Screen Type dengan "Subscreen"

ar0215

Klik LayOut ar0170 from screen 300
Klik dan tempatkan 'Push Button' pada screen painter twice
Klik dan tempatkan 'Text Field' pada screen painter
Klik dan tempatkan 'Subscreen Area' pada screen painter
Klik salah satu dari  'Push Button' dan ubah properties seperti gambar dibawah dengan mengeklikar0171

ar0216

Klik 'Text Field' dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0217

Klik 'Push Button' lainnya dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0218

Klik 'Subscreen Area' dan ubah properties seperti gambar dibawah dengan mengeklik ar0171

ar0219

Hasilnya seperti berikut

ar0220

Simpan dan tutup screen painter
Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions'
Isikan Group1 dan function code sgambar berikut

ar0221

Simpan dan aktifkan

ar0222

Kembali ke program utama
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

Klik kanan pada Screen-> create

ar0224ar0194

Isikan Screen Number dengan 3000

ar0225

Isikan Short description dengan "Screen Kosong" dan Screen Type dengan "Subscreen"

ar0226

Simpan Screen 3000 dan aktifkan
Kembali ke screen utama (Source Code screen)

ar0227

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

Klik kanan pada Screen-> create

ar0254ar0194

Isikan Screen Number dengan 1200

ar0255

Isikan Short description dengan  "HEADER" dan Screen Type dengan "Subscreen"

ar0256

Klik LayOut ar0170 dari screen 1200
Klik dan tempatkan 'Custom Control' ar0257 pada screen painter
Klik pada 'Custom Control' dan ubah properti seperti gambar dibawah dengan mengeklik ar0171

ar0258

Hasilnya seperti berikut

ar0259

Simpan dan tutup screen painter
Klik tab 'Flow Logic' dan edit code

Sebelum

PROCESS BEFORE OUTPUT.

* MODULE STATUS_1200.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_1200.

 

Setelah

PROCESS BEFORE OUTPUT.

MODULE STATUS_1200.

 

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_1200.

 

Klik ganda pada STATUS_1200
Akan muncul menu pop up

ar0260kemudian klik tombol Yes

 

Pilih Main program

ar0239

Klik Tombol Yes

ar0261

Kita akan mengkoding nanti. Sekarang simpan program saja dulu.
70.Sekarang kita akan membuat screen 1300 for ALV Detail Container

Display Steps

Klik kanan pada Screen-> create

ar0262ar0194

Isikan Screen Number dengan 1300

ar0263

Isikan Short description dengan "DETAIL" dan Screen Type dengan "Subscreen"

ar0264

Klik LayOut ar0170 dari screen 1300
Klik dan tempatkan 'Custom Control' ar0257 pada screen painter
Klik on 'Custom Control' dan ubah properties seperti dibawah dengan mengeklik ar0171

ar0265

Hasilnya seperti berikut

ar0259

Simpan dan tutup screen painter
Klik tab 'Flow Logic' Edit Kodingnya

Sebelum

PROCESS BEFORE OUTPUT.

* MODULE STATUS_1300.

*

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_1300.

 

Setelah

PROCESS BEFORE OUTPUT.

MODULE STATUS_1300.

 

PROCESS AFTER INPUT.

* MODULE USER_COMMAND_1300.

 

Klik ganda STATUS_1300
Akan muncul menu pop up

ar0266 kemudian klik tombol Yes

 

Pilih Main program

ar0239

Klik Tombol Yes

ar0267

Kita akan mengkoding nanti. Cukup simpan program saja dulu

 

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

TYPE-POOLS: ICON.

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

*&  Include           ZRE_QM011_CLASSES                                *

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

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

*&- C L A S S E S

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

CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS:

     handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

       IMPORTING

         e_object e_interactive,

     handle_user_command FOR EVENT user_command OF cl_gui_alv_grid

       IMPORTING e_ucomm,

     handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid

        IMPORTING e_row_id e_column_id es_row_no,

     handle_button_click FOR EVENT button_click OF cl_gui_alv_grid

        IMPORTING es_col_id es_row_no,

     handle_double_click FOR EVENT double_click OF cl_gui_alv_grid

        IMPORTING e_row e_column es_row_no.

ENDCLASS.                    "lcl_event_receiver DEFINITION

 

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

*       CLASS lcl_event_receiver IMPLEMENTATION

 

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

CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_toolbar.

*  Event handler method for event toolbar.

    CONSTANTS:

*  Constants for button type

      c_button_normal           TYPE i VALUE 0,

      c_menu_and_default_button TYPE i VALUE 1,

      c_menu                    TYPE i VALUE 2,

      c_separator               TYPE i VALUE 3,

      c_radio_button            TYPE i VALUE 4,

      c_checkbox                TYPE i VALUE 5,

      c_menu_entry              TYPE i VALUE 6.

    DATA:

        ls_toolbar  TYPE stb_button.

*   Append seperator to the normal toolbar

    CLEAR ls_toolbar.

    MOVE c_separator TO ls_toolbar-butn_type..

    APPEND ls_toolbar TO e_object->mt_toolbar.

*   Append a new button that to the toolbar. Use E_OBJECT of

*   event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.

*   This class has one attribute MT_TOOLBAR which is of table type

*   TTB_BUTTON. The structure is STB_BUTTON

*    CLEAR LS_TOOLBAR.

*    MOVE 'BATALKAN_SKET'        TO LS_TOOLBAR-FUNCTION.

*    MOVE ICON_SYSTEM_MODUS_DELETE  TO LS_TOOLBAR-ICON.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-QUICKINFO.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-TEXT.

*    MOVE ' '              TO LS_TOOLBAR-DISABLED.

*    APPEND LS_TOOLBAR     TO E_OBJECT->MT_TOOLBAR.

 

 

*

  ENDMETHOD.                    "handle_toolbar

 

  METHOD handle_user_command.

*   Handle own functions defined in the toolbar

*    CASE E_UCOMM.

**      WHEN 'BATALKAN_SKET'.

**        PERFORM FM_BATALKAN_SKET.

*    ENDCASE.

  ENDMETHOD.                    "handle_user_command

 

  METHOD handle_hotspot_click.

    PERFORM fm_on_click_hotspot USING e_row_id

                                      e_column_id

                                      es_row_no.

  ENDMETHOD.                    "handle_hotspot_click

 

  METHOD handle_button_click.

    PERFORM fm_on_button_click USING es_col_id

                                      es_row_no.

  ENDMETHOD.                    "HANDLE_BUTTON_CLICK

 

  METHOD handle_double_click.

    PERFORM fm_on_double_click USING e_row

                                     e_column

                                     es_row_no.

  ENDMETHOD.

 

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

 

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

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

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

*&  Include           ZRE_FI010_UTILITIES                              *

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

 

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

*&      Form  Fm_POPUP_TO_CONFIRM

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

*       text

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

*      -->FU_TITLE   text

*      -->FU_TEXT1   text

*      -->FC_ANS     text

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

FORM FM_POPUP_TO_CONFIRM  USING    FU_TITLE

                                  FU_TEXT1

                         CHANGING FC_ANS.

 

  CALL FUNCTION 'POPUP_TO_CONFIRM'

    EXPORTING

      TITLEBAR                    = FU_TITLE

*     DIAGNOSE_OBJECT             = ' '

      TEXT_QUESTION               = FU_TEXT1

      TEXT_BUTTON_1               = 'Yes'(001)

      ICON_BUTTON_1               = 'ICON_OKAY'

      TEXT_BUTTON_2               = 'No'(002)

      ICON_BUTTON_2               = 'ICON_CANCEL'

      DEFAULT_BUTTON              = '1'

      DISPLAY_CANCEL_BUTTON       = ' '

*     USERDEFINED_F1_HELP         = ' '

      START_COLUMN                = 25

      START_ROW                   = 6

      POPUP_TYPE                  = 'ICON_MESSAGE_WARNING'

*     IV_QUICKINFO_BUTTON_1       = ' '

*     IV_QUICKINFO_BUTTON_2       = ' '

    IMPORTING

      ANSWER                      = FC_ANS

*   TABLES

*     PARAMETER                   =

    EXCEPTIONS

      TEXT_NOT_FOUND              = 1

      OTHERS                      = 2.

 

  IF SY-SUBRC <> 0.

*         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

ENDFORM.                    "Fm_POPUP_TO_CONFIRM

 

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

*&      Form  FSTRING_AUSGEBEN

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

*       text

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

*      -->VALUE(NOTINI)   text

*      -->VALUE(F)        text

*      -->VALUE(STELLEN)  text

*      -->VALUE(STRING)   text

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

FORM FSTRING_AUSGEBEN USING    VALUE(NOTINI)

                               VALUE(F)

                               VALUE(STELLEN)

                      CHANGING VALUE(STRING).

 

  CALL FUNCTION 'QSS4_FSTRING_AUSGEBEN'

    EXPORTING

      I_NOTINI   = NOTINI

      I_FLOAT    = F

      I_DECIMALS = STELLEN

    IMPORTING

      E_STRING   = STRING.

 

ENDFORM.                    "FSTRING_AUSGEBEN

 

 

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

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

*& Report  ZRE_INSPECTION_POINT                                        *

*&                                                                     *

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

*&                                                                     *

*&                                                                     *

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

 

REPORT  zre_inspection_point.

 

INCLUDE zre_qm011_classes.

 

 

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.

 

 

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

 

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.

 

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.

 

 

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_d1 FOR qapp-userd1.

SELECTION-SCREEN END OF LINE.

 

SELECTION-SCREEN END OF BLOCK a.

SELECTION-SCREEN END OF SCREEN 1100.

 

INITIALIZATION.

  text_001 = 'Selection Screen'.

  text_002 = 'Material'.

  text_003 = 'Production Lot'.

  text_004 = 'Inspection Lot'.

  text_005 = 'Inspection Date'.

 

  gv_info = 'Total data : - '.

 

START-OF-SELECTION.

  CALL SCREEN 2000.

 

END-OF-SELECTION.

 

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

*&      Module  STATUS_2000  OUTPUT

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

*       text

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

MODULE status_2000 OUTPUT.

  SET PF-STATUS 'ST_2000'.

  SET TITLEBAR 'TITTLE_2000'.

 

ENDMODULE.                 " STATUS_2000  OUTPUT

 

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

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

 

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

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

 

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

  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 Data Kualitatif

  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

 

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

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

 

 

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

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

 

 

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

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

 

 

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

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

 

 

 

 

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

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

 

 

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

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

 

 

 

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

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

 

 

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

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

 

 

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

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

 

 

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

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

 

 

 

 

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

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

 

 

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

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

 

 

 

 

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

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

 

INCLUDE zre_qm011_utilities.

 

Kode sintak ZRE_QM011_CLASSES

TYPE-POOLS: ICON.

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

*&  Include           ZRE_QM011_CLASSES                                *

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

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

*&- C L A S S E S

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

CLASS lcl_event_receiver DEFINITION.

  PUBLIC SECTION.

    METHODS:

     handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid

       IMPORTING

         e_object e_interactive,

     handle_user_command FOR EVENT user_command OF cl_gui_alv_grid

       IMPORTING e_ucomm,

     handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid

        IMPORTING e_row_id e_column_id es_row_no,

     handle_button_click FOR EVENT button_click OF cl_gui_alv_grid

        IMPORTING es_col_id es_row_no,

     handle_double_click FOR EVENT double_click OF cl_gui_alv_grid

        IMPORTING e_row e_column es_row_no.

ENDCLASS.                    "lcl_event_receiver DEFINITION

 

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

*       CLASS lcl_event_receiver IMPLEMENTATION

 

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

CLASS lcl_event_receiver IMPLEMENTATION.

  METHOD handle_toolbar.

*  Event handler method for event toolbar.

    CONSTANTS:

*  Constants for button type

      c_button_normal           TYPE i VALUE 0,

      c_menu_and_default_button TYPE i VALUE 1,

      c_menu                    TYPE i VALUE 2,

      c_separator               TYPE i VALUE 3,

      c_radio_button            TYPE i VALUE 4,

      c_checkbox                TYPE i VALUE 5,

      c_menu_entry              TYPE i VALUE 6.

    DATA:

        ls_toolbar  TYPE stb_button.

*   Append seperator to the normal toolbar

    CLEAR ls_toolbar.

    MOVE c_separator TO ls_toolbar-butn_type..

    APPEND ls_toolbar TO e_object->mt_toolbar.

*   Append a new button that to the toolbar. Use E_OBJECT of

*   event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.

*   This class has one attribute MT_TOOLBAR which is of table type

*   TTB_BUTTON. The structure is STB_BUTTON

*    CLEAR LS_TOOLBAR.

*    MOVE 'BATALKAN_SKET'        TO LS_TOOLBAR-FUNCTION.

*    MOVE ICON_SYSTEM_MODUS_DELETE  TO LS_TOOLBAR-ICON.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-QUICKINFO.

*    MOVE 'BATALKAN SKET'     TO LS_TOOLBAR-TEXT.

*    MOVE ' '              TO LS_TOOLBAR-DISABLED.

*    APPEND LS_TOOLBAR     TO E_OBJECT->MT_TOOLBAR.

 

 

*

  ENDMETHOD.                    "handle_toolbar

 

  METHOD handle_user_command.

*   Handle own functions defined in the toolbar

*    CASE E_UCOMM.

**      WHEN 'BATALKAN_SKET'.

**        PERFORM FM_BATALKAN_SKET.

*    ENDCASE.

  ENDMETHOD.                    "handle_user_command

 

  METHOD handle_hotspot_click.

    PERFORM fm_on_click_hotspot USING e_row_id

                                      e_column_id

                                      es_row_no.

  ENDMETHOD.                    "handle_hotspot_click

 

  METHOD handle_button_click.

    PERFORM fm_on_button_click USING es_col_id

                                      es_row_no.

  ENDMETHOD.                    "HANDLE_BUTTON_CLICK

 

  METHOD handle_double_click.

    PERFORM fm_on_double_click USING e_row

                                     e_column

                                     es_row_no.

  ENDMETHOD.

 

ENDCLASS.                    "lcl_event_receiver IMPLEMENTATION

 

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

 

Kode Sintak ZRE_FI010_UTILITIES

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

*&  Include           ZRE_FI010_UTILITIES                              *

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

 

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

*&      Form  Fm_POPUP_TO_CONFIRM

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

*       text

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

*      -->FU_TITLE   text

*      -->FU_TEXT1   text

*      -->FC_ANS     text

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

FORM FM_POPUP_TO_CONFIRM  USING    FU_TITLE

                                  FU_TEXT1

                         CHANGING FC_ANS.

 

  CALL FUNCTION 'POPUP_TO_CONFIRM'

    EXPORTING

      TITLEBAR                    = FU_TITLE

*     DIAGNOSE_OBJECT             = ' '

      TEXT_QUESTION               = FU_TEXT1

      TEXT_BUTTON_1               = 'Yes'(001)

      ICON_BUTTON_1               = 'ICON_OKAY'

      TEXT_BUTTON_2               = 'No'(002)

      ICON_BUTTON_2               = 'ICON_CANCEL'

      DEFAULT_BUTTON              = '1'

      DISPLAY_CANCEL_BUTTON       = ' '

*     USERDEFINED_F1_HELP         = ' '

      START_COLUMN                = 25

      START_ROW                   = 6

      POPUP_TYPE                  = 'ICON_MESSAGE_WARNING'

*     IV_QUICKINFO_BUTTON_1       = ' '

*     IV_QUICKINFO_BUTTON_2       = ' '

    IMPORTING

      ANSWER                      = FC_ANS

*   TABLES

*     PARAMETER                   =

    EXCEPTIONS

      TEXT_NOT_FOUND              = 1

      OTHERS                      = 2.

 

  IF SY-SUBRC <> 0.

*         MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  ENDIF.

ENDFORM.                    "Fm_POPUP_TO_CONFIRM

 

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

*&      Form  FSTRING_AUSGEBEN

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

*       text

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

*      -->VALUE(NOTINI)   text

*      -->VALUE(F)        text

*      -->VALUE(STELLEN)  text

*      -->VALUE(STRING)   text

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

FORM FSTRING_AUSGEBEN USING    VALUE(NOTINI)

                               VALUE(F)

                               VALUE(STELLEN)

                      CHANGING VALUE(STRING).

 

  CALL FUNCTION 'QSS4_FSTRING_AUSGEBEN'

    EXPORTING

      I_NOTINI   = NOTINI

      I_FLOAT    = F

      I_DECIMALS = STELLEN

    IMPORTING

      E_STRING   = STRING.

 

ENDFORM.                    "FSTRING_AUSGEBEN

 

User Threads | New Thread ( Only for Donators )

Threads Last Post Replies Views