|
<< Click to Display Table of Contents >> Navigation: All About ABAP Technique > English > ABAP Report > Class in ALV > Report_(703) |
Objective |
|
Transaction Code |
|
Tables |
QALS - Inspection lot record QAPP - Inspection point QAMV - Characteristic specifications for inspection processing QMPT - QASE - Results table for the sample unit QAPPW - Data dictionary fields for inspection during production QASR - Sample results for inspection characteristics QPAM - Inspection catalog selected sets QPCT - Code texts |
Support |
|
Contributors |
Danar Andri Prasetyo ( danaruto131@yahoo.com ) |
1.Open SE38
Program Name : ZRE_INSPECTION_POINT ( Functional Specification )
Title : 703 - Report Inspection Point
3.Save at Local Object.
4.We make main screen with code 2000
▪Click " ▪Right click on Object Tree, and select "Screen"
▪Create Screen 2000
▪Fill Short description with "Main Screen"
save screen 2000 |
5.Now, Inside Screen 2000 layout, we'll make 3 subscreen
•Click LayOut •Click 'subscreen area'
•Click one of them and change properties like picture below by click
•Click second of them and change properties like picture below
•Click third of them and change properties like picture below
•Save and close screen painter •Type 'OK_CODE' at field after 'SA_3'
•Save and click tab 'Flow logic' •Active 'MODULE STATUS_2000' then double click it •There will show pop up just click 'Yes' button
•Click main program
•There will show pop up just click 'Yes' button
•Change Main program Before REPORT ZRE_INSPECTION_POINT . *&---------------------------------------------------------------------* *& Module STATUS_2000 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* module STATUS_2000 output. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'.
endmodule. " STATUS_2000 OUTPUT
After 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
•Double click at 'TITTLE_2000' •There will show pop up just click 'Yes' button
•Fill title with "Selection Screen Report 703"
•Double Click at 'ST_2000' •There will show pop up just click 'Yes' button
•Fill Short text with Status 2000
•Open Application toolbar, make button "EXECUTE" and "REFRESH" see picture below
**) properties of EXECUTE
**) properties of REFRESH
•Open Function Keys, make BACK,EXIT, and CANCEL
•Save and Activate ST_2000
Back to main program
|
6.Then we make screen "0100" for selection screen
•Right click at Screen-> create
•Fill Screen Number with 0100
•Fill Short description with "Selection Screen" and Screen Type with "Subscreen"
•Click LayOut •Click and place 'Push Button' at screen painter twice •Click and place 'Text Field' at screen painter •Click and place 'Subscreen Area' at screen painter •Click one of 'Push Button' and change properties like picture below by click
•Click 'Text Field' and change properties like picture below by click
•Click another 'Push Button' and change properties like picture below by click
•Click 'Subscreen Area' and change properties like picture below by click
•The result like this
•Save and close screen painter •Click tab 'Element List' then click tab 'Mod. Group / functions' •Fill Group1 and function code like picture below
•Save and Activate
|
7.Then we make screen '0200' for ALV HEADER
•Right click at Screen-> create
•Fill Screen Number with 0200
•Fill Short description with "List Inbound Delivery" and Screen Type with "Subscreen"
•Click LayOut •Click and place 'Push Button' at screen painter twice •Click and place 'Text Field' at screen painter •Click and place 'Subscreen Area' at screen painter •Click one of 'Push Button' and change properties like picture below by click
•Click 'Text Field' and change properties like picture below by click
•Click another 'Push Button' and change properties like picture below by click
•Click 'Subscreen Area' and change properties like picture below by click
•The result like this
•Save and close screen painter •Click tab 'Element List' then click tab 'Mod. Group / functions' •Fill Group1 and function code like picture below
•Save and Activate
•Back to main program
|
8.Now, continue to make screen '0300' for ALV Detail Screen
•Right click at Screen-> create
•Fill Screen Number with 0300
•Fill Short description with "Detail Inbound Delivery" and Screen Type with "Subscreen"
•Click LayOut •Click and place 'Push Button' at screen painter twice •Click and place 'Text Field' at screen painter •Click and place 'Subscreen Area' at screen painter •Click one of 'Push Button' and change properties like picture below by click
•Click 'Text Field' and change properties like picture below by click
•Click another 'Push Button' and change properties like picture below by click
•Click 'Subscreen Area' and change properties like picture below by click
•The result like this
•Save and close screen painter •Click tab 'Element List' then click tab 'Mod. Group / functions' •Fill Group1 and function code like picture below
•Save and Activate
•Back to main program |
9.Now, we make blank screen. Name it with screen '3000'. The aim of this screen is to substitute screen 100,200,300 when they are hide
•Right click at Screen-> create
•Fill Screen Number with 3000
•Fill Short description with "Screen Kosong" and Screen Type with "Subscreen"
•Save Screen 3000 and activate it •Back to main screen (Source Code screen)
|
10.DeclareTables
TABLES : qals, qapp, qamv, qpmt, qase, qappw, qasr, qpam, qpct.
11.Declare variable
DATA : gv_screen1(4) TYPE n VALUE '1100',
gv_screen2(4) TYPE n VALUE '3000',
gv_screen3(4) TYPE n VALUE '3000'.
DATA : gv_pb1(1) VALUE 'X',
gv_pb2(1) VALUE ' ',
gv_pb3(1) VALUE ' '.
DATA : ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
12.Declare Input Screen
SELECTION-SCREEN BEGIN OF SCREEN 1100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text_001.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) text_002 FOR FIELD so_matnr.
SELECT-OPTIONS so_matnr FOR qals-matnr.
SELECTION-SCREEN COMMENT 70(21) gv_info.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) text_003 FOR FIELD so_c2.
SELECT-OPTIONS so_c2 FOR qapp-userc2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) text_004 FOR FIELD so_pru.
SELECT-OPTIONS so_pru FOR qals-prueflos.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(15) text_005 FOR FIELD so_d1.
SELECT-OPTIONS so_pru FOR qapp-userd1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK a.
SELECTION-SCREEN END OF SCREEN 1100.
13.Declare Initialization for text label
INITIALIZATION.
text_001 = 'Selection Screen'.
text_002 = 'Material'.
text_003 = 'Production Lot'.
text_004 = 'Inspection Lot'.
text_005 = 'Inspection Date'.
gv_info = 'Total data : - '.
14.Declare start-of-selection with call of screen
START-OF-SELECTION.
CALL SCREEN 2000.
END-OF-SELECTION.
15.Save and Activate Program
![]()
16.Now we will code at Screen 2000
17.Double click at screen 2000

