成品收发存报表 SAP ABAP

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*&---------------------------------------------------------------------*
*& Report ZMM_04
*& Description : 成品收发存报表。
*& Author : Zelphar.Yang
*& Create date : 2005-10-08
*&---------------------------------------------------------------------*
*& Routine :
*&根据选择屏幕条件统计物料的收发存情况,分明细汇总两种模式并alv输出
*&---------------------------------------------------------------------*

report ZMM_04.
tables:MSEG,MARD,MSKA,MARA,MKPF.
type-pools: SLIS.
type-pools KKBLO.

data: GT_FIELDCAT type SLIS_T_FIELDCAT_ALV with header line,
GS_LAYOUT type SLIS_LAYOUT_ALV,
G_REPID like SY-REPID,
V_ALV_EVENTS type SLIS_T_EVENT.
*data t_data like table of mesg with header line.
data: begin of T_DATA occurs 0,
MATNR like MSEG-MATNR, "物料号
BISMT like MARA-BISMT, "旧物料号(MARA)
MAKTX like MAKT-MAKTX, "物料描述
MATKL like MARA-MATKL, "物料组(MARA)
MBLNR like MSEG-MBLNR, "物料凭证
ZEILE like MSEG-ZEILE, "物料凭证行项目
WERKS like MSEG-WERKS, "工厂
LGORT like MSEG-LGORT, "库存地点
BLDAT like MKPF-BLDAT, "交易日期
BUDAT like MKPF-BUDAT, "凭证中的记帐日期 "added by qds 2005.12.19
XBLNR like MKPF-XBLNR, "参考凭证(单据号)
EBELN like MSEG-EBELN, "采购订单号
EBELP like MSEG-EBELP, "采购订单行项目
MEINS like MARA-MEINS, "基本单位

LABST2 like MARD-LABST, "期初数量 "ADDED BY QDS
ZLABST2 like ZMARD-ZLABST, "期初支数 "ADDED BY QDS

MENGE like MSEG-MENGE, "收料数量(收)
BADI_ERFMG like MIGO_BADI_EXAMPL-BADI_ERFMG, "收料支数
MENGE_F like MSEG-MENGE,"发料数量(发)
BADI_ERFMG_F like MIGO_BADI_EXAMPL-BADI_ERFMG, "发料支数
AUFNR like MSEG-AUFNR, "生产订单
MAT_KDAUF like MSEG-MAT_KDAUF, "销售订单号
MAT_KDPOS like MSEG-MAT_KDPOS, "销售订单行项目
LABST like MARD-LABST, "结存数量
ZLABST like ZMARD-ZLABST, "结存支数
SOBKZ like MSEG-SOBKZ, "特殊库存标记
INSME like MARD-INSME, "质量检查中库存
SPEME like MARD-SPEME, "冻结的库存
SHKZG like MSEG-SHKZG, "借贷标识
* Z_SH(30) type C, "色号
* Z_YW(30) type C, "压纹
* Z_HD(30) type C, "厚度
* Z_MF(30) type C, "门幅
* Z_YS(30) type C,
LINE_ID like MSEG-LINE_ID, "行标识
BWART like MSEG-BWART,
PLGRP like AFKO-PLGRP, "负责计划员组/部门 "ADDED BY QDS 2005.12.19
TXT2 like T024A-TXT, "计划员组短文本 "ADDED BY QDS 2005.12.19
end of T_DATA.
data W_DATA like T_DATA.

data T_DATA2 like T_DATA occurs 0 with header line.

data: begin of T_MARD occurs 0,
M

ATNR like MARD-MATNR, "物料号
LFGJA like MARD-LFGJA, "
LFMON like MARD-LFMON, "
LABST like MARD-LABST, "结存数量
INSME like MARD-INSME,
SPEME like MARD-SPEME ,
* EXTRA ----BEGIN
MATKL like MARA-MATKL, "
BISMT like MARA-BISMT, "
MEINS like MARA-MEINS, "
MAKTX like MAKT-MAKTX, "
ZLABST like ZMARD-ZLABST, "支数
* EXTRA ----END
end of T_MARD.
data T_MARDH like T_MARD occurs 0 with header line.

data: begin of T_MSKA occurs 0,
MATNR like MSKA-MATNR, "物料号
SOBKZ like MSKA-SOBKZ, "
VBELN like MSKA-VBELN, "
POSNR like MSKA-POSNR, "
LFGJA like MSKA-LFGJA, "
LFMON like MSKA-LFMON, "
KALAB like MSKA-KALAB, "
KAINS like MSKA-KAINS,
KASPE like MSKA-KASPE,
* EXTRA ----BEGIN
MATKL like MARA-MATKL, "
BISMT like MARA-BISMT, "
MEINS like MARA-MEINS, "
MAKTX like MAKT-MAKTX, "
ZLABST like ZMARD-ZLABST, "
* EXTRA ----END
end of T_MSKA.
data T_MSKAH like T_MSKA occurs 0 with header line.

