(未转)采购订单的采购申请报表


*& REPORT ZTMM_RP0001
*& Report Name: 未转采购订单的采购申请
*& Report Description: MM-16 未转采购订单的采购申请
*& T-Code: ZMM001
*&---------------------------------------------------------------------*
*& Created By: TTC Created On: 2012-08-01
*& Updated By: TTC Updated On: 2012-08-01
*&---------------------------------------------------------------------*

REPORT ztmm_rp001.

*J_3ABDBS J_3ADBBA "MRP状态
" MTS表示是无销售单的采购申请
" MTO表示是有销售单的采购申请
TABLES:eban,ebkn,vbak,vbap,kna1,mara,vbep,cawnt,j_3apgtx,eket,j_3abssi,ekpo,eina,j_3adbba.
DATA: g_banfn TYPE char10.
DATA: g_bnfpo TYPE num5.
DATA: i_row TYPE i.
DATA: BEGIN OF w_output OCCURS 0
,werks LIKE eban-werks "工厂
,banfn LIKE j_3abssi-j_3absnr "采购申请(12)
,bnfpo LIKE j_3abssi-j_3ahbsp "采购申请项目(6)
,frgkz LIKE eban-frgkz "审批状态
,badat LIKE eban-badat "PR创建日期
,vbeln LIKE j_3abssi-j_3auanr "销售订单
,vbelp LIKE j_3abssi-j_3aupos "销售订单项目
,matnr LIKE eban-matnr "物料号
,txz01 LIKE eban-txz01 "物料描述
,cpwlh LIKE vbap-matnr "成品物料号
,kunnr LIKE vbak-kunnr "客户编号
,name1 LIKE kna1-name1 "客户名称
,matkl LIKE mara-matkl "物料组
,mtart LIKE mara-mtart "物料类型
,ekgrp LIKE eban-ekgrp "采购组
,ebakz LIKE eban-ebakz "结算标识
,meins LIKE ekpo-meins "订单单位
,loekz LIKE eban-loekz "删除标识
,j_3apgnr LIKE eban-j_3apgnr "网格编号
,END OF w_output.
DATA:w_output_header LIKE w_output OCCURS 0 WITH HEADER LINE .

DATA: BEGIN OF w_j_3abssi OCCURS 0
,werks LIKE j_3abssi-werks "工厂
,j_3auanr LIKE j_3abssi-j_3auanr"销售订单
,j_3aupos LIKE j_3abssi-j_3aupos"销售订单项目
,j_3absnr LIKE eban-banfn "采购申请
,j_3ahbsp LIKE eban-bnfpo "采购申请项目
,matnr LIKE j_3abssi-matnr "物料号码
,j_3asize LIKE j_3abssi-j_3asize"网格值
,menge LIKE j_3abssi-menge "采购申请数量
,j_3atmpm LIKE j_3abssi-j_3atmpm"未清数量
,frgkz LIKE eban-frgkz "审批标识
,txz01 LIKE eban-txz01 "物料描述
,ekgrp LIKE eban-ekgrp "采购组
,ebakz LIKE eban-ebakz "结算标识
,matkl LIKE mara-matkl "物料组
,mtart LIKE mara-mtart "物料类型
,j_3apgnr LIKE mara-j_3apgnr "物料网格编号
,badat LIKE eban-badat "PR创建日期
,loekz LIKE eban-loekz "删除标识
,p_meins LIKE ekpo-meins "订单单位
,infnr LIKE ekpo-infnr "采购信息号
,umrez LIKE

eina-umrez "转换率
,umren LIK
E eina-umren "转换率
,kunnr LIKE vbak-kunnr "客户编号
,name1 LIKE kna1-name1 "客户名称
,atwtb LIKE cawnt-atwtb "网格值描述
,j_3absmng LIKE eket-j_3absmng "定购数量
,meins(10) "基本单位
,cpwlh(20) "成品物料号
,j_3astat(20) "MRP状态
,END OF w_j_3abssi.
DATA: w_j_3abssi_2 LIKE w_j_3abssi OCCURS 0 WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK bl WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_werks FOR eban-werks OBLIGATORY,
s_kunnr FOR vbak-kunnr,
s_vbeln FOR vbak-vbeln,
s_badat FOR eban-badat,
s_mtart FOR mara-mtart,
s_matnr FOR mara-matnr,
s_jsize FOR j_3abssi-j_3asize,
s_matkl FOR mara-matkl,
s_frgkz FOR eban-frgkz,
s_astat FOR j_3adbba-j_3astat.
PARAMETER:
s_mts AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK bl.

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 = '报表正在查询中!请稍等...'.