18.Edit Flow logic
Before
PROCESS BEFORE OUTPUT.
MODULE status_2000.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_2000.
After
PROCESS BEFORE OUTPUT.
MODULE status_2000.
CALL SUBSCREEN sa_1 INCLUDING sy-repid '0100'.
CALL SUBSCREEN sa_2 INCLUDING sy-repid '0200'.
CALL SUBSCREEN sa_3 INCLUDING sy-repid '0300'.
PROCESS AFTER INPUT.
CALL SUBSCREEN sa_1.
CALL SUBSCREEN sa_2.
CALL SUBSCREEN sa_3.
MODULE USER_COMMAND_2000.
19.Save and activate
![]()
20.Double click at MODULE USER_COMMAND_2000
21.It will show pop up,
just click 'yes' button
22.Choose main program
then click ![]()
23.Edit Module User command 2000
Before
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
ENDMODULE. " USER_COMMAND_2000 INPUT
After
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'EXECUTE'.
* PERFORM fm_proses.
gv_screen1 = '3000'.
gv_screen2 = '1200'.
gv_screen3 = '1300'.
gv_pb1 = ' '.
gv_pb2 = 'X'.
gv_pb3 = 'X'.
WHEN 'REFRESH'.
* PERFORM fm_refresh.
* PERFORM fm_proses.
ENDCASE.
ENDMODULE. " USER_COMMAND_2000 INPUT
24.Save and Activate
![]()
25.Double click at screen 0100

26.Edit Flow Logic
Before
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0100.
After
PROCESS BEFORE OUTPUT.
MODULE status_0100.
CALL SUBSCREEN sa_100 INCLUDING sy-repid gv_screen1.
PROCESS AFTER INPUT.
MODULE user_command_0100.
CALL SUBSCREEN sa_100.
27.Save Screen 100
28.Double click at MODULE status_0100.
29.It will show pop up
just click 'yes' button
30.Choose main program
then click ![]()
31.Edit Module Status_0100 output
Before
*&---------------------------------------------------------------------*
*& Module status_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule. " status_0100 OUTPUT
After
*&---------------------------------------------------------------------*
*& Module status_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
* for de-active all control
CASE screen-group1.
WHEN 'G1A'.
screen-active = 0.
WHEN 'G1B'.
screen-active = 0.
ENDCASE.
* for active control which needed
LOOP AT SCREEN.
IF gv_pb1 = 'X'.
CASE screen-group1.
WHEN 'G1A'.
screen-active = 0.
WHEN 'G1B'.
screen-active = 1.
ENDCASE.
ELSEIF gv_pb1 = ' '.
CASE screen-group1.
WHEN 'G1A'.
screen-active = 1.
WHEN 'G1B'.
screen-active = 0.
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE. " status_0100 OUTPUT
32.Double click at screen 0100

33.Double Click at "user_command_0100".
34.It will show pop up.
just click yes button.
35.Choose main program
![]()
36.Edit Module user_command_0100 Input
Before
*&---------------------------------------------------------------------*
*& Module user_command_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
ENDMODULE. " user_command_0100 INPUT
After
*&---------------------------------------------------------------------*
*& Module user_command_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
* for assign variable
save_ok = ok_code.
CASE save_ok.
WHEN 'PB_100_1'.
gv_pb1 = 'X'.
gv_screen1 = 1100.
WHEN 'PB_100_2'.
gv_pb1 = ' '.
gv_screen1 = 3000.
ENDCASE.
ENDMODULE. " user_command_0100 INPUT
37.Save And Activate
![]()
![]()
38.Double click at screen 0200

39.Edit Flow Logic
Before
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0200.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0200.
After
PROCESS BEFORE OUTPUT.
MODULE status_0200.
CALL SUBSCREEN sa_200 INCLUDING sy-repid gv_screen2.
PROCESS AFTER INPUT.
MODULE user_command_0200.
CALL SUBSCREEN sa_200.
40.Save and Activate Screen 200
![]()
41.Double click at MODULE status_0200.
42.It will show pop up
just click 'yes' button
43.Choose main program
then click ![]()
44.Edit Module Status_0200 output
Before
*&---------------------------------------------------------------------*
*& Module status_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0200 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule. " status_0200 OUTPUT
After
*&---------------------------------------------------------------------*
*& Module status_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
* for de-active all control
CASE screen-group1.
WHEN 'G2A'.
screen-active = 0.
WHEN 'G2B'.
screen-active = 0.
ENDCASE.
* for active control which needed
LOOP AT SCREEN.
IF gv_pb2 = 'X'.
CASE screen-group1.
WHEN 'G2A'.
screen-active = 0.
WHEN 'G2B'.
screen-active = 1.
ENDCASE.
ELSEIF gv_pb2 = ' '.
CASE screen-group1.
WHEN 'G2A'.
screen-active = 1.
WHEN 'G2B'.
screen-active = 0.
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE. " status_0200 OUTPUT
45.Save And Activate
![]()
46.Double click at screen 0200

47.Double Click at "user_command_0200".
48.It will show pop up.
just click yes button.
49.Choose main program
![]()
50.Edit Module user_command_0200 Input
Before
*&---------------------------------------------------------------------*
*& Module user_command_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
ENDMODULE. " user_command_0200 INPUT
After
*&---------------------------------------------------------------------*
*& Module user_command_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0200 input.
* for assign variable
save_ok = ok_code.
CASE save_ok.
WHEN 'PB_200_1'.
gv_pb2 = 'X'.
gv_screen2 = 1200.
WHEN 'PB_200_2'.
gv_pb2 = ' '.
gv_screen2 = 3000.
ENDCASE.
endmodule. " user_command_0200 INPUT
51.Save and Activate
![]()
52.Double click at screen 0300