data: begin of T_MARA occurs 0,
MATNR like MARA-MATNR, "物料号
MATKL like MARA-MATKL, "
BISMT like MARA-BISMT, "
MEINS like MARA-MEINS, "
end of T_MARA.

data: begin of T_MAKT occurs 0,
MATNR like MAKT-MATNR, "物料号
MAKTX like MAKT-MAKTX, "
end of T_MAKT.

data: begin of T_ZMARD occurs 0,
MATNR like ZMARD-MATNR, "物料号
KDAUF like ZMARD-KDAUF,
KDPOS like ZMARD-KDPOS,
ZLABST like ZMARD-ZLABST, "
end of T_ZMARD.

data CURRM like BKPF-MONAT.
data CURRY like BKPF-GJAHR.

initialization.
G_REPID = SY-REPID.
select-options: S_MATNR for MARA-MATNR, "3. 物料范围:可选择参数,可直接使用MMBE中物料字段的搜索帮助。
S_BISMT for MARA-BISMT, "4. 旧物料号范围:用户手工输入
* S_bldat for MKPF-bldat no-extension. "5. 日期范围 deleted by qds 2005.12.19
S_BUDAT for MKPF-BUDAT no-extension. "5. 日期范围 "added by qds 2005.12.19
parameters: P_WERKS like MARD-WERKS obligatory default '2000', "1. 工厂:当前集团下定义的工厂,可直接使用MMBE中工厂的搜索帮助。
P_LGORT like MARD-LGORT obligatory default '8000'. "2. 库存地点:集团下定义的库存地点,可直接使用MMBE中存储地点的搜索帮助
selection-screen begin of block BLK2 with frame title TEXT-003.
parameters: P_HZ radiobutton group RAD1,

P_MX radiobutton group RAD1 default 'X'.
selection-screen end of block BLK2.

at selection-screen.
perform FRM_CHECK.
*
start-of-selection.
perform FRM_GET_DATA.
perform FRM_STAT.

perform FRM_PLGRP. "取生产部门 added by qds 2005.12.19

* ADDED BY QDS 2005.12.22 ---- BEGIN
* L_LFGJA = S_BUDAT-LOW+0(4).
* L_LFMON = S_BUDAT-LOW+4(2).

if P_HZ = 'X'.
perform FRM_MARD_MARDH.
perform FRM_MSKA_MSKAH.
endif.

perform FRM_LABST2.
* ADDED BY QDS 2005.12.22 ---- END

*
end-of-selection.
perform INIT_FIELDCAT.
perform INIT_LAYOUT.
perform LISTADO.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK
*&---------------------------------------------------------------------*
* 检查选择屏幕的合法性
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_CHECK .
if S_BUDAT-HIGH is initial and S_BUDAT-LOW is initial.
message E001(00) with '输入日期'.
endif.
if P_HZ = 'X' and S_BUDAT-LOW is initial.
message E001(00) with '输入日期'.
endif.

if S_BUDAT-HIGH is initial.
S_BUDAT-HIGH = SY-DATUM.
S_BUDAT-OPTION = 'BT'.
endif.
* if S_budat-LOW is initial.
* S_budat-LOW = '20040101'.
** S_budat-OPTION = 'BT'.
* endif.

select single *
from MARA
where MATNR in S_MATNR and
BISMT in S_BISMT.
if SY-SUBRC <> 0.
message E001(00) with '输入有错误,可能是物料不存在'.
endif.
endform. " FRM_CHECK
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_GET_DATA .

if P_HZ = 'X'.
call function 'RP_LAST_DAY_OF_MONTHS'
exporting
DAY_IN = S_BUDAT-LOW
importing
LAST_DAY_OF_MONTH = S_BUDAT-HIGH
exceptions
DAY_IN_NO_DATE = 1
others = 2.
if SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
concatenate S_BUDAT-LOW(6) '01' into S_BUDAT-LOW.
endif.

select *
from MKPF as A join MSEG as B
on A~MBLNR = B~MBLNR
into corresponding fields of T_DATA
where B~MATNR in S_MATNR and
A~BUDAT >= S_BUDAT-LOW and
A~BUDAT <= S_BUDAT-HIGH and
B~WERKS = P_WERKS and
B~LGORT = P_LGORT.
select single *
from MARA
into corresponding fields of T_DATA
where MATNR = T_DATA-MATNR.

