ALV 单元格可编辑,跟新数据库,自定义工具栏
REPORT ZBMMR_001.
TYPE-POOLS:slis.
TABLES:mara,marc,makt,t001w,ztmm002,ztmm021,zbtmm001.
TYPES:BEGIN OF ty_mater,
werks TYPE marc-werks, "工厂代码
name1 TYPE t001w-name1, "工厂
matnr type marc-matnr, "物料号
mtart TYPE mara-mtart, "物料类型
matkl TYPE mara-matkl, "物料组
bismt TYPE mara-bismt, "旧物料号
meins TYPE mara-meins, "单位
maktx TYPE makt-maktx, "物料描述
maktx1 TYPE ztmm021-maktx2, "附加物料描述
pstat TYPE marc-pstat, "维护状态
lvorm TYPE marc-lvorm, "删除状态
zmaker TYPE ztmm002-zmaker, "制造商
zdocu TYPE zbtmm001-zdocu, "承认书编号
zacti TYPE zbtmm001-zacti, "承认时间
END OF ty_mater.
data:t_marc TYPE STANDARD TABLE OF marc WITH HEADER LINE,
w_marc TYPE marc,
t_mara TYPE STANDARD TABLE OF MARA WITH HEADER LINE,
w_mara TYPE mara,
t_t001w TYPE STANDARD TABLE OF t001w WITH HEADER LINE,
w_t001w TYPE t001w,
t_makt TYPE STANDARD TABLE OF makt WITH HEADER LINE,
w_makt TYPE makt,
t_makt1 TYPE STANDARD TABLE OF makt WITH HEADER LINE,
w_makt1 TYPE makt,
t_ztmm021 TYPE STANDARD TABLE OF ztmm021 WITH HEADER LINE,
w_ztmm021 TYPE ztmm021,
t_zbtmm001 TYPE STANDARD TABLE OF zbtmm001,
w_zbtmm001 TYPE zbtmm001,
t_ztmm002 TYPE STANDARD TABLE OF ztmm002,
w_ztmm002 TYPE ztmm002,
t_mater TYPE STANDARD TABLE OF ty_mater,
w_mater TYPE ty_mater.
DATA:t_fieldcat TYPE slis_t_fieldcat_alv,
w_fieldcat TYPE slis_fieldcat_alv,
w_layout TYPE slis_layout_alv,
t_sort TYPE slis_t_sortinfo_alv,
w_sort TYPE slis_sortinfo_alv.
SELECT-OPTIONS:g_matnr FOR marc-matnr.
SELECT-OPTIONS:g_mtart FOR mara-mtart.
SELECT-OPTIONS:g_matkl FOR mara-matkl.
SELECT-OPTIONS:g_maktx FOR makt-maktx.
SELECT-OPTIONS:g_maktx2 FOR ztmm021-maktx2.
SELECT-OPTIONS:g_maker FOR ztmm002-zmaker.
SELECT-OPTIONS:g_zdocu FOR zbtmm001-zdocu.
SELECT-OPTIONS:g_zacti FOR zbtmm001-zacti.
SELECT-OPTIONS:g_plant FOR marc-werks.
AT SELECTION-SCREEN.
START-OF-SELECTION.
PERFORM prm_get_marc.
PERFORM prm_get_data.
PERFORM prm_fieldcat.
PERFORM prm_layout.
PERFORM prm_sort.
PERFORM prm_callalv.
case sy-ucomm.
when 'DATA_SAVE'.
PERFORM prm_modify_zbtmm001.
when 'BACK'.
call selection-screen 1000.
when 'EXIT'.
leave program.
when others.
endcase.
end-of-SELECTION.
*&---------------------------------------------------------------------*
*& Form PRM_GET_MATER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_GET_MARC .
FREE t_marc.
SELECT * INTO CORRESPONDING FIELDS OF TABLE t_marc
FROM marc
WHERE matnr in g_matnr
AND werks in g_plant.
* FREE t_mara.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE t_mara
* FROM mara
* WHERE matnr in g_matnr
* AND mtart in g_mtart
* AND matkl in g_matkl.
ENDFORM. " PRM_GET_MATER
*&---------------------------------------------------------------------*
*& Form PRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_GET_DATA .
if t_marc[] IS NOT INITIAL.
FREE t_mara.
SELECT * FROM mara
INTO CORRESPONDING FIELDS OF TABLE t_mara
FOR ALL ENTRIES IN t_marc
WHERE matnr = t_marc-matnr
AND mtart IN g_mtart
AND matkl IN g_matkl.
if sy-subrc eq 0.
if g_mtart is not initial or g_matkl is not initial.
clear:w_marc,w_mara.
loop at t_marc into w_marc.
READ TABLE t_mara INTO w_mara WITH KEY matnr = w_marc-matnr.
if sy-subrc ne 0.
DELETE TABLE t_marc FROM w_marc.
endif.
clear:w_marc,w_mara.
ENDLOOP.
endif.
else.
if g_mtart is not initial or g_matkl is not initial.
FREE t_marc.
endif.
endif.
* if t_mara[] IS NOT INITIAL.
*
* FREE t_marc.
* SELECT * FROM marc
* INTO CORRESPONDING FIELDS OF TABLE t_marc
* FOR ALL ENTRIES IN t_mara
* WHERE matnr = t_mara-matnr
* AND werks IN g_plant.
* if sy-subrc eq 0.
* if g_plant is not initial.
* clear:w_marc,w_mara.
* loop at t_mara into w_mara.
* READ TABLE t_marc INTO w_marc WITH KEY matnr = w_mara-matnr.
* if sy-subrc ne 0.
* DELETE TABLE t_mara FROM w_mara.
* endif.
* clear:w_marc,w_mara.
* ENDLOOP.
* endif.
* else.
* if g_plant is not initial.
* FREE t_mara.
* endif.
* endif.
FREE t_t001w.
SELECT * FROM t001w
INTO CORRESPONDING FIELDS OF TABLE t_t001w
FOR ALL ENTRIES IN t_marc
WHERE werks = t_marc-werks.
FREE t_makt.
SELECT * FROM makt
INTO CORRESPONDING FIELDS OF TABLE t_makt
FOR ALL ENTRIES IN t_mara
WHERE matnr = t_mara-matnr
AND maktx in g_maktx.
if sy-subrc eq 0.
if g_maktx is not initial.
clear:w_marc,w_makt.
loop at t_marc into w_marc.
READ TABLE t_makt INTO w_makt WITH KEY matnr = w_marc-matnr.
if sy-subrc ne 0.
DELETE TABLE t_marc FROM w_marc.
endif.
clear:w_marc,w_makt.
ENDLOOP.
endif.
else.
if g_maktx is not initial.
FREE t_marc.
endif.
endif.
FREE t_makt1.
SELECT * FROM makt
INTO CORRESPONDING FIELDS OF TABLE t_makt1
FOR ALL ENTRIES IN t_mara
WHERE matnr = t_mara-matnr
AND maktx in g_maktx2
AND SPRAS = 'Z'.
if sy-subrc eq 0.
if g_maktx2 is not initial.
clear:w_marc,w_makt1.
loop at t_marc into w_marc.
READ TABLE t_makt1 INTO w_makt1 WITH KEY matnr = w_marc-matnr.
if sy-subrc ne 0.
DELETE TABLE t_marc FROM w_marc.
endif.
clear:w_marc,w_makt1.
ENDLOOP.
endif.
else.
if g_maktx2 is not initial.
FREE t_marc.
endif.
endif.
FREE t_ztmm002.
SELECT * FROM ztmm002
INTO CORRESPONDING FIELDS OF TABLE t_ztmm002
FOR ALL ENTRIES IN t_mara
WHERE matnr = t_mara-matnr
AND zmaker IN g_maker.
if sy-subrc eq 0.
if g_maker is not initial.
clear:w_marc,w_ztmm002.
loop at t_marc into w_marc.
READ TABLE t_ztmm002 INTO w_ztmm002 WITH KEY matnr = w_marc-matnr.
if sy-subrc ne 0.
DELETE TABLE t_marc FROM w_marc.
endif.
clear:w_marc,w_ztmm002.
ENDLOOP.
endif.
else.
if g_maker is not initial.
FREE t_marc.
endif.
endif.
FREE t_zbtmm001.
SELECT * FROM zbtmm001
INTO CORRESPONDING FIELDS OF TABLE t_zbtmm001
FOR ALL ENTRIES IN t_marc
WHERE matnr = t_marc-matnr
AND werks = t_marc-werks
AND zdocu in g_zdocu
AND zacti in g_zacti.
if sy-subrc eq 0.
if g_zdocu is not INITIAL or g_zacti is not INITIAL.
clear:w_marc,w_zbtmm001.
loop at t_marc INTO w_marc.
READ TABLE t_zbtmm001 INTO w_zbtmm001 WITH KEY matnr = w_marc-matnr
werks = w_marc-werks.
* if w_zbtmm001-zdocu eq ' ' and w_zbtmm001-zacti eq '00000000'.
if sy-subrc ne 0.
delete TABLE t_marc FROM w_marc.
ENDIF.
* else.
* PERFORM prm_set_zbtmm001.
* MODIFY t_marc FROM w_marc.
* ENDIF.
clear:w_marc,w_zbtmm001.
ENDLOOP.
ENDIF.
else.
if g_zdocu is not INITIAL or g_zacti is not INITIAL.
FREE t_marc.
ENDIF.
ENDIF.
endif.
LOOP at t_marc INTO w_marc.
CLEAR:w_mara,w_t001w,w_makt,w_makt1,w_ztmm002,w_zbtmm001.
READ TABLE t_mara INTO w_mara WITH KEY matnr = w_marc-matnr.
READ TABLE t_t001w INTO w_t001w WITH KEY werks = w_marc-werks.
READ TABLE t_makt INTO w_makt WITH KEY matnr = w_mara-matnr.
READ TABLE t_makt1 INTO w_makt1 WITH KEY matnr = w_mara-matnr spras = 'Z'.
READ TABLE t_ztmm002 INTO w_ztmm002 WITH KEY matnr = w_mara-matnr.
READ TABLE t_zbtmm001 INTO w_zbtmm001 WITH KEY matnr = w_marc-matnr
werks = w_marc-werks.
clear w_mater.
w_mater-werks = w_marc-werks.
w_mater-name1 = w_t001w-name1.
w_mater-matnr = w_mara-matnr.
w_mater-mtart = w_mara-mtart.
w_mater-matkl = w_mara-matkl.
w_mater-bismt = w_mara-bismt.
w_mater-meins = w_mara-meins.
w_mater-maktx = w_makt-maktx.
w_mater-maktx1 = w_makt1-maktx.
w_mater-pstat = w_mara-pstat.
w_mater-lvorm = w_mara-lvorm.
w_mater-zmaker = w_ztmm002-zmaker.
w_mater-zdocu = w_zbtmm001-zdocu.
w_mater-zacti = w_zbtmm001-zacti.
APPEND w_mater to t_mater.
ENDLOOP.
ENDFORM. "PRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form PRM_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_FIELDCAT .
DATA : num(2) TYPE n.
num = 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'WERKS'.
w_fieldcat-seltext_l = text-001.
w_fieldcat-seltext_m = text-001.
w_fieldcat-seltext_s = text-001.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'NAME1'.
w_fieldcat-seltext_l = text-002.
w_fieldcat-seltext_m = text-002.
w_fieldcat-seltext_s = text-002.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MATNR'.
w_fieldcat-seltext_l = text-003.
w_fieldcat-seltext_m = text-003.
w_fieldcat-seltext_s = text-003.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MTART'.
w_fieldcat-seltext_l = text-004.
w_fieldcat-seltext_m = text-004.
w_fieldcat-seltext_s = text-004.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MATKL'.
w_fieldcat-seltext_l = text-005.
w_fieldcat-seltext_m = text-005.
w_fieldcat-seltext_s = text-005.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MEINS'.
w_fieldcat-seltext_l = text-012.
w_fieldcat-seltext_m = text-012.
w_fieldcat-seltext_s = text-012.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MAKTX'.
w_fieldcat-seltext_l = text-007.
w_fieldcat-seltext_m = text-007.
w_fieldcat-seltext_s = text-007.
w_fieldcat-no_zero = 'X'.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'MAKTX1'.
w_fieldcat-seltext_l = text-013.
w_fieldcat-seltext_m = text-013.
w_fieldcat-seltext_s = text-013.
w_fieldcat-no_zero = 'X'.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'PSTAT'.
w_fieldcat-seltext_l = text-008.
w_fieldcat-seltext_m = text-008.
w_fieldcat-seltext_s = text-008.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'LVORM'.
w_fieldcat-seltext_l = text-009.
w_fieldcat-seltext_m = text-009.
w_fieldcat-seltext_s = text-009.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'ZMAKER'.
w_fieldcat-seltext_l = text-014.
w_fieldcat-seltext_m = text-014.
w_fieldcat-seltext_s = text-014.
w_fieldcat-no_zero = 'X'.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'ZDOCU'.
w_fieldcat-ref_fieldname = 'ZDOCU'.
w_fieldcat-ref_tabname = 'ZBTMM001'.
w_fieldcat-ddic_outputlen = 20.
w_fieldcat-seltext_l = text-010.
w_fieldcat-seltext_m = text-010.
w_fieldcat-seltext_s = text-010.
w_fieldcat-edit = 'X'.
APPEND w_fieldcat TO t_fieldcat.
num = num + 1.
CLEAR w_fieldcat.
w_fieldcat-col_pos = num.
w_fieldcat-fieldname = 'ZACTI'.
w_fieldcat-ref_fieldname = 'ZACTI'.
w_fieldcat-ref_tabname = 'ZBTMM001'.
w_fieldcat-seltext_l = text-011.
w_fieldcat-seltext_m = text-011.
w_fieldcat-seltext_s = text-011.
w_fieldcat-edit = 'X'.
APPEND w_fieldcat TO t_fieldcat.
ENDFORM. " PRM_FIELDCAT
*&---------------------------------------------------------------------*
*& Form PRM_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_LAYOUT .
"w_layout-colwidth_optimize = 'X'.
w_layout-zebra = 'X'.
ENDFORM. " PRM_LAYOUT
*&---------------------------------------------------------------------*
*& Form PRM_SORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_SORT .
CLEAR w_sort.
w_sort-up = 'X'.
APPEND w_sort TO t_sort.
ENDFORM. " PRM_SORT
*&---------------------------------------------------------------------*
*& Form PRM_CALLALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_CALLALV .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = sy-repid
i_callback_pf_status_set = 'FORM_ALV_STATUS'
i_callback_user_command = 'FORM_ALV_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
IS_LAYOUT = w_layout
IT_FIELDCAT = t_fieldcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT = t_sort
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = t_mater
EXCEPTIONS
PROGRAM_ERROR = 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. " PRM_CALLALV
*&---------------------------------------------------------------------*
*& Form PRM_MODIFY_ZBTMM001
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PRM_MODIFY_ZBTMM001 .
LOOP AT t_mater INTO w_mater." WHERE zdocu ne ' ' AND zacti ne ' '.
w_zbtmm001-matnr = w_mater-matnr.
w_zbtmm001-werks = w_mater-werks.
w_zbtmm001-zdocu = w_mater-zdocu.
w_zbtmm001-zacti = w_mater-zacti.
if w_mater-werks is NOt INITIAL.
MODIFY zbtmm001 FROM w_zbtmm001.
if sy-subrc eq 0.
message '物料承认书编号维护成功' TYPE 'S'.
endif.
else.
MESSAGE '物料未维护在工厂端,不能编辑物料编码' TYPE 'E'.
ENDIF.
ENDLOOP.
ENDFORM. " PRM_MODIFY_ZBTMM001
*&---------------------------------------------------------------------*
*& Form FORM_ALV_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form form_alv_status using pt_extab type slis_t_extab.
set pf-status 'STANDARD_FULLSCREEN' excluding pt_extab.
endform. " FORM_ALV_STATUS
*&---------------------------------------------------------------------*
*& Form form_alv_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->PU_UCOMM text
* -->PU_SELFIELD text
*----------------------------------------------------------------------*
form form_alv_command using g_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case sy-ucomm.
when '&DATA_SAVE'.
PERFORM prm_modify_zbtmm001.
when 'BACK'.
call selection-screen 1000.
when 'EXIT'.
leave program.
when others.
endcase.
endform. "form_alv_command