整车生产订单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'.
  •      p_mblnr = ig_messtab-msgv1.
        CONCATENATE '确认保存(倒冲:' ig_messtab-msgv1 ',错误的:'
                    ig_messtab-msgv2 ')' INTO p_mess.
      ENDIF.
    
    ENDCASE.
    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`

image

image

posted on 2025-06-12 11:08  加西亚1986  阅读(48)  评论(0)    收藏  举报

导航