SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪

来源:互联网 发布:华为 高通 知乎 编辑:程序博客网 时间:2024/04/28 11:01

在sap的定价配置中,我们常常会使用到参考结构和参考字段(条件表和存储顺序),这些字段是如何使用的呢,我带着这个好奇阅读了sap的源码(函数SD_COND_ACCESS),并将我的理解记录下来供大家参考。

Step 1 调用t682z_select子过程从T682Z读取存储顺序存储到t682z_tab
 PERFORM t682z_select TABLES   t682z_tab
                       USING    t682i_i
                       CHANGING subrc.
并根据参考结构和参考字段拼接存放到内表的字段kommfield中
            CONCATENATE t682z_buf-qustr '-' t682z_buf-qufna
                        INTO t682z_buf-kommfield.

 

Step 2 在子例程sel_kondtab中根据存储顺序里的参考结构和字段名提取参考结构的对应字段值
  ASSIGN TABLE FIELD (proto_fld_tab-kommfield) TO <f>.
  proto_fld_tab-wert = <f>.

注:proto_fld_tab-kommfield的值,如:KOMP-PRODH1 

 

Step 3 在子例程sel_kondtab中拼接查询条件(放在coding_tab内表中)
* buffered with wrong value -> replace value
          coding_template-value = proto_fld_tab-wert.
          REPLACE ALL OCCURRENCES OF   ''''    IN proto_fld_tab-wert
                                  WITH ''''''  IN CHARACTER MODE.
          CONCATENATE '''' proto_fld_tab-wert '''' INTO h_value.
          CONCATENATE <t682z>-zifna '=' h_value
                      INTO coding_template-line
                      SEPARATED BY ' '.
          MODIFY coding_template INDEX sy-tabix TRANSPORTING value line.
          IF first = yes.
            first = no.
            coding_tab = coding_template-line.
          ELSE.
            CONCATENATE 'AND' coding_template-line INTO coding_tab
                        SEPARATED BY ' '.
          ENDIF.
        ENDIF.
        APPEND coding_tab.


Step 4 在子例程sel_kondtab中根据拼接(放在coding_tab内表中)出查询条件取读取条件记录。
          SELECT * FROM (t681-kotab) APPENDING TABLE <cond_tab>
                 UP TO 1 ROWS
                 WHERE kappl  = se_kappl
                 AND   kschl  = se_kschl
                 AND   (coding_tab).

注:t681-kotab为条件表名称如:A802 ;coding_tab内容参见下图

 有了这些,我们对参考字段和参考结构的使用的理解就应该很容易了。

原创粉丝点击