SD 销售价格查询报表

来源:互联网 发布:如何查看淘宝订单评价 编辑:程序博客网 时间:2024/04/28 09:51

涉及的事务码 t_code : vb21 创建定价条件,v/ld 查询定价

text symbol

 

 

B01 带删除标志的 12 12
B02 带冻结标志的 12 12
B03 只显示最新价格 14 14
B04 显示阶梯报价 12 15
B05 只显示阶梯报价 14 15
B06 不显示阶梯报价 14 15
B07 客户组+物料 11 15
B08 客户+物料 9 15
B09 物料 4 15
T01 查询类别 8 12
T02 主查询条件 10 12
T03 辅助筛选条件 12 12

selection text 

P_CGM 客户组+物料
P_CM 客户+物料
P_DATAB 有效起始日期
P_DEL 带删除标识
P_DQXSJ 只显示当前价格
P_JTBJ1 显示阶梯报价
P_JTBJ2 只显示阶梯报价
P_JTBJ3 不显示阶梯报价
P_KDGRP 客户组
P_KFRST 显示冻结的
P_KSCHL 条件类型
P_KUNNR 客户
P_MATKL 物料组
P_MATNR 物料
P_MM 物料
P_VKORG 销售组织

P_VTWEG 分销渠道
P_ZXXSJ 只显示最新价格

source code


________ ______________________________

*&---------------------------------------------------------------------*
*& Report  YSDR0040
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ysdr0040 MESSAGE-ID 1000.
INCLUDE y_alv_func.
INCLUDE zabap_public.
INCLUDE <icon>.
TABLES: a903,mara,a304,a305,konp,kona.

**IT_SHOW显示内标
**销售组织/分销渠道/客户组/物料
**客户/物料
**物料
DATA:BEGIN OF it_show OCCURS 0,
  khlx TYPE string ,"客户类型 pr01 国内 pro3 海外
  kschl  LIKE a903-kschl,"条件类型
  vtext  LIKE t685t-vtext,"条件类型描述
  vkorg  LIKE a903-vkorg,"销售组织
  vtweg  LIKE a903-vtweg,"分销渠道
  kdgrp  LIKE a903-kdgrp,"客户组
  ktext  LIKE t151t-ktext,"客户组描述
  kunnr  LIKE a305-kunnr,"客户
  name1 LIKE kna1-name1,"客户描述
  matnr  LIKE a903-matnr,"物料号
  maktx LIKE makt-maktx,"物料描述
  datab  LIKE a903-datab,"出厂有效起始日
  datbi  LIKE a903-datbi,"出厂有效截止日期
  knumh  LIKE a903-knumh,"出厂记录号
  kfrst  LIKE a903-kfrst,"出产批准状态
  kbetr LIKE konp-kbetr,"出厂价格
  konwa LIKE konp-konwa,"货币单位
  kpein LIKE konp-kpein,"价格单位
  kmein LIKE konp-kmein,"价格计量单位
  kbetr1 LIKE konp-kbetr,"折扣比例
  kbetr2 LIKE konp-kbetr,"销售价格
  loevm_ko LIKE konp-loevm_ko,"删除标记
  datab1 LIKE a903-datab,"折扣有效起始日
  datbi1 LIKE a903-datbi,"折扣有效截止日期
  knumh1 LIKE a903-knumh,"折扣记录号
  kfrst1  LIKE a903-kfrst,"折扣批准状态
  kschl1  LIKE a903-kschl,"折扣类型
  loevm_ko1 LIKE konp-loevm_ko,"删除标记
  datab2 LIKE a903-datab,"销售价格有效起始日
  datbi2 LIKE a903-datbi,"销售价格截止日期
  kfrst2  LIKE a903-kfrst,"销售价格批准状态
  loevm_ko2 LIKE konp-loevm_ko,"删除标记
  matkl LIKE mara-matkl,"物料组
  knuma_ag LIKE konp-knuma_ag,"审批编号
  knuma_ag1 LIKE konp-knuma_ag,"审批编号
  klfn1 LIKE konm-klfn1,"阶梯报价
  kstbm LIKE konm-kstbm,"阶梯数
  kbetr3 LIKE konm-kbetr,"阶梯报价
  jtbz(4) TYPE c,"阶梯报价标志
*  zxxsj TYPE c,"最新销售价
*  kbstat  LIKE a903-kbstat,"定价的处理状态
  zxzk  TYPE c,"最新折扣
  dqjg TYPE c,"当前价格
