• SM30问题记录


    最近在写程序调用SM30时出现部分数据维护时报错,最终发现是调用时限制条件出错的原因。

    程序要求是对工厂和库存地进行限制,当选择界面工厂和库存地不输入时无需做条件限制。

    附程序部分代码:

    FORM frm_call_sm30 .
      DATAlt_vimsellist  LIKE  vimsellist OCCURS WITH HEADER LINE.
      DATAlt_vimexclfun  LIKE  vimexclfun OCCURS WITH HEADER LINE.
      DATA lv_line TYPE i.
      DATA lv_xh TYPE VALUE 0.
      "清空数据
      CLEAR lt_vimsellist[].

      CLEAR lt_vimsellist.
      "赋值数据
    *  IF s_werks-high IS INITIAL.
      CLEAR gt_werks ,gw_werks.
      SELECT werks lgort_1
        FROM ztmm_location
        INTO CORRESPONDING FIELDS OF TABLE gt_werks
        WHERE werks IN  s_werks
          AND lgort_1 IN s_lgort.
      SORT gt_werks BY werks.
    *  DELETE ADJACENT DUPLICATES FROM gt_werks COMPARING werks.

      DESCRIBE TABLE gt_werks LINES lv_line.
      IF gt_werks IS NOT INITIAL.
        CLEAR lv_xh.

        IF s_werks IS NOT INITIAL AND
           gt_werks[] IS NOT INITIAL.
          LOOP AT gt_werks INTO gw_werks.

            lv_xh lv_xh + 1.
            lt_vimsellist-viewfield 'WERKS'.
            lt_vimsellist-operator 'EQ'.
            lt_vimsellist-value gw_werks-werks.
            lt_vimsellist-and_or 'OR'.
            IF lv_xh lv_line.
              lt_vimsellist-and_or 'AND'.
            ENDIF.
            APPEND lt_vimsellist.


          ENDLOOP.
          SORT lt_vimsellist BY viewfield value ASCENDING and_or DESCENDING.
          DELETE ADJACENT DUPLICATES FROM lt_vimsellist COMPARING ALL FIELDS.
        ENDIF.

        IF s_lgort IS NOT INITIAL AND
           gt_werks[] IS NOT INITIAL.
          CLEAR lv_xh.
          LOOP AT gt_werks INTO gw_werks.
            lv_xh lv_xh + 1.
            lt_vimsellist-viewfield 'LGORT_1'.
            lt_vimsellist-operator 'EQ'.
            lt_vimsellist-value gw_werks-lgort_1.
            lt_vimsellist-and_or 'OR'.
            IF lv_xh lv_line.
              lt_vimsellist-and_or 'AND'.
            ENDIF.
            APPEND lt_vimsellist.


          ENDLOOP.
          SORT lt_vimsellist BY   viewfield and_or DESCENDING value ASCENDING.
          DELETE ADJACENT DUPLICATES FROM lt_vimsellist COMPARING ALL FIELDS.
        ENDIF.


        IF p_active IS NOT INITIAL.
          lt_vimsellist-viewfield 'ACTIVE'.
          lt_vimsellist-operator 'EQ'.
          lt_vimsellist-value p_active.
    *      lt_vimsellist-and_or = 'AND'.
          APPEND lt_vimsellist.
        ENDIF.

        lt_vimexclfun-function 'ANZG'."NEWL 新建 ANZG 修改显示切换 KOPE 复制权限
        APPEND lt_vimexclfun .
        lt_vimexclfun-function 'KOPE'.
        APPEND lt_vimexclfun.

      ELSE.

        IF s_werks-high IS NOT INITIAL.
          lt_vimsellist-viewfield 'WERKS'.
          lt_vimsellist-operator 'BT'.
          lt_vimsellist-value s_werks-low.
          lt_vimsellist-and_or 'AND'.
          APPEND lt_vimsellist.
          lt_vimsellist-viewfield 'WERKS'.
          lt_vimsellist-operator 'BT'.
          lt_vimsellist-value s_werks-high.
          lt_vimsellist-and_or 'AND'.
          APPEND lt_vimsellist.
          IF s_lgort IS NOT INITIAL.
            IF s_lgort-high IS NOT INITIAL.
              lt_vimsellist-viewfield 'LGORT_1'.
              lt_vimsellist-operator 'BT'.
              lt_vimsellist-value s_lgort-low.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
              lt_vimsellist-viewfield 'WERKS'.
              lt_vimsellist-operator 'BT'.
              lt_vimsellist-value s_lgort-high.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
            ENDIF.
          ELSE.
            LOOP AT s_lgort.
              lt_vimsellist-viewfield 'LGORT_1'.
              lt_vimsellist-operator 'EQ'.
              lt_vimsellist-value s_lgort-low.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
            ENDLOOP.
          ENDIF.
        ELSE.
          LOOP AT s_werks.
            lt_vimsellist-viewfield 'WERKS'.
            lt_vimsellist-operator 'EQ'.
            lt_vimsellist-value s_werks-low.
            lt_vimsellist-and_or 'AND'.
            APPEND lt_vimsellist.
          ENDLOOP.
          IF s_lgort IS NOT INITIAL.
            IF s_lgort-high IS NOT INITIAL.
              lt_vimsellist-viewfield 'LGORT_1'.
              lt_vimsellist-operator 'BT'.
              lt_vimsellist-value s_lgort-low.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
              lt_vimsellist-viewfield 'WERKS'.
              lt_vimsellist-operator 'BT'.
              lt_vimsellist-value s_lgort-high.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
            ENDIF.
          ELSE.
            LOOP AT s_lgort.
              lt_vimsellist-viewfield 'LGORT_1'.
              lt_vimsellist-operator 'EQ'.
              lt_vimsellist-value s_lgort-low.
              lt_vimsellist-and_or 'AND'.
              APPEND lt_vimsellist.
            ENDLOOP.
          ENDIF.
        ENDIF.

        lt_vimexclfun-function 'ANZG'."NEWL 新建 ANZG 修改显示切换 KOPE 复制权限
        APPEND lt_vimexclfun.
        lt_vimexclfun-function 'KOPE'.
        APPEND lt_vimexclfun .
      ENDIF.

      "视图维护调用
      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
        EXPORTING
          action                         'U'
          view_name                      'ZTMM_LOCATION'

        TABLES
          dba_sellist                    lt_vimsellist
          excl_cua_funct                 lt_vimexclfun
        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.
    ENDFORM.  

    只有符合lt_vimsellist内表中限制的条件的数据才会在SM30中查询和维护 。

     

  • 相关阅读:
    HDU5213(容斥定理+莫队算法)
    HDU4467:Graph(点的度数分块)
    BZOJ3834:Solar Panels (分块)
    BZOJ2217:Lollipop
    “玲珑杯”线上赛 Round #17 河南专场 B:震惊,99%+的中国人都会算错的问题(容斥计算)
    Linux环境及基础命令(一)
    阿里前CEO卫哲:马云好玩,人工智能泡沫巨大,新零售重在社区
    配置JDK和Tomcat环境变量
    批处理_批量替换不同语句
    批处理命令_提取当前目录下所有文件名称
  • 原文地址:https://www.cnblogs.com/lingxiaoj/p/11174525.html
Copyright © 2020-2023  润新知