PERFORM get_data.
PERFORM process_data.
PERFORM build_field.

END-OF-SELECTION.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& FORM GET_DATA EBAN~BADAT
*&---------------------------------------------------------------------*
FORM get_data .
" ======================== 采购申请 ========================

IF s_mts = ''. "MTO:有销售单的采购申请
SELECT eban~werks eban~banfn eban~bnfpo eban~frgkz eban~badat eban~matnr eban~ekgrp
eban~ebakz eban~txz01 eban~loekz eban~meins eban~j_3apgnr
mara~matkl mara~mtart
ebkn~vbeln ebkn~vbelp
vbak~kunnr
kna1~name1
vbap~matnr AS cpwlh
INTO CORRESPONDING FIELDS OF TABLE w_output
FROM eban
INNER JOIN mara ON eban~matnr = mara~matnr
INNER JOIN ebkn ON ebkn~banfn = eban~banfn AND ebkn~bnfpo = eban~bnfpo
INNER JOIN vbak ON vbak~vbeln = ebkn~vbeln
LEFT JOIN kna1 ON vbak~kunnr = kna1~kunnr
LEFT JOIN vbap ON vbap~vbeln = ebkn~vbeln AND vbap~posnr = ebkn~vbelp
WHERE eban~werks IN s_werks "工厂
AND eban~matnr IN s_matnr "物料
AND eban~badat IN s_badat "PR日期
AND eban~frgkz IN s_frgkz "审批标识
AND mara~matkl IN s_matkl "物料组
AND mara~mtart IN s_mtart "物料类型
AND ebkn~vbeln IN s_vbeln "销售单


AND vbak~ku
nnr IN s_kunnr. "客户编号

ELSE. "MTS:无销售单的采购申请
SELECT eban~werks eban~banfn eban~bnfpo eban~frgkz eban~badat eban~matnr eban~ekgrp
eban~ebakz eban~txz01 eban~loekz eban~meins eban~j_3apgnr
mara~matkl mara~mtart
INTO CORRESPONDING FIELDS OF TABLE w_output
FROM eban
INNER JOIN mara ON eban~matnr = mara~matnr
WHERE eban~werks IN s_werks "工厂
AND eban~matnr IN s_matnr "物料
AND eban~badat IN s_badat "PR日期
AND eban~frgkz IN s_frgkz "审批标识
AND mara~matkl IN s_matkl "物料组
AND mara~mtart IN s_mtart. "物料类型
ENDIF.

SORT w_output BY werks banfn matnr.
DELETE ADJACENT DUPLICATES FROM w_output.
DESCRIBE TABLE w_output LINES i_row.


IF i_row > 0.
" ======================== AFS 库存 (尺码) ========================

IF s_mts = ''. "MTO:有销售单的采购申请
SELECT j_3abssi~werks j_3abssi~j_3absnr j_3abssi~j_3ahbsp j_3abssi~matnr
j_3abssi~j_3asize j_3abssi~menge j_3abssi~j_3atmpm
mara~matkl mara~mtart mara~j_3apgnr
INTO CORRESPONDING FIELDS OF w_j_3abssi
FROM j_3abssi
INNER JOIN mara ON mara~matnr = j_3abssi~matnr
FOR ALL entries IN w_output
WHERE j_3abssi~werks EQ w_output-werks
AND j_3abssi~matnr EQ w_output-matnr
AND j_3abssi~j_3absnr EQ w_output-banfn
AND j_3abssi~j_3ahbsp EQ w_output-bnfpo
AND j_3abssi~j_3asize IN s_jsize
AND j_3abssi~j_3abskz = 'A' "采购申请
AND mara~mtart EQ w_output-mtart
AND mara~matkl EQ w_output-matkl.

