zoukankan      html  css  js  c++  java
  • SY-SUBRC

    一般是对read table和select语句使用。

    loop at g_it_data where level < <wa_data>-level and seq < <wa_data>-seq and  ( item_category 'M' and assembly 'X' or level ).
            <wa_data>-cpmtr = g_it_data-cpmtr.
            if <wa_data>-cpmtr is not initial.
              exit.
            endif.
          endloop.

    if <wa_data>-cpmtr is not initial. 不要写成 if sy-subrc = 0,这样的逻辑是有问题的。

    下面这段代码问题很严重:

            CLEAR g_it_data.
          READ TABLE g_it_data WITH KEY cpmtr = <wa_data>-cpmtr level = <wa_data>-level .
          IF sy-subrc eq 0.
            IF g_it_data-ctgry IS NOT INITIAL.
              <wa_data>-ctgry = g_it_data-ctgry.
            ENDIF.
          ELSE.
            CLEAR: tmp_sublevel,g_it_data.
            tmp_sublevel = <wa_data>-level + 1.
            READ TABLE g_it_data WITH KEY cpmtr = <wa_data>-cpmtr level = tmp_sublevel.
            IF sy-subrc eq 0.
              <wa_data>-ctgry = g_it_data-ctgry.
            ENDIF.
          ENDIF.

    自己写这段代码的目的是,先从同样level,同样cpmtr的记录里去找,找不到就往下一层去找。

    当在同样的level找时,read table一但有记录,那么sy-subrc就为零,没读到才不会为零,才会继续在g_it_data里去找下一层。

    注意这里,本意是找不到就往下一层找,而代码是read table,没有找到同样level,同样cpmtr的记录就往下找,可是同一个内表里,肯定是会让read table的sy-subrc为零的。

    这里应该换判断,不使用嵌套的read table,而是像上面一样,单独判断“ctgry”是否为零。

  • 相关阅读:
    普通文本(.txt)篇章排版样式参考 [文档说明][日志]
    C++基础练习案例
    Markdown 编写技巧汇总(二)
    Markdown 编写技巧汇总(一)
    有关C++程序设计基础的各种考题解答参考汇总
    有关算法与数据结构的考题解答参考汇总 [C++] [链表] · 第三篇
    有关算法与数据结构的考题解答参考汇总 [C++] [链表] · 第二篇
    有关算法与数据结构的考题解答参考汇总 [C++] [链表]
    DOS批处理小案例应用分享
    基于Processing图像序列处理保存导出的流程梳理
  • 原文地址:https://www.cnblogs.com/aurora-cj/p/9397254.html
Copyright © 2011-2022 走看看