zoukankan      html  css  js  c++  java
  • 计划订单批量转生产订单---可直接使用

    *&---------------------------------------------------------------------*
    *& 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.

    社会很单纯,复杂的是人
  • 相关阅读:
    Delphi 窗体失踪在最上面的代码
    Delphi 目前使用delay函数功能
    Delphi Delay 延时计数的功能。 下面的方法都是思路,但是没有用在项目上
    Delphi 通过SQLite3, SQLiteTable3 操作数据库
    解决sqlite删除数据后,文件大小不变问题 转载
    delphi执行cmd命令和bat文件
    Delphi 获取sqlite中所有的表名
    delphi 获取USB口拔出和插入的状态
    深度揭密轮播插件核心代码的实现过程
    flowJS源码个人分析
  • 原文地址:https://www.cnblogs.com/coderfarmer/p/14641466.html
Copyright © 2011-2022 走看看