READ TABLE w_output WITH KEY werks = w_j_3abssi-werks matnr = w_j_3abssi-matnr
banfn = w_j_3abssi-j_3absnr bnfpo = w_j_3abssi-j_3ahbsp. "获取采购申请相关栏位资料
IF sy-subrc EQ 0.
w_j_3abssi-frgkz = w_output-frgkz.
w_j_3abssi-txz01 = w_output-txz01.
w_j_3abssi-ekgrp = w_output-ekgrp.
w_j_3abssi-ebakz = w_output-ebakz.
w_j_3abssi-meins = w_output-meins.
w_j_3abssi-badat = w_output-badat.
w_j_3abssi-loekz = w_output-loekz.
w_j_3abssi-j_3auanr = w_output-vbeln.
w_j_3abssi-j_3aupos = w_output-vbelp.
w_j_3abssi-kunnr = w_output-kunnr.
w_j_3abssi-name1 = w_output-name1.
w_j_3abssi-cpwlh = w_output-cpwlh.
w_j_3abssi-j_3apgnr = w_output-j_3apgnr.
APPEND w_j_3abssi.
ENDIF.
ENDSELECT.

ELSE. "MTS:无销售单的采购申请
SELECT j_3abssi~werks j_3abssi~j_3absnr j_3abssi~j_3ahbsp j_3abssi~matnr
j_3abssi~j_3asize j_3abssi~menge j_3abssi~j_3atmpm
mara~matkl mara~mtart mara~j_3apgnr
INTO CORRESPONDING FIELDS OF w_j_3abssi
FROM j_3abssi
INNER JOIN mara ON mara~matnr = j_3abssi~matnr
FOR ALL entries IN w_output
WHERE j_3abssi~werks EQ w_output-werks
AND j_3abssi~matnr
EQ w_output-matnr
AND j_3abssi~j_3absnr EQ w_output-banfn
AND j_3abssi~j_3ahbsp EQ w_output-bnfpo
AND j_3abssi~j_3asize IN s_jsize
AND j_3abssi~j_3abskz = 'A' "采购

申请
AND mara~mtart EQ w_output-mtart
AND mara~matkl EQ w_output-matkl.

READ TABLE w_output WITH KEY werks = w_j_3abssi-werks matnr = w_j_3abssi-matnr
banfn = w_j_3abssi-j_3absnr bnfpo = w_j_3abssi-j_3ahbsp. "获取采购申请相关栏位资料
IF sy-subrc EQ 0.
w_j_3abssi-frgkz = w_output-frgkz.
w_j_3abssi-txz01 = w_output-txz01.
w_j_3abssi-ekgrp = w_output-ekgrp.
w_j_3abssi-ebakz = w_output-ebakz.
w_j_3abssi-meins = w_output-meins.
w_j_3abssi-badat = w_output-badat.
w_j_3abssi-loekz = w_output-loekz.
w_j_3abssi-j_3apgnr = w_output-j_3apgnr.
APPEND w_j_3abssi.
ENDIF.
ENDSELECT.
ENDIF.
ENDIF.
FREE:w_output.

SORT w_j_3abssi BY werks j_3absnr matnr.
DELETE ADJACENT DUPLICATES FROM w_j_3abssi.

ENDFORM. " GET_DATA

*&---------------------------------------------------------------------*
*& FORM PROCESS_DATA
*&---------------------------------------------------------------------*
FORM process_data .
DESCRIBE TABLE w_j_3abssi LINES i_row.

IF i_row > 0.
PERFORM get_matnrdesc. "网格值描述
PERFORM get_pr_meins. "PR基本单位
PERFORM get_infnr. "采购信息号,PO单位
PERFORM get_prqty. "PR定购数量
PERFORM get_unittran. "单位转换率,未清数量
PERFORM get_mrp_state. "MRP状态

DELETE w_j_3abssi WHERE ebakz = 'X'. "删除结算标记
DELETE w_j_3abssi WHERE j_3atmpm <= 0. "删除未清数量小于零的记录
DELETE w_j_3abssi WHERE loekz = 'X'. "删去标有删除标识记录
DELETE ADJACENT DUPLICATES FROM w_j_3abssi.
AUTHORITY-CHECK OBJECT 'M_BEST_EKG' ID 'EKGRP' FIELD eban-ekgrp.
ENDIF.

