Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Bapi_po_create1

Former Member
0 Kudos

Hi Experts,

using FM Bapi_create_po1 I crated one Purchase order.

The Purchase order number is generated. But If I check the table Ekko its not getting stored.

Why its happening. Any one help me on this issue.

I wrote the code for commit work also.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

WAIT = 'X'

Thanks,

Points Assured.

4 REPLIES 4

JozsefSzikszai
Active Contributor
0 Kudos

hi Jasmine,

few things to check:

do the BAPI returns without any errro message?

did you check transaction SM13, if the DB changes are locked there?

did you chck transaction SM21 about system messages?

did you check the return code of BAPI_TRANSACTION_COMMIT?

ec

Former Member
0 Kudos

Hi

Try to delete the WAIT addition or check if the BAPI for commit returns an error

Max

former_member404244
Active Contributor
0 Kudos

Hi,

check the below sample code for ur reference

REPORT z_create_openppo NO STANDARD PAGE HEADING

LINE-SIZE 340

LINE-COUNT 60

MESSAGE-ID zricef.

----


  • SELECTION SCREEN *

----


SELECTION-SCREEN: BEGIN OF BLOCK mainblck WITH FRAME TITLE text-t01.

SELECTION-SCREEN SKIP 1.

PARAMETERS: p_app RADIOBUTTON GROUP cmp1.

PARAMETERS: p_pre RADIOBUTTON GROUP cmp1.

PARAMETERS: p_infile LIKE rlgrap-filename OBLIGATORY DEFAULT '/usr/sap/',

p_group(12) TYPE c,

p_user TYPE sy-uname.

PARAMETERS: p_errfl LIKE rlgrap-filename OBLIGATORY DEFAULT '/ricef/DEV/conversions/CV5060/data/cv5060_err.txt' .

PARAMETERS:p_tst RADIOBUTTON GROUP comp.

PARAMETERS:p_prd RADIOBUTTON GROUP comp.

SELECTION-SCREEN: END OF BLOCK mainblck.

----


  • CONSTANTS *

----


CONSTANTS:

con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

----


  • WORK VARIABLES *

----


*Internal tabe to store upload header data

TYPES: BEGIN OF t_record,

  • header items

legpo(15) TYPE c,

bukrs TYPE bukrs,

bsart TYPE bsart,

cu_dat TYPE erdat,

lifnr TYPE lifnr,

vkorg TYPE vkorg,

ekgrp TYPE ekgrp,

waers TYPE waers,

doc_date TYPE ebdat,

s_werks TYPE werks,

*line items

legpo_item(4) TYPE c,

ematn TYPE matnr,

werks TYPE werks,

menge TYPE menge,

meins TYPE meins,

netpr TYPE poscurncy,

peinh TYPE peinh,

epstp TYPE epstp,

knttp TYPE knttp,

*delievery

eindt TYPE eindt,

message(72) TYPE c,

END OF t_record.

*Data table

TYPES: BEGIN OF t_src_header,

legpo(15) TYPE c,

bukrs(4) TYPE c,

bsart(4) TYPE c,

cu_dat(8) TYPE c,

lifnr(10) TYPE c,

vkorg(4) TYPE c,

ekgrp(3) TYPE c,

waers(3) TYPE c,

doc_date(8) TYPE c,

s_werks(4) TYPE c,

legpo_item(4) TYPE c,

ematn(18) TYPE c,

werks(4) TYPE c,

menge(13) TYPE c,

meins(3) TYPE c,

netpr(11) TYPE c,

peinh(5) TYPE c,

epstp(1) TYPE c,

knttp(1) TYPE c,

eindt(8) TYPE c,

END OF t_src_header.

TYPES: BEGIN OF lt_record,

  • header items

legpo(15) TYPE c,

bukrs(4) TYPE c, " TYPE bukrs,

bsart(2) TYPE c, "TYPE bsart,

cu_dat(8) TYPE c, " TYPE erdat,

lifnr(10) TYPE c, " TYPE lifnr,

vkorg(4) TYPE c, "TYPE vkorg,

ekgrp(3) TYPE c," TYPE ekgrp,

waers(3) TYPE c, " TYPE waers,

doc_date(8) TYPE c, "TYPE ebdat,

s_werks(4) TYPE c, " TYPE werks,

*line items

legpo_item(4) TYPE c,

ematn(18) TYPE c, " TYPE matnr,

werks(4) TYPE c, " TYPE werks,

menge(17) TYPE c, "TYPE menge,

meins(3) TYPE c, " TYPE meins,

netpr(11) TYPE c, " TYPE netpr,

peinh(5) TYPE c, " TYPE peinh,

epstp(1) TYPE c, " TYPE epstp,

knttp(1) TYPE c, "TYPE knttp,

*delivery

eindt(8) TYPE c, "TYPE eindt,

message(72) TYPE c,

END OF lt_record.

DATA: lt_record TYPE lt_record.

DATA: l_record TYPE t_record.

  • For the input purchase order data with a flag

TYPES : BEGIN OF t_pur_ord.

INCLUDE STRUCTURE l_record.

TYPES : mess(2500) TYPE c,

ok(1) TYPE c,

ebeln TYPE ekko-ebeln,

END OF t_pur_ord.

DATA: nodata VALUE '/' .

DATA: gd_file TYPE string.

DATA: w_menge TYPE char13.

DATA: w_netpr TYPE currency.

DATA: lv_knumv TYPE knumv.

DATA: gv_matnr TYPE matnr,

gv_ekgrp TYPE ekgrp.

*Internal Table for BAPI change.

DATA: i_tab TYPE STANDARD TABLE OF konv WITH KEY knumv kposn stunr zaehk,

st_temp TYPE konv.

DATA: it_record TYPE STANDARD TABLE OF t_record INITIAL SIZE 0,

st_error TYPE t_record,

i_error TYPE STANDARD TABLE OF t_record,

temp_error TYPE STANDARD TABLE OF t_record,

wa_record TYPE t_record.

  • Batchinputdata of single transaction

DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.

*Internal table to header upload data into

DATA: BEGIN OF it_datatab OCCURS 0,

row(500) TYPE c,

END OF it_datatab.

DATA: wa_uploadtxt TYPE t_src_header.

*String value to data in initially.

DATA: wa_string(255) TYPE c.

DATA: st_pur_ord TYPE t_pur_ord, "header for i_pur_ord

i_pur_ord TYPE STANDARD TABLE OF t_pur_ord.

CLASS cl_abap_char_utilities DEFINITION LOAD.

  • Structure For PO header

*structures for passing to BAPI

DATA: poheader TYPE bapimepoheader, "header data

poheaderx TYPE bapimepoheaderx.

  • PO number

DATA: po_number TYPE ekko-ebeln. "bapimepoheader-po_number. "created PO number

*Export header for BAPI Change

DATA: expheader TYPE bapimepoheader.

DATA:

*for messages

st_return TYPE bapiret2,

i_return TYPE STANDARD TABLE OF bapiret2,

i_return_ch TYPE STANDARD TABLE OF bapiret2,

wa_ret TYPE bapiret2.

DATA:

  • Internal table for PO items.

st_poitem TYPE bapimepoitem,

i_poitem TYPE STANDARD TABLE OF bapimepoitem,

st_poitemx TYPE bapimepoitemx,

i_poitemx TYPE STANDARD TABLE OF bapimepoitemx,

*schedule lines data

st_poschedule TYPE bapimeposchedule, "schedule lines

i_poschedule TYPE STANDARD TABLE OF bapimeposchedule,

st_poschedulx TYPE bapimeposchedulx,

i_poschedulx TYPE STANDARD TABLE OF bapimeposchedulx,

*conditions