END OF it_show.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.

SELECTION-SCREEN BEGIN OF LINE.

*客户组+物料
PARAMETERS:p_cgm TYPE c RADIOBUTTON GROUP g1 USER-COMMAND g2 .
SELECTION-SCREEN COMMENT 3(15) text-b07 FOR FIELD p_jtbj1.
SELECTION-SCREEN POSITION 20.
*客户+物料
PARAMETERS:p_cm TYPE c RADIOBUTTON GROUP g1     .
SELECTION-SCREEN COMMENT 23(15) text-b08 FOR FIELD p_jtbj2.
SELECTION-SCREEN POSITION 40.
*物料
PARAMETERS:p_mm TYPE c RADIOBUTTON GROUP g1     .
SELECTION-SCREEN COMMENT 43(20) text-b09 FOR FIELD p_jtbj3.
SELECTION-SCREEN END OF LINE.


SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t02  .
PARAMETERS: p_datab LIKE a903-datab  OBLIGATORY DEFAULT sy-datum."sy-datum.
SELECT-OPTIONS:       p_kfrst1 FOR  kona-kfrst NO-DISPLAY."审核状态
SELECT-OPTIONS:  p_vkorg  FOR a903-vkorg MODIF ID g2,"销售组织
  p_vtweg  FOR a903-vtweg MODIF ID g2,"分销渠道
  p_kdgrp FOR a903-kdgrp MODIF ID g3 DEFAULT  '01',"客户组      .
  p_kunnr FOR a305-kunnr MODIF ID g4,"客户号
  p_matkl FOR mara-matkl MODIF ID g2,"物料组
  p_matnr FOR mara-matnr MODIF ID g2,"物料号
  p_matnr1 FOR mara-matnr MODIF ID g2 NO-DISPLAY,"物料号
  p_del1 FOR konp-loevm_ko NO-DISPLAY,"删除

  p_kschl FOR a903-kschl MODIF ID g2."条件类型
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t03 .
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_del TYPE c AS CHECKBOX ."删除标记 DEFAULT  'X'

SELECTION-SCREEN COMMENT 3(15) text-b01 FOR FIELD p_del.
SELECTION-SCREEN POSITION 20.
PARAMETERS: p_kfrst TYPE c AS CHECKBOX."审批状态
SELECTION-SCREEN COMMENT 23(15) text-b02 FOR FIELD p_kfrst.
SELECTION-SCREEN POSITION 40.
PARAMETERS: p_zxxsj TYPE c AS CHECKBOX  DEFAULT  ''."最新销售价格
SELECTION-SCREEN COMMENT 43(20) text-b03 FOR FIELD p_zxxsj.
SELECTION-SCREEN END OF LINE.
PARAMETERS: p_dqxsj TYPE c AS CHECKBOX DEFAULT  'X' ."当前价格

SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:p_jtbj1 TYPE c RADIOBUTTON GROUP g2.  "显示阶梯报价
SELECTION-SCREEN COMMENT 3(15) text-b04 FOR FIELD p_jtbj1.
SELECTION-SCREEN POSITION 20.
PARAMETERS:p_jtbj2 TYPE c RADIOBUTTON GROUP g2.  "只显示阶梯报价
SELECTION-SCREEN COMMENT 23(15) text-b05 FOR FIELD p_jtbj2.
SELECTION-SCREEN POSITION 40.
PARAMETERS:p_jtbj3 TYPE c RADIOBUTTON GROUP g2.  "不显示阶梯报价
SELECTION-SCREEN COMMENT 43(20) text-b06 FOR FIELD p_jtbj3.

SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.
SELECT-OPTIONS: p_dd FOR sy-datum NO-DISPLAY."


*selection-screen end of block b3.


INITIALIZATION.

  p_cgm = 'X'.
  p_jtbj3  = 'X'.

AT SELECTION-SCREEN OUTPUT.
  ucomm = sy-ucomm .
  LOOP AT SCREEN.
    CASE screen-group1.
      WHEN 'G3'.
        IF p_cgm = 'X'  .
          screen-active = '1'.
        ELSE.
          screen-active = '0'.
        ENDIF.

      WHEN 'G4'.
        IF p_cm = 'X'  .
          screen-active = '1'.
        ELSE.
          screen-active = '0'.
        ENDIF.
      WHEN 'G5'.
        IF p_mm = 'X'  .
          screen-active = '1'.
        ELSE.
          screen-active = '0'.
        ENDIF.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.

