java dispo lock_SAP 程序介绍-本人曾写的一个报表程序(ABAP/4语言-R/3专用语言)

*&---------------------------------------------------------------------**& Report ZMD04_XX **&...
摘要由CSDN通过智能技术生成

*&---------------------------------------------------------------------*

*& Report  ZMD04_XX                                                    *

*&                                                                     *

*&---------------------------------------------------------------------*

*&                                                                     *

*&                                                                     *

*&---------------------------------------------------------------------*

INCLUDE zmd04_XX_top.

INCLUDE zmd04_XX_sel.

START-OF-SELECTION.

IF sel03 = 'X'.

*取数据(需求日期)

PERFORM get_data_by_date.

ELSE.

*取数据(其他方式)

PERFORM get_data_by_others.

ENDIF.

*通过MRP运算得到符合条件的数据(类似TCODE:MD04的处理方式)

PERFORM get_data_from_mrp_calc.

*整理itab.1.将检验批纳入可用数量;2.按可用日期排序

PERFORM data_process_step_one.

IF NOT s_lgort IS INITIAL.

*扣减排除条件库存数据(按MRP范围计算,不考虑后台已排除与MRP相关的

*库存地的扣减,以便与MD04考虑方式一致!)

PERFORM del_speme_from_stock.

ENDIF.

*DATA_OUTPUT_TO_ALV

PERFORM ouput_to_alv.

*&--------------------------------------------------------------------*

*&      Form  data_output

*&--------------------------------------------------------------------*

*       text

*---------------------------------------------------------------------*

FORM data_output.

DATA:pos TYPE i VALUE 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MATNR'.

wa_fields-seltext_l = '物料代码'.

wa_fields-outputlen = '14'.

wa_fields-key       = 'X'.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MAKTX'.

wa_fields-seltext_l = '物料描述'.

wa_fields-outputlen = 18.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DELB0'.

wa_fields-seltext_l = 'MRP元素'.

wa_fields-outputlen = 8.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DAT00'.

wa_fields-seltext_l = '可用日期'.

wa_fields-outputlen = 8.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DAT01'.

wa_fields-seltext_l = '收货日期'.

wa_fields-outputlen = 8.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'EXTRA'.

wa_fields-seltext_l = 'MRP元素数据'.

wa_fields-outputlen = 15.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MNG01'.

wa_fields-seltext_l = '收货/需求数量'.

wa_fields-outputlen = 11.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MNG02'.

wa_fields-seltext_l = '可用量'.

wa_fields-outputlen = 11.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'SPEME'.

wa_fields-seltext_l = '冻结库存量'.

wa_fields-outputlen = 11.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'LGORT'.

wa_fields-seltext_l = '库存'.

wa_fields-outputlen = 4.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'AUSKT'.

wa_fields-seltext_l = '例外'.

wa_fields-outputlen = 3.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DELNR'.

wa_fields-seltext_l = 'MRP元素号'.

wa_fields-outputlen = 10.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DELPS'.

wa_fields-seltext_l = 'MRP元素项'.

wa_fields-outputlen = 9.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'BERID'.

wa_fields-seltext_l = 'MRP范围'.

wa_fields-outputlen = 7.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_grid_title       = alv_title

i_save             = 'X'

it_fieldcat        = alv_fields

TABLES

t_outtab           = itab     "输出内表

EXCEPTIONS

program_error      = 1

OTHERS             = 2.

ENDFORM.                    "data_output

*&---------------------------------------------------------------------*

*&      Form  get_data_from_mrp_calc

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM get_data_from_mrp_calc .

LOOP AT it00.

ON CHANGE OF it00-matnr OR it00-berid.

CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API'

EXPORTING

matnr   = it00-matnr

werks   = it00-werks

berid   = it00-berid

IMPORTING

e_mt61d = imt61d

e_mdkp  = imdkp

e_cm61m = icm61m

e_mdsta = imdsta

TABLES

