*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2019-06-26
*& Program Type : Report
*& Description : VMI库存发货与领用监控报表
*&---------------------------------------------------------------------*
REPORT ZMMR154C.
*&---------------------------------------------------------------------*
*& 包含 YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:EKPO,EKKO,EKET,MARC,KNA1.
TYPE-POOLS:SLIS,T001W.
"定义ALV输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA:TOPMAT LIKE CSTMAT .
DATA:DSTST LIKE CSDATA-XFELD .
DATA:STB LIKE STPOX OCCURS 0 WITH HEADER LINE .
DATA:MATCAT LIKE CSCMAT OCCURS 0 WITH HEADER LINE .
DATA:GT_MARD LIKE MARD OCCURS 0 WITH HEADER LINE .
DATA:GT_MSKA LIKE MSKA OCCURS 0 WITH HEADER LINE .
DATA:E_MT61D LIKE MT61D .
DATA:E_MDKP LIKE MDKP .
DATA:MDPSX LIKE MDPS OCCURS 0 WITH HEADER LINE .
DATA:MDEZX LIKE MDEZ OCCURS 0 WITH HEADER LINE .
DATA:MDSUX LIKE MDSU OCCURS 0 WITH HEADER LINE .
TYPES: BEGIN OF GTS_DATA,
KUNNR TYPE KNA1-KUNNR, "客户
NAME TYPE CHAR100, "客户名称
MATNR TYPE MARC-MATNR, "物料编码
MAKTX TYPE MAKT-MAKTX, "物料描述
KDMAT TYPE KNMT-KDMAT, "客户物料编码
KDMAT1 TYPE KNMT-KDMAT, "客户物料编码
WERKS TYPE MARC-WERKS, "工厂
CHARG TYPE MATDOC-CHARG, "批次
MENGE TYPE MATDOC-MENGE, "数量
MEINS TYPE MATDOC-MEINS, "单位
BWART TYPE MATDOC-BWART, "移动类型
MAHN1 TYPE EKPO-MAHN1, "到期天数
MENGE1 TYPE MATDOC-MENGE, "已领数量
MENGE2 TYPE MATDOC-MENGE, "未领数量
MENGE3 TYPE MATDOC-MENGE, "客户领用数
KATR4 TYPE CHAR10, "耗用期限
LAND1 TYPE ZTMM02-LAND1, "国家/地区代码
BUDAT TYPE MATDOC-BUDAT, "发货过账日期
ZYSSJ TYPE ZTMM02-ZYSSJ, "运输时间
DATUM TYPE DATUM, "到达客户处日期
KDAUF TYPE MATDOC-KDAUF, "SO
KDPOS TYPE MATDOC-KDPOS, "SO项目
VBELN_IM TYPE MATDOC-VBELN_IM, "DN
VBELP_IM TYPE MATDOC-VBELP_IM, "DN项目
ITM_KZGBE TYPE LIKP-ITM_KZGBE, "运输延期时间
MAHN2 TYPE EKPO-MAHN1, "运输延期时间
MENGE4 TYPE MATDOC-MENGE, "现有寄售库存
MENGE5 TYPE MATDOC-MENGE, "客户退货数
VKORG TYPE VBAK-VKORG, "销售组织
VTWEG TYPE VBAK-VTWEG, "分销渠道
BSTNK TYPE VBAK-BSTNK, "客户参考
WAERK TYPE VBAP-WAERK, "货币
NETWR TYPE VBRP-NETWR, "未领金额
NETWR_CNY TYPE VBRP-NETWR, "未领人民币金额
VBELN_YS TYPE VBRK-VBELN, "原始形式发票
VBELN_ZZ TYPE VBRK-VBELN, "最终形式发票
KDGRP TYPE KNVV-KDGRP, "客户组
BZIRK TYPE KNVV-BZIRK, "销售区域
BZTXT TYPE T171T-BZTXT , "销售区域
L_RATE TYPE P DECIMALS 4, "对人民币的汇率
ATWRT TYPE AUSP-ATWRT, "售后产品
KEY1 TYPE MATDOC-KEY1, "主键
KEY2 TYPE MATDOC-KEY2, "主键
KEY3 TYPE MATDOC-KEY3, "主键
KEY4 TYPE MATDOC-KEY4, "主键
KEY5 TYPE MATDOC-KEY5, "主键
KEY6 TYPE MATDOC-KEY6, "主键
CELLCOLOR TYPE LVC_T_SCOL, "单元格颜色
END OF GTS_DATA.
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA1 TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_SUB TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ALV TYPE TABLE OF GTS_DATA WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS: S_KUNNR FOR KNA1-KUNNR MODIF ID C1 . "客户编码
SELECT-OPTIONS: S_MATNR FOR MARC-MATNR MODIF ID C1 . "物料编码
SELECT-OPTIONS: S_WERKS FOR MARC-WERKS MODIF ID C1 . "工厂
SELECT-OPTIONS: S_MAHN1 FOR EKPO-MAHN1 MODIF ID C1 . "到期天数
PARAMETERS: CH_01 AS CHECKBOX DEFAULT 'X'. "只显示客户未领用数据>0
PARAMETERS: CH_02 AS CHECKBOX DEFAULT ''. "不包含售后产品
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
DATA LV_KNA1 TYPE KNA1 .
TYPES: BEGIN OF GTS_KONP,
KBETR TYPE KONP-KBETR,
KPEIN TYPE KONP-KPEIN,
KONWA TYPE KONP-KONWA,
KMEIN TYPE KONP-KMEIN,
DATAB TYPE A305-DATAB,
DATBI TYPE A305-DATBI,
END OF GTS_KONP.
DATA: LV_KONP TYPE GTS_KONP .
DATA: GT_KONP TYPE TABLE OF GTS_KONP .
DATA LV_LIPS TYPE LIPS .
DATA LV_KUNNR TYPE A305-KUNNR .
DATA LV_KUNNR1 TYPE A305-KUNNR .
DATA LV_KUNNR2 TYPE A305-KUNNR .
DATA LV_CHAR TYPE CHAR16 .
DATA GT_VBRK TYPE TABLE OF VBRK WITH HEADER LINE .
DATA GT_VBRK_F8 TYPE TABLE OF VBRK WITH HEADER LINE .
DATA IW_CELLCOLOR TYPE LVC_T_SCOL WITH HEADER LINE.
DATA TDID TYPE TABLE OF TDID WITH HEADER LINE .
DATA TLINE TYPE TABLE OF TLINE WITH HEADER LINE .
DATA TDNAME TYPE TDOBNAME .
DATA LV_TVKWZ TYPE TVKWZ .
DATA LV_KNMT TYPE KNMT .
DATA GT_KNMT TYPE TABLE OF KNMT WITH HEADER LINE.
DATA LV_OBJEK TYPE AUSP-OBJEK .
DATA GT_AUSP TYPE TABLE OF AUSP WITH HEADER LINE .
DATA GT_CAWNT TYPE TABLE OF CAWNT WITH HEADER LINE .
DATA: CW_RATE LIKE BAPI1093_0.
DATA: S_C_FACTOR TYPE P DECIMALS 3.
DATA: T_C_FACTOR TYPE P DECIMALS 3.
DATA: L_RATE TYPE P DECIMALS 4.
DATA: FACTOR TYPE P DECIMALS 3.
*根据选择条件的客户编码,物料编码,工厂到表MSKU取出批次CHARG,数量KULAB
CLEAR GT_DATA[].
SELECT
MSKU~KUNNR
MSKU~MATNR
MSKU~WERKS
MSKU~CHARG
MSKU~KULAB AS MENGE4
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM MSKU
WHERE MSKU~KUNNR IN S_KUNNR
AND MSKU~MATNR IN S_MATNR
AND MSKU~WERKS IN S_WERKS
AND MSKU~KULAB <> 0
.
*根据步骤1客户编码、物料、工厂、批次到表MATDOC取出移动类型=‘633’或'634' 寄售库存发货数量MENGE
*如移动类型为634时,数量乘以-1,按客户编码、物料、工厂、批次做数量汇总得到客户+物料+工厂+批次的寄售发货总数量
IF GT_DATA[] IS NOT INITIAL.
CLEAR GT_DATA1[].
SELECT
MATDOC~KEY1
MATDOC~KEY2
MATDOC~KEY3
MATDOC~KEY4
MATDOC~KEY5
MATDOC~KEY6
MATDOC~KUNNR
MATDOC~MATNR
MATDOC~WERKS
MATDOC~CHARG
MATDOC~BWART
MATDOC~MENGE
MATDOC~MEINS
INTO CORRESPONDING FIELDS OF TABLE GT_DATA1[]
FROM MATDOC
FOR ALL ENTRIES IN GT_DATA[]
WHERE MATDOC~KUNNR = GT_DATA-KUNNR
AND MATDOC~MATNR = GT_DATA-MATNR
AND MATDOC~WERKS = GT_DATA-WERKS
AND MATDOC~CHARG = GT_DATA-CHARG
AND MATDOC~BWART IN ( '633','634' )
.
ENDIF.
SORT GT_DATA BY KUNNR MATNR WERKS CHARG .
* GT_DATA1[] = GT_DATA[].
* DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING KUNNR MATNR WERKS CHARG.
CLEAR GT_ALV[] .
LOOP AT GT_DATA.
CLEAR GT_DATA-MENGE .
LOOP AT GT_DATA1 WHERE KUNNR = GT_DATA-KUNNR
AND MATNR = GT_DATA-MATNR
AND WERKS = GT_DATA-WERKS
AND CHARG = GT_DATA-CHARG
.
IF GT_DATA1-BWART = '634'.
GT_DATA1-MENGE = GT_DATA1-MENGE * -1 .
ENDIF.
GT_DATA-MENGE = GT_DATA-MENGE + GT_DATA1-MENGE .
CLEAR GT_DATA1.
ENDLOOP.
CLEAR LV_KNA1 .
SELECT SINGLE NAME1 NAME2 KATR4 LAND1 INTO CORRESPONDING FIELDS OF LV_KNA1 FROM KNA1
WHERE KUNNR = GT_DATA-KUNNR
.
GT_DATA-NAME = LV_KNA1-NAME1 && LV_KNA1-NAME2 .
GT_DATA-KATR4 = LV_KNA1-KATR4 .
GT_DATA-LAND1 = LV_KNA1-LAND1 .
SELECT SINGLE ZYSSJ INTO GT_DATA-ZYSSJ FROM ZTMM02
WHERE LAND1 = GT_DATA-LAND1
.
SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
WHERE MATNR = GT_DATA-MATNR
AND SPRAS = SY-LANGU
.
CLEAR GT_KNMT[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_KNMT[] FROM KNMT
WHERE MATNR = GT_DATA-MATNR
AND KUNNR = GT_DATA-KUNNR
AND KDMAT <> ''
.
SORT GT_KNMT[] BY ERDAT DESCENDING .
CLEAR GT_KNMT.
READ TABLE GT_KNMT INDEX 1 .
GT_DATA-KDMAT = GT_KNMT-KDMAT .
SPLIT GT_DATA-KDMAT AT '&' INTO GT_DATA-KDMAT GT_DATA-KDMAT1.
*KDMAT
**根据选择条件的客户编码,物料编码,工厂到表 MSKU 取出批次 CHARG ,数量 KULAB
* SELECT SINGLE KULAB INTO GT_DATA-MENGE4 FROM MSKU
* WHERE KUNNR = GT_DATA-KUNNR
* AND MATNR = GT_DATA-MATNR
* AND WERKS = GT_DATA-WERKS
* AND CHARG = GT_DATA-CHARG
* .
*根据步骤1的客户编码,物料,工厂,批次到表MATDOC取出特殊库存标识SOBKZ='W',移动类型=631,632,701,702,561,562 非互为冲销的寄售库存补充的物料凭证信息
*互为冲销凭证判断逻辑:( ( MATDOC~CANCELLED = '' AND MATDOC~SMBLN = '') OR ( MATDOC~CANCELLED = '' AND MATDOC~SMBLN <> '' AND MATDOC~CANCELLATION_TYPE = '1' ) )
CLEAR GT_DATA_SUB[].
SELECT KUNNR MATNR WERKS CHARG BWART MENGE MEINS BUDAT KDAUF KDPOS VBELN_IM VBELP_IM
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_SUB[] FROM MATDOC
WHERE KUNNR = GT_DATA-KUNNR
AND MATNR = GT_DATA-MATNR
AND WERKS = GT_DATA-WERKS
AND CHARG = GT_DATA-CHARG
AND SOBKZ = 'W'
AND BWART IN ( '561','562','631','632','701','702' )
AND ( ( MATDOC~CANCELLED = '' AND MATDOC~SMBLN = '') OR ( MATDOC~CANCELLED = '' AND MATDOC~SMBLN <> '' AND MATDOC~CANCELLATION_TYPE = '1' ) )
.
LOOP AT GT_DATA_SUB WHERE BWART = '562'
OR BWART = '632'
OR BWART = '702'
.
* GT_DATA_SUB-MENGE = GT_DATA_SUB-MENGE * -1 .
GT_DATA-MENGE5 = GT_DATA-MENGE5 + GT_DATA_SUB-MENGE .
DELETE GT_DATA_SUB .
CLEAR GT_DATA_SUB.
ENDLOOP.
SORT GT_DATA_SUB[] BY KUNNR MATNR WERKS CHARG BUDAT .
LOOP AT GT_DATA_SUB.
IF GT_DATA-MENGE5 <> 0.
IF GT_DATA-MENGE5 >= GT_DATA_SUB-MENGE.
GT_DATA-MENGE5 = GT_DATA-MENGE5 - GT_DATA_SUB-MENGE .
DELETE GT_DATA_SUB[].
CLEAR GT_DATA_SUB .
CONTINUE.
ELSE.
GT_DATA_SUB-MENGE = GT_DATA_SUB-MENGE - GT_DATA-MENGE5 .
GT_DATA-MENGE5 = 0 .
ENDIF.
ENDIF.
CLEAR LV_LIPS.
SELECT SINGLE * INTO LV_LIPS FROM LIPS
WHERE VBELN = GT_DATA_SUB-VBELN_IM
AND POSNR = GT_DATA_SUB-VBELP_IM
.
IF LV_LIPS-UECHA IS NOT INITIAL .
GT_DATA_SUB-VBELP_IM = LV_LIPS-UECHA .
ENDIF.
SELECT SINGLE VKORG VTWEG BSTNK INTO CORRESPONDING FIELDS OF GT_DATA_SUB FROM VBAK
WHERE VBELN = GT_DATA_SUB-KDAUF
.
*GT_DATA_SUB-VKORG如为空,则通过工厂编码到表TVKWZ取得第一条数据的销售组织VKORG 、分销渠道VTWEG并赋值给GT_DATA_SUB。
IF GT_DATA_SUB-VKORG IS INITIAL.
SELECT SINGLE VKORG VTWEG INTO ( GT_DATA_SUB-VKORG , GT_DATA_SUB-VTWEG ) FROM TVKWZ
WHERE WERKS = GT_DATA_SUB-WERKS
.
ENDIF.
CLEAR LV_KNMT.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LV_KNMT FROM KNMT
WHERE KUNNR = GT_DATA_SUB-KUNNR
AND VKORG = GT_DATA_SUB-VKORG
AND VTWEG = GT_DATA_SUB-VTWEG
AND MATNR = GT_DATA_SUB-MATNR
.
IF LV_KNMT IS INITIAL.
CLEAR GT_KNMT.
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_KNMT[] FROM KNMT
WHERE KUNNR = GT_DATA_SUB-KUNNR
AND MATNR = GT_DATA_SUB-MATNR
.
SORT GT_KNMT[] BY ERDAT DESCENDING .
READ TABLE GT_KNMT INTO LV_KNMT INDEX 1 .
ENDIF.
CLEAR LV_OBJEK.
LV_OBJEK = LV_KNMT-VKORG && LV_KNMT-VTWEG && LV_KNMT-KUNNR .
LV_OBJEK+16(40) = LV_KNMT-MATNR .
CLEAR GT_AUSP.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_AUSP FROM AUSP
WHERE ATINN = '0000000825'"0000000823 ZCS_STAFF
AND KLART = '052'
AND OBJEK = LV_OBJEK
.
IF FLOOR( GT_AUSP-DEC_VALUE_FROM ) <> 0.
GT_DATA-KATR4 = FLOOR( GT_AUSP-DEC_VALUE_FROM ).
ENDIF.
*ATWRT_04
CLEAR GT_AUSP.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_AUSP FROM AUSP
WHERE ATINN = '0000000828'"0000000828 ZCS_STAFF
AND KLART = '052'
AND OBJEK = LV_OBJEK
.
GT_DATA-ATWRT = GT_AUSP-ATWRT.
GT_DATA_SUB-NAME = GT_DATA-NAME .
GT_DATA_SUB-KATR4 = GT_DATA-KATR4 .
GT_DATA_SUB-ATWRT = GT_DATA-ATWRT .
GT_DATA_SUB-LAND1 = GT_DATA-LAND1 .
GT_DATA_SUB-ZYSSJ = GT_DATA-ZYSSJ .
GT_DATA_SUB-MAKTX = GT_DATA-MAKTX .
GT_DATA_SUB-KDMAT = GT_DATA-KDMAT .
GT_DATA_SUB-MENGE4 = GT_DATA-MENGE4 .
SELECT SINGLE ITM_KZGBE INTO GT_DATA_SUB-ITM_KZGBE FROM LIKP
WHERE VBELN = GT_DATA_SUB-VBELN_IM
.
CONDENSE GT_DATA_SUB-ITM_KZGBE NO-GAPS .
IF CL_ABAP_MATCHER=>MATCHES(
PATTERN = '^(-?[1-9]\d*(\.\d*[1-9])?)|(-?0\.\d*[1-9])$'
TEXT = GT_DATA_SUB-ITM_KZGBE ) = ABAP_TRUE.
GT_DATA_SUB-MAHN2 = GT_DATA_SUB-ITM_KZGBE.
ELSE.
GT_DATA_SUB-MAHN2 = 0 .
ENDIF.
IF GT_DATA_SUB-BWART = '632' OR GT_DATA_SUB-BWART = '562' .
GT_DATA_SUB-MENGE = GT_DATA_SUB-MENGE * -1 .
ENDIF.
IF GT_DATA-MENGE >= GT_DATA_SUB-MENGE.
GT_DATA_SUB-MENGE1 = GT_DATA_SUB-MENGE .
GT_DATA_SUB-MENGE2 = 0 .
GT_DATA-MENGE = GT_DATA-MENGE - GT_DATA_SUB-MENGE .
GT_DATA_SUB-MENGE3 = GT_DATA-MENGE .
ELSE.
GT_DATA_SUB-MENGE1 = GT_DATA-MENGE .
GT_DATA_SUB-MENGE2 = GT_DATA_SUB-MENGE - GT_DATA-MENGE .
GT_DATA-MENGE = 0 .
GT_DATA_SUB-MENGE3 = GT_DATA-MENGE .
ENDIF.
GT_DATA_SUB-DATUM = GT_DATA_SUB-BUDAT + GT_DATA_SUB-ZYSSJ + GT_DATA_SUB-MAHN2.
IF GT_DATA_SUB-MENGE2 = 0.
GT_DATA_SUB-MAHN1 = 0 .
ELSE .
GT_DATA_SUB-MAHN1 = GT_DATA_SUB-DATUM + GT_DATA_SUB-KATR4 - SY-DATUM .
ENDIF.
* 根据物料MATNR、客户KUNNR、销售组织 VKORG ,分销渠道 VTWEG ,
* 条件类型KSCHL='ZP00'关联表 A305 ,KONP取出DATAB生效起始日期<=凭证日期AUDAT 且 DATBI截止日期>=凭证日期AUDAT
* 且删除标记LOEVM_KO等于空的第一条数据行净价KONP-KBETR、价格单位KONP-KPEIN,KONP-KONWA 为币别,
* 净价/价格单位更新GT_ALV数据行的净价 NETPR 、价格单位 KPEIN 、货币 WAERK
* , NETWR = 净价 NETPR /价格单位 KPEIN * KWMENG 数量
CLEAR LV_KUNNR.
CLEAR LV_KUNNR1.
CLEAR LV_KUNNR2.
CLEAR LV_CHAR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = GT_ALV-KUNNR
IMPORTING
OUTPUT = LV_KUNNR.
SPLIT LV_KUNNR AT '-' INTO LV_KUNNR1 LV_KUNNR2.
LV_CHAR = '%' && LV_KUNNR1 && '%' .
CLEAR LV_KONP.
SELECT SINGLE
KONP~KBETR
KONP~KPEIN
KONP~KONWA
KONP~KMEIN
A305~DATAB
A305~DATBI
INTO CORRESPONDING FIELDS OF LV_KONP
FROM KONP
INNER JOIN A305 ON KONP~KNUMH = A305~KNUMH
WHERE A305~MATNR = GT_DATA_SUB-MATNR
AND A305~KUNNR LIKE LV_CHAR
AND A305~VKORG = GT_DATA_SUB-VKORG
AND A305~VTWEG = GT_DATA_SUB-VTWEG
AND A305~KSCHL = 'ZP00'
AND A305~DATAB <= SY-DATUM
AND A305~DATBI >= SY-DATUM
AND KONP~LOEVM_KO = ''
.
IF SY-SUBRC = 0.
GT_DATA_SUB-WAERK = LV_KONP-KONWA .
*计算公式更改为:未领数量*单价/价格单位
IF LV_KONP-KPEIN * GT_DATA_SUB-MENGE2 <> 0.
GT_DATA_SUB-NETWR = LV_KONP-KBETR / LV_KONP-KPEIN * GT_DATA_SUB-MENGE2.
ENDIF.
ELSE.
CLEAR GT_KONP[].
SELECT
KONP~KBETR
KONP~KPEIN
KONP~KONWA
KONP~KMEIN
A305~DATAB
A305~DATBI
INTO CORRESPONDING FIELDS OF TABLE GT_KONP[]
FROM KONP
INNER JOIN A305 ON KONP~KNUMH = A305~KNUMH
WHERE A305~MATNR = GT_DATA_SUB-MATNR
AND A305~KUNNR LIKE LV_CHAR
AND A305~VKORG = GT_DATA_SUB-VKORG
AND A305~VTWEG = GT_DATA_SUB-VTWEG
AND A305~KSCHL = 'ZP00'
AND KONP~LOEVM_KO = ''
.
IF SY-SUBRC = 0.
SORT GT_KONP[] BY DATBI DESCENDING.
READ TABLE GT_KONP INTO LV_KONP INDEX 1 .
GT_DATA_SUB-WAERK = LV_KONP-KONWA .
*计算公式更改为:未领数量*单价/价格单位
IF LV_KONP-KPEIN * GT_DATA_SUB-MENGE2 <> 0.
GT_DATA_SUB-NETWR = LV_KONP-KBETR / LV_KONP-KPEIN * GT_DATA_SUB-MENGE2.
ENDIF.
ENDIF.
ENDIF.
IF 'CNY' <> GT_DATA_SUB-WAERK.
CLEAR CW_RATE.
CLEAR S_C_FACTOR.
CLEAR T_C_FACTOR.
CLEAR GT_DATA-L_RATE.
IF GT_DATA_SUB-WAERK <> 'EUR'.
*1. 获取汇率信息
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
EXPORTING
RATE_TYPE = 'M'
FROM_CURR = GT_DATA_SUB-WAERK
TO_CURRNCY = 'CNY'
DATE = SY-DATUM
IMPORTING
EXCH_RATE = CW_RATE.
*2. 获取转换因子
CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
EXPORTING
CURRENCY = GT_DATA_SUB-WAERK
IMPORTING
FACTOR = S_C_FACTOR.
CALL FUNCTION 'CURRENCY_CONVERTING_FACTOR'
EXPORTING
CURRENCY = 'CNY'
IMPORTING
FACTOR = T_C_FACTOR.
GT_DATA_SUB-L_RATE = CW_RATE-EXCH_RATE * ( CW_RATE-TO_FACTOR / CW_RATE-FROM_FACTOR ).
ELSE.
*1. 获取汇率信息
CALL FUNCTION 'BAPI_EXCHANGERATE_GETDETAIL'
EXPORTING
RATE_TYPE = 'EURX'
FROM_CURR = 'CNY'
TO_CURRNCY = GT_DATA_SUB-WAERK
DATE = SY-DATUM
IMPORTING
EXCH_RATE = CW_RATE.
GT_DATA_SUB-L_RATE = CW_RATE-EXCH_RATE_V .
ENDIF.
ELSE .
GT_DATA_SUB-L_RATE = 1 .
ENDIF.
GT_DATA_SUB-NETWR_CNY = GT_DATA_SUB-NETWR * GT_DATA_SUB-L_RATE .
*原始形式发票 根据DN+项目参考ZSDR012 884-918行程序获取
*最终形式发票
CLEAR GT_VBRK_F8[] .
SELECT
VBRK~VBELN
VBRK~FKDAT
VBRK~VBTYP
VBRK~FKART
INTO CORRESPONDING FIELDS OF TABLE GT_VBRK_F8[]
FROM VBRP
INNER JOIN VBRK ON VBRP~VBELN = VBRK~VBELN
WHERE VBRP~VGBEL = GT_DATA_SUB-VBELN_IM
AND VBRP~VGPOS = GT_DATA_SUB-VBELP_IM
AND VBRK~FKART = 'F8'
AND VBRK~FKSTO = ''
.
"最终形式发票
SORT GT_VBRK_F8[] BY VBELN DESCENDING.
CLEAR GT_VBRK_F8.
READ TABLE GT_VBRK_F8 INDEX 1 .
GT_DATA_SUB-VBELN_ZZ = GT_VBRK_F8-VBELN .
IF GT_DATA_SUB-VBELN_ZZ IS NOT INITIAL.
"原始形式发票
TDID = 'Z008'.
TDNAME = GT_DATA_SUB-VBELN_ZZ .
CLEAR TLINE[] .
CALL FUNCTION 'READ_TEXT'
EXPORTING
OBJECT = 'VBBK'
NAME = TDNAME
ID = TDID
LANGUAGE = 'E'
TABLES
LINES = TLINE
EXCEPTIONS
OBJECT = 1
ID = 2
LANGUAGE = 3
NAME = 4
NOT_FOUND = 5
REFERENCE_CHECK = 6.
IF TLINE[] IS NOT INITIAL.
LOOP AT TLINE.
GT_DATA_SUB-VBELN_YS = GT_DATA_SUB-VBELN_YS && TLINE-TDLINE .
ENDLOOP.
ENDIF.
ENDIF.
IF GT_DATA_SUB-MAHN1 < 0.
IW_CELLCOLOR-FNAME = 'MAHN1'.
IW_CELLCOLOR-COLOR-COL = 6.
IW_CELLCOLOR-COLOR-INT = 0.
IW_CELLCOLOR-COLOR-INV = 0.
APPEND IW_CELLCOLOR TO GT_DATA_SUB-CELLCOLOR.
ENDIF.
SELECT SINGLE KDGRP INTO GT_DATA_SUB-KDGRP FROM KNVV
WHERE KUNNR = GT_DATA_SUB-KUNNR
.
CLEAR LV_TVKWZ .
SELECT SINGLE * INTO LV_TVKWZ FROM TVKWZ
WHERE WERKS = GT_DATA_SUB-WERKS
.
SELECT SINGLE
KNVV~BZIRK
T171T~BZTXT
INTO CORRESPONDING FIELDS OF GT_DATA_SUB
FROM KNVV
INNER JOIN T171T ON KNVV~BZIRK = T171T~BZIRK
WHERE KUNNR = GT_DATA_SUB-KUNNR
AND VKORG = LV_TVKWZ-VKORG
.
APPEND GT_DATA_SUB TO GT_ALV[] .
CLEAR GT_DATA_SUB .
ENDLOOP.
MODIFY GT_DATA TRANSPORTING MENGE .
CLEAR GT_DATA .
ENDLOOP.
DELETE GT_ALV[] WHERE MAHN1 NOT IN S_MAHN1.
IF CH_01 IS NOT INITIAL.
DELETE GT_ALV[] WHERE MENGE2 <= 0 .
ENDIF.
IF CH_02 IS NOT INITIAL.
DELETE GT_ALV[] WHERE ATWRT IS NOT INITIAL .
ENDIF.
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-INFO_FIELDNAME = 'CLR'. "行颜色代码的字段
S_LAYOUT-COLTAB_FIELDNAME = 'CELLCOLOR'. "单元格颜色内表字段
* s_layout-box_fieldname = 'BOX'.
PERFORM FRM_FILL_FIELD .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IS_LAYOUT = S_LAYOUT
IT_FIELDCAT = GT_FIELDCAT
I_CALLBACK_PROGRAM = SY-REPID
I_SAVE = 'A'
* 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_ALV[].
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 = 'MSLJH' OR WA_FIELDCAT-FIELDNAME = 'WCBJH'.
* WA_FIELDCAT-EMPHASIZE = 'C600'. "设置字段的颜色
* ENDIF.
*
* IF WA_FIELDCAT-FIELDNAME = 'MSLMB' OR WA_FIELDCAT-FIELDNAME = 'WCBMB'.
* WA_FIELDCAT-EMPHASIZE = 'C710'. "设置字段的颜色
* ENDIF.
IF WA_FIELDCAT-FIELDNAME = 'PLNBEZ' OR WA_FIELDCAT-FIELDNAME = 'MATNR' .
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 = 'KUNNR' .
WA_FIELDCAT-REF_TABNAME = 'KNA1'.
WA_FIELDCAT-REF_FIELDNAME = 'KUNNR'.
ENDIF.
APPEND WA_FIELDCAT TO GT_FIELDCAT.
CLEAR WA_FIELDCAT.
END-OF-DEFINITION.
FILL_FIELD :
'KUNNR' '客户',
'NAME' '客户名称',
'MATNR' '物料编码',
'MAKTX' '物料描述',
'KDMAT' '客户物料编码',
'WERKS' '工厂',
'CHARG' '批次',
'MENGE' '剩余发货数量',
'MEINS' '单位',
'BWART' '移动类型',
'MAHN1' '到期天数',
'MENGE1' '已领数量',
'MENGE2' '未领数量',
* 'MENGE3' '客户领用数',
* 'MENGE4' '现有寄售库存',
'BSTNK' '客户参考',
'KATR4' '耗用期限',
'ATWRT' '售后产品',
'LAND1' '国家/地区代码',
'BUDAT' '发货过账日期',
'ZYSSJ' '运输时间',
'DATUM' '到达客户处日期',
'KDAUF' 'SO',
'KDPOS' 'SO项目',
'WAERK' '币别',
'NETWR' '未领金额',
'NETWR_CNY' '未领人民币金额',
'KDGRP' '客户组',
'BZTXT' '销售区域',
'VBELN_YS' '原始形式发票',
'VBELN_ZZ' '最终形式发票',
'MAHN2' '运输延期时间',
'VBELN_IM' 'DN',
'VBELP_IM' 'DN项目'.
ENDFORM.
FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.
FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
IS_SELFIELD TYPE SLIS_SELFIELD.
DATA: REF TYPE REF TO CL_GUI_ALV_GRID.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_MATNR FOR MARA-MATNR.
DATA:L_BUKRS TYPE T001K-BUKRS.
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'."表示双击
WHEN 'POST_T'.
ENDCASE.
CALL METHOD REF->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
ENDFORM.
INITIALIZATION .
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA .
PERFORM FRM_DISPLAY.
开发笔记-VMI库存发货与领用监控报表
最新推荐文章于 2024-11-14 08:47:07 发布