START-OF-SELECTION.
  IF p_cgm = 'X'.
    IF p_kdgrp IS INITIAL.
      my_exit '必须输入客户组查询条件' ''.
    ENDIF.
    PERFORM get_data_903.
*    PERFORM show_data.
  ENDIF.
  IF p_cm = 'X'.
    my_exit '此功能尚未开发' 'I'.
    IF p_kunnr IS INITIAL.
      my_exit '必须输入客户查询条件' ''.
    ENDIF.
*    PERFORM get_data_305.
*    PERFORM show_data.

  ENDIF.
  IF p_mm = 'X'.
    my_exit '此功能尚未开发' 'I'.
*    PERFORM get_data_304.
  ENDIF.
  PERFORM show_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA_903
*&---------------------------------------------------------------------*
*       text  按客户组+物料查询数据
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data_903 .
  CLEAR: it_show[],p_del1[],p_matnr1[], p_kfrst1[].
  DATA:it_903 LIKE TABLE OF a903 WITH HEADER LINE."出厂价内表
  DATA:it_903zk LIKE TABLE OF a903 WITH HEADER LINE."当前出厂价格区间内的折扣
  DATA:it_903zk1 LIKE TABLE OF a903 WITH HEADER LINE."所有折扣内表
  DATA:it_903zk2 LIKE TABLE OF a903 WITH HEADER LINE."当前出厂价格区间内的折扣
  DATA:wa_903 LIKE a903.
  DATA::BEGIN OF t_konp .
          INCLUDE STRUCTURE konp.
  DATA:kfrst1 LIKE kona-kfrst.
  DATA:: END OF t_konp.
  DATA:it_konp LIKE HASHED TABLE OF t_konp WITH UNIQUE KEY knumh kopos.
  DATA:wa_konp LIKE t_konp.
  DATA:tabidx TYPE i,datdiff TYPE i,line TYPE i.
**  根据物料组查询物料
  IF p_matnr IS INITIAL AND  p_matkl IS NOT INITIAL.
    SELECT matnr FROM mara
    INTO p_matnr-low
    WHERE matkl IN p_matkl     AND lvorm <> 'X'.
      p_matnr-option = 'EQ'.
      p_matnr-sign = 'I'.
      APPEND p_matnr.
    ENDSELECT.
  ENDIF.

**当选择了删除或者冻结标记的时候不到物料级查询
  IF p_del IS INITIAL  .
    p_del1-low = 'X'.
    p_del1-sign = 'I'.
    p_del1-option = 'NE'.
    APPEND p_del1.
  ENDIF.
  IF p_kfrst IS INITIAL  .
    p_kfrst1-low = 'A'.
    p_kfrst1-sign = 'I'.
    p_kfrst1-option = 'NE'.
    APPEND p_kfrst1.
  ENDIF.


** 查询客户组PR01和PR03的出厂价knuma_ag

  SELECT
*  mandt
   kappl
   kschl
   vkorg
   vtweg
   kdgrp
   matnr
   kfrst
   datbi
   datab
   kbstat
   knumh
  FROM a903
*  INNER JOIN konh
*  ON  knumh = konh~knumh
  INTO CORRESPONDING FIELDS OF TABLE it_903
  WHERE  vkorg IN p_vkorg AND  vtweg IN  p_vtweg
  AND  matnr IN p_matnr
  AND  kdgrp IN p_kdgrp AND  kappl = 'V'
  AND datbi >= p_datab "起始日期小于等于条件日期
  AND  kschl IN ('PR01','PR03')
  AND kschl IN p_kschl"条件类型
  AND EXISTS (
                 SELECT knumh FROM konp
                 WHERE  a903~knumh = konp~knumh
                 AND
                 (
                   EXISTS  (
                   SELECT knuma FROM   kona WHERE konp~knuma_ag  = kona~knuma AND
                   konp~loevm_ko IN p_del1 AND   kona~kfrst IN p_kfrst1
                   )
                 OR konp~knuma_ag = ''
                 )
              )
*  AND kfrst  IN p_kfrst"审批状态
*  AND datab >= p_datab. "起始日期小于等于条件日期
.