select single MAKTX
from MAKT
into corresponding fields of T_DATA
where MATNR = T_DATA-MATNR.
if T_DATA-SHKZG = 'H'.
T_DATA-MENGE_F = T_DATA-MENGE.
* if T_DATA-MATNR(1) = 'C'.
* T_DATA-BADI_ERFMG_F = T_DATA-BADI_ERFMG.
* clear T_DATA-BADI_ERFMG.
* endif.
clear T_DATA-MENGE.
endif.
if T_DATA-EBELN = ''.
T_DATA-EBELN = T_DATA-AUFNR.
endif.
if P_HZ = 'X'.
clear T_DATA-MBLNR.
clear T_DATA-ZEILE.
clear T_DATA-BLDAT.
clear T_DATA-BUDAT. "added by qds 2005.12.19
clear T_DATA-XBLNR.
clear T_DATA-EBELN.
clear T_DATA-EBELP.
clear T_DATA-AUFNR.
* clear T_DATA-MAT_KDAUF.
* clear T_DATA-MAT_KDPOS.
clear T_DATA-LINE_ID.
* clear T_DATA-SOBKZ.
clear T_DATA-SHKZG.
clear T_DATA-LINE_ID.
clear T_DATA-BWART.
collect T_DATA.
else.
append T_DATA.
endif.
clear T_DATA.
endselect.

call function 'GET_CURRENT_YEAR'
exporting
BUKRS = '2000'
DATE = S_BUDAT-LOW
importing
CURRM = CURRM
CURRY = CURRY
* PREVM =
* PREVY =
.
endform. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_STAT
*&---------------------------------------------------------------------*
* 求结存数量
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_STAT .
data AIN type I.
data AOT type I.
data I_DATA like table of T_DATA with header line.
data UMREN like MARM-UMREN.
data UMREZ like MARM-UMREZ.
loop at T_DATA.

* if P_MX = 'X'.
if T_DATA-SOBKZ = 'E'.
select KALAB KAINS KASPE
into (W_DATA-LABST,W_DATA-INSME,W_DATA-SPEME)
from MSKA
where WERKS = P_WERKS and
LGORT = P_LGORT and
MATNR = T_DATA-MATNR and
VBELN = T_DATA-MAT_KDAUF and
POSNR = T_DATA-MAT_KDPOS.
T_DATA-LABST = T_DATA-LABST + W_DATA-LABST + W_DATA-INSME + W_DATA-SPEME.
clear W_DATA.
endselect.
read table I_DATA with key MATNR = T_DATA-MATNR
SOBKZ = 'E'
MAT_KDAUF = T_DATA-MAT_KDAUF
MAT_KDPOS = T_DATA-MAT_KDPOS.

if SY-SUBRC <> 0.
* 对MSEG表中所有凭证日期大于结束日期,出库,特殊库存标记为E的物料凭证的数量进行SUM,获得总按单的出库数量。
select sum( MENGE )
into AOT
from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
where B~BUDAT > S_BUDAT-HIGH and
A~SOBKZ = 'E' and
A~SHKZG =

'H' and
A~MATNR = T_DATA-MATNR and
A~WERKS = T_DATA-WERKS and
A~LGORT = T_DATA-LGORT and
A~MAT_KDAUF = T_DATA-MAT_KDAUF and
A~MAT_KDPOS = T_DATA-MAT_KDPOS.
* 对MSEG表中所有凭证日期大于结束日期,入库,特殊库存标记为E的物料凭证的数量进行SUM,获得总按单的入库数量。
select sum( MENGE )
into AIN
from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
where B~BUDAT > S_BUDAT-HIGH and
A~SOBKZ = 'E' and
A~SHKZG = 'S' and
A~MATNR = T_DATA-MATNR and
A~WERKS = T_DATA-WERKS and
A~LGORT = T_DATA-LGORT and
A~MAT_KDAUF = T_DATA-MAT_KDAUF and
A~MAT_KDPOS = T_DATA-MAT_KDPOS.
T_DATA-LABST = T_DATA-LABST - AIN + AOT.
clear AIN.
clear AOT.
I_DATA = T_DATA.
append I_DATA.
else.
T_DATA-LABST = I_DATA-LABST.
endif.
else.
select single *
into corresponding fields of T_DATA
from MARD
where WERKS = P_WERKS and
LGORT = P_LGORT and
MATNR = T_DATA-MATNR.
T_DATA-LABST = T_DATA-LABST + T_DATA-INSME + T_DATA-SPEME.
read table I_DATA with key MATNR = T_DATA-MATNR SOBKZ = ' '.
if SY-SUBRC <> 0.
* 对MSEG表中所有凭证日期大于结束日期,出库,特殊库存标记为空的物料凭证的数量进行SUM,获得总出库数量。
select sum( MENGE )
into AOT
from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
where B~BUDAT > S_BUDAT-HIGH and
A~SOBKZ = '' and
A~SHKZG = 'H' and
A~MATNR = T_DATA-MATNR and
A~WERKS = T_DATA-WERKS and
A~LGORT = T_DATA-LGORT.
* 对MSEG表中所有凭证日期大于结束日期,入库,特殊库存标记为空的物料凭证的数量进行SUM,获得总入库数量。
select sum( MENGE )
into AIN
from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
where B~BUDAT > S_BUDAT-HIGH and
A~SOBKZ = '' and
A~SHKZG = 'S' and
A~MATNR = T_DATA-MATNR and
A~WERKS = T_DATA-WERKS and
A~LGORT = T_DATA-LGORT.
T_DATA-LABST = T_DATA-LABST - AIN + AOT.
clear AIN.
clear AOT.
I_DATA = T_DATA.
append I_DATA.
else.
T_DATA-LABST = I_DATA-LABST.
endif.
endif.
* endif.
************************************
** 汇总模式下的数据整理
************************************
* if P_HZ = 'X'.
* select single *
* into corresponding fields of T_DATA
* from MARD
* where WERKS = P_WERKS and
* LGORT = P_LGORT and
* MATNR = T_DATA-MATNR.
* T_DATA-LABST = T_