mdpsx   = imdps

mdezx   = imdez

mdsux   = imdsu.

IF sy-subrc EQ 0.

MOVE-CORRESPONDING imt61d TO itab.

IF itab-dispo IN s_dispo.

LOOP AT imdez.

MOVE-CORRESPONDING imdez TO itab.

READ TABLE imdps INDEX sy-tabix.

IF sy-subrc EQ 0 AND imdez-delkz = 'AR'.

itab-delnr = imdps-delnr.

itab-delps = imdps-delps.

ENDIF.

APPEND itab.

ENDLOOP.

ENDIF.

CLEAR imt61d.

CLEAR itab.

ENDIF.

ENDON.

ENDLOOP.

ENDFORM.                                                    " get_data_from_mrp_calc

*&---------------------------------------------------------------------*

*&      Form  IT00lgt

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM del_speme_from_stock .

LOOP AT itab.

num = sy-tabix.

ON CHANGE OF itab-matnr OR itab-berid.

PERFORM mrp_area USING itab-matnr

itab-werks

itab-berid.

LOOP AT ilgort WHERE  berid = itab-berid AND lgort IN s_lgort.

SELECT SINGLE * FROM t001l WHERE werks = ilgort-werks

AND lgort = ilgort-lgort

AND diskz NE ''.

IF sy-subrc NE 0.

itab-mng02 = itab-mng02 - ilgort-labst - ilgort-insme.

ENDIF.

ENDLOOP.

MODIFY itab INDEX num TRANSPORTING mng02.

CLEAR:ilgort,ilgort[].

ENDON.

ENDLOOP.

ENDFORM.                          " del_speme_from_stock

*&---------------------------------------------------------------------*

*&      Form  data_process_step_one

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM data_process_step_one .

*

DATA: BEGIN OF x_line OCCURS 0,

lines LIKE sy-tabix,

mngxx LIKE itab-mng01,

END OF x_line.

*

LOOP AT itab.

num = sy-tabix.

IF  itab-plumi = 'B'.

IF NOT x_line IS INITIAL AND x_line-mngxx NE 0.

APPEND x_line.

CLEAR x_line.

ENDIF.

x_line-lines = num.

ENDIF.

IF itab-delkz = 'QM'.

x_line-mngxx = x_line-mngxx + itab-mng01.

ENDIF.

*一个物料计算结束清空中间结果

AT END OF matnr.

IF NOT x_line IS INITIAL AND x_line-mngxx NE 0.

APPEND x_line.

CLEAR:x_line.

ENDIF.

ENDAT.

CLEAR:itab.

ENDLOOP.

LOOP AT x_line.

READ TABLE itab INDEX x_line-lines.

IF sy-subrc EQ 0.

itab-mng02 = itab-mng02 + x_line-mngxx.

itab-mng01 = itab-mng02.

MODIFY itab INDEX x_line-lines TRANSPORTING mng01 mng02.

ENDIF.

ENDLOOP.

*按收货日期排序

SORT itab BY matnr berid plaab planr dat01.

*重新计算MNG02

DATA x_mng02 LIKE itab-mng02.

DATA: num LIKE sy-tabix.

LOOP AT itab.

num = sy-tabix.

IF itab-plumi NE 'B'.

itab-mng02 = x_mng02 + itab-mng01.

MODIFY itab INDEX num TRANSPORTING mng02.

ENDIF.

x_mng02 = itab-mng02.

ENDLOOP.

ENDFORM.                    " data_process_step_one

*&---------------------------------------------------------------------*

*&      Form  itab_cZL

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM itab_czl .

DATA: zdatum LIKE sy-datum.

DATA: nnn LIKE sy-tabix.

it_itab[] = itab[].

po_itab[] = itab[].

PERFORM calcit_itab.

PERFORM calcpo_itab.

LOOP AT it00.

READ TABLE it_itab WITH KEY matnr = it00-matnr

berid = it00-berid

delkz =  'WB'.