st_condheader TYPE bapimepocondheader,

i_pocondheader TYPE STANDARD TABLE OF bapimepocondheader,

st_condheaderx TYPE bapimepocondheaderx,

i_pocondheaderx TYPE STANDARD TABLE OF bapimepocondheaderx,

*Internal table to hold messages from BAPI call

return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.

----


  • FIELD-SYMBOLS *

----


FIELD-SYMBOLS: <fs_return> TYPE bapiret2.

----


  • AT SELECTION SCREEN *

----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_infile.

CALL FUNCTION 'WS_FILENAME_GET'

EXPORTING

def_filename = p_infile

mask = ',*.txt.'

mode = 'O'

title = text-001

IMPORTING

filename = p_infile

EXCEPTIONS

inv_winsys = 1

no_batch = 2

selection_cancel = 3

selection_error = 4

OTHERS = 5.

************************************************************************

  • TOP OF PAGE&#24315; *

************************************************************************

TOP-OF-PAGE.

WRITE:/ sy-uline.

WRITE: / 'Program :', sy-repid,

52 'WB WHV - US Implementation',

116 'Page: ', sy-pagno.

WRITE:/ sy-uline.

SKIP 2.

************************************************************************

*START-OF-SELECTION

START-OF-SELECTION.

gd_file = p_infile.

PERFORM load_data.

    • Alternative method, where by you split fields at each TAB after you

    • have returned the data. No point unless you dont have access to

    • GUI_UPLOAD but just included for information

*

  • CALL FUNCTION 'GUI_UPLOAD'

  • EXPORTING

  • filename = gd_file

  • filetype = 'ASC'

  • TABLES

  • data_tab = it_datatab "ITBL_IN_RECORD[]

  • EXCEPTIONS

  • file_open_error = 1

  • OTHERS = 2.

      • If upload is successful...

  • IF sy-subrc NE 0.

  • ELSE.

  • LOOP AT it_datatab.

  • CLEAR: wa_string, wa_uploadtxt.

  • wa_string = it_datatab.

    • Split the input string at TAB and push into variables

  • SPLIT wa_string AT con_tab INTO wa_uploadtxt-legpo

  • wa_uploadtxt-bukrs

  • wa_uploadtxt-bsart

  • wa_uploadtxt-cu_dat

  • wa_uploadtxt-lifnr

  • wa_uploadtxt-vkorg

  • wa_uploadtxt-ekgrp

  • wa_uploadtxt-waers

  • wa_uploadtxt-doc_date

  • wa_uploadtxt-s_werks

  • wa_uploadtxt-legpo_item

  • wa_uploadtxt-ematn

  • wa_uploadtxt-werks

  • wa_uploadtxt-menge

  • wa_uploadtxt-meins

  • wa_uploadtxt-netpr

  • wa_uploadtxt-peinh

  • wa_uploadtxt-epstp

  • wa_uploadtxt-knttp

  • wa_uploadtxt-eindt.

    • Move to workarea

  • MOVE-CORRESPONDING wa_uploadtxt TO wa_record.

  • APPEND wa_record TO it_record.

  • ENDLOOP.

  • ENDIF.

IF p_tst EQ 'X'.

PERFORM pre_validation.

ELSE.

*Peform BAPI CREATE

PERFORM call_bapi_po_create.

ENDIF.

----


  • END-OF-SELECTION *

----


*END-OF-SELECTION.

END-OF-SELECTION.

IF p_prd EQ 'X'.

*!! Text data is now contained within the internal table IT_RECORD

  • Display report data for illustration purposes

IF NOT i_error[] IS INITIAL.

PERFORM write_error_recs.

ENDIF.

DATA: lv_line TYPE i.

DESCRIBE TABLE it_record LINES lv_line.

WRITE:/ lv_line.

ENDIF.

&----


*& Form call_bapi_po_create

&----


  • Call the BAPI FM to create PO

----


FORM call_bapi_po_create .

DATA: curr_line TYPE t_record.

    • Open the error session

PERFORM open_group.

    • Iterate thru the input records...

LOOP AT it_record INTO curr_line.

APPEND curr_line TO temp_error.

st_pur_ord = curr_line.

*Load data into header

AT NEW legpo.

PERFORM fillheader.

ENDAT.

  • Populate the lineitem structures

PERFORM fillline.

  • On change of the legacy PO number, post one transaction into SAP

AT END OF legpo.

*When ZCM,ZCN, ZRP,ZRS call the Bapi

CASE poheader-doc_type.

WHEN 'ZCM' OR 'ZCN' OR 'ZRP' OR 'ZRS'.

PERFORM zcall_bapi.

WHEN OTHERS.

PERFORM gen_bdc.

ENDCASE.

*when ZPR,ZUB,ZIC call form gen_bdc

ENDAT.

ENDLOOP.

  • Close the BDC error session

PERFORM close_group.

ENDFORM. " call_bapi_po_create

&----


*& Form Fillheader

&----


  • Populate the PO header

----


FORM fillheader .

DATA: lv_date TYPE sy-datum,

lv1_date TYPE sy-datum,

lv_ekgrp TYPE ekgrp.

CLEAR: st_poitem,

st_poitemx,

st_poschedule,

st_poschedule,

st_condheader,

st_condheaderx.

REFRESH: i_poitem,

i_poitemx,

i_poschedule,

i_poschedulx,

i_pocondheader,

i_pocondheaderx.

**Purchasing group

  • SELECT SINGLE ekgrp FROM t024 INTO lv_ekgrp WHERE ekgrp = st_pur_ord-ekgrp.

*

*

  • IF sy-subrc NE 0.

  • APPEND LINES OF temp_error TO i_error.

  • MODIFY i_error FROM st_error TRANSPORTING message WHERE message = 'Purchasing Group is inocrrect'.

  • PERFORM write_error_recs.

  • ELSE.

  • gv_ekgrp = lv_ekgrp.

  • ENDIF.

  • Check the legacy type and populate the SAP document type for the PO

CASE st_pur_ord-bsart.

WHEN 'PO'.

st_pur_ord-bsart ='ZCM'.

WHEN 'CO'.

st_pur_ord-bsart ='ZCN'.

WHEN 'DO'.

st_pur_ord-bsart ='ZPR'.

WHEN 'RO'.

st_pur_ord-bsart ='ZRP'.

WHEN 'TO'.

st_pur_ord-bsart ='ZUB'.

ENDCASE.

    • Populate the header structure

poheader-comp_code = st_pur_ord-bukrs. "Company code

poheader-doc_type = st_pur_ord-bsart. "Doc type

poheader-creat_date = st_pur_ord-cu_dat. "Creation date

poheader-created_by = sy-uname. "Author

poheader-vendor = st_pur_ord-lifnr. "Vendor

poheader-langu = 'EN'. "Lang key

poheader-langu_iso = 'EN'. "Lang ISO key

poheader-purch_org = st_pur_ord-vkorg. "Sales Org

poheader-pur_group = st_pur_ord-ekgrp. "Purchasing Group

poheader-currency = st_pur_ord-waers. "Currency

poheader-currency_iso = st_pur_ord-waers. "Currency ISO

poheader-doc_date = st_pur_ord-doc_date. "Document date

poheader-suppl_plnt = st_pur_ord-s_werks. "Supplying plant

poheaderx-comp_code = 'X'.

poheaderx-doc_type ='X'.

poheaderx-creat_date = 'X'.

poheaderx-created_by = 'X'.

poheaderx-vendor = 'X'.

poheaderx-langu = 'X'.

poheaderx-langu_iso = 'X'.

poheaderx-purch_org = 'X'.

poheaderx-pur_group = 'X'.

poheaderx-currency = 'X'.

poheaderx-currency_iso = 'X'.

