文档库 最新最全的文档下载
当前位置:文档库 › 采购跟踪报表

采购跟踪报表

*&---------------------------------------------------------------------*
*& Report ZTMM_RP0002
*& Report Name: 采购跟踪汇总报表 && 采购跟踪明细报表
*& Report Description: MM-16 采购跟踪汇总报表
*& T-Code: ZTM002
*&---------------------------------------------------------------------*
*& Created By: TTC Created On: 2012-08-01
*& Updated By: TTC Updated On: 2012-08-01
*&---------------------------------------------------------------------*
*101 采购收货
*102 收货冲销
*122 退货
*123 退货冲销

* ZPP04 销售单中不同颜色的物料的备注
* ZPP01 成衣DGNG物料排期表

REPORT ztmm_rp002.

TABLES:ekko,ekpo,lfa1,kna1,vbap,eban,eket,mkpf,mseg,ekes,ekbe,mara,ebkn,j_3abssi,ekkn,zmm02_p_c.
DATA:i_row TYPE i.
DATA: BEGIN OF wa_track OCCURS 0
,werks LIKE ekpo-werks "工厂
,lifnr LIKE ekko-lifnr "供应商编码
,sortl(30) "供应商名称
,adrnr LIKE lfa1-adrnr "供-地址号
,kunnr LIKE vbak-kunnr "客户编码
,cname TYPE kna1-name1 "客户名称
,c_adrnr LIKE kna1-adrnr "客-地址号
,vbeln LIKE eket-j_3auanr "销售单号
,posnr LIKE eket-j_3aupos "销售项目
,cpwlh(20) "成品物料号
,spart LIKE vbap-spart "产品类型
,ad_type LIKE vbap-ad_type"特别订单种类
,j_3arqda LIKE vbap-j_3arqda "SO交货期
,season LIKE vbap-season "季节
,ebeln LIKE ekpo-ebeln "采购订单
,ebelp LIKE ekpo-ebelp "采购订单项目号
,etenr LIKE eket-etenr "计划行号
,ekgrp LIKE ekko-ekgrp "采购组
,matkl LIKE ekpo-matkl "物料组
,matnr LIKE mara-matnr "物料号
,txz01 LIKE ekpo-txz01 "物料描述
,j_3apgnr LIKE ekpo-j_3apgnr "物料网格编号
,j_3alfnr LIKE j_3apgtx-j_3alfnr "文本号码
,j_3abezg LIKE j_3apgtx-j_3abezg "特征名称
,j_3asize LIKE eket-j_3asize "网格值
,atwtb LIKE cawnt-atwtb "网格值描述
,menge_p TYPE p DECIMALS 2"需采购数量(PR)
,meins_p(10) "基本单位
,menge LIKE eket-menge "采购数量
,meins(10) "订单单位
,bedat LIKE ekko-bedat "采购订单凭证日期
,eindt LIKE eket-eindt "要求供应商交货期
,bldat LIKE mkpf-bldat "实际到料日期
,frbnr LIKE mkpf-frbnr "提货单
,xblnr LIKE mkpf-xblnr "交货单
,wemng LIKE eket-wemng "实际收货总数(该PO分拆批次号,每个批次的总数量)
,grqty LIKE eket-wemng "实际到料总数
,qty_ql TYPE i "实际欠料数(采购数量减去实际到料总数)
,qty_tl1 TYPE i "101欠料数
,qty_tl2 TYPE i "102欠料数
,qty_tl TYP

E i "退料记录(该PO某个项目退
货的数量)
,mjahr LIKE mseg-mjahr "年度
,erdat LIKE ekes-erdat "供应商第一次确认交期(供应商回复交货期【旧的值】)
,edate LIKE ekes-eindt "供应商最新确认交期
,wljd(256) "物料进度
,bednr LIKE ekpo-bednr "需求跟踪号(申请部门)
,afnam LIKE eban-afnam "申请人
,j_3aebs LIKE mseg-j_3aebs"计划行
,bwart LIKE mseg-bwart "采购类型
,banfn LIKE eket-banfn "采购申请编号
,bnfpo LIKE eket-bnfpo "采购申请项目
,mails_times LIKE zmm02_p_c-mails_times "PO发送
,datum LIKE zmm02_p_c-datum"PO发送日期
,uzeit LIKE zmm02_p_c-uzeit"PO发送时间
,qty_kc LIKE ekbe-bpmng "扣库存
,END OF wa_track.

DATA: BEGIN OF wa_track2 OCCURS 0
,werks LIKE ekpo-werks "工厂
,ebeln LIKE ekpo-ebeln "采购订单
,ebelp LIKE ekpo-ebelp "采购订单项目
,matkl LIKE ekpo-matkl "物料组
,txz01 LIKE ekpo-txz01 "物料描述
,j_3apgnr LIKE ekpo-j_3apgnr"物料网格编号
,bednr LIKE ekpo-bednr "需求跟踪号(申请部门)
,lifnr LIKE ekko-lifnr "供应商编码
,bedat LIKE ekko-bedat "采购订单凭证日期
,ekgrp LIKE ekko-ekgrp "采购组
,vbeln LIKE eket-j_3auanr "销售单号
,posnr LIKE eket-j_3aupos "销售项目
,etenr LIKE eket-etenr "计划行号
,j_3asize LIKE eket-j_3asize"网格值
,menge LIKE eket-menge "采购数量
,banfn LIKE eket-banfn "采购申请编号
,bnfpo LIKE eket-bnfpo "采购申请的项目编号
,eindt LIKE eket-eindt "要求供应商交货期
,erdat LIKE ekes-erdat "供应商第一次确认交期(表CDPOS CDHDR
,edate LIKE ekes-eindt "供应商最新确认交期
,s_menge LIKE ekes-menge "确认交货数量
,dabmg LIKE ekes-dabmg "减少数量
,frbnr LIKE mkpf-frbnr "提货单
,xblnr LIKE mkpf-xblnr "交货单
,charg LIKE ekbe-charg "批次号
,bpmng LIKE ekbe-menge "实际到料数
,spmng LIKE ekbe-bpmng "实际到料总数
,belnr LIKE ekbe-belnr "退货凭证号
,gjahr LIKE ekbe-gjahr "年度
,j_3aebsp LIKE ekbe-j_3aebsp"计划行
,bwart LIKE ekbe-bwart "采购类型
,budat LIKE ekbe-budat "实际到料日期
,etens LIKE ekbe-etens "供应商确认的顺序编号
,elikz LIKE ekbe-elikz "交货已完成
,j_3alfnr LIKE j_3apgtx-j_3alfnr "文本号码
,j_3abezg LIKE j_3apgtx-j_3abezg "特征名称
,cname TYPE kna1-name1 "客户名称
,c_adrnr LIKE kna1-adrnr "客-地址号
,spart LIKE vbap-spart "产品类型
,ad_type LIKE vbap-ad_type"特别订单种类
,j_3arqda LIKE vbap-j_3arqda "SO交货期
,season LIKE vbap-se

ason "季节
,ghno(20)
"缸号
,state_qi(20) "QI状态
* ,qty_ql TYPE i "实际欠料数(采购数量减去实际到料总数)
,qty_tl1 TYPE i "退料1
,qty_tl2 TYPE i "退料2
,qty_tl TYPE i "退料记录(该PO某个项目退货的数量)
,matnr LIKE mara-matnr "物料号
,atwtb LIKE cawnt-atwtb "网格值描述
,adrnr LIKE lfa1-adrnr "供-地址号
,kunnr LIKE vbak-kunnr "客户编码
,afnam LIKE eban-afnam "申请人
,menge_p TYPE p DECIMALS 2"需采购数量(PR)
,meins_p(10) "基本单位
,meins(10) "订单单位
,wljd(256) "物料进度
,sortl(30) "供应商名称
,cpwlh(20) "成品物料号
,mails_times LIKE zmm02_p_c-mails_times "PO发送
,datum LIKE zmm02_p_c-datum"PO发送日期
,uzeit LIKE zmm02_p_c-uzeit"PO发送时间
,qty_hg LIKE ekbe-bpmng "合格数量
,qty_bhg LIKE ekbe-bpmng "不合格数量
,frgsx LIKE ekko-frgsx "审批策略
,frgzu LIKE ekko-frgzu "批准状态
,END OF wa_track2.

DATA: g_tline LIKE TABLE OF tline WITH HEADER LINE.
DATA: g_tdname LIKE stxh-tdname
,g_text TYPE string.
DATA:it_stxh LIKE stxh.

DATA:wa_barcode LIKE bapi1003_alloc_list OCCURS 0 WITH HEADER LINE,
wa_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA:wa_sclass LIKE sclass OCCURS 0 WITH HEADER LINE,
wa_clobjdat LIKE clobjdat OCCURS 0 WITH HEADER LINE.
DATA: g_value1 LIKE bapi1003_key-object.

SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME TITLE text-002.
PARAMETER:
r1 RADIOBUTTON GROUP grp DEFAULT 'X',
r2 RADIOBUTTON GROUP grp.
SELECTION-SCREEN END OF BLOCK bl .
*SELECTION-SCREEN SKIP .
SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_werks FOR ekpo-werks,
s_kunnr FOR ekpo-kunnr,
s_vbeln FOR vbap-vbeln,
s_posnr FOR vbap-posnr, "销售项目
s_ebeln FOR ekpo-ebeln,
s_lifnr FOR ekko-lifnr,
s_matnr FOR mara-matnr,
s_ekgrp FOR ekko-ekgrp,
s_matkl FOR mara-matkl,
s_jsize FOR eket-j_3asize,
s_bedat FOR ekko-bedat, "订单凭证日期
s_eindt FOR eket-eindt, "要求供应商交货期
s_edate FOR ekes-eindt. "供应商确认交货期
SELECTION-SCREEN END OF BLOCK bl2 .

TYPE-POOLS slis.
DATA: g_repid LIKE sy-repid,
g_callback_pf_status TYPE slis_formname VALUE 'PF_STATUS',
g_callback_usercommand TYPE slis_formname VALUE 'USER_COMM',
gt_fieldcat TYPE slis_t_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
gt_event TYPE slis_t_event,
wa_event TYPE slis_alv_event,
gt_selfield TYPE slis_selfield OCCURS 0,
l_layout TYPE slis_layout_alv.

AT SELECTION-SCREEN.
IF s_werks IS INITIAL.
MESSAGE e000(ztmsg).
ENDIF.

START-OF-SELECTION.
CALL FUNCTION 'SAPGUI_PROGRESS

_INDICATOR'
EXPORTING
percentage
= 0
text = '报表正在查询中!请稍等...'.

IF r1 EQ 'X'.
PERFORM get_data.
PERFORM process_data.
PERFORM build_field.
ELSEIF r2 EQ 'X'.
PERFORM get_data2.
PERFORM process_data2.
PERFORM build_field2.
ENDIF.

END-OF-SELECTION.
IF r1 EQ 'X'.
PERFORM display_data.
ELSEIF r2 EQ 'X'.
PERFORM display_data2.
ENDIF.

*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data . "采购汇总表

IF s_vbeln NP ''. "销售单号
SELECT eket~eindt eket~menge eket~etenr eket~j_3asize eket~wemng eket~banfn eket~bnfpo
ekpo~werks ekpo~ebeln ekpo~ebelp ekpo~txz01 ekpo~j_3apgnr ekpo~bednr ekpo~matnr ekpo~meins
ekko~lifnr ekko~ekgrp ekpo~matkl ekko~bedat
ekkn~vbeln ekkn~vbelp AS posnr
lfa1~sortl lfa1~adrnr
vbak~kunnr
ekbe~belnr AS mblnr ekbe~gjahr AS mjahr ekbe~j_3aebsp AS j_3aebs ekbe~bwart
eban~afnam
zmm02_p_c~mails_times zmm02_p_c~datum zmm02_p_c~uzeit
INTO CORRESPONDING FIELDS OF TABLE wa_track
FROM eket
INNER JOIN ekpo ON ekpo~ebeln = eket~ebeln AND ekpo~ebelp = eket~ebelp
INNER JOIN ekko ON ekko~ebeln = eket~ebeln
INNER JOIN ekkn ON ekkn~ebeln = ekpo~ebeln AND ekkn~ebelp = ekpo~ebelp
LEFT JOIN zmm02_p_c ON zmm02_p_c~ebeln = ekpo~ebeln
LEFT JOIN lfa1 ON lfa1~lifnr = ekko~lifnr
LEFT JOIN vbak ON vbak~vbeln = ekkn~vbeln
LEFT JOIN eban ON eban~ebeln = ekpo~ebeln AND eban~ebelp = ekpo~ebelp
LEFT JOIN ekbe ON ekbe~ebeln = eket~ebeln AND ekbe~ebelp = eket~ebelp
AND ekbe~j_3aebsp = eket~etenr AND ekbe~bwart = '101'
WHERE ekpo~loekz <> 'L' "删除标识不显示
* AND ekpo~mtart IN ('ZROH','ZR01','ZR02','ZR03','VERP','ZCSM') "物料类型 "放开物料类型控制20121115

AND ekpo~werks IN s_werks
AND ekpo~ebeln IN s_ebeln
AND ekko~lifnr IN s_lifnr
AND ekpo~matnr IN s_matnr
AND ekko~ekgrp IN s_ekgrp
AND ekpo~matkl IN s_matkl
AND eket~j_3asize IN s_jsize
AND ekko~bedat IN s_bedat
AND eket~eindt IN s_eindt
AND ekkn~vbeln IN s_vbeln .

IF s_posnr NP ''.
DELETE wa_track WHERE posnr NOT IN s_posnr. "销售项目
ENDIF.

ELSE.
SELECT eket~eindt eket~menge eket~etenr eket~j_3asize eket~wemng eket~banfn eket~bnfpo
ekpo~werks ekpo~ebeln ekpo~ebelp ekpo~txz01 ekpo~j_3apgnr ekpo~bednr ekpo~matnr ekpo~meins
ekko~lifnr ekko~ekgrp ekpo~matkl ekko~bedat
ekkn~vbeln ekkn~vbelp AS posnr
lfa1~sortl lfa1~adrnr
ekbe~belnr AS mblnr ekbe~gjahr AS mjahr ekbe~j_3aebsp AS j_3aebs ekbe~bwart
eban~afnam
zmm02_p_c~mails_times zmm02_p_c~datum zmm02_p_c~uzeit
INTO CORRESPONDING FIELDS OF TABLE wa_track
FROM eket
INNER JOIN ekpo ON ekpo~e

beln = eket~ebeln AND e
kpo~ebelp = eket~ebelp
INNER JOIN ekko ON ekko~ebeln = eket~ebeln
LEFT JOIN zmm02_p_c ON zmm02_p_c~ebeln = ekpo~ebeln
LEFT JOIN ekkn ON ekkn~ebeln = ekpo~ebeln AND ekkn~ebelp = ekpo~ebelp
LEFT JOIN lfa1 ON lfa1~lifnr = ekko~lifnr
LEFT JOIN eban ON eban~ebeln = ekpo~ebeln AND eban~ebelp = ekpo~ebelp
LEFT JOIN ekbe ON ekbe~ebeln = eket~ebeln AND ekbe~ebelp = eket~ebelp
AND ekbe~j_3aebsp = eket~etenr AND ekbe~bwart = '101'
WHERE ekpo~mtart IN ('ZROH','ZR01','ZR02','ZR03','VERP','ZCSM') "物料类型
AND ekpo~loekz <> 'L' "删除标识不显示
AND ekpo~werks IN s_werks
AND ekpo~ebeln IN s_ebeln
AND ekko~lifnr IN s_lifnr
AND ekpo~matnr IN s_matnr
AND ekko~ekgrp IN s_ekgrp
AND ekpo~matkl IN s_matkl
AND eket~j_3asize IN s_jsize
AND ekko~bedat IN s_bedat
AND eket~eindt IN s_eindt.
ENDIF.

SORT wa_track BY werks ebeln matnr j_3asize.
DELETE ADJACENT DUPLICATES FROM wa_track.

ENDFORM. "GET_DATA

*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM process_data . "采购汇总表
DESCRIBE TABLE wa_track LINES i_row.

IF i_row > 0.
PERFORM get_customer_hz. "客户名称
PERFORM get_supplier_hz. "供应商名称
PERFORM get_skudesc_hz. "网络值描述
PERFORM get_spart_hz. "产品类型,要求交货日期,季节,特别订单种类
PERFORM get_po_unit_hz. "PO单位(采购订单)
PERFORM get_pr_unit_hz. "PR数量+PR单位
PERFORM get_cp_matrn_hz. "成品物料号
PERFORM get_ql_qty_hz. "实际欠料数
PERFORM get_tl_qty_hz. "退料数
PERFORM get_confirm_date. "供应商最新确认交期
PERFORM get_stock. "扣库存
***********************************************************
LOOP AT wa_track.
"实际收货数=到料总数+退料数
wa_track-grqty = wa_track-wemng + wa_track-qty_tl.

"PO发送
IF wa_track-mails_times <> ''.
wa_track-mails_times = '是'.
ELSE.
wa_track-mails_times = '否'.
ENDIF.