DATA-LABST + T_DATA-INSME + T_DATA-SPEME.
* select KALAB KAINS KASPE
* into (W_DATA-LABST,W_DATA-INSME,W_DATA-SPEME)
* from MSKA
* where WERKS = P_WERKS and
* LGORT = P_LGORT and
* MATNR = T_DATA-MATNR.
* T_DATA-LABST = T_DATA-LABST + W_DATA-LABST + W_DATA-INSME + W_DATA-SPEME.
* clear W_DATA.
* endselect.
*
** 对MSEG表中所有凭证日期大于结束日期,出库,特殊库存标记为E的物料凭证的数量进行SUM,获得总按单的出库数量。
* select sum( MENGE )
* into AOT
* from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
* where B~budat > S_BUDAT-HIGH and
* A~SHKZG = 'H' and
* A~MATNR = T_DATA-MATNR and
* A~WERKS = T_DATA-WERKS and
* A~LGORT = T_DATA-LGORT.
** 对MSEG表中所有凭证日期大于结束日期,入库,特殊库存标记为E的物料凭证的数量进行SUM,获得总按单的入库数量。
* select sum( MENGE )
* into AIN
* from MSEG as A join MKPF as B on A~MBLNR = B~MBLNR
* where B~budat > S_BUDAT-HIGH and
* A~SHKZG = 'S' and
* A~MATNR = T_DATA-MATNR and
* A~WERKS = T_DATA-WERKS and
* A~LGORT = T_DATA-LGORT.
* T_DATA-LABST = T_DATA-LABST - AIN + AOT.
* clear AIN.
* clear AOT.
** if T_DATA-MATNR(1) = 'C'.
** select sum( BADI_ERFMG )
** into AIN
** from ( MSEG as A join MKPF as B on A~MBLNR = B~MBLNR ) join MIGO_BADI_EXAMPL as C on A~MBLNR = C~MBLNR and A~ZEILE = C~ZEILE
** where B~budat > S_budat-HIGH and
** A~SHKZG = 'S' and
** A~MATNR = T_DATA-MATNR and
** A~WERKS = T_DATA-WERKS and
** A~LGORT = T_DATA-LGORT.
**
** select sum( BADI_ERFMG )
** into AOT
** from ( MSEG as A join MKPF as B on A~MBLNR = B~MBLNR ) join MIGO_BADI_EXAMPL as C on A~MBLNR = C~MBLNR and A~ZEILE = C~ZEILE
** where B~budat > S_budat-HIGH and
** A~SHKZG = 'H' and
** A~MATNR = T_DATA-MATNR and
** A~WERKS = T_DATA-WERKS and
** A~LGORT = T_DATA-LGORT.
** T_DATA-ZLABST = T_DATA-ZLABST - AIN + AOT.
** endif.
** clear AIN.
** clear AOT.
* endif.
select single UMREZ UMREN
into (UMREZ,UMREN)
from MARM
where MEINH = 'CTN' and
MATNR = T_DATA-MATNR.
if SY-SUBRC = 0.
T_DATA-BADI_ERFMG = ( T_DATA-MENGE / UMREZ ) / UMREN.
T_DATA-BADI_ERFMG_F = ( T_DATA-MENGE_F / UMREZ ) / UMREN.
T_DATA-ZLABST = ( T_DATA-LABST / UMREZ ) / UMREN.
endif.
* perform FRM_MATERIAL_CLASS using T_DATA-MATNR changing T_DATA-Z_MF T_DATA-Z_YW T_DATA-Z_HD T_DATA-Z_SH T_DATA-Z_YS.
modify T_DATA.
endloop.
endform. " FRM_STAT
*&---------------------------------------------------------------------*
*&

