Upload Program for convert the Planned order to Production order(CO41)
REPORT zpp_plor_to_prdor_con.
TYPE-POOLS: slis.
""""" Local Structure Declaration"""""
TYPES: BEGIN 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.
TYPES: BEGIN 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"""
DATA: lt_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(4096) TYPE c OCCURS 0.
DATA : lv_file TYPE rlgrap-filename,
lt_raw_data TYPE truxs_t_text_data.
""" Babi - variables Declarations"""
DATA: prd_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.
DATA: lt_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"""
DATA: lt_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_caufv) WHERE aufnr = @lv_prd. """ for production scheduling profile check-
READ TABLE lt_caufv INTO DATA(wa_caufv) INDEX 1.
IF sy-subrc = 0 .
SELECT SINGLE flg_rel_cr FROM tco43 INTO @DATA(lv_flg) WHERE 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 lines( lt_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.
CLEAR: wa_final, wa_file, wa_ret.
REFRESH: lt_detail_return.
CLEAR: wa_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.
*
TYPES: BEGIN OF ty_stpo,
stlnr TYPE stpo-stlnr,
stlkn TYPE stpo-stlkn,
aennr TYPE stpo-aennr,
idnrk TYPE ausp-objek,
END OF ty_stpo.
DATA: it_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_stko) INDEX 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
Post a Comment