" 物料进度
CONCATENATE wa_track-ebeln wa_track-ebelp wa_track-etenr INTO g_tdname.
IF g_tdname <> ''.
PERFORM get_text USING g_tdname.
wa_track-wljd = g_text .
ENDIF.
MODIFY wa_track.
ENDLOOP.
ENDIF.

DELETE ADJACENT DUPLICATES FROM wa_track[].
DESCRIBE TABLE wa_track LINES i_row.
MESSAGE s000(oo) WITH '报表查询返回【'i_row'】条数据'.

ENDFORM. " PROCESS_DATA

*&---------------------------------------------------------------------*
*& Form get_stock


*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_stock. "扣库存
DATA:qty_kc1 TYPE p DECIMALS 3,
qty_kc2 TYPE p DECIMALS 3.

DATA: wa_mseg TYPE SORTED TABLE OF mseg
WITH UNIQUE KEY mblnr mjahr zeile WITH HEADER LINE.

DATA:BEGIN OF lt_mseg OCCURS 0,
matnr TYPE mseg-matnr,
kdauf TYPE mseg-kdauf,
kdpos TYPE mseg-kdpos,
END OF lt_mseg.

DESCRIBE TABLE wa_mseg LINES i_row.

IF i_row EQ 0.
LOOP AT wa_track.
lt_mseg-matnr = wa_track-matnr.
lt_mseg-kdauf = wa_track-vbeln.
lt_mseg-kdpos = wa_track-posnr.
COLLECT lt_mseg.
ENDLOOP.
SORT lt_mseg.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_mseg FROM mseg
FOR ALL ENTRIES IN lt_mseg WHERE matnr = lt_mseg-matnr
AND kdauf = lt_mseg-kdauf
AND kdpos = lt_mseg-kdpos.
ENDIF.

LOOP AT wa_track.
CLEAR:qty_kc1,qty_kc2.
LOOP AT wa_mseg WHERE matnr = wa_track-matnr
AND kdauf = wa_track-vbeln
AND kdpos = wa_track-posnr
AND ( bwart = '411' OR bwart = '413').
IF sy-subrc EQ 0.
qty_kc1 = qty_kc1 + wa_mseg-menge.
ENDIF.
ENDLOOP.

LOOP AT wa_mseg WHERE matnr = wa_track-matnr
AND kdauf = wa_track-vbeln
AND kdpos = wa_track-posnr
AND ( bwart = '412' OR bwart = '414').
IF sy-subrc EQ 0.
qty_kc2 = qty_kc2 + wa_mseg-menge.
ENDIF.
ENDLOOP.
wa_track-qty_kc = qty_kc1 - qty_kc2.
MODIFY wa_track.
ENDLOOP.
FREE:wa_mseg,lt_mseg.

*LOOP AT wa_track.
* CLEAR:qty_kc1,qty_kc2.
* SELECT SUM( menge ) INTO (qty_kc1) FROM mseg WHERE matnr = wa_track-matnr
* AND kdauf = wa_track-vbeln AND kdpos = wa_track-posnr AND bwart IN ('413','411').
*
* SELECT SUM( menge ) INTO (qty_kc2) FROM mseg WHERE matnr = wa_track-matnr
* AND kdauf = wa_track-vbeln AND kdpos = wa_track-posnr AND bwart IN ('414','412').
*
* wa_track-qty_kc = qty_kc1 - qty_kc2.
* MODIFY wa_track.
*ENDLOOP.
ENDFORM. "get_stock

*&---------------------------------------------------------------------*
*& Form get_confirm_date
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_confirm_date. "供应商最新确认交期

*DATA: BEGIN OF wa_ekes OCCURS 0,
* ebeln LIKE ekes-ebeln,
* ebelp LIKE ekes-ebelp,
* j_3asize LIKE ekes-j_3asize,
* erdat LIKE ekes-erdat,
* eindt LIKE ekes-eindt,
* END OF wa_ekes.
*DESCRIBE TABLE wa_ekes LINES i_row.
*
*IF i_row = 0.
* SELECT ebeln ebelp j_3asize erdat eindt INTO CORRESPONDING FIELDS OF TABLE wa_ekes
* FROM ekes FOR ALL ENTRIES IN wa_track
* WHERE ebeln = wa_track-ebeln AND ebelp = wa_track-ebelp AND j_3asize = wa_track-j_3asize.
*
* SORT wa_ekes.
*ENDIF.
*
*LOOP AT wa_track.
* READ TABLE wa_ekes WITH KEY

ebeln = wa_track-ebeln
ebelp = wa_track-ebelp j_3asize = wa_track-j_3asize.
* wa_track-erdat = wa_ekes-erdat.
* wa_track-edate = wa_ekes-eindt.
* MODIFY wa_track.
*ENDLOOP.
*FREE:wa_ekes.
*
*IF s_edate NP ''.
* DELETE wa_track WHERE edate NOT IN s_edate. "供应商确认交货期
*ENDIF.

"================================================================
DATA:wa_ekes TYPE SORTED TABLE OF ekes
WITH UNIQUE KEY ebeln ebelp etens WITH HEADER LINE.

DATA:BEGIN OF lt_ekes OCCURS 0,
ebeln TYPE ekes-ebeln,
ebelp TYPE ekes-ebelp,
j_3asize TYPE ekes-j_3asize,
END OF lt_ekes.
DESCRIBE TABLE wa_ekes LINES i_row.

IF i_row EQ 0.
LOOP AT wa_track.
lt_ekes-ebeln = wa_track-ebeln.
lt_ekes-ebelp = wa_track-ebelp.
lt_ekes-j_3asize = wa_track-j_3asize.
COLLECT lt_ekes.
ENDLOOP.
SORT lt_ekes.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_ekes FROM ekes
FOR ALL ENTRIES IN lt_ekes WHERE ebeln = lt_ekes-ebeln
AND ebelp = lt_ekes-ebelp
AND j_3asize = lt_ekes-j_3asize.
ENDIF.

LOOP AT wa_track.
READ TABLE wa_ekes WITH KEY ebeln = wa_track-ebeln ebelp = wa_track-ebelp j_3asize = wa_track-j_3asize.
IF sy-subrc EQ 0.
wa_track-erdat = wa_ekes-erdat.
wa_track-edate = wa_ekes-eindt.
MODIFY wa_track.
ENDIF.
ENDLOOP.
FREE:wa_ekes,lt_ekes.

IF s_edate NP ''.
DELETE wa_track WHERE edate NOT IN s_edate. "供应商确认交货期
ENDIF.

ENDFORM. "get_confirm_date
*&---------------------------------------------------------------------*
*& Form get_tl_qty_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_tl_qty_hz. "退料数

*LOOP AT wa_track.
* SELECT SUM( menge ) INTO (wa_track-qty_tl2) FROM ekbe WHERE ebeln = wa_track-ebeln
* AND ebelp = wa_track-ebelp AND j_3asize = wa_track-j_3asize AND bwart = '122' . "退料
*
* SELECT SUM( menge ) INTO (wa_track-qty_tl1) FROM ekbe WHERE ebeln = wa_track-ebeln
* AND ebelp = wa_track-ebelp AND j_3asize = wa_track-j_3asize AND bwart = '123' . "退料冲销
* "退料=退料-退料冲销
* wa_track-qty_tl = wa_track-qty_tl2 - wa_track-qty_tl1 .
* MODIFY wa_track.
*ENDLOOP.

"==========================================================
DATA:wa_ekbe TYPE SORTED TABLE OF ekbe
WITH UNIQUE KEY ebeln ebelp zekkn vgabe gjahr belnr buzei WITH HEADER LINE.

DATA:BEGIN OF lt_ekbe OCCURS 0,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
j_3asize TYPE ekbe-j_3asize,
END OF lt_ekbe.
DESCRIBE TABLE wa_ekbe LINES i_row.

IF i_row EQ 0.
LOOP AT wa_track.
lt_ekbe-ebeln = wa_track-ebeln.
lt_ekbe-ebelp = wa_track-ebelp.
lt_ekbe-j_3asize = wa_track-j_3asize.
COLLECT lt_ekbe.
ENDLOOP.
SORT lt_ekbe.

SELECT *
INTO CORRESPONDING

FIELDS OF TABLE wa_ekbe FROM ekbe
FOR ALL ENTRIES IN lt_ekbe WHERE ebeln = lt_ekbe-ebeln
AND ebelp = lt_ekbe-ebelp
AND j_3asize = lt_ekbe-j_3asize.
ENDIF.

DATA:qty_tl TYPE p DECIMALS 3,
qty_tlcx TYPE p DECIMALS 3.

