整车生产订单TECO/取消
&---------------------------------------------------------------------
*& 包含 ZPP045_IMPORT
&---------------------------------------------------------------------
IMPORT P1 = LV_PROGNAME from MEMORY ID 'SE38_ZPP045'.
IF LV_PROGNAME eq 'ZPP045'.
answer = 'J'.
CLEAR subrc_tmp.
ENDIF.
&---------------------------------------------------------------------
*& 包含 ZPP045_EXPORT
&---------------------------------------------------------------------
LV_PROGNAME = 'ZPP045'.
EXPORT P1 = LV_PROGNAME TO MEMORY ID 'SE38_ZPP045'.`
&---------------------------------------------------------------------
*& 包含 ZPP045_TOP
&---------------------------------------------------------------------
DATA LV_PROGNAME TYPE PROGNAME .
`----------------------------------------------------------------------
*** Program ID : < ZPP045.> ***
*** Program Name : <整车生产订单TECO/取消> ***
----------------------------------------------------------------------
REPORT zpp045 NO STANDARD PAGE HEADING MESSAGE-ID 00 .
NEW-PAGE LINE-SIZE 1000 LINE-COUNT 100.
INCLUDE ZPP045_TOP.
----------------------------------------------------------------------
-
Tables
----------------------------------------------------------------------
TABLES :zift0019.
----------------------------------------------------------------------
-
Internal Tables and Work Areas
----------------------------------------------------------------------
DATA:gt_zift0019 TYPE TABLE OF zift0019.
DATA:gt_jest TYPE TABLE OF jest.
DATA: gc_tcode(10) VALUE 'CO02', "修改工艺路线
gc_mode(1) VALUE 'N', "模式
gc_update(1) VALUE 'S'.
TYPES:BEGIN OF ty_data ,
aufnr TYPE aufnr,
tidnr TYPE tidnr,
gernr TYPE gernr,
plnbez TYPE matnr,
objnr TYPE jest-objnr,
mess TYPE bapi_msg,
END OF ty_data .
DATA gt_data TYPE TABLE OF ty_data.
&---------------------------------------------------------------------
*& Include ZIBDC01 *
*& BDC 通用定义
&---------------------------------------------------------------------
-
data definition for batch input
DATA: ig_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
-
messages of call transaction
DATA: ig_messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
-
parameters of call transaction
DATA cupdate LIKE ctu_params-updmode VALUE 'S'.
"S: synchronously
"A: asynchronously
"L: local
DATA ctumode LIKE ctu_params-dismode VALUE 'N'.
"A: show all dynpros
"E: show dynpro on error only
"N: do not display dynpro
----------------------------------------------------------------------
-
DEFINE
----------------------------------------------------------------------
DEFINE macro_bl.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' "补前导零
EXPORTING
input = &1
IMPORTING
output = &1
EXCEPTIONS
OTHERS = 1.
END-OF-DEFINITION.
DEFINE macro_ql.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' "去前导零
EXPORTING
input = &1
IMPORTING
output = &1
.
END-OF-DEFINITION.
----------------------------------------------------------------------
-
Ranges
----------------------------------------------------------------------
----------------------------------------------------------------------
-
Selection Screen
----------------------------------------------------------------------
----------------------------------------------------------------------
---------------------INITIALIZATION ----------------------------------
INITIALIZATION .
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS s_vin FOR zift0019-tidnr .
SELECT-OPTIONS s_date FOR zift0019-erdat .
PARAMETERS p_canc AS CHECKBOX .
SELECTION-SCREEN END OF BLOCK b1 .
---------------------AT SELECTION-SCREEN -----------------------------
AT SELECTION-SCREEN .
---------------------AT SELECTION-SCREEN OUTPUT-----------------------
AT SELECTION-SCREEN OUTPUT.
----------------------------------------------------------------------
-
START-OF-SELECTION
----------------------------------------------------------------------
START-OF-SELECTION.
PERFORM frm_get_data .
PERFORM frm_pro_data .
PERFORM frm_dis_data .
END-OF-SELECTION.
------------------------------ --------------------------------------
-
Subroutines
---------------------------------------------------------------------
&---------------------------------------------------------------------
*& Form FRM_GET_DATA
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
- --> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_get_data .
IF s_date[] IS INITIAL AND s_vin[] IS INITIAL .
MESSAGE '输入日期和VIN码至少输入一个' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDIF.
IF s_date IS NOT INITIAL .
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_zift0019
FROM zift0019
WHERE tidnr IN s_vin
AND erdat IN s_date .
IF gt_zift0019 IS NOT INITIAL.
SELECT ser05~ppaufnr AS aufnr
objk~sernr AS gernr "序列号
objk~matnr AS plnbez
equz~tidnr "VIN码
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM objk INNER JOIN ser05 ON objk~obknr = ser05~obknr
INNER JOIN equz ON objk~equnr = equz~equnr
FOR ALL ENTRIES IN gt_zift0019
WHERE equz~tidnr = gt_zift0019-tidnr .
ENDIF.
ELSE.
SELECT ser05~ppaufnr AS aufnr
objk~sernr AS gernr "序列号
objk~matnr AS plnbez
equz~tidnr "VIN码
INTO CORRESPONDING FIELDS OF TABLE gt_data
FROM objk INNER JOIN ser05 ON objk~obknr = ser05~obknr
INNER JOIN equz ON objk~equnr = equz~equnr
WHERE equz~tidnr IN s_vin .
ENDIF .
SORT gt_data BY aufnr .
IF gt_data[] IS INITIAL .
MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDIF.
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
<fs_data>-objnr = |OR{ <fs_data>-aufnr ALPHA = IN }|.
ENDLOOP .
SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_jest
FROM jest FOR ALL ENTRIES IN gt_data
WHERE objnr = gt_data-objnr
AND stat EQ 'I0045'.
SORT gt_jest BY objnr.
LOOP AT gt_data ASSIGNING <fs_data> .
DATA(lv_tabix) = sy-tabix.
READ TABLE gt_jest INTO DATA(ls_jest) WITH KEY objnr = <fs_data>-objnr
BINARY SEARCH .
IF sy-subrc <> 0 .
IF p_canc EQ abap_true. "如果想取消TECO,但单据没有标记TECO状态
DELETE gt_data INDEX lv_tabix.
ENDIF.
ELSE.
IF ( p_canc EQ abap_true AND ls_jest-inact EQ abap_true ) OR "如果想取消TECO,但单据已经是取消TECO状态
( p_canc NE abap_true AND ls_jest-inact NE abap_true ). "如果想标记TECO,但单据已经是标记TECO状态
DELETE gt_data INDEX lv_tabix.
ENDIF.
ENDIF.
ENDLOOP .
IF gt_data[] IS INITIAL .
MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING .
ENDIF.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_DIS_DATA
&---------------------------------------------------------------------
-
text
----------------------------------------------------------------------
- --> p1 text
- <-- p2 text
----------------------------------------------------------------------
FORM frm_dis_data .
DATA: gr_table TYPE REF TO cl_salv_table,
functions TYPE REF TO cl_salv_functions_list.
IF sy-batch EQ abap_true .
LOOP AT gt_data INTO DATA(ls_data).
WRITE: / , ls_data-aufnr ,
ls_data-gernr ,
ls_data-tidnr ,
ls_data-mess .
ENDLOOP.
ELSE.
TRY .
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_data.
CATCH cx_salv_msg.
ENDTRY.
gr_table->get_columns( )->set_optimize( 'X' ).
functions = gr_table->get_functions( ).
functions->set_all( ).
gr_table->display( ).
ENDIF .
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_PROCESS_DATA
&---------------------------------------------------------------------
FORM frm_pro_data .
DATA:l_okcode(10) TYPE c.
IF p_canc EQ abap_true."取消TECO
l_okcode = '=TABR'.
ELSE.
l_okcode = '=TABS'.
ENDIF.
LOOP AT gt_data ASSIGNING FIELD-SYMBOL(<fs_data>).
PERFORM frm_delete_prodorder USING <fs_data>-aufnr l_okcode
CHANGING <fs_data>-mess.
IF p_canc EQ abap_true."取消TECO
<fs_data>-mess = |取消TECO:{ <fs_data>-mess }|.
ELSE.
<fs_data>-mess = |标记TECO:{ <fs_data>-mess }|.
ENDIF.
COMMIT WORK.
ENDLOOP.
ENDFORM. " FRM_PROCESS_DATA
&---------------------------------------------------------------------
*& Form FRM_DELETE_PRODORDER"'=LVMS' '=TABS',=TABR
&---------------------------------------------------------------------
FORM frm_delete_prodorder USING pi_aufnr pi_okcode
CHANGING po_mess.
DATA:l_aufnr LIKE aufk-aufnr,
l_mtype TYPE c.
DATA:ls_return TYPE bapiret2,
lt_order TYPE TABLE OF bapi_order_key ,
lS_order TYPE bapi_order_key ,
lS_order_return TYPE bapi_order_return ,
lt_order_return TYPE TABLE OF bapi_order_return .
CLEAR:l_aufnr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = pi_aufnr
IMPORTING
output = l_aufnr.
IF p_canc EQ abap_true."取消TECO
PERFORM frm_fill_bdc USING: 'X' 'SAPLCOKO1' '0110',
' ' 'CAUFVD-AUFNR' pi_aufnr,
' ' 'R62CLORD-FLG_OVIEW' 'X',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPLCOKO1' '0115',
' ' 'BDC_OKCODE' pi_okcode ,
'X' 'SAPLCOKO1' '0115',
' ' 'BDC_OKCODE' '=BU'.
PERFORM frm_bdc_transaction USING gc_tcode
gc_mode
gc_update
CHANGING l_mtype
po_mess
l_aufnr.
IF l_mtype = 'S'.
po_mess = '处理完成'.
ELSE.
po_mess = '处理失败'.
ENDIF.
ELSE.
CALL FUNCTION 'DIALOG_SET_NO_DIALOG' .
INCLUDE ZPP045_export.
CLEAR lS_order .
CLEAR lT_order[].
lS_order-order_number = l_aufnr .
APPEND lS_order TO lt_order.
CALL FUNCTION 'BAPI_PRODORD_COMPLETE_TECH'
IMPORTING
return = ls_return
TABLES
orders = lt_order
detail_return = lt_order_return.
- BREAK-POINT .
DELETE lt_order_return WHERE TYPE = 'I' AND NUMBER = 889 .
LOOP AT lt_order_return INTO lS_order_return
WHERE TYPE = 'A' OR TYPE = 'E' OR TYPE = 'I'.
EXIT .
ENDLOOP.
IF SY-SUBRC <> 0 .
po_mess = '处理完成'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING wait = 'X'.
ELSE.
po_mess = '处理失败'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.
ENDIF.
ENDFORM. " FRM_DELETE_PRODORDER
&---------------------------------------------------------------------
*& Form frm_fill_bdc
&---------------------------------------------------------------------
-
BDC 公用
----------------------------------------------------------------------
- 调用举例:
- PERFORM frm_fill_bdc USING:
- 'X' 'SAPLMGMM' '0060',
- '' 'RMMG1-MATNR' ig_out-matnr,
- '' 'BDC_OKCODE' '=AUSW'.
----------------------------------------------------------------------
FORM frm_fill_bdc USING v_1 v_2 v_3.
CLEAR ig_bdcdata .
IF v_1 = 'X' .
ig_bdcdata-program = v_2 .
ig_bdcdata-dynpro = v_3 .
ig_bdcdata-dynbegin = 'X' .
ELSE.
ig_bdcdata-fnam = v_2 .
ig_bdcdata-fval = v_3 .
ENDIF .
APPEND ig_bdcdata .
ENDFORM. "frm_fill_bdc
&--------------------------------------------------------------------
*& Form frm_bdc_transaction
&-------------------------------------------------------------------- -
text
---------------------------------------------------------------------
-
-->TCODE -
-->FLAG_OK 成功则返回 'X',否则为空 -
-->MSGTXT 返回信息 - 调用举例:
- DATA: wl_ok(1) TYPE c, wl_msgtxt(200) TYPE c.
- PERFORM frm_bdc_transaction USING 'ME21N' ctumode cupdate
-
CHANGING wl_ok wl_msgtxt.
---------------------------------------------------------------------
FORM frm_bdc_transaction USING tcode ctumode cupdate
CHANGING p_mtype p_mess p_mblnr.
REFRESH ig_messtab.
p_mtype = 'E'.
CALL TRANSACTION tcode USING ig_bdcdata
MODE ctumode
UPDATE cupdate
MESSAGES INTO ig_messtab.
IF sy-subrc = 0.
p_mtype = 'S'.
ENDIF.
- Read error messages
LOOP AT ig_messtab WHERE msgtyp = 'E' OR msgtyp = 'A'.
PERFORM frm_add_message CHANGING p_mess.
ENDLOOP.
IF sy-subrc = 0.
p_mtype = 'E'. "Error exists
ELSE. - Read successful messages
LOOP AT ig_messtab WHERE msgtyp = 'S'.
PERFORM frm_add_message CHANGING p_mess.
ENDLOOP.
ENDIF.
LOOP AT ig_messtab WHERE msgtyp = 'S'.
CASE tcode.
WHEN 'CO01' OR 'CO08' OR 'CO40'.
IF ig_messtab-msgid = 'CO' AND ig_messtab-msgnr = '100'.
p_mblnr = ig_messtab-msgv1.
CLEAR:p_mess.
ENDIF.
WHEN 'MB31'.
IF ig_messtab-msgid = 'M7' AND ig_messtab-msgnr = '060'.
p_mblnr = ig_messtab-msgv1.
CLEAR:p_mess.
ENDIF.
WHEN 'CO15'.
IF ig_messtab-msgid = 'RU' AND ig_messtab-msgnr = '110'. -
ENDCASE.p_mblnr = ig_messtab-msgv1. CONCATENATE '确认保存(倒冲:' ig_messtab-msgv1 ',错误的:' ig_messtab-msgv2 ')' INTO p_mess. ENDIF.
ENDLOOP.
REFRESH ig_bdcdata.
ENDFORM. "frm_bdc_transaction
&--------------------------------------------------------------------
*& Form frm_add_message
&-------------------------------------------------------------------- -
text
---------------------------------------------------------------------
-
-->MSGTXT text
---------------------------------------------------------------------
FORM frm_add_message CHANGING p_msgtxt.
DATA: wl_msgtxt(100) TYPE c.
PERFORM frm_build_msg_text USING ig_messtab CHANGING wl_msgtxt.
IF p_msgtxt IS INITIAL.
p_msgtxt = wl_msgtxt.
ELSE.
CONCATENATE p_msgtxt '/' wl_msgtxt INTO p_msgtxt.
ENDIF.
ENDFORM. "frm_add_message
&--------------------------------------------------------------------
*& Form frm_build_msg_text
&--------------------------------------------------------------------
-
text
---------------------------------------------------------------------
-
-->AL_MESSG text -
-->P_MSGTXT text
---------------------------------------------------------------------
FORM frm_build_msg_text USING al_messg LIKE bdcmsgcoll
CHANGING p_msgtxt.
CLEAR p_msgtxt.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = al_messg-msgid
msgnr = al_messg-msgnr
msgv1 = al_messg-msgv1
msgv2 = al_messg-msgv2
msgv3 = al_messg-msgv3
msgv4 = al_messg-msgv4
IMPORTING
message_text_output = p_msgtxt.
ENDFORM. "frm_build_msg_text`


浙公网安备 33010602011771号