REPORT ZML_QJ MESSAGE-ID c+.
tables: CKMLRUNPLANT .
data: ITAB_MSG like BDCMSGCOLL OCCURS 0 with header line.
***1.Define an internal table with BDCDATA structure ***
DATA BEGIN OF INT_BDC OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA END OF INT_BDC.
refresh INT_BDC.
***2. Define Key Figure Internal Table ***
DATA: BEGIN OF ITAB_MLQJ OCCURS 0,
WERKS LIKE CKMLRUNPLANT-WERKS,
END OF ITAB_MLQJ.
***3. Define BDC Program and Screen ***
FORM BDC_SCREEN TABLES P_BDC STRUCTURE BDCDATA
USING P_PROGRAM P_SCREEN.
CLEAR P_BDC.
P_BDC-PROGRAM = P_PROGRAM.
P_BDC-DYNPRO = P_SCREEN.
P_BDC-DYNBEGIN = 'X'.
APPEND P_BDC.
ENDFORM. "BDC_SCREEN
***4.Define BDC Field Data ***
FORM BDC_FIELD TABLES P_BDC STRUCTURE BDCDATA
USING P_NAME P_VALUE.
CLEAR P_BDC.
CASE P_VALUE.
WHEN ''.
WHEN OTHERS.
P_BDC-FNAM = P_NAME.
P_BDC-FVAL = P_VALUE.
APPEND P_BDC.
ENDCASE.
ENDFORM.
***5.selection screen ***
selection-screen begin of block zmlqj with frame title text1.
select-options i_WERKS for CKMLRUNPLANT-WERKS no intervals .
parameters: P_GJAHR like CKMLRUNPLANT-GJAHR OBLIGATORY
default sy-datum+0(4),
P_POPER like CKMLRUNPLANT-POPER OBLIGATORY
default sy-datum+4(2) .
selection-screen end of block zmlqj.
***6.执行BDC 屏幕,循环工厂打开期间.
INITIALIZATION.
text1 = '批量允许工厂进行物料帐结帐' .
AT SELECTION-SCREEN.
START-OF-SELECTION.
*判断工厂是否错误且激活启用了物料帐
select BWKEY into table ITAB_MLQJ from t001k
where BWKEY IN i_WERKS
and MLBWA ne 'X' .
if sy-subrc eq space .
loop at itab_mlqj.
concatenate '工厂:' itab_mlqj-werks '物料帐未启动或无效工厂!'
into itab_msg .
message I001(00) with itab_msg .
endloop .
endif .
*************************************
refresh itab_MLQJ .
select BWKEY into table ITAB_MLQJ from t001K
where BWKEY IN i_WERKS .
Loop at ITAB_MLQJ.
*执行ML_ALLOW_SETTLEMENT,即Tcode:CKMF
AUTHORITY-CHECK OBJECT 'K_ML_VA'
ID 'ACTVT' FIELD '45'
ID 'BWKEY' FIELD ITAB_MLQJ-WERKS.
IF sy-subrc ne 0.
MESSAGE e054 WITH ITAB_MLQJ-WERKS.
* 检查工厂授权,不同公司代码用户只能操作自己工厂
ENDIF.
refresh INT_BDC.
perform BDC_SCREEN TABLES INT_BDC using
'ML_ALLOW_SETTLEMENT' '1000 ' .
perform BDC_FIELD TABLES INT_BDC :
using 'BDC_CURSOR' 'P_BDATJ',
using 'BDC_OKCODE' '=ONLI' ,
using 'P_WERKS' ITAB_MLQJ-WERKS,
using 'P_POPER' P_POPER,
using 'P_BDATJ' P_GJAHR .
perform BDC_SCREEN TABLES INT_BDC using
'ML_ALLOW_SETTLEMENT' '1000 ' .
perform BDC_FIELD TABLES INT_BDC :
using 'BDC_CURSOR' 'P_WERKS',
using 'BDC_OKCODE' '/EE' .
CALL TRANSACTION 'CKMF'
USING INT_BDC
MODE 'E'
UPDATE 'S'
MESSAGES INTO ITAB_MSG .
*执行ML_ALLOW_CLOSING,即Tcode:CKMG
refresh INT_BDC.
perform BDC_SCREEN TABLES INT_BDC using
'ML_ALLOW_CLOSING' '1000 ' .
perform BDC_FIELD TABLES INT_BDC :
using 'BDC_CURSOR' 'P_BDATJ',
using 'BDC_OKCODE' '=ONLI' ,
using 'P_WERKS' ITAB_MLQJ-WERKS,
using 'P_POPER' P_POPER,
using 'P_BDATJ' P_GJAHR .
perform BDC_SCREEN TABLES INT_BDC using
'ML_ALLOW_CLOSING' '1000 ' .
perform BDC_FIELD TABLES INT_BDC :
using 'BDC_CURSOR' 'P_WERKS',
using 'BDC_OKCODE' '/EE' .
CALL TRANSACTION 'CKMG'
USING INT_BDC
MODE 'E'
UPDATE 'S'
MESSAGES INTO ITAB_MSG .
Endloop .
*列举出被允许价格确定和结算的工厂+会计年度/期间情况.
write : 'CKMF/CKMG:允许价格确定/结算,工厂/期间细清单如下:'.
write : / '----------------------------------------------------'.
write : / '|工 厂|会计年度|会计期间|备 注 |'.
Loop at ITAB_MLQJ.
write : / '----------------------------------------------------'.
write : / '|',ITAB_MLQJ-WERKS,'| ',P_GJAHR,' | ',P_POPER,' |',
'该期价格确定和结算被允许|'.
ENDLOOP.
write : / '----------------------------------------------------'.
联系客服