* import:action s = display u = change t = transport
* corr_number 传送号(上面的action是t)
* show_selection_popup 是否弹出选择画面
* view_name 视图名
* no_warning_for_clientindep 跨集团是否现实警告
* variant_for_selection 变式名
* check_ddic_mainflag 察看是否为可维护对象
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTINGACTION = 'U'
* CORR_NUMBER = ' '
* GENERATE_MAINT_TOOL_IF_MISSING = ' '
SHOW_SELECTION_POPUP = ''
VIEW_NAME = 'ZTSD0020'
* NO_WARNING_FOR_CLIENTINDEP = ' '
* RFC_DESTINATION_FOR_UPGRADE = ' '
* CLIENT_FOR_UPGRADE = ' '
* VARIANT_FOR_SELECTION = ' '
* COMPLEX_SELCONDS_USED = ' '
* CHECK_DDIC_MAINFLAG = ' '
* SUPPRESS_WA_POPUP = ' '
* TABLES
* DBA_SELLIST =
* EXCL_CUA_FUNCT =
EXCEPTIONS
CLIENT_REFERENCE = 1
FOREIGN_LOCK = 2
INVALID_ACTION = 3
NO_CLIENTINDEPENDENT_AUTH = 4
NO_DATABASE_FUNCTION = 5
NO_EDITOR_FUNCTION = 6
NO_SHOW_AUTH = 7
NO_TVDIR_ENTRY = 8
NO_UPD_AUTH = 9
ONLY_SHOW_ALLOWED = 10
SYSTEM_FAILURE = 11
UNKNOWN_FIELD_IN_DBA_SELLIST = 12
VIEW_NOT_FOUND = 13
MAINTENANCE_PROHIBITED = 14
OTHERS = 15
.
IF SY -SUBRC <> 0 .
MESSAGE ID SY -MSGID TYPE SY -MSGTY NUMBER SY -MSGNO
WITH SY -MSGV1 SY -MSGV2 SY -MSGV3 SY -MSGV4 .
ENDIF.
若需要记录LOG并限制部分字段
*&---------------------------------------------------------------------*
*& Report ZRSD0010
*&
*&---------------------------------------------------------------------*
*& 申 请 者:余睿
*& 创 建 者:张晨宇
*& 创建时间:2015.03.11
*& 请 求 号:DEVK900112
*& 程序说明:专款专用管理平台
*&---------------------------------------------------------------------*
*& 修改日志
*& 修改日期 修改者 请求号 描述
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zrsd0040.
DATA gt_ztsd0020_old TYPE STANDARD TABLE OF ztsd0020.
DATA gt_ztsd0020_new TYPE STANDARD TABLE OF ztsd0020.
DATA gw_ztsd0020_new TYPE ztsd0020.
DATA gw_ztsd0020_old TYPE ztsd0020.
DATA gt_ztsd0040 TYPE STANDARD TABLE OF ztsd0040.
DATA gw_ztsd0040 TYPE ztsd0040.
SELECT * FROM ztsd0020 INTO TABLE gt_ztsd0020_old.
CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
EXPORTING
action = 'U'
* CORR_NUMBER = ' '
* GENERATE_MAINT_TOOL_IF_MISSING = ' '
show_selection_popup = ''
view_name = 'ZTSD0020'
* NO_WARNING_FOR_CLIENTINDEP = ' '
* RFC_DESTINATION_FOR_UPGRADE = ' '
* CLIENT_FOR_UPGRADE = ' '
* VARIANT_FOR_SELECTION = ' '
* COMPLEX_SELCONDS_USED = ' '
* CHECK_DDIC_MAINFLAG = ' '
* SUPPRESS_WA_POPUP = ' '
* TABLES
* DBA_SELLIST =
* EXCL_CUA_FUNCT =
EXCEPTIONS
client_reference = 1
foreign_lock = 2
invalid_action = 3
no_clientindependent_auth = 4
no_database_function = 5
no_editor_function = 6
no_show_auth = 7
no_tvdir_entry = 8
no_upd_auth = 9
only_show_allowed = 10
system_failure = 11
unknown_field_in_dba_sellist = 12
view_not_found = 13
maintenance_prohibited = 14
OTHERS = 15.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
gw_ztsd0040-zuser = sy-uname.
gw_ztsd0040-zdate = sy-datum.
gw_ztsd0040-ztime = sy-uzeit.
DEFINE compare.
IF &3 NE &2.
CLEAR GW_ZTSD0040-FIELD.
CLEAR GW_ZTSD0040-ORGRI.
CLEAR GW_ZTSD0040-UPDAT.
GW_ZTSD0040-FIELD = &1.
GW_ZTSD0040-ORGRI = &2.
GW_ZTSD0040-UPDAT = &3.
APPEND GW_ZTSD0040 TO GT_ZTSD0040.
ENDIF.
END-OF-DEFINITION.
SELECT * FROM ztsd0020 INTO TABLE gt_ztsd0020_new.
"BREAK-POINT.
LOOP AT gt_ztsd0020_new INTO gw_ztsd0020_new.
CLEAR gw_ztsd0020_old.
READ TABLE gt_ztsd0020_old INTO gw_ztsd0020_old
WITH KEY numbe = gw_ztsd0020_new-numbe vkorg = gw_ztsd0020_new-vkorg
vtweg = gw_ztsd0020_new-vtweg spart = gw_ztsd0020_new-spart bzirk = gw_ztsd0020_new-bzirk.
IF sy-subrc = 0.
gw_ztsd0040-ztype = '修改'.
DELETE TABLE gt_ztsd0020_old FROM gw_ztsd0020_old.
ELSE.
gw_ztsd0040-ztype = '新增'.
ENDIF.
compare '专款项目号 ' gw_ztsd0020_old-numbe gw_ztsd0020_new-numbe .
compare '专款项目描述 ' gw_ztsd0020_old-vkorg gw_ztsd0020_new-vkorg .
compare '销售组织 ' gw_ztsd0020_old-vtweg gw_ztsd0020_new-vtweg .
compare '销售组织描述 ' gw_ztsd0020_old-spart gw_ztsd0020_new-spart .
compare '分销渠道 ' gw_ztsd0020_old-bzirk gw_ztsd0020_new-bzirk .
compare '产品组 ' gw_ztsd0020_old-vtext gw_ztsd0020_new-vtext .
compare '省区代码 ' gw_ztsd0020_old-bztxt gw_ztsd0020_new-bztxt .
compare '省区描述 ' gw_ztsd0020_old-dscri gw_ztsd0020_new-dscri .
compare '打款有效起始日期 ' gw_ztsd0020_old-dkfrd gw_ztsd0020_new-dkfrd .
compare '打款有效结束日期 ' gw_ztsd0020_old-dktod gw_ztsd0020_new-dktod .
compare '活动起始日期 ' gw_ztsd0020_old-syfrd gw_ztsd0020_new-syfrd .
compare '活动结束日期 ' gw_ztsd0020_old-sytod gw_ztsd0020_new-sytod .
ENDLOOP.
CLEAR gw_ztsd0020_new.
LOOP AT gt_ztsd0020_old INTO gw_ztsd0020_old.
gw_ztsd0040-ztype = '删除'.
compare '专款项目号 ' gw_ztsd0020_old-numbe gw_ztsd0020_new-numbe .
compare '专款项目描述 ' gw_ztsd0020_old-vkorg gw_ztsd0020_new-vkorg .
compare '销售组织 ' gw_ztsd0020_old-vtweg gw_ztsd0020_new-vtweg .
compare '销售组织描述 ' gw_ztsd0020_old-spart gw_ztsd0020_new-spart .
compare '分销渠道 ' gw_ztsd0020_old-bzirk gw_ztsd0020_new-bzirk .
compare '产品组 ' gw_ztsd0020_old-vtext gw_ztsd0020_new-vtext .
compare '省区代码 ' gw_ztsd0020_old-bztxt gw_ztsd0020_new-bztxt .
compare '省区描述 ' gw_ztsd0020_old-dscri gw_ztsd0020_new-dscri .
compare '打款有效起始日期 ' gw_ztsd0020_old-dkfrd gw_ztsd0020_new-dkfrd .
compare '打款有效结束日期 ' gw_ztsd0020_old-dktod gw_ztsd0020_new-dktod .
compare '活动起始日期 ' gw_ztsd0020_old-syfrd gw_ztsd0020_new-syfrd .
compare '活动结束日期 ' gw_ztsd0020_old-sytod gw_ztsd0020_new-sytod .
ENDLOOP.
MODIFY ztsd0040 FROM TABLE gt_ztsd0040.
CLEAR gt_ztsd0040.
屏幕逻辑
PROCESS BEFORE OUTPUT.
MODULE LISTE_INITIALISIEREN.
LOOP AT EXTRACT WITH CONTROL
TCTRL_ZTSD0020 CURSOR NEXTLINE.
MODULE LISTE_SHOW_LISTE.
ENDLOOP.
*
PROCESS AFTER INPUT.
MODULE zpai_exit.
MODULE LISTE_EXIT_COMMAND AT EXIT-COMMAND.
MODULE LISTE_BEFORE_LOOP.
LOOP AT EXTRACT.
MODULE LISTE_INIT_WORKAREA.
MODULE zpai_APPEND.
CHAIN.
FIELD ZTSD0020-NUMBE .
FIELD ZTSD0020-VKORG .
FIELD ZTSD0020-VTWEG .
FIELD ZTSD0020-SPART .
FIELD ZTSD0020-BZIRK .
FIELD ZTSD0020-VTEXT .
FIELD ZTSD0020-BZTXT .
FIELD ZTSD0020-DSCRI .
FIELD ZTSD0020-DKFRD .
FIELD ZTSD0020-DKTOD .
FIELD ZTSD0020-SYFRD .
FIELD ZTSD0020-SYTOD .
MODULE SET_UPDATE_FLAG ON CHAIN-REQUEST.
ENDCHAIN.
FIELD VIM_MARKED MODULE LISTE_MARK_CHECKBOX.
CHAIN.
FIELD ZTSD0020-NUMBE .
FIELD ZTSD0020-VKORG .
FIELD ZTSD0020-VTWEG .
FIELD ZTSD0020-SPART .
FIELD ZTSD0020-BZIRK .
MODULE zpai_check.
MODULE LISTE_UPDATE_LISTE.
ENDCHAIN.
ENDLOOP.
MODULE LISTE_AFTER_LOOP.
模块实现
*----------------------------------------------------------------------*
***INCLUDE LZTSD0020I01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module ZPAI_CHECK INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE zpai_exit INPUT.
IF sy-ucomm = 'ANZG' OR sy-ucomm = 'ENDE'.
sy-ucomm = 'BACK'.
ENDIF.
ENDMODULE.
MODULE zpai_append INPUT.
" BREAK-POINT.
DATA gt_ztsd0020 TYPE STANDARD TABLE OF ztsd0020.
DATA gw_ztsd0020 TYPE ztsd0020.
gw_ztsd0020 = ztsd0020.
APPEND gw_ztsd0020 TO gt_ztsd0020.
ENDMODULE.
MODULE zpai_check INPUT.
"BREAK-POINT.
DATA lw_vbap TYPE vbap.
DATA lv_mes TYPE string.
DATA lw_ztsd0030 TYPE ztsd0030.
DATA lv_lines TYPE i.
gw_ztsd0020 = ztsd0020.
APPEND gw_ztsd0020 TO gt_ztsd0020.
DELETE ADJACENT DUPLICATES FROM gt_ztsd0020 COMPARING ALL FIELDS."判断本行是否修改过
DESCRIBE TABLE gt_ztsd0020 LINES lv_lines.
CLEAR gt_ztsd0020.
"活动号存在性校验
IF ( ( sy-ucomm = 'SAVE' OR sy-ucomm = '' OR sy-ucomm = 'BACK') AND lv_lines = 2 ) OR ( sy-ucomm = 'DELE' AND vim_marked = 'X').
DATA lt_knvv TYPE STANDARD TABLE OF knvv.
DATA lw_knvv TYPE knvv.
DATA lt_ztsd0030 TYPE STANDARD TABLE OF ztsd0030.
DATA s_vkorg TYPE RANGE OF ztsd0020-vkorg WITH HEADER LINE .
DATA s_vtweg TYPE RANGE OF ztsd0020-vtweg WITH HEADER LINE.
DATA s_spart TYPE RANGE OF ztsd0020-spart WITH HEADER LINE.
DATA s_bzirk TYPE RANGE OF ztsd0020-bzirk WITH HEADER LINE.
REFRESH s_vkorg.
REFRESH s_vtweg.
REFRESH s_spart.
REFRESH s_bzirk.
IF ztsd0020-vkorg IS NOT INITIAL.
s_vkorg-sign = 'I'.
s_vkorg-option = 'EQ'.
s_vkorg-low = ztsd0020-vkorg.
APPEND s_vkorg.
ENDIF.
IF ztsd0020-vtweg IS NOT INITIAL.
s_vtweg-sign = 'I'.
s_vtweg-option = 'EQ'.
s_vtweg-low = ztsd0020-vtweg.
APPEND s_vtweg.
ENDIF.
IF ztsd0020-spart IS NOT INITIAL.
s_spart-sign = 'I'.
s_spart-option = 'EQ'.
s_spart-low = ztsd0020-spart.
APPEND s_spart.
ENDIF.
IF ztsd0020-bzirk IS NOT INITIAL.
s_bzirk-sign = 'I'.
s_bzirk-option = 'EQ'.
s_bzirk-low = ztsd0020-bzirk.
APPEND s_bzirk.
ENDIF.
IF s_vkorg IS NOT INITIAL OR s_vtweg IS NOT INITIAL OR s_spart IS NOT INITIAL OR s_bzirk IS NOT INITIAL.
SELECT * FROM knvv INTO CORRESPONDING FIELDS OF TABLE lt_knvv
WHERE vkorg IN s_vkorg
AND vtweg IN s_vtweg
AND spart IN s_spart
AND bzirk IN s_bzirk
.
IF sy-subrc = 0.
SELECT * FROM ztsd0030
INTO CORRESPONDING FIELDS OF TABLE lt_ztsd0030
FOR ALL ENTRIES IN lt_knvv
WHERE numbe = ztsd0020-numbe
AND kunnr = lt_knvv-kunnr
.
IF sy-subrc = 0.
READ TABLE lt_ztsd0030 INTO lw_ztsd0030 INDEX 1.
CLEAR lv_mes.
CONCATENATE '活动号' lw_ztsd0030-numbe '已经被客户' lw_ztsd0030-kunnr '使用,不允许更改' INTO lv_mes .
MESSAGE lv_mes TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
ELSE.
IF sy-ucomm = 'DELE' AND vim_marked = 'X'.
ELSE.
MESSAGE '该区域下无任何客户' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
ENDIF.
ELSE.
SELECT SINGLE * FROM ztsd0030
INTO lw_ztsd0030
WHERE numbe = ztsd0020-numbe
.
IF sy-subrc = 0.
READ TABLE lt_ztsd0030 INTO lw_ztsd0030 INDEX 1.
CLEAR lv_mes.
CONCATENATE '活动号' lw_ztsd0030-numbe '已经被' lw_ztsd0030-kunnr '使用,不允许更改' INTO lv_mes .
MESSAGE lv_mes TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
ENDIF.
ENDIF.
"带出相关描述
DATA lw_t171t TYPE t171t.
IF ztsd0020-bzirk IS NOT INITIAL.
SELECT SINGLE * FROM t171t INTO lw_t171t WHERE bzirk = ztsd0020-bzirk.
IF sy-subrc = 0.
ztsd0020-bztxt = lw_t171t-bztxt .
ELSE.
CLEAR lv_mes.
CONCATENATE '销售地区' ztsd0020-bzirk '不存在,请检查' INTO lv_mes .
MESSAGE lv_mes TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
ENDIF.
DATA lw_tvkot TYPE tvkot.
IF ztsd0020-vkorg IS NOT INITIAL.
SELECT SINGLE * FROM tvkot INTO lw_tvkot WHERE vkorg = ztsd0020-vkorg.
IF sy-subrc = 0.
ztsd0020-vtext = lw_tvkot-vtext .
ELSE.
CLEAR lv_mes.
CONCATENATE '销售组织' ztsd0020-vkorg '不存在,请检查' INTO lv_mes .
MESSAGE lv_mes TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
ENDIF.
IF ztsd0020-dktod < ztsd0020-dkfrd.
CLEAR lv_mes.
MESSAGE '打款有效结束日期不能早于打款有效起始日期' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
IF ztsd0020-sytod < ztsd0020-syfrd.
CLEAR lv_mes.
MESSAGE '活动结束日期不能早于活动起始日期' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN sy-dynnr.
ENDIF.
"BREAK-POINT.
ENDMODULE. " ZPAI_CHECK INPUT