SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style. italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}
INCLUDE zmaintain_top.
INCLUDE zmaintain_alv.
INCLUDE zmaintain_frm.
*---------------------------------------------------------------------*
*AT SELECTION-SCREEN
*---------------------------------------------------------------------*
* PAI
*OB PHOEBUS
AT SELECTION-SCREEN.
PERFORM sub_check_input.
IF p_query = 'X'.
AUTHORITY-CHECK OBJECT 'V_KNA1_VKO'
ID 'VKORG' FIELD p_vkorg.
IF sy-subrc <> 0.
MESSAGE s208(00) WITH text-aut.
STOP.
ENDIF.
ENDIF.
*OE PHOEBUS
*&---------------------------------------------------------------------*
* INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
*&---------------------------------------------------------------------*
* START OF SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM build_fieldcat.
PERFORM read_table_data.
IF p_query = 'X'.
CALL SCREEN 0100.
ELSE.
PERFORM sub_new.
ENDIF.
zMAINTAIN_TOP
SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style. italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S52 {
color: #0000FF;
}
TABLES:zsd_d3_001,vbrk,vbrp,marc,kna1,vbkd,vbak.
*&---------------------------------------------------------------------*
* DATA DEFINE
*&---------------------------------------------------------------------*
RANGES:r_flag FOR zsd_d3_001-dflag.
TYPES: BEGIN OF t_s_list,
posnr LIKE zsd_d3_001-posnr,
kunnr LIKE kna1-kunnr,
name1 LIKE kna1-name1,
matnr LIKE marc-matnr,
maktx LIKE makt-maktx,
kdmat LIKE vbap-kdmat,
menge LIKE zsd_d3_001-menge,
kbetr LIKE zsd_d3_001-kbetr,
dmbtr LIKE zsd_d3_001-dmbtr,
waers LIKE mseg-waers,
* bstkd like vbkd-bstkd,
vkorg LIKE vbrp-vkorg_auft,
vtweg LIKE vbrk-vtweg,
sbi LIKE zsd_d3_001-sbi,
vbeln LIKE vbrk-vbeln,
budat LIKE sy-datum,
bldat LIKE sy-datum,
remark(40),
ernam LIKE zsd_d3_001-ernam,
aenam LIKE zsd_d3_001-aenam,
aedat LIKE sy-datum ,
dflag,
END OF t_s_list.
DATA:it_data TYPE STANDARD TABLE OF t_s_list WITH HEADER LINE.
DATA:it_new TYPE STANDARD TABLE OF t_s_list WITH HEADER LINE.
DATA:it_delt TYPE STANDARD TABLE OF t_s_list WITH HEADER LINE.
DATA:wa LIKE zsd_d3_001.
*&---------------------------------------------------------------------*
* SELECTION SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK b11 WITH FRAME TITLE text-002.
PARAMETERS:p_query RADIOBUTTON GROUP rad1.
SELECTION-SCREEN BEGIN OF BLOCK b12 WITH FRAME TITLE text-004.
SELECT-OPTIONS:s_bldat FOR zsd_d3_001-bldat,
s_kunnr FOR kna1-kunnr NO-EXTENSION NO INTERVALS ,
s_matnr FOR marc-matnr NO-EXTENSION NO INTERVALS ,
s_ernam FOR vbak-ernam OBLIGATORY.
*OB PHOEBUS
PARAMETERS p_vkorg LIKE vbrp-vkorg_auft OBLIGATORY.
*OE PHOEBUS
SELECTION-SCREEN END OF BLOCK b12.
PARAMETERS:p_creat RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK b11.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS:p_dflag1 RADIOBUTTON GROUP radi,
p_dflag2 RADIOBUTTON GROUP radi,
p_dflag3 RADIOBUTTON GROUP radi.
SELECTION-SCREEN END OF BLOCK b3.
z_alv
SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style. italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}
type-pools: rsds,slis.
include
type-pools: vrm.
data: name type vrm_id,
list type vrm_values,
value like line of list.
data: is_x030l type x030l,
it_dfies type table of dfies,
is_dfies type dfies,
it_fdiff type table of field_dif,
is_fdiff type field_dif.
data: w_selid type rsdynsel-selid,
it_tables type table of rsdstabs,
is_tables type rsdstabs,
it_fields type table of rsdsfields,
it_expr type rsds_texpr,
it_ranges type rsds_trange,
it_where type rsds_twhere,
is_where type rsds_where,
w_active type i.
data: it_content type ref to data,
it_delete type ref to data,
it_modif type ref to data.
* it_fcat TYPE lvc_t_fcat.
data: w_okcode type sy-ucomm,
g_flag type c value 'X',
flag_change value 'X'.
field-symbols:
field-symbols:
data:flag_err.
**********************************************
data: go_alv type ref to cl_gui_alv_grid,
go_new type ref to cl_gui_alv_grid,
lt_fcat type lvc_t_fcat,
ls_fcat like line of lt_fcat,
ls_layout type lvc_s_layo,
lt_excl_func type ui_functions,
ls_excl_func type ui_func,
ld_count type i,
*DROP DOWN TABLE
lt_dropdown type lvc_t_drop,
ls_dropdown type lvc_s_drop,
*F4 TABLE
lt_f4 type lvc_t_f4,
ls_f4 type lvc_s_f4.
data:lin type i,
p_modi type lvc_s_modi,
lt_modi type lvc_t_modi,
inserted_rows type lvc_t_moce,
deleted_rows type lvc_t_moce,
deleted_rows1 type lvc_s_moce,
mt_protocol type lvc_t_msg1,
cflag,
dflag.
data:toolbar_excluding type ui_functions.
* data for event handling
data: gs_f4 type lvc_s_f4,
gt_f4 type lvc_t_f4.
data: it_fcat type slis_t_fieldcat_alv,
is_fcat like line of it_fcat.
data: it_fieldcat type lvc_t_fcat,
it_fieldcat_new type lvc_t_fcat,
is_fieldcat like line of it_fieldcat.
*---------------------------------------------------------------------*
* CLASS LCL_ALV_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
class lcl_alv_event_receiver definition.
public section.
data: my_grid type ref to cl_gui_alv_grid.
methods:
handle_toolbar
for event toolbar of cl_gui_alv_grid
importing e_object e_interactive.
methods: check_input
changing ir_data_changed
type ref to cl_alv_changed_data_protocol.
methods:
handle_onf4
for event onf4 of cl_gui_alv_grid
importing sender
e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display,
handle_data_changed for event
data_changed of cl_gui_alv_grid
importing e_onf4
e_onf4_before
e_onf4_after
er_data_changed
sender.
methods:
handle_double_click
for event double_click of cl_gui_alv_grid
importing e_row
e_column.
methods:
handle_user_command
for event user_command of cl_gui_alv_grid
importing e_ucomm.
*
private section.
types: ddshretval_table type table of ddshretval.
class-methods: my_f4
importing sender type ref to cl_gui_alv_grid
et_bad_cells type lvc_t_modi
es_row_no type lvc_s_roid
er_event_data type ref to cl_alv_event_data
e_display type c
e_fieldname type lvc_fname
exporting lt_f4 type ddshretval_table.
endclass. "LCL_ALV_EVENT_RECEIVER DEFINITION
*---------------------------------------------------------------------*
* CLASS LCL_ALV_EVENT_new DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
class lcl_alv_event_new definition.
public section.
methods:
handle_toolbar
for event toolbar of cl_gui_alv_grid
importing e_object e_interactive.
methods:
handle_onf4
for event onf4 of cl_gui_alv_grid
importing sender
e_fieldname
e_fieldvalue
es_row_no
er_event_data
et_bad_cells
e_display,
handle_data_changed for event
data_changed of cl_gui_alv_grid
importing e_onf4
e_onf4_before
e_onf4_after
er_data_changed
sender.
methods:
handle_double_click
for event double_click of cl_gui_alv_grid
importing e_row
e_column.
methods:
handle_user_command
for event user_command of cl_gui_alv_grid
importing e_ucomm.
private section.
types: ddshretval_table type table of ddshretval.
class-methods: my_f4
importing sender type ref to cl_gui_alv_grid
et_bad_cells type lvc_t_modi
es_row_no type lvc_s_roid
er_event_data type ref to cl_alv_event_data
e_display type c
e_fieldname type lvc_fname
exporting lt_f4 type ddshretval_table.
endclass. "LCL_ALV_EVENT_RECEIVER DEFINITION
*&---------------------------------------------------------------------*
*& CLASS (IMPLEMENTATION) LCL_ALV_EVENT_RECEIVER
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
class lcl_alv_event_receiver implementation.
method handle_toolbar.
data: ls_toolbar type stb_button.
* append a separator to normal toolbar
clear ls_toolbar.
move 3 to ls_toolbar-butn_type.
append ls_toolbar to e_object->mt_toolbar.
* append icons to toolbar
if flag_change = ''.
clear ls_toolbar.
move 'DISP' to ls_toolbar-function.
move '显示'(111) to ls_toolbar-quickinfo.
move icon_display to ls_toolbar-icon.
move '显示'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'NEW' to ls_toolbar-function.
move '新建'(111) to ls_toolbar-quickinfo.
move icon_create to ls_toolbar-icon.
move '新建'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'COPY' to ls_toolbar-function.
move '拷贝'(111) to ls_toolbar-quickinfo.
move icon_system_copy to ls_toolbar-icon.
move '拷贝'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'DELE' to ls_toolbar-function.
move '删除标记'(111) to ls_toolbar-quickinfo.
move icon_delete to ls_toolbar-icon.
move '删除标记'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'SAVE' to ls_toolbar-function.
move '保存'(111) to ls_toolbar-quickinfo.
move icon_system_save to ls_toolbar-icon.
move '保存'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
else.
clear ls_toolbar.
move 'CHAN' to ls_toolbar-function.
move '修改'(111) to ls_toolbar-quickinfo.
move icon_change to ls_toolbar-icon.
move '修改'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
endif.
endmethod.
method handle_data_changed.
if e_onf4_before <> 'X'.
perform sub_processchg
using er_data_changed.
endif.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
endmethod. "HANDLE_DATA_CHANGED
method handle_onf4.
endmethod. "HANDLE_ONF4
method check_input.
endmethod.
method handle_user_command.
data: lt_rows type lvc_t_row,
i type i,
l_ferr type c. "error flag
case e_ucomm.
when 'DELE'.
call method go_alv->get_selected_rows
importing et_index_rows = lt_rows.
check not lt_rows[] is initial.
call method cl_gui_cfw=>flush.
if sy-subrc ne 0.
call function 'POPUP_TO_INFORM'
exporting
titel = 'INFORMATION'
txt2 = sy-subrc
txt1 = 'Error in Flush'(500).
else.
perform sub_delete tables lt_rows.
endif.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'SAVE'.
perform command_save.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'CHAN'.
flag_change = ''.
set titlebar 'CHAN' with text-t01.
perform sub_change.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'DISP'.
flag_change = 'X'.
set titlebar 'DISP' with text-t00.
perform sub_disp.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'NEW'.
perform sub_new.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'COPY'.
call method go_alv->get_selected_rows
importing et_index_rows = lt_rows.
check not lt_rows[] is initial.
call method cl_gui_cfw=>flush.
if sy-subrc ne 0.
call function 'POPUP_TO_INFORM'
exporting
titel = 'INFORMATION'
txt2 = sy-subrc
txt1 = 'Error in Flush'(500).
else.
perform sub_copy tables lt_rows.
call method go_alv->refresh_table_display.
call method cl_gui_cfw=>flush.
endif.
* CALL METHOD GO_NEW->REFRESH_TABLE_DISPLAY.
* CALL METHOD CL_GUI_CFW=>FLUSH.
endcase.
endmethod.
method handle_double_click.
endmethod.
method my_f4.
endmethod.
endclass. "LCL_ALV_EVENT_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS LCL_ALV_EVENT_new IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
class lcl_alv_event_new implementation.
method handle_toolbar.
data: ls_toolbar type stb_button.
* append a separator to normal toolbar
clear ls_toolbar.
move 3 to ls_toolbar-butn_type.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'DELE' to ls_toolbar-function.
move '删除标记'(111) to ls_toolbar-quickinfo.
move icon_delete to ls_toolbar-icon.
move '删除标记'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
move 'SAVE' to ls_toolbar-function.
move '保存'(111) to ls_toolbar-quickinfo.
move icon_system_save to ls_toolbar-icon.
move '保存'(112) to ls_toolbar-text.
move ' ' to ls_toolbar-disabled.
append ls_toolbar to e_object->mt_toolbar.
endmethod.
method handle_onf4.
endmethod. "HANDLE_ONF4
method handle_user_command.
data: lt_rows type lvc_t_row,
i type i,
l_ferr type c. "error flag
case e_ucomm.
when 'DELE'.
call method go_new->get_selected_rows
importing et_index_rows = lt_rows.
call method cl_gui_cfw=>flush.
if sy-subrc ne 0.
call function 'POPUP_TO_INFORM'
exporting
titel = 'INFORMATION'
txt2 = sy-subrc
txt1 = 'Error in Flush'(500).
else.
perform sub_delete tables lt_rows.
endif.
call method go_new->refresh_table_display.
call method cl_gui_cfw=>flush.
when 'SAVE'.
call method go_new->get_selected_rows
importing et_index_rows = lt_rows.
call method cl_gui_cfw=>flush.
if sy-subrc ne 0.
call function 'POPUP_TO_INFORM'
exporting
titel = 'INFORMATION'
txt2 = sy-subrc
txt1 = 'Error in Flush'(500).
else.
perform command_save_new.
endif.
* call method go_new->refresh_table_display.
* call method cl_gui_cfw=>flush.
endcase.
endmethod.
method my_f4.
endmethod.
method handle_data_changed.
if e_onf4_before <> 'X'.
perform sub_processchg
using er_data_changed.
endif.
call method go_new->refresh_table_display.
call method cl_gui_cfw=>flush.
endmethod. "HANDLE_DATA_CHANGED
method handle_double_click.
endmethod.
endclass. "LCL_ALV_EVENT_RECEIVER IMPLEMENTATION
data: gt_error type c.
data: go_alv_event_receiver type ref to lcl_alv_event_receiver.
data: go_alv_event_new type ref to lcl_alv_event_new.
SPAN {
font-family: "Courier New";
font-size: 10pt;
color: #000000;
background: #FFFFFF;
}
.L1S31 {
font-style. italic;
color: #808080;
}
.L1S32 {
color: #3399FF;
}
.L1S33 {
color: #4DA619;
}
.L1S52 {
color: #0000FF;
}
FORM build_fieldcat.
DATA: lt_fcat TYPE slis_t_fieldcat_alv.
DATA: tab(10) TYPE c,
ld_count TYPE i.
DATA : col_pos TYPE i VALUE 0.
DATA:ls_fcat LIKE LINE OF it_fieldcat.
CLEAR ld_count.
REFRESH:it_fcat.
DEFINE def_add.
clear ls_fcat.
add 1 to ld_count.
ls_fcat-fieldname = &1.
ls_fcat-ref_field = &2.
ls_fcat-ref_table = &3.
ls_fcat-f4availabl = &4.
ls_fcat-just = &5.
ls_fcat-scrtext_s = &6.
ls_fcat-scrtext_m = &6.
ls_fcat-scrtext_l = &6.
ls_fcat-txt_field = &6.
ls_fcat-outputlen = &7.
* ls_fcat-do_sum = &8.
* ls_fcat-datatype = &9.
ls_fcat-edit = &8.
ls_fcat-col_pos = ld_count.
append ls_fcat to it_fieldcat.
END-OF-DEFINITION.
def_add 'MATNR' 'MATNR' 'MARA' 'X' '' '物料号' '8' ''.
def_add 'MAKTX' 'MAKTX' 'MAKT' '' '' '物料描述' '25' ''.
def_add 'VKORG' 'VKORG_AUFT' 'VBRP' 'X' '' '销售组织' '8' ''.
def_add 'VTWEG' 'VTWEG' 'VBRK' 'X' '' '分销渠道' '8' ''.
def_add 'KUNNR' 'KUNNR' 'ZSD_D3_001' 'X' '' '客户代码' '10' ''.
def_add 'NAME1' 'NAME1' 'KNA1' space '' '客户名称' '25' ''.
def_add 'KDMAT' 'KDMAT' 'VBAP' 'X' '' '客户料号' '25' ''.
def_add 'WAERS' 'WAERS' 'MSEG' 'X' '' '货币' '5' ''.
def_add 'MENGE' 'MENGE' 'ZSD_D3_001' '' '' '消耗数量' '13' ''.
def_add 'KBETR' 'KBETR' 'ZSD_D3_001' '' '' '单价' '19' ''.
def_add 'DMBTR' 'DMBTR' 'ZSD_D3_001' '' '' '总金额' '19' ''.
def_add 'SBI' 'SBI' 'ZSD_D3_001' '' '' 'SBI' '12' ''.
def_add 'BUDAT' 'BUDAT' 'ZSD_D3_001' 'X' '' '消耗日期' '10' ''.
def_add 'BLDAT' 'BLDAT' 'ZSD_D3_001' 'X' '' '输入日期' '10' ''.
def_add 'ERNAM' '' '' 'X' '' '记录创建者' '12' ''.
def_add 'AENAM' '' '' 'X' '' '最后一次修改者' '12' ''.
def_add 'AEDAT' '' '' 'X' '' '最近修改日期' '8' ''.
def_add 'REMARK' '' '' space '' '备注' '30' ''.
def_add 'DFLAG' '' '' space '' '删除标记' '4' ''.
ENDFORM. " build_fieldcat
*&---------------------------------------------------------------------*
*& Form READ_TABLE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_table_data.
IF p_dflag1 = 'X'.
r_flag-sign = 'I'.
r_flag-option = 'EQ'.
r_flag-low = ''.
APPEND r_flag.
ELSEIF p_dflag2 = 'X'.
r_flag-sign = 'I'.
r_flag-option = 'EQ'.
r_flag-low = 'X'.
APPEND r_flag.
ELSE.
r_flag-sign = 'I'.
r_flag-option = 'BT'.
r_flag-low = ''.
r_flag-high = 'X'.
APPEND r_flag.
ENDIF.
IF p_query = 'X'.
SELECT
zsd_d3_001~posnr
zsd_d3_001~kunnr
zsd_d3_001~matnr
zsd_d3_001~kdmat
zsd_d3_001~vkorg
zsd_d3_001~vtweg
zsd_d3_001~menge
zsd_d3_001~kbetr
zsd_d3_001~dmbtr
zsd_d3_001~waers
zsd_d3_001~budat
zsd_d3_001~bldat
zsd_d3_001~remark
zsd_d3_001~sbi
zsd_d3_001~dflag
zsd_d3_001~ernam
zsd_d3_001~aenam
zsd_d3_001~aedat
INTO CORRESPONDING FIELDS OF TABLE it_data
FROM zsd_d3_001 INNER JOIN kna1
ON zsd_d3_001~kunnr = kna1~kunnr
WHERE zsd_d3_001~kunnr IN s_kunnr
AND zsd_d3_001~matnr IN s_matnr
and zsd_d3_001~ernam IN s_ernam
AND budat IN s_bldat
AND vkorg = p_vkorg
AND dflag IN r_flag.
LOOP AT it_data.
SELECT SINGLE maktx INTO it_data-maktx
FROM makt
WHERE matnr = it_data-matnr
AND spras = sy-langu.
IF sy-subrc <> 0.
SELECT SINGLE maktx INTO it_data-maktx
FROM makt
WHERE matnr = it_data-matnr.
ENDIF.
MODIFY it_data.
CLEAR it_data.
ENDLOOP.
SORT it_data BY matnr kdmat budat bldat.
ENDIF.
ENDFORM. " READ_TABLE_DATA
*---------------------------------------------------------------------*
* FORM CREAT_ALV_CONTROL *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> CTNAME *
*---------------------------------------------------------------------*
FORM creat_alv_control
USING ctname TYPE char20.
DATA: lo_container TYPE REF TO cl_gui_custom_container.
IF go_alv IS INITIAL.
CREATE OBJECT lo_container
EXPORTING container_name = ctname.
CLASS cl_gui_alv_grid DEFINITION LOAD.
CREATE OBJECT go_alv
EXPORTING
i_parent = lo_container
i_appl_events = space.
ENDIF.
ENDFORM. " CREAT_ALV_CONTROL_VENDOR
*---------------------------------------------------------------------*
* FORM SET_DISPLAY *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM set_display.
DATA ls_exclude TYPE ui_func.
DATA: gs_variant TYPE disvariant. "for parameter IS_VARIANT
CLEAR:toolbar_excluding.
g_flag = 'X'.
PERFORM excluding_build TABLES toolbar_excluding.
gs_variant-report = sy-repid.
ls_layout-sel_mode = 'A'.
* ls_layout-cwidth_opt = 'X'.
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
* i_structure_name = 'ZSD_D3_001'
is_layout = ls_layout
is_variant = gs_variant
i_save = 'A'
i_default = 'X'
it_toolbar_excluding = toolbar_excluding
CHANGING it_outtab = it_data[]
it_fieldcatalog = it_fieldcat[].
* set f4 help
CALL METHOD go_alv->register_f4_for_fields
EXPORTING
it_f4 = gt_f4.
* SET HANDLER OF EVENT
IF go_alv_event_receiver IS INITIAL.
CREATE OBJECT go_alv_event_receiver.
ENDIF.
SET HANDLER go_alv_event_receiver->handle_user_command
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_toolbar
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_double_click
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_data_changed
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_onf4
FOR go_alv.
CALL METHOD go_alv->set_toolbar_interactive.
CALL METHOD go_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD cl_gui_control=>set_focus "设置焦点在grid 上
EXPORTING
control = go_alv .
CALL METHOD go_alv->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
ENDFORM.
*---------------------------------------------------------------------*
* FORM EXCLUDING_BUILD *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> RT_EXCLUDING *
*---------------------------------------------------------------------*
FORM excluding_build
TABLES rt_excluding TYPE ui_functions.
DATA ls_exclude TYPE ui_func.
IF g_flag = 'X'.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO rt_excluding.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO rt_excluding.
ENDIF.
ENDFORM. "EXCLUDING_BUILD
*&---------------------------------------------------------------------*
*& Module STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0200 OUTPUT.
SET PF-STATUS '200'.
SET TITLEBAR '200' WITH text-t02.
IF go_new IS INITIAL.
PERFORM creat_alv_control_200
USING 'ALV_GRID_200'.
PERFORM build_alv_new_field.
PERFORM sub_new_disp.
ELSE.
PERFORM build_alv_new_field.
PERFORM sub_new_disp.
ENDIF.
ENDMODULE. " STATUS_0200 OUTPUT
*&---------------------------------------------------------------------*
*& Module PAI_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai_0100 INPUT.
gt_error = space.
IF NOT go_alv IS INITIAL.
* call method go_alv->check_changed_data.
ENDIF.
* CASE SY-UCOMM.
* WHEN 'SAVE'.
* PERFORM COMMAND_SAVE.
* ENDCASE.
ENDMODULE. " PAI_0100 INPUT
*---------------------------------------------------------------------*
* FORM COMMAND_SAVE *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM command_save.
DATA: flag(1) TYPE c,
cnt TYPE i,
answer.
DATA:temp LIKE TABLE OF zsd_d3_001 WITH HEADER LINE.
PERFORM check_data TABLES it_data CHANGING flag.
PERFORM lock_table CHANGING flag.
IF it_data[] IS INITIAL.
flag = 'X'.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'INFORMATION'
txt1 = '没有需要'
txt2 = '保存的数据!'(500).
ENDIF.
CHECK flag = ''.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = text-m03
* TEXTLINE2 = GV_TEXT2
titel = text-m00
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = answer.
CHECK answer = 'J'.
PERFORM count_table_data CHANGING cnt.
LOOP AT it_data.
CHECK NOT it_data-posnr IS INITIAL.
MOVE-CORRESPONDING it_data TO temp.
temp-mandt = sy-mandt.
APPEND temp.
CLEAR temp.
ENDLOOP.
MODIFY zsd_d3_001 FROM TABLE temp.
IF sy-subrc = 0.
PERFORM unlock_table.
MESSAGE s001(00) WITH text-m04.
cflag = ''.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM COMMAND_SAVE_NEW *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM command_save_new.
DATA: flag(1) TYPE c,
cnt TYPE i,
answer.
DATA:temp LIKE TABLE OF zsd_d3_001 WITH HEADER LINE.
DELETE it_new WHERE kunnr IS initial OR
matnr IS initial.
PERFORM check_data TABLES it_new CHANGING flag.
IF it_new[] IS INITIAL.
flag = 'X'.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'INFORMATION'
txt1 = '没有需要'
txt2 = '保存的数据!'(500).
ENDIF.
CHECK flag = ''.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = text-m03
* TEXTLINE2 = GV_TEXT2
titel = text-m00
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = answer.
CHECK answer = 'J'.
PERFORM count_table_data CHANGING cnt.
LOOP AT it_new.
MOVE-CORRESPONDING it_new TO temp.
temp-mandt = sy-mandt.
IF temp-posnr IS INITIAL.
cnt = cnt + 1.
temp-posnr = cnt.
it_new-posnr = temp-posnr.
ENDIF.
MODIFY it_new.
APPEND temp.
CLEAR temp.
ENDLOOP.
MODIFY zsd_d3_001 FROM TABLE temp.
IF sy-subrc = 0.
MESSAGE s001(00) WITH text-m04.
cflag = ''.
ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
* FORM SUB_DELETE_NEW *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> LT_ROWS *
*---------------------------------------------------------------------*
FORM sub_delete TABLES lt_rows STRUCTURE lvc_s_row.
DATA:l_flag,
answer.
DATA:wa LIKE it_data.
DATA:temp LIKE TABLE OF zsd_d3_001 WITH HEADER LINE.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'Y'
textline1 = text-m01
* TEXTLINE2 = GV_TEXT2
titel = text-m00
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = answer.
CHECK answer = 'J'.
LOOP AT lt_rows.
CHECK lt_rows-rowtype IS INITIAL.
READ TABLE it_data INTO wa INDEX lt_rows-index.
CHECK sy-subrc = 0 AND wa-posnr <> ''.
MOVE-CORRESPONDING wa TO temp.
temp-dflag = 'X'.
temp-aenam = sy-uname.
temp-aedat = sy-datum.
APPEND temp.
ENDLOOP.
MODIFY zsd_d3_001 FROM TABLE temp.
IF sy-subrc = 0.
COMMIT WORK.
LOOP AT temp.
DELETE it_data WHERE posnr = temp-posnr.
ENDLOOP.
MESSAGE s001(00) WITH text-m02.
ELSE.
ROLLBACK WORK.
MESSAGE s001(00) WITH text-m03.
ENDIF.
ENDFORM. " sub_DELETE
*&---------------------------------------------------------------------*
*& Form SUB_CHANGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_change.
REFRESH it_fieldcat.
DATA: tab(10) TYPE c,
ld_count TYPE i.
DATA : col_pos TYPE i VALUE 0.
DATA:ls_fcat LIKE LINE OF it_fieldcat.
CLEAR ld_count.
DEFINE def_add.
clear ls_fcat.
add 1 to ld_count.
ls_fcat-fieldname = &1.
ls_fcat-ref_field = &2.
ls_fcat-ref_table = &3.
ls_fcat-f4availabl = &4.
ls_fcat-just = &5.
ls_fcat-scrtext_s = &6.
ls_fcat-scrtext_m = &6.
ls_fcat-scrtext_l = &6.
ls_fcat-outputlen = &7.
* ls_fcat-do_sum = &8.
* ls_fcat-datatype = &9.
ls_fcat-edit = &8.
ls_fcat-col_pos = ld_count.
append ls_fcat to it_fieldcat.
END-OF-DEFINITION.
def_add 'MATNR' 'MATNR' 'MARA' 'X' '' '物料号' '8' ''.
def_add 'MAKTX' 'MAKTX' 'MAKT' space '' '物料描述' '25' ''.
def_add 'VKORG' 'VKORG_AUFT' 'VBRP' 'X' '' '销售组织' '4' ''.
def_add 'VTWEG' 'VTWEG' 'VBRK' 'X' '' '分销渠道' '8' ''.
def_add 'KUNNR' 'KUNNR' 'ZSD_D3_001' 'X' '' '客户代码' '10' ''.
def_add 'NAME1' 'NAME1' 'KNA1' space '' '客户名称' '25' ''.
def_add 'KDMAT' 'KDMAT' 'VBAP' 'X' '' '客户料号' '25' ''.
def_add 'WAERS' 'WAERS' 'MSEG' 'X' '' '货币' '5' 'X'.
def_add 'MENGE' 'MENGE' 'ZSD_D3_001' space '' '消耗数量' '13' 'X'.
def_add 'KBETR' 'KBETR' 'ZSD_D3_001' space '' '单价' '19' 'X'.
def_add 'DMBTR' 'DMBTR' 'ZSD_D3_001' space '' '总金额' '19' 'X'.
def_add 'SBI' 'SBI' 'ZSD_D3_001' space '' 'SBI' '12' 'X'.
def_add 'BUDAT' 'BUDAT' 'ZSD_D3_001' 'X' '' '消耗日期' '10' 'X'.
def_add 'BLDAT' 'BLDAT' 'ZSD_D3_001' 'X' '' '输入日期' '10' 'X'.
def_add 'ERNAM' '' '' 'X' '' '记录创建者' '12' ''.
def_add 'AENAM' '' '' 'X' '' '最后一次修改者' '12' ''.
def_add 'AEDAT' '' '' 'X' '' '最近修改日期' '8' ''.
def_add 'REMARK' '' '' space '' '备注' '30' 'X'.
def_add 'DFLAG' '' '' space '' '删除标记' '4' ''.
PERFORM sub_change_disp.
ENDFORM. " SUB_CHANGE
*&---------------------------------------------------------------------*
*& Form SUB_CHANGE_DISP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_change_disp.
DATA ls_exclude TYPE ui_func.
DATA: gs_variant TYPE disvariant. "for parameter IS_VARIANT
g_flag = 'X'.
CLEAR toolbar_excluding.
PERFORM excluding_build TABLES toolbar_excluding.
* perform get_add_data.
gs_variant-report = sy-repid.
ls_layout-sel_mode = 'A'.
* ls_layout-cwidth_opt = 'X'.
CALL METHOD go_alv->set_table_for_first_display
EXPORTING
* i_structure_name = 'ZSD_D3_001'
is_layout = ls_layout
is_variant = gs_variant
i_save = 'A'
i_default = 'X'
it_toolbar_excluding = toolbar_excluding
CHANGING it_outtab = it_data[]
it_fieldcatalog = it_fieldcat[].
* SET HANDLER OF EVENT
IF go_alv_event_receiver IS INITIAL.
CREATE OBJECT go_alv_event_receiver.
ENDIF.
SET HANDLER go_alv_event_receiver->handle_user_command
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_toolbar
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_double_click
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_data_changed
FOR go_alv.
SET HANDLER go_alv_event_receiver->handle_onf4
FOR go_alv.
CALL METHOD go_alv->set_toolbar_interactive.
CALL METHOD go_alv->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
CALL METHOD cl_gui_control=>set_focus "设置焦点在grid 上
EXPORTING
control = go_alv .
ENDFORM. " SUB_CHANGE_DISP
*&---------------------------------------------------------------------*
*& Form SUB_NEW
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_new.
REFRESH it_new.
CLEAR it_new.
DO 25 TIMES.
APPEND it_new.
ENDDO.
CALL SCREEN 200.
ENDFORM. " SUB_NEW
*&---------------------------------------------------------------------*
*& Form SUB_NEW_DISP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_new_disp.
DATA ls_exclude TYPE ui_func.
DATA: gs_variant TYPE disvariant. "for parameter IS_VARIANT
g_flag = ''.
REFRESH toolbar_excluding.
PERFORM excluding_build TABLES toolbar_excluding.
gs_variant-report = sy-repid.
ls_layout-sel_mode = 'A'.
* ls_layout-cwidth_opt = 'X'.
CALL METHOD go_new->set_table_for_first_display
EXPORTING
* i_structure_name = 'ZSD_D3_001'
is_layout = ls_layout
is_variant = gs_variant
i_save = 'A'
i_default = 'X'
it_toolbar_excluding = toolbar_excluding
CHANGING it_outtab = it_new[]
it_fieldcatalog = it_fieldcat_new[].
* SET HANDLER OF EVENT
IF go_alv_event_new IS INITIAL.
CREATE OBJECT go_alv_event_new.
ENDIF.
* set f4 help
CALL METHOD go_new->register_f4_for_fields
EXPORTING
it_f4 = gt_f4.
* SET HANDLER OF EVENT
IF go_alv_event_new IS INITIAL.
CREATE OBJECT go_alv_event_new.
ENDIF.
SET HANDLER go_alv_event_new->handle_user_command
FOR go_new.
SET HANDLER go_alv_event_new->handle_toolbar
FOR go_new.
SET HANDLER go_alv_event_new->handle_double_click
FOR go_new.
SET HANDLER go_alv_event_new->handle_data_changed
FOR go_new.
SET HANDLER go_alv_event_new->handle_onf4
FOR go_new.
CALL METHOD go_new->set_toolbar_interactive.
CALL METHOD go_new->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* call method go_alv->set_ready_for_input "处于非编辑状态
* exporting
* i_ready_for_input = 1.
CALL METHOD cl_gui_control=>set_focus "设置焦点在grid 上
EXPORTING
control = go_new.
ENDFORM. " SUB_NEW_DISP
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0200 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
CALL SCREEN 100.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
*&---------------------------------------------------------------------*
*& Form SUB_COPY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_copy TABLES lt_rows STRUCTURE lvc_s_row.
DATA:wa LIKE it_data.
CHECK NOT lt_rows[] IS INITIAL.
REFRESH it_new.
LOOP AT lt_rows.
CHECK lt_rows-rowtype IS INITIAL.
READ TABLE it_data INTO wa INDEX lt_rows-index.
CLEAR wa-posnr.
APPEND wa TO it_new.
CLEAR wa.
ENDLOOP.
CALL SCREEN 200.
ENDFORM. " SUB_COPY
*&---------------------------------------------------------------------*
*& Form SUB_DISP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_disp.
REFRESH it_fieldcat.
DATA: tab(10) TYPE c,
ld_count TYPE i.
DATA : col_pos TYPE i VALUE 0.
DATA:ls_fcat LIKE LINE OF it_fieldcat.
CLEAR ld_count.
DEFINE def_add.
clear ls_fcat.
add 1 to ld_count.
ls_fcat-fieldname = &1.
ls_fcat-ref_field = &2.
ls_fcat-ref_table = &3.
ls_fcat-f4availabl = &4.
ls_fcat-just = &5.
ls_fcat-scrtext_m = &6.
ls_fcat-outputlen = &7.
* ls_fcat-do_sum = &8.
* ls_fcat-datatype = &9.
ls_fcat-edit = &8.
ls_fcat-col_pos = ld_count.
append ls_fcat to it_fieldcat.
END-OF-DEFINITION.
def_add 'MATNR' 'MATNR' 'MARA' 'X' '' '物料号' '8' ''.
def_add 'MAKTX' 'MAKTX' 'MAKT' space '' '物料描述' '25' ''.
def_add 'VKORG' 'VKORG_AUFT' 'VBRP' 'X' '' '销售组织' '4' ''.
def_add 'VTWEG' 'VTWEG' 'VBRK' 'X' '' '分销渠道' '8' ''.
def_add 'KUNNR' 'KUNNR' 'ZSD_D3_001' 'X' '' '客户代码' '10' ''.
def_add 'NAME1' 'NAME1' 'KNA1' space '' '客户名称' '25' ''.
def_add 'KDMAT' 'KDMAT' 'VBAP' 'X' '' '客户料号' '25' ''.
def_add 'WAERS' 'WAERS' 'MSEG' space '' '货币' '5' ''.
def_add 'MENGE' 'MENGE' 'ZSD_D3_001' space '' '消耗数量' '13' ''.
def_add 'KBETR' 'KBETR' 'ZSD_D3_001' space '' '单价' '19' ''.
def_add 'DMBTR' 'DMBTR' 'ZSD_D3_001' space '' '总金额' '19' ''.
def_add 'SBI' 'SBI' 'ZSD_D3_001' space '' 'SBI' '12' ''.
def_add 'BUDAT' 'BUDAT' 'ZSD_D3_001' 'X' '' '消耗日期' '10' ''.
def_add 'BLDAT' 'BLDAT' 'ZSD_D3_001' 'X' '' '输入日期' '10' ''.
def_add 'REMARK' '' '' space '' '备注' '30' ''.
def_add 'DFLAG' '' '' space '' '删除标记' '4' ''.
PERFORM sub_change_disp.
ENDFORM. " SUB_DISP
*&---------------------------------------------------------------------*
*& Module PAI_0200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE pai_0200 INPUT.
IF NOT go_new IS INITIAL.
* call method go_new->check_changed_data.
ENDIF.
CASE sy-ucomm.
WHEN 'SSVA'.
* PERFORM CHECK_DATA TABLES IT_NEW.
* PERFORM COMMAND_SAVE_NEW.
ENDCASE.
ENDMODULE. " PAI_0200 INPUT
*---------------------------------------------------------------------*
* MODULE STATUS_0100 OUTPUT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS '100'.
IF flag_change = 'X'.
SET TITLEBAR 'DISP' WITH text-t00.
ELSE.
SET TITLEBAR 'CHAN' WITH text-t01.
ENDIF.
IF go_alv IS INITIAL.
PERFORM creat_alv_control
USING 'ALV_GRID'.
* PERFORM BUILD_ALV_FIELD.
PERFORM set_display.
ELSE.
PERFORM set_display.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*---------------------------------------------------------------------*
* FORM CREAT_ALV_CONTROL_200 *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> CTNAME *
*---------------------------------------------------------------------*
FORM creat_alv_control_200 USING ctname TYPE char20.
DATA: lo_container TYPE REF TO cl_gui_custom_container.
DATA: lo_succs TYPE REF TO cl_gui_container,
lo_result TYPE REF TO cl_gui_container.
IF go_new IS INITIAL.
CREATE OBJECT lo_container
EXPORTING container_name = ctname.
CLASS cl_gui_alv_grid DEFINITION LOAD.
CREATE OBJECT go_new
EXPORTING
i_parent = lo_container
i_appl_events = space.
ENDIF.
ENDFORM. " CREAT_ALV_CONTROL_200
*&---------------------------------------------------------------------*
*& Form BUILD_ALV_new_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_alv_new_field.
DATA: tab(10) TYPE c,
ld_count TYPE i.
DATA : col_pos TYPE i VALUE 0.
DATA:ls_fcat LIKE LINE OF it_fieldcat.
CLEAR ld_count.
REFRESH:it_fcat.
DEFINE def_add.
clear ls_fcat.
add 1 to ld_count.
ls_fcat-fieldname = &1.
ls_fcat-ref_field = &2.
ls_fcat-ref_table = &3.
ls_fcat-f4availabl = &4.
ls_fcat-just = &5.
ls_fcat-scrtext_m = &6.
ls_fcat-scrtext_l = &6.
ls_fcat-scrtext_s = &6.
ls_fcat-outputlen = &7.
* ls_fcat-do_sum = &8.
* ls_fcat-datatype = &9.
ls_fcat-edit = &8.
ls_fcat-col_pos = ld_count.
append ls_fcat to it_fieldcat_new.
END-OF-DEFINITION.
REFRESH it_fieldcat_new.
def_add 'MATNR' 'MATNR' 'MARA' 'X' '' '物料号' '8' 'X'.
def_add 'MAKTX' 'MAKTX' 'MAKT' space '' '物料描述' '25' ''.
def_add 'VKORG' 'VKORG_AUFT' 'VBRP' 'X' '' '销售组织' '8' 'X'.
def_add 'VTWEG' 'VTWEG' 'VBRK' 'X' '' '分销渠道' '8' 'X'.
def_add 'KUNNR' 'KUNNR' 'ZSD_D3_001' 'X' '' '客户代码' '10' 'X'.
def_add 'NAME1' 'NAME1' 'KNA1' space '' '客户名称' '25' ''.
def_add 'KDMAT' 'KDMAT' 'VBAP' 'X' '' '客户料号' '25' ''.
def_add 'WAERS' 'WAERS' 'MSEG' 'X' '' '货币' '5' 'X'.
def_add 'MENGE' 'MENGE' 'ZSD_D3_001' space '' '消耗数量' '13' 'X'.
def_add 'KBETR' 'KBETR' 'ZSD_D3_001' space '' '单价' '19' 'X'.
def_add 'DMBTR' 'DMBTR' 'ZSD_D3_001' space '' '总金额' '19' 'X'.
def_add 'SBI' 'SBI' 'ZSD_D3_001' space '' 'SBI' '12' 'X'.
def_add 'BUDAT' 'BUDAT' 'ZSD_D3_001' 'X' '' '消耗日期' '10' 'X'.
def_add 'BLDAT' 'BLDAT' 'ZSD_D3_001' 'X' '' '输入日期' '10' 'X'.
def_add 'ERNAM' '' '' 'X' '' '记录创建者' '12' ''.
def_add 'AENAM' '' '' 'X' '' '最后一次修改者' '12' ''.
def_add 'AEDAT' '' '' 'X' '' '最近修改日期' '8' ''.
def_add 'REMARK' '' '' space '' '备注' '30' 'X'.
ENDFORM. " BUILD_ALV_new_FIELD
*&---------------------------------------------------------------------*
*& Module EXIT_200 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit_200 INPUT.
DATA:answer.
IF cflag = 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP'
EXPORTING
defaultoption = 'N'
textline1 = text-m08
* TEXTLINE2 = GV_TEXT2
titel = text-m00
start_column = 25
start_row = 6
cancel_display = 'X'
IMPORTING
answer = answer.
CHECK answer = 'J'.
ENDIF.
DELETE it_new WHERE posnr IS initial.
APPEND LINES OF it_new TO it_data.
DELETE it_data WHERE kunnr IS initial.
LEAVE TO SCREEN 0.
* call screen 100.
ENDMODULE. " EXIT_200 INPUT
*&---------------------------------------------------------------------*
*& Form count_Table_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_CNT text
*----------------------------------------------------------------------*
FORM count_table_data CHANGING p_cnt.
SELECT COUNT( * ) INTO p_cnt
FROM zsd_d3_001.
ENDFORM. " count_Table_data
*&---------------------------------------------------------------------*
*& Form get_add_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_add_data.
APPEND LINES OF it_new TO it_data.
ENDFORM. " get_add_data
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE TO SCREEN 0.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form SUB_PROCESSCHG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_ER_DATA_CHANGED text
*----------------------------------------------------------------------*
FORM sub_processchg
USING er_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA:lin TYPE i,
p_modi TYPE lvc_s_modi,
lt_modi TYPE lvc_t_modi,
p_calday LIKE sy-datum,
* MOD_ROWS TYPE REF_TO_DATA,
inserted_rows TYPE lvc_t_moce,
deleted_rows TYPE lvc_t_moce,
deleted_rows1 TYPE lvc_s_moce,
mt_protocol TYPE lvc_t_msg1,
lv_answer(1).
DATA:wa LIKE it_data.
DATA:str1(50),
str2(50),
str3(50).
lt_modi = er_data_changed->mt_mod_cells.
inserted_rows = er_data_changed->mt_inserted_rows. "COPY ROWS
deleted_rows = er_data_changed->mt_deleted_rows. "DELETE ROWS
mt_protocol = er_data_changed->mt_protocol. "PROTOCOL MSG
DESCRIBE TABLE mt_protocol LINES lin. "PROTOCOL MESSAGE
IF NOT lt_modi[] IS INITIAL OR
NOT inserted_rows[] IS INITIAL OR
NOT deleted_rows[] IS INITIAL OR
NOT mt_protocol[] IS INITIAL.
cflag = 'X'.
ENDIF.
LOOP AT lt_modi INTO p_modi.
CHECK p_modi-value <> ''.
IF p_creat = 'X'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'ERNAM'
IMPORTING
e_value = wa-ernam.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'ERNAM'
i_value = sy-uname.
ELSE.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'AENAM'
i_value = sy-uname.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'AENAM'
IMPORTING
e_value = wa-aenam.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'AEDAT'
i_value = sy-datum.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'AEDAT'
IMPORTING
e_value = wa-aedat.
ENDIF.
IF p_modi-fieldname = 'MATNR'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'MATNR'
IMPORTING
e_value = wa-matnr.
PERFORM sub_conversion_exit_alpha_inpu CHANGING wa-matnr.
SELECT SINGLE maktx INTO wa-maktx
FROM makt
WHERE matnr = wa-matnr.
IF sy-subrc = 0.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'MAKTX'
i_value = wa-maktx.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'BLDAT'
IMPORTING
e_value = wa-bldat.
IF wa-bldat IS INITIAL.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'BLDAT'
i_value = sy-datum.
ENDIF.
ELSE.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = p_modi-value
i_msgv2 = '不存在'
* I_MSGV3 =
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
ENDIF.
ELSEIF p_modi-fieldname = 'VKORG'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'VKORG'
IMPORTING
e_value = wa-vkorg.
SELECT SINGLE vkorg INTO wa-vkorg
FROM tvko
WHERE vkorg = wa-vkorg.
IF sy-subrc <> 0.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = p_modi-value
i_msgv2 = '不存在'
* I_MSGV3 =
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
*OB PHOEBUS
ELSE.
AUTHORITY-CHECK OBJECT 'V_KNA1_VKO'
ID 'VKORG' FIELD wa-vkorg.
IF sy-subrc <> 0.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = '您无权维护销售组织'
i_msgv2 = p_modi-value
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
ENDIF.
*OE PHOEBUS
ENDIF.
ELSEIF p_modi-fieldname = 'VTWEG'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'VTWEG'
IMPORTING
e_value = wa-vtweg.
SELECT SINGLE vtweg INTO wa-vtweg
FROM tvtw
WHERE vtweg = wa-vtweg.
IF sy-subrc <> 0.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = p_modi-value
i_msgv2 = '不存在'
* I_MSGV3 =
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
ENDIF.
ELSEIF p_modi-fieldname = 'KUNNR'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'KUNNR'
IMPORTING
e_value = wa-kunnr.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'MATNR'
IMPORTING
e_value = wa-matnr.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'VKORG'
IMPORTING
e_value = wa-vkorg.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'VTWEG'
IMPORTING
e_value = wa-vtweg.
PERFORM sub_conversion_exit_alpha_inpu CHANGING wa-kunnr.
* perform sub_conversion_exit_alpha_inpu changing l_matnr.
SELECT SINGLE name1 INTO wa-name1
FROM kna1
WHERE kunnr = wa-kunnr.
IF sy-subrc <> 0.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = p_modi-value
i_msgv2 = '不存在'
* I_MSGV3 =
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
ENDIF.
SELECT SINGLE kdmat INTO wa-kdmat
FROM knmt
WHERE kunnr = wa-kunnr
AND vkorg = wa-vkorg
AND vtweg = wa-vtweg
AND matnr = wa-matnr.
IF sy-subrc = 0.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'NAME1'
i_value = wa-name1.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'KDMAT'
i_value = wa-kdmat.
ELSE.
CALL METHOD er_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = '不能找到对应客户料号,'
i_msgv2 = '请检查前面的输入数据!'
* I_MSGV3 =
i_fieldname = p_modi-fieldname
i_row_id = p_modi-row_id.
ENDIF.
ELSEIF p_modi-fieldname = 'KBETR'.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'KBETR'
IMPORTING
e_value = wa-kbetr.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'MENGE'
IMPORTING
e_value = wa-menge.
wa-dmbtr = wa-kbetr * wa-menge.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = p_modi-row_id
i_fieldname = 'DMBTR'
i_value = wa-dmbtr.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form sub_conversion_exit_alpha_inpu
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_L_MATNR text
* <--P_L_MATNR text
*----------------------------------------------------------------------*
FORM sub_conversion_exit_alpha_inpu CHANGING p_matnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = p_matnr
IMPORTING
output = p_matnr.
ENDFORM. " sub_conversion_exit_alpha_inpu
*&---------------------------------------------------------------------*
*& Form sub_check_input
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_check_input.
IF p_query = 'X'.
IF s_bldat[] IS INITIAL.
MESSAGE e888(sabapdocu) WITH text-m06.
ENDIF.
IF s_kunnr IS INITIAL.
MESSAGE e888(sabapdocu) WITH text-m07.
ENDIF.
IF p_vkorg IS INITIAL.
MESSAGE e888(sabapdocu) WITH text-m09.
ENDIF.
ENDIF.
ENDFORM. " sub_check_input
*&---------------------------------------------------------------------*
*& Form check_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_IT_DATA text
*----------------------------------------------------------------------*
FORM check_data TABLES itab LIKE it_data[]
CHANGING p_flag.
DATA:lin TYPE i,
p_modi TYPE lvc_s_modi,
lt_modi TYPE lvc_t_modi,
p_calday LIKE sy-datum,
* MOD_ROWS TYPE REF_TO_DATA,
inserted_rows TYPE lvc_t_moce,
deleted_rows TYPE lvc_t_moce,
deleted_rows1 TYPE lvc_s_moce,
mt_protocol TYPE lvc_t_msg1,
lv_answer(1).
DATA:wa LIKE it_data.
DATA:str1(50),
str2(50),
str3(50).
DELETE itab WHERE kunnr IS initial.
LOOP AT itab INTO wa.
IF wa-kunnr IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '客户必输!'.
EXIT.
ENDIF.
IF wa-matnr IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '物料必输!'.
EXIT.
ENDIF.
IF wa-kdmat IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '客户物料必输!'.
EXIT.
ENDIF.
IF wa-vkorg IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '销售组织必输!'.
EXIT.
*OB PHOEBUS
ELSE.
AUTHORITY-CHECK OBJECT 'V_KNA1_VKO'
ID 'VKORG' FIELD wa-vkorg.
IF sy-subrc <> 0.
MESSAGE i888(sabapdocu) WITH '对不起,您无权维护该销售组织!'.
EXIT.
ENDIF.
ENDIF.
*OE PHOEBUS
IF wa-vtweg IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '分销渠道必输!'.
EXIT.
ENDIF.
IF wa-menge IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '数量必输!'.
EXIT.
ENDIF.
IF wa-dmbtr IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '总金额必输!'.
EXIT.
ENDIF.
IF wa-kbetr IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '单价必输!'.
EXIT.
ENDIF.
IF wa-waers IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '币种必输!'.
EXIT.
ENDIF.
IF wa-bldat IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '输入日期必输!'.
EXIT.
ENDIF.
IF wa-budat IS INITIAL.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '消耗日期必输!'.
EXIT.
ENDIF.
PERFORM sub_conversion_exit_alpha_inpu CHANGING wa-matnr.
SELECT SINGLE maktx INTO wa-maktx
FROM makt
WHERE matnr = wa-matnr.
IF sy-subrc <> 0.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '物料' wa-matnr '不存在'.
EXIT.
ENDIF.
PERFORM sub_conversion_exit_alpha_inpu CHANGING wa-kunnr.
SELECT SINGLE kunnr INTO wa-kunnr
FROM knmt
WHERE kunnr = wa-kunnr
AND vkorg = wa-vkorg
AND vtweg = wa-vtweg
AND matnr = wa-matnr
AND kdmat = wa-kdmat.
IF sy-subrc <> 0.
p_flag = 'X'.
MESSAGE i888(sabapdocu) WITH '客户料号' wa-kdmat
'不存在,请检查相关数据'.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " check_data
*&---------------------------------------------------------------------*
*& Form CHECK_INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM check_input USING ir_data_changed TYPE REF TO
cl_alv_changed_data_protocol.
LOOP AT it_data.
CALL METHOD ir_data_changed->add_protocol_entry
EXPORTING
i_msgid = '00'
i_msgno = '001'
i_msgty = 'E'
i_msgv1 = it_data-matnr
i_msgv2 = '不存在'
* I_MSGV3 =
i_fieldname = 'MATNR'
i_row_id = '1'.
ENDLOOP.
ENDFORM. " CHECK_INPUT
*&---------------------------------------------------------------------*
*& Form lock_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_FLAG text
*----------------------------------------------------------------------*
FORM lock_table CHANGING p_flag.
DATA:l_flag.
DATA:l_msg(50).
LOOP AT it_data.
CHECK NOT it_data-posnr IS INITIAL.
CALL FUNCTION 'ENQUEUE_EZSD_D3_001'
EXPORTING
mode_zsd_d3_001 = 'E'
mandt = sy-mandt
posnr = it_data-posnr
* X_POSNR = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' '
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3
.
CASE sy-subrc.
WHEN 0.
WHEN 1.
l_msg = sy-msgv1.
CONCATENATE '数据被' l_msg '锁住' INTO l_msg.
l_flag = 'X'.
WHEN OTHERS.
l_msg = 'Internal error from enqueue server'.
l_flag = 'X'.
ENDCASE.
IF l_flag = 'X'.
p_flag = l_flag.
MESSAGE i888(sabapdocu) WITH l_msg.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " lock_table
*&---------------------------------------------------------------------*
*& Form unlock_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM unlock_table.
LOOP AT it_data.
CALL FUNCTION 'DEQUEUE_EZSD_D3_001'
EXPORTING
mode_zsd_d3_001 = 'E'
mandt = sy-mandt
posnr = it_data-posnr
* X_POSNR = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' '
.
ENDLOOP.
ENDFORM. " unlock_table
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23495244/viewspace-694286/ ,如需转载,请注明出处,否则将追究法律责任。