计划订单批量转生产订单---可直接使用

*&---------------------------------------------------------------------*
*& Report ZPPR022
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zppr104.

TABLES: plaf, ioitem.
TYPESBEGIN OF tp_output.
    INCLUDE STRUCTURE sfc_poco.
TYPES: cy_seqnr   TYPE afko-cy_seqnr,
       aufnr_t    TYPE string,
       cy_seqnr_t TYPE string,
       txt        TYPE t024f-txt,
       ablad      TYPE afpo-ablad,
       msg        TYPE bapi_msg,      " 消息
       fstyle     TYPE lvc_t_styl,
       ZKHBZ     TYPE MARA-ZKHBZ"客户备注
       WRKST     TYPE MARA-WRKST,
       ZCPGG     TYPE MARA-ZCPGG.
TYPESEND OF tp_output.

TYPESBEGIN OF tp_material,
         matnr TYPE marc-matnr,
         maktx TYPE makt-maktx,
       END OF tp_material.

TYPESBEGIN OF tp_auart,
         auart     TYPE auart,
         numkr     TYPE t003o-numkr,
         externind TYPE nriv-externind,
         stsma     TYPE t003o-stsma,
       END OF tp_auart.

TYPESBEGIN OF tp_mbew,
         matnr TYPE mbew-matnr,
         bwkey TYPE mbew-bwkey,
         werks TYPE afpo-dwerk,
         bwtar TYPE mbew-bwtar,
         lplpr TYPE mbew-lplpr,
       END OF tp_mbew.

TYPESBEGIN OF tp_ordaut,
         auart TYPE t003o-auart,
         txt   TYPE t003p-txt,
       END OF tp_ordaut.

DATA: gt_output TYPE STANDARD TABLE OF tp_output,
      gs_auart  TYPE tp_auart.

DATA: gt_fcat TYPE lvc_t_fcat,
      gs_layo TYPE lvc_s_layo.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
"PARAMETERS: p_werks TYPE plaf-plwrk OBLIGATORY DEFAULT '1000'.
PARAMETERS: p_werks TYPE plaf-plwrk .
SELECT-OPTIONS: s_plnum FOR plaf-plnum,
                s_matnr FOR plaf-matnr,
                s_plgrp FOR plaf-plgrp ,
                s_dispo FOR plaf-dispo,
                s_psttr FOR plaf-psttr,
                s_pedtr FOR plaf-pedtr,
                s_kdauf FOR ioitem-kdauf MATCHCODE OBJECT vmva,
                s_kdpos FOR ioitem-kdpos.
PARAMETERS: p_auart TYPE aufk-auart OBLIGATORY.
SELECTION-SCREEN END OF BLOCK blk1.


INITIALIZATION.
  CLEAR: gs_auart.
  PERFORM frm_init_fcat.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_auart.
  PERFORM frm_auart_f4 CHANGING p_auart.

 AT SELECTION-SCREEN.
PERFORM FRM_CXKZPP.     " 权限检查

START-OF-SELECTION.
  PERFORM frm_get_data.

END-OF-SELECTION.
  PERFORM frm_show_data.



FORM frm_init_fcat.
  DATA: ls_fcat TYPE lvc_s_fcat.
  gs_layo-zebra 'X'.