DESCRIBE TABLE w_j_3abssi LINES i_row.
MESSAGE s000(oo) WITH '报表查询返回【'i_row'】条数据'.

ENDFORM. " PROCESS_DATA

*&---------------------------------------------------------------------*
*& Form get_mrp_state
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_mrp_state. "MRP状态

DATA: wa_j_3adbba TYPE j_3adbba OCCURS 0 WITH HEADER LINE.

DATA: wa_j_3addtt TYPE j_3addtt OCCURS 0 WITH HEADER LINE.
DESCRIBE TABLE wa_j_3adbba LINES i_row.

DATA:BEGIN OF lt_j_3adbba OCCURS 0,
werks TYPE j_3adbba-werks,
matnr TYPE j_3adbba-matnr,
END OF lt_j_3adbba.

IF i_row = 0 .
LOOP AT w_j_3abssi.
lt_j_3adbba-werks = w_j_3abssi-werks.
lt_j_3adbba-matnr = w_j_3abssi-matnr.
COLLECT lt_j_3adbba.
ENDLOOP.
SORT lt_j_3adbba.


SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3adbba FROM j_3adbba FOR ALL ENTRIES IN lt_j_3adbba
WHERE werks = lt_j_3adbba-werks AND matnr = lt_j_3adbba-matnr.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_j_3addtt FROM j_3addtt.
ENDIF.

DATA: g_3absnr TYPE cha

r12.
DATA: g_3ahbsp TYPE num6.
LOOP AT w_j_3abssi.
CLEAR: g_3absnr,g_3ahbsp.
g_3absnr = w_j_3abssi-j_3absnr. "采购申请(12)
g_3ahbsp = w_j_3abssi-j_3ahbsp. "采购申请项目(6)

READ TABLE wa_j_3adbba WITH KEY werks = w_j_3abssi-werks matnr = w_j_3abssi-matnr
j_3absnr = g_3absnr j_3ahbsp = g_3ahbsp.
IF sy-subrc = 0.
w_j_3abssi-j_3astat = wa_j_3adbba-j_3astat.
ENDIF.

READ TABLE wa_j_3addtt WITH KEY j_3astat = w_j_3abssi-j_3astat spras = 1.
IF sy-subrc = 0.
CONCATENATE w_j_3abssi-j_3astat '-' wa_j_3addtt-j_3atext INTO w_j_3abssi-j_3astat. "MRP状态
ENDIF.

MODIFY w_j_3abssi.
ENDLOOP.
FREE:wa_j_3adbba,lt_j_3adbba,wa_j_3addtt.

IF s_astat NP ''.
DELETE w_j_3abssi WHERE j_3astat NOT IN s_astat.
ENDIF.

ENDFORM. "get_mrp_state
*&---------------------------------------------------------------------*
*& Form get_unitTran
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_unittran. ""单位转换率,未清数量
* LOOP AT w_j_3abssi.
* SELECT SINGLE umrez umren INTO (w_j_3abssi-umrez,w_j_3abssi-umren) FROM eina WHERE infnr = w_j_3abssi-infnr. "单位转换率
*
* IF sy-subrc = 0.
* w_j_3abssi-j_3atmpm = w_j_3abssi-menge - ( w_j_3abssi-j_3absmng * w_j_3abssi-umrez / w_j_3abssi-umren ). "未清数量
* ELSE.
* w_j_3abssi-j_3atmpm = w_j_3abssi-menge - w_j_3abssi-j_3absmng.
* ENDIF.
* MODIFY w_j_3abssi.
* ENDLOOP.

"==============================================
DATA:wa_eina TYPE SORTED TABLE OF eina
WITH UNIQUE KEY infnr WITH HEADER LINE.

DATA:BEGIN OF lt_eina OCCURS 0,
infnr TYPE eina-infnr,
END OF lt_eina.

DESCRIBE TABLE wa_eina LINES i_row.

IF i_row EQ 0.
LOOP AT w_j_3abssi.
lt_eina-infnr = w_j_3abssi-infnr.
COLLECT lt_eina.
ENDLOOP.
SORT lt_eina.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_eina FROM eina
FOR ALL ENTRIES IN lt_eina WHERE infnr = lt_eina-infnr.
ENDIF.

