Program Hari Ke Empat

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 9

ALV lanjutan menambah tombol new

REPORT zgld3_alv_notombol.
TYPE-POOLS: vrm .
**Deklarasi variable terkait Container dan ALV Class
DATA : gr_table TYPE REF TO cl_salv_table,
gr_container TYPE REF TO cl_gui_custom_container,
gv_grid TYPE REF TO cl_gui_alv_grid,
"DATA O_CUST AND O_ALV
o_cust100 TYPE REF TO cl_gui_custom_container,
o_alv100 TYPE REF TO cl_gui_alv_grid,
i_fieldcat100 TYPE lvc_t_fcat,
wa_fieldcat100 LIKE LINE OF i_fieldcat100,
i_layout TYPE lvc_s_layo,
i_variant LIKE disvariant,
i_print TYPE lvc_s_prnt,
e_ucomm TYPE sy-ucomm,
i_selfield TYPE slis_selfield,
i_save VALUE 'A',
i_events TYPE slis_t_event,
ls_stable TYPE lvc_s_stbl.
DATA : ok_code LIKE sy-ucomm.
DATA : irec TYPE i.
DATA xmode TYPE char1 VALUE 'E'.

*** Deklarasi struktur untuk alv


TABLES : resb, mara.
TYPES :
BEGIN OF zs_print.
INCLUDE STRUCTURE zsakw_lat1.
TYPES: diff TYPE menge_d,
colinfo TYPE lvc_t_scol,
END OF zs_print.

*** Deklarasi data untuk Itab dan WA yg digunakan di getdata


DATA it_print TYPE TABLE OF zs_print.
DATA wa_print TYPE zs_print.

**Deklarasi Class dan implementasi


CLASS lcl_handle_events DEFINITION DEFERRED. "SY-EVENTS DECLARE L
ATER
DATA : gr_events TYPE REF TO lcl_handle_events. "DATA FOR EVENTS

CLASS lcl_handle_events DEFINITION. "DEFINITION FROM EV


ENTS
PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row. "e_column,
ENDCLASS. "lcl_handle_events DEFINITION
*&---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION. "DEFINITION FROM EV
ENTS
METHOD handle_double_click.
READ TABLE it_print INTO DATA(ls_grid) INDEX e_row.

SET PARAMETER ID: 'RES' FIELD ls_grid-rsnum.


CALL TRANSACTION 'MB23' AND SKIP FIRST SCREEN.
CLEAR ls_grid.

ENDMETHOD. " CHECK_PLANETYPE


ENDCLASS. "lcl_handle_events IMPLEMENTATION
*&---------------------------------------------------------------------*

*** Parameters dan Select Option


SELECTION-SCREEN BEGIN OF SCREEN 110 AS SUBSCREEN.
PARAMETERS :
p_plant TYPE resb-werks DEFAULT '1710',
p_mtype TYPE resb-bwart DEFAULT '311'.

SELECT-OPTIONS :
p_matnr FOR mara-matnr,
p_resvdt FOR resb-bdter." DEFAULT '20230101' to sy-datum.
SELECTION-SCREEN END OF SCREEN 110 .
INITIALIZATION.
p_resvdt-sign = 'I'.
p_resvdt-option = 'BT'.
p_resvdt-low = sy-datum - 60.
p_resvdt-high = sy-datum.
APPEND p_resvdt.

*** awal program Cursor.


START-OF-SELECTION.
xmode = 'D'.
CALL SCREEN 100.

* PERFORM get_data.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*

FORM get_data .

IF p_resvdt IS NOT INITIAL. " Jika parameter p_resvdt tidak kosong


REFRESH it_print. "Kosongkan itab IT_PRINT
SELECT rkpf~rsdat rkpf~usnam rkpf~bwart rkpf~rsnum
resb~rspos resb~matnr makt~maktx resb~bdmng
resb~enmng resb~meins
FROM rkpf
JOIN resb ON rkpf~rsnum = resb~rsnum
JOIN makt ON resb~matnr = makt~matnr AND makt~spras = 'E'
INTO CORRESPONDING FIELDS OF TABLE it_print
WHERE resb~werks = p_plant
AND resb~bwart = p_mtype
AND resb~bdter IN p_resvdt
AND resb~matnr IN p_matnr.

LOOP AT it_print INTO wa_print. " baca setiap record dari itab IT_Print
dan di tampung di wa WA_PRINT
wa_print-diff = wa_print-bdmng - wa_print-enmng." isi nilai pada wa_pri
nt-diff dengan rumus BDMNG - ENMNG
MODIFY it_print FROM wa_print TRANSPORTING diff." Update data pada fiel
d DIFF pada itab IT_PRINT sesuai nilai pada WA_PRINT-DIFF
CLEAR wa_print. " Kosongkan data pada WA_PRINT
ENDLOOP.
ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Module PBO_S100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE pbo_s100 OUTPUT.
SET PF-STATUS 'S0100'.

IF xmode = 'E'.
SET TITLEBAR 'T0100' WITH 'List Reservation - Edit mode'.
ELSEIF xmode = 'D'.
SET TITLEBAR 'T0100' WITH 'List Reservation - Display mode'.
ENDIF.
PERFORM show100.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Form show100
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM show100 .
PERFORM get_data.

*** Create Object Container, ALV Class, Event Handler