*  gs_layo-cwidth_opt = 'X'.
  gs_layo-box_fname 'SEL'.
  gs_layo-stylefname 'FSTYLE'.

  DEFINE mro_fcat.
    CLEAR: ls_fcat.
    ls_fcat-fieldname = &1.
    ls_fcat-coltext = &2.
    ls_fcat-scrtext_l = &2.
    ls_fcat-scrtext_m = &2.
    ls_fcat-scrtext_s = &2.
    ls_fcat-no_zero 'X'.
    TRANSLATE ls_fcat-fieldname TO UPPER CASE.
    ls_fcat-ref_table = &3.
    ls_fcat-ref_field = &4.
    ls_fcat-edit = &5.
    TRANSLATE ls_fcat-ref_table TO UPPER CASE.

    IF &1 EQ 'AUFNR_T' OR &1 EQ 'CY_SEQNR_T'.
      ls_fcat-outputlen 20 .
    ENDIF .
    IF  &1 NE 'AUFNR_T' AND &1 NE 'CY_SEQNR_T'.
      ls_fcat-col_opt 'X' .
    ENDIF .
    ls_fcat-DD_OUTLEN = &6.
    APPEND ls_fcat TO gt_fcat.
  END-OF-DEFINITION.

  mro_fcat 'PWWRK' '工厂'  '' '' '' ''.
  mro_fcat 'AUFNUM' '生产订单号' '' '' 'X' ''.
  mro_fcat 'AUART' '订单类型' '' '' space space.
  mro_fcat 'MATNR' '物料编码' '' '' space space.
  mro_fcat 'KTEXT' '物料描述' '' '' space space.
  mro_fcat 'MEINS' '单位' ''  '' ''  space.
  mro_fcat 'PLNUM' '计划订单'  '' '' space space.
  mro_fcat 'AUFNR_T' '来源工单'  '' '' space space.
  mro_fcat 'CY_SEQNR_T' '优先级'  '' '' space space.
  mro_fcat 'GSMNG' '订单数量' 'PLAF'  'GSMNG' 'X' '13'.
  mro_fcat 'PSTTR' '订单开始日期' 'PLAF'  'PSTTR' 'X'  ''.
  mro_fcat 'PEDTR' '订单结束日期' 'PLAF'  'PEDTR' 'X'  ''.
  mro_fcat 'CY_SEQNR' '销售订单数量' ''  '' 'X' '14'.
  mro_fcat 'PLGRP' '生产管理员' ''  '' ''  ''.
  mro_fcat 'TXT' '生产管理员名称'  '' ''  '' ''.
  mro_fcat 'ABLAD' '卸货点' ''  '' 'X'  '25'.
  mro_fcat 'VERID' '生产版本' 'MKAL'  'VERID' 'X'  ''.
  mro_fcat 'LGORT' '库存地点' 'PLAF'  'LGORT' 'X'  ''.
  mro_fcat 'KDAUF' '销售订单号' ''  '' ''  '' .
  mro_fcat 'KDPOS' '行项目号' ''  '' ''  '' .
  mro_fcat 'ZKHBZ' '客户备注' ''  '' 'X'  '100' .
  mro_fcat 'WRKST' '基本物料' 'MARA'  'WRKST' ''  '' .
  mro_fcat 'ZCPGG' '产品型号' 'MARA'  'ZCPGG' ''  '' .
  mro_fcat 'MSG' '消息' '' '' '' '20' .

ENDFORM.


FORM frm_auart_f4 CHANGING cv_auart TYPE aufart.
  DATA: lt_ordaut TYPE STANDARD TABLE OF tp_ordaut.
  SELECT t003o~auart t003p~txt
    INTO CORRESPONDING FIELDS OF TABLE lt_ordaut
    FROM t003o INNER JOIN t003p
      ON t003o~auart EQ t003p~auart
     AND t003p~spras EQ sy-langu
   WHERE t003o~autyp EQ '10'.  
CHECK sy-subrc EQ 0.  
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'    
EXPORTING      retfield        
'AUART'      dynpprog        
= sy-repid      dynpnr          
= sy-dynnr      dynprofield     
'P_AUART'      value_org       
'S'    
TABLES      value_tab       
= lt_ordaut    
EXCEPTIONS      parameter_error 
1      no_values_found 
2      
OTHERS          3.  
IF sy-subrc <> 0.
* Implement suitable error handling here  
ENDIF.

ENDFORM.

FORM FRM_CXKZPP .    "权限检查 
DATA:LV_MESSAGE TYPE CHAR255.     

AUTHORITY-CHECK OBJECT 'M_MATE_WRK'      
ID 'ACTVT' DUMMY"FIELD 'xxxxxxxx'      
ID 'WERKS' FIELD p_werks.    
IF SY-SUBRC <> 0.      LV_MESSAGE 
'没有公司代码的查询权限!'.      
MESSAGE LV_MESSAGE TYPE 'E'.    
ENDIF.
ENDFORM.