**  排除客户组中已维护的物料
  CLEAR p_matnr1[].
  p_matnr1-low = '999999999999999999'.
  p_matnr1-sign = 'I'.
  p_matnr1-option = 'EQ'.
  APPEND p_matnr1.

  LOOP AT it_903 WHERE kschl NE 'PR03'.
    p_matnr1-low = it_903-matnr.
    p_matnr1-sign = 'I'.
    p_matnr1-option = 'EQ'.
    APPEND p_matnr1.
  ENDLOOP.

 

** 查询海外ZK05,ZK06和国内ZK01,ZK02的折扣
  SELECT
*  mandt
   kappl
   kschl
   vkorg
   vtweg
   kdgrp
   matnr
   kfrst
   datbi
   datab
   kbstat
   knumh
  FROM a903
*  INNER JOIN konh
*  ON  knumh = konh~knumh
  INTO CORRESPONDING FIELDS OF TABLE it_903zk1
  WHERE  vkorg IN p_vkorg AND  vtweg IN  p_vtweg
  AND  matnr IN p_matnr
  AND  kdgrp IN p_kdgrp AND  kappl = 'V' AND  kschl IN ('ZK01','ZK05')
  AND datbi >= p_datab "起始日期小于等于条件日期
   AND EXISTS (
                  SELECT knumh FROM konp
                 WHERE  a903~knumh = konp~knumh
                 AND
                 (
                   EXISTS  (
                   SELECT knuma FROM   kona WHERE konp~knuma_ag  = kona~knuma AND
                   konp~loevm_ko IN p_del1 AND   kona~kfrst IN p_kfrst1
                   )
                 OR konp~knuma_ag = ''
                 )
              )
*  AND a903~datab >= p_datab. "起始日期小于等于条件日期
*  AND kschl IN p_kschl
*   AND kfrst  IN p_kfrst
  .

** 查询物料级PR01和R03的出厂价
  SELECT
  mandt
  kappl
  kschl
  vkorg
  vtweg
*  kunnr
  matnr
  kfrst
  datbi
  datab
  kbstat
  knumh
  FROM a304
  APPENDING CORRESPONDING FIELDS OF TABLE it_903
  WHERE matnr IN ( SELECT   matnr   FROM a903
  WHERE  vkorg IN p_vkorg AND  vtweg IN  p_vtweg
  AND  matnr IN p_matnr
  AND  kdgrp IN p_kdgrp AND  kappl = 'V' AND  kschl IN ('ZK01','ZK05')
  AND datbi >= p_datab "起始日期小于等于条件日期
  AND EXISTS (
                  SELECT knumh FROM konp
                 WHERE  a903~knumh = konp~knumh
                 AND
                 (
                   EXISTS  (
                   SELECT knuma FROM   kona WHERE konp~knuma_ag  = kona~knuma AND
                   konp~loevm_ko IN p_del1 AND   kona~kfrst IN p_kfrst1
                   )
                 OR konp~knuma_ag = ''
                 )
              )
*  AND a903~datab >= p_datab. "起始日期小于等于条件日期
   )
  AND matnr NOT IN p_matnr1
  AND  kschl IN ('PR01','PR03')
  AND  vkorg IN p_vkorg AND  vtweg IN  p_vtweg
  AND datbi >= p_datab
  AND kschl IN p_kschl."条件类型.

  IF it_903[] IS INITIAL .
    my_exit '没有出厂价数据' ''.
  ENDIF.
*  IF sy-subrc <> 0 .
*    my_exit '没有折扣数据' ''.
*  ENDIF.
  IF  it_903[] IS NOT INITIAL.
* 查询定价条件
    SELECT konp~knumh
    konp~kopos
    konp~kbetr
    konp~konwa
    konp~kpein
    konp~kmein
    konp~loevm_ko
    kona~kfrst AS kfrst1
    konp~kschl
    konp~knuma_ag
    FROM konp
    LEFT JOIN kona ON konp~knuma_ag  = kona~knuma
    INTO CORRESPONDING FIELDS OF TABLE it_konp
    FOR ALL ENTRIES IN it_903
    WHERE knumh  = it_903-knumh
    AND kopos = '01'
*  AND kona~kfrst IN p_kfrst
    .
    IF sy-subrc <> 0 .
      my_exit '出厂价没有定价条件数据' ''.
    ENDIF.
  ENDIF.