LOOP AT wa_track.
CLEAR: qty_tl,qty_tlcx.
LOOP AT wa_ekbe WHERE ebeln = wa_track-ebeln
AND ebelp = wa_track-ebelp
AND j_3asize = wa_track-j_3asize
AND bwart = '122' .
IF sy-subrc EQ 0.
qty_tl = qty_tl + wa_ekbe-menge. "退料
ENDIF.
ENDLOOP.

LOOP AT wa_ekbe WHERE ebeln = wa_track-ebeln
AND ebelp = wa_track-ebelp
AND j_3asize = wa_track-j_3asize
AND bwart = '123' . "退料
IF sy-subrc EQ 0.
qty_tlcx = qty_tlcx + wa_ekbe-menge. "退料冲销
ENDIF.
ENDLOOP.
"退料=退料-退料冲销
wa_track-qty_tl = qty_tl - qty_tlcx .
MODIFY wa_track.
ENDLOOP.
FREE:wa_ekbe,lt_ekbe.

ENDFORM. "get_tl_qty_hz
*&---------------------------------------------------------------------*
*& Form get_ql_qty_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_ql_qty_hz. "实际欠料数 QTY_QL = MENGE - WEMNG
LOOP AT wa_track.
wa_track-qty_ql = wa_track-menge - wa_track-wemng .
MODIFY wa_track.
ENDLOOP.
ENDFORM. "get_ql_qty_hz
*&---------------------------------------------------------------------*
*& Form get_cp_matrn_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_cp_matrn_hz. "成品物料号
DATA:g_vbeln TYPE char10,
g_posnr TYPE num6.

DATA: wa_vbap TYPE SORTED TABLE OF vbap
WITH UNIQUE KEY vbeln posnr WITH HEADER LINE.

DATA:BEGIN OF lt_vbap OCCURS 0,
vbeln LIKE vbap-vbeln,
posnr LIKE vbap-posnr,
END OF lt_vbap.
DESCRIBE TABLE wa_vbap LINES i_row.

IF i_row = 0.
LOOP AT wa_track.
lt_vbap-vbeln = wa_track-vbeln.
lt_vbap-posnr = wa_track-posnr.
COLLECT lt_vbap.
ENDLOOP.
SORT lt_vbap.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_vbap FROM vbap
FOR ALL ENTRIES IN lt_vbap WHERE vbeln = lt_vbap-vbeln AND posnr = lt_vbap-posnr.
ENDIF.

LOOP AT wa_track.
CLEAR:g_vbeln,g_posnr.
g_vbeln = wa_track-vbeln. "销售单(10)
g_posnr = wa_track-posnr. "销售项目(6)
**********************************************
READ TABLE wa_vbap WITH KEY vbeln = g_vbeln posnr = g_posnr.
IF sy-subrc EQ 0.
wa_track-cpwlh = wa_vbap-matnr .
MODIFY wa_track.
ENDIF.
ENDLOOP.
FREE:wa_vbap,lt_vbap.

ENDFORM. "get_cp_matrn_hz
*&------------------
---------------------------------------------------*
*& Form get_pr_unit_hz
*&-------------------------------------------

--------------------------*
* text
*----------------------------------------------------------------------*
FORM get_pr_unit_hz. "PR数量+PR单位
DATA:g_banfn TYPE char12,
g_bnfpo TYPE num6.

DATA:wa_j_3abssi TYPE SORTED TABLE OF j_3abssi
WITH UNIQUE KEY j_3abskz j_3absnr j_3ahbsp j_3aebsp WITH HEADER LINE.

DATA:wa_t006a TYPE SORTED TABLE OF t006a
WITH UNIQUE KEY spras msehi WITH HEADER LINE.

DATA: BEGIN OF lt_j_3abssi OCCURS 0,
j_3absnr TYPE j_3abssi-j_3absnr, "(12)
j_3ahbsp TYPE j_3abssi-j_3ahbsp, "(6)
j_3asize TYPE j_3abssi-j_3asize,
END OF lt_j_3abssi.
DESCRIBE TABLE wa_j_3abssi LINES i_row.

IF i_row = 0.
LOOP AT wa_track.
lt_j_3abssi-j_3absnr = wa_track-banfn.
lt_j_3abssi-j_3ahbsp = wa_track-bnfpo.
lt_j_3abssi-j_3asize = wa_track-j_3asize.
COLLECT lt_j_3abssi.
ENDLOOP.
SORT lt_j_3abssi.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3abssi FROM j_3abssi
FOR ALL ENTRIES IN lt_j_3abssi WHERE j_3absnr = lt_j_3abssi-j_3absnr
AND j_3ahbsp = lt_j_3abssi-j_3ahbsp
AND j_3asize = lt_j_3abssi-j_3asize
AND j_3abskz = 'A'.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_t006a FROM t006a.
ENDIF.

LOOP AT wa_track.
CLEAR:g_banfn,g_bnfpo.
g_banfn = wa_track-banfn. "采购申请单(12)
g_bnfpo = wa_track-bnfpo. "采购申请项目(6)

READ TABLE wa_j_3abssi WITH KEY j_3absnr = g_banfn
j_3ahbsp = g_bnfpo
j_3asize = wa_track-j_3asize.
IF sy-subrc EQ 0.
wa_track-menge_p = wa_j_3abssi-menge.
wa_track-meins_p = wa_j_3abssi-meins.
ENDIF.

READ TABLE wa_t006a WITH KEY spras = 1 msehi = wa_track-meins_p.
IF sy-subrc EQ 0.
wa_track-meins_p = wa_t006a-mseh3. "PR单位(完整)
ENDIF.
MODIFY wa_track.
ENDLOOP.
FREE:wa_j_3abssi,wa_t006a.

ENDFORM. "get_pr_unit_hz
*&---------------------------------------------------------------------*
*& Form get_sdfs
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_po_unit_hz. "PO单位(采购订单)
DATA:wa_t006a TYPE SORTED TABLE OF t006a
WITH UNIQUE KEY spras msehi WITH HEADER LINE.
DESCRIBE TABLE wa_t006a LINES i_row.

IF i_row = 0 .
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_t006a FROM t006a .
ENDIF.

LOOP AT wa_track.
READ TABLE wa_t006a WITH KEY msehi = wa_track-meins.
IF sy-subrc EQ 0.
wa_track-meins = wa_t006a-mseh3.
ENDIF.
MODIFY wa_track.
ENDLOOP.
FREE:wa_t006a.

ENDFORM. "get_sdfs
*&-----------------------------
----------------------------------------*
*& Form get_gys_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_supplier_hz.

"供应商名称

DATA: wa_adrc TYPE SORTED TABLE OF adrc
WITH UNIQUE KEY addrnumber date_from nation WITH HEADER LINE.
DESCRIBE TABLE wa_adrc LINES i_row.

IF i_row = 0.
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_adrc FROM adrc.
ENDIF.

LOOP AT wa_track.
READ TABLE wa_adrc WITH KEY addrnumber = wa_track-adrnr.
IF sy-subrc EQ 0.
wa_track-sortl = wa_adrc-sort1.
MODIFY wa_track.
ENDIF.
ENDLOOP.
FREE:wa_adrc.

ENDFORM. "get_supplier_hz
*&---------------------------------------------------------------------*
*& Form get_customer_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_customer_hz. "客户名称
DATA: wa_kna1 TYPE SORTED TABLE OF kna1
WITH UNIQUE KEY kunnr WITH HEADER LINE.

DATA: wa_adrc TYPE SORTED TABLE OF adrc
WITH UNIQUE KEY addrnumber WITH HEADER LINE.
DESCRIBE TABLE wa_kna1 LINES i_row.

IF i_row = 0.
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_kna1 FROM kna1.
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_adrc FROM adrc.
ENDIF.

LOOP AT wa_track.
READ TABLE wa_kna1 WITH KEY kunnr = wa_track-kunnr.
IF sy-subrc EQ 0.
wa_track-c_adrnr = wa_kna1-adrnr.
ENDIF.

READ TABLE wa_adrc WITH KEY addrnumber = wa_track-c_adrnr.
IF sy-subrc EQ 0.
wa_track-cname = wa_adrc-sort1.
ENDIF.
MODIFY wa_track.
ENDLOOP.
FREE:wa_kna1,wa_adrc.

IF s_kunnr NP ''.
DELETE wa_track WHERE kunnr NOT IN s_kunnr. "客户编号
ENDIF.

ENDFORM. "get_customer_hz
*&---------------------------------------------------------------------*
*& Form get_spart_hz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_spart_hz. "产品类型,要求交货日期,季节,特别订单种类
DATA:wa_vbap TYPE SORTED TABLE OF vbap
WITH UNIQUE KEY vbeln posnr WITH HEADER LINE.

DATA:BEGIN OF lt_vbap OCCURS 0,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
END OF lt_vbap.
DESCRIBE TABLE wa_vbap LINES i_row.