FORM frm_get_data.  
TYPES:BEGIN OF ty_plaf.        
INCLUDE TYPE plaf.  
TYPES:zkhbz TYPE mara-zkhbz,        wrkst 
TYPE mara-wrkst,        zcpgg 
TYPE mara-zcpgg.  
TYPES:END OF ty_plaf.  
DATA: lt_plaf TYPE STANDARD TABLE OF ty_plaf,        ls_plaf 
LIKE LINE OF lt_plaf.  
DATA: ls_output LIKE LINE OF gt_output,        lv_index  
LIKE sy-tabix.  
DATA: lt_material TYPE STANDARD TABLE OF tp_material,        ls_material 
LIKE LINE OF lt_material,        lt_mbew     

TYPE STANDARD TABLE OF tp_mbew,        ls_mbew     
LIKE LINE OF lt_mbew,        ls_style    

TYPE lvc_s_styl.
DATA:BEGIN OF ls_zkhbz,     matnr 
TYPE mara-matnr,     zkhbz 
TYPE mara-zkhbz,     wrkst 
TYPE mara-wrkst,     zcpgg 
TYPE mara-zcpgg,     
END OF ls_zkhbz,     lt_zkhbz 
LIKE STANDARD TABLE OF ls_zkhbz.  
RANGES: rg_matnr FOR plaf-matnr.  

PERFORM frm_get_auart CHANGING gs_auart.  

SELECT *    
INTO CORRESPONDING FIELDS OF TABLE lt_plaf    
FROM plaf   
WHERE matnr IN s_matnr     
AND plwrk EQ p_werks     
AND plnum IN s_plnum     
AND dispo IN s_dispo     
AND plgrp IN s_plgrp     
AND psttr IN s_psttr     
AND pedtr IN s_pedtr     
AND kdauf IN s_kdauf     
AND kdpos IN s_kdpos     
AND umskz EQ 'X'     
AND beskz NE 'F'.  

LOOP AT lt_plaf INTO ls_plaf.    lv_index 
= sy-tabix.    

AUTHORITY-CHECK OBJECT 'ZPP001'     
ID 'WERKS' FIELD ls_plaf-pwwrk     
ID 'ZFEVOR' FIELD ls_plaf-plgrp     
ID 'AUFART' FIELD p_auart.    
IF sy-subrc <> 0.
*     Implement a suitable exception handling here      
DELETE lt_plaf INDEX lv_index.      
CONTINUE.    
ENDIF.    

CHECK rg_matnr[] IS INITIAL OR ls_plaf-matnr NOT IN rg_matnr.    rg_matnr
-sign 'I'.    rg_matnr
-option 'EQ'.    rg_matnr
-low = ls_plaf-matnr.    
APPEND rg_matnr.  
ENDLOOP.  

DATABEGIN OF ls_resb,          rsnum    
LIKE resb-rsnum,          rspos    
LIKE resb-rspos,          rsart    
LIKE resb-rsart,          matnr    
LIKE resb-matnr,          werks    
LIKE resb-werks,          bdter    
LIKE resb-bdter,          aufnr    
LIKE resb-aufnr,          cy_seqnr 
LIKE afko-cy_seqnr,        
END OF ls_resb,        lt_resb 
LIKE TABLE OF ls_resb.  

CHECK lt_plaf[] IS NOT INITIAL.  

IF rg_matnr[] IS NOT INITIAL.    
SELECT marc~matnr makt~maktx      
INTO CORRESPONDING FIELDS OF TABLE lt_material      
FROM marc INNER JOIN makt        
ON marc~matnr EQ makt~matnr       
AND makt~spras EQ sy-langu     
WHERE marc~matnr IN rg_matnr     
ORDER BY marc~matnr ASCENDING.    

SELECT matnr zkhbz wrkst zcpgg      
INTO TABLE lt_zkhbz      
FROM mara      
WHERE mara~matnr IN rg_matnr ORDER BY mara~matnr ASCENDING.      

SORT lt_zkhbz BY matnr.    

SELECT mbew~matnr mbew~bwkey mbew~bwtar mbew~lplpr           t001w
~werks      
INTO CORRESPONDING FIELDS OF TABLE lt_mbew      
FROM mbew INNER JOIN t001w        
ON mbew~bwkey EQ t001w~bwkey     
WHERE mbew~matnr IN rg_matnr       
AND t001w~werks EQ p_werks     
ORDER BY mbew~matnr.    

