KEMBAR78
BAPI Requisition Create | PDF | Software Development | Computer Programming
0% found this document useful (0 votes)
167 views8 pages

BAPI Requisition Create

This report uploads a purchase requisition from an Excel file into SAP. It reads the data from the Excel file into an internal table, then loops through the table to populate BAPI structures for the requisition, items, texts and services. Finally it calls the BAPI to create the requisition in SAP.

Uploaded by

Gjkk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
167 views8 pages

BAPI Requisition Create

This report uploads a purchase requisition from an Excel file into SAP. It reads the data from the Excel file into an internal table, then loops through the table to populate BAPI structures for the requisition, items, texts and services. Finally it calls the BAPI to create the requisition in SAP.

Uploaded by

Gjkk
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

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.

You might also like