Form INIT_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form INIT_FIELDCAT .
GT_FIELDCAT-FIELDNAME = 'MAT_KDAUF'.
GT_FIELDCAT-SELTEXT_L = '销售订单号'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

* GT_FIELDCAT-FIELDNAME = 'SOBKZ'.
* GT_FIELDCAT-SELTEXT_L = 'e'.
** GT_FIELDCAT-REF_TABNAME = 'BSIK'.
* GT_FIELDCAT-OUTPUTLEN = 1.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MAT_KDPOS'.
GT_FIELDCAT-SELTEXT_L = '销售项目号'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MATNR'.
GT_FIELDCAT-SELTEXT_L = '物料号'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'BISMT'.
GT_FIELDCAT-SELTEXT_L = '旧物料号'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MAKTX'.
GT_FIELDCAT-SELTEXT_L = '物料描述'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MATKL'.
GT_FIELDCAT-SELTEXT_L = '物料分类'.
GT_FIELDCAT-OUTPUTLEN = 8.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'WERKS'.
GT_FIELDCAT-SELTEXT_L = '工厂'.
GT_FIELDCAT-OUTPUTLEN = 5.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'LGORT'.
GT_FIELDCAT-SELTEXT_L = '库存地点'.
GT_FIELDCAT-OUTPUTLEN = 8.
append GT_FIELDCAT.
clear GT_FIELDCAT.

* GT_FIELDCAT-FIELDNAME = 'Z_SH'.
* GT_FIELDCAT-SELTEXT_L = '色号'.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.
*
* GT_FIELDCAT-FIELDNAME = 'Z_YW'.
* GT_FIELDCAT-SELTEXT_L = '压纹'.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.
*
* GT_FIELDCAT-FIELDNAME = 'Z_HD'.
* GT_FIELDCAT-SELTEXT_L = '厚度'.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.
*
* GT_FIELDCAT-FIELDNAME = 'Z_MF'.
* GT_FIELDCAT-SELTEXT_L = '宽度'.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.
*
* GT_FIELDCAT-FIELDNAME = 'Z_YS'.
* GT_FIELDCAT-SELTEXT_L = '颜色'.
* append GT_FIELDCAT.
* clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MBLNR'.
GT_FIELDCAT-SELTEXT_L = '物料凭证'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.



GT_FIELDCAT-FIELDNAME = 'BLDAT'.
GT_FIELDCAT-SELTEXT_L = '凭证日期'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.

* added by qds 2005.12.19 ---- begin
GT_FIELDCAT-FIELDNAME = 'BUDAT'.
GT_FIELDCAT-SELTEXT_L = '过帐日期'.
GT_FIELDCAT-OUTPUTLEN = 10.
append GT_FIELDCAT.
clear GT_FIELDCAT.
* added by qds 2005.12.19 ---- end


GT_FIELDCAT-FIELDNAME = 'BWART'.
GT_FIELDCAT-SELTEXT_L = '移动类型'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
GT_FIELDCAT-OUTPUTLEN = 3.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'SOBKZ'.
GT_FIELDCAT-SELTEXT_L = '特殊库存'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
GT_FIELDCAT-OUTPUTLEN = 1.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'XBLNR'.
GT_FIELDCAT-SELTEXT_L = '单据号'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'EBELN'.
GT_FIELDCAT-SELTEXT_L = '订单号'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

* added by qds ---- begin
GT_FIELDCAT-FIELDNAME = 'TXT2'.
GT_FIELDCAT-SELTEXT_L = '部门'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.
* added by qds ---- end

GT_FIELDCAT-FIELDNAME = 'MEINS'.
GT_FIELDCAT-SELTEXT_L = '单位'.
GT_FIELDCAT-OUTPUTLEN = 5.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'LABST2'.
GT_FIELDCAT-SELTEXT_L = '期初数量'.
append GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'ZLABST2'.
GT_FIELDCAT-SELTEXT_L = '期初箱数'.
append GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MENGE'.
GT_FIELDCAT-SELTEXT_L = '收货数量'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'BADI_ERFMG'.
GT_FIELDCAT-SELTEXT_L = '收货箱数'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'MENGE_F'.
GT_FIELDCAT-SELTEXT_L = '发货数量'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'BADI_ERFMG_F'.
GT_FIELDCAT-SELTEXT_L = '发货箱数'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'LABST'.
GT_FIELDCAT-SELTEXT_L = '结存数量'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.