IF o_cust100 IS INITIAL .
CREATE OBJECT o_cust100 " Create Object Contanner100
EXPORTING
container_name = 'CONTAINER100'.

CREATE OBJECT o_alv100 " Create Object ALV Class


EXPORTING
i_parent = o_cust100.

CREATE OBJECT gr_events. "Crate object class handler


SET HANDLER gr_events->handle_double_click FOR o_alv100. "Set Methode dou
ble click
ENDIF.

"Setting data I_LAYOUT


CLEAR i_layout.
i_layout-cwidth_opt = 'X'. "Optimize column width
i_layout-zebra = 'X'. "Alternating line color (striped)
i_layout-no_rowins = 'X'.
* i_layout-no_rowmark = 'X'. "Colom Select On Left ALV
i_layout-sel_mode = 'D'. "Selection Mode
* i_layout-no_toolbar = 'X'. "Tool Button On Top ALV
i_layout-stylefname = 'STYLE'.
* i_layout-grid_title = 'Available Components'.
* i_layout-smalltitle = 'X'.
* i_layout-ctab_fname = 'CELLCOLOR'.
* i_layout-info_fname = 'ROWCOLOR'. "For row coloring

" Seting data I_VARIANT


CLEAR i_variant.
i_variant-report = sy-repid. "<<<<
i_variant-username = sy-uname. "<<<<
"End Display

*** Persipkan kolom yang akan ditampilkan dan di simpan di itab i_fieldcat10
0
PERFORM set_fieldcat100.

*** Seting ALV sesuai data dr itab IT_print pada alv class
CALL METHOD o_alv100->set_table_for_first_display
EXPORTING
is_layout = i_layout
is_variant = i_variant
i_save = i_save
CHANGING
it_outtab = it_print
it_fieldcatalog = i_fieldcat100.

** call method o_alv100->register_edit_event


** exporting
** i_event_id = cl_gui_alv_grid=>mc_evt_enter.
**
** call method o_alv100->set_ready_for_input
** exporting
** i_ready_for_input = 1.
** call method o_alv100->register_edit_event
** exporting
** i_event_id = cl_gui_alv_grid=>mc_evt_modified.

*** refresh ALV table display


CALL METHOD o_alv100->refresh_table_display.
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.
*&---------------------------------------------------------------------*
*& Form set_fieldcat100
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM set_fieldcat100 .
REFRESH i_fieldcat100. " Kosong kan ITAB i_fieldcat100

DATA:
lr_tabdescr TYPE REF TO cl_abap_structdescr, "Description of data object
type
lr_data TYPE REF TO data,
it_dfies TYPE ddfields, " DD: Field List
wa_dfies TYPE dfies. "DD Interface: Table Fields for DDIF_FIELDINFO_GE
T
"Create data LR_DATA sesuai struktur IT_PRINT
CREATE DATA lr_data LIKE LINE OF it_print.
lr_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ).

" Baca stuktur dan simpan pada ITAB it_dfies


it_dfies = cl_salv_data_descr=>read_structdescr( lr_tabdescr ).

CLEAR wa_dfies. " kosongkan wa_dfies


LOOP AT it_dfies INTO wa_dfies.
CLEAR wa_fieldcat100.
IF wa_dfies-fieldname <> 'MANDT'
AND wa_dfies-fieldname <> 'COLOR'
AND wa_dfies-fieldname <> 'LGORT'
AND wa_dfies-fieldname <> 'STYLE'.

" pindahkan data value dari WA wa_dfies ke WA wa_fieldcat100


MOVE-CORRESPONDING wa_dfies TO wa_fieldcat100.

IF wa_dfies-fieldname = 'DIFF'.
wa_fieldcat100-coltext =
wa_fieldcat100-scrtext_s =
wa_fieldcat100-scrtext_m =
wa_fieldcat100-scrtext_l = 'Selisih'.
wa_fieldcat100-qfieldname = 'MEINS'.
wa_fieldcat100-do_sum = 'X'.
ELSEIF wa_dfies-fieldname = 'BDMNG' OR
wa_dfies-fieldname = 'ENMNG'.
wa_fieldcat100-qfieldname = 'MEINS'.
wa_fieldcat100-do_sum = 'X'.
ENDIF.

"tambahkan record sesuai wa_fieldcat100 ke itab i_fieldcat100


APPEND wa_fieldcat100 TO i_fieldcat100.
ENDIF.
CLEAR wa_dfies.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Module EXIT_COMMAND_100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_command_100 INPUT.
"masukan nilai sy-ucomm ke variable OK_CODE
ok_code = sy-ucomm.

"Kosongkan variable SY-UCOMM


CLEAR sy-ucomm.

" tentukan action terhadap nilai dari OK_CODE.


CASE ok_code.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_100 INPUT.
ok_code = sy-ucomm.

"Kosongkan variable SY-UCOMM


CLEAR sy-ucomm.

" tentukan action terhadap nilai dari OK_CODE.


CASE ok_code.
WHEN 'NEW'.
MESSAGE 'Screen belum ada ... !' TYPE 'W' DISPLAY LIKE 'I'.
WHEN 'PRINT'.
MESSAGE 'Smartform belum ada ... !' TYPE 'W' DISPLAY LIKE 'I'.
ENDCASE.
ENDMODULE.
Menambah subscreen diberi nama sub1 dan custom control diberinama container100

Didalam gui status100 tambahkan 3 tombol


Di text element diberikan nama sbb:

You might also like