SD-客户寄售库存在途数及天数报表(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZSDR011
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-10-06
*& Program Type        :  Report
*& Description         :  客户寄售库存在途数及天数报表
*&---------------------------------------------------------------------*
REPORT ZSDR011.

TABLES:LIKP,VBAK,LIPS.

TYPE-POOLS:SLIS,T001W,ICON.
DATA OK_CODE         TYPE SY-UCOMM.
DATA OK_SAVE         TYPE SY-UCOMM.
"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATALS_STYLE TYPE LVC_S_STYL,
      LT_STYLE TYPE TABLE OF LVC_S_STYL.

TYPESBEGIN OF GTS_DATA,
         KUNNR TYPE  LIKP-KUNNR,                      "客户
         NAME1 TYPE  KNA1-NAME1,                      "客户名称
         MATNR TYPE  LIPS-MATNR,                      "物料
         MAKTX TYPE  MAKT-MAKTX,                      "物料描述
         WERKS TYPE  LIPS-WERKS,                      "工厂
         KULAB TYPE  MSKU-KULAB,                      "非限制库存总数
         LFIMG TYPE  LIPS-LFIMG,                      "在途总数
         VRKME TYPE  LIPS-VRKME,                      "单位
         VBELN TYPE  VBAK-VBELN,                      "销售凭证
         KUNFK TYPE  VBAK-KUNNR,                      "付款放
       END OF GTS_DATA.

TYPESBEGIN OF GTS_DATA_SUB,
         VBELN TYPE  LIPS-VBELN,                      "DN编号
         DATUM TYPE  ZTSD_ST03-DATUM,                 "计划到货日期
         KUNNR TYPE  LIKP-KUNNR,                      "客户
         NAME1 TYPE  KNA1-NAME1,                      "客户名称
         MATNR TYPE  LIPS-MATNR,                      "物料
         MAKTX TYPE  MAKT-MAKTX,                      "物料描述
         WERKS TYPE  LIPS-WERKS,                      "工厂
         LFIMG TYPE  LIPS-LFIMG,                      "在途总数
         VRKME TYPE  LIPS-VRKME,                      "单位
         WADAT TYPE  LIKP-WADAT,                      "DN单的计划发货日期
         ZTDAT TYPE  CHAR12,                          "在途天数
       END OF GTS_DATA_SUB.

DATAGT_DATA     TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA1    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA2    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_SUB TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.
DATAGT_DATA_A   TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.
DATAGT_DATA_B   TYPE TABLE OF GTS_DATA_SUB WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONSS_KUNSD  FOR   LIKP-KUNNR      MODIF ID MXY .                          "客户(售达方)
SELECT-OPTIONSS_KUNFK  FOR   VBAK-KUNNR      MODIF ID MXY .                          "客户(付款方)
SELECT-OPTIONSS_MATNR  FOR   LIPS-MATNR      MODIF ID MXY .                          "物料
SELECT-OPTIONSS_VKORG  FOR   VBAK-VKORG      MODIF ID MXY .                          "销售组织
SELECT-OPTIONSS_WERKS  FOR   LIPS-WERKS      MODIF ID MXY .                          "工厂
SELECT-OPTIONSS_WADAT  FOR   LIKP-WADAT_IST  MODIF ID MXY .                          "发货过账日期
SELECT-OPTIONSS_AUART  FOR   VBAK-AUART      MODIF ID MXY DEFAULT 'KB'.              "订单类型
SELECTION-SCREEN END OF BLOCK B2.

*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA GT_MSKU TYPE TABLE OF MSKU WITH HEADER LINE .
*  1.先找出满足所有查询条件的DN单信息(主表:LIPS)
  CLEAR GT_DATA[] .
  SELECT
    LIKP~KUNNR
    LIPS
~MATNR
    LIPS
~WERKS
    LIPS
~VRKME
    VBAK
~VBELN
  
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
    
FROM LIPS
    INNER 
JOIN LIKP ON LIPS~VBELN LIKP~VBELN
    INNER 
JOIN VBAK ON LIPS~KDAUF VBAK~VBELN
    
WHERE LIKP~KUNNR IN S_KUNSD
*      AND VBAK~KUNNR IN S_KUNFK
      AND LIPS~MATNR IN S_MATNR
      
AND VBAK~VKORG IN S_VKORG
      
AND LIPS~WERKS IN S_WERKS
      
AND LIKP~WADAT_IST IN S_WADAT
      
AND VBAK~AUART IN S_AUART
      
.

*  2.  客户(售达方) + 物料 + 工厂 的查询条件找出客户寄售库存信息(主表:MSKU
  CLEAR GT_DATA1[] .
  SELECT KUNNR WERKS MATNR  INTO CORRESPONDING FIELDS OF TABLE GT_DATA1[] FROM MSKU
*    WHERE SOBKZ = 'W'
    WHERE KUNNR IN S_KUNSD
      
AND WERKS IN S_WERKS
      
AND MATNR IN S_MATNR
      
.
  LOOP AT GT_DATA1.
    SELECT SINGLE MEINS AS VRKME INTO CORRESPONDING FIELDS OF GT_DATA1 FROM MARA
      
WHERE MATNR GT_DATA1-MATNR.
    MODIFY GT_DATA1.
    CLEAR GT_DATA1.
  ENDLOOP.

*  3. 客户(售达方) + 物料 + 工厂,并且 计划到货日期 > 当天日期的 ZZZZ表信息(主表:ZZZZ表)
  CLEAR GT_DATA2[] .
  SELECT KUNNR WERKS MATNR VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA2[] FROM ZTSD_ST03
    
WHERE KUNNR IN S_KUNSD
      
AND WERKS IN S_WERKS
      
AND MATNR IN S_MATNR
      
AND DATUM > SY-DATUM
      
.
  APPEND LINES OF GT_DATA1[] TO GT_DATA[] .
  APPEND LINES OF GT_DATA2[] TO GT_DATA[] .
  SORT GT_DATA[] BY KUNNR WERKS MATNR .
  DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING KUNNR WERKS MATNR.

  LOOP AT GT_DATA.
    SELECT SINGLE KUNNR INTO GT_DATA-KUNFK FROM VBPA
      
WHERE VBPA~VBELN GT_DATA-VBELN
        
AND VBPA~PARVW 'AG'
        .
    IF GT_DATA-KUNFK IN S_KUNFK.
      SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
        
WHERE KUNNR GT_DATA-KUNNR
        
.
      SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
        
WHERE MATNR GT_DATA-MATNR
        
.

*相同客户+工厂+物料 的非限制客户寄售库存(特殊库存W 汇总数msku-KULAB
      CLEAR GT_MSKU[] .
      SELECT KULAB INTO CORRESPONDING FIELDS OF TABLE GT_MSKU[] FROM MSKU
        
WHERE SOBKZ 'W'
          AND KUNNR GT_DATA-KUNNR
          
AND WERKS GT_DATA-WERKS
          
AND MATNR GT_DATA-MATNR
          
.
      LOOP AT GT_MSKU.
        GT_DATA-KULAB GT_DATA-KULAB + GT_MSKU-KULAB .
        CLEAR GT_MSKU .
      ENDLOOP.


*1.已发货过账的DNLIKP-WBSTK = C),
*  并且 DN单的计划发货日期大于当天(LIKP-WADAT  sy-datum),
*  相同客户+物料+工厂的DN 交货数的总和(lips-LFIMG
      CLEAR GT_DATA_SUB[] .
      SELECT
        LIKP~KUNNR
        LIPS
~MATNR
        LIPS
~WERKS
        LIPS
~VRKME
        LIPS
~VBELN
        LIPS
~LFIMG
        LIKP
~WADAT
      
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_SUB[]
        
FROM LIPS
        INNER 
JOIN LIKP ON LIPS~VBELN LIKP~VBELN
        
WHERE LIKP~WBSTK 'C'
          AND LIKP~KUNNR GT_DATA-KUNNR
          
AND LIPS~MATNR GT_DATA-MATNR
          
AND LIPS~WERKS GT_DATA-WERKS
          
AND LIKP~WADAT > SY-DATUM
          
.
      LOOP AT GT_DATA_SUB.
        GT_DATA-LFIMG GT_DATA-LFIMG + GT_DATA_SUB-LFIMG .
        CLEAR GT_DATA_SUB .
      ENDLOOP.

*2.自定义客户库存在途期初表,相同客户+物料+工厂的,并且客户计划到货日期大于当天的 数量(ZZZZ-数量)
      CLEAR GT_DATA_SUB[] .
      SELECT KUNNR WERKS MATNR DATUM LFIMG VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA_SUB[] FROM ZTSD_ST03
        
WHERE KUNNR GT_DATA-KUNNR
          
AND WERKS GT_DATA-MATNR
          
AND MATNR GT_DATA-WERKS
          
AND DATUM > SY-DATUM
          
.
      LOOP AT GT_DATA_SUB.
        GT_DATA-LFIMG GT_DATA-LFIMG + GT_DATA_SUB-LFIMG .
        CLEAR GT_DATA_SUB .
      ENDLOOP.

      MODIFY GT_DATA.
    ELSE.
      DELETE GT_DATA.
    ENDIF.
    CLEAR GT_DATA.
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  S_LAYOUT-COLTAB_FIELDNAME 'CELLCOLOR'"单元格颜色内表字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_SAVE                   'A'
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.

    IF WA_FIELDCAT-FIELDNAME =  'CKBOX' .
      WA_FIELDCAT-CHECKBOX 'X'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME =  'MENGE_T' .
      WA_FIELDCAT-REF_TABNAME 'AUFM'.
      WA_FIELDCAT-REF_FIELDNAME 'MENGE'.
      WA_FIELDCAT-OUTPUTLEN '13'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME =  'LGORT_T' .
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ'
       OR WA_FIELDCAT-FIELDNAME 'MATNR'
       OR WA_FIELDCAT-FIELDNAME 'MATNRT'
      .
      WA_FIELDCAT-REF_TABNAME 'MARA'.
      WA_FIELDCAT-REF_FIELDNAME 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABNAME 'VBAP'.
      WA_FIELDCAT-REF_FIELDNAME 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'AUFNR' .
      WA_FIELDCAT-REF_TABNAME 'AUFK'.
      WA_FIELDCAT-REF_FIELDNAME 'AUFNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'BLDAT'
       OR WA_FIELDCAT-FIELDNAME 'BUDAT'
      .
      WA_FIELDCAT-REF_TABNAME 'MATDOC'.
      WA_FIELDCAT-REF_FIELDNAME 'BLDAT'.
*      WA_FIELDCAT-EDIT = 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'MESSAGE' .
      WA_FIELDCAT-OUTPUTLEN '100'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'TYPBO'
     OR WA_FIELDCAT-FIELDNAME 'TYPAI'
      .
      WA_FIELDCAT-ICON 'X'.
      WA_FIELDCAT-OUTPUTLEN '13'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.

  FILL_FIELD :
     'WERKS'       '工厂',
     'KUNNR'       '客户',
     'NAME1'       '客户名称',
     'MATNR'       '物料',
     'MAKTX'       '物料描述',
     'KULAB'       '非限制库存总数',
     'LFIMG'       '在途总数',
     'VRKME'       '单位'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN1'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.
  DATAS_TABLE  TYPE TABLE OF RSPARAMS WITH HEADER LINE.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN '&IC1'."表示双击
      IF IS_SELFIELD-FIELDNAME =  'KULAB' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_DATA .
        READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
        CLEAR S_TABLE[].
        CLEAR S_TABLE.
        S_TABLE-SELNAME 'MATNR'.
        S_TABLE-SIGN 'I' .
        S_TABLE-OPTION 'EQ' .
        S_TABLE-LOW GT_DATA-MATNR.
        APPEND S_TABLE TO S_TABLE[].
        CLEAR S_TABLE.
        S_TABLE-SELNAME 'WERKS'.
        S_TABLE-SIGN 'I' .
        S_TABLE-OPTION 'EQ' .
        S_TABLE-LOW GT_DATA-WERKS.
        APPEND S_TABLE TO S_TABLE[].
        CLEAR S_TABLE.
        S_TABLE-SELNAME 'KUNNR'.
        S_TABLE-SIGN 'I' .
        S_TABLE-OPTION 'EQ' .
        S_TABLE-LOW GT_DATA-KUNNR.
        APPEND S_TABLE TO S_TABLE[].
        SUBMIT RM07MKON  WITH SELECTION-TABLE S_TABLE AND RETURN.
      ELSEIF IS_SELFIELD-FIELDNAME =  'LFIMG' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_DATA .
        READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
        CLEAR GT_DATA_A[] .
        SELECT
          LIKP~KUNNR
          LIPS
~MATNR
          LIPS
~WERKS
          LIPS
~VRKME
          LIPS
~VBELN
          LIPS
~LFIMG
          LIKP
~WADAT
        
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[]
          
FROM LIPS
          INNER 
JOIN LIKP ON LIPS~VBELN LIKP~VBELN
          
WHERE LIKP~WBSTK 'C'
            AND LIKP~KUNNR GT_DATA-KUNNR
            
AND LIPS~MATNR GT_DATA-MATNR
            
AND LIPS~WERKS GT_DATA-WERKS
            
AND LIKP~WADAT > SY-DATUM
            
.
        LOOP AT GT_DATA_A.
          SELECT SINGLE NAME1 INTO GT_DATA_A-NAME1 FROM KNA1
            
WHERE KUNNR GT_DATA_A-KUNNR
            
.
          SELECT SINGLE MAKTX INTO GT_DATA_A-MAKTX FROM MAKT
            
WHERE MATNR GT_DATA_A-MATNR
            
.
          GT_DATA_A-ZTDAT GT_DATA_A-WADAT SY-DATUM .
          MODIFY GT_DATA_A .
          CLEAR GT_DATA_A .
        ENDLOOP.

        CLEAR GT_DATA_B[] .
        SELECT KUNNR WERKS MATNR DATUM LFIMG VRKME INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[] FROM ZTSD_ST03
          
WHERE KUNNR GT_DATA-KUNNR
            
AND WERKS GT_DATA-MATNR
            
AND MATNR GT_DATA-WERKS
            
AND DATUM > SY-DATUM
            
.
        LOOP AT GT_DATA_B.
          SELECT SINGLE NAME1 INTO GT_DATA_B-NAME1 FROM KNA1
            
WHERE KUNNR GT_DATA_B-KUNNR
            
.
          SELECT SINGLE MAKTX INTO GT_DATA_B-MAKTX FROM MAKT
            
WHERE MATNR GT_DATA_B-MATNR
            
.
          GT_DATA_B-ZTDAT GT_DATA_B-DATUM SY-DATUM .
          MODIFY GT_DATA_B .
          CLEAR GT_DATA_B .
        ENDLOOP.

        APPEND LINES OF GT_DATA_B[] TO GT_DATA_A[] .

        CALL SCREEN 0100 STARTING AT 3 3.

      ELSE .
        MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
      ENDIF.
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TBC_01' ITSELF
CONTROLSTBC_01 TYPE TABLEVIEW USING SCREEN 0100.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TBC_01_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_DATA_A LINES TBC_01-LINES.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'PF_0100'.
  SET TITLEBAR  'TITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
  LEAVE TO SCREEN .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  OK_SAVE SY-UCOMM .
  CLEAR SY-UCOMM .
  CLEAR OK_CODE .
  CASE  OK_SAVE.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.

START-OF-SELECTION.

  PERFORM FOM_GETDATA.
  PERFORM FRM_DISPLAY.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAP客户寄售业务配置是指在SAP系统中设置和配置相关参数和流程,以便管理和控制客户寄售业务的进行。 首先,配置客户寄售业务时需要设置相关的基础数据。这包括创建和维护供应商和客户的主数据,确保他们在系统中的正确记录和信息。此外还需要配置物料主数据,包括对寄售物料的定义,包括物料类型、描述、价格和供应商。 配置寄售订单流程也是一项重要任务。这包括定义和设置寄售订单类型,规定不同类型订单的特点和使用场景。同时还需要配置寄售订单的交货和发票过程,包括设置交货和发票文档类型,并设定相应的控制参数,例如交货时间窗口或发票付款条件。 客户寄售业务还涉及到库存管理方面的配置。在SAP系统中,需要设定寄售物料的库存类型和库存地点,以便在进行寄售交货时能正确更新库存数量和位置。此外还需要定义和设置动态库存发货点,以及确定寄售物料的库存托管和结算规则。 最后,为了完成寄售业务的全流程,还需要对相关的财务会计配置进行设置。这包括定义寄售物料的财务会计科目、成本中心、利润中心和业务伙伴,以确保在财务报表中能准确反映寄售业务的相关信息。 通过以上的SAP客户寄售业务的配置,企业可以有效地管理和控制客户寄售业务的进行,实现供需两端的协调和运作,并确保相关的财务会计准确和及时。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值