GT_FIELDCAT-FIELDNAME = 'ZLABST'.
GT_FIELDCAT-SELTEXT_L = '结存箱数'.
* GT_FIELDCAT-REF_TABNAME = 'BSIK'.
append GT_FIELDCAT.
clear GT_FIELDCAT.
endform. " INIT_FIELDCAT
*&---------------------------------------------------------------------*
*& Form INIT_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form INIT_LAYOUT .
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-F2CODE = '&ETA'.
GS_LAYOUT-DETAIL_POPUP = 'X'.
endform. " INIT_LAYOUT
*&---------------------------------------------------------------------*
*& Form LISTADO
*&-------------------------------------------

--------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form LISTADO .
call function 'REUSE_ALV_GRID_DISPLAY'
exporting
* I_CALLBACK_PF_STATUS_SET = 'SET_STATUS'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = GS_LAYOUT
IT_FIELDCAT = GT_FIELDCAT[]
I_SAVE = 'A'
tables
T_OUTTAB = T_DATA
exceptions
PROGRAM_ERROR = 1
others = 2.
if SY-SUBRC <> 0.
message id SY-MSGID type SY-MSGTY number SY-MSGNO
with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
endform. " LISTADO

*&---------------------------------------------------------------------*
*& Form frm_material_class
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
form FRM_MATERIAL_CLASS using L_MATNR
changing L_MF "门幅
L_YW "压纹
L_HD "厚度
L_SH "色号
L_YS. "颜色
data : begin of I_CLASS occurs 0,
ATINN like AUSP-ATINN,
ATNAM like CABN-ATNAM,
ATWRT like AUSP-ATWRT,
end of I_CLASS.

select CABN~ATNAM
AUSP~ATINN
AUSP~ATWRT
into corresponding fields of table I_CLASS
from CABN inner join AUSP
on CABN~ATINN = AUSP~ATINN
where OBJEK = L_MATNR.

read table I_CLASS with key ATNAM = 'Z_YS'.
if SY-SUBRC = 0.
L_YS = I_CLASS-ATWRT.
endif.

read table I_CLASS with key ATNAM = 'Z_YW'.
if SY-SUBRC = 0.
L_YW = I_CLASS-ATWRT.
endif.

read table I_CLASS with key ATNAM = 'Z_MF'.
if SY-SUBRC = 0.
L_MF = I_CLASS-ATWRT.
endif.

read table I_CLASS with key ATNAM = 'Z_HD'.
if SY-SUBRC = 0.
L_HD = I_CLASS-ATWRT.
endif.

read table I_CLASS with key ATNAM = 'Z_SH'.
if SY-SUBRC = 0.
L_SH = I_CLASS-ATWRT.
endif.

endform. " frm_material_class

*&---------------------------------------------------------------------*
*& Form FRM_PLGRP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_PLGRP .
clear T_DATA.
loop at T_DATA where AUFNR is not initial.
select single PLGRP
from AFKO
into T_DATA-PLGRP
where AUFNR

= T_DATA-AUFNR.

select single TXT
from T024A
into T_DATA-TXT2
where FEVOR = T_DATA-PLGRP.

modify T_DATA.
endloop.

endform. " FRM_PLGRP

*&---------------------------------------------------------------------*
*& Form FRM_MARD_MARDH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_MARD_MARDH .
clear T_MARD.
clear T_MARD[].
select MATNR
LFGJA
LFMON
LABST
INSME
SPEME
from MARD
into table T_MARD
where MATNR in S_MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
( ( LFGJA = CURRY and LFMON <= CURRM ) or ( LFGJA < CURRY ) ).

clear T_MARDH.
clear T_MARDH[].
select MATNR
LFGJA
LFMON
LABST
INSME
SPEME
from MARDH
into table T_MARDH
where MATNR in S_MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
( ( LFGJA = CURRY and LFMON <= CURRM ) or ( LFGJA < CURRY ) ).

append lines of T_MARDH to T_MARD.
refresh T_MARDH.

clear T_MARD.
sort T_MARD by MATNR ascending LFGJA descending LFMON descending.
delete adjacent duplicates from T_MARD comparing MATNR.

clear T_MARD.
loop at T_MARD.
read table T_DATA with key MATNR = T_MARD-MATNR.
if SY-SUBRC = 0.
delete T_MARD.
endif.
clear T_MARD.
endloop.

delete T_MARD where LABST = 0 and
INSME = 0 and
SPEME = 0 .

clear T_MARD.
clear T_MARA.
clear T_MARA[].
select MATNR
MATKL
BISMT
MEINS
from MARA
into table T_MARA
for all entries in T_MARD
where MATNR = T_MARD-MATNR.

