Upload Program for convert the Planned order to Production order(CO41)

 



REPORT  zpp_plor_to_prdor_con.

TYPE-POOLSslis.

""""" Local Structure Declaration"""""
TYPESBEGIN OF gty_file,
         planned  TYPE bapi_pldord-pldord_num,     "Planned Order
         order    TYPE bapi_order_copy-order_type"Order type
*       quantity TYPE string,                     "Quantity
         quantity TYPE bapiplaf_i2-total_plord_qty,        
       END OF gty_file.

TYPESBEGIN OF lty_final,
         planned  TYPE bapi_pldord-pldord_num,          "Planned Order
         order    TYPE bapi_order_copy-order_type,      "Order type
         prd_ord  TYPE bapi_order_copy-order_number,    "Production Order
         matnr    TYPE matnr,
         quantity TYPE bapiplaf_i2-total_plord_qty,    "Quantity             
         error    TYPE char1,                           "Error Type
         msg      TYPE string,                          "Message
         rel_msg  TYPE bapi_msg,
       END OF lty_final.

"""Internal table and work area declarations"""
DATAlt_file  TYPE TABLE OF gty_file,
      wa_file  TYPE gty_file,
      lt_final TYPE TABLE OF lty_final,
      wa_final TYPE lty_final.

"""Local Variable Declaration for FM"""
TYPES truxs_t_text_data(4096TYPE OCCURS 0.
DATA lv_file     TYPE rlgrap-filename,
       lt_raw_data TYPE truxs_t_text_data.

""" Babi - variables Declarations"""
DATAprd_ord     TYPE bapi_order_copy-order_number,
      lv_prd      TYPE bapi_order_copy-order_number,
      lv_planned  TYPE bapi_pldord-pldord_num,
      prd_type    TYPE bapi_order_copy-order_type,
      it_ret      TYPE bapiret2,
      wa_ret      TYPE bapiret2,
      wa_headerd  TYPE bapiplaf_i2,    
      wa_headerdx TYPE bapiplaf_i2x,   
      gs_return   TYPE bapireturn1,       
      gs_cheaderd TYPE bapiplaf_e1.      

DATAlt_aufnr           TYPE TABLE OF bapi_order_key,     
      wa_aufnr           TYPE bapi_order_key,
      lt_detail_return   TYPE TABLE OF bapi_order_return,
      wa_detail_return   TYPE bapi_order_return,
      lt_application_log TYPE TABLE OF bapi_order_application_log,
      lv_return          TYPE bapiret2.

"""Data Declaration for ALV"""
DATAlt_fcat TYPE slis_t_fieldcat_alv,
      ls_fcat TYPE slis_fieldcat_alv.

""""Selection Screen"""

PARAMETERS p_file TYPE ibipparms-path ."OBLIGATORY.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  CALL FUNCTION 'F4_FILENAME'
*     EXPORTING
*       program_name  = sy-cprog
*       dynpro_number = sy-dynnr
*       field_name    = 'P_FILE'
    IMPORTING
      file_name p_file.

START-OF-SELECTION.
  PERFORM upload_data.
  PERFORM get_data.
  PERFORM process_alv.
  PERFORM display_alv.
*&---------------------------------------------------------------------*
*&      Form  UPLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM upload_data .

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_field_seperator    '#'
      i_line_header        'X'
      i_tab_raw_data       lt_raw_data
      i_filename           p_file
    TABLES
      i_tab_converted_data lt_file
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.

  IF sy-subrc <> 0.
  ENDIF.

ENDFORM.                    " UPLOAD_DATA
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data.
*
  DATA lv_rtlife TYPE c.
  LOOP AT lt_file INTO wa_file.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  wa_file-planned
      IMPORTING
        output lv_planned.
* RT Life material check
    PERFORM validate_rtlife USING lv_planned
                            CHANGING lv_rtlife.
    IF lv_rtlife 'X'.
      wa_final-planned wa_file-planned.
      wa_final-order wa_file-order.
      wa_final-quantity wa_file-quantity.                
      wa_final-error 'E'.
      wa_final-msg 'Component relevant for RTlife, please use ZRTLIFE transaction'.
      APPEND wa_final TO lt_final.
      CONTINUE.
    ENDIF.
    ""added by rishitha
    wa_headerd-total_plord_qty wa_file-quantity.
    wa_headerdx-total_plord_qty 'X'.

*    REFRESH gt_return[].
    CLEAR gs_return.
    CALL FUNCTION 'BAPI_PLANNEDORDER_CHANGE'
      EXPORTING
        plannedorder      lv_planned
        headerdata        wa_headerd
        headerdatax       wa_headerdx
      IMPORTING
        return            gs_return
        changedheaderdata gs_cheaderd.


1'.  ""for successful conversion possible case
    IF gs_return-type 'S' AND gs_return-id '61' AND gs_return-number '011'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait 'X'

      CALL FUNCTION 'BAPI_PRODORD_CREATE_FROM_PLORD'
        EXPORTING
          planned_order    lv_planned
          order_type       wa_file-order
*         order_number     =
        IMPORTING
          production_order prd_ord
          prod_order_type  prd_type
          return           wa_ret.

      IF prd_ord IS NOT INITIAL.

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
          EXPORTING
            input  prd_ord
          IMPORTING
            output lv_prd.
* Get material number from Order
        SELECT SINGLE matnr FROM plaf WHERE plnum @lv_planned
          INTO @wa_final-matnr.
        wa_final-planned wa_file-planned.
        wa_final-order wa_file-order.
        wa_final-prd_ord lv_prd.
        wa_final-quantity wa_file-quantity.                 

       wa_final-error 'S'.
        wa_final-msg 'Convert Successfully'.


        SELECT werks,sfcpf FROM caufv INTO TABLE @DATA(lt_caufvWHERE aufnr @lv_prd.        """ for production scheduling profile check-
        READ TABLE lt_caufv INTO DATA(wa_caufvINDEX 1.
        IF sy-subrc .
          SELECT SINGLE flg_rel_cr FROM tco43 INTO @DATA(lv_flgWHERE co_prodprf @wa_caufv-sfcpf AND werks @wa_caufv-werks.
        ENDIF.
        IF lv_flg 'X'.
          REFRESH lt_aufnr.
          wa_aufnr-order_number lv_prd.
          APPEND wa_aufnr TO lt_aufnr.
          CALL FUNCTION 'BAPI_PRODORD_RELEASE'
            EXPORTING
              release_control    '1'
              work_process_group 'COWORK_BAPI'
              work_process_max   99
            IMPORTING
              return             lv_return
            TABLES
              orders             lt_aufnr
              detail_return      lt_detail_return
              application_log    lt_application_log.

          IF sy-subrc 0.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait 'X'.
          ENDIF.

          IF lineslt_detail_return 1.                                                  
            READ TABLE lt_detail_return INTO wa_detail_return WITH KEY type 'W'.
            wa_final-rel_msg wa_detail_return-message.
          ELSE.
            READ TABLE lt_detail_return INTO wa_detail_return INDEX 1.
            wa_final-rel_msg 'Order is Released'.
          ENDIF.                                                                                """

        ENDIF.


        APPEND wa_final  TO lt_final.
      ELSE.

* Get material number from Order
        SELECT SINGLE matnr FROM plaf WHERE plnum @lv_planned
          INTO @wa_final-matnr.
        wa_final-planned wa_file-planned.
        wa_final-order wa_file-order.
        wa_final-quantity wa_file-quantity.                
        wa_final-error wa_ret-type.
        wa_final-msg wa_ret-message.
        APPEND wa_final TO lt_final.
      ENDIF.
    ELSE.
      wa_final-planned wa_file-planned.
      wa_final-order wa_file-order.
      wa_final-quantity wa_file-quantity.               
      wa_final-error gs_return-type.
      wa_final-msg gs_return-message.
      APPEND wa_final TO lt_final.
    ENDIF.
    CLEARwa_finalwa_filewa_ret.
    REFRESHlt_detail_return.
    CLEARwa_detail_return,lv_flg.
*   REFRESH: it_ret.

  ENDLOOP.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display_alv .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program 'sy_repid'
      it_fieldcat        lt_fcat
    TABLES
      t_outtab           lt_final
    EXCEPTIONS
      program_error      1
      OTHERS             2.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " DISPLAY_ALV
*&---------------------------------------------------------------------*
*&      Form  PROCESS_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM process_alv .

  ls_fcat-fieldname   'PLANNED'.
  ls_fcat-seltext_l   'Planned Order'.
  ls_fcat-col_pos     1.
*ls_fcat-tabname     = 'IT_ERROR'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'ORDER'.
  ls_fcat-seltext_l   'Order Type'.
  ls_fcat-col_pos     2.
*ls_fcat-tabname     = 'IT_ERROR'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'PRD_ORD'.
  ls_fcat-seltext_l   'Production Order'.
  ls_fcat-col_pos     3.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'MATNR'.
  ls_fcat-seltext_l   'Material'.
  ls_fcat-col_pos     4.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'QUANTITY'.
  ls_fcat-seltext_l   'Quantity'.
  ls_fcat-col_pos     4.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'ERROR'.
  ls_fcat-seltext_l   'Type'.
  ls_fcat-col_pos     5.
*ls_fcat-tabname     = 'IT_ERROR'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'MSG'.
  ls_fcat-seltext_l   'Message'.
  ls_fcat-col_pos     6.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

  ls_fcat-fieldname   'REL_MSG'.
  ls_fcat-seltext_l   'Release Message'.
  ls_fcat-col_pos     7.
*ls_fcat-tabname     = 'IT_ERROR'.
  APPEND ls_fcat TO lt_fcat.
  CLEAR  ls_fcat.

ENDFORM.                    " PROCESS_ALV
*&---------------------------------------------------------------------*
*& Form validate_rtlife
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> LV_PLANNED
*&      <-- LV_RTLIFE
*&---------------------------------------------------------------------*
FORM validate_rtlife  USING    pv_planned TYPE plnum
                      CHANGING ev_rtlife.
*

  TYPESBEGIN OF ty_stpo,
           stlnr TYPE stpo-stlnr,
           stlkn TYPE stpo-stlkn,
           aennr TYPE stpo-aennr,
           idnrk TYPE ausp-objek,
         END OF ty_stpo.

  DATAit_stpo TYPE TABLE OF ty_stpo,
        wa_stpo TYPE ty_stpo.
  CLEAR ev_rtlife.
* Get Material/Plant from PLAF
  SELECT SINGLE FROM  plaf
    WHERE plnum @pv_planned
    INTO @DATA(ls_plaf).
  IF sy-subrc 0.
    SELECT b~stlnr,
           b~stlal
        FROM mast AS a INNER JOIN stko AS b
        ON a~stlnr b~stlnr
       AND a~stlal b~stlal
       WHERE a~matnr  @ls_plaf-matnr
       AND   a~werks  @ls_plaf-plwrk
       AND   a~stlan '1'
       AND a~stlal @ls_plaf-stalt
      ORDER BY a~stlal DESCENDING
      INTO TABLE @DATA(lt_stko).
    IF sy-subrc 0.
      READ TABLE lt_stko INTO DATA(ls_stkoINDEX 1.
      IF sy-subrc 0.
        SELECT FROM stas
          WHERE stlty 'M' AND
                stlnr @ls_stko-stlnr AND
                stlal @ls_stko-stlal AND
                lkenz ''
          INTO TABLE @DATA(lt_stas1).
        IF NOT lt_stas1 IS INITIAL.
          SELECT stlnr,stlkn,aennr,idnrk
              FROM stpo
              FOR ALL ENTRIES IN @lt_stas1
              WHERE stlty 'M'
              AND   stlnr @lt_stas1-stlnr
              AND   stlkn @lt_stas1-stlkn
              AND   lkenz ''
              INTO TABLE @it_stpo.
          IF NOT it_stpo IS INITIAL.
*
            SELECT SINGLE atinn FROM cabn WHERE atnam 'ZRTMTRL' INTO @DATA(lv_atinn).
*
            SELECT FROM ausp INTO TABLE @DATA(lt_ausp)
              FOR ALL ENTRIES IN @it_stpo
              WHERE objek @it_stpo-idnrk
              AND atinn @lv_atinn
              AND klart '001'.
            IF sy-subrc 0.
              LOOP AT lt_ausp INTO DATA(wa_ausp).
                TRANSLATE wa_ausp-atwrt TO UPPER CASE.
                IF wa_ausp-atwrt 'YES'.
                  ev_rtlife 'X'.
                  EXIT.
                ENDIF.
              ENDLOOP.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.

Comments

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)