* 查询定价条件
  IF it_903zk1[] IS NOT INITIAL.
    SELECT konp~knumh
    konp~kopos
    konp~kbetr
    konp~konwa
    konp~kpein
    konp~kmein
    konp~loevm_ko
    kona~kfrst AS kfrst1
    konp~kschl
    konp~knuma_ag
    FROM konp
    LEFT JOIN kona ON konp~knuma_ag  = kona~knuma
    APPENDING corresponding fields of table it_konp
    FOR ALL ENTRIES IN it_903zk1
    WHERE knumh  = it_903zk1-knumh
    AND kopos = '01'
*  AND kona~kfrst IN p_kfrst
    .
    IF sy-subrc <> 0 .
      my_exit '折扣没有定价条件数据' ''.
    ENDIF.
  ENDIF.
*  DELETE it_konp WHERE loevm_ko = 'X' and  kschl = 'ZK01' OR KSCHL = 'ZK01' .
** 存放最新定价的变量
  DATA:knumh LIKE a903-knumh,knumh1 LIKE a903-knumh,datab LIKE a903-datab.
** 是否有折扣的变量
  DATA:zkcount TYPE i .
  LOOP AT it_903.

    CLEAR:datab,knumh,zkcount,it_show,it_903zk[],it_903zk2[],it_903zk,it_903zk1,it_903zk2.
    knumh =  it_903-knumh .
    MOVE-CORRESPONDING it_903 TO it_show.
    IF it_show-kschl = 'PR01'.
      it_show-khlx = '国内'.
    ELSE.
      it_show-khlx = '海外'.
    ENDIF.

**  读取出厂定价条件
    READ TABLE  it_konp INTO wa_konp WITH TABLE KEY knumh = knumh  kopos = '01'.
    IF sy-subrc <> 0 .
      CONCATENATE '信息记录:' knumh  '读取条件时出现错误' INTO msg.
      my_exit msg 'I'.
    ENDIF.
    it_show-loevm_ko = wa_konp-loevm_ko."删除标记
    IF p_del IS INITIAL AND it_show-loevm_ko = 'X' .
      CONTINUE.
    ENDIF.
    it_show-knuma_ag = wa_konp-knuma_ag."条件
*    it_show-kschl = wa_konp-kschl."条件类型
    it_show-kfrst  = wa_konp-kfrst1 ."批准状态
    IF p_kfrst IS INITIAL AND it_show-kfrst = 'A' .
      CONTINUE.
    ENDIF.
    it_show-kbetr = wa_konp-kbetr."出厂价格
    it_show-konwa = wa_konp-konwa."货币单位
    it_show-kpein = wa_konp-kpein."价格单位
    it_show-kmein = wa_konp-kmein."价格计量单位
**  将有效数据灌入表it_903zk1内
    LOOP AT it_903zk1 WHERE
      vkorg = it_show-vkorg
      AND vtweg =  it_show-vtweg
*      AND kdgrp = it_show-kdgrp
      AND  matnr = it_show-matnr
     AND ( kschl = 'ZK01' OR kschl = 'ZK05' )
     AND (
*     中间
      (
      datab >= it_show-datab
      AND datbi <= it_show-datbi
      )
      OR
**     结尾
      (
      datab <= it_show-datbi
      AND datbi >= it_show-datbi
      )
      OR
**     开头
      (
      datab <= it_show-datab
      AND   datbi >= it_show-datab
      )
      )
      .
      IF it_show-kschl = 'PR01'.
        IF it_903zk1-kschl <> 'ZK01'.
          CONTINUE.
        ENDIF.
      ELSE.
        IF it_903zk1-kschl <> 'ZK05'.
          CONTINUE.
        ENDIF.
      ENDIF.

**    处理客户组问题
      CLEAR it_903zk2.
      IF   it_903-kdgrp IS NOT INITIAL AND   it_903zk1-kdgrp IS NOT INITIAL.
        IF   it_903-kdgrp <>   it_903zk1-kdgrp .
          CONTINUE.
        ENDIF.
      ELSEIF it_903-kdgrp IS INITIAL.
        it_show-kdgrp =  it_903zk1-kdgrp .
      ENDIF.

**  读取折扣定价条件
      READ TABLE  it_konp INTO wa_konp WITH TABLE KEY knumh = it_903zk1-knumh  kopos = '01'.
      IF sy-subrc <> 0 .
        CONCATENATE '信息记录:' it_903zk1-knumh  '读取条件时出现错误' INTO msg.
        my_exit msg 'I'.
      ENDIF.
      IF p_del IS INITIAL AND wa_konp-loevm_ko = 'X' .
        CONTINUE.
      ENDIF.
      IF p_kfrst IS INITIAL AND wa_konp-kfrst1  = 'A' .
        CONTINUE.
      ENDIF.
