• 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中查询和维护 。

     

  • 相关阅读:
    树形DP,最大直径,并查集——HDU4514
    树形DP——HDU2196
    树上倍增法,LCA——CF-832-D
    LCA,Tarjan——POJ1330
    树的直径,树形DP,DFS——POJ1958
    剑指offer28-最小k个数
    剑指offer27-数组中出现次数超过一半的数字
    剑指offer26-字符串的排列
    剑指offer25-二叉搜索树与双向链表
    剑指offer24-复杂链表的复制
  • 原文地址:https://www.cnblogs.com/lingxiaoj/p/11174525.html
Copyright © 2020-2023  润新知