使用VIEW_MAINTENANCE_CALL创建表维护程序

*            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'

   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.



若需要记录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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值