IF i_row = 0.
LOOP AT wa_track.
lt_vbap-vbeln = wa_track-vbeln.
lt_vbap-posnr = wa_track-posnr.
COLLECT lt_vbap.
ENDLOOP.
SORT lt_vbap.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_vbap FROM vbap
FOR ALL ENTRIES IN lt_vbap WHERE vbeln = lt_vbap-vbeln AND posnr = lt_vbap-posnr.
ENDIF.

LOOP AT wa_track.
READ TABLE wa_vbap WITH KEY vbeln = wa
_track-vbeln posnr = wa_track-posnr.
IF sy-subrc = 0.
wa_track-spart = wa_vbap-spart.
wa_track-j_3arqda = wa_vbap-j_3arqda.
wa_track-season = wa_vbap-season.
wa_track-ad_type = wa_vbap-ad_type.
ENDIF.
MODIFY wa_track.
ENDLOOP.
FREE: wa_vbap.

ENDFORM. "get_spart_hz
*&------------------------------------------------

---------------------*
*& Form get_skudesc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_skudesc_hz . "网络值描述
DATA: wa_j_3apghd TYPE SORTED TABLE OF j_3apghd
WITH UNIQUE KEY mandt j_3apgnr j_3avdat WITH HEADER LINE.

DATA: wa_j_3apgen TYPE SORTED TABLE OF j_3apgen
WITH UNIQUE KEY mandt j_3apgnr j_3avdat j_3akord1 j_3akord2 j_3akord3
WITH HEADER LINE.

DATA: wa_cawn TYPE SORTED TABLE OF cawn
WITH UNIQUE KEY mandt atinn atzhl adzhl WITH HEADER LINE.

DATA: wa_cawnt TYPE SORTED TABLE OF cawnt
WITH UNIQUE KEY mandt atinn atzhl spras adzhl WITH HEADER LINE.

DATA: BEGIN OF lt_j_3apgnr OCCURS 0,
j_3apgnr LIKE mara-j_3apgnr,
END OF lt_j_3apgnr.

DATA: BEGIN OF lt_charact OCCURS 0,
g_3abzd TYPE j_3apghd-j_3abzd1,
END OF lt_charact.

DATA: BEGIN OF lt_cawn OCCURS 0,
atinn TYPE cawn-atinn,
END OF lt_cawn.

DESCRIBE TABLE wa_j_3apghd LINES i_row.

IF i_row = 0.
LOOP AT wa_track.
lt_j_3apgnr-j_3apgnr = wa_track-j_3apgnr.
COLLECT lt_j_3apgnr.
ENDLOOP.

SORT lt_j_3apgnr.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3apghd FROM j_3apghd
FOR ALL ENTRIES IN lt_j_3apgnr WHERE j_3apgnr = lt_j_3apgnr-j_3apgnr.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3apgen FROM j_3apgen
FOR ALL ENTRIES IN lt_j_3apgnr WHERE j_3apgnr = lt_j_3apgnr-j_3apgnr.

LOOP AT wa_j_3apghd.
CLEAR lt_charact.
lt_charact-g_3abzd = wa_j_3apghd-j_3abzd1.
COLLECT lt_charact.
CLEAR lt_charact.
lt_charact-g_3abzd = wa_j_3apghd-j_3abzd2.
COLLECT lt_charact.
ENDLOOP.

LOOP AT lt_charact.
lt_cawn-atinn = lt_charact-g_3abzd.
APPEND lt_cawn.
ENDLOOP.

SORT lt_cawn.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_cawn FROM cawn
FOR ALL ENTRIES IN lt_cawn WHERE atinn = lt_cawn-atinn.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_cawnt FROM cawnt
FOR ALL ENTRIES IN lt_cawn WHERE atinn = lt_cawn-atinn.

ENDIF.
*****************************************************************
LOOP AT wa_track.
*"网络值描述
DATA:g_3abzd1 TYPE string,
g_3abzd2 TYPE string,
g_color TYPE string,
g_size TYPE string,
g_atzhl1 TYPE string,
g_atzhl2 TYPE string,
g_desc1 TYPE string,
g_desc2 TYPE string.

CLEAR:
g_3abzd1,g_3abzd2,g_color,g_size,g_atzhl1,g_atzhl2,g_desc1,g_desc2.
*通过物料网格编号:得到维值1,维值2(内部特性号)
READ TABLE wa_j_3apghd WITH KEY mandt = sy-mandt
j_3apgnr = wa_track-j_3apgnr .
g_3abzd1 = wa_j_3apghd-j_3abzd1.
g_3abzd2 = wa_j_3apghd-j_3abzd2.

*通过网格值及物料网格编号:得到颜色及尺码
READ TABLE wa_j_3apgen WITH KEY mandt = sy-mandt
j_3apgnr = wa_track-j_3apgnr
j_3akordx = wa_track-j_3asize.
g_color = wa_j_3apgen-j_3akord1.
g_size = wa_j_3apgen-j_3akord2.

*内部计数器值
READ TABLE wa_cawn WITH KEY mandt = sy-mandt
atinn = g

_3abzd1
atwrt = g_color.
g_atzhl1 = wa_cawn-atzhl.

READ TABLE wa_cawn WITH KEY mandt = sy-mandt
atinn = g_3abzd2
atwrt = g_size.
g_atzhl2 = wa_cawn-atzhl.

*网络值描述
READ TABLE wa_cawnt WITH KEY mandt = sy-mandt
atinn = g_3abzd1
spras = 1
atzhl = g_atzhl1 .

g_desc1 = wa_cawnt-atwtb.
READ TABLE wa_cawnt WITH KEY mandt = sy-mandt
atinn = g_3abzd2
spras = 1
atzhl = g_atzhl2 .
g_desc2 = wa_cawnt-atwtb.

IF g_desc1 IS INITIAL AND g_desc2 IS INITIAL.
wa_track-atwtb = ''.
ELSEIF g_desc2 IS INITIAL.
CONCATENATE g_desc1 '' INTO wa_track-atwtb.
ELSE.
CONCATENATE g_desc1 '/' g_desc2 INTO wa_track-atwtb.
ENDIF.
MODIFY wa_track.
ENDLOOP.
FREE: wa_j_3apghd,wa_j_3apgen,wa_cawn,wa_cawnt .
ENDFORM. "get_skudesc

*&---------------------------------------------------------------------*
*& Form BUILD_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_field . "采购汇总表

PERFORM append_field USING 'WERKS' '工厂' 'X'.
PERFORM append_field USING 'LIFNR' '供应商编码' 'X'.
PERFORM append_field USING 'SORTL' '供应商名称' 'X'.
PERFORM append_field USING 'KUNNR' '客户编码' 'X'.
PERFORM append_field USING 'CNAME' '客户名称' 'X'.
PERFORM append_field USING 'VBELN' '销售单号' 'X'.
PERFORM append_field USING 'POSNR' '销售单项目' 'X'.
PERFORM append_field USING 'CPWLH' '成品物料号' 'X'.
PERFORM append_field USING 'SPART' '产品类型' 'X'.
PERFORM append_field USING 'AD_TYPE' '特别订单种类' 'X'.
PERFORM append_field USING 'J_3ARQDA' 'SO交货期' 'X'.
PERFORM append_field USING 'SEASON' '季节' 'X'.
PERFORM append_field USING 'EBELN' '采购订单' 'X'.
PERFORM append_field USING 'EBELP' '订单项目' 'X'.
PERFORM append_field USING 'EKGRP' '采购组' 'X'.
PERFORM append_field USING 'MATKL' '物料组' 'X'.
PERFORM append_field USING 'MATNR' '物料号' 'X'.
PERFORM append_field USING 'TXZ01' '物料描述' 'X'.
PERFORM append_field USING 'J_3ASIZE' '网格值' 'X'.
PERFORM append_field
USING 'ATWTB' '网格值描述' 'X'.
PERFORM append_field USING 'MENGE_P' '需采购数量(PR)' 'X'.
PERFORM append_field USING 'MEINS_P' 'PR单位' 'X'.
PERFORM append_field USING &

#39;MENGE' '采购数量' 'X'.
PERFORM append_field USING 'MEINS' '订单单位' 'X'.
PERFORM append_field USING 'BEDAT' '订单凭证日期' 'X'.
PERFORM append_field USING 'EINDT' '要求供应商交货期' 'X'.
PERFORM append_field USING 'GRQTY' '实际到料总数' 'X'.
PERFORM append_field USING 'WEMNG' '实际收货总数' 'X'.
PERFORM append_field USING 'QTY_QL' '实际欠料数' 'X'.
PERFORM append_field USING 'QTY_TL' '退料数量' 'X'.
PERFORM append_field USING 'QTY_KC' '扣库存数' 'X'.
PERFORM append_field USING 'WLJD' '物料进度' 'X'.
PERFORM append_field USING 'BEDNR' '申请部门' 'X'.
PERFORM append_field USING 'AFNAM' '申请人' 'X'.
PERFORM append_field USING 'MAILS_TIMES' 'PO是否已发送' 'X'.
PERFORM append_field USING 'DATUM' '发送日期' 'X'.
PERFORM append_field USING 'UZEIT' '发送时间' 'X'.