CLEAR: lt_resb[], lt_resb .    
SELECT resb~rsnum           resb
~rspos           resb
~rsart           resb
~matnr           resb
~werks           resb
~bdter           resb
~aufnr           afko
~cy_seqnr      
INTO CORRESPONDING FIELDS OF TABLE lt_resb      
FROM resb      INNER 
JOIN afko ON resb~aufnr = afko~aufnr      
WHERE resb~matnr IN rg_matnr        
AND resb~xloek ''        
AND resb~kzear ''..  
ENDIF.  

LOOP AT lt_plaf INTO ls_plaf.    
MOVE-CORRESPONDING ls_plaf TO ls_output.    ls_output
-auart = p_auart.    
READ TABLE lt_material INTO ls_material WITH KEY matnr = ls_plaf-matnr BINARY SEARCH.    
IF sy-subrc EQ 0.      ls_output
-ktext = ls_material-maktx.    
ENDIF.    
READ TABLE lt_zkhbz INTO ls_zkhbz WITH KEY matnr = ls_plaf-matnr BINARY SEARCH.    
IF sy-subrc 0.        ls_output
-zkhbz = ls_zkhbz-zkhbz.        ls_output
-wrkst = ls_zkhbz-wrkst.        ls_output
-zcpgg = ls_zkhbz-zcpgg.    
ENDIF.    
"生产管理员    
SELECT SINGLE txt INTO ls_output-txt FROM t024f WHERE fevor = ls_output-plgrp .    

IF gs_auart-externind EQ space.      
CLEAR: ls_style.      ls_style
-fieldname 'AUFNUM'.      ls_style
-style = cl_gui_alv_grid=>mc_style_disabled.      
INSERT ls_style INTO TABLE ls_output-fstyle.    
ENDIF.

*    READ TABLE lt_mbew INTO ls_mbew WITH KEY matnr = ls_output-matnr.
*    IF sy-subrc EQ 0 AND ls_mbew-lplpR EQ 0.
*      MOVE '物料未做标准成本估算不允许创建标准生产订单,请走财务估算流程' TO ls_output-msg.
*      CLEAR: ls_style.
*      ls_style-style = cl_gui_alv_grid=>mc_style_disabled.
*      INSERT ls_style INTO TABLE ls_output-fstyle.
*    ENDIF.    

LOOP AT lt_resb INTO ls_resb WHERE matnr = ls_plaf-matnr                                        
AND bdter <= ls_plaf-pertr .      
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
EXPORTING          
input  = ls_resb-aufnr        
IMPORTING          
output = ls_resb-aufnr.      

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'        
EXPORTING          
input  = ls_resb-cy_seqnr        
IMPORTING          
output = ls_resb-cy_seqnr.      ls_output

-aufnr_t    = ls_output-aufnr_t     && '/' && ls_resb-aufnr .      ls_output
-cy_seqnr_t = ls_output-cy_seqnr_t  && '/' && ls_resb-cy_seqnr .      
CLEAR: ls_resb .    
ENDLOOP .    

APPEND ls_output TO gt_output.    
CLEAR: ls_output .  
ENDLOOP.

ENDFORM.


FORM frm_get_auart CHANGING cs_auart TYPE tp_auart.  

SELECT SINGLE t003o~auart t003o~numkr nriv~externind                t003o
~stsma    
INTO CORRESPONDING FIELDS OF cs_auart    
FROM t003o INNER JOIN nriv      
ON t003o~numkr EQ nriv~nrrangenr     
AND nriv~object EQ 'AUFTRAG'     
AND nriv~subobject EQ space   
WHERE t003o~auart EQ p_auart "IN rg_auart     
AND t003o~autyp EQ '10'.

ENDFORM.

FORM frm_show_data.  
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'    
EXPORTING      i_callback_program       
= sy-repid      i_callback_pf_status_set 
'FRM_SET_STATUS'      i_callback_user_command  
'FRM_USER_COMMAND'      is_layout_lvc            
= gs_layo      it_fieldcat_lvc          
= gt_fcat      i_save                   
'A'    
TABLES      t_outtab                 
= gt_output    
EXCEPTIONS      program_error            
1      
OTHERS                   2.  
IF sy-subrc <> 0.
* Implement suitable error handling here  
ENDIF.
ENDFORM.