LOOP AT w_j_3abssi.
READ TABLE wa_eina WITH KEY infnr = w_j_3abssi-infnr.
IF sy-subrc EQ 0.
w_j_3abssi-umrez = wa_eina-umrez.
w_j_3abssi-umren = wa_eina-umren.
w_j_3abssi-j_3atmpm = w_j_3abssi-menge - ( w_j_3abssi-j_3absmng * w_j_3abssi-umrez / w_j_3abssi-umren )."未清数量
ELSE.
w_j_3abssi-j_3atmpm = w_j_3abssi-menge - w_j_3abssi-j_3absmng.
ENDIF.
MODIFY w_j_3abssi.
ENDLOOP.
FREE:wa_eina,lt_eina.

ENDFORM. "
get_unitTran
*&---------------------------------------------------------------------*
*& Form get_prqty
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_prqty. "PR定购数量

* LOOP AT w_j_

3abssi.
* CLEAR:g_banfn,g_bnfpo.
* g_banfn = w_j_3abssi-j_3absnr. "采购申请单(10)
* g_bnfpo = w_j_3abssi-j_3ahbsp. "采购申请项目(5)
*
* SELECT SINGLE SUM( j_3absmng ) INTO (w_j_3abssi-j_3absmng) FROM eket INNER JOIN ekpo ON eket~ebeln = ekpo~ebeln
* AND eket~ebelp = ekpo~ebelp WHERE eket~banfn = g_banfn AND eket~bnfpo = g_bnfpo
* AND eket~j_3asize = w_j_3abssi-j_3asize AND ekpo~loekz = ''.
* MODIFY w_j_3abssi.
* ENDLOOP.

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

DATA:wa_eket TYPE SORTED TABLE OF eket
WITH UNIQUE KEY ebeln ebelp etenr WITH HEADER LINE.

DATA:BEGIN OF lt_eket OCCURS 0,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
j_3asize TYPE eket-j_3asize,
END OF lt_eket.
DESCRIBE TABLE wa_eket LINES i_row.

IF i_row EQ 0.
LOOP AT w_j_3abssi.
lt_eket-banfn = w_j_3abssi-j_3absnr.
lt_eket-bnfpo = w_j_3abssi-j_3ahbsp.
lt_eket-j_3asize = w_j_3abssi-j_3asize.
COLLECT lt_eket.
ENDLOOP.
SORT lt_eket.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_eket FROM eket
INNER JOIN ekpo ON eket~ebeln = ekpo~ebeln AND eket~ebelp = ekpo~ebelp
FOR ALL entries IN lt_eket WHERE eket~banfn = lt_eket-banfn
AND eket~bnfpo = lt_eket-bnfpo
AND eket~j_3asize = lt_eket-j_3asize
AND ekpo~loekz = ''.
ENDIF.

DATA:qty_pr TYPE p DECIMALS 3.
LOOP AT w_j_3abssi.
CLEAR qty_pr.
LOOP AT wa_eket WHERE banfn = w_j_3abssi-j_3absnr
AND bnfpo = w_j_3abssi-j_3ahbsp
AND j_3asize = w_j_3abssi-j_3asize.
IF sy-subrc EQ 0.
qty_pr = qty_pr + wa_eket-j_3absmng.
ENDIF.
ENDLOOP.
w_j_3abssi-j_3absmng = qty_pr.
MODIFY w_j_3abssi.
ENDLOOP.
FREE:wa_eket,lt_eket.

ENDFORM. "get_prqty
*&---------------------------------------------------------------------*
*& Form get_infnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_infnr. "采购信息号,PO单位
*DATA:wa_ekpo TYPE ekpo OCCURS 0 WITH HEADER LINE.
*DESCRIBE TABLE wa_ekpo LINES i_row.
*
*IF i_row = 0.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_ekpo FROM ekpo FOR ALL ENTRIES IN w_j_3abssi
* WHERE banfn = w_j_3abssi-j_3absnr AND bnfpo = w_j_3abssi-j_3ahbsp AND loekz <> 'L' .
*ENDIF.
*
*LOOP AT w_j_3abssi.
* CLEAR:g_banfn,g_bnfpo.
* g_banfn = w_j_3abssi-j_3absnr. "采购申请单(10)
* g_bnfpo = w_j_3abssi-j_3ahbsp.
"采购申请项目(5)
*
* READ TABLE wa_ekpo WITH KEY banfn = g_banfn bnfpo = g_bnfpo .
* w_j_3abssi-p_meins = wa_ekpo-meins.
* w_j_3abssi-infnr = wa_ekpo-infnr.
*
* SELECT SINGLE mseh3 INTO (w_j_3abssi-p_meins) FROM t006a WHERE spras = 1 AND msehi = w_j_3abssi-p_meins."PO单位(完整)
* MODIFY w_j_3abssi.
*ENDLOOP.

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