ENDFORM. "BUILD_FIELD

*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_data . "采购汇总表
l_layout-zebra = 'X'.
g_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_grid_title = '采购跟踪汇总表'
is_layout = l_layout
it_fieldcat = gt_fieldcat
i_save = 'A'
TABLES:
t_outtab = wa_track[].
ENDFORM. " DISPLAY_DATA

*&---------------------------------------------------------------------*
*& Form GET_TEXT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_text USING value(g_tdname) LIKE thead-tdname. "采购汇总表
CLEAR:g_tline[].
**** 获取长文本内容 5110000911000100005
SELECT SINGLE * INTO it_stxh FROM stxh WHERE tdid = 'F03'
AND tdspras = 'E'
AND tdobject = 'EKPO'
AND tdname = g_tdname.

IF sy-subrc = 0.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'F03'
language = 'E'
name = g_tdname
object = 'EKPO'
TABLES
lines = g_tline.
ELSE.
SELECT SINGLE * INTO it_stxh FROM stxh WHERE tdid = 'F03'
AND tdspras = '1'
AND tdobject = 'EKPO'
AND tdname = g_tdname .

IF sy-subrc = 0 .
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = 'F03'
language = '1'
name = g_tdname

object = 'EKPO'
TABLES
lines = g_tline.
ENDIF .
ENDIF.

CLEAR:g_text.
LOOP AT g_tline.
CONCA
TENATE g_text g_tline-tdline INTO g_text.
ENDLOOP.

ENDFORM. "GET_TEXT

*&---------------------------------------------------------------------*
*& Form GET_BARCODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_barcode USING value(g_value1) LIKE ausp-objek . "调用函数获取缸号条码形码资料

CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
EXPORTING
classtype = '022'
object = g_value1
objecttable = 'MCHA'
TABLES
t_class = wa_sclass
t_objectdata = wa_clobjdat
EXCEPTIONS
no_classification = 1
no_classtypes = 2
invalid_class_type = 3
OTHERS = 4.

ENDFORM. "GET_BARCODE

*=====================================================================
*************** 以下为采购跟踪明细报表代码 *************************
*=====================================================================

FORM get_data2 .
IF s_vbeln NP ''. "销售单号
SELECT eket~eindt eket~menge eket~etenr eket~j_3asize eket~banfn eket~bnfpo
ekpo~werks ekpo~ebeln ekpo~ebelp ekpo~matnr ekpo~txz01 ekpo~j_3apgnr ekpo~bednr ekpo~meins
ekko~lifnr ekko~ekgrp ekpo~matkl ekko~bedat ekko~frgsx ekko~frgzu
ekkn~vbeln ekkn~vbelp AS posnr
lfa1~sortl lfa1~adrnr
vbak~kunnr
eban~afnam
ekes~eindt AS edate ekes~menge AS s_menge ekes~dabmg
ekbe~gjahr ekbe~charg ekbe~j_3aebsp ekbe~bwart ekbe~budat ekbe~belnr ekbe~etens ekbe~elikz
zmm02_p_c~mails_times zmm02_p_c~datum zmm02_p_c~uzeit
INTO CORRESPONDING FIELDS OF TABLE wa_track2
FROM eket
INNER JOIN ekpo ON ekpo~ebeln = eket~ebeln AND ekpo~ebelp = eket~ebelp
INNER JOIN ekko ON ekko~ebeln = eket~ebeln
INNER JOIN ekkn ON ekkn~ebeln = ekpo~ebeln AND ekkn~ebelp = ekpo~ebelp
LEFT JOIN zmm02_p_c ON zmm02_p_c~ebeln = ekpo~ebeln
LEFT JOIN lfa1 ON lfa1~lifnr = ekko~lifnr
LEFT JOIN vbak ON vbak~vbeln = ekkn~vbeln
LEFT JOIN eban ON eban~ebeln = ekpo~ebeln AND eban~ebelp = ekpo~ebelp
LEFT JOIN ekes ON ekes~ebeln = eket~ebeln AND ekes~ebelp = eket~ebelp AND ekes~j_3aetenr = eket~etenr
LEFT JOIN ekbe ON ekbe~ebeln = eket~ebeln AND ekbe~ebelp = eket~ebelp
AND ekbe~j_3aebsp = eket~etenr AND ekbe~bwart = '101'
WHERE ekpo~loekz <> 'L' "删除标识不显示
* AND ekpo~mtart IN ('ZROH','ZR01','ZR02','ZR03','VERP','ZCSM') "物料类型 ”放开物料控制类型20121115

AND ekpo~werks IN s_werks
AND ekpo~ebeln IN s_ebeln
AND ekko~lifnr IN s_lifnr
AND ekpo~matnr IN s_matnr
AND ekko~ekgrp IN s_ekgrp
AND ekko~bedat IN s_bedat
AND eket~eindt IN s_eindt
AND

ekpo~matkl IN s_matkl
AND ekkn~vbeln IN s_vbeln.

IF s_posnr NP ''.
DELETE wa_track2 WHERE posnr
NOT IN s_posnr. "销售项目
ENDIF.

ELSE.
SELECT eket~eindt eket~menge eket~etenr eket~j_3asize eket~banfn eket~bnfpo
ekpo~werks ekpo~ebeln ekpo~ebelp ekpo~matnr ekpo~txz01 ekpo~j_3apgnr ekpo~bednr ekpo~meins
ekko~lifnr ekko~ekgrp ekpo~matkl ekko~bedat ekko~frgsx ekko~frgzu
ekkn~vbeln ekkn~vbelp AS posnr
lfa1~sortl lfa1~adrnr
eban~afnam
ekes~eindt AS edate ekes~menge AS s_menge ekes~dabmg
ekbe~gjahr ekbe~charg ekbe~j_3aebsp ekbe~bwart ekbe~budat ekbe~belnr ekbe~etens ekbe~elikz
zmm02_p_c~mails_times zmm02_p_c~datum zmm02_p_c~uzeit
INTO CORRESPONDING FIELDS OF TABLE wa_track2
FROM eket
INNER JOIN ekpo ON ekpo~ebeln = eket~ebeln AND ekpo~ebelp = eket~ebelp
INNER JOIN ekko ON ekko~ebeln = eket~ebeln
LEFT JOIN zmm02_p_c ON zmm02_p_c~ebeln = ekpo~ebeln
LEFT JOIN ekkn ON ekkn~ebeln = ekpo~ebeln AND ekkn~ebelp = ekpo~ebelp
LEFT JOIN lfa1 ON lfa1~lifnr = ekko~lifnr
LEFT JOIN eban ON eban~ebeln = ekpo~ebeln AND eban~ebelp = ekpo~ebelp
LEFT JOIN ekes ON ekes~ebeln = eket~ebeln AND ekes~ebelp = eket~ebelp AND ekes~j_3aetenr = eket~etenr
LEFT JOIN ekbe ON ekbe~ebeln = eket~ebeln AND ekbe~ebelp = eket~ebelp
AND ekbe~j_3aebsp = eket~etenr AND ekbe~bwart = '101'
WHERE ekpo~mtart IN ('ZROH','ZR01','ZR02','ZR03','VERP','ZCSM') "物料类型
AND ekpo~loekz <> 'L' "删除标识不显示
AND ekpo~werks IN s_werks
AND ekpo~ebeln IN s_ebeln
AND ekko~lifnr IN s_lifnr
AND ekpo~matnr IN s_matnr
AND ekko~ekgrp IN s_ekgrp
AND ekko~bedat IN s_bedat
AND eket~eindt IN s_eindt
AND ekpo~matkl IN s_matkl.
ENDIF.

***************** 过滤查找条件 ******************************
IF s_edate NP ''.
DELETE wa_track2 WHERE edate NOT IN s_edate. "供应商确认交货期
ENDIF.

SORT wa_track2 BY werks ebeln matnr.
DELETE ADJACENT DUPLICATES FROM wa_track2.

ENDFORM. "GET_DATA


*&---------------------------------------------------------------------*
*& Form PROCESS_DATA2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM process_data2 .
DESCRIBE TABLE wa_track2 LINES i_row.