**  折扣日期此时起用作为出厂价日期的临时变量
**    如果开始日期大于折扣开始日期价格开始日期为出厂价日期
      IF  it_show-datab >= it_903zk1-datab.
        it_903zk1-datab =    it_show-datab.
      ENDIF.
**    如果结束日期小于折扣结束日期价格结束日期为出厂价日期
      IF  it_show-datbi <= it_903zk1-datbi.
        it_903zk1-datbi =    it_show-datbi.
      ENDIF.
      APPEND it_903zk1 TO it_903zk  .
      APPEND it_903zk1 TO it_903zk2  .


    ENDLOOP.

 

** 按起始日期排序
    SORT it_903zk2 BY  datbi datab   .
    line = LINES( it_903zk2 ).
    CLEAR tabidx.
**处理头和尾的日期。
    LOOP  AT it_903zk2 INTO it_903zk .
      CLEAR wa_903.
      tabidx = sy-tabix + 1 .


      IF sy-tabix = 1.
        datdiff =  it_show-datab - it_903zk-datab .
        IF datdiff < 0 .
          wa_903-datab =  it_show-datab .
          wa_903-datbi = it_903zk-datab - 1 .
          INSERT wa_903 INTO it_903zk INDEX 1.
        ENDIF.
      ENDIF.


*      IF tabidx > 2  .
*      READ TABLE it_903zk2 INTO it_903zk1 INDEX tabidx  .
*      IF sy-subrc = 0.
*        datdiff =  it_903zk1-datab - it_903zk-datbi .
*        IF datdiff > 0 .
*          wa_903-datab =  it_903zk-datbi + 1.
*          wa_903-datbi = it_903zk1-datab - 1 .
*          APPEND wa_903 TO it_903zk .
*        ENDIF.
*      ENDIF.
*      ENDIF.

      IF tabidx > line.
        datdiff =  it_show-datbi - it_903zk-datbi .
        IF datdiff > 0 .
          wa_903-datab =  it_903zk-datbi + 1.
          wa_903-datbi =  it_show-datbi  .
          APPEND wa_903 TO it_903zk .
        ENDIF.
        EXIT.
      ENDIF.

    ENDLOOP.

**  客户组描述
    SELECT SINGLE ktext  FROM t151t
    INTO it_show-ktext
    WHERE spras = '1' AND
    kdgrp = it_show-kdgrp.
**  物料描述
    SELECT SINGLE maktx  FROM makt
    INTO it_show-maktx
    WHERE spras = '1' AND
    matnr = it_show-matnr.
**  物料描述
    SELECT SINGLE matkl  FROM mara
    INTO it_show-matkl
    WHERE  matnr = it_show-matnr
    AND lvorm <> 'X'.
    IF sy-subrc <> 0.
      CONTINUE.
    ENDIF.
** 分段切割日期数据
    LOOP AT it_903zk .
** 添加没有折扣的出厂价时间段
      it_show-datab2 = it_903zk-datab.
      it_show-datbi2 = it_903zk-datbi.
      IF it_903zk-knumh IS INITIAL.
        zkcount = zkcount + 1.
        it_show-kbetr2  =    it_show-kbetr.
        APPEND it_show.
        CONTINUE.
      ENDIF.
**  读回折扣日期字段
      READ TABLE it_903zk1 WITH KEY knumh =  it_903zk-knumh.
      IF sy-subrc = 0 .
        it_show-datab1 =  it_903zk1-datab."折扣有效起始日
        it_show-datbi1 =  it_903zk1-datbi."折扣有效截止日期
      ELSE.
        it_show-datab1 =  it_903zk-datab."折扣有效起始日
        it_show-datbi1 =  it_903zk-datbi."折扣有效截止日期
      ENDIF.