clear T_MARA.
clear T_MARD.
loop at T_MARD.
read table T_MARA with key MATNR = T_MARD-MATNR.
if SY-SUBRC = 0.
T_MARD-MATKL = T_MARA-MATKL.
T_MARD-BISMT = T_MARA-BISMT.
T_MARD-MEINS = T_MARA-MEINS.
modify T_MARD.
endif.
clear T_MARA.
clear T_MARD.
endloop.

clear T_MARD.
clear T_MAKT.
clear T_MAKT[].
select MATNR
MAKTX
from MAKT
into table T_MAKT
for all entries in T_MARD
where MATNR = T_MARD-MATNR.

clear T_MAKT.
clear T_MARD.
loop at T_MARD.
read table T_MAKT with key MATNR = T_MARD-MATNR.
if SY-SUBRC = 0.
T_MARD-MAKTX = T_MAKT-MAKTX.
modify T_MARD.
endif.
clear T_MAKT.
clear T_MARD.
endloop.

clear T_MARD.
clear T_ZMARD.
clear T_ZMARD[].
select MATNR
ZLABST
from ZMARD
into corresponding fields of table T_ZMARD
for all entries in T_MARD


where MATNR = T_MARD-MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
SOBKZ = ''.

clear T_ZMARD.
clear T_MARD.
loop at T_MARD.
read table T_ZMARD with key MATNR = T_MARD-MATNR.
if SY-SUBRC = 0.
T_MARD-ZLABST = T_ZMARD-ZLABST.
modify T_MARD.
endif.
clear T_ZMARD.
clear T_MARD.
endloop.

clear T_DATA.
clear T_MARD.
loop at T_MARD.
T_DATA-MATNR = T_MARD-MATNR.
T_DATA-WERKS = P_WERKS.
T_DATA-LGORT = P_LGORT.
T_DATA-LABST = T_MARD-LABST + T_MARD-INSME + T_MARD-SPEME .
T_DATA-MATKL = T_MARD-MATKL.
T_DATA-BISMT = T_MARD-BISMT.
T_DATA-MEINS = T_MARD-MEINS.
T_DATA-MAKTX = T_MARD-MAKTX.
T_DATA-ZLABST = T_MARD-ZLABST.
append T_DATA.
clear T_DATA.
clear T_MARD.
endloop.
endform. " FRM_MARD_MARDH

*&---------------------------------------------------------------------*
*& Form FRM_MSKA_MSKAH
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_MSKA_MSKAH .
clear T_MSKA.
clear T_MSKA[].
select MATNR
SOBKZ
VBELN
POSNR
LFGJA
LFMON
KALAB
KAINS
KASPE
from MSKA
into table T_MSKA
where MATNR in S_MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
( ( LFGJA = CURRY and LFMON <= CURRM ) or ( LFGJA < CURRY ) ).

clear T_MSKAH.
clear T_MSKAH[].
select MATNR
SOBKZ
VBELN
POSNR
LFGJA
LFMON
KALAB
KAINS
KASPE
from MSKAH
into table T_MSKAH
where MATNR in S_MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
( ( LFGJA = CURRY and LFMON <= CURRM ) or ( LFGJA < CURRY ) ).

append lines of T_MSKAH to T_MSKA.
refresh T_MSKAH.

clear T_MSKA.
* sort T_MSKA by MATNR ascending LFGJA descending LFMON descending.

sort T_MSKA by MATNR ascending
VBELN ascending
POSNR ascending
LFGJA descending
LFMON descending.

delete adjacent duplicates from T_MSKA comparing MATNR VBELN POSNR.

clear T_MSKA.
loop at T_MSKA.
read table T_DATA with key MATNR = T_MSKA-MATNR
MAT_KDAUF = T_MSKA-VBELN
MAT_KDPOS = T_MSKA-POSNR.

if SY-SUBRC = 0.
delete T_MSKA.
endif.
clear T_MSKA.
endloop.

delete T_MSKA where KALAB = 0 and
KAINS = 0 and
KASPE = 0 .

clear T_MSKA.
clear T_MARA.
clear T_MARA[].
select MATNR
MATKL
BISMT
MEINS
fr

om MARA
into table T_MARA
for all entries in T_MSKA
where MATNR = T_MSKA-MATNR.

clear T_MARA.
clear T_MSKA.
loop at T_MSKA.
read table T_MARA with key MATNR = T_MSKA-MATNR.
if SY-SUBRC = 0.
T_MSKA-MATKL = T_MARA-MATKL.
T_MSKA-BISMT = T_MARA-BISMT.
T_MSKA-MEINS = T_MARA-MEINS.
modify T_MSKA.
endif.
clear T_MARA.
clear T_MSKA.
endloop.