IF i_row > 0.
PERFORM get_mkpfinfo. "提货单,交货单
PERFORM get_skudesc . "网络值描述
PERFORM get_spart. "产品类型,季节,特别订单种类
PERFORM get_customer. "客户名称
PERFORM get_supplier. "供应商名称
PERFORM get_po_unit. "基本单位(po采购订单)
PERFORM get_pr_qty. "需采购数量(PR)+PR基本单位
PERFORM get_batch_qty. "批次数量
PERFORM get_cp_matnr. "成品物料号
PERFORM get_batch.

"物料号+工厂+批次
PERFORM get_tl_qty. "退货数量
PERFORM get_checkout. "合格/不合格数量

LOOP AT
wa_track2.
"PO发送
IF wa_track2-mails_times <> '' OR wa_track2-mails_times IS NOT INITIAL .
wa_track2-mails_times = '是'.
ELSE.
wa_track2-mails_times = '否'.
ENDIF.

"物料进度
* IF wa_track2-elikz = '' . "交货未完成
CONCATENATE wa_track2-ebeln wa_track2-ebelp wa_track2-etenr INTO g_tdname.
PERFORM get_text USING g_tdname.
wa_track2-wljd = g_text .
* ENDIF.
MODIFY wa_track2.
ENDLOOP.
ENDIF.

SORT wa_track2.
DELETE ADJACENT DUPLICATES FROM wa_track2 COMPARING ALL FIELDS.
DESCRIBE TABLE wa_track2 LINES i_row.
MESSAGE s000(oo) WITH '报表查询返回【'i_row'】条数据'.

ENDFORM. " PROCESS_DATA

*----------------------------------------------------------------------*
FORM get_checkout. "合格/不合格数量

LOOP AT wa_track2.
IF wa_track2-state_qi = '合格'.
wa_track2-qty_hg = wa_track2-bpmng.
ELSE.
wa_track2-qty_bhg = wa_track2-bpmng.
ENDIF.
MODIFY wa_track2.
ENDLOOP.

ENDFORM. "get_checkout
*&---------------------------------------------------------------------*
*& Form get_tl_qty
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_tl_qty. "退货数量
*LOOP AT wa_track2.
* SELECT SUM( menge ) INTO (wa_track2-qty_tl2) FROM ekbe WHERE ebeln = wa_track2-ebeln
* AND ebelp = wa_track2-ebelp AND j_3asize = wa_track2-j_3asize AND charg = wa_track2-charg AND bwart = '122' . "退货
*
* SELECT SUM( menge ) INTO (wa_track2-qty_tl1) FROM ekbe WHERE ebeln = wa_track2-ebeln
* AND ebelp = wa_track2-ebelp AND j_3asize = wa_track2-j_3asize AND charg = wa_track2-charg AND bwart = '123' . "退货冲销
* "退货 = 退货-退货冲销
* wa_track2-qty_tl = wa_track2-qty_tl2 - wa_track2-qty_tl1 .
* IF wa_track2-qty_tl = 0 . "清空退料数为零的凭证号
* wa_track2-belnr = ''.
* ENDIF.
* MODIFY wa_track2.
*ENDLOOP.

"====================================================================

DATA:wa_ekbe TYPE SORTED TABLE OF ekbe
WITH UNIQUE KEY ebeln ebelp zekkn vgabe gjahr belnr buzei WITH HEADER LINE.

DATA:BEGIN OF lt_ekbe OCCURS 0,
ebeln TYPE ekbe-ebeln,
ebelp TYPE ekbe-ebelp,
j_3asize TYPE ekbe-j_3asize,
charg TYPE ekbe-charg,
END OF lt_ekbe.
DESCRIBE TABLE wa_ekbe LINES i_row.

IF i_row EQ 0.
LOOP AT wa_track2.
lt_ekbe-ebeln = wa_track2-ebeln.
lt_ekbe-ebelp = wa_track2-ebelp.
lt_ekbe-j_3asize = wa_track2-j_3asize.
lt_ekbe-charg = wa_track2-charg.
COLLECT lt_ekbe.
ENDLOOP.
SORT lt_ekbe.

SELECT * INTO CORRESPONDING FIE

LDS OF TABLE wa_ekbe FROM ekbe
FOR ALL ENTRIES IN lt_ekbe WHERE ebeln = lt_ekbe-ebeln
AND ebelp = lt_ekbe-ebelp
AND j_3asi
ze = lt_ekbe-j_3asize
AND charg = lt_ekbe-charg.
ENDIF.

DATA:qty_tl TYPE p DECIMALS 3,
qty_tlcx TYPE p DECIMALS 3.

LOOP AT wa_track2.
CLEAR: qty_tl,qty_tlcx.
LOOP AT wa_ekbe WHERE ebeln = wa_track2-ebeln
AND ebelp = wa_track2-ebelp
AND j_3asize = wa_track2-j_3asize
AND charg = wa_track2-charg
AND bwart = '122' .

IF sy-subrc EQ 0.
qty_tl = qty_tl + wa_ekbe-menge. "退货
ENDIF.
ENDLOOP.

LOOP AT wa_ekbe WHERE ebeln = wa_track2-ebeln
AND ebelp = wa_track2-ebelp
AND j_3asize = wa_track2-j_3asize
AND charg = wa_track2-charg
AND bwart = '123' .

IF sy-subrc EQ 0.
qty_tlcx = qty_tlcx + wa_ekbe-menge. "退货冲销
ENDIF.
ENDLOOP.

"退料=退料-退料冲销
wa_track2-qty_tl = qty_tl - qty_tlcx .
IF wa_track2-qty_tl = 0 . "清空退料数为零的凭证号
wa_track2-belnr = ''.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE:wa_ekbe,lt_ekbe.

ENDFORM. "get_tl_qty
*&---------------------------------------------------------------------*
*& Form get_batch
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_batch. "物料号+工厂+批次
LOOP AT wa_track2.
CONCATENATE wa_track2-matnr wa_track2-werks wa_track2-charg INTO g_value1 RESPECTING BLANKS .
IF g_value1 NE '' AND wa_track2-charg NE '' AND wa_track2-matnr NE '' AND g_value1 NE ''.
PERFORM get_barcode USING g_value1.
LOOP AT wa_clobjdat.
IF wa_clobjdat-atnam = 'ZBATCH1_VENDOR_BATCH_NUMBER' AND wa_clobjdat-ausp1 NE '?'.
wa_track2-ghno = wa_clobjdat-ausp1. "缸号
ENDIF.

IF wa_clobjdat-atnam = 'ZBATCH1_QI' AND wa_clobjdat-ausp1 NE '?'.
wa_track2-state_qi = wa_clobjdat-ausp1. "QI状态
ENDIF.
ENDLOOP.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
ENDFORM. "get_batch

*&---------------------------------------------------------------------*
*& Form get_cp_matnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_cp_matnr. "成品物料号
DATA: wa_vbap TYPE SORTED TABLE OF vbap
WITH UNIQUE KEY vbeln posnr WITH HEADER LINE.

DATA:BEGIN OF lt_vbap OCCURS 0,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
END OF lt_vbap.
DESCRIBE TABLE wa_vbap LINES i_row.

IF i_row = 0.
LOOP AT wa_track2.
lt_vbap-vbeln = wa_track2-vbeln.
lt_vbap-posnr = wa_track2-posnr.
COLLECT lt_vbap.
ENDLOOP.
SORT lt_vbap.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_vbap FROM vbap
FOR ALL ENTRIES IN lt_vbap WHERE vbeln = lt_vbap-vbeln AND posnr

= lt_vbap-posnr.
ENDIF.


LOOP AT wa_track2.
READ TABLE wa_vbap WITH KEY vbeln = wa_track2-vbeln posnr = wa_track2-posnr.
IF sy-subrc EQ 0.
wa_track2-cpwlh = wa_vbap-matnr.
MODIFY wa_track2.
ENDIF.
ENDLOOP.
FREE:wa_vbap.

ENDFORM. "get_cp_matnr
*&---------------------------------------------------------------------*
*& Form GET_SDF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_pr_qty. "需采购数量(PR)+pr单位

DATA: wa_j_3abssi TYPE SORTED TABLE OF j_3abssi
WITH UNIQUE KEY j_3abskz j_3absnr j_3ahbsp j_3aebsp WITH HEADER LINE.

DATA: wa_t006a TYPE SORTED TABLE OF t006a
WITH UNIQUE KEY spras msehi WITH HEADER LINE.

DATA:BEGIN OF lt_j_3abssi OCCURS 0,
j_3absnr TYPE j_3abssi-j_3absnr,
j_3ahbsp TYPE j_3abssi-j_3ahbsp,
j_3asize TYPE eket-j_3asize,
END OF lt_j_3abssi.

DATA:BEGIN OF lt_t006a OCCURS 0,
msehi TYPE t006a-msehi,
END OF lt_t006a.
DESCRIBE TABLE wa_j_3abssi LINES i_row.