53.Edit Flow Logic
Before
PROCESS BEFORE OUTPUT.
* MODULE STATUS_0300.
*
PROCESS AFTER INPUT.
* MODULE USER_COMMAND_0300.
After
PROCESS BEFORE OUTPUT.
MODULE status_0300.
CALL SUBSCREEN sa_300 INCLUDING sy-repid gv_screen3.
PROCESS AFTER INPUT.
MODULE user_command_0300.
CALL SUBSCREEN sa_300.
54.Save and Activate Screen 300
![]()
55.Double click at MODULE status_0300.
56.It will show pop up
just click 'yes' button
57.Choose main program
then click ![]()
58.Edit Module Status_0300 output
Before
*&---------------------------------------------------------------------*
*& Module status_0300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0300 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
endmodule. " status_0300 OUTPUT
After
*&---------------------------------------------------------------------*
*& Module status_0300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0300 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
* for de-active all control
CASE screen-group1.
WHEN 'G3A'.
screen-active = 0.
WHEN 'G3B'.
screen-active = 0.
ENDCASE.
* for active control which needed
LOOP AT SCREEN.
IF gv_pb3 = 'X'.
CASE screen-group1.
WHEN 'G3A'.
screen-active = 0.
WHEN 'G3B'.
screen-active = 1.
ENDCASE.
ELSEIF gv_pb3 = ' '.
CASE screen-group1.
WHEN 'G3A'.
screen-active = 1.
WHEN 'G3B'.
screen-active = 0.
ENDCASE.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
endmodule. " status_0300 OUTPUT
59.Save And Activate
![]()
60.Double click at screen 0300

61.Double Click at "user_command_0300".
62.It will show pop up.
just click yes button.
63.Choose main program
![]()
64.Edit Module user_command_0300 Input
Before
*&---------------------------------------------------------------------*
*& Module user_command_0300 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0300 INPUT.
ENDMODULE. " user_command_0300 INPUT
After
*&---------------------------------------------------------------------*
*& Module user_command_0300 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0300 input.
* for assign variable
save_ok = ok_code.
CASE save_ok.
WHEN 'PB_300_1'.
gv_pb3 = 'X'.
gv_screen3 = 1300.
WHEN 'PB_200_2'.
gv_pb3 = ' '.
gv_screen3 = 3000.
ENDCASE.
endmodule. " user_command_0300 INPUT
65.Save and Activate
![]()
66.Test Run Program by Click ![]()
67.And the output like picture below, but there are still any error if you click "Header Inspection Point" and "Detail Inspection Point"