poheaderx-doc_date = 'X'.

poheaderx-suppl_plnt = 'X'.

ENDFORM. " Fillheader

&----


*& Form Fillline

&----


  • Populate the PO line items.

----


FORM fillline .

DATA: lv_date1 TYPE sy-datum,

lv_po TYPE ebeln,

lv_matnr TYPE matnr.

*material

CLEAR: lv_matnr,

gv_matnr.

SELECT SINGLE matnr FROM zmc_matlxref INTO lv_matnr

WHERE legmatnr = st_pur_ord-ematn.

IF sy-subrc NE 0.

  • APPEND LINES OF temp_error TO i_error.

  • MODIFY i_error FROM st_error TRANSPORTING message WHERE message = 'Material not in SAP'.

  • PERFORM write_error_recs.

ELSE.

gv_matnr = lv_matnr.

ENDIF.

  • Conversion for order unit

IF NOT st_pur_ord-meins IS INITIAL.

CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'

EXPORTING

input = st_pur_ord-meins

IMPORTING

output = st_pur_ord-meins.

ENDIF.

*Item category depends on Doctype

CASE poheader-doc_type.

WHEN 'ZCN' OR 'ZPR' OR 'ZRP' OR 'ZRS'.

st_pur_ord-epstp = 'L'.

WHEN 'ZUB' OR 'ZCM'.

st_pur_ord-epstp = ' '.

ENDCASE.

w_menge = st_pur_ord-menge.

  • Populate the lineitem data

st_poitem-po_item = st_pur_ord-legpo_item * 10. "Item number

st_poitem-material = lv_matnr. "Material Number

st_poitem-ematerial = lv_matnr. "Material Number

st_poitem-plant = st_pur_ord-werks. "Plant

st_poitem-trackingno = st_pur_ord-legpo. "Legacy PO

st_poitem-quantity = w_menge. "Quantity

st_poitem-orderpr_un = st_pur_ord-meins. "Order unit

st_poitem-orderpr_un_iso = st_pur_ord-meins. "Order unit

st_poitem-net_price = st_pur_ord-netpr * 1000. "Net Price

  • st_poitem-price_unit = st_pur_ord-peinh.

st_poitem-price_unit = '1000'.

st_poitem-item_cat = st_pur_ord-epstp. "Item category

st_poitem-acctasscat = st_pur_ord-knttp. "Acct Assignment category

APPEND st_poitem TO i_poitem.

CLEAR st_poitem.

  • INTERFACE ITEM DATA

st_poitemx-po_item = st_pur_ord-legpo_item * 10.

st_poitemx-po_itemx = 'X'.

st_poitemx-ematerial = 'X'.

st_poitemx-plant = 'X'.

st_poitemx-trackingno = 'X'.

st_poitemx-quantity = 'X'.

st_poitemx-orderpr_un = 'X'.

st_poitemx-orderpr_un_iso = 'X'.

st_poitemx-net_price = 'X'.

st_poitemx-price_unit = 'X'.

st_poitemx-item_cat = 'X'.

st_poitemx-acctasscat = 'X'.

  • st_poitem-CALCTYPE = 'X'.

APPEND st_poitemx TO i_poitemx.

CLEAR st_poitemx.

*Convert date to user format

lv_date1 = st_pur_ord-eindt.

WRITE lv_date1 TO lv_date1.

  • DELIVERY DETAILS DATA

st_poschedule-po_item = st_pur_ord-legpo_item * 10.

st_poschedule-delivery_date = lv_date1.

APPEND st_poschedule TO i_poschedule.

CLEAR st_poschedule.

  • Delivery interface

st_poschedulx-po_item = st_pur_ord-legpo_item * 10.

st_poschedulx-delivery_date = 'X'.

st_poitemx-po_itemx = 'X'.

APPEND st_poschedulx TO i_poschedulx.

CLEAR st_poschedulx.

*CONDITIONS

st_condheader-itm_number = st_pur_ord-legpo_item * 10.

CASE poheader-doc_type.

WHEN 'ZCN' OR 'ZPR' OR 'ZRP' OR 'ZRS'.

st_condheader-cond_type = 'ZWUS'.

WHEN 'ZUB' OR 'ZCM'.

st_condheader-cond_type = 'PB00'.

ENDCASE.

st_condheader-cond_value = st_pur_ord-netpr * 1000.

st_condheader-currency = 'USD'.

st_condheader-currency_iso = 'USD'.

st_condheader-cond_unit = 'EA'.

st_condheader-cond_unit_iso = 'EA'.

st_condheader-cond_p_unt = '1000'.

  • Check to see if the material and plant combo exists in SAP

SELECT SINGLE ebeln INTO lv_po FROM ekpo

WHERE matnr = lv_matnr AND

werks = st_pur_ord-werks.

  • If yes...update

IF sy-subrc EQ 0.

st_condheader-change_id = 'U'.

ELSE. "Insert

st_condheader-change_id = 'I'.

ENDIF.

st_condheader-condchaman = 'X'.

APPEND st_condheader TO i_pocondheader.

CLEAR st_condheader.

*CONDITIONS INTERFACE

st_condheaderx-itm_number = st_pur_ord-legpo_item * 10.

st_condheaderx-itm_numberx = 'X'.

st_condheaderx-cond_type = 'X'.

st_condheaderx-cond_value = 'X'.

st_condheaderx-currency = 'X'.

st_condheaderx-currency_iso = 'X'.

st_condheaderx-cond_unit = 'X'.

st_condheaderx-cond_unit_iso = 'X'.

st_condheaderx-cond_p_unt = 'X'.

st_condheaderx-change_id = 'X'.

st_condheaderx-condchaman = 'X'.

APPEND st_condheaderx TO i_pocondheaderx.

CLEAR st_condheaderx.

ENDFORM. " Fillline

&----


*& Form ZCALL_BAPI

&----


  • BAPI to post

----


FORM zcall_bapi.

DATA: lv_flag TYPE c,

lst_return TYPE bapiret2.

DATA: i_ekko TYPE STANDARD TABLE OF ekko.

DATA: lv_zaehk LIKE konv-zaehk,

lv_changid TYPE cdchngind.

DATA: st_return_ch TYPE bapiret2.

REFRESH: i_return.

  • Call PO create FM to post the PO transaction

CALL FUNCTION 'BAPI_PO_CREATE1'

EXPORTING

poheader = poheader

poheaderx = poheaderx

IMPORTING

exppurchaseorder = po_number

TABLES

return = i_return

poitem = i_poitem

poitemx = i_poitemx

poschedule = i_poschedule

poschedulex = i_poschedulx

pocondheader = i_pocondheader

pocondheaderx = i_pocondheaderx.

  • Read the return Internal table for the outcome of the post...

  • If it is E or A, then the posting errored

  • In this case, pass the error records to BDC session

READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'E'.

IF sy-subrc NE 0.

READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'A'.

IF sy-subrc EQ 0.

lv_flag = 'N'.

ENDIF.

ELSE.

lv_flag = 'N'.

ENDIF.

  • If NO errors occured during posting, commit the transaction

IF lv_flag NE 'N'.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

READ TABLE i_return INTO wa_ret WITH KEY type = 'S'.

IF sy-subrc EQ 0.

WRITE:/ wa_ret-message.

ENDIF.

REFRESH temp_error.

ELSE.

  • Else rollback the data and generate BDC session

  • CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

LOOP AT i_return INTO lst_return WHERE type = 'E'

OR type = 'A'.

CONCATENATE lst_return-message st_error-message

INTO st_error-message SEPARATED BY '-'.

ENDLOOP.

  • IF i_error[] IS INITIAL.

    • Open the error session

  • PERFORM open_group.

  • ENDIF.

  • Append error internal table