================================================

DATA: wa_ekpo TYPE SORTED TABLE OF ekpo
WITH UNIQUE KEY ebeln ebelp WITH HEADER LINE.
DESCRIBE TABLE wa_ekpo LINES i_row.

DATA: lt_m_mekke TYPE STANDARD TABLE OF m_mekke WITH HEADER LINE.

DATA: BEGIN OF lt_ekpo OCCURS 0,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
END OF lt_ekpo.

DATA:BEGIN OF lt_eket OCCURS 0,
banfn TYPE eban-banfn,
bnfpo TYPE eban-bnfpo,
END OF lt_eket.

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

IF i_row = 0.
LOOP AT w_j_3abssi.
lt_eket-banfn = w_j_3abssi-j_3absnr.
lt_eket-bnfpo = w_j_3abssi-j_3ahbsp.
COLLECT lt_eket.
ENDLOOP.
SORT lt_eket.

REFRESH lt_m_mekke.
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_m_mekke
FROM m_mekke FOR ALL ENTRIES IN lt_eket WHERE banfn = lt_eket-banfn
AND bnfpo = lt_eket-bnfpo.

LOOP AT lt_m_mekke.
CLEAR: lt_ekpo.
lt_ekpo-ebeln = lt_m_mekke-ebeln.
lt_ekpo-ebelp = lt_m_mekke-ebelp.
COLLECT lt_ekpo.
ENDLOOP.
SORT lt_ekpo.

SELECT * INTO CORRESPONDING FIELDS OF TABLE wa_ekpo
FROM ekpo FOR ALL ENTRIES IN lt_ekpo
WHERE ebeln = lt_ekpo-ebeln
AND ebelp = lt_ekpo-ebelp
AND loekz <> 'L'.

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

LOOP AT w_j_3abssi.
CLEAR:g_banfn,g_bnfpo.
g_banfn = w_j_3abssi-j_3absnr. "采购申请单(10)
g_bnfpo = w_j_3abssi-j_3ahbsp. "采购申请项目(5)

READ TABLE wa_ekpo WITH KEY banfn = g_banfn bnfpo = g_bnfpo .
IF sy-subrc EQ 0.
w_j_3abssi-p_meins = wa_ekpo-meins.
w_j_3abssi-infnr = wa_ekpo-infnr.
ENDIF.

READ TABLE wa_t006a WITH KEY spras = 1 msehi = w_j_3abssi-p_meins.
IF sy-subrc EQ 0.
w_j_3abssi-p_meins = wa_t006a-mseh3. "PO单位(完整)
ENDIF.
MODIFY w_j_3abssi.
ENDLOOP.
FREE:wa_ekpo,lt_m_mekke,lt_ekpo,lt_eket,wa_t006a.

* SELECT SINGLE mseh3 INTO (w_j_3abssi-p_meins) FROM t006a WHERE spras = 1 AND msehi = w_j_3abssi-p_meins."PO单位(完整)
ENDFORM. "get_infnr

*&---------------------------------------------------------------------*
*& Form get_matnrdesc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_matnrdesc. "网络值描述
DATA: wa_j_3apghd TYPE SOR
TED 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_3apg

nr.

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 w_j_3abssi.
lt_j_3apgnr-j_3apgnr = w_j_3abssi-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 w_j_3abssi.
CLEAR:g_banfn,g_bnfpo.
g_banfn = w_j_3abssi-j_3absnr. "采购申请单(10)
g_bnfpo = w_j_3abssi-j_3ahbsp. "采购申请项目(5)
*******************************************************************
* "网络值描述
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 = w_j_3abssi-j_3apgnr .
g_3abzd1 = wa_j_3apghd-j_3abzd1.
g_3abzd2 = wa_j_3apghd-j_3abzd2.

