批量开物料账期的程序

作者:ABAP老白 约 3 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, MM, 开发, 物料管理
批量开物料账期的程序 - 封面图
批量开物料账期的程序 - 封面图

*&\---------------------------------------------------------------------*

*& BDC 调用 MMPV 批量 开物料帐账期

*&\---------------------------------------------------------------------*

REPORT zmmpv NO STANDARD PAGE HEADING .

TABLES : t000 , marv .

DATA : bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE .

DATA : BEGIN OF messtab OCCURS 0 .

INCLUDE STRUCTURE bdcmsgcoll .

DATA : END OF messtab .

DATA : BEGIN OF itab_log OCCURS 0 ,

message ( 132 ) TYPE c ,

END OF itab_log .

DATA : datum TYPE sy \- datum .

PARAMETERS : p_bukrs TYPE bukrs OBLIGATORY MEMORY ID buk ,

p_frdat TYPE sy \- datum ,

p_todat TYPE sy \- datum ,

p_mode LIKE ctu_params \- dismode AS LISTBOX DEFAULT 'E' VISIBLE

LENGTH 16 OBLIGATORY .

INITIALIZATION .

CONCATENATE sy \- datum ( 6 ) '01' INTO p_todat .

AT SELECTION-SCREEN OUTPUT .

%_p_bukrs_%_app_% \- text = ' 公司代码 ' .

%_p_frdat_%_app_% \- text = ' 当前期间 ' .

%_p_todat_%_app_% \- text = ' 开到期间 ' .

%_p_mode_%_app_% \- text = 'BDC 运行模式 ' .

AT SELECTION-SCREEN ON p_bukrs .

ON CHANGE OF p_bukrs .

SELECT SINGLE * FROM marv

WHERE bukrs = p_bukrs .

IF sy \- subrc = 0 .

CONCATENATE marv \- lfgja marv \- lfmon '01' INTO p_frdat .

ELSE .

MESSAGE e000 ( oo ) WITH ' 公司代码 ' p_bukrs ' 不存在物料帐数据 ' .

ENDIF .

LEAVE SCREEN .

ENDON .

START-OF-SELECTION .

IF p_frdat IS INITIAL OR p_frdat = '' OR

p_todat IS INITIAL OR p_todat = '' .

MESSAGE e000 ( oo ) WITH ' 日期不可以为空 ' .

ENDIF .
SELECT SINGLE * FROM t000

WHERE mandt = sy \- mandt AND

cccategory = 'P' .

IF sy \- subrc = 0 .

MESSAGE s000 ( oo ) WITH ' 不可以在生产系统使用本程序 ' .

RETURN .

ENDIF .

p_frdat = p_frdat + 32 .

CONCATENATE p_frdat ( 6 ) '01' INTO datum .

WHILE datum ( 6 ) <= p_todat ( 6 ).

PERFORM bdc .

datum = datum + 32 .

datum+6 ( 2 ) = '01' .

ENDWHILE .

MESSAGE s000 ( oo ) WITH ' 完毕,请使用 MMRV 查看结果 ' .

LOOP AT itab_log .

WRITE / itab_log .

ENDLOOP .

*&\---------------------------------------------------------------------*

*& Form bdc

*&\---------------------------------------------------------------------*

FORM bdc .

DATA : option TYPE ctu_params .

option \- dismode = p_mode .

option \- racommit = 'X' .

CLEAR : bdcdata , bdcdata[] .

PERFORM bdc_dynpro USING 'RMMMPERI' '1000' .

PERFORM bdc_field USING 'BDC_OKCODE' '=ONLI' .

PERFORM bdc_field USING 'I_VBUKR' p_bukrs .

PERFORM bdc_field USING 'I_BBUKR' p_bukrs .

PERFORM bdc_field USING 'I_DATUM' datum .

PERFORM bdc_dynpro USING 'SAPMSSY0' '0120' .

PERFORM bdc_field USING 'BDC_OKCODE' '=&F03' .

PERFORM bdc_dynpro USING 'RMMMPERI' '1000' .

PERFORM bdc_field USING 'BDC_OKCODE' '/EE' .

CALL TRANSACTION 'MMPV' USING bdcdata

OPTIONS FROM option MESSAGES INTO messtab .

LOOP AT messtab . CALL FUNCTION 'MESSAGE_TEXT_BUILD'

EXPORTING

msgid = messtab \- msgid

msgnr = messtab \- msgnr

msgv1 = messtab \- msgv1

msgv2 = messtab \- msgv2

msgv3 = messtab \- msgv3

msgv4 = messtab \- msgv4

IMPORTING

message_text_output = itab_log \- message . APPEND itab_log .

CLEAR itab_log .

ENDLOOP . ENDFORM . "bdc

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

• Start new screen *

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

FORM bdc_dynpro USING program dynpro .

CLEAR bdcdata .

bdcdata \- program = program .

bdcdata \- dynpro = dynpro .

bdcdata \- dynbegin = 'X' .

APPEND bdcdata . ENDFORM . "BDC_DYNPRO

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

• Insert field *

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

FORM bdc_field USING fnam fval .

CLEAR bdcdata .

bdcdata \- fnam = fnam .

bdcdata \- fval = fval .

CONDENSE bdcdata \- fval .

APPEND bdcdata . ENDFORM . "BDC_FIELD
批量开物料账期的程序 - 封面图
批量开物料账期的程序 - 封面图
ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「批量开物料账期的程序.md」整理生成,仅用于内部技术分享与学习交流。