Objective
|
|
Transaction Code
|
SE38 - ABAP Editor
|
Tables
|
QALS - Inspection lot record
QAPP - Inspection point
QAMV - Characteristic specifications for inspection processing
QMPT -
QASE - Results table for the sample unit
QAPPW - Data dictionary fields for inspection during production
QASR - Sample results for inspection characteristics
QPAM - Inspection catalog selected sets
QPCT - Code texts
|
Support
|
Video
|
Contributors
|
Danar Andri Prasetyo ( danaruto131@yahoo.com )
|
Creating Report
Program Name : ZRE_INSPECTION_POINT ( Functional Specification )
Title : 703 - Report Inspection Point
| 4. | We make main screen with code 2000 |
Display Steps
| 5. | Now, Inside Screen 2000 layout, we'll make 3 subscreen |
Display Steps
| • | Click LayOut from screen 2000 |
| • | Click 'subscreen area' and place in screen painter, do it three times |

| • | 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 |

then click 
| • | There will show pop up just click 'Yes' button |

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" |
then click 
| • | 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 |
Display Steps
| 7. | Then we make screen '0200' for ALV HEADER |
Dsiplay Steps
| 8. | Now, continue to make screen '0300' for ALV Detail Screen |
Display Steps
| 9. | Now, we make blank screen. Name it with screen '3000'. The aim of this screen is to substitute screen 100,200,300 when they are hide |
Display Steps
| • | 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) |

|
TABLES : qals, qapp, qamv, qpmt, qase, qappw, qasr, qpam, qpct.
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.
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 |

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.

| 20. | Double click at MODULE USER_COMMAND_2000 |
just click 'yes' button
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

| 25. | Double click at screen 0100 |

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.
| 28. | Double click at MODULE status_0100. |
just click 'yes' button
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". |
just click yes button.

| 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


| 38. | Double click at screen 0200 |

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. |
just click 'yes' button
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

| 46. | Double click at screen 0200 |

| 47. | Double Click at "user_command_0200". |
just click yes button.

| 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

| 52. | Double click at screen 0300 |

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. |
just click 'yes' button
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

| 60. | Double click at screen 0300 |

| 61. | Double Click at "user_command_0300". |
just click yes button.

| 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

| 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 |
Display Steps
| • | Right click at Screen-> create |
 
| • | Fill Screen Number with 1200 |

| • | Fill Short description with "HEADER" and Screen Type with "Subscreen" |

| • | Click LayOut from screen 1200 |
| • | Click and place 'Custom Control' at screen painter |
| • | Click on 'Custom Control' and change properties like picture below by click  |


| • | 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 |
just click yes button.


| • | We will code it later. just save program. |
|
| 70. | Now we will create screen 1300 for ALV Detail Container |
Display Steps
| • | Right click at Screen-> create |
 
| • | Fill Screen Number with 1300 |

| • | Fill Short description with "DETAIL" and Screen Type with "Subscreen" |

| • | Click LayOut from screen 1300 |
| • | Click and place 'Custom Control' at screen painter |
| • | Click on 'Custom Control' and change properties like picture below by click  |


| • | 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 |
just click yes button.


| • | 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
| 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 |
just click yes button
just click yes button
| 84. | It's will create include program |

| 85. | Click Save at local object |
Display Code
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 |
Just click Yes button
| 104. | Now we'll create new include |

| 105. | Click save at local object |
| 106. | Type Code at program include. |
Display Code
*&---------------------------------------------------------------------*
*& 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 |


| 112. | Run program by click execute button  |
Result




Source Code Main program
*&---------------------------------------------------------------------*
*& 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.
|
Source ZRE_QM011_CLASSES
TYPE-POOLS: ICON.
*&---------------------------------------------------------------------*
*& Include ZRE_QM011_CLASSES *
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------
*&- C L A S S E S
*&---------------------------------------------------------------------
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object e_interactive,
handle_user_command FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm,
handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no,
handle_button_click FOR EVENT button_click OF cl_gui_alv_grid
IMPORTING es_col_id es_row_no,
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
ENDCLASS. "lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
* Event handler method for event toolbar.
CONSTANTS:
* Constants for button type
c_button_normal TYPE i VALUE 0,
c_menu_and_default_button TYPE i VALUE 1,
c_menu TYPE i VALUE 2,
c_separator TYPE i VALUE 3,
c_radio_button TYPE i VALUE 4,
c_checkbox TYPE i VALUE 5,
c_menu_entry TYPE i VALUE 6.
DATA:
ls_toolbar TYPE stb_button.
* Append seperator to the normal toolbar
CLEAR ls_toolbar.
MOVE c_separator TO ls_toolbar-butn_type..
APPEND ls_toolbar TO e_object->mt_toolbar.
* Append a new button that to the toolbar. Use E_OBJECT of
* event toolbar. E_OBJECT is of type CL_ALV_EVENT_TOOLBAR_SET.
* This class has one attribute MT_TOOLBAR which is of table type
* TTB_BUTTON. The structure is STB_BUTTON
* CLEAR LS_TOOLBAR.
* MOVE 'BATALKAN_SKET' TO LS_TOOLBAR-FUNCTION.
* MOVE ICON_SYSTEM_MODUS_DELETE TO LS_TOOLBAR-ICON.
* MOVE 'BATALKAN SKET' TO LS_TOOLBAR-QUICKINFO.
* MOVE 'BATALKAN SKET' TO LS_TOOLBAR-TEXT.
* MOVE ' ' TO LS_TOOLBAR-DISABLED.
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
*
ENDMETHOD. "handle_toolbar
METHOD handle_user_command.
* Handle own functions defined in the toolbar
* CASE E_UCOMM.
** WHEN 'BATALKAN_SKET'.
** PERFORM FM_BATALKAN_SKET.
* ENDCASE.
ENDMETHOD. "handle_user_command
METHOD handle_hotspot_click.
PERFORM fm_on_click_hotspot USING e_row_id
e_column_id
es_row_no.
ENDMETHOD. "handle_hotspot_click
METHOD handle_button_click.
PERFORM fm_on_button_click USING es_col_id
es_row_no.
ENDMETHOD. "HANDLE_BUTTON_CLICK
METHOD handle_double_click.
PERFORM fm_on_double_click USING e_row
e_column
es_row_no.
ENDMETHOD.
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------
|
Source 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
|
|