APPEND LINES OF temp_error TO i_error.

REFRESH: temp_error.

MODIFY i_error FROM st_error TRANSPORTING message WHERE message = ''.

  • Generate the BDC Session

PERFORM gen_bdc.

ENDIF.

CLEAR st_error.

  • LOOP AT i_return INTO wa_ret.

  • WRITE / wa_ret-message.

  • ENDLOOP.

******************************************************************

******************************************************************

*Change BAPI

******************************************************************

******************************************************************

    • If the BAPI posting was successful...

IF lv_flag NE 'N'.

  • Conversion function for the PO

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = po_number

IMPORTING

output = po_number.

CLEAR lv_knumv.

*BAPI Change for order type

CASE poheader-doc_type.

WHEN 'ZCN'.

  • Select the condition record number for the PO

SELECT SINGLE knumv INTO lv_knumv FROM ekko

WHERE ebeln = po_number.

  • Select the condition records for above condition record number

SELECT * FROM konv INTO TABLE i_tab WHERE knumv = lv_knumv.

  • Iterate thru the condition records and do....

LOOP AT i_tab INTO st_temp.

REFRESH: i_pocondheaderx, i_pocondheader.

  • WRITE:/ st_temp-kschl.

  • Depending on the condition record type...

CASE st_temp-kschl.

  • Delete the condition records if conditions are..

WHEN 'Z001' OR 'Z002' OR 'Z003' OR 'Z004' OR 'Z005' OR 'Z006' OR 'Z007' OR 'Z008' OR 'Z009' OR 'ZO10' OR

'Z011' OR 'Z012' OR 'Z013' OR 'Z014' OR 'Z015' OR 'Z016' OR 'Z017' OR 'Z018' OR 'Z019' OR 'ZO20' OR

'Z021' OR 'Z022' OR 'Z023' OR 'Z024' OR 'Z025' OR 'Z216' OR 'Z027' OR 'Z028' OR 'Z029' OR 'ZO30' OR

'Z031' OR 'Z032' OR 'Z033' OR 'Z034' OR 'Z035' OR 'Z036' OR 'Z037' OR 'Z038' OR 'Z039' OR 'ZO40' OR

'Z041' OR 'Z042' OR 'Z043' OR 'Z044' OR 'Z045' OR 'Z046' OR 'Z047' OR 'Z048' OR 'Z049' OR 'ZO50' OR

'Z051' OR 'Z052' OR 'Z053' OR 'Z054' OR 'Z055' OR 'Z056' OR 'Z057' OR 'Z058' OR 'Z059' OR 'ZO60' OR

'Z061' OR 'Z062' OR 'Z063' OR 'Z064' OR 'Z065' OR 'Z066' OR 'Z067' OR 'Z068' OR 'Z069' OR 'ZO70' OR

'Z071' OR 'Z072' OR 'Z073' OR 'Z074' OR 'Z075' OR 'Z076' OR 'Z077' OR 'Z078' OR 'Z079' OR 'ZO80' OR

'Z081' OR 'Z082' OR 'Z083' OR 'Z084' OR 'Z085' OR 'Z086' OR 'Z087' OR 'Z088' OR 'Z089' OR 'ZO90' OR

'Z091' OR 'Z092' OR 'Z093' OR 'Z094' OR 'Z095' OR 'Z096' OR 'Z097' OR 'Z098' OR 'Z099' OR 'Z1O0' OR

'Z101' OR 'Z102' OR 'Z103' OR 'Z104' OR 'Z105' OR 'Z106' OR 'Z107' OR 'Z108' OR 'Z109' OR 'Z110' OR

'Z111' OR 'Z112' OR 'Z113' OR 'Z114' OR 'Z115' OR 'Z116' OR 'Z117' OR 'Z118' OR 'Z119' OR 'Z120' OR

'Z121' OR 'Z122' OR 'Z123' OR 'Z124' OR 'Z125' OR 'Z126' OR 'Z127' OR 'Z128' OR 'Z129' OR 'Z130' OR

'Z131' OR 'Z132' OR 'Z313' OR 'Z134' OR 'Z135' OR 'Z136' OR 'Z137' OR 'Z138' OR 'Z139' OR 'Z140' OR

'Z141' OR 'Z142' OR 'Z143' OR 'Z144' OR 'Z145' OR 'Z146' OR 'Z147' OR 'Z148' OR 'Z149' OR 'Z150' OR

'Z151' OR 'Z152' OR 'Z153' OR 'Z154' OR 'Z154' OR 'Z156' OR 'Z157' OR 'Z158' OR 'Z159' OR 'Z160' OR

'Z161' OR 'Z162' OR 'Z163' OR 'Z164' OR 'Z165' OR 'Z166' OR 'Z167' OR 'Z168' OR 'Z169' OR 'Z170' OR

'FRA1' OR 'FRB1' OR 'FRC1' OR 'FRA2' OR 'FRB2' OR 'FRC2' OR 'RB00' OR 'ZB00' OR 'RA00' OR 'ZA00' OR

'RA01' OR 'ZA01' OR 'ZC00' OR 'HB01' OR 'RL01' OR 'MM00' OR 'MM01' OR 'ZUS0'.

lv_changid = 'D'.

PERFORM populate_condheader USING lv_changid.

  • Update in following case

  • WHEN 'ZWUS'.

  • lv_changid = 'U'.

  • PERFORM populate_condheader USING lv_changid.

ENDCASE.

REFRESH: i_return_ch.

CLEAR: lv_flag.

  • Call the BAPI PO change to Update/Insert the condition records

CALL FUNCTION 'BAPI_PO_CHANGE'

EXPORTING

purchaseorder = po_number

poheader = poheader

poheaderx = poheaderx

IMPORTING

expheader = expheader

TABLES

return = i_return_ch

poitem = i_poitem

poitemx = i_poitemx

poschedule = i_poschedule

poschedulex = i_poschedulx

pocondheader = i_pocondheader

pocondheaderx = i_pocondheaderx.

  • Read the return table to check if errors occurecd...

READ TABLE i_return_ch INTO st_return_ch WITH KEY type = 'E'.

IF sy-subrc NE 0.

READ TABLE i_return ASSIGNING <fs_return> WITH KEY type = 'A'.

IF sy-subrc EQ 0.

lv_flag = 'N'.

ENDIF.

ELSE.

lv_flag = 'N'.

ENDIF.

  • If NO errors occured...

IF lv_flag NE 'N'.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

ELSE.

**NOTHING.

ENDIF.

CLEAR lv_zaehk.

ENDLOOP.

ENDCASE.

ENDIF.

ENDFORM. " ZCALL_BAPI

&----


*& Form gen_bdc

&----


  • Subroutine to generate the BDC error session

----


FORM gen_bdc .

DATA: cnt TYPE i.

DATA: st_item TYPE bapimepoitem,

lst_poschedule TYPE bapimeposchedule.

DATA: l_price(20) TYPE c,

l_price1 LIKE ekpo-netpr,

l_price2(11) TYPE c,

l_qty(13) TYPE c,

l_prev TYPE aufep. "(5) type n.

  • Loop at the items tab...

LOOP AT i_poitem INTO st_item.

l_prev = st_item-po_item.

l_prev = l_prev - 10.

  • Reformat the creation date...

WRITE poheader-creat_date TO poheader-creat_date.

cnt = cnt + 1.

l_price1 = st_item-net_price.

l_qty = st_item-quantity.

SHIFT l_qty LEFT DELETING LEADING space.

l_price2 = l_price1.

SHIFT l_price2 LEFT DELETING LEADING space.

  • For the first line item...

IF cnt = 1.

**New code for ZPR,ZIC,ZUB Item category,supplying plant

