*&---------------------------------------------------------------------*
*& Report ZCO019
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zco019.
TABLES : matdoc .
SELECT-OPTIONS: s_bukrs FOR matdoc-bukrs OBLIGATORY ,
s_budat FOR matdoc-budat OBLIGATORY ,
s_aufnr FOR matdoc-aufnr .
DATA: BEGIN OF gs_out ,
budat LIKE matdoc-budat,
bukrs LIKE matdoc-bukrs,
werks LIKE matdoc-werks,
mblnr LIKE matdoc-mblnr,
aufnr LIKE matdoc-aufnr,
matnr LIKE matdoc-matnr,
bwtar LIKE matdoc-bwtar,
charg LIKE matdoc-charg,
bwart LIKE matdoc-bwart,
stock_qty LIKE matdoc-dmbtr_stock,
dmbtr_stock LIKE matdoc-dmbtr_stock,
vprsv LIKE matdoc-vprsv,
objnr LIKE aufk-objnr,
dj TYPE p DECIMALS 6, "单价
dmbtr_stock2 LIKE matdoc-dmbtr_stock,
END OF gs_out .
DATA: gt_out LIKE TABLE OF gs_out .
DATA: BEGIN OF ls_covp,
aufnr LIKE matdoc-aufnr,
belnr LIKE coep-belnr , "如果不加这个 FOR ALL ENTRY IN 会少一行
wogbtr LIKE coep-wogbtr,
END OF ls_covp .
DATA: lt_covp LIKE TABLE OF ls_covp .
DATA: gt_fieldcat TYPE lvc_t_fcat .
DATA: gs_fieldcat TYPE lvc_s_fcat .
DATA: gs_layout TYPE lvc_s_layo .
ParaMETERS : CB_01 AS CHECKBox .
"取物料
SELECT
budat
a~bukrs
a~werks
mblnr
a~aufnr
matnr
bwtar
charg
bwart
stock_qty
dmbtr_stock
vprsv
objnr
INTO TABLE gt_out
FROM matdoc AS a
JOIN aufk AS b ON a~aufnr = b~aufnr
WHERE a~bukrs IN s_bukrs
AND budat IN s_budat
AND a~aufnr IN s_aufnr
AND B~AUART <> 'Z010'
AND B~AUART <> 'Z020' .
DATA: BEGIN OF ls_jest,
objnr LIKE jest-objnr,
* STAT LIKE JEST-STAT , "查询TECO DLV等描述可以 关联 TJ02T 这个表
END OF ls_jest .
DATA: lt_jest LIKE TABLE OF ls_jest .
if cb_01 eq 'X' .
SELECT objnr
INTO TABLE lt_jest
FROM jest
FOR ALL ENTRIES IN gt_out
WHERE objnr = gt_out-objnr
AND ( stat EQ 'I0012' OR stat EQ 'I0045' OR stat EQ 'I0046' ) "查询TECO DLV等描述可以 关联 TJ02T 这个表
AND INACT EQ '' .
DATA lv_tabix TYPE sy-tabix .
LOOP AT gt_out INTO gs_out .
CLEAR lv_tabix .
lv_tabix = sy-tabix .
READ TABLE lt_jest INTO ls_jest WITH KEY objnr = gs_out-objnr .
IF sy-subrc EQ 0 .
DELETE gt_out INDEX lv_tabix .
ENDIF .
ENDLOOP .
ENDIF .
DATA : lv_KALNR LIKE ckmlhd-kalnr .
DATA: lv_peinh LIKE ckmlcr-peinh .
DATA: lv_year TYPE c LENGTH 4 .
DATA: lv_mon TYPE c LENGTH 3 .
" 取实际金额
LOOP AT gt_out INTO gs_out .
SELECT SINGLE kalnr INTO lv_KALNR
FROM ckmlhd
WHERE matnr = gs_out-matnr
AND bwkey = gs_out-werks
AND bwtar = gs_out-bwtar
AND kzbws = space.
lv_year = gs_out+0(4) .
lv_mon = '0' && gs_out+4(2) .
IF gs_out-vprsv EQ 'S' .
SELECT SINGLE pvprs peinh INTO ( gs_out-dj , lv_peinh )
FROM ckmlcr
WHERE kalnr = lv_kalnr
AND bdatj = lv_year
AND poper = lv_mon .
IF lv_peinh IS NOT INITIAL .
gs_out-dj = gs_out-dj / lv_peinh .
ELSE .
gs_out-dj = 0 .
ENDIF .
gs_out-dmbtr_stock2 = gs_out-stock_qty * gs_out-dj .
* IF gs_out-bwart EQ '101' OR gs_out-bwart EQ '102' .
* gs_out-dmbtr_stock2 = gs_out-dmbtr_stock .
* ENDIF .
ELSE .
gs_out-dmbtr_stock2 = gs_out-dmbtr_stock .
ENDIF .
MODIFY gt_out FROM gs_out .
ENDLOOP .
"取制造费用
IF CB_01 EQ 'X' .
IF gt_out IS NOT INITIAL .
SELECT aufnr belnr wogbtr
FROM v_covp
INTO CORRESPONDING FIELDS OF TABLE lt_covp
FOR ALL ENTRIES IN gt_out
WHERE aufnr = gt_out-aufnr
AND budat IN s_budat
AND k_vrgng <> 'COIN' .
endif.
else .
SELECT aufnr belnr wogbtr
FROM v_covp
INTO CORRESPONDING FIELDS OF TABLE lt_covp
WHERE aufnr in s_aufnr
AND budat IN s_budat
AND k_vrgng <> 'COIN' .
ENDIF .
DATA: BEGIN OF gs_covp,
aufnr LIKE matdoc-aufnr,
wogbtr LIKE coep-wogbtr,
END OF gs_covp .
DATA: gt_covp LIKE TABLE OF gs_covp .
LOOP AT lt_covp INTO ls_covp .
MOVE-CORRESPONDING ls_covp TO gs_covp .
COLLECT gs_covp INTO gt_covp .
CLEAR : gs_covp .
ENDLOOP .
" 调整发出为正数 入库为负数
LOOP AT gt_out INTO gs_out .
gs_out-stock_qty = gs_out-stock_qty * -1 .
gs_out-dmbtr_stock = gs_out-dmbtr_stock * -1 .
gs_out-dmbtr_stock2 = gs_out-dmbtr_stock2 * -1 .
MODIFY gt_out FROM gs_out .
ENDLOOP .
"添加制造费用
LOOP AT gt_covp INTO gs_covp .
CLEAR: gs_out .
gs_out-aufnr = gs_covp-aufnr .
gs_out-matnr = '制造费用' .
gs_out-dmbtr_stock = gs_covp-wogbtr .
gs_out-dmbtr_stock2 = gs_covp-wogbtr .
APPEND gs_out TO gt_out .
ENDLOOP .
SORT gt_out BY aufnr budat ASCENDING .
DEFINE append_field.
gs_fieldcat-fieldname = &1.
gs_fieldcat-coltext = &2.
APPEND gs_fieldcat TO gt_fieldcat.
CLEAR: gs_fieldcat.
END-OF-DEFinitioN.
append_field: 'BUKRS' '公司代码' .
append_field: 'BUDAT' '过账日期' .
append_field: 'AUFNR' '工单号' .
append_field: 'MBLNR' '物料凭证号' .
append_field: 'MATNR' '物料编号' .
append_field: 'BWTAR' '评估类型' .
append_field: 'CHARG' '物料批次' .
append_field: 'BWART' '移动类型' .
append_field: 'STOCK_QTY' '数量' .
append_field: 'DMBTR_STOCK' '金额_标准' .
append_field: 'VPRSV' '价格控制' .
append_field: 'DJ' '实际单价' .
append_field: 'DMBTR_STOCK2' '金额_实际' .
gs_layout-cwidth_opt = 'X'. "列宽自适应
gs_layout-zebra = 'X'. "斑马线
CALL FUNCTION 'REUSE_ALV_GRID_disPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'FRM_STATUS_SET'
* i_callback_user_command = 'FRM_USER_COMMAND'
*
* I_GRID_SETTINGS =
is_layout_lvc = gs_layout
it_fieldcat_lvc = gt_fieldcat
i_save = 'A'
* i_grid_settings = ls_grid_settings
* it_events = lt_events
* is_variant = ls_variant
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = gt_out
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
原文地址:https://www.jb51.cc/wenti/3282083.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。