IF w_j_3abssi-j_3asize EQ ''. "防止跑MRP 网格值丢失重新取值
READ
TABLE wa_j_3apgen WITH KEY mandt = sy-mandt
j_3apgnr = w_j_3abssi-j_3apgnr.
w_j_3abssi-j_3asize = wa_j_3apgen-j_3akordx.
ENDIF.

* 通过网格值及物料网格编号:得到颜色及尺码
READ TABLE wa_j_3apgen WITH KEY mandt = sy-mandt
j_3apgnr = w_j_3abssi-j_3apgnr
j_3akordx = w_j_3abssi-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.
w_j_3abssi-atwtb = ''.
ELSEIF g_desc2 IS INITIAL.
CONCATENATE g_desc1 '' INTO w_j_3abssi-atwtb.
ELSE.
CONCATENATE g_desc1 '/' g_desc2 INTO w_j_3abssi-atwtb.
ENDIF.
MODIFY w_j_3abssi.
ENDLOOP.
FREE: wa_j_3apghd,wa_j_3apgen,wa_cawn,wa_cawnt .
ENDFORM. "matnrdesc

*&---------------------------------------------------------------------*
*& Form get_pr_meins
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_pr_meins.
LOOP AT w_j_3abssi.
SELECT SINGLE mseh3 INTO (w_j_3abssi-meins) FROM t006a WHERE spras = 1 AND msehi = w_j_3abssi-meins. "读取完整pr基本单位
MODIFY w_j_3abssi.
ENDLOOP.
ENDFORM. "get_pr_meins

*&---------------------------------------------------------------------*
*& FORM BUILD_FIELD
*&---------------------------------------------------------------------*
* TEXT
*----------------------------------------------------------------------*
FORM build_field .

PERFORM append_field USING 'WERKS' '工厂' 'X'.
PERFORM append_field USING 'KUNNR' '客户编号' 'X'.
PERFORM append_field USING 'NAME1' '客户名称' 'X'.
PERFORM append_field USING 'J_3AUANR' '销售订单' 'X'.
PERFORM append_field USING 'J_3AUPOS' '销售订单项目' 'X'.
PERFORM append_field USING 'CPWLH' '成品物料号' 'X'.
PERFORM append_field USING 'J_3ABSNR' '采购申请单' 'X'.
PERFORM append_field USING 'J_3AHBSP' '采购申请项目' 'X'.
PERFORM append_field USING 'FRGKZ' '审批标识' 'X'.
PERFORM append_field USING 'BADAT' 'PR创建日期' 'X'.
PERFORM append_field USING 'MATNR' '物料号' 'X'.
PERFORM append_field USING 'TXZ01' '物料描述' 'X'.
PERFORM append_field USING 'MTART' '物料
类型' 'X'.
PERFORM append_field USING 'J_3ASIZE' '网格值' 'X'.
PERFORM append_field USING 'ATWTB' '网格值描述' 'X'.
PERFORM append_field USING 'MENGE' '采购申请数量' 'X'.
PERFORM append_field USING 'MEINS' '基本单位' 'X'.
PERFORM append_field USING 'J_3ATMPM' '未清数量' 'X'.
PERFORM append_field USING 'J_3ASTAT' 'MRP状态' 'X'.

ENDFORM. &quo

t; BUILD_FIELD

*&---------------------------------------------------------------------*
*& Form append_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(FNAME) text
* -->VALUE(FDDIC) text
* -->VALUE(FKEY) text
*----------------------------------------------------------------------*
FORM append_field
USING value(fname) TYPE string
value(fddic) TYPE string
value(fkey) TYPE string.
wa_fieldcat-fieldname = fname.
wa_fieldcat-reptext_ddic = fddic.
wa_fieldcat-key = fkey.
APPEND wa_fieldcat TO gt_fieldcat.
ENDFORM. "append_field

*&---------------------------------------------------------------------*
*& FORM DISPLAY_DATA
*&---------------------------------------------------------------------*
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 = 'X'
TABLES:
t_outtab = w_j_3abssi[].
ENDFORM. " DISPLAY_DATA

相关文档
最新文档