IF sy-subrc EQ 0.

it01-aufnr = it00-aufnr.

it01-rsnum = it00-rsnum.

it01-rspos = it00-rspos.

it01-berid = it00-berid.

it01-matnr = it00-matnr.

it01-prgrp = it00-prgrp.

it01-lbtxt = it00-lbtxt.

it01-normt = it00-normt.

IF it00-kzear IS INITIAL.

it01-m_jxq = it00-enmng - it00-bdmng.

ENDIF.

*取库存地下的冻结库存

PERFORM get_speme_from_mard USING it00-matnr

it00-werks

it00-berid

CHANGING x_speme.

it01-speme = x_speme.

it_itab-mng02 = it_itab-mng02 - x_speme.

CLEAR:x_speme.

it01-m_kyk = it_itab-mng02.

it01-maktx = it_itab-maktx.

it01-werks = it_itab-werks.

it01-dispo = it_itab-dispo.

it01-mng_a = it01-m_kyk + it01-m_jxq.

READ TABLE it_itab WITH KEY delnr = it00-rsnum delps = it00-rspos.

IF sy-subrc EQ 0.

zdatum = it_itab-dat01.

LOOP AT po_itab WHERE matnr = it00-matnr

AND berid = it00-berid

AND delkz NE 'WB'

AND dat01 <= zdatum.

it01-mng_a1 = it01-mng_a1 + po_itab-mng01.

ENDLOOP.

it01-mng_a2 = it01-mng_a + it01-mng_a1.

IF it01-mng_a2 > 0.

it01-mng_a2 = 0.

ENDIF.

ENDIF.

APPEND it01.

ENDIF.

CLEAR it01.

ENDLOOP.

LOOP AT it01.

ON CHANGE OF it01-aufnr OR it01-matnr OR it01-berid.

IF sy-tabix NE 1.

APPEND it01_01.

CLEAR it01_01.

ENDIF.

MOVE it01 TO it01_01.

ENDON.

IF it01-rspos NE it01_01-rspos.

it01_01-rspos = ''.

it01_01-m_jxq = it01_01-m_jxq + it01-m_jxq.

it01_01-mng_a = it01_01-mng_a  + it01-m_jxq.

it01_01-mng_a2 = it01_01-mng_a + it01_01-mng_a1.

IF it01_01-mng_a2 > 0.

it01_01-mng_a2 = 0.

ENDIF.

ENDIF.

AT LAST.

APPEND it01_01.

CLEAR it01_01.

ENDAT.

ENDLOOP.

REFRESH: it00,itab,it01,it_itab,po_itab.

ENDFORM.                    " itab_cZL

*&---------------------------------------------------------------------*

*&      Form  data_output_iT01

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM data_output_it01 .

DATA:pos TYPE i VALUE 1.

CLEAR wa_fields.

wa_fields-fieldname = 'PRGRP'.

wa_fields-seltext_l = '型号'.

wa_fields-outputlen = 12.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'LBTXT'.

wa_fields-seltext_l = '国家'.

wa_fields-outputlen = 12.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'NORMT'.

wa_fields-seltext_l = '颜色'.

wa_fields-outputlen = 12.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MATNR'.

wa_fields-seltext_l = '物料代码'.

wa_fields-outputlen = '15'.

*  wa_fields-KEY       = 'X'.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MAKTX'.

wa_fields-seltext_l = '物料描述'.

*  wa_fields-no_out    = 'X'.

*  wa_fields-DO_SUM    =  'X'.

wa_fields-outputlen = 20.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

*

*  wa_fields-fieldname = 'DELB0'.

*  wa_fields-seltext_l = 'MRP元素'.

*  wa_fields-outputlen = 6.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

*  wa_fields-fieldname = 'DAT00'.

*  wa_fields-seltext_l = '可用日期'.

*  wa_fields-outputlen = 8.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

*  wa_fields-fieldname = 'DAT01'.