68.This error cause by there is no code for ALV yet. So we have to code it.
69.For solve we have to make subscreen '1200' for ALV Header Container
•Right click at Screen-> create
•Fill Screen Number with 1200
•Fill Short description with "HEADER" and Screen Type with "Subscreen"
•Click LayOut •Click and place 'Custom Control' •Click on 'Custom Control' and change properties like picture below by click
•The result like this
•Save and close screen painter •Click tab 'Flow Logic' Edit Code Before PROCESS BEFORE OUTPUT. * MODULE STATUS_1200. * PROCESS AFTER INPUT. * MODULE USER_COMMAND_1200.
After PROCESS BEFORE OUTPUT. MODULE STATUS_1200.
PROCESS AFTER INPUT. * MODULE USER_COMMAND_1200.
•Double Click at STATUS_1200 •It will show pop up.
•Choose Main program
•Click Button Yes
•We will code it later. just save program. |
70.Now we will create screen 1300 for ALV Detail Container
•Right click at Screen-> create
•Fill Screen Number with 1300
•Fill Short description with "DETAIL" and Screen Type with "Subscreen"
•Click LayOut •Click and place 'Custom Control' •Click on 'Custom Control' and change properties like picture below by click
•The result like this
•Save and close screen painter •Click tab 'Flow Logic' Edit Code Before PROCESS BEFORE OUTPUT. * MODULE STATUS_1300. * PROCESS AFTER INPUT. * MODULE USER_COMMAND_1300.
After PROCESS BEFORE OUTPUT. MODULE STATUS_1300.
PROCESS AFTER INPUT. * MODULE USER_COMMAND_1300.
•Double Click at STATUS_1300 •It will show pop up.
•Choose Main program
•Click Button Yes
•We will code it later. just save program. |
71.Back to main program, Declare new variable, before Table delcaration. That variable are gi_header and gi_detail.
TYPE-POOLS : icon, ole2.
TYPES : BEGIN OF gt_header,
matnr LIKE qals-matnr, "material
ktextmat LIKE qals-ktextmat, "description
werk LIKE qals-werk, "plant
aufnr LIKE qals-aufnr, "production order
prueflos LIKE qals-prueflos, "Inspection Lot
userc2 LIKE qapp-userc2, "Production Lot
userd1 LIKE qapp-userd1, "Inspection Date
art LIKE qals-art, "inspection type yang ditampilkan
slwbez LIKE qals-slwbez, "untuk generate Inspection Point
pruefpkt LIKE qappw-pruefpkt, "inspection point
ppsortkey LIKE qapp-ppsortkey,
time(8),
date(10),
prolot(10),
probenr LIKE qapp-probenr,
werks LIKE qals-werk,
chk,
num TYPE i,
icon(4),
child_num TYPE i,
child TYPE i,
END OF gt_header.
DATA : gi_header TYPE TABLE OF gt_header WITH HEADER LINE.
TYPES : BEGIN OF gt_detail.
INCLUDE STRUCTURE gi_header.
TYPES : merknr LIKE qamv-merknr, "No posisi document
verwmerkm LIKE qamv-verwmerkm, "characteristic
kurztext LIKE qpmt-kurztext, "short text utk characteristic
toleranzob LIKE qamv-toleranzob, " Batas bawah utk spesification
toleranzob_char LIKE qaqee-toleranzob,
toleranzun LIKE qamv-toleranzun, "batas atas spesifications
toleranzun_char LIKE qaqee-toleranzun,
sollwert LIKE qamv-sollwert,
sollwert_char LIKE qaqee-sollwert,
stellen LIKE qamv-stellen,
sollwni LIKE qamv-sollwni,
tolunni LIKE qamv-tolunni,
tolobni LIKE qamv-tolobni,
pruefkat LIKE qmkst-pruefkat,
masseinhsw LIKE qamv-masseinhsw,
steuerkz LIKE qamv-steuerkz,
tolgrenze LIKE qamkr-tolgrenze, " spesification
messwert LIKE qase-messwert, "result 1
messwert_c LIKE qaqee-messwert, "result 1
messwert_char(40),
original_input LIKE qase-original_input, "result 2
mbewertg LIKE qase-mbewertg, " valuation
END OF gt_detail.
72.Save and activate program
![]()
73.Add new variable declaration after table declaration.
DATA:
gi_detail TYPE TABLE OF gt_detail WITH HEADER LINE,
gi_qals TYPE TABLE OF qals WITH HEADER LINE,
gi_qapp TYPE TABLE OF qapp WITH HEADER LINE,
gi_qamv TYPE TABLE OF qamv WITH HEADER LINE,
gi_qpmt TYPE TABLE OF qpmt WITH HEADER LINE,
gi_qase TYPE TABLE OF qase WITH HEADER LINE,
gi_qasr TYPE TABLE OF qasr WITH HEADER LINE,
gi_qpam TYPE TABLE OF qpam WITH HEADER LINE,
gi_qpct TYPE TABLE OF qpct WITH HEADER LINE.
DATA: gi_receiver LIKE STANDARD TABLE OF somlreci1 WITH HEADER LINE,
gi_message LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE.
74.Edit Declaration variable before
Before
DATA : gv_screen1(4) TYPE n VALUE '1100',
gv_screen2(4) TYPE n VALUE '3000',
gv_screen3(4) TYPE n VALUE '3000'.
DATA : gv_pb1(1) VALUE 'X',
gv_pb2(1) VALUE ' ',
gv_pb3(1) VALUE ' '.
DATA : ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
After
DATA : gv_screen1(4) TYPE n VALUE '1100',
gv_screen2(4) TYPE n VALUE '3000',
gv_screen3(4) TYPE n VALUE '3000'.
DATA : gv_pb1(1) VALUE 'X',
gv_pb2(1) VALUE ' ',
gv_pb3(1) VALUE ' '.
DATA : ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: tc_header TYPE REF TO cl_gui_custom_container,
tg_header TYPE REF TO cl_gui_alv_grid,
tc_detail TYPE REF TO cl_gui_custom_container,
tg_detail TYPE REF TO cl_gui_alv_grid,
go_event_receiver_header TYPE REF TO lcl_event_receiver,
go_event_receiver_detail TYPE REF TO lcl_event_receiver.
DATA: gw_fieldcat_header TYPE lvc_t_fcat,
gw_fieldcat_detail TYPE lvc_t_fcat.
DATA: gv_row_no TYPE i.
75.Edit User_command_2000
Before
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'EXECUTE'.
* PERFORM fm_proses.
gv_screen1 = '3000'.
gv_screen2 = '1200'.
gv_screen3 = '1300'.
gv_pb1 = ' '.
gv_pb2 = 'X'.
gv_pb3 = 'X'.
WHEN 'REFRESH'.
* PERFORM fm_refresh.
* PERFORM fm_proses.
ENDCASE.
ENDMODULE. " USER_COMMAND_2000 INPUT
After
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_2000 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
LEAVE PROGRAM.
WHEN 'EXECUTE'.
PERFORM fm_proses.
gv_screen1 = '3000'.
gv_screen2 = '1200'.
gv_screen3 = '1300'.
gv_pb1 = ' '.
gv_pb2 = 'X'.
gv_pb3 = 'X'.
WHEN 'REFRESH'.
PERFORM fm_refresh.
PERFORM fm_proses.
ENDCASE.
ENDMODULE. " USER_COMMAND_2000 INPUT
76.Make Function FM_REFRESH under module USER_COMMAND_2000 INPUT
*&---------------------------------------------------------------------*
*& Form FM_REFRESH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_refresh.
gv_screen1 = '1100'.
gv_screen1 = '3000'.
gv_screen1 = '3000'.
gv_pb1 = 'X'.
gv_pb2 = ' '.
gv_pb3 = ' '.
LOOP AT gi_header.
DELETE gi_header.
ENDLOOP.
ENDFORM. "FM_REFRESH
77.Make Function FM_PROSES under module "USER_COMMAND_0300 INPUT"
*&---------------------------------------------------------------------*
*& Form FM_PROSES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_proses.
DATA : lv_rowcount(6),
lv_counter TYPE i,
lv_text1 TYPE string,
lv_text2 TYPE string,
lv_text3 TYPE string.
*delete data at grid first
LOOP AT gi_header.
DELETE gi_header.
ENDLOOP.
LOOP AT gi_detail.
DELETE gi_detail.
ENDLOOP.
SELECT *
FROM qals
INTO CORRESPONDING FIELDS OF TABLE gi_qals
WHERE
matnr IN so_matnr AND
prueflos IN so_pru AND
art IN ('03','04').
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qapp
FROM qapp
FOR ALL ENTRIES IN gi_qals
WHERE
prueflos EQ gi_qals-prueflos AND
userc2 IN so_c2 AND
userd1 IN so_d1.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qamv
FROM qamv
FOR ALL ENTRIES IN gi_qals
WHERE
prueflos EQ gi_qals-prueflos.
* collect quantities data
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qase
FROM qase
FOR ALL ENTRIES IN gi_qals
WHERE
prueflos EQ gi_qals-prueflos.
* collect qualities data
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qasr
FROM qasr
FOR ALL ENTRIES IN gi_qals
WHERE
prueflos EQ gi_qals-prueflos.
* collect data specification for qualities data
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qpct
FROM qpct
FOR ALL ENTRIES IN gi_qasr
WHERE
codegruppe = gi_qasr-gruppe1.
* collect data result for qualities data
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gi_qpam
FROM qpam
FOR ALL ENTRIES IN gi_qamv
WHERE
auswahlmge = gi_qamv-auswmenge1.
*copy data to GI_HEADER
LOOP AT gi_qals.
* gi_header-test = '@2\QHide@'.
GI_HEADER-NUM = LV_COUNTER.
MOVE-CORRESPONDING GI_QALS TO GI_HEADER.
SHIFT GI_HEADER-MATNR LEFT DELETING LEADING '0' IN CHARACTER MODE.
SPLIT gi_header-ppsortkey AT '|' INTO lv_text1 lv_text2 lv_text3.
gi_header-userc2 = lv_text2.
gi_header-icon = icon_expand.
gi_header-child = 0.
gi_header-child_num = 0.
APPEND gi_header.
ENDLOOP.
SORT gi_header BY num child_num.
CONCATENATE 'Total data :' lv_rowcount INTO gv_info.
ENDFORM.
78.Make Function FM_PROSES_DETAIL
*&---------------------------------------------------------------------*
*& Form FM_PROSES_DETAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_proses_detail USING pv_index.
DATA: lv_counter TYPE i.
* CREATE GI_DETAIL
LOOP AT gi_detail.
DELETE gi_detail.
ENDLOOP.
CLEAR gi_detail.
READ TABLE gi_header INDEX pv_index.
* Add Quantitatif Data
LOOP AT gi_qase WHERE prueflos = gi_header-prueflos AND detailerg =
gi_header-probenr.
LOOP AT gi_qamv WHERE prueflos = gi_qase-prueflos AND merknr =
gi_qase-merknr.
MOVE-CORRESPONDING gi_header TO gi_detail.
MOVE-CORRESPONDING gi_qamv TO gi_detail.
MOVE-CORRESPONDING gi_qase TO gi_detail.
IF gi_detail-messwert <= gi_detail-toleranzob AND
gi_detail-messwert >= gi_detail-toleranzun.
gi_detail-icon = icon_checked.
ELSE.
gi_detail-icon = icon_cancel.
ENDIF.
APPEND gi_detail.
ENDLOOP.
ENDLOOP.
*--------------------------------------------------------------------*
* Add Qualitatif Data
LOOP AT gi_qasr WHERE prueflos = gi_header-prueflos AND probenr =
gi_header-probenr.
LOOP AT gi_qamv WHERE prueflos = gi_qase-prueflos AND merknr =
gi_qasr-merknr.
READ TABLE gi_qase WITH KEY prueflos = gi_header-prueflos
detailerg = gi_header-probenr
merknr = gi_qasr-merknr.
IF sy-subrc <> 0.
MOVE-CORRESPONDING gi_header TO gi_detail.
MOVE-CORRESPONDING gi_qamv TO gi_detail.
MOVE-CORRESPONDING gi_qasr TO gi_detail.
* Add Specification
READ TABLE gi_qpct WITH KEY codegruppe = gi_qasr-gruppe1 code =
gi_qasr-code1.
CONCATENATE gi_qasr-code1 gi_qpct-kurztext INTO
gi_detail-messwert_char SEPARATED BY space.
* Add Result
READ TABLE gi_qpam WITH KEY werks = gi_header-werks
auswahlmge = gi_qamv-auswmenge1.
gi_detail-tolgrenze = gi_qpam-ktx01.
IF gi_qasr-code1 = '10'.
gi_detail-icon = icon_checked.
ELSE.
gi_detail-icon = icon_cancel.
ENDIF.
APPEND gi_detail.
ENDIF.
ENDLOOP.
ENDLOOP.
*--------------------------------------------------------------------*
* Add Specification untuk data Kuantitatif
FREE lv_counter.
LOOP AT gi_detail.
ADD 1 TO lv_counter.
break abap08.
IF gi_detail-tolgrenze IS INITIAL.
PERFORM fm_create_specification USING lv_counter.
PERFORM fstring_ausgeben USING 'X'
gi_detail-messwert
gi_detail-stellen
CHANGING gi_detail-messwert_c.
gi_detail-messwert_char = gi_detail-messwert_c.
MODIFY gi_detail.
ENDIF.
ENDLOOP.
*--------------------------------------------------------------------*
SORT gi_detail BY merknr.
IF gv_pb3 = 'X'.
CALL METHOD
tg_detail->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDFORM. "FM_PROSES_DETAIL
79.Make fm_create_specification at the end of line coding.
*&---------------------------------------------------------------------*
*& Form fm_create_specification
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_create_specification USING pv_tabix.
DATA: l_string LIKE qamkr-tolgrenze,
l_length TYPE i,
l_length_write TYPE i,
l_maximum_length TYPE i VALUE 40,
lv_qmkst LIKE STANDARD TABLE OF qmkst WITH HEADER LINE.
READ TABLE gi_detail INDEX pv_tabix.
FREE gi_detail-tolgrenze.
IF gi_detail-tolgrenze IS INITIAL.
MOVE gi_detail-steuerkz TO lv_qmkst.
CLEAR l_string.
CLEAR l_length.
* Untere Toleranz
PERFORM fstring_ausgeben USING 'X'
gi_detail-toleranzun
gi_detail-stellen
CHANGING gi_detail-toleranzun_char.
* Obere Toleranz
PERFORM fstring_ausgeben USING 'X'
gi_detail-toleranzob
gi_detail-stellen
CHANGING gi_detail-toleranzob_char.
IF NOT gi_detail-tolunni IS INITIAL.
IF gi_detail-tolobni IS INITIAL.
* Nur untere Toleranzgrenze
MOVE '>=' TO l_string.
l_length = STRLEN( l_string ) + 2.
ENDIF.
* Untere Toleranzgrenze übernehmen
CONDENSE gi_detail-toleranzun_char.
l_length_write = STRLEN( gi_detail-toleranzun_char ).
ADD l_length TO l_length_write.
IF l_length_write LE l_maximum_length.
WRITE gi_detail-toleranzun_char TO l_string+l_length.
ENDIF.
IF NOT gi_detail-tolobni IS INITIAL.
l_length = STRLEN( l_string ).
l_length_write = l_length + 2.
IF l_length_write LE l_maximum_length.
WRITE ' .. ' TO l_string+l_length.
ENDIF.
ENDIF.
ENDIF.
IF NOT gi_detail-tolobni IS INITIAL.
CONDENSE gi_detail-toleranzob_char.
IF gi_detail-tolunni IS INITIAL.
* Nur obere Toleranzgrenze
MOVE '<=' TO l_string.
l_length = STRLEN( l_string ) + 2.
ELSE.
l_length = STRLEN( l_string ) + 1.
ENDIF.
l_length_write = STRLEN( gi_detail-toleranzob_char ).
ADD l_length TO l_length_write.
IF l_length_write LE l_maximum_length.
WRITE gi_detail-toleranzob_char TO l_string+l_length.
ENDIF.
ENDIF.
IF gi_detail-tolunni IS INITIAL
AND gi_detail-tolobni IS INITIAL.
* Keine Toleranzgrenze zum Merkmal
IF NOT gi_detail-sollwni IS INITIAL.
* Sollwert zum Merkmal gepflegt
PERFORM fstring_ausgeben USING 'X'
gi_detail-sollwert
gi_detail-stellen
CHANGING gi_detail-sollwert_char.
WRITE gi_detail-sollwert_char TO l_string.
ELSE.
IF NOT lv_qmkst-messwerte IS INITIAL.
* Quantitative Rückmeldung ohne quantitative Vorgaben
* Nachfolgend wird noch eine evtl. vorhandene Maßeinheit gesetzt
CLEAR l_string.
ELSEIF NOT lv_qmkst-pruefkat IS INITIAL.
** Auswahlmenge vorhanden
* MOVE GI_DETAIL-QPAMKTXT1 TO L_STRING.
ELSEIF lv_qmkst-bewfhlzhl IS INITIAL.
** Anzahl der fehlerhaften Einheiten sind zurückzumelden
* IF ( P_QAQEE-ERFSICHT EQ '11'
* OR P_QAQEE-ERFSICHT EQ '12' )
* AND LV_QMKST-ESTUKZ EQ URWERT_CHAR.
* MOVE 'Accepted <-> Rejected' TO L_STRING.
* ELSE.
* MOVE 'Number of nonconforming units' TO L_STRING.
* ENDIF.
ELSE.
* Anzahl Fehler sind zurückzumelden
MOVE 'No. of defects' TO l_string.
ENDIF.
ENDIF.
ENDIF.
IF NOT gi_detail-masseinhsw IS INITIAL
AND NOT lv_qmkst-quantitat IS INITIAL.
* Maßeinheit übernehmen
l_length = STRLEN( l_string ) + 1.
l_length_write = STRLEN( gi_detail-masseinhsw ).
ADD l_length TO l_length_write.
IF l_length_write LE l_maximum_length.
WRITE gi_detail-masseinhsw TO l_string+l_length.
ENDIF.
ENDIF.
IF l_string IS INITIAL.
* Keine Vorgabeninformationen vorhanden
MOVE text-104 TO l_string.
ENDIF.
* Hilfsfeld in Merkmalsstruktur übernehmen
MOVE l_string TO gi_detail-tolgrenze.
ENDIF.
ENDFORM. "fm_create_specification
80.Save Program
81.Now, we'll make OOP(Object Oriented Programing) so we'll create object ZRE_QM011_CLASSES. Type INCLUDE ZRE_QM011_CLASSES. at the first line coding after syntax
REPORT zre_inspection_point.
82.double click at ZRE_QM011_CLASSES
83.It's will show pop up
just click yes button
just click yes button
84.It's will create include program

