We have added search box. Key in SAP issue keyword to search
TopBottom

Announcement: wanna exchange links? contact me at sapchatroom@gmail.com.

[sap-log-pm] Service PR Creation Using Bapi_Requisition_Create

Posted by Admin at
Share this post:
Ma.gnolia DiggIt! Del.icio.us Yahoo Furl Technorati Reddit

Question from Manori on Oct 19 at 3:02 AM
Dear Experts,

I am writing a program to create PRs using data from an Excel sheet.
My code works correctly for creating PR with one service line item. But when there are more than one service line item, although the PR is created, only one service line is populated. Herewith I have attached my code.

Can someone help me to find the issue, please?


Thanks

v_accasserial_no = 01.
v_packno = 0000000001.
main_line_no = 0000000001.
same_item_no_count = 0.

LOOP AT gt_file INTO wa1.

CLEAR items.
CLEAR acc_ass_recs.
CLEAR serv_item_recs1.
CLEAR serv_item_recs2.
CLEAR serv_acc_ass_recs1.
CLEAR serv_acc_ass_recs2.

count = count + 1.

items-material = wa1-matnr.
items-plant = wa1-name1.
items-quantity = wa1-bamng.
items-doc_type = wa1-bsart.
items-deliv_date = wa1-eeind.
items-pur_group = wa1-ekgrp.
items-preq_item = wa1-bnfpo.
items-preq_date = wa1-badat.
items-created_by = wa1-ernam.
items-preq_name = wa1-afnam.
items-short_text = wa1-txz01.
items-unit = wa1-meins.
items-mat_grp = wa1-wgbez.
items-item_cat = wa1-epstp.
items-acctasscat = wa1-knttp.
items-gr_ind = wa1-wepos.
items-ir_ind = wa1-repos.
items-gr_non_val = wa1-weunb.
items-c_amt_bapi = wa1-preis.
items-pckg_no = v_packno.

items-distrib = '2'.
items-part_inv = '2'.

acc_ass_recs-preq_item = wa1-bnfpo.
acc_ass_recs-serial_no = wa1-zexkn. "v_accasserial_no.
acc_ass_recs-preq_qty = wa1-bamng.
acc_ass_recs-g_l_acct = wa1-sakto.
acc_ass_recs-bus_area = wa1-gsber.
acc_ass_recs-asset_no = wa1-anln1.
acc_ass_recs-sub_number = wa1-anln2.
acc_ass_recs-profit_ctr = wa1-prctr.
acc_ass_recs-order_no = wa1-aufnr.
acc_ass_recs-co_area = wa1-kokrs.
acc_ass_recs-cost_ctr = wa1-kostl.

IF prev_lineid EQ wa1-lineid.
IF prev_item_no EQ wa1-bnfpo.
same_item_no_count = same_item_no_count + 1.
ELSE.
same_item_no_count = 1.
ENDIF.
ELSE.
same_item_no_count = 1.
v_accasserial_no = 01.
v_packno = 0000000001.
main_line_no = 0000000001.
ENDIF.

IF same_item_no_count > 1.
v_packno = v_packno + ( 2 * ( same_item_no_count - 1 ) ).
ENDIF.

main_line_no = main_line_no + 1 .

serv_item_recs1-pckg_no = v_packno.
serv_item_recs1-line_no = main_line_no.
serv_item_recs1-ext_line = '0000000000'.
serv_item_recs1-outl_ind = 'X'.
serv_item_recs1-subpckg_no = serv_item_recs1-pckg_no + 1.
serv_item_recs1-from_line = '1'.

v_line_no = serv_item_recs1-line_no.

serv_item_recs2-pckg_no = v_packno + 1.
serv_item_recs2-line_no = v_line_no + 1.
serv_item_recs2-ext_line = '0000000010'.
serv_item_recs2-subpckg_no = '0000000000'.
serv_item_recs2-service = wa1-srvpos.
serv_item_recs2-quantity = wa1-menge.
serv_item_recs2-base_uom = wa1-meins2.
serv_item_recs2-uom_iso = 'PCE'.
serv_item_recs2-price_unit = 1.
serv_item_recs2-gr_price = wa1-tbtwr.
serv_item_recs2-short_text = wa1-ktext1.

serv_acc_ass_recs1-pckg_no = v_packno.
serv_acc_ass_recs1-line_no = v_line_no + 1. "'0000000000'.
serv_acc_ass_recs1-serno_line = wa1-zexkn. "'01'.
serv_acc_ass_recs1-serial_no = serv_acc_ass_recs1-serno_line. "'01'.
serv_acc_ass_recs1-percentage = '100'.

serv_acc_ass_recs2-pckg_no = v_packno + 1.
serv_acc_ass_recs2-line_no = v_line_no + 1.
serv_acc_ass_recs2-serno_line = wa1-zexkn.. "'01'.
serv_acc_ass_recs2-serial_no = serv_acc_ass_recs2-serno_line. "'01'.
serv_acc_ass_recs2-percentage = '100.0'.

IF prev_lineid EQ wa1-lineid. " Items of the same PR

IF count EQ 1.
APPEND items TO item.
ELSEIF prev_item_no NE wa1-bnfpo.
APPEND items TO item.
ENDIF.