*  wa_fields-seltext_l = '收货日期'.

*  wa_fields-outputlen = 8.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

*

*  wa_fields-fieldname = 'EXTRA'.

*  wa_fields-seltext_l = 'MRP元素数据'.

*  wa_fields-outputlen = 40.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

wa_fields-fieldname = 'M_JXQ'.

wa_fields-seltext_l = '净需求数量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'M_KYK'.

wa_fields-seltext_l = '可用库存量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'SPEME'.

wa_fields-seltext_l = '冻结库存量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MNG_A'.

wa_fields-seltext_l = '确认需求量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MNG_A1'.

wa_fields-seltext_l = '确认的PO量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'MNG_A2'.

wa_fields-seltext_l = '短缺数量'.

wa_fields-outputlen = 13.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

*

*  wa_fields-fieldname = 'LGORT'.

*  wa_fields-seltext_l = '库存'.

*  wa_fields-outputlen = 4.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

*

*  wa_fields-fieldname = 'AUSKT'.

*  wa_fields-seltext_l = '库存'.

*  wa_fields-outputlen = 2.

*  wa_fields-COL_POS  = POS.

*  APPEND wa_fields TO ALV_fields.

*  POS = POS + 1.

*  CLEAR wa_fields.

wa_fields-fieldname = 'AUFNR'.

wa_fields-seltext_l = '生产订单'.

wa_fields-outputlen = 12.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'RSNUM'.

wa_fields-seltext_l = '预留号'.

wa_fields-outputlen = 10.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'RSPOS'.

wa_fields-seltext_l = '项目'.

wa_fields-outputlen = 4.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'BERID'.

wa_fields-seltext_l = 'MRP范围'.

wa_fields-outputlen = 10.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

wa_fields-fieldname = 'DISPO'.

wa_fields-seltext_l = 'MRP控制者'.

wa_fields-outputlen = 10.

wa_fields-col_pos  = pos.

APPEND wa_fields TO alv_fields.

pos = pos + 1.

CLEAR wa_fields.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

EXPORTING

i_callback_program = sy-repid

i_grid_title       = alv_title

i_save             = 'X'

it_fieldcat        = alv_fields

i_callback_user_command = 'MYCOMMANDC'

TABLES

t_outtab           = it01_01     "输出内表

EXCEPTIONS

program_error      = 1

OTHERS             = 2.

ENDFORM.                    " data_output_iT01

*&---------------------------------------------------------------------*

*&      Form  itab_bzl

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

*----------------------------------------------------------------------*

FORM itab_bzl .

DATA: zdatum LIKE sy-datum.

DATA: nnn LIKE sy-tabix.

*AR 相关预订

*BE 订单项目计划行

*FE 生产订单

*LA 发运通知

*MR 预定

*SB 相关需求

*U2 库存转移请求的批准订单

*UR 转储预定的库存

*WB 工厂库存

it_itab[] = itab[].

po_itab[] = itab[].

PERFORM calcit_itab.

PERFORM calcpo_itab.

LOOP AT it00.

READ TABLE it_itab WITH KEY matnr = it00-matnr

berid = it00-berid

delkz =  'WB'.

IF sy-subrc EQ 0.

iout-aufnr = it00-aufnr.

iout-rsnum = it00-rsnum.

iout-rspos = it00-rspos.

iout-berid = it00-berid.

iout-matnr = it00-matnr.

iout-prgrp = it00-prgrp.

iout-lbtxt = it00-lbtxt.

iout-normt = it00-normt.

*取库存地下的冻结库存

PERFORM get_speme_from_mard USING it00-matnr

it00-werks

it00-berid

CHANGING x_speme.

iout-speme = x_speme.

it_itab-mng02 = it_itab-mng02 - x_speme.

CLEAR:x_speme.

iout-m_kyk = it_itab-mng02.

iout-maktx = it_itab-maktx.

iout-werks = it_itab-werks.

iout-dispo = it_itab-dispo.<

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值