85.Click Save
at local object
86.Type code of 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.Save and back to main program
88.Edit Module STATUS_1200 OUTPUT
Before
*&---------------------------------------------------------------------*
*& Module STATUS_1200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1200 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_1200 OUTPUT
After
*&---------------------------------------------------------------------*
*& Module STATUS_1200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1200 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
IF tc_header IS INITIAL.
PERFORM fm_build_alv_object_header.
ELSE.
CALL METHOD
tg_header->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDMODULE. " STATUS_1200 OUTPUT
89.Edit Module STATUS_1300 OUTPUT
Before
*&---------------------------------------------------------------------*
*& Module STATUS_1300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1300 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_1300 OUTPUT
After
*&---------------------------------------------------------------------*
*& Module STATUS_1300 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_1300 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
IF tc_detail IS INITIAL.
PERFORM fm_build_alv_object_detail.
ELSE.
CALL METHOD
tg_detail->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
ENDIF.
ENDMODULE. " STATUS_1300 OUTPUT
90.Make new subroutine fm_build_alv_object_header which we define before
*&---------------------------------------------------------------------*
*& Form FM_BUILD_ALV_OBJECT_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_build_alv_object_header.
*to define container
CREATE OBJECT tc_header
EXPORTING container_name = 'FC_HEADER'.
*to insert grid into it's container
CREATE OBJECT tg_header
EXPORTING i_parent = tc_header.
CREATE OBJECT go_event_receiver_header.
PERFORM fm_build_fieldcat_header TABLES gw_fieldcat_header.
CREATE OBJECT go_event_receiver_header.
SET HANDLER go_event_receiver_header->handle_toolbar FOR tg_header.
SET HANDLER go_event_receiver_header->handle_user_command FOR
tg_header.
SET HANDLER go_event_receiver_header->handle_hotspot_click FOR
tg_header.
SET HANDLER go_event_receiver_header->handle_button_click FOR
tg_header.
SET HANDLER go_event_receiver_header->handle_double_click FOR
tg_header.
CALL METHOD
tg_header->set_table_for_first_display
EXPORTING
i_save = 'U'
i_structure_name = 'GI_HEADER'
CHANGING
it_outtab = gi_header[]
it_fieldcatalog = gw_fieldcat_header[].
ENDFORM. "FM_BUILD_ALV_OBJECT_HEADER
91.Make new subroutine fm_build_alv_object_detail which we define before
*&---------------------------------------------------------------------*
*& Form FM_BUILD_ALV_OBJECT_DETAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_build_alv_object_detail.
CREATE OBJECT tc_detail
EXPORTING container_name = 'FC_DETAIL'.
CREATE OBJECT tg_detail
EXPORTING i_parent = tc_detail.
CREATE OBJECT go_event_receiver_detail.
PERFORM fm_build_fieldcat_detail TABLES gw_fieldcat_detail.
CREATE OBJECT go_event_receiver_detail.
SET HANDLER go_event_receiver_detail->handle_toolbar FOR tg_detail.
SET HANDLER go_event_receiver_detail->handle_user_command FOR
tg_detail.
SET HANDLER go_event_receiver_detail->handle_hotspot_click FOR
tg_detail.
SET HANDLER go_event_receiver_detail->handle_button_click FOR
tg_detail.
CALL METHOD
tg_detail->set_table_for_first_display
EXPORTING
i_save = 'U'
i_structure_name = 'GI_DETAIL'
CHANGING
it_outtab = gi_detail[]
it_fieldcatalog = gw_fieldcat_detail[].
ENDFORM. "FM_BUILD_ALV_OBJECT_DETAIL
92.Now, to define fields of ALV, we need to type code below. Type it before fm_build_alv_object_header
*&---------------------------------------------------------------------*
*& Form F_FIELDCATG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_fieldcatg USING
t_alv_fieldcat TYPE lvc_t_fcat
value(fu_types) "0
value(fu_fname) "1
value(fu_reftb) "2
value(fu_refld) "3
value(fu_noout) "4
value(fu_outln) "5
value(fu_fltxt) "6
value(fu_reptxt) "7
value(fu_coltxt) "8
value(fu_dosum) "9
value(fu_hotsp) "10
value(fu_dec) "11
value(fu_waers)
value(fu_meins)
value(fu_meins_f)
value(fu_waers_f)
value(fu_checkbox)
value(fu_fixcolumn)
value(fu_icon)
value(fu_edit)
value(fu_key)
.
DATA: ld_fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
CLEAR: ld_fieldcat.
ld_fieldcat-tabname = fu_types.
ld_fieldcat-fieldname = fu_fname.
ld_fieldcat-ref_table = fu_reftb.
ld_fieldcat-ref_field = fu_refld.
ld_fieldcat-no_out = fu_noout.
ld_fieldcat-outputlen = fu_outln.
ld_fieldcat-seltext = fu_fltxt.
ld_fieldcat-reptext = fu_reptxt.
ld_fieldcat-coltext = fu_coltxt.
ld_fieldcat-do_sum = fu_dosum.
ld_fieldcat-hotspot = fu_hotsp.
ld_fieldcat-decimals_o = fu_dec.
ld_fieldcat-currency = fu_waers.
ld_fieldcat-quantity = fu_meins.
ld_fieldcat-qfieldname = fu_meins_f.
ld_fieldcat-cfieldname = fu_waers_f.
ld_fieldcat-checkbox = fu_checkbox.
ld_fieldcat-fix_column = fu_fixcolumn.
ld_fieldcat-icon = fu_icon.
ld_fieldcat-edit = fu_edit.
ld_fieldcat-key = fu_key.
APPEND ld_fieldcat TO t_alv_fieldcat.
ENDFORM. "F_FIELDCATG
93.Now we need to make subroutine for Form FM_BUILD_FIELDCAT_HEADER
*&---------------------------------------------------------------------*
*& Form FM_BUILD_FIELDCAT_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FT_REPORT text
*----------------------------------------------------------------------*
FORM fm_build_fieldcat_header TABLES ft_report.
PERFORM f_fieldcatg USING gw_fieldcat_header 'GI_HEADER' :
* 'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' ''
*,
* 'TEST' 'GI_HEADER' 'TEST' '' '10' '' '' '' '' '' '' '' '' '' '' '' ''
* '' '' '',
'NUM' 'GI_HEADER' 'NUM' '' '6' '' '' 'Number' '' '' '' '' '' '' '' ''
'' '' '' '',
'MATNR' 'GI_HEADER' 'MATNR' '' '13' '' '' 'Material' '' '' '' '' '' ''
'' '' '' '' '' '',
'KTEXTMAT' 'GI_HEADER' 'KTEXTMAT' '' '25' '' '' 'Description' '' '' ''
'' '' '' '' '' '' '' '' '',
'WERK' 'GI_HEADER' 'WERK' '' '5' '' '' 'Plant' '' '' '' '' '' '' '' ''
'' '' '' '',
'AUFNR' 'GI_HEADER' 'AUFNR' '' '13' '' '' 'Production Order' '' '' ''
'' '' '' '' '' '' '' '' '',
'ICON' 'GI_HEADER' 'ICON' '' '3' '' '' '' '' 'X' '' '' '' '' '' '' ''
'X' '' '',
'PRUEFLOS' 'GI_HEADER' 'PRUEFLOS' '' '13' '' '' 'Inspection Lot' '' ''
'' '' '' '' '' '' '' '' '' '',
* 'CHILD_NUM' 'GI_HEADER' 'CHILD_NUM' '' '8' '' '' 'CHILD_NUM' '' '' ''
* '' '' '' '' '' '' '' '' '',
'ART' 'GI_HEADER' 'ART' '' '4' '' '' 'Type' '' '' '' '' '' '' '' '' ''
'' '' '',
'TIME' 'GI_HEADER' 'TIME' '' '8' '' '' 'Time' '' '' '' '' '' '' '' ''
'' '' '' '',
'DATE' 'GI_HEADER' 'DATE' '' '12' '' '' 'Inspection' '' '' '' '' '' ''
'' '' '' '' '' '',
'PROLOT' 'GI_HEADER' 'PROLOT' '' '10' '' '' 'Prod. Lot' '' '' '' '' ''
'' '' '' '' '' '' ''
* 'PROBENR' 'GI_HEADER' 'PROBENR' '' '10' '' '' 'PROBENR' '' '' '' ''
*'' '' '' '' '' '' '' ''
* 'PRUEFPKT' 'GI_HEADER' 'PRUEFPKT' '' '13' '' '' 'Inspection Point' ''
* '' '' '' '' '' '' '' '' '' '' '',
.
ENDFORM. "FM_BUILD_FIELDCAT_HEADER
94.Then we need to make subroutine for Form FM_BUILD_FIELDCAT_DETAIL
*&---------------------------------------------------------------------*
*& Form FM_BUILD_FIELDCAT_DETAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FT_REPORT text
*----------------------------------------------------------------------*
FORM fm_build_fieldcat_detail TABLES ft_report.
PERFORM f_fieldcatg USING gw_fieldcat_detail 'GI_DETAIL' :
* 'CHK' '' 'CHK' '' '1' '' '' '' '' '' '' '' '' '' '' 'X' 'X' '' 'X' ''
*,
* 'NUM' 'GI_DETAIL' 'NUM' '' '6' '' '' 'Number' '' '' '' '' '' '' '' ''
* '' '' '' '',
'MERKNR' 'GI_DETAIL' 'MERKNR' '' '4' '' '' 'NO' '' '' '' '' '' '' ''
'' '' '' '' '',
'VERWMERKM' 'GI_DETAIL' 'VERWMERKM' '' '10' '' '' 'Characteristic' ''
'' '' '' '' '' '' '' '' '' '' '',
'KURZTEXT' 'GI_DETAIL' 'KURZTEXT' '' '30' '' '' 'Short Text' '' '' ''
'' '' '' '' '' '' '' '' '',
'TOLGRENZE' 'GI_DETAIL' 'TOLGRENZE' '' '14' '' '' 'Specification' ''
'' '' '' '' '' '' '' '' '' '' '',
'MESSWERT_CHAR' 'GI_DETAIL' 'MESSWERT_CHAR' '' '16' '' '' 'Result' ''
'' '' '' '' '' '' '' '' '' '' '',
'ICON' 'GI_DETAIL' 'ICON' '' '8' '' '' 'Valuation' '' '' '' '' '' ''
'' '' '' 'X' '' ''
.
ENDFORM. "FM_BUILD_FIELDCAT_DETAIL
95.Now, we'll do feature 'on click hotspot' at ALV header, so we can click it. Create sub routine below. We can code it after ALV object detail
*&---------------------------------------------------------------------*
*& Form FM_ON_CLICK_HOTSPOT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->I_ROW_ID text
* --> text
* -->I_COLUMN_ID text
* --> text
* -->IS_ROW_NO text
*----------------------------------------------------------------------*
FORM fm_on_click_hotspot USING i_row_id TYPE lvc_s_row
i_column_id TYPE lvc_s_col
is_row_no TYPE lvc_s_roid.
* READ TABLE GI_HEADER INDEX I_ROW_ID.
* IF SY-SUBRC IS INITIAL.
* GV_ROW_NO = I_ROW_ID.
* ENDIF.
READ TABLE gi_header INDEX i_row_id.
IF gi_header-icon IS INITIAL.
ELSEIF gi_header-icon = icon_expand.
PERFORM fm_load_child_header USING gi_header-prueflos gi_header-werk
i_row_id.
ELSEIF gi_header-icon = icon_collapse.
PERFORM fm_unload_child_header USING gi_header-prueflos i_row_id.
ENDIF.
ENDFORM. "FM_ON_CLICK_HOTSPOT
96.Create subroutine fm_on_Button_click
*&---------------------------------------------------------------------*
*& Form fm_on_BUTTON_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ES_COL_ID text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM fm_on_button_click USING p_es_col_id
p_es_row_no.
READ TABLE gi_header INDEX p_es_row_no.
IF sy-subrc IS INITIAL.
gv_row_no = p_es_row_no.
ENDIF.
ENDFORM. " fm_on_BUTTON_CLICK
97.Create subroutine fm_on_double_click
*&---------------------------------------------------------------------*
*& Form FM_ON_DOUBLE_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_ROW text
* -->P_E_COLUMN text
* -->P_ES_ROW_NO text
*----------------------------------------------------------------------*
FORM fm_on_double_click USING p_e_row
p_e_column
p_es_row_no TYPE lvc_s_roid.
* BREAK ABAP08.
DATA: lv_row_id TYPE i.
lv_row_id = p_es_row_no-row_id.
READ TABLE gi_header INDEX lv_row_id.
IF gi_header-icon IS INITIAL.
PERFORM fm_proses_detail USING lv_row_id.
ENDIF.
ENDFORM. " FM_ON_DOUBLE_CLICK
98.We need to load data for ALV, so we need to make subroutine for it too. we create FM_load_child_header
*&---------------------------------------------------------------------*
*& Form FM_load_child_header
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fm_load_child_header USING pv_prueflos pv_werks pv_i_row_id TYPE
lvc_s_row.
DATA: lv_rowcount(6),
lv_counter TYPE i,
lv_row_id TYPE i,
lv_text1(6),
lv_text2(10),
lv_text3(10),
lv_werks LIKE qals-werk.
lv_werks = pv_werks.
READ TABLE gi_header WITH KEY prueflos = pv_prueflos icon =
icon_expand.
IF sy-subrc = 0.
gi_header-icon = icon_collapse.
* GI_HEADER-CHK = 'X'.
FREE lv_counter.
LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.
ADD 1 TO lv_counter .
ENDLOOP.
IF lv_counter > 0.
MODIFY gi_header INDEX sy-tabix.
FREE lv_counter.
LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.
ADD 1 TO lv_counter .
CLEAR gi_header.
FREE gi_header-num.
gi_header-werks = lv_werks.
gi_header-prueflos = gi_qapp-prueflos.
gi_header-child_num = lv_counter.
gi_header-child = pv_i_row_id.
SPLIT gi_qapp-ppsortkey AT '|' INTO lv_text1 lv_text2 lv_text3.
CONCATENATE lv_text1+0(2) lv_text1+2(2) lv_text1+4(2) INTO
gi_header-time SEPARATED BY ':' .
CONCATENATE lv_text2+6(2) lv_text2+4(2) lv_text2+0(4) INTO
gi_header-date SEPARATED BY '/' .
gi_header-prolot = lv_text3.
gi_header-probenr = gi_qapp-probenr.
SHIFT gi_header-prolot LEFT DELETING LEADING '0' IN CHARACTER
MODE.
APPEND gi_header.
ENDLOOP.
IF lv_counter > 0.
SORT gi_header BY prueflos child_num child.
pv_i_row_id-index = pv_i_row_id-index + lv_counter + 4.
CALL METHOD
tg_header->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
CALL METHOD
tg_header->set_current_cell_via_id
EXPORTING
is_row_id = pv_i_row_id.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. "FM_load_child_header
99.We also need to unload data from ALV, so we need to code FM_unload_child_header
*&---------------------------------------------------------------------*
*& Form FM_UNLOAD_CHILD_HEADER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PV_NUM text
* -->PV_PRUEFLOS text
*----------------------------------------------------------------------*
FORM fm_unload_child_header USING pv_prueflos pv_i_row_id TYPE lvc_s_row
.
DATA: lv_rowcount(6),
lv_counter TYPE i.
LOOP AT gi_qapp WHERE prueflos EQ pv_prueflos.
ADD 1 TO lv_counter.
ENDLOOP.
IF lv_counter > 0.
LOOP AT gi_header WHERE child_num > 0 AND prueflos = pv_prueflos.
DELETE gi_header INDEX sy-tabix.
ENDLOOP.
LOOP AT gi_header WHERE prueflos = pv_prueflos.
gi_header-icon = icon_expand.
MODIFY gi_header.
ENDLOOP.
pv_i_row_id-index = pv_i_row_id-index + lv_counter.
CALL METHOD
tg_header->refresh_table_display
EXPORTING
i_soft_refresh = 'X'.
CALL METHOD
tg_header->set_current_cell_via_id
EXPORTING
is_row_id = pv_i_row_id.
ENDIF.
ENDFORM. "FM_UNLOAD_CHILD_HEADER
100.Edit or active declaration that we already inactive.
Before
DATA: tc_header TYPE REF TO cl_gui_custom_container,
tg_header TYPE REF TO cl_gui_alv_grid,
tc_detail TYPE REF TO cl_gui_custom_container,
tg_detail TYPE REF TO cl_gui_alv_grid.
* go_event_receiver_header TYPE REF TO lcl_event_receiver,
* go_event_receiver_detail TYPE REF TO lcl_event_receiver.
*DATA: gw_fieldcat_header TYPE lvc_t_fcat,
* gw_fieldcat_detail TYPE lvc_t_fcat.
*DATA: gv_row_no TYPE i.
After
DATA: tc_header TYPE REF TO cl_gui_custom_container,
tg_header TYPE REF TO cl_gui_alv_grid,
tc_detail TYPE REF TO cl_gui_custom_container,
tg_detail TYPE REF TO cl_gui_alv_grid,
go_event_receiver_header TYPE REF TO lcl_event_receiver,
go_event_receiver_detail TYPE REF TO lcl_event_receiver.
DATA: gw_fieldcat_header TYPE lvc_t_fcat,
gw_fieldcat_detail TYPE lvc_t_fcat.
DATA: gv_row_no TYPE i.
101.Now, we create include utilities program. Type code below at the end of line coding.
INCLUDE zre_qm011_utilities.
102.Double click at zre_qm011_utilities
103.It will show pop up
Just click Yes button
104.Now we'll create new include

105.Click save
at local object
106.Type Code at 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.Save and Activate include program.
![]()
108.Go to zre_qm011_classes by double click at object include

109.Save and Activate zre_qm011_classes
![]()
110.Back to main program
111.Save and activate
![]()
112.Run program by click execute button ![]()
▪Input Selection


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