***supplying plant

CASE poheader-doc_type.

WHEN 'ZPR' OR 'ZUB' OR 'ZIC'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0100'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKKO-EKGRP'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=KOPF'.

PERFORM bdc_field USING 'EKKO-LIFNR'

poheader-vendor. "'6055899'.

PERFORM bdc_field USING 'RM06E-BSART'

poheader-doc_type. "'zcm'.

PERFORM bdc_field USING 'RM06E-BEDAT'

poheader-creat_date. "'05/04/2007'.

PERFORM bdc_field USING 'EKKO-EKORG'

poheader-purch_org. "'3000'.

PERFORM bdc_field USING 'EKKO-EKGRP'

poheader-pur_group. "'004'.

PERFORM bdc_field USING 'RM06E-WERKS'

'0041' .

PERFORM bdc_dynpro USING 'SAPMM06E' '0101'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=AB'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKKO-ZWERKS'.

PERFORM bdc_field USING 'EKKO-ZWERKS'

'0041'.

WHEN OTHERS.

PERFORM bdc_dynpro USING 'SAPMM06E' '0100'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKKO-EKGRP'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'EKKO-LIFNR'

poheader-vendor. "'6055899'.

PERFORM bdc_field USING 'RM06E-BSART'

poheader-doc_type. "'zcm'.

PERFORM bdc_field USING 'RM06E-BEDAT'

poheader-creat_date. "'05/04/2007'.

PERFORM bdc_field USING 'EKKO-EKORG'

poheader-purch_org. "'3000'.

PERFORM bdc_field USING 'EKKO-EKGRP'

poheader-pur_group. "'004'.

PERFORM bdc_field USING 'RM06E-WERKS'

'0041' .