IF i_row = 0.
LOOP AT wa_track2.
lt_j_3abssi-j_3absnr = wa_track2-banfn.
lt_j_3abssi-j_3ahbsp = wa_track2-bnfpo.
lt_j_3abssi-j_3asize = wa_track2-j_3asize.
COLLECT lt_j_3abssi.
ENDLOOP.

LOOP AT wa_track2.
lt_t006a-msehi = wa_track2-meins_p.
COLLECT lt_t006a.
ENDLOOP.

SORT lt_j_3abssi.
SORT lt_t006a.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3abssi FROM j_3abssi
FOR ALL ENTRIES IN lt_j_3abssi WHERE j_3absnr = lt_j_3abssi-j_3absnr AND j_3ahbsp = lt_j_3abssi-j_3ahbsp
AND j_3abskz = 'A' AND j_3asize = lt_j_3abssi-j_3asize.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_t006a FROM t006a WHERE spras = 1 .
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_j_3abssi WITH KEY j_3absnr = wa_track2-banfn j_3ahbsp = wa_track2-bnfpo
j_3asize = wa_track2-j_3asize j_3abskz = 'A'.
IF sy-subrc = 0.
wa_track2-menge_p = wa_j_3abssi-menge.
wa_track2-meins_p = wa_j_3abssi-meins.
ENDIF.

READ TABLE wa_t006a WITH KEY msehi = wa_track2-meins_p.
IF sy-subrc = 0.
wa_track2-meins_p = wa_t006a-mseh3.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE:wa_j_3abssi,lt_j_3abssi,wa_t006a,lt_t006a.

ENDFORM. "get_PR_QTY
*&---------------------------------------------------------------------*
*& Form GET_po_UNIT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_po_unit. "基本单位(po采购订单)
DATA: wa_t006a TYPE SORTED TABLE OF t006a
WITH UNIQUE KEY spras msehi WITH HEADER LINE.

DATA:BEGIN OF lt_t006a OCCURS 0,
msehi TYPE t006a-msehi,
END OF lt_t006a.
DESCRIBE TABLE wa_t006a LINES i_row.

IF i_row =
0.
LOOP AT wa_track2.
lt_t006a-msehi = wa_track2-meins.
COLLECT lt_t00

6a.
ENDLOOP.
SORT lt_t006a.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_t006a FROM t006a
FOR ALL ENTRIES IN lt_t006a WHERE spras = 1 AND msehi = lt_t006a-msehi.
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_t006a WITH KEY msehi = wa_track2-meins.
IF sy-subrc = 0.
wa_track2-meins = wa_t006a-mseh3.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE:wa_t006a,lt_t006a.

ENDFORM. "GET_po_UNIT

*&---------------------------------------------------------------------*
*& Form get_supplier
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_supplier. "供应商名称
DATA: wa_adrc TYPE SORTED TABLE OF adrc
WITH UNIQUE KEY addrnumber date_from nation WITH HEADER LINE.
DESCRIBE TABLE wa_adrc LINES i_row.

IF i_row = 0.
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_adrc FROM adrc.
* FOR ALL ENTRIES IN wa_track2 WHERE addrnumber = wa_track2-adrnr .
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_adrc WITH KEY addrnumber = wa_track2-adrnr.
IF sy-subrc EQ 0.
wa_track2-sortl = wa_adrc-sort1.
MODIFY wa_track2.
ENDIF.
ENDLOOP.
FREE:wa_adrc.

ENDFORM. "get_supplier
*&---------------------------------------------------------------------*
*& Form get_customer
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_customer. " 客户名称
DATA: wa_vbak TYPE SORTED TABLE OF vbak
WITH UNIQUE KEY mandt vbeln WITH HEADER LINE.

DATA:BEGIN OF lt_vbak OCCURS 0,
vbeln TYPE vbak-vbeln,
END OF lt_vbak.

DATA: wa_kna1 TYPE kna1 OCCURS 0 WITH HEADER LINE.
DATA: wa_adrc TYPE adrc OCCURS 0 WITH HEADER LINE.
DESCRIBE TABLE wa_vbak LINES i_row.

IF i_row = 0.
LOOP AT wa_track2.
lt_vbak-vbeln = wa_track2-vbeln.
COLLECT lt_vbak.
ENDLOOP.
SORT lt_vbak.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_vbak FROM vbak
FOR ALL ENTRIES IN lt_vbak WHERE vbeln = lt_vbak-vbeln.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_kna1 FROM kna1.
SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_adrc FROM adrc.
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_vbak WITH KEY vbeln = wa_track2-vbeln.
IF sy-subrc EQ 0.
wa_track2-kunnr = wa_vbak-kunnr.
ENDIF.

READ TABLE wa_kna1 WITH KEY kunnr = wa_track2-kunnr.
IF sy-subrc EQ 0.
wa_track2-c_adrnr = wa_kna1-adrnr.
ENDIF.

READ TABLE wa_adrc WITH KEY addrnumber = wa_track2-c_adrnr.
IF sy-subrc EQ 0.
wa_track2-cname = wa_adrc-sort1.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE: wa_vbak,wa_kna1,wa_adrc.


IF s_kunnr NP ''.
DELETE wa_track2 WHERE kunnr NOT IN s_kunnr. "客户编码
ENDIF.

ENDFORM. "get_customer
*&---------------------------------------------------------------------*

*& Form get_spart
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_spart. "产品类型,季节
DATA: wa_vbap TYPE SORTED TABLE OF vbap
WITH UNIQUE KEY vbeln posnr WITH HEADER LINE.

DATA:BEGIN OF lt_vbap OCCURS 0,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
END OF lt_vbap.
DESCRIBE TABLE wa_vbap LINES i_row.

IF i_row = 0.
LOOP AT wa_track2.
lt_vbap-vbeln = wa_track2-vbeln.
lt_vbap-posnr = wa_track2-posnr.
COLLECT lt_vbap.
ENDLOOP.
SORT lt_vbap.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_vbap FROM vbap
FOR ALL ENTRIES IN lt_vbap WHERE vbeln = lt_vbap-vbeln AND posnr = lt_vbap-posnr.
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_vbap WITH KEY vbeln = wa_track2-vbeln posnr = wa_track2-posnr.
IF sy-subrc = 0.
wa_track2-spart = wa_vbap-spart.
wa_track2-j_3arqda = wa_vbap-j_3arqda.
wa_track2-season = wa_vbap-season.
wa_track2-ad_type = wa_vbap-ad_type.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE:wa_vbap.

ENDFORM. "get_spart
*&---------------------------------------------------------------------*
*& Form get_mkpfinfo
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_mkpfinfo. "提货单,交货单
DATA:wa_mkpf TYPE SORTED TABLE OF mkpf
WITH UNIQUE KEY mandt mblnr mjahr WITH HEADER LINE.

DATA:BEGIN OF lt_mkpf OCCURS 0,
mblnr TYPE mkpf-mblnr,
mjahr TYPE mkpf-mjahr,
END OF lt_mkpf.
DESCRIBE TABLE wa_mkpf LINES i_row.

IF i_row = 0.
LOOP AT wa_track2.
lt_mkpf-mblnr = wa_track2-belnr.
lt_mkpf-mjahr = wa_track2-gjahr.
COLLECT lt_mkpf.
ENDLOOP.
SORT lt_mkpf.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_mkpf FROM mkpf
FOR ALL ENTRIES IN lt_mkpf WHERE mblnr = lt_mkpf-mblnr AND mjahr = lt_mkpf-mjahr.
ENDIF.

LOOP AT wa_track2.
READ TABLE wa_mkpf WITH KEY mblnr = wa_track2-belnr mjahr = wa_track2-gjahr.
IF sy-subrc = 0.
wa_track2-frbnr = wa_mkpf-frbnr.
wa_track2-xblnr = wa_mkpf-xblnr.
wa_track2-belnr = wa_mkpf-mblnr.
ENDIF.
MODIFY wa_track2.
ENDLOOP.
FREE:wa_mkpf.

ENDFORM. "get_mkpfinfo
*&---------------------------------------------------------------------*
*& Form sdfs
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_batch_qty.
"批次数量

*LOOP AT wa_track2.
* SELECT SUM( menge ) AS bpmng INTO (wa_track2-bpmng) FROM ekbe
* WHERE ebeln = wa_track2-ebeln AND ebelp = wa_track2-ebelp AND j_3aebsp = wa_track2-etenr
* AND bwart = '101' AND charg = wa_track2-charg. "收货
*
* SELECT SUM( menge ) AS bpmng INTO (wa_track2-qty_tl1) FROM ekbe
* WHERE

相关文档