**  读取折扣定价条件
      READ TABLE  it_konp INTO wa_konp WITH TABLE KEY knumh = it_903zk-knumh  kopos = '01'.
      IF sy-subrc <> 0 .
        CONCATENATE '信息记录:' it_903zk-knumh  '读取条件时出现错误' INTO msg.
        my_exit msg 'I'.
      ENDIF.
      it_show-loevm_ko1 = wa_konp-loevm_ko."删除标记
      IF p_del IS INITIAL AND it_show-loevm_ko1 = 'X' .
        CONTINUE.
      ENDIF.
      it_show-knuma_ag1 = wa_konp-knuma_ag."条件
      it_show-kfrst1  = wa_konp-kfrst1 ."批准状态
      IF p_kfrst IS INITIAL AND it_show-kfrst1 = 'A' .
        CONTINUE.
      ENDIF.
**    数据库中此数扩大了10倍,程序中除回来
      it_show-kbetr1 = wa_konp-kbetr / 10 ."折扣比例

      zkcount = zkcount + 1.

*      IF datab < it_903zk-datab .
*        datab = it_903zk-datab.
*        knumh1 =  it_903zk-knumh .
*      ENDIF.

**  折扣描述
      SELECT SINGLE vtext  FROM t685t
      INTO it_show-vtext
      WHERE spras = '1' AND
      kvewe = 'A' AND
      kappl = 'V' AND
      kschl = it_903zk-kschl.

**    销售价格 = 出产价格 * ( 1 - 销售折扣)
      it_show-kbetr2 =  it_show-kbetr * ( 1 +  it_show-kbetr1 / 100 ) ."销售价格

      it_show-knumh1 =  it_903zk-knumh."折扣记录号
*      it_show-kfrst1 =  it_903zk-kfrst."折扣批准状态
      it_show-kschl1 =  it_903zk-kschl."折扣类型
      IF    it_show-loevm_ko1 = 'X' OR  it_show-loevm_ko = 'X'.
        it_show-loevm_ko2 = 'X'."删除标记
      ENDIF.

      APPEND it_show.

    ENDLOOP.

**  有折扣维护的
    IF zkcount > 0.
*      it_show-zxzk = 'X'.
*      MODIFY  it_show TRANSPORTING zxzk WHERE knumh = knumh AND knumh1 = knumh1 AND datab1 = datab.
    ELSE."没有折扣的显示出厂价
*      it_show-zxzk = 'X'.
      it_show-kbetr2  = it_show-kbetr.
      it_show-datab2 = it_show-datab.
      it_show-datbi2 = it_show-datbi.
      APPEND it_show.
    ENDIF.
  ENDLOOP.
*排除客户组为空的
  DELETE it_show WHERE  kdgrp  IS INITIAL.

**最新价格
  DATA:  vkorg  LIKE a903-vkorg,"销售组织
         vtweg  LIKE a903-vtweg,"分销渠道
         kdgrp  LIKE a903-kdgrp,"客户组
         kschl LIKE a903-kschl ,
         matnr LIKE a903-matnr.

  DATA:wa_show LIKE it_show.
  SORT it_show BY  vkorg  vtweg  kdgrp  matnr kschl datbi2 DESCENDING datab2 DESCENDING.
  DATA: i TYPE i, datab2 LIKE it_show-datab2.
  LOOP AT it_show   .
    i = sy-tabix.
    IF vkorg = it_show-vkorg AND"销售组织
    vtweg = it_show-vtweg  AND"分销渠道
    kdgrp = it_show-kdgrp  AND"客户组
    kschl = it_show-kschl  AND"
    matnr = it_show-matnr.
      CONTINUE.
    ELSE.
      vkorg = it_show-vkorg."销售组织
      vtweg = it_show-vtweg."分销渠道
      kdgrp = it_show-kdgrp."客户组
      kschl = it_show-kschl."客户组
      matnr = it_show-matnr.
      it_show-zxzk = 'X'.
      MODIFY it_show.

    ENDIF.
  ENDLOOP.
** 只显示最新折扣
  IF   p_zxxsj IS NOT INITIAL.
    DELETE it_show WHERE zxzk IS INITIAL.
  ENDIF.
**处理阶梯报价
* KLFN1 like konm-KLFN1,"阶梯报价
*  KSTBM like konm-KSTBM,"阶梯数
*  KBETR3 like konm-KBETR,"阶梯报价
*  jtbz(4) type c,"阶梯报价标志

  DATA:it_konm LIKE TABLE OF konm WITH HEADER LINE.
*  DATA:wa_show LIKE it_show.
  LOOP AT it_show WHERE jtbz <> icon_graduate.
    CLEAR: wa_show,it_konm[].
