通过
MATNR MATNR CHAR 40 0 物料编号
BWKEY BWKEY CHAR 4 0 估价范围
找到CKMLHD-KALNR
ps:mlit表也有成本估算编号KALNR。
再通过CKMLHD-KALNR -> CKMLCR期间价格
付:
*&---------------------------------------------------------------------*
*& Report ZMMR015E
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmmr015e.
INCLUDE zmm015e_head.
INCLUDE zmm015e_screen.
INCLUDE zmm015e_form.
AT SELECTION-SCREEN.
PERFORM: frm_check_auth.
START-OF-SELECTION.
PERFORM frm_get_data.
PERFORM frm_change_data.
END-OF-SELECTION.
PERFORM f_display_data.
ZMM015E_HEAD包含文件:
*&---------------------------------------------------------------------*
*& 包含 ZMM015E_HEAD
*&---------------------------------------------------------------------*
TABLES:mara,matdoc.
TYPES: BEGIN OF sy_output,
key1 TYPE matdoc-key1,
key2 TYPE matdoc-key2,
key3 TYPE matdoc-key3,
key4 TYPE matdoc-key4,
key5 TYPE matdoc-key5,
key6 TYPE matdoc-key6,
matnr TYPE matdoc-matnr, "物料
maktx TYPE makt-maktx, "物料描述
werks TYPE matdoc-werks,
lgort_sid TYPE matdoc-lgort_sid, "仓位
lgobe TYPE t001l-lgobe, "仓位描述
konts TYPE t030-konts, "科目
txt50 TYPE skat-txt50, "科目描述
mtart TYPE mara-mtart, "物料类型
mtbez TYPE t134t-mtbez, "物料类型描述
matkl TYPE mara-matkl, "物料组
wgbez TYPE t023t-wgbez, "物料组描述
extwg TYPE mara-extwg, "外部物料组
meins TYPE matdoc-meins, "基本计量单位
waers TYPE matdoc-waers, "货币码
menge TYPE matdoc-menge, "数量
gjahr TYPE matdoc-gjahr,
dmbtr TYPE matdoc-dmbtr, "zdanjia, "金额
mblnr TYPE matdoc-mblnr, "物料凭证编号
lifnr_sid TYPE matdoc-lifnr_sid, "供应商
stock_qty TYPE matdoc-stock_qty, "库存数量
shkzg TYPE matdoc-shkzg, "借/贷标识
CPUDT TYPE matdoc-budat, "会计凭证输入日期
bwart TYPE matdoc-bwart,
zqcsl TYPE matdoc-menge, "期初数量
zqcje TYPE matdoc-dmbtr, "期初金额
zrksl TYPE matdoc-menge, "本期入库数量
zrkje TYPE matdoc-dmbtr, "本期入库金额
zcksl TYPE matdoc-menge, "本期出库数量
zckje TYPE matdoc-dmbtr, "本期出口金额
zqmsl TYPE matdoc-menge, "期末数量
zqmje TYPE matdoc-dmbtr, "期末金额
dmbtr2 TYPE p DECIMALS 8, "zdanjia, "金额
slbox,
END OF sy_output.
DATA: gt_output TYPE STANDARD TABLE OF sy_output,
gs_output TYPE sy_output,
gt_output2 TYPE STANDARD TABLE OF sy_output,
gs_output2 TYPE sy_output,
gt_output3 TYPE STANDARD TABLE OF sy_output,
gs_output3 TYPE sy_output.
DATA: gs_layout TYPE lvc_s_layo,
gt_fieldcat TYPE lvc_t_fcat.
DATA: lt_output TYPE STANDARD TABLE OF sy_output,
lt_output2 TYPE STANDARD TABLE OF sy_output.
ZMM015E_SCREEN包含文件:
*&---------------------------------------------------------------------*
*& 包含 ZMM015E_SCREEN
*&---------------------------------------------------------------------*
SELECTION-SCREEN:BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_werks LIKE matdoc-werks DEFAULT '1000'.
SELECT-OPTIONS: s_budat FOR matdoc-budat OBLIGATORY DEFAULT sy-datum,
s_lgort FOR matdoc-lgort_sid,
s_mtart FOR mara-mtart,
s_matkl FOR mara-matkl,
s_matnr FOR mara-matnr.
SELECTION-SCREEN END OF BLOCK blk1.
ZMM015E_FORM包含文件:
*&---------------------------------------------------------------------*
*& 包含 ZMM015E_FORM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM frm_get_data .
DATA: p_datumh TYPE sy-datum,
p_datuml TYPE sy-datum.
READ TABLE s_budat INDEX 1.
IF sy-subrc EQ 0.
IF s_budat-high IS NOT INITIAL.
p_datumh = s_budat-high.
p_datuml = s_budat-low.
ELSE.
p_datumh = s_budat-low.
p_datuml = s_budat-low.
ENDIF.
ENDIF.
SELECT matdoc~key1
matdoc~key2
matdoc~key3
matdoc~key4
matdoc~key5
matdoc~key6
matdoc~matnr
matdoc~werks
matdoc~lgort_sid
matdoc~meins
matdoc~waers
matdoc~menge
matdoc~dmbtr
matdoc~mblnr
matdoc~lifnr_sid
matdoc~stock_qty
matdoc~shkzg
matdoc~cpudt
matdoc~gjahr
matdoc~bwart
mara~mtart "物料类型
mara~matkl "
mara~extwg
INTO CORRESPONDING FIELDS OF TABLE gt_output2
FROM matdoc JOIN mara ON matdoc~matnr EQ mara~matnr
WHERE matdoc~werks EQ p_werks
AND matdoc~matnr IN s_matnr
AND matdoc~cpudt LE p_datumh
AND matdoc~lgort IN s_lgort
AND mara~matkl IN s_matkl
AND mara~mtart IN s_mtart.
lt_output[] = gt_output2[].
SORT lt_output[] BY matnr.
DELETE ADJACENT DUPLICATES FROM lt_output COMPARING matnr.
CHECK lt_output[] IS NOT INITIAL.
**通过 物料/工厂/评估类型->ckmlhd-kalnr
SELECT belnr,kjahr,posnr,matnr,bwkey,bwtar,kalnr
INTO TABLE @DATA(lt_mlit)
FROM mlit
FOR ALL ENTRIES IN @lt_output
WHERE matnr = @lt_output-matnr
AND bwkey EQ @p_werks.
SORT lt_mlit[] BY matnr bwkey kalnr.
DELETE ADJACENT DUPLICATES FROM lt_mlit[] COMPARING matnr bwkey kalnr.
IF lt_mlit[] IS NOT INITIAL.
SELECT kalnr,bdatj,poper,untper,curtp,peinh,vprsv,stprs,pvprs,salk3
INTO TABLE @DATA(lt_ckmlcr)
FROM ckmlcr
FOR ALL ENTRIES IN @lt_mlit
WHERE kalnr = @lt_mlit-kalnr.
SORT lt_ckmlcr[] BY kalnr bdatj poper.
ENDIF.
*按上次物料凭证对应的FI凭证,计算的单价,作为最新的单价,来计算没有价格的物料凭证
SORT gt_output2[] BY matnr werks lgort_sid cpudt.
* SORT gt_output2[] BY matnr werks budat.
DATA: ls_indmbtr TYPE sy_output.
* lt_indmbtr TYPE sy_output.
LOOP AT gt_output2 ASSIGNING FIELD-SYMBOL(<ls_input>).
IF <ls_input>-dmbtr EQ 0.
* IF ls_indmbtr-matnr EQ <ls_input>-matnr AND ls_indmbtr-werks EQ <ls_input>-werks AND ls_indmbtr-dmbtr2 NE 0 AND ls_indmbtr-lgort_sid = <ls_input>-lgort_sid AND <ls_input>-cpudt+0(6) EQ ls_indmbtr-cpudt+0(6).
* <ls_input>-dmbtr2 = ls_indmbtr-dmbtr2.
* <ls_input>-dmbtr = abs( <ls_input>-dmbtr2 * <ls_input>-stock_qty ).
* ELSE.
READ TABLE lt_mlit INTO DATA(ls_mlit) WITH KEY matnr = <ls_input>-matnr
bwkey = <ls_input>-werks.
IF sy-subrc EQ 0.
READ TABLE lt_ckmlcr INTO DATA(ls_ckmlcr) WITH KEY kalnr = ls_mlit-kalnr