IGROW SOFT
Behind Huda Maithrivanam, Ameerpet, Hyderabad.
PH: 040-40189824 8885503231,8790793859
www.igrowsoft.com
BOR Requisition Create
*&---------------------------------------------------------------------*
*& Report ZMMST_PR_UPLOAD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZMMST_PR_UPLOAD.
*--Top Include data declaration
include ZMMST_PR_UPLOAD_TOP1.
*--Include for Selection Screen
include ZMMST_PR_UPLOAD_SEL.
*--Include for Main Processing Block
include ZMMST_PR_UPLOAD_DATA.
*--Include for Subroutines
include ZMMST_PR_UPLOAD_SUBROUT_DEFN.
---------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Include ZMMST_PR_UPLOAD_TOP1
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_pr,
doc_type TYPE char4,
req_no TYPE char10,
item_no TYPE char5,
assignment TYPE char1,
item_cat TYPE char1,
material TYPE char18,
short_text TYPE char40,
quantity TYPE char13,
unit TYPE char3,
del_date TYPE char10,
maktl TYPE char8,
plant TYPE char4,
storage_loc TYPE char4,
pur_grp TYPE char3,
requi TYPE char18,
vendor TYPE char10,
gl_account TYPE char10,
cost_centre TYPE char10,
value TYPE char13,
goods_receipt TYPE char1,
invoice_receipt TYPE char1,
service_text TYPE char40,
service_qan TYPE char13,
service_unit TYPE char3,
service_gross TYPE char11,
item_text TYPE string,
END OF ty_pr.
DATA: lt_pr TYPE TABLE OF ty_pr,
ls_pr LIKE LINE OF lt_pr.
DATA: lwa_intern TYPE alsmex_tabline, " Work Area for Excel Struct
ure
lit_intern TYPE STANDARD TABLE OF alsmex_tabline INITIAL SIZE 0. " In
ternal table to hold uploaded data
DATA : v_sel TYPE selkz VALUE 'X' , "
v_banfn TYPE banfn , "
t_reqi TYPE TABLE OF bapiebanc , " Bapi structure for requis
ition Item
t_reqa TYPE TABLE OF bapiebkn , " Bapi structure for requis
ition Item
t_reqitx TYPE TABLE OF bapiebantx,
t_return TYPE TABLE OF bapireturn, " Bapi return table
t_freturn TYPE TABLE OF bapireturn,
t_service TYPE TABLE OF bapiesllc, " bapi service structure.
t_service1 TYPE TABLE OF bapiesllc, " bapi service structure.
t_service_ass TYPE TABLE OF bapiesklc,
t_service_ass1 TYPE TABLE OF bapiesklc,
w_record TYPE bapiebanc,
w_reca TYPE bapiebkn,
w_itemtext TYPE bapiebantx,
w_service TYPE bapiesllc,
w_service_ass TYPE bapiesklc,
t_breqi TYPE TABLE OF bapiebanc,
t_breqa TYPE TABLE OF bapiebkn,
t_breqitx TYPE TABLE OF bapiebantx,
t_breturn TYPE TABLE OF bapireturn,
t_bservice TYPE TABLE OF bapiesllc, " bapi service structure.
t_bservice_ass TYPE TABLE OF bapiesklc,
w_return TYPE bapireturn.
DATA: lt_filetable TYPE filetable,
lv_rc TYPE i.
DATA:gt_fcat TYPE STANDARD TABLE OF slis_fieldcat_alv,
gs_fcat TYPE slis_fieldcat_alv.
CONSTANTS: gc_repid TYPE sy-repid VALUE sy-repid.
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TABR' ITSELF
CONTROLS: tabr TYPE TABLEVIEW USING SCREEN 9000.
*&SPWIZARD: LINES OF TABLECONTROL 'TABR'
DATA: g_tabr_lines LIKE sy-loopc.
DATA: ok_code LIKE sy-ucomm.
---------------------------------------------------------------------------
--
*&---------------------------------------------------------------------*
*& Include ZMMST_PR_UPLOAD_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME .
PARAMETERS: P_FNAME TYPE rlgrap-filename.. " File Name
SELECTION-SCREEN END OF BLOCK A.
-----------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Include ZMMST_PR_UPLOAD_DATA
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'SELECT THE FILE'
default_filename = '*.xls'
multiselection = ' '
CHANGING
file_table = lt_filetable
rc = lv_rc.
LOOP AT lt_filetable INTO p_fname.
ENDLOOP.
START-OF-SELECTION .
IF p_fname IS NOT INITIAL.
CALL FUNCTION 'UPLOAD_XLS_FILE_2_ITAB'
EXPORTING
i_filename = p_fname
TABLES
e_itab = lt_pr.
IF lt_pr IS INITIAL.
MESSAGE 'Wrong excel file uploaded, please upload correct file' TYPE
'E'.
ENDIF.
ELSE.
MESSAGE 'excel file not found.' TYPE 'E'.
ENDIF.
if lt_pr is NOT INITIAL.
data: l_date(10).
data: pacno TYPE i.
LOOP AT lt_pr INTO ls_pr.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = '01'
object = 'SERVICE'
IMPORTING
NUMBER = pacno
EXCEPTIONS
INTERVAL_NOT_FOUND = 1
OTHERS = 8.
w_record-doc_type = ls_pr-doc_type.
w_record-trackingno = ls_pr-req_no.
w_record-preq_item = ls_pr-item_no.
w_record-acctasscat = ls_pr-assignment.
if ls_pr-item_cat eq 'D'.
w_record-item_cat = '9'.
endif.
w_record-material = ls_pr-material.
w_record-short_text = ls_pr-short_text.
w_record-quantity = ls_pr-quantity.
w_record-unit = ls_pr-unit.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_record-unit
IMPORTING
output = w_record-unit.
IF ls_pr-del_date IS NOT INITIAL.
l_date = ls_pr-del_date.
CONCATENATE l_date+6(4) l_date+3(2) l_date(2) INTO w_record-
deliv_date .
CLEAR l_date.
ENDIF.
w_record-mat_grp = ls_pr-maktl.
w_record-plant = ls_pr-plant.
w_record-store_loc = ls_pr-storage_loc.
w_record-pur_group = ls_pr-pur_grp.
w_record-preq_name = ls_pr-requi.
w_record-des_vendor = ls_pr-vendor.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_record-des_vendor
IMPORTING
output = w_record-des_vendor.
w_record-gr_ind = ls_pr-goods_receipt.
w_record-ir_ind = ls_pr-invoice_receipt.
w_record-c_amt_bapi = ls_pr-value.
w_record-pckg_no = pacno.
w_record-distrib = ' '.
* w_record-part_inv = '2'.
APPEND w_record TO t_reqi.
w_reca-g_l_acct = ls_pr-gl_account.
w_reca-serial_no = '01'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_reca-g_l_acct
IMPORTING
output = w_reca-g_l_acct.
w_reca-cost_ctr = ls_pr-cost_centre.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_reca-cost_ctr
IMPORTING
output = w_reca-cost_ctr.
w_reca-preq_item = ls_pr-item_no.
APPEND w_reca TO t_reqa.
w_itemtext-preq_item = ls_pr-item_no.
w_itemtext-text_line = ls_pr-item_text.
w_itemtext-text_id = 'B01'.
APPEND w_itemtext TO t_reqitx.
******
** Service
w_service-pckg_no = pacno.
w_service-subpckg_no = w_record-pckg_no + 1.
w_service-ext_line = 0.
w_service-line_no = 1.
APPEND w_service to t_service1.
CLEAR w_service.
w_service-pckg_no = pacno + 1.
w_service-subpckg_no = '0000000000'.
w_service-line_no = 2.
w_service-ext_line = 10.
w_service-quantity = ls_pr-service_qan.
w_service-base_uom = ls_pr-service_unit.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_service-base_uom
IMPORTING
output = w_service-base_uom.
w_service-uom_iso = ls_pr-service_unit.
w_service-short_text = ls_pr-service_text.
w_service-gr_price = ls_pr-service_gross.
w_service-net_value = w_service-quantity * w_service-gr_price.
w_service-price_unit = 1.
w_service-matl_group = ls_pr-maktl.
APPEND w_service to t_service.
w_service_ass-line_no = '0000000000'.
w_service_ass-pckg_no = pacno.
w_service_ass-serno_line = w_reca-serial_no.
w_service_ass-serial_no = w_service_ass-serno_line.
w_service_ass-percentage = '100'.
APPEND w_service_ass to t_service_ass1.
w_service_ass-line_no = 2.
w_service_ass-pckg_no = pacno + 1.
w_service_ass-serno_line = w_reca-serial_no.
w_service_ass-serial_no = w_service_ass-serno_line.
w_service_ass-percentage = '100'.
APPEND w_service_ass to t_service_ass.
CLEAR: w_itemtext,w_record, w_reca, w_service, w_service_ass.
ENDLOOP.
endif.
PERFORM bapi .
PERFORM display.
-------------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Include ZMMST_PR_UPLOAD_SUBROUT_DEFN
*&---------------------------------------------------------------------*
FORM bapi .
DATA : l_count TYPE sy-tabix,
l_date(10),
l_tracking_no TYPE bednr.
SORT t_reqi BY trackingno preq_item .
LOOP AT t_reqi INTO w_record .
l_count = sy-tabix .
IF l_count EQ 1 OR l_tracking_no EQ w_record-trackingno.
APPEND w_record TO t_breqi.
READ TABLE t_reqa INTO w_reca INDEX l_count.
APPEND w_reca TO t_breqa.
READ TABLE t_reqitx INTO w_itemtext INDEX l_count.
APPEND w_itemtext TO t_breqitx.
READ TABLE t_service1 INTO w_service INDEX l_count.
APPEND w_service TO t_bservice.
CLEAR w_service.
READ TABLE t_service INTO w_service INDEX l_count.
APPEND w_service TO t_bservice.
READ TABLE t_service_ass1 INTO w_service_ass INDEX l_count.
APPEND w_service_ass TO t_bservice_ass.
CLEAR w_service_ass.
READ TABLE t_service_ass INTO w_service_ass INDEX l_count.
APPEND w_service_ass TO t_bservice_ass.
ELSE.
IF t_breqi IS NOT INITIAL.
CALL FUNCTION 'BAPI_REQUISITION_CREATE'
EXPORTING
skip_items_with_error = v_sel
automatic_source = 'X'
IMPORTING
number = v_banfn
TABLES
requisition_items = t_breqi
requisition_account_assignment = t_breqa
requisition_item_text = t_breqitx
requisition_services = t_bservice
requisition_srv_accass_values = t_bservice_ass
return = t_return.
LOOP AT t_return INTO w_return .
APPEND w_return TO t_breturn .
ENDLOOP .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
REFRESH: t_breqi ,t_breqa ,t_return,t_breqitx, t_bservice, t_bservi
ce_ass.
ENDIF.
APPEND w_record TO t_breqi.
READ TABLE t_reqa INTO w_reca INDEX l_count.
APPEND w_reca TO t_breqa.
READ TABLE t_reqitx INTO w_itemtext INDEX l_count.
APPEND w_itemtext TO t_breqitx.
READ TABLE t_service1 INTO w_service INDEX l_count.
APPEND w_service TO t_bservice.
CLEAR w_service.
READ TABLE t_service INTO w_service INDEX l_count.
APPEND w_service TO t_bservice.
READ TABLE t_service_ass1 INTO w_service_ass INDEX l_count.
APPEND w_service_ass TO t_bservice_ass.
CLEAR w_service_ass.
READ TABLE t_service_ass INTO w_service_ass INDEX l_count.
APPEND w_service_ass TO t_bservice_ass.
ENDIF.
l_tracking_no = w_record-trackingno.
CLEAR: w_record, w_reca, w_itemtext.
ENDLOOP.
IF t_breqi IS NOT INITIAL.
CALL FUNCTION 'BAPI_REQUISITION_CREATE'
EXPORTING
skip_items_with_error = v_sel
automatic_source = 'X'
IMPORTING
number = v_banfn
TABLES
requisition_items = t_breqi
requisition_account_assignment = t_breqa
requisition_item_text = t_breqitx
requisition_services = t_bservice
requisition_srv_accass_values = t_bservice_ass
return = t_return.
LOOP AT t_return INTO w_return .
APPEND w_return TO t_breturn .
ENDLOOP .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
REFRESH: t_breqi ,t_breqa ,t_return,t_breqitx.
ENDIF.
ENDFORM. " BAPI
*& Form DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display .
IF t_breturn IS NOT INITIAL.
gs_fcat-col_pos = '1'.
gs_fcat-fieldname = 'TYPE'.
gs_fcat-seltext_m = 'Type'.
gs_fcat-outputlen = '10'.
gs_fcat-tabname = 'T_BRETURN'.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
gs_fcat-col_pos = '2'.
gs_fcat-fieldname = 'MESSAGE'.
gs_fcat-seltext_m = 'Message'.
gs_fcat-outputlen = '100'.
gs_fcat-tabname = 'T_BRETURN'.
APPEND gs_fcat TO gt_fcat.
CLEAR gs_fcat.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = gc_repid
it_fieldcat = gt_fcat
TABLES
t_outtab = t_breturn
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-
msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
ENDFORM.