clear T_MSKA.
clear T_MAKT.
clear T_MAKT[].
select MATNR
MAKTX
from MAKT
into table T_MAKT
for all entries in T_MSKA
where MATNR = T_MSKA-MATNR.

clear T_MAKT.
clear T_MSKA.
loop at T_MSKA.
read table T_MAKT with key MATNR = T_MSKA-MATNR.
if SY-SUBRC = 0.
T_MSKA-MAKTX = T_MAKT-MAKTX.
modify T_MSKA.
endif.
clear T_MAKT.
clear T_MSKA.
endloop.

clear T_MSKA.
clear T_ZMARD.
clear T_ZMARD[].
select MATNR
KDAUF
KDPOS
ZLABST
from ZMARD
into corresponding fields of table T_ZMARD
for all entries in T_MSKA
where MATNR = T_MSKA-MATNR and
WERKS = P_WERKS and
LGORT = P_LGORT and
SOBKZ = 'E' and
KDAUF = T_MSKA-VBELN and
KDPOS = T_MSKA-POSNR.

clear T_ZMARD.
clear T_MSKA.
loop at T_MSKA.
read table T_ZMARD with key MATNR = T_MSKA-MATNR
KDAUF = T_MSKA-VBELN
KDPOS = T_MSKA-POSNR.
if SY-SUBRC = 0.
T_MSKA-ZLABST = T_ZMARD-ZLABST.
modify T_MARD.
endif.
clear T_ZMARD.
clear T_MSKA.
endloop.

clear T_DATA.
clear T_MSKA.
loop at T_MSKA.
T_DATA-MATNR = T_MSKA-MATNR.
T_DATA-WERKS = P_WERKS.
T_DATA-LGORT = P_LGORT.
T_DATA-SOBKZ = T_MSKA-SOBKZ.
T_DATA-MAT_KDAUF = T_MSKA-VBELN.
T_DATA-MAT_KDPOS = T_MSKA-POSNR.
T_DATA-LABST = T_MSKA-KALAB + T_MSKA-KAINS + T_MSKA-KASPE .
T_DATA-MATKL = T_MSKA-MATKL.
T_DATA-BISMT = T_MSKA-BISMT.
T_DATA-MEINS = T_MSKA-MEINS.
T_DATA-MAKTX = T_MSKA-MAKTX.
T_DATA-ZLABST = T_MSKA-ZLABST.
append T_DATA.
clear T_DATA.
clear T_MSKA.
endloop.
endform. " FRM_MSKA_MSKAH

*&---------------------------------------------------------------------*
*& Form FRM_LABST2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form FRM_LABST2 .
data UMREN like MARM-UMREN.
data UMREZ like MARM-UMREZ.
clear T_DATA.
loop at T_DATA.
select single UMREZ UMREN
into (UMREZ,
UMREN )
from MARM
where MEINH = 'CTN' and
MATNR = T_DATA-MATNR.

if SY-SUBRC = 0.
T_DATA-BADI_ERFMG = ( T_DATA-MENGE / UMREZ ) / UMREN.
T_DATA-B

ADI_ERFMG_F = ( T_DATA-MENGE_F / UMREZ ) / UMREN.
T_DATA-ZLABST = ( T_DATA-LABST / UMREZ ) / UMREN.
endif.

modify T_DATA.
clear T_DATA.
endloop.


clear T_DATA.
loop at T_DATA.
T_DATA-LABST2 = T_DATA-LABST + T_DATA-MENGE_F - T_DATA-MENGE.
T_DATA-ZLABST2 = T_DATA-ZLABST + T_DATA-BADI_ERFMG_F - T_DATA-BADI_ERFMG.
modify T_DATA.
clear T_DATA.
endloop.

if P_MX = 'X'.
append lines of T_DATA to T_DATA2.
clear T_DATA.
loop at T_DATA.
* CLEAR T_DATA-LABST.
* CLEAR T_DATA-ZLABST.
clear T_DATA-LABST2.
clear T_DATA-ZLABST2.
clear T_DATA2.
loop at T_DATA2 where MATNR = T_DATA-MATNR.
* T_DATA-LABST = T_DATA-LABST + T_DATA2-LABST.
* T_DATA-ZLABST = T_DATA-ZLABST + T_DATA2-ZLABST.
T_DATA-LABST2 = T_DATA-LABST2 + T_DATA2-LABST2.
T_DATA-ZLABST2 = T_DATA-ZLABST2 + T_DATA2-ZLABST2.
modify T_DATA.
clear T_DATA2.
endloop.
clear T_DATA.
endloop.

refresh T_DATA2.
endif.

endform. " FRM_LABST2

相关文档
最新文档