FORM frm_set_status USING rt_extab TYPE slis_t_extab.  
SET PF-STATUS 'ZPF_001'.  

DATA: lo_grid TYPE REF TO cl_gui_alv_grid.  
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'    
IMPORTING      e_grid 
= lo_grid.  

CALL METHOD lo_grid->register_edit_event    
EXPORTING      i_event_id 
= cl_gui_alv_grid=>mc_evt_modified.  
IF sy-subrc <> 0.  
ENDIF.

ENDFORM.


FORM frm_user_command USING r_ucomm LIKE sy-ucomm                            rs_selfield 
TYPE slis_selfield.  
CASE r_ucomm.    
WHEN 'STRE'.    " 库存需求清单      
PERFORM frm_link_md04 USING rs_selfield-tabindex.    
WHEN 'BU'.      " 转换      
PERFORM frm_tran_order.      rs_selfield
-refresh 'X'.    
WHEN '&IC1'.      
IF rs_selfield-fieldname EQ 'AUFNUM' AND rs_selfield-value NE space.        
SET PARAMETER ID 'ANR' FIELD rs_selfield-value.        
CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.      
ENDIF.  
ENDCASE.
ENDFORM.



FORM frm_link_md04 USING iv_tabix TYPE sy-tabix.  
DATA: ls_output LIKE LINE OF gt_output.  
IF iv_tabix EQ 0.    
MESSAGE e208(00WITH '请选择一行记录'.    
RETURN.  
ENDIF.  
READ TABLE gt_output INTO ls_output INDEX iv_tabix.  
CHECK sy-subrc EQ 0.  
SET PARAMETER ID 'MAT' FIELD ls_output-matnr.  
SET PARAMETER ID 'BERID' FIELD ls_output-berid.  
SET PARAMETER ID 'WRK' FIELD ls_output-plwrk.  
CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.
ENDFORM.



*&---------------------------------------------------------------------*
*& Form FRM_TRAN_ORDER
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM frm_tran_order .  
DATA: ls_output     LIKE LINE OF gt_output,        ls_output2    
LIKE ls_output,        ls_output_sav 
LIKE ls_output,        ls_style      
TYPE lvc_s_styl,        lv_index      
LIKE sy-tabix.  
DATA: l_error_counter TYPE p,        xfehl           
TYPE p,        l_number        
TYPE p.  
DATA: l_coll_order_err TYPE c.  
DATA: entry_tot(4TYPE n.  
DATA: entry_act(4TYPE n.  
DATA BEGIN OF OCCURS 0.  
INCLUDE STRUCTURE caufvd.  
DATA END OF c.  
DATA BEGIN OF p OCCURS 0.  
INCLUDE STRUCTURE plaf  .  
DATA END OF p.  
DATA BEGIN OF a OCCURS 0.  
INCLUDE STRUCTURE afpod .  
DATA END OF a.  
DATA BEGIN OF s OCCURS 0.  
INCLUDE STRUCTURE sfc_poco.  
DATA END OF s.  
DATA caufvd_num LIKE caufvdn OCCURS WITH HEADER LINE.  

DATA: l_msgnr LIKE cmimsg-msgnr,        l_msgid 
LIKE sy-msgid,        l_msgv1 
LIKE sy-msgv1,        l_msgv2 
LIKE sy-msgv2,        l_msgv3 
LIKE sy-msgv3,        l_msgv4 
LIKE sy-msgv4.  

DATA: ls_caufvd TYPE caufvd,        ls_afpod  
TYPE afpod,        ls_plaf   
TYPE plaf,        ls_t003o  
TYPE t003o.  

DATA: hfield      TYPE c,        convert_suc 
TYPE p,        ls_afpod_e  
TYPE afpod,        ls_caufvd_e 
TYPE caufvd.  

SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_t003o    
FROM t003o   
WHERE auart = p_auart.  
LOOP AT gt_output INTO ls_output WHERE sel EQ 'X' AND msg EQ space.    lv_index 
= sy-tabix.    
CLEAR: l_error_counter, l_number, l_coll_order_err.    
CALL FUNCTION 'CM_F_INITIALIZE'      
EXPORTING        aplid               
'PPTM'        no_other_initialize 
'X'        refresh_old_log     
'X'.    

REFRESHc, p, a, s.    
CLEAR: ls_caufvd, ls_afpod, ls_afpod_e, ls_caufvd_e, hfield.    

MOVE: ls_output-auart TO ls_caufvd-auart,          ls_output
-aufnum TO ls_caufvd-aufnr,          
'X' TO ls_caufvd-umskz,          p_werks 
TO ls_caufvd-werks,          ls_output
-pwwrk TO ls_afpod-dwerk,          gs_auart
-stsma TO ls_caufvd-stats,          ls_output
-cy_seqnr TO ls_caufvd-cy_seqnr,          ls_output
-plnum TO ls_afpod-plnum,          ls_output
-ablad TO ls_afpod-ablad.    
MOVE-CORRESPONDING ls_output TO ls_plaf.    
MOVE ls_output-cy_seqnr TO ls_plaf-seqnr.    

PERFORM frm_full_init.    

IF ls_output-leadplnum NE space.      
MOVE-CORRESPONDING ls_output TO s.      
APPEND s.    
ENDIF.    

IF ls_output-leadplnum IS INITIAL AND       
NOT ls_output-arsnr IS INITIAL.      l_coll_order_err 
'X'.    
ENDIF.    
MOVE-CORRESPONDING ls_output TO ls_output_sav.    

IF l_coll_order_err IS INITIAL.      
LOOP AT gt_output INTO ls_output2 WHERE leadplnum EQ ls_output-plnum                                          
AND plnum NE ls_output-plnum                                          
AND beskz EQ 'E'.        
CLEARc, p, a, s.
*        s = sfc_pocot. APPEND s.        
MOVE-CORRESPONDING ls_output2 TO s.        
APPEND s.
*...Tab. der Planauftr#ge zu erstellenden Positionen und K#pfe aufbauen
*...Daten übernehmen        
MOVE: ls_caufvd-auart   TO c-auart,
*              'X'               TO one_marked,              
'X'               TO c-umskz,              gs_auart
-stsma      TO c-stats.
*...Werk füllen wegen Verprobung Auftragsart.        
MOVE  p_werks    TO c-werks.
*...Index merken, wegen Meldungen        
APPEND c.        
MOVE-CORRESPONDING ls_output TO pAPPEND p.        
MOVE ls_output-plnum TO a-plnum.   APPEND a.      
ENDLOOP.      
ADD TO l_number.      

CALL FUNCTION 'CO_ZV_COMMIT_SUPPRESS_ACTIVATE'.      

CALL FUNCTION 'CO_SD_PLANNED_ORDER_CONVERT'        
EXPORTING          afpod_imp     
= ls_afpod          caufvd_imp    
= ls_caufvd          t003o_imp     
= ls_t003o          plaf_imp      
= ls_plaf        
IMPORTING          afpod_exp     
= ls_afpod_e          caufvd_exp    
= ls_caufvd_e          convert_suc   
= hfield        
TABLES          plaf_tab      
= p          caufvd_tab    
c          sfc_pocot     
= s          afpod_tab     
= a        
EXCEPTIONS          error_message 
01.    
ENDIF.    

IF NOT sy-subrc IS INITIAL OR      
NOT l_coll_order_err IS INITIAL.      
IF sy-msgno NE 819 AND         sy
-msgno NE 650.
* -> Messagenummer zwischenspeichern        
IF l_coll_order_err IS INITIAL.          l_msgid 
= sy-msgid.          l_msgnr 
= sy-msgno.          l_msgv1 
= sy-msgv1.          l_msgv2 
= sy-msgv2.          l_msgv3 
= sy-msgv3.          l_msgv4 
= sy-msgv4.        
ELSE.          l_msgid 
'C2'.          l_msgnr 
'256'.          l_msgv1 
= ls_output-plnum.          l_msgv2 
= ls_output-arsnr.          l_msgv3 
' '.          l_msgv4 
' '.        
ENDIF.        
ADD TO l_error_counter.
* ->'Umsetzung des Planauftrags & wurde abgebrochen aufgrund der Meld.        
CALL FUNCTION 'CM_F_MESSAGE'          
EXPORTING            arbgb 
'CO'            msgnr 
'875'            msgty 
'E'            msgv1 
= ls_output_sav-plnum.        
CALL FUNCTION 'CM_F_MESSAGE'          
EXPORTING            arbgb 
= l_msgid            msgnr 
= l_msgnr            msgty 
'E'            msgv1 
= l_msgv1            msgv2 
= l_msgv2            msgv3 
= l_msgv3            msgv4 
= l_msgv4.      
ENDIF.      

CALL FUNCTION 'FORMAT_MESSAGE'        
EXPORTING          
id        = sy-msgid          lang      
= sy-langu          
no        = sy-msgno          v1        
= sy-msgv1          v2        
= sy-msgv2          v3        
= sy-msgv3          v4        
= sy-msgv4        
IMPORTING          msg       
= ls_output_sav-msg        
EXCEPTIONS          not_found 
1          
OTHERS    2.      
IF sy-subrc <> 0.
* Implement suitable error handling here      
ENDIF.      ls_output_sav

-conv_fehl 2.
* -> Markierung zurücknehmen      
CLEAR ls_output_sav-sel.      
MODIFY gt_output FROM ls_output_sav INDEX lv_index.
* -> text-memory l#schen, wegen performance nur im fehlerfall      
CALL FUNCTION 'DELETE_TEXT_FROM_CATALOG'        
EXPORTING          object    
'*'          name      
'*'          
id        '*'          
language  '*'        
EXCEPTIONS          not_found 
1          
OTHERS    2.
*       Reset all internal buffers      
CALL FUNCTION 'CO_ZF_DATA_RESET_COMPLETE'.
*       create conversion log
*      PERFORM create_message_table USING sfc_pocot_sav.      
CONTINUE.    
ENDIF.    

IF sy-msgid 'CO' AND sy-msgno GE 816 AND sy-msgno LE 818.      hfield 
' '.    
ENDIF.    

IF NOT hfield IS INITIAL.      convert_suc 
= convert_suc + 1.      
CALL FUNCTION 'CO_ZV_ORDER_POST'        
EXPORTING          no_gui_message 
'X' "yx          trans_typ      
'H' "tc10-trtyp        
IMPORTING          first_aufnr    
= ls_caufvd-aufnr        
TABLES          caufvd_num_exp 
= caufvd_num        
EXCEPTIONS          no_change      
01          update_reject  
02.      
IF sy-subrc 2.        
ROLLBACK WORK.        
ADD TO l_error_counter.        ls_output_sav
-conv_fehl 2.        
CLEAR ls_output_sav-sel.        
IF NOT sy-msgid IS INITIAL AND NOT sy-msgno IS INITIAL.
*           Posting failed, then save the last message in the log          l_msgid 
= sy-msgid.          l_msgnr 
= sy-msgno.          l_msgv1 
= sy-msgv1.          l_msgv2 
= sy-msgv2.          l_msgv3 
= sy-msgv3.          l_msgv4 
= sy-msgv4.          
CALL FUNCTION 'CM_F_MESSAGE'            
EXPORTING              arbgb 
'CO'              msgnr 
'875'              msgty 
'E'              msgv1 
= ls_output_sav-plnum.          
CALL FUNCTION 'CM_F_MESSAGE'            
EXPORTING              arbgb 
= l_msgid              msgnr 
= l_msgnr              msgty 
'E'              msgv1 
= l_msgv1              msgv2 
= l_msgv2              msgv3 
= l_msgv3              msgv4 
= l_msgv4.        
ELSE.          
CALL FUNCTION 'CM_F_MESSAGE'            
EXPORTING              arbgb 
'CO'              msgnr 
'335'              msgty 
'E'              msgv1 
= ls_output_sav-plnum.        
ENDIF.        
CALL FUNCTION 'CO_ZF_DATA_RESET_COMPLETE'.        

CALL FUNCTION 'FORMAT_MESSAGE'          
EXPORTING            
id        = sy-msgid            lang      
= sy-langu            
no        = sy-msgno            v1        
= sy-msgv1            v2        
= sy-msgv2            v3        
= sy-msgv3            v4        
= sy-msgv4          
IMPORTING            msg       
= ls_output_sav-msg          
EXCEPTIONS            not_found 
1            
OTHERS    2.        
MODIFY gt_output FROM ls_output_sav INDEX lv_index.      


ELSE.        ls_output_sav
-fehl = ls_caufvd-fehl.        ls_output_sav
-conv_fehl 1.        
CLEAR ls_output_sav-sel.
*        MOVE '*' TO ls_output_sav-sel_dark.        
READ TABLE caufvd_num WITH KEY plnum = ls_output_sav-plnum.        
IF sy-subrc IS INITIAL.          
DELETE caufvd_num INDEX sy-tabix.          
MOVE caufvd_num-aufnr_neu TO ls_output_sav-aufnum.          
MOVE ls_caufvd-auart TO ls_output_sav-auart.        
ENDIF.        
IF NOT ls_caufvd-fehl IS INITIAL.          xfehl 
= xfehl + 1.        
ENDIF.      
ENDIF.    
ENDIF.
*  ELSE.
*    CLEAR sfc_pocot_sav-sel.
*  ENDIF.    


MODIFY gt_output FROM ls_output_sav INDEX lv_index.
**   Create conversion log.
*  PERFORM create_message_table USING sfc_pocot_sav.
** Bei Auftragsnetzen enth#lt die Tabelle CAUFVD_NUM weitere Eintr#ge    
LOOP AT caufvd_num.      
READ TABLE gt_output INTO ls_output2 WITH KEY plnum = caufvd_num-plnum.      
CHECK sy-subrc IS INITIAL.      ls_output2
-aufnum   = caufvd_num-aufnr_neu.      ls_output2
-sel_dark '*'.      
MODIFY gt_output FROM ls_output2 INDEX sy-tabix.    
ENDLOOP.

*    PERFORM send_gui(saplcozf) USING space.    

IF NOT convert_suc IS INITIAL.      
IF convert_suc > 1.        
IF xfehl IS INITIAL.          
MESSAGE s305(coWITH convert_suc INTO ls_output_sav-msg.        
ELSE.          
MESSAGE s536(coWITH convert_suc xfehl INTO ls_output_sav-msg.        
ENDIF.        
CLEAR: ls_output_sav-fstyle, ls_output_sav-fstyle[].        ls_style
-style = cl_gui_alv_grid=>mc_style_disabled.        
INSERT ls_style INTO TABLE ls_output_sav-fstyle.      
ELSE.        
IF ls_caufvd-autyp '40'.          
MESSAGE s019(40WITH  ls_output-plnum ls_caufvd-aufnr INTO ls_output_sav-msg.        
ELSE.          
IF xfehl IS INITIAL.            
MESSAGE s306(coWITH ls_output-plnum ls_caufvd-aufnr INTO ls_output_sav-msg.          
ELSE.            
MESSAGE s537(coWITH ls_output-plnum ls_caufvd-aufnr INTO ls_output_sav-msg.          
ENDIF.        
ENDIF.        
CLEAR: ls_output_sav-fstyle, ls_output_sav-fstyle[].        ls_style
-style = cl_gui_alv_grid=>mc_style_disabled.        
INSERT ls_style INTO TABLE ls_output_sav-fstyle.      
ENDIF.    
ENDIF.    

IF ls_output-pwwrk '3100' OR ls_output-pwwrk '3200'.          
UPDATE aufk SET zkhbz = ls_output-zkhbz WHERE AUFNR = ls_caufvd-aufnr.          
IF sy-subrc 0.              
COMMIT WORK.              
ELSE.                
ROLLBACK WORK.          
ENDIF.   
ENDIF.    

MODIFY gt_output FROM ls_output_sav INDEX lv_index.  
ENDLOOP.

ENDFORM.



FORM frm_full_init.
*.....Zurücksetzen aller Tabellen zum Fertigungsauftrag  
CALL FUNCTION 'CO_EXT_ORDER_RESET'    
EXPORTING      i_no_mat_reset 
'X'.
*...Tabellen Proze#daten zurücksetzen  
CALL FUNCTION 'CKML_ORD_CONN_MOD_BUFFER_INIT'.
* Daten für Komponentenzuordnung zurücksetzen  
CALL FUNCTION 'CS_EX_DATA_REFRESH'.
ENDFORM.

社会很单纯,复杂的是人
原文地址:https://www.cnblogs.com/coderfarmer/p/14641466.html