1.要求
2.代码
REPORT zjglmm005.
TYPE-POOLS: slis.
TABLES:mseg,mkpf,mard.
*一、数据声明
DATA: BEGIN OF item OCCURS 0,
lifnr LIKE mseg-lifnr, "供应商帐号
werks LIKE mseg-werks, "工厂
lgort LIKE mseg-lgort, "库位
matnr LIKE mseg-matnr, "物料号
bwart LIKE mseg-bwart, "移动类型
sobkz LIKE mseg-sobkz, "特殊库存标识
mblnr LIKE mseg-mblnr, "物料凭证
meins LIKE mseg-meins, "单位
menge LIKE mseg-menge, "数量
umlgo LIKE mseg-umlgo, "发出库存地
shkzg LIKE mseg-shkzg, "借贷标识
budat_mkpf LIKE mseg-budat_mkpf, " 过账日期
xblnr_mkpf LIKE mseg-xblnr_mkpf,
END OF item.
DATA:itas LIKE TABLE OF item WITH HEADER LINE.
DATA:itaf LIKE TABLE OF item WITH HEADER LINE.
DATA:itag LIKE TABLE OF item WITH HEADER LINE.
DATA:itah LIKE TABLE OF item WITH HEADER LINE.
DATA:itai LIKE TABLE OF item WITH HEADER LINE.
DATA:itaj LIKE TABLE OF item WITH HEADER LINE.
DATA:itak LIKE TABLE OF item WITH HEADER LINE.
DATA:ital LIKE TABLE OF item WITH HEADER LINE.
DATA:itam LIKE TABLE OF item WITH HEADER LINE.
DATA:itan LIKE TABLE OF item WITH HEADER LINE.
DATA:itao LIKE TABLE OF item WITH HEADER LINE.
DATA:itap LIKE TABLE OF item WITH HEADER LINE.
DATA:itaq LIKE TABLE OF item WITH HEADER LINE.
DATA:itar LIKE TABLE OF item WITH HEADER LINE.
DATA:itat LIKE TABLE OF item WITH HEADER LINE.
DATA:itaw LIKE TABLE OF item WITH HEADER LINE.
DATA:BEGIN OF item1 OCCURS 0.
INCLUDE STRUCTURE item.
DATA: bktxt LIKE mkpf-bktxt,
END OF item1.
DATA:lt_mseg LIKE TABLE OF item1 WITH HEADER LINE.
DATA:itac LIKE TABLE OF item1 WITH HEADER LINE.
DATA:ltac LIKE TABLE OF item1 WITH HEADER LINE.
DATA:itqc LIKE TABLE OF item1 WITH HEADER LINE.
DATA:itqd LIKE TABLE OF item1 WITH HEADER LINE.
DATA:itqe LIKE TABLE OF item1 WITH HEADER LINE.
DATA:itqf LIKE TABLE OF item1 WITH HEADER LINE.
DATA:ltag LIKE TABLE OF item1 WITH HEADER LINE.
DATA:ltah LIKE TABLE OF item1 WITH HEADER LINE.
DATA:ltai LIKE TABLE OF item1 WITH HEADER LINE.
DATA:BEGIN OF itae OCCURS 0,
bukrs LIKE mseg-bukrs, " 公司
werks LIKE mseg-werks, "工厂
matnr LIKE mseg-matnr, "物料号码
maktx LIKE makt-maktx, " 物料描述
butxt LIKE t001-butxt, "公司名称
sobkz LIKE mseg-sobkz, "特殊库存标识
mblnr LIKE mkpf-mblnr, "物料凭证
meins LIKE mseg-meins, "单位
menge LIKE mseg-menge, "数量
umlgo LIKE mseg-umlgo, "发出库存地
shkzg LIKE mseg-shkzg, "借贷标识
budat_mkpf LIKE mseg-budat_mkpf, " 过账日期
lgort LIKE mseg-lgort, " 库存地点
lgobe LIKE t001l-lgobe, " 库存地点描述
lgpbe LIKE mard-lgpbe, " 仓库员
lifnr LIKE mseg-lifnr, "供应商帐号
name1 LIKE lfa1-name1, "你应商描述
qcsl LIKE mseg-menge, " 期初数量
zycgsl LIKE mseg-menge, " 自有采购入库数量
jscgsl LIKE mseg-menge, " 寄售采购入库数量
zydbsl LIKE mseg-menge, " 自有调拨入库数量
jsdbsl LIKE mseg-menge, " 寄售调拔入库数量
zyctsl LIKE mseg-menge, " 自有仓退数量
jsctsl LIKE mseg-menge, " 寄售仓退数量
zypssl LIKE mseg-menge, " 自有配送数量
jspssl LIKE mseg-menge, " 寄售配送数量
bmllsl LIKE mseg-menge, " 部门领料出库数
zydbcsl LIKE mseg-menge, " 自有调拔出库数
jsdbcsl LIKE mseg-menge, " 寄售调拔出库数
shllsl LIKE mseg-menge, " 售后领料数
shllsl1 LIKE mseg-menge, " 售后领料数
* shyfllsl LIKE mseg-menge, " 售后领料数
yfllsl LIKE mseg-menge, " 研发领料数
yfllsl1 LIKE mseg-menge, " 研发领料数
jsshsl LIKE mseg-menge, " 寄售售后领料数
zycjsl LIKE mseg-menge, " 自有车间领料数
jscjsl LIKE mseg-menge, " 寄售车间领料
qmsl LIKE mseg-menge, " 期末数量
END OF itae.
DATA:itad LIKE TABLE OF itae WITH HEADER LINE.
DATA:itab LIKE TABLE OF itae WITH HEADER LINE.
DATA: l_pos TYPE i VALUE 1.
DATA: gd_repid LIKE sy-repid.
DATA: i_grid_settings TYPE lvc_s_glay.
DATA: afield TYPE slis_fieldcat_alv.
DATA: fieldcat TYPE TABLE OF slis_fieldcat_alv WITH HEADER LINE.
DATA: layout TYPE slis_layout_alv.
DATA: lt_sort TYPE slis_t_sortinfo_alv.
DATA: wa_sort TYPE slis_sortinfo_alv.
DATA: l_a LIKE sy-datum, l_b LIKE sy-datum. " definition data .
*宏的定义
DEFINE fill.
afield-col_pos = l_pos.
afield-fieldname = &1.
afield-seltext_l = &2.
afield-no_zero = &3.
afield-key = &4.
afield-qfieldname = &5. " 去掉小数点后边0 = &5.
append afield to fieldcat.
clear afield.
l_pos = l_pos + 1.
END-OF-DEFINITION.
*筛选界面
SELECTION-SCREEN BEGIN OF BLOCK blc WITH FRAME TITLE text-001.
PARAMETERS: p_werks LIKE mseg-werks OBLIGATORY DEFAULT '2100'.
SELECT-OPTIONS p_lgort FOR mseg-lgort OBLIGATORY.
SELECT-OPTIONS p_matnr FOR mseg-matnr .
SELECT-OPTIONS s_budat FOR mseg-budat_mkpf OBLIGATORY .
SELECT-OPTIONS p_lgpbe FOR mard-lgpbe .
SELECTION-SCREEN END OF BLOCK blc.
INITIALIZATION.
s_budat-option = 'BT'.
s_budat-sign = 'I'.
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
EXPORTING
currdate = sy-datum
backmonths = 1 "过去月数
IMPORTING
newdate = s_budat-low.
s_budat-low+6(2) = '21'.
s_budat-high = sy-datum.
s_budat-high+6(2) = '20'.
APPEND s_budat.
*取数
START-OF-SELECTION.
PERFORM frm_get_data. "获取数据
IF item1[] IS NOT INITIAL.
PERFORM frm_show_data.
ELSE.
MESSAGE s001(00) WITH '没有查询到数据'.
ENDIF.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
CLEAR: item1[].
SELECT t1~lifnr t1~werks t1~lgort t1~matnr t1~bwart t1~sobkz t1~mblnr t1~meins t1~menge t1~umlgo t1~shkzg t1~budat_mkpf t1~xblnr_mkpf
t2~bktxt INTO CORRESPONDING FIELDS OF TABLE item1
FROM mseg AS t1
INNER JOIN mkpf AS t2 ON ( t1~mblnr = t2~mblnr )
WHERE werks = p_werks
AND lgort IN p_lgort
AND matnr IN p_matnr.
LOOP AT item1.
MOVE-CORRESPONDING item1 TO ltah.
APPEND ltah.
CLEAR ltah.
IF item1-budat_mkpf IN s_budat. " itac is diferent data total. lt_mesg is begning data. itab is matieral toall.
MOVE-CORRESPONDING item1 TO lt_mseg.
APPEND lt_mseg.
CLEAR lt_mseg.
ELSEIF item1-budat_mkpf < s_budat-low .
MOVE-CORRESPONDING item1 TO ltac.
APPEND ltac.
CLEAR ltac.
ENDIF.
IF item1-sobkz EQ 'K'.
itae-werks = item1-werks.
itae-lgort = item1-lgort.
itae-lifnr = item1-lifnr.
itae-matnr = item1-matnr.
itae-meins = item1-meins.
itae-sobkz = item1-sobkz.
COLLECT itae.
ELSEIF item1-sobkz = ''.
itad-werks = item1-werks.
itad-lgort = item1-lgort.
itad-matnr = item1-matnr.
itad-meins = item1-meins.
COLLECT itad.
ENDIF.
CLEAR item1.
ENDLOOP.
LOOP AT ltah.
IF ltah-budat_mkpf <= s_budat-high .
MOVE-CORRESPONDING ltah TO ltai.
APPEND ltai.
CLEAR ltai.
ENDIF.
ENDLOOP.
*
LOOP AT ltac.
IF ltac-sobkz = 'K'.
itqc-matnr = ltac-matnr.
itqc-lgort = ltac-lgort.
itqc-lifnr = ltac-lifnr.
itqc-sobkz = ltac-sobkz.
IF ltac-shkzg = 'H'.
itqc-menge = - ltac-menge.
ELSEIF ltac-shkzg = 'S' .
itqc-menge = ltac-menge.
ENDIF.
COLLECT itqc.
CLEAR itqc.
ELSE .
itqd-matnr = ltac-matnr. " 期初数据
itqd-lgort = ltac-lgort.
IF ltac-shkzg = 'H'.
itqd-menge = - ltac-menge.
ELSEIF ltac-shkzg = 'S' .
itqd-menge = ltac-menge.
ENDIF.
COLLECT itqd.
CLEAR itqd.
ENDIF.
ENDLOOP.
LOOP AT ltai. " 期末数据
IF ltai-sobkz = 'K'.
itqe-matnr = ltai-matnr.
itqe-lgort = ltai-lgort.
itqe-lifnr = ltai-lifnr.
itqe-sobkz = ltai-sobkz.
IF ltai-shkzg = 'H'.
itqe-menge = - ltai-menge.
ELSEIF ltai-shkzg = 'S' .
itqe-menge = ltai-menge.
ENDIF.
COLLECT itqe.
CLEAR itqe.
ELSE .
itqf-matnr = ltai-matnr.
itqf-lgort = ltai-lgort.
IF ltai-shkzg = 'H'.
itqf-menge = - ltai-menge.
ELSEIF ltai-shkzg = 'S' .
itqf-menge = ltai-menge.
ENDIF.
COLLECT itqf.
CLEAR itqf.
ENDIF.
ENDLOOP.
LOOP AT lt_mseg .
IF lt_mseg-sobkz = ''.
itas-matnr = lt_mseg-matnr .
itas-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '101' .
itas-menge = lt_mseg-menge. " 自有采购数
ELSEIF lt_mseg-bwart = '102' .
itas-menge = - lt_mseg-menge.
ENDIF.
COLLECT itas.
CLEAR itas.
IF itas-menge = 0.
DELETE itas WHERE menge = 0 .
ENDIF.
itag-matnr = lt_mseg-matnr.
itag-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = 'Z69' AND lt_mseg-shkzg = 'S' .
itag-menge = lt_mseg-menge. " 自有调拨入库数
ELSEIF lt_mseg-bwart = 'Z70' AND lt_mseg-shkzg = 'H' .
itag-menge = - lt_mseg-menge.
ENDIF.
COLLECT itag.
CLEAR itag.
IF itag-menge = 0.
DELETE itag WHERE menge = 0 .
ENDIF.
itai-matnr = lt_mseg-matnr.
itai-lgort = lt_mseg-lgort.
" 自有仓退数
IF lt_mseg-bwart = '122' .
itai-menge = lt_mseg-menge.
ELSEIF lt_mseg-bwart = '123' .
itai-menge = - lt_mseg-menge.
ENDIF.
COLLECT itai.
CLEAR itai.
IF itai-menge = 0.
DELETE itai WHERE menge = 0 .
ENDIF.
itak-matnr = lt_mseg-matnr.
itak-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '411' AND lt_mseg-shkzg = 'H' AND lt_mseg-xblnr_mkpf+0(2) = 'PD' . " 自有配送数
itak-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = '412' AND lt_mseg-shkzg = 'S' AND lt_mseg-xblnr_mkpf+0(2) = 'PD' .
itak-menge = lt_mseg-menge.
ENDIF.
COLLECT itak.
CLEAR itak.
IF itak-menge = 0.
DELETE itak WHERE menge = 0 .
ENDIF.
itam-matnr = lt_mseg-matnr.
itam-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = 'z37'OR lt_mseg-bwart = '201' AND lt_mseg-shkzg = 'H' . " 自有部门领料
itam-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = 'Z38'OR lt_mseg-bwart ='202' AND lt_mseg-shkzg = 'S' .
itam-menge = lt_mseg-menge.
ENDIF.
COLLECT itam.
CLEAR itam.
IF itam-menge = 0.
DELETE itam WHERE menge = 0 .
ENDIF.
itan-matnr = lt_mseg-matnr .
itan-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = 'Z69' AND lt_mseg-shkzg = 'H' AND lt_mseg-lgort <> '1301' AND lt_mseg-lgort <> '1302' AND lt_mseg-lgort <> '2301' AND lt_mseg-lgort <>'2302' . " 自有调拨出库数
itan-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = 'Z70' AND lt_mseg-shkzg = 'S' AND ( lt_mseg-lgort <> '1301' AND lt_mseg-lgort <> '1302' AND lt_mseg-lgort <> '2301' AND lt_mseg-lgort <>'2302') .
itan-menge = lt_mseg-menge .
ENDIF.
COLLECT itan.
CLEAR itan.
IF itan-menge = 0.
DELETE itan WHERE menge = 0 .
ENDIF.
itap-matnr = lt_mseg-matnr.
itap-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = 'Z69' AND lt_mseg-shkzg = 'H' AND ( lt_mseg-umlgo = '1301' OR lt_mseg-umlgo = '1302' OR lt_mseg-umlgo = '2301' OR lt_mseg-umlgo ='2302' ). " 自有其它领料1
itap-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = 'Z70' AND lt_mseg-shkzg = 'S' AND ( lt_mseg-umlgo = '1301' OR lt_mseg-umlgo = '1302' OR lt_mseg-umlgo = '2301' OR lt_mseg-umlgo ='2302') .
itap-menge = lt_mseg-menge.
ENDIF.
COLLECT itap.
CLEAR itap.
IF itap-menge = 0.
DELETE itap WHERE menge = 0 .
ENDIF.
itaq-matnr = lt_mseg-matnr.
itaq-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '601' AND lt_mseg-shkzg = 'H' . "自有其它领料2
itaq-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = '602' AND lt_mseg-shkzg = 'S' .
itaq-menge = lt_mseg-menge.
ENDIF.
COLLECT itaq.
CLEAR itaq.
IF itaq-menge = 0.
DELETE itaq WHERE menge = 0 .
ENDIF.
itat-matnr = lt_mseg-matnr .
itat-lgort = lt_mseg-lgort.
IF ( lt_mseg-bwart = '411' OR lt_mseg-bwart = '201' ) AND lt_mseg-shkzg = 'H' AND ( lt_mseg-bktxt+0(2) = 'FL' OR lt_mseg-bktxt+0(2) = 'LJ' OR lt_mseg-bktxt+0(2) = 'BJ' OR "自由车间恍
lt_mseg-xblnr_mkpf+0(2) ='YL' OR lt_mseg-xblnr_mkpf+0(2) ='ZC' ) .
itat-menge = - lt_mseg-menge.
ELSEIF ( lt_mseg-bwart = '412' OR lt_mseg-bwart = '202' ) AND lt_mseg-shkzg = 'S' AND ( lt_mseg-bktxt+0(2) = 'FL' OR lt_mseg-bktxt+0(2) = 'LJ' OR lt_mseg-bktxt+0(2) = 'BJ' OR
lt_mseg-bktxt+0(2) ='YL' OR lt_mseg-bktxt+0(2) ='ZC' ) .
itat-menge = lt_mseg-menge.
ENDIF.
COLLECT itat.
CLEAR itat.
IF itat-menge = 0.
DELETE itat WHERE menge = 0 .
ENDIF.
ENDIF.
IF lt_mseg-sobkz = 'K' .
itaf-matnr = lt_mseg-matnr .
itaf-lifnr = lt_mseg-lifnr.
itaf-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '101' .
itaf-menge = lt_mseg-menge. " 寄售采购数
ELSEIF lt_mseg-bwart = '102' .
itaf-menge = - lt_mseg-menge.
ENDIF.
COLLECT itaf.
CLEAR itaf.
IF itaf-menge = 0.
DELETE itaf WHERE menge = 0 .
ENDIF.
itah-matnr = lt_mseg-matnr.
itah-lifnr = lt_mseg-lifnr.
itah-lgort = lt_mseg-lgort.
IF ( lt_mseg-bwart = 'Z69' ) AND lt_mseg-shkzg = 'S' . " 寄售调拨入库数
itah-menge = lt_mseg-menge.
ELSEIF ( lt_mseg-bwart = 'Z70' ) AND lt_mseg-shkzg = 'H'.
itah-menge = - lt_mseg-menge.
ENDIF.
COLLECT itah.
CLEAR itah.
IF itah-menge = 0.
DELETE itah WHERE menge = 0 .
ENDIF.
itaj-matnr = lt_mseg-matnr.
itaj-lifnr = lt_mseg-lifnr.
itaj-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '122' . " 寄售仓退数
itaj-menge = lt_mseg-menge.
ELSEIF lt_mseg-bwart = '123' .
itaj-menge = - lt_mseg-menge.
ENDIF.
COLLECT itaj.
CLEAR itaj.
IF itaj-menge = 0.
DELETE itaj WHERE menge = 0 .
ENDIF.
ital-matnr = lt_mseg-matnr .
ital-lifnr = lt_mseg-lifnr .
ital-lgort = lt_mseg-lgort.
IF ( lt_mseg-bwart = '411' OR lt_mseg-bwart ='311' ) AND lt_mseg-shkzg = 'H' AND lt_mseg-xblnr_mkpf+0(2) = 'PS' . " 寄售配送数
ital-menge = - lt_mseg-menge.
ELSEIF ( lt_mseg-bwart = '412'OR lt_mseg-bwart ='312') AND lt_mseg-shkzg = 'S' AND lt_mseg-xblnr_mkpf+0(2) = 'PS' .
ital-menge = lt_mseg-menge.
ENDIF.
COLLECT ital.
CLEAR ital.
IF ital-menge = 0.
DELETE ital WHERE menge = 0 .
ENDIF.
itao-matnr = lt_mseg-matnr .
itao-lifnr = lt_mseg-lifnr .
itao-lgort = lt_mseg-lgort.
IF ( lt_mseg-bwart = 'Z69' ) AND lt_mseg-shkzg = 'H' AND lt_mseg-lgort <> '1301' AND lt_mseg-lgort <> '1302' AND lt_mseg-lgort <> '2301' AND lt_mseg-lgort <> '2302' . " 寄售调拨出库数
itao-menge = - lt_mseg-menge.
ELSEIF ( lt_mseg-bwart = 'Z70' ) AND lt_mseg-shkzg = 'S' AND lt_mseg-lgort <> '1301' AND lt_mseg-lgort <> '1302' AND lt_mseg-lgort <> '2301' AND lt_mseg-lgort <>'2302' .
itao-menge = lt_mseg-menge.
ENDIF.
COLLECT itao.
CLEAR itao.
IF itao-menge = 0.
DELETE itao WHERE menge = 0 .
ENDIF.
itar-matnr = lt_mseg-matnr.
itar-lifnr = lt_mseg-lifnr.
itar-lgort = lt_mseg-lgort.
IF lt_mseg-bwart = '411' AND lt_mseg-shkzg = 'H' AND ( lt_mseg-umlgo = '1301' OR lt_mseg-umlgo = '1302' OR lt_mseg-umlgo = '2301' OR lt_mseg-umlgo ='2302' ). " 寄售其它领料
itar-menge = - lt_mseg-menge.
ELSEIF lt_mseg-bwart = '412' AND lt_mseg-shkzg = 'S' AND ( lt_mseg-umlgo = '1301' OR lt_mseg-umlgo = '1302' OR lt_mseg-umlgo = '2301' OR lt_mseg-umlgo ='2302') .
itar-menge = lt_mseg-menge.
ENDIF.
COLLECT itar.
CLEAR itar.
IF itar-menge = 0.
DELETE itar WHERE menge = 0 .
ENDIF.
itaw-matnr = lt_mseg-matnr .
itaw-lifnr = lt_mseg-lifnr .
itaw-lgort = lt_mseg-lgort.
IF ( lt_mseg-bwart = '411' OR lt_mseg-bwart = '311' ) AND lt_mseg-shkzg = 'H' AND ( lt_mseg-bktxt+0(2) = 'FL' OR lt_mseg-bktxt+0(2) = 'LJ' OR lt_mseg-bktxt+0(2) = 'BJ' OR " 寄售车间
lt_mseg-bktxt+0(2) ='YL' OR lt_mseg-bktxt+0(2) ='ZC' ) .
itaw-menge = - lt_mseg-menge.
ELSEIF ( lt_mseg-bwart = '412' OR lt_mseg-bwart = '312' ) AND lt_mseg-shkzg = 'S' AND ( lt_mseg-bktxt+0(2) = 'FL' OR lt_mseg-bktxt+0(2) = 'LJ' OR lt_mseg-bktxt+0(2) = 'BJ' OR
lt_mseg-bktxt+0(2) ='YL' OR lt_mseg-bktxt+0(2) ='ZC' ) .
itaw-menge = lt_mseg-menge.
ENDIF.
COLLECT itaw.
CLEAR itaw.
IF itaw-menge = 0.
DELETE itaw WHERE menge = 0 .
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT itad.
CLEAR: itas,itag,itai,itak,itam,itan,itap,itaq,itat.
" 自有采购领料
READ TABLE itas INTO itas WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zycgsl = itas-menge.
"自有调拨数量
READ TABLE itag INTO itag WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zydbsl = itag-menge.
" 自有仓退数量
READ TABLE itai INTO itai WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zyctsl = itai-menge.
" 自有配送数量
READ TABLE itak INTO itak WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zypssl = itak-menge.
" 自有部门数量
READ TABLE itam INTO itam WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-bmllsl = itam-menge.
" 自有调拨数量
READ TABLE itan INTO itan WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zydbcsl = itan-menge.
" 售后领料自有
READ TABLE itap INTO itap WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-shllsl1 = itap-menge.
" 销售出库领料
READ TABLE itaq INTO itaq WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-yfllsl1 = itaq-menge.
* itad-shyfllsl = itad-shllsl1 + itad-yfllsl1 + itad-shyfllsl.
"自有车间领料
READ TABLE itat INTO itat WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-zycjsl = itat-menge.
MODIFY itad.
CLEAR itad.
ENDLOOP.
LOOP AT itae.
CLEAR: itaf,itah,itaj,ital,itao,itar,itaw.
" 寄售采购领料
READ TABLE itaf INTO itaf WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jscgsl = itaf-menge.
" 寄售调拨数量
READ TABLE itah INTO itah WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jsdbsl = itah-menge.
" 寄后仓退数量
READ TABLE itaj INTO itaj WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jsctsl = itaj-menge.
" 寄售配送数量
READ TABLE ital INTO ital WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jspssl = ital-menge.
" 寄售调拨数量
READ TABLE itao INTO itao WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jsdbcsl = itao-menge.
"寄售售后领料
READ TABLE itar INTO itar WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jsshsl = itar-menge.
"寄售车间领料
READ TABLE itaw INTO itaw WITH KEY matnr = itae-matnr lgort = itae-lgort lifnr = itae-lifnr.
itae-jscjsl = itaw-menge.
MODIFY itae.
ENDLOOP.
APPEND LINES OF itae TO itad.
LOOP AT itad.
CLEAR: itqc ,itqd,itqe,itqf.
"期初数量
IF itad-sobkz = 'K'.
READ TABLE itqc INTO itqc WITH KEY matnr = itad-matnr lgort = itad-lgort lifnr = itad-lifnr sobkz = itad-sobkz.
itad-qcsl = itqc-menge.
ELSE.
READ TABLE itqd INTO itqd WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-qcsl = itqd-menge.
ENDIF.
IF itad-sobkz = 'K'.
READ TABLE itqe INTO itqe WITH KEY matnr = itad-matnr lgort = itad-lgort lifnr = itad-lifnr sobkz = itad-sobkz.
itad-qmsl = itqe-menge.
ELSE.
READ TABLE itqf INTO itqf WITH KEY matnr = itad-matnr lgort = itad-lgort .
itad-qmsl = itqf-menge.
ENDIF.
SELECT SINGLE butxt INTO itad-butxt FROM t001 WHERE bukrs = itad-bukrs.
SELECT SINGLE maktx INTO itad-maktx FROM makt WHERE matnr = itad-matnr.
SELECT SINGLE lgobe INTO itad-lgobe FROM t001l WHERE lgort = itad-lgort.
SELECT SINGLE lgpbe INTO itad-lgpbe FROM mard WHERE matnr = itad-matnr and lgort = itad-lgort.
SELECT SINGLE name1 INTO itad-name1 FROM lfa1 WHERE lifnr = itad-lifnr.
MODIFY itad.
ENDLOOP .
ENDFORM. " FRM_GET_DATA
*&---------------------------------------------------------------------*
*& Form FRM_SHOW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_show_data .
i_grid_settings-edt_cll_cb = 'X' . "显示界面可编辑字段上修改了数据,回车后就会立即将内表的数据也修改
layout-colwidth_optimize = 'X'. "设置字段列宽自适应
layout-zebra = 'X'.
CLEAR afield.
REFRESH fieldcat.
fill 'MATNR' '物料编号' '' '' ''.
fill 'MAKTX' '物料描述' '' '' ''.
fill 'LGORT' '仓储地点' '' '' ''.
fill 'lgobe' '仓储地点描述' '' '' ''.
fill 'lgpbe' '仓库员' '' '' ''.
fill 'meins' '单位' '' '' ''.
fill 'lifnr' '供应商代码' '' '' ''.
fill 'name1' '供应商名称' '' '' ''.
fill 'qcsl' '期初数量' 'X' '' ''.
fill 'zycgsl' '自有采购入库数' 'X' '' ''.
fill 'jscgsl' '寄售采购入库数' 'X' '' ''.
fill 'zydbsl' '自有调拨入库数' 'X' '' ''.
fill 'jsdbsl' '寄售调拨入库数' 'X' '' ''.
fill 'zyctsl' '自有仓退数' 'X' '' ''.
fill 'jsctsl' '寄售仓退数' 'X' '' ''.
fill 'zypssl' '自有配送出库数' 'X' '' ''.
fill 'jspssl' '寄售配送出库数' 'X' '' ''.
fill 'bmllsl' '自有部门领料出库数' 'X' '' ''.
fill 'zydbcsl' '自有调拨出库数' 'X' '' ''.
fill 'jsdbcsl' '寄售调拨出库数' 'X' '' ''.
fill 'shllsl1' '售后领料自有出库数' 'X' '' ''.
fill 'yfllsl1' '销售领料出库数' 'X' '' ''.
fill 'jsshsl' '售后领料寄售出库数' 'X' '' ''.
fill 'zycjsl' '自有车间领料出库数' 'X' '' ''.
fill 'jscjsl' '寄售车间领料出库数' 'X' '' ''.
fill 'qmsl' '期末数量' 'X' '' ''.
wa_sort-fieldname = 'MAKTX'.
wa_sort-up = 'X'.
APPEND wa_sort TO lt_sort.
CLEAR wa_sort.
wa_sort-fieldname = 'LGOBE'.
wa_sort-up = 'X'.
APPEND wa_sort TO lt_sort.
CLEAR wa_sort.
wa_sort-fieldname = 'NAME1'.
wa_sort-up = 'X'.
APPEND wa_sort TO lt_sort.
CLEAR wa_sort.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_settings = i_grid_settings "显示界面可编辑字段上修改了数据,回车后就会立即将内表的数据也修改
i_callback_program = sy-cprog "sy-repid "标记当前程序
it_fieldcat = fieldcat[]
is_layout = layout
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'SET_STATUS'
TABLES
t_outtab = itad.
ENDFORM. " FRM_SHOW_DATA
FORM set_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZJGLL'.
ENDFORM.
FORM user_command USING rf_ucomm LIKE sy-ucomm
rs TYPE slis_selfield .
rs-refresh = 'X'.
CASE rf_ucomm.
WHEN '&IC1'.
READ TABLE item INDEX rs-tabindex.
WHEN OTHERS.
ENDCASE.
ENDFORM.
3 总结
3.1 逻辑拆分
上面实现的逻辑是
a 先从数据库表里取值 到内表,
b 然后这个内表分成二部分,第一部分是期初数据内表,第二部份是这个时间段的数据;
c.对这个时间雄的内表数据进行处理分成(自有和寄售)
d.然后对这三部分数据做逻辑处理
e 然后对数据进行合并后处理
f: 最后实现展示.
3.2 总结
a ABAP实际上就是处理数据流的逻辑处理语言;
b 如果你很了解业务,你做ABAP开发是非常有优势的,你知道某个地方该怎么控制;
c:凡是都有一个借贷关系(有正负);