*    SHIFT it_show-matnr UP TO '0' LEFT CIRCULAR.
    SHIFT  it_show-knuma_ag LEFT DELETING LEADING '0'.
    SHIFT  it_show-knuma_ag1 LEFT DELETING LEADING '0'.
    SHIFT  it_show-matnr  LEFT DELETING LEADING '0'.
    MODIFY it_show.
    IF p_jtbj3 = 'X'."不显示阶梯报价
      CONTINUE.
    ENDIF.
    SELECT mandt
            knumh
            kopos
            klfn1
            kstbm
            kbetr
   FROM konm
   INTO CORRESPONDING FIELDS OF TABLE it_konm
   WHERE    knumh = it_show-knumh.
    IF sy-subrc = 0 .
      LOOP AT it_konm.
        it_show-jtbz =   icon_graduate .
        it_show-klfn1 =  it_konm-klfn1.
        it_show-kstbm =  it_konm-kstbm.
        it_show-kbetr3 =  it_konm-kbetr.
        MOVE-CORRESPONDING it_show TO wa_show.
        DELETE it_show.

**    销售价格 = 出产价格 * ( 1 - 销售折扣)
        it_show-kbetr2 =  it_show-kbetr3 * ( 1 +  it_show-kbetr1 / 100 ) ."销售价格
        APPEND wa_show TO it_show.
      ENDLOOP.
    ENDIF.


  ENDLOOP.

  IF p_jtbj2 = 'X'."只显示阶梯报价
    DELETE it_show WHERE jtbz IS INITIAL.
  ENDIF.

ENDFORM.                    " GET_DATA_903
*

*&---------------------------------------------------------------------*
*&      Form  SHOW_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM show_data .


  LOOP AT it_show.
    CLEAR p_dd[].
    p_dd-sign = 'I'.
    p_dd-option = 'BT'.
    p_dd-low = it_show-datab2.
    p_dd-high = it_show-datbi2.
    APPEND p_dd.
    IF sy-datum IN p_dd.
      it_show-dqjg = 'X'.
    ENDIF.
    MODIFY it_show.
  ENDLOOP.
  IF p_dqxsj IS NOT INITIAL.
    DELETE it_show WHERE dqjg IS INITIAL.
  ENDIF.
  alv_clear_data.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATAB' '出厂价起始日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATBI' '出厂价截止日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'VKORG' '销售组织'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'VTWEG' '分销渠道'.
*  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KHLX' '客户类型'.
  IF p_cgm = 'X'.
    alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KDGRP' '客户组'.
    alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KTEXT' '客户组描述'.
  ENDIF.
  IF p_cm = 'X'.
    alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KUNNR' '客户'.
    alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'NAME1' '客户描述'.
  ENDIF.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'MATKL' '物料组'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'MATNR' '物料号'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'MAKTX' '物料描述'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KSCHL' '出厂价类型'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KFRST' '出厂价状态'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KNUMA_AG' '出厂价审批号'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KBETR' '出厂价格'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KONWA' '单位'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KPEIN' '价格单位'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KMEIN' '计量单位'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'LOEVM_KO' '出厂价删除标记'.

  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'JTBZ' '阶梯标志'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KSTBM' '阶梯数'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KBETR3' '阶梯价格'.


  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATAB1' '折扣起始日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATBI1' '折扣截止日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KSCHL1' '折扣类型'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KFRST1' '折扣价状态'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KNUMA_AG1' '折扣审批号'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'VTEXT' '类型描述'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KBETR1' '折扣比例'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'LOEVM_KO1' '折扣删除标记'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'ZXZK' '最新价格'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DQJG' '当前价格'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KBETR2' '销售实价'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATAB2' '销售价起始日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'DATBI2' '销售价截止日'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KNUMH' '出厂记录号'.
  alv_add_data 'IT_SHOW' '' '' '' '' 'CHAR' 'KNUMH1' '折扣记录号'.
  alv_show_data it_show.
ENDFORM.                    " SHOW_DATA

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text  处理双击事件
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM user_command  USING r_ucomm LIKE sy-ucomm
                           rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&IC1'.
*      CASE rs_selfield-sel_tab_field.
*        WHEN  'ITAB-VBELN'.
*          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
*          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*        WHEN  'ITAB2-VBELN'.
*          SET PARAMETER ID 'AUN' FIELD rs_selfield-value.
*          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
*      ENDCASE.
*    WHEN OTHERS.
  ENDCASE.

ENDFORM.                    "user_command