APPEND acc_ass_recs TO acc_ass_rec.
APPEND serv_item_recs1 TO serv_item_rec.
APPEND serv_item_recs2 TO serv_item_rec.
APPEND serv_acc_ass_recs1 TO serv_acc_ass_rec.
APPEND serv_acc_ass_recs2 TO serv_acc_ass_rec.

prev_lineid = wa1-lineid.
prev_item_no = wa1-bnfpo.

" If the item is the last one in the list, create the PR
IF line_count EQ count.
CALL FUNCTION 'BAPI_REQUISITION_CREATE'
TABLES
requisition_items = item
requisition_account_assignment = acc_ass_rec
requisition_services = serv_item_rec
requisition_srv_accass_values = serv_acc_ass_rec
return = ret.

CLEAR gs_return.

LOOP AT ret INTO wa_ret.
gs_return-mandt = sy-mandt.
gs_return-log_date = sy-datum.
gs_return-file_name = file_name.
gs_return-msg_code = wa_ret-code.
gs_return-log_no = wa_ret-log_no.
gs_return-log_msg_no = wa_ret-log_msg_no.
gs_return-message_v1 = wa_ret-message_v1.
gs_return-message_v2 = wa_ret-message_v2.
gs_return-message_v3 = wa_ret-message_v3.
gs_return-message_v4 = wa_ret-message_v4.
gs_return-message = wa_ret-message.
gs_return-lineid = prev_lineid.
gs_return-msg_type = wa_ret-type.

APPEND gs_return TO gt_return.

IF gs_return-msg_type EQ 'E' OR gs_return-msg_type EQ 'W'.
APPEND gs_return TO gt_return_er_log.
ENDIF.

ENDLOOP.

ENDIF.

ELSE. " New PR or the last item in the list

" Call BAPI function to crate PR
CALL FUNCTION 'BAPI_REQUISITION_CREATE'
TABLES
requisition_items = item
requisition_account_assignment = acc_ass_rec
requisition_services = serv_item_rec
requisition_srv_accass_values = serv_acc_ass_rec
return = ret.

CLEAR gs_return.

LOOP AT ret INTO wa_ret.
gs_return-mandt = sy-mandt.
gs_return-log_date = sy-datum.
gs_return-file_name = file_name.
gs_return-msg_code = wa_ret-code.
gs_return-log_no = wa_ret-log_no.
gs_return-log_msg_no = wa_ret-log_msg_no.
gs_return-message_v1 = wa_ret-message_v1.
gs_return-message_v2 = wa_ret-message_v2.
gs_return-message_v3 = wa_ret-message_v3.
gs_return-message_v4 = wa_ret-message_v4.
gs_return-message = wa_ret-message.
gs_return-lineid = prev_lineid.
gs_return-msg_type = wa_ret-type.

APPEND gs_return TO gt_return.

IF gs_return-msg_type EQ 'E' OR gs_return-msg_type EQ 'W'.
APPEND gs_return TO gt_return_er_log.
ENDIF.

ENDLOOP.

" Refresh the internal tables to store details of the next PR
REFRESH item.
REFRESH acc_ass_rec.
REFRESH serv_item_rec.
REFRESH serv_acc_ass_rec.

APPEND items TO item.
APPEND acc_ass_recs TO acc_ass_rec.
APPEND serv_item_recs1 TO serv_item_rec.
APPEND serv_item_recs2 TO serv_item_rec.
APPEND serv_acc_ass_recs1 TO serv_acc_ass_rec.
APPEND serv_acc_ass_recs2 TO serv_acc_ass_rec.

prev_lineid = wa1-lineid.
prev_item_no = wa1-bnfpo.

" If the item is the last one in the list, create the PR
IF line_count EQ count.
CALL FUNCTION 'BAPI_REQUISITION_CREATE'
TABLES
requisition_items = item
requisition_account_assignment = acc_ass_rec
requisition_services = serv_item_rec
requisition_srv_accass_values = serv_acc_ass_rec
return = ret.

CLEAR gs_return.

LOOP AT ret INTO wa_ret.
gs_return-mandt = sy-mandt.
gs_return-log_date = sy-datum.
gs_return-file_name = file_name.
gs_return-msg_code = wa_ret-code.
gs_return-log_no = wa_ret-log_no.
gs_return-log_msg_no = wa_ret-log_msg_no.
gs_return-message_v1 = wa_ret-message_v1.
gs_return-message_v2 = wa_ret-message_v2.
gs_return-message_v3 = wa_ret-message_v3.
gs_return-message_v4 = wa_ret-message_v4.
gs_return-message = wa_ret-message.
gs_return-lineid = prev_lineid.
gs_return-msg_type = wa_ret-type.

APPEND gs_return TO gt_return.

IF gs_return-msg_type EQ 'E' OR gs_return-msg_type EQ 'W'.
APPEND gs_return TO gt_return_er_log.
ENDIF.

ENDLOOP.

ENDIF.

ENDIF.
ENDLOOP.
 
Reply to this email to post your response.
 
__.____._
Manage Settings | Unsubscribe | Create FAQ | Send Feedback
  
Copyright © 2015 Ziff Davis, LLC. and message author.
Ziff Davis, LLC. 28 E 28th Street New York, NY 10016
Manori  
 
View this online
Ask a new question
 
In the Spotlight
Have a technical question? Need to find IT solutions? Ask your peers in the Toolbox for IT community.

_.____.__

0 comments:

Post a Comment

T r a n s l a t e to your language