ENDCASE.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-NETPR(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RM06E-EBELP'

st_item-po_item.

READ TABLE i_poschedule INTO lst_poschedule WITH KEY po_item = st_item-po_item.

WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.

PERFORM bdc_field USING 'RM06E-EEIND(01)'

lst_poschedule-delivery_date.

PERFORM bdc_field USING 'EKPO-WERKS(01)'

st_item-plant.

PERFORM bdc_field USING 'EKPO-EMATN(01)'

gv_matnr.

PERFORM bdc_field USING 'EKPO-MENGE(01)'

l_qty. "st_item-quantity.

PERFORM bdc_field USING 'EKPO-NETPR(01)'

l_price2.

perform bdc_field using 'EKPO-PEINH(01)'

'1000'.

*

IF poheader-doc_type = 'ZCN' OR

poheader-doc_type = 'ZPR' OR

poheader-doc_type = 'ZRP' OR

poheader-doc_type = 'ZRS'.

PERFORM bdc_field USING 'RM06E-EPSTP(01)'

'L'.

ENDIF.

*new code

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-MENGE(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=DETA'.

PERFORM bdc_field USING 'RM06E-EBELP'

'10'.

*item details

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-NETPR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'EKPO-NETPR'

l_price2.

perform bdc_field using 'EKPO-BEDNR'

st_item-trackingno.

ENDIF.

  • For second line item...

IF cnt = 2.

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-MATKL(02)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RM06E-EBELP'

st_item-po_item.

READ TABLE i_poschedule INTO lst_poschedule WITH KEY po_item = st_item-po_item.

WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.

PERFORM bdc_field USING 'RM06E-EEIND(02)'

lst_poschedule-delivery_date.

PERFORM bdc_field USING 'EKPO-WERKS(02)'

st_item-plant.

PERFORM bdc_field USING 'EKPO-EMATN(02)'

gv_matnr.

PERFORM bdc_field USING 'EKPO-MENGE(02)'

l_qty. "st_item-quantity.

PERFORM bdc_field USING 'EKPO-NETPR(02)'

l_price2.

perform bdc_field using 'EKPO-PEINH(02)'

'1000'.

IF poheader-doc_type = 'ZCN' OR

poheader-doc_type = 'ZPR' OR

poheader-doc_type = 'ZRP' OR

poheader-doc_type = 'ZRS'.

PERFORM bdc_field USING 'RM06E-EPSTP(02)'

'L'.

ENDIF.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-MENGE(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=DETA'.

PERFORM bdc_field USING 'RM06E-EBELP'

'20'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-NETPR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'EKPO-NETPR'

l_price2.

perform bdc_field using 'EKPO-BEDNR'

st_item-trackingno.

ENDIF.

  • For line items greater than 2..

IF cnt > 2.

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RM06E-EBELP'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

DATA: l_prev1(5) TYPE c,

l_temp TYPE ebelp.

l_prev1 = l_prev.

SHIFT l_prev1 LEFT DELETING LEADING 0.

l_temp = st_item-po_item - 10.

PERFORM bdc_field USING 'RM06E-EBELP'

l_temp. "'20'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-NETPR(02)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'RM06E-EBELP'

st_item-po_item.

READ TABLE i_poschedule INTO lst_poschedule

WITH KEY po_item = st_item-po_item.

WRITE lst_poschedule-delivery_date TO lst_poschedule-delivery_date.

PERFORM bdc_field USING 'RM06E-EEIND(02)'

lst_poschedule-delivery_date.

PERFORM bdc_field USING 'EKPO-WERKS(02)'

st_item-plant.

PERFORM bdc_field USING 'EKPO-EMATN(02)'

st_item-material.

PERFORM bdc_field USING 'EKPO-MENGE(02)'

l_qty. "st_item-quantity.

PERFORM bdc_field USING 'EKPO-NETPR(02)'

l_price2.

perform bdc_field using 'EKPO-PEINH(02)'

'1000'.

IF poheader-doc_type = 'ZCN' OR

poheader-doc_type = 'ZPR' OR

poheader-doc_type = 'ZRP' OR

poheader-doc_type = 'ZRS'.

PERFORM bdc_field USING 'RM06E-EPSTP(02)'

'L'.

ENDIF.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-MENGE(01)'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=DETA'.

PERFORM bdc_field USING 'RM06E-EBELP'

'10'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_field USING 'BDC_CURSOR'

'EKPO-NETPR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'/00'.

PERFORM bdc_field USING 'EKPO-NETPR'

l_price2.

perform bdc_field using 'EKPO-PEINH'

'1000'.

perform bdc_field using 'EKPO-BEDNR'

st_item-trackingno.

ENDIF.

ENDLOOP.

  • Save the BDC

PERFORM bdc_dynpro USING 'SAPMM06E' '0111'.

PERFORM bdc_dynpro USING 'SAPMM06E' '0120'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RM06E-EBELP'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=BU'.

PERFORM bdc_field USING 'RM06E-EBELP'

'20'.

PERFORM bdc_dynpro USING 'SAPLSPO1' '0300'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=YES'.

  • Insert the BDC

PERFORM bdc_transaction USING 'ME21'.

ENDFORM. " gen_bdc

----


  • Start new screen *

----


FORM bdc_dynpro USING program dynpro.

CLEAR bdcdata.

bdcdata-program = program.

bdcdata-dynpro = dynpro.

bdcdata-dynbegin = 'X'.

APPEND bdcdata.

ENDFORM. "BDC_DYNPRO

----


  • Insert field *

----


FORM bdc_field USING fnam fval.

  • IF fval <> nodata.

CLEAR bdcdata.

bdcdata-fnam = fnam.

bdcdata-fval = fval.

APPEND bdcdata.

  • ENDIF.

ENDFORM. "BDC_FIELD

----


  • Start new transaction according to parameters *

----


FORM bdc_transaction USING tcode.

  • batch input session

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = tcode

TABLES

dynprotab = bdcdata.

WRITE: / 'BDC_INSERT'(i03),

tcode,

'returncode:'(i05),

sy-subrc,

'RECORD:',

sy-index.

REFRESH bdcdata.

ENDFORM. "BDC_TRANSACTION

----


  • end batchinput session *

  • (call transaction using...: error session) *

----


FORM close_group.

  • close batchinput group

CALL FUNCTION 'BDC_CLOSE_GROUP'.

ENDFORM. "CLOSE_GROUP

----


  • create batchinput session *

  • (not for call transaction using...) *

----


FORM open_group.

WRITE: /(20) 'Create group'(i01), p_group.

SKIP.

  • open batchinput group

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = p_group

user = p_user

keep = 'X'. "KEEP

  • HOLDDATE = HOLDDATE.

WRITE: /(30) 'BDC_OPEN_GROUP'(i02),

(12) 'returncode:'(i05),

sy-subrc.

ENDFORM. "OPEN_GROUP

&----


*& Form write_error_recs

&----


  • Write out the error records

----


FORM write_error_recs .

DATA: l_line TYPE string.

  • Open the app server file to write...

OPEN DATASET p_errfl FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

IF sy-subrc EQ 0.

  • Loop thru the error records and write to the appserver file

LOOP AT i_error INTO st_error.

MOVE-CORRESPONDING st_error TO lt_record.

TRANSFER lt_record TO p_errfl.

ENDLOOP.

ENDIF.

ENDFORM. " write_error_recs

&----


*& Form populate_condheader

&----


  • Populate the condition headers

----


  • -->P_LV_CHANGID change id (D or U)

----


FORM populate_condheader USING p_lv_changid.

DATA: lv_zaehk TYPE konv-zaehk.

  • Select the current record from KONV

SELECT SINGLE zaehk INTO lv_zaehk FROM konv WHERE

kposn = st_temp-kposn AND

knumv = st_temp-knumv AND

stunr = st_temp-stunr AND

kschl = st_temp-kschl.

IF sy-subrc EQ 0.

  • CONDITIONS

st_condheader-itm_number = st_temp-kposn.

st_condheader-condition_no = st_temp-knumv.

st_condheader-cond_st_no = st_temp-stunr.

st_condheader-cond_count = lv_zaehk. "st_temp-ZAEHK.

st_condheader-cond_type = st_temp-kschl.

st_condheader-cond_value = st_pur_ord-netpr * 1000.

st_condheader-change_id = p_lv_changid..

APPEND st_condheader TO i_pocondheader.

CLEAR st_condheader.

  • CONDITIONS INTERFACE

st_condheaderx-itm_number = st_temp-kposn.

st_condheaderx-condition_no = st_temp-knumv.

st_condheaderx-cond_st_no = st_temp-stunr.

st_condheaderx-itm_numberx = 'X'.

st_condheaderx-condition_nox = 'X'.

st_condheaderx-cond_st_nox = 'X'.

st_condheaderx-cond_count = 'X'.

st_condheaderx-cond_type = 'X'.

st_condheaderx-cond_value = 'X'.

st_condheaderx-change_id = 'X'.

APPEND st_condheaderx TO i_pocondheaderx.

CLEAR st_condheaderx.

ENDIF.

ENDFORM. " populate_condheader

&----


*& Form pre_validation

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM pre_validation .

DATA: lv_ekgrp LIKE t024-ekgrp,

lv_matnr LIKE mara-matnr,

lv_flg TYPE c,

lv_cnt_ekgrp TYPE i,

lv_cnt_matnr TYPE i,

lst_record TYPE t_record.

  • Open the app server file to write...

OPEN DATASET p_errfl FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

IF sy-subrc NE 0.

MESSAGE e000 WITH 'Unable to open output file during prevalidation'.

ENDIF.

LOOP AT it_record INTO lst_record.

*Purchasing group

SELECT SINGLE ekgrp FROM t024 INTO lv_ekgrp WHERE ekgrp = lst_record-ekgrp.

IF sy-subrc NE 0.

CONCATENATE lst_record-message 'Purchasing group incorrect' INTO lst_record-message SEPARATED BY '-'.

lv_flg = 'X'.

lv_cnt_ekgrp = lv_cnt_ekgrp + 1.

ENDIF.

SELECT SINGLE matnr FROM zmc_matlxref INTO lv_matnr

WHERE legmatnr = lst_record-ematn.

IF sy-subrc NE 0.

CONCATENATE lst_record-message 'Material is incorrect' INTO lst_record-message SEPARATED BY '-'.

lv_flg = 'X'.

lv_cnt_matnr = lv_cnt_matnr + 1.

ELSE.

ENDIF.

IF lv_flg = 'X'.

MOVE-CORRESPONDING lst_record TO lt_record.

  • append lst_record to i_error.

TRANSFER lt_record TO p_errfl.

ENDIF.

CLEAR lv_flg.

ENDLOOP.

CLOSE DATASET p_errfl.

IF ( NOT lv_cnt_ekgrp IS INITIAL OR NOT lv_cnt_matnr IS INITIAL ).

FORMAT COLOR COL_HEADING .

WRITE:/ 'Run Statistics:'.

FORMAT COLOR OFF.

SKIP 2.

FORMAT COLOR COL_NORMAL.

WRITE:/ 'Number of Purchase Orgs Errored:', lv_cnt_ekgrp.

WRITE:/ 'Number of Materials Errored', lv_cnt_matnr.

WRITE:/ 'Error file downloaded to:', p_errfl.

ELSE.

ULINE.

WRITE:/ 'No errors found in the input file...good to go!!'.

ULINE.

ENDIF.

FORMAT COLOR OFF.

ENDFORM. " pre_validation

&----


*& Form load_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM load_data .

*Internal table to header upload data into

DATA: st_temp TYPE string.

DATA: BEGIN OF it_datatab OCCURS 0,

row(500) TYPE c,

END OF it_datatab.

IF p_pre EQ 'X'.

  • Alternative method, where by you split fields at each TAB after you

  • have returned the data. No point unless you dont have access to

  • GUI_UPLOAD but just included for information

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = gd_file

filetype = 'ASC'

TABLES

data_tab = it_datatab "ITBL_IN_RECORD[]

EXCEPTIONS

file_open_error = 1

OTHERS = 2.

    • If upload is successful...

IF sy-subrc NE 0.

ELSE.

LOOP AT it_datatab.

CLEAR: wa_string, wa_uploadtxt.

wa_string = it_datatab.

PERFORM append_line.

ENDLOOP.

ENDIF.

ELSE.

OPEN DATASET p_infile FOR INPUT IN TEXT MODE ENCODING DEFAULT.

IF sy-subrc EQ 0.

DO.

READ DATASET p_infile INTO wa_string.

IF sy-subrc EQ 0.

PERFORM append_line.

ELSE.

EXIT.

ENDIF.

ENDDO.

ENDIF.

ENDIF.

ENDFORM. " load_data

&----


*& Form append_line

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM append_line .

  • Split the input string at TAB and push into variables

SPLIT wa_string AT con_tab INTO wa_uploadtxt-legpo

wa_uploadtxt-bukrs

wa_uploadtxt-bsart

wa_uploadtxt-cu_dat

wa_uploadtxt-lifnr

wa_uploadtxt-vkorg

wa_uploadtxt-ekgrp

wa_uploadtxt-waers

wa_uploadtxt-doc_date

wa_uploadtxt-s_werks

wa_uploadtxt-legpo_item

wa_uploadtxt-ematn

wa_uploadtxt-werks

wa_uploadtxt-menge

wa_uploadtxt-meins

wa_uploadtxt-netpr

wa_uploadtxt-peinh

wa_uploadtxt-epstp

wa_uploadtxt-knttp

wa_uploadtxt-eindt.

  • Move to workarea

MOVE-CORRESPONDING wa_uploadtxt TO wa_record.

APPEND wa_record TO it_record.

CLEAR wa_record.

ENDFORM. " append_line

Regards,

Nagaraj

Former Member
0 Kudos

Hi Jasmine,

I have used the FM Bapi_create_po1 for creating PO.Itz working proper.Below is the whole code for it.Check it n u will be able to understand.

Reward if useful.

Thx.

method do_handle_event.

data: event_id type string.

data zpr_num1 type banfn.

data zreturn type zsn_bapiret2.

data ret type bapireturn-type.

data message type bapi_msg.

data returnval type bapimepoheader-po_number.

data: r_view type ref to if_bsp_page.

data: crt_view type ref to if_bsp_page.

data po_num_head type bapimepoheader.

data zpoheader_it type zbapimepoheader_tab.

data zpoheaderx_it type zbapimepoheaderx_tab.

  • to add a new item to list

if htmlb_event is bound and htmlb_event->server_event = 'onadd'.

zpr_num = request->get_form_field( 'PRNo' ) .

data: zpr_num3 type banfn.

call function 'ZCONVERT_ALPHA'

exporting

input = zpr_num

importing

output = zpr_num3.

zpr_num = zpr_num3.

data: temp_tab1 type zrmheader.

delete from zrmheader.

zpoheader-vendor = request->get_form_field( 'Vendor' ) .

zpoheader-purch_org = request->get_form_field( 'POrg' ).

zpoheader-pur_group = request->get_form_field( 'PGrp' ).

zpoheader-doc_type = 'NB'.

zpoheader-item_intvl = request->get_form_field( 'Item' ).

zpoheader-comp_code = request->get_form_field( 'CCode' ).

zpoheader-doc_date = request->get_form_field( 'DocDate' ).

delivdate_new = request->get_form_field( 'DelivDate' ).

temp_tab1-vendor = request->get_form_field( 'Vendor' ) .

temp_tab1-purch_org = request->get_form_field( 'POrg' ).

temp_tab1-pur_group = request->get_form_field( 'PGrp' ).

temp_tab1-doc_type = 'NB'.

temp_tab1-item_intvl = request->get_form_field( 'Item' ).

temp_tab1-comp_code = request->get_form_field( 'CCode' ).

temp_tab1-doc_date = request->get_form_field( 'DocDate' ).

data: temp_tabx1 type zrmheaderx.

delete from zrmheaderx.

temp_tabx1-vendor = 'x'.

temp_tabx1-purch_org = 'x'.

temp_tabx1-pur_group = 'x'.

temp_tabx1-doc_type = 'x'.

temp_tabx1-comp_code = 'x'.

temp_tabx1-doc_date = 'x'.

insert into zrmheader values temp_tab1.

insert into zrmheaderx values temp_tabx1.

data: temp_tab type zrmitem .

data: temp_tabx type zrmitemx.

zitem1-acctasscat = request->get_form_field( 'A' ).

temp_tab-acctasscat = request->get_form_field( 'A' ).

zitem1-item_cat = request->get_form_field( 'I' ).

temp_tab-item_cat = request->get_form_field( 'I' ).

zitem1-material = request->get_form_field( 'Material' ).

temp_tab-material = request->get_form_field( 'Material' ).

zitem1-quantity = request->get_form_field( 'POQuantity' ).

temp_tab-quantity = request->get_form_field( 'POQuantity' ).

zitem1-po_unit = request->get_form_field( 'OUN' ).

temp_tab-po_unit = request->get_form_field( 'OUN' ).

zitem1-net_price = request->get_form_field( 'NetPrice' ).

temp_tab-net_price = request->get_form_field( 'NetPrice' ).

zitem1-plant = request->get_form_field( 'Plnt' ).

temp_tab-plant = request->get_form_field( 'Plnt' ).

zitem1-po_item = request->get_form_field( 'Item' ).

temp_tab-po_item = request->get_form_field( 'Item' ).

zitem1-stge_loc = request->get_form_field( 'Sloc' ).

temp_tab-stge_loc = request->get_form_field( 'Sloc' ).

zitem1-customer = request->get_form_field( 'Customer' ).

temp_tab-customer = request->get_form_field( 'Customer' ).

zitem1-incoterms2 = 'XDFGRT'.

temp_tab-incoterms2 = 'XDFGRT'.

  • append zitem1 to zitem.

insert into zrmitem values temp_tab.

zitemx1-acctasscat = 'x'.

zitemx1-item_cat = 'x'.

zitemx1-material = 'x'.

zitemx1-quantity = 'x'.

zitemx1-net_price = 'x'.

zitemx1-plant = 'x'.

zitemx1-po_item = 00010.

zitemx1-po_itemx = 'x'.

zitemx1-stge_loc = 'x'.

zitemx1-customer = 'x'.

zitemx1-incoterms2 = 'x'.

  • append zitemx1 to zitemx.

temp_tabx-acctasscat = 'x'.

temp_tabx-item_cat = 'x'.

temp_tabx-material = 'x'.

temp_tabx-quantity = 'x'.

temp_tabx-net_price = 'x'.

temp_tabx-plant = 'x'.

temp_tabx-po_item = 00010.

temp_tabx-po_itemx = 'x'.

temp_tabx-stge_loc = 'x'.

temp_tabx-customer = 'x'.

temp_tabx-incoterms2 = 'x'.

insert into zrmitemx values temp_tabx.

select * from zrmitem into corresponding fields of table zitem.

zpr_num = request->get_form_field( 'PRNo' ) .

call function 'ZCONVERT_ALPHA'

exporting

input = zpr_num

importing

output = zpr_num1.

  • LEN =

.

call function 'BAPI_REQUISITION_GETDETAIL'

exporting

number = zpr_num1

  • ACCOUNT_ASSIGNMENT = ' '

  • ITEM_TEXTS = ' '

  • SERVICES = ' '

  • SERVICE_TEXTS = ' '

tables

requisition_items = item_tab

  • REQUISITION_ACCOUNT_ASSIGNMENT =

  • REQUISITION_TEXT =

  • REQUISITION_LIMITS =

  • REQUISITION_CONTRACT_LIMITS =

  • REQUISITION_SERVICES =

  • REQUISITION_SERVICES_TEXTS =

  • REQUISITION_SRV_ACCASS_VALUES =

  • RETURN =

.

call function 'BAPI_TRANSACTION_COMMIT'

exporting

wait = 'X'.

*IMPORTING

*RETURN = i_return

  • to save the item details and generate a PO number

elseif htmlb_event is bound and htmlb_event->server_event = 'onsave'.

zpr_num = request->get_form_field( 'PRNo' ) .

data: zpr_num4 type banfn.

call function 'ZCONVERT_ALPHA'

exporting

input = zpr_num

importing

output = zpr_num4.

zpr_num = zpr_num4.

data: temp_t2 type zrmsched,

count2 type n,

a2 type n value 1.

data:temp_t type zrmitem,

count type n,

a type n value 1.

select * from zrmitem into corresponding fields of table data_tab.

count = sy-dbcnt.

do count times.

read table data_tab into temp_t index a.

a = a + 1.

zitem1-po_item = temp_t-po_item.

zitem1-acctasscat = temp_t-acctasscat.

zitem1-item_cat = temp_t-item_cat.

zitem1-material = temp_t-material.

zitem1-quantity = temp_t-quantity.

zitem1-po_unit = temp_t-po_unit.

zitem1-net_price = temp_t-net_price.

zitem1-plant = temp_t-plant.

zitem1-stge_loc = temp_t-stge_loc.

zitem1-customer = temp_t-customer.

zitem1-incoterms2 = temp_t-incoterms2.

append zitem1 to zitem.

zitemx1-acctasscat = 'x'.

zitemx1-item_cat = 'x'.

zitemx1-material = 'x'.

zitemx1-quantity = 'x'.

zitemx1-net_price = 'x'.

zitemx1-plant = 'x'.

zitemx1-po_item = temp_t-po_item.

zitemx1-po_itemx = 'x'.

zitemx1-stge_loc = 'x'.

zitemx1-customer = 'x'.

zitemx1-incoterms2 = 'x'.

append zitemx1 to zitemx.

enddo.

  • count2 = sy-dbcnt.

zpoheader-vendor = request->get_form_field( 'Vendor' ) .

zpoheader-purch_org = request->get_form_field( 'POrg' ).

zpoheader-pur_group = request->get_form_field( 'PGrp' ).

zpoheader-doc_type = 'NB'.

zpoheader-item_intvl = request->get_form_field( 'Item' ).

zpoheader-comp_code = request->get_form_field( 'CCode' ).

zpoheader-doc_date = request->get_form_field( 'DocDate' ).

delivdate_new = request->get_form_field( 'DelivDate' ).

zpoheaderx-vendor = 'x'.

zpoheaderx-purch_org = 'x'.

zpoheaderx-pur_group = 'x'.

zpoheaderx-doc_type = 'x'.

zpoheaderx-comp_code = 'x'.

zpoheaderx-doc_date = 'x'.

data: zpovendor type elifn.

call function 'ZCONVERT_ALPHA'

exporting

input = zpoheader-vendor

importing

output = zpovendor.

zpoheader-vendor = zpovendor.

call function 'BAPI_PO_CREATE1'

exporting

poheader = zpoheader

poheaderx = zpoheaderx

  • POADDRVENDOR =

  • TESTRUN =

  • MEMORY_UNCOMPLETE =

  • MEMORY_COMPLETE =

  • POEXPIMPHEADER =

  • POEXPIMPHEADERX =

  • VERSIONS =

  • NO_MESSAGING =

  • NO_MESSAGE_REQ =

  • NO_AUTHORITY =

  • NO_PRICE_FROM_PO =

importing

exppurchaseorder = po_num

  • EXPHEADER = PO_NUM_HEAD

  • EXPPOEXPIMPHEADER =

tables

  • RETURN = zreturn

poitem = zitem

poitemx = zitemx

  • POADDRDELIVERY =

  • POSCHEDULE = zposched

  • POSCHEDULEX = zposchedx

  • POACCOUNT =

  • POACCOUNTPROFITSEGMENT =

  • POACCOUNTX =

  • POCONDHEADER =

  • POCONDHEADERX =

  • POCOND =

  • POCONDX =

  • POLIMITS =

  • POCONTRACTLIMITS =

  • POSERVICES =

  • POSRVACCESSVALUES =

  • POSERVICESTEXT =

  • EXTENSIONIN =

  • EXTENSIONOUT =

  • POEXPIMPITEM =

  • POEXPIMPITEMX =

  • POTEXTHEADER =

  • POTEXTITEM =

  • ALLVERSIONS =

  • POPARTNER =

  • POCOMPONENTS =

  • POCOMPONENTSX =

  • POSHIPPING =

  • POSHIPPINGX =

  • POSHIPPINGEXP =

.

call function 'BAPI_TRANSACTION_COMMIT'

exporting

wait = 'X'

  • IMPORTING

  • RETURN =

.

delete from zrmitem.

delete from zrmitemx.

select * from zrmitem into corresponding fields of table zitem.

if po_num = ' '.

po_num = 'Try Again'.

endif.

  • to store po_num and corresponding pr number

data: temp_tt type zpo_pr_nums.

temp_tt-pr_num = zpr_num.

temp_tt-po_num = po_num.

insert into zpo_pr_nums values temp_tt.

  • to store po num and corresponding delivery date

data: wa11 type zpo_delivdate.

wa11-po_number = po_num.

wa11-deliv_date = delivdate_new.

insert into zpo_delivdate values wa11.

zpoheader-vendor = ' '.

zpoheader-purch_org = ' '.

zpoheader-pur_group = ' '.

zpoheader-doc_type = ' '.

zpoheader-item_intvl = ' '.

zpoheader-comp_code = ' '.

zpoheader-doc_date = ' '.

delivdate_new = ' '.

  • to enter a PR Number

elseif htmlb_event is bound and htmlb_event->server_event = 'onenter'.

delete from zrmitem.

delete from zrmitemx.

select * from zrmitem into corresponding fields of table zitem.

zpr_num = request->get_form_field( 'PRNo' ) .

call function 'ZCONVERT_ALPHA'

exporting

input = zpr_num

importing

output = zpr_num1.

  • LEN =

.

call function 'BAPI_REQUISITION_GETDETAIL'

exporting

number = zpr_num1

  • ACCOUNT_ASSIGNMENT = ' '

  • ITEM_TEXTS = ' '

  • SERVICES = ' '

  • SERVICE_TEXTS = ' '

tables

requisition_items = item_tab

  • REQUISITION_ACCOUNT_ASSIGNMENT =

  • REQUISITION_TEXT =

  • REQUISITION_LIMITS =

  • REQUISITION_CONTRACT_LIMITS =

  • REQUISITION_SERVICES =

  • REQUISITION_SERVICES_TEXTS =

  • REQUISITION_SRV_ACCASS_VALUES =

  • RETURN =

.

call function 'BAPI_TRANSACTION_COMMIT'

exporting

wait = 'X'.

*IMPORTING

*RETURN = i_return

  • to select an item from drop down item menu

elseif htmlb_event is bound and htmlb_event->server_event = 'select'.

data: zselection2 type bnfpo.

data: data type ref to cl_htmlb_dropdownlistbox.

zpr_num = request->get_form_field( 'PRNo' ) .

data: zpr_num2 type banfn.

call function 'ZCONVERT_ALPHA'

exporting

input = zpr_num

importing

output = zpr_num2.

data ?= cl_htmlb_manager=>get_data(

request = runtime->server->request

name = 'dropdownlistbox'

id = 'ItemSel'

).

if data is not initial.

zselection2 = data->selection.

endif.

zpoheader-vendor = request->get_form_field( 'Vendor' ) .

zpoheader-purch_org = request->get_form_field( 'POrg' ).

zpoheader-pur_group = request->get_form_field( 'PGrp' ).

zpoheader-doc_type = 'NB'.

zpoheader-item_intvl = request->get_form_field( 'Item' ).

zpoheader-comp_code = request->get_form_field( 'CCode' ).

zpoheader-doc_date = request->get_form_field( 'DocDate' ).

call function 'BAPI_REQUISITION_GETDETAIL'

exporting

number = zpr_num2

  • ACCOUNT_ASSIGNMENT = ' '

  • ITEM_TEXTS = ' '

  • SERVICES = ' '

  • SERVICE_TEXTS = ' '

tables

requisition_items = item_tab

  • REQUISITION_ACCOUNT_ASSIGNMENT =

  • REQUISITION_TEXT =

  • REQUISITION_LIMITS =

  • REQUISITION_CONTRACT_LIMITS =

  • REQUISITION_SERVICES =

  • REQUISITION_SERVICES_TEXTS =

  • REQUISITION_SRV_ACCASS_VALUES =

  • RETURN =

.

data wa1 type bapieban.

loop at item_tab into wa1.

if wa1-preq_item = zselection2.

item_new = wa1-preq_item.

material_new = wa1-material.

plant_new = wa1-plant.

quantity_new = wa1-quantity.

unit_new = wa1-unit.

delivdate_new = wa1-deliv_date.

endif.

endloop.

endif.

endmethod.