|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > Indonesia > ABAP Report > Class in ALV > Report_(703) |
Objektif |
|
Kode Transaksi |
|
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 |
|
Kontributor |
Danar Andri Prasetyo ( danaruto131@yahoo.com ) |
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
▪Klik " ▪Klik kanan pada Object Tree, dan pilih "Screen"
▪Buat Screen 2000
▪Isikan Short description dengan "Main Screen"
Simpan screen 2000 |
5.Sekarang, didalam layar Screen 2000, kita akan buat 3 subscreen
•Klik LayOut •Klik 'subscreen area'
•Klik salah satu dan ubah propertinya seperti gambar dibawah dengan mengeklik
•Klik lainnya dan ubah propertinya seperti gambar dibawah
•Klik lainnya lagi dan ubah propertinya seperti gambar dibawah
•Simpan dan tutup screen painter •Ketikkan 'OK_CODE' pada field setelah 'SA_3'
•Simpan dan klik tab 'Flow logic' •Aktifkan 'MODULE STATUS_2000' kemudian klik ganda •Akan muncul menu pop up, kemudian klik tombol Yes
•Klik main program
•Akan muncul menu pop up, kemudian klik tombol Yes
•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
•Isikan title dengan "Selection Screen Report 703"
•Klik ganda pada 'ST_2000' •Akan muncul menu pop up, kemudian klik tombol Yes
•Isikan Short text dengan Status 2000
•Buka Application toolbar, buat tombol "EXECUTE" dan "REFRESH" lihat gambar dibawah
**) properties dari EXECUTE
**) properties dari REFRESH
•Buka Function Keys, buat BACK,EXIT, and CANCEL
•Simpan dan Aktifkan ST_2000
Kembali ke program utama
|
6.Kemudian kita buat screen "0100" untuk selection screen
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 0100
•Isikan Short description dengan "Selection Screen" dan Screen Type with "Subscreen"
•Klik LayOut •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
•Klik 'Text Field' dan ubah properties seperti gambar dibawah dengan mengeklik
•Klik 'Push Button' lainnya dan ubah properties seperti gambar dibawah dengan mengeklik
•Klik 'Subscreen Area' dan ubah properties seperti gambar dibawah dengan mengeklik
•Hasilnya seperti dini
•Simpan dan tutup screen painter •Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions' •Isikan Group1 dan function code sgambar berikut
•Simpan dan aktifkan
|
7.Kemudian kita akan membuat screen '0200' untuk ALV HEADER
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 0200
•Isikan Short description dengan "List Inbound Delivery" dan Screen Type dengan "Subscreen"
•Klik LayOut •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
•Klik 'Text Field' dan ubah properti seperti gambar dibawah dengan mengeklik
•Klik 'Push Button' lainnya dan ubah properti seperti gambar dibawah dengan mengeklik
•Klik 'Subscreen Area' dan ubah properti seperti gambar dibawah dengan mengeklik
•Hasilnya seperti gambar dibawah
•Simpan dan tutup screen painter •Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions' •Isikan Group1 dan function code gambar berikut
•Simpan dan aktifkan
•Kembali keprogram utama
|
8.Sekarang, Berlanjut membuat screen '0300' untuk ALV Detail Screen
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 0300
•Isikan Short description dengan "Detail Inbound Delivery" dan Screen Type dengan "Subscreen"
•Klik LayOut •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
•Klik 'Text Field' dan ubah properties seperti gambar dibawah dengan mengeklik
•Klik 'Push Button' lainnya dan ubah properties seperti gambar dibawah dengan mengeklik
•Klik 'Subscreen Area' dan ubah properties seperti gambar dibawah dengan mengeklik
•Hasilnya seperti berikut
•Simpan dan tutup screen painter •Klik tab 'Element List' kemudian klik tab 'Mod. Group / functions' •Isikan Group1 dan function code sgambar berikut
•Simpan dan aktifkan
•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
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 3000
•Isikan Short description dengan "Screen Kosong" dan Screen Type dengan "Subscreen"
•Simpan Screen 3000 dan aktifkan •Kembali ke screen utama (Source Code screen)
|
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
![]()
16.Sekarang kita tuliskan, coding pada Screen 2000
17.Klik ganda pada screen 2000

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
![]()
20.Klik ganda pada MODULE USER_COMMAND_2000
21.Akan muncul menu pop up
, kemudian klik tombol Yes
22.Pilih main program
then click ![]()
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
![]()
25.Klik ganda pada screen 0100

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
kemudian klik tombol Yes
30.Pilih main program
then click ![]()
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

33.Klik Ganda Pada "user_command_0100".
34.Akan muncul menu pop up
kemudian klik tombol Yes.
35.Pilih main program
![]()
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
![]()
![]()
38.Klik ganda pada screen 0200

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
![]()
41.Klik ganda pada MODULE status_0200.
42.Akan muncul menu pop up
,kemudian klik tombol Yes
43.Pilih main program
then click ![]()
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
![]()
46.Klik Ganda pada screen 0200

47.Klik Ganda pada "user_command_0200".
48.Akan muncul menu pop up.
, kemudian klik tombol Yes
49.Pilih main program
![]()
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
![]()
52.Klik ganda pada screen 0300

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
![]()
55.Klik ganda pada MODULE status_0300.
56.Akan muncul menu pop up
kemudian klik tombol Yes
57.Pilih main program
Kemudian klik ![]()
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
![]()
60.Klik ganda pada screen 0300

61.Klik ganda pada "user_command_0300".
62.Akan muncul menu pop up
kemudian klik tombol Yes
63.Pilih main program
![]()
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
![]()
66.Coba jalankan program dengan mengeklik ![]()
67.Hasilnya seperti gambar dibawah, tapi masih ada error jika anda mengeklik "Header Inspection Point" dan "Detail Inspection Point"

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
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 1200
•Isikan Short description dengan "HEADER" dan Screen Type dengan "Subscreen"
•Klik LayOut •Klik dan tempatkan 'Custom Control' •Klik pada 'Custom Control' dan ubah properti seperti gambar dibawah dengan mengeklik
•Hasilnya seperti berikut
•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
•Pilih Main program
•Klik Tombol Yes
•Kita akan mengkoding nanti. Sekarang simpan program saja dulu. |
70.Sekarang kita akan membuat screen 1300 for ALV Detail Container
•Klik kanan pada Screen-> create
•Isikan Screen Number dengan 1300
•Isikan Short description dengan "DETAIL" dan Screen Type dengan "Subscreen"
•Klik LayOut •Klik dan tempatkan 'Custom Control' •Klik on 'Custom Control' dan ubah properties seperti dibawah dengan mengeklik
•Hasilnya seperti berikut
•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
•Pilih Main program
•Klik Tombol Yes
•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
![]()
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
kemudian klik tombol Yes
kemudian klik tombol Yes
84.akan terbuat include program

85.Klik Save
pada(di) local object
86.Ketikkan koding dari Class
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
kemudian klik tombol Yes
104.Sekarang kita akan buat include baru

105.Klik save
pada local object
106.Ketikkan koding pada program include.
*&---------------------------------------------------------------------* *& 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.
![]()
108.Buka zre_qm011_classes dengan mengeklik ganda pada object include

109.Simpan dan aktifkan zre_qm011_classes
![]()
110.Kembali ke program utama
111.Simpan dan aktifkan program
![]()
112.Jalankan program dengan mengeklik tombol excecute ![]()
▪Seleksi Input


▪Output


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