<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: batch input sessions.......... in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467250#M833348</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.sapbrainsonline.com/TUTORIALS/TECHNICAL/BDC_tutorial.html" target="test_blank"&gt;http://www.sapbrainsonline.com/TUTORIALS/TECHNICAL/BDC_tutorial.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/abap/bdc%2btutorial" target="test_blank"&gt;https://www.sdn.sap.com/irj/sdn/wiki?path=/display/abap/bdc%2btutorial&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ABAP BDC SESSION METHOD SAMPLE CODE &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pool of form routines&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;include zmppn001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Define BDC Table Structure&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab_bdc_tab occurs 0.&lt;/P&gt;&lt;P&gt;include structure bdcdata.&lt;/P&gt;&lt;P&gt;data: end of itab_bdc_tab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Input record layout of Leagcy File&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab_xcel occurs 0,&lt;/P&gt;&lt;P&gt;matnr(18) type c,&lt;/P&gt;&lt;P&gt;werks(4) type c,&lt;/P&gt;&lt;P&gt;alnag(2) type c,&lt;/P&gt;&lt;P&gt;verid(4) type c,&lt;/P&gt;&lt;P&gt;text1(40) type c,&lt;/P&gt;&lt;P&gt;bstmi like mkal-bstmi,&lt;/P&gt;&lt;P&gt;bstma like mkal-bstma,&lt;/P&gt;&lt;P&gt;adatu(10) type c,&lt;/P&gt;&lt;P&gt;bdatu(10) type c,&lt;/P&gt;&lt;P&gt;stlal(2) type c,&lt;/P&gt;&lt;P&gt;stlan(1) type c,&lt;/P&gt;&lt;P&gt;serkz(1) type c,&lt;/P&gt;&lt;P&gt;mdv01(8) type c,&lt;/P&gt;&lt;P&gt;elpro(4) type c,&lt;/P&gt;&lt;P&gt;alort(4) type c,&lt;/P&gt;&lt;P&gt;end of itab_xcel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_pp04_cache occurs 0,&lt;/P&gt;&lt;P&gt;matnr like itab_xcel-matnr,&lt;/P&gt;&lt;P&gt;werks like itab_xcel-werks,&lt;/P&gt;&lt;P&gt;alnag like itab_xcel-alnag,&lt;/P&gt;&lt;P&gt;plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;ktext like crtx-ktext,&lt;/P&gt;&lt;P&gt;end of lt_pp04_cache.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: v_ssnnr(4) type n,&lt;/P&gt;&lt;P&gt;v_lines_in_xcel like sy-tabix,&lt;/P&gt;&lt;P&gt;v_ssnname like apqi-groupid,&lt;/P&gt;&lt;P&gt;v_trans_in_ssn type i,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;wa_xcel LIKE itab_xcel,&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;l_tabix like sy-tabix,&lt;/P&gt;&lt;P&gt;v_matnr like rc27m-matnr,&lt;/P&gt;&lt;P&gt;v_plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;v_plnal like mapl-plnal,&lt;/P&gt;&lt;P&gt;v_tcode like sy-tcode value 'C223',&lt;/P&gt;&lt;P&gt;v_plnty like plas-plnty value 'R',&lt;/P&gt;&lt;P&gt;v_objty like crhd-objty value 'A',&lt;/P&gt;&lt;P&gt;v_plpo_steus like plpo-steus value 'PP04',&lt;/P&gt;&lt;P&gt;v_verwe like crhd-verwe value '0007'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parameters&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;selection-screen: skip 3.&lt;/P&gt;&lt;P&gt;selection-screen: begin of block 1 with frame.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;parameters: p_name like rlgrap-filename&lt;/P&gt;&lt;P&gt;default 'C:\My Documents\InputFile.txt'&lt;/P&gt;&lt;P&gt;obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;bdc session name prefix&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_bdcpfx(6) default 'ZPVCRT'&lt;/P&gt;&lt;P&gt;obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;number for transction per BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_trnssn type i&lt;/P&gt;&lt;P&gt;default 2000 obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;retain the BDC session after successfull execution&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_keep like apqi-qerase&lt;/P&gt;&lt;P&gt;default 'X',&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;user who will be executing BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_uname like apqi-userid&lt;/P&gt;&lt;P&gt;default sy-uname&lt;/P&gt;&lt;P&gt;obligatory.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;selection-screen: end of block 1.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;possible entry list (F4 dropdown) for input file name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;at selection-screen on value-request for p_name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*-SELECT FILE FROM USERS LOCAL PC&lt;/P&gt;&lt;P&gt;call function 'WS_FILENAME_GET'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DEF_FILENAME = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;def_path = 'C:\Temp\'&lt;/P&gt;&lt;P&gt;mask = ',&lt;STRONG&gt;.&lt;/STRONG&gt;,&lt;STRONG&gt;.&lt;/STRONG&gt;.'&lt;/P&gt;&lt;P&gt;mode = 'O'&lt;/P&gt;&lt;P&gt;title = 'Select File '(007)&lt;/P&gt;&lt;P&gt;importing&lt;/P&gt;&lt;P&gt;filename = p_name&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;RC =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;inv_winsys = 1&lt;/P&gt;&lt;P&gt;no_batch = 2&lt;/P&gt;&lt;P&gt;selection_cancel = 3&lt;/P&gt;&lt;P&gt;selection_error = 4&lt;/P&gt;&lt;P&gt;others = 5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;begin the show &lt;SPAN __jive_emoticon_name="happy"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;start-of-selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read data from input file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform transfer_xcel_to_itab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;loop at itab_xcel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;hang on to xcel line num&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;l_tabix = sy-tabix.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;each line in the xcel file marks begining of new prod.version defn&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if num-of-trnas-in-session = 0, create new BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_trans_in_ssn is initial.&lt;/P&gt;&lt;P&gt;perform bdc_session_open.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;begin new bdc script for rtg create trans&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in bdc-data for prod.version maintenance screens&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_build_script.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;insert the bdc script as a BDC transaction&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_submit_transaction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;keep track of how many BDC transactions were inserted in the BDC&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;add 1 to v_trans_in_ssn.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the user-specified num of trans in BDC session is reached OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if end of input file is reached, close the BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_trans_in_ssn = p_trnssn or&lt;/P&gt;&lt;P&gt;l_tabix = v_lines_in_xcel.&lt;/P&gt;&lt;P&gt;perform bdc_session_close.&lt;/P&gt;&lt;P&gt;clear v_trans_in_ssn.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endloop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;top-of-page.&lt;/P&gt;&lt;P&gt;call function 'Z_HEADER'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT1 =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT2 =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT3 =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TRANSFER_XCEL_TO_ITAB *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Transfer Xcel Spreadsheet to SAP Internal Table *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form transfer_xcel_to_itab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the tab-delimited file into itab&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'WS_UPLOAD'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;filename = p_name&lt;/P&gt;&lt;P&gt;filetype = 'DAT'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;filelength = flength&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;data_tab = itab_xcel&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;conversion_error = 1&lt;/P&gt;&lt;P&gt;file_open_error = 2&lt;/P&gt;&lt;P&gt;file_read_error = 3&lt;/P&gt;&lt;P&gt;invalid_table_width = 4&lt;/P&gt;&lt;P&gt;invalid_type = 5&lt;/P&gt;&lt;P&gt;no_batch = 6&lt;/P&gt;&lt;P&gt;unknown_error = 7&lt;/P&gt;&lt;P&gt;others = 8.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;if sy-subrc = 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;sort the data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;sort itab_xcel by matnr werks.&lt;/P&gt;&lt;P&gt;clear v_lines_in_xcel.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if no data in the file - error out&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;describe table itab_xcel lines v_lines_in_xcel.&lt;/P&gt;&lt;P&gt;if v_lines_in_xcel is initial.&lt;/P&gt;&lt;P&gt;write: / 'No data in input file'.&lt;/P&gt;&lt;P&gt;stop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if file upload failed - error out&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;write: / 'Error reading input file'.&lt;/P&gt;&lt;P&gt;stop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SESSION_OPEN *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Open BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_session_open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create bdc session name = prefix-from-selectn-screen + nnnn&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;add 1 to v_ssnnr.&lt;/P&gt;&lt;P&gt;concatenate p_bdcpfx v_ssnnr into v_ssnname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;open new bdc session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_OPEN_GROUP'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;client = sy-mandt&lt;/P&gt;&lt;P&gt;group = v_ssnname&lt;/P&gt;&lt;P&gt;keep = p_keep&lt;/P&gt;&lt;P&gt;user = p_uname&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;client_invalid = 1&lt;/P&gt;&lt;P&gt;destination_invalid = 2&lt;/P&gt;&lt;P&gt;group_invalid = 3&lt;/P&gt;&lt;P&gt;group_is_locked = 4&lt;/P&gt;&lt;P&gt;holddate_invalid = 5&lt;/P&gt;&lt;P&gt;internal_error = 6&lt;/P&gt;&lt;P&gt;queue_error = 7&lt;/P&gt;&lt;P&gt;running = 8&lt;/P&gt;&lt;P&gt;system_lock_error = 9&lt;/P&gt;&lt;P&gt;user_invalid = 10&lt;/P&gt;&lt;P&gt;others = 11.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_BUILD_SCRIPT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Build BDC *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_build_script.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: l_arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;l_text1 like mkal-text1,&lt;/P&gt;&lt;P&gt;l_mdv01 like mkal-mdv01,&lt;/P&gt;&lt;P&gt;l_mapl like mapl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;clear bdc-data itab - begin of new bdc transaction&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;clear itab_bdc_tab.&lt;/P&gt;&lt;P&gt;refresh itab_bdc_tab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read material cross reference tables to determine sap part#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;clear : v_matnr, v_plnnr, v_plnal.&lt;/P&gt;&lt;P&gt;perform read_matnr_cross_ref using itab_xcel-matnr&lt;/P&gt;&lt;P&gt;itab_xcel-werks&lt;/P&gt;&lt;P&gt;changing v_matnr.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the version description to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-text1 is initial.&lt;/P&gt;&lt;P&gt;l_text1 = itab_xcel-verid.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;l_text1 = itab_xcel-text1.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the routing group# and group ctr# to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_routing .&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the production line to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-mdv01 is initial.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if not provided in the file then:&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;prod line = work ctr on the last PP04 op of the rtg determined above&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_wc_on_last_pp04 using v_plnnr v_plnal&lt;/P&gt;&lt;P&gt;changing l_mdv01.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;NOTE: when executing the above form\routine, if v_plnnr is initial&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;or v_plnal is initial, THEN l_mdv01 will automatically be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;returned blank (ie initial)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;l_mdv01 = itab_xcel-mdv01.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;build bdc script&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_build_script_record&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;using: 'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=ENTE',&lt;/P&gt;&lt;P&gt;' ' 'MKAL-WERKS' itab_xcel-werks,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-MATNR' v_matnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_ADMIN-DISPO' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNR' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_ADMIN-STTAG' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNG' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-MDV01' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNM' space,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;click create button on initial screen and go to detail screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=CREA',&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in the detail screen and go back to initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '2000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=CLOS',&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-MATNR' v_matnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-VERID' itab_xcel-verid,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-TEXT1' l_text1,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BSTMI' itab_xcel-bstmi,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BSTMA' itab_xcel-bstma,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ADATU' itab_xcel-adatu,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BDATU' itab_xcel-bdatu,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-PLTYG' v_plnty,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-PLNNG' v_plnnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ALNAG' v_plnal,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-STLAL' itab_xcel-stlal,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-STLAN' itab_xcel-stlan,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-SERKZ' itab_xcel-serkz,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-MDV01' l_mdv01,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ELPRO' itab_xcel-elpro,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ALORT' itab_xcel-alort,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;save the production version from initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=SAVE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SUBMIT_TRANSACTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Submit BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_submit_transaction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Load BDC script as a trqansction in BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_INSERT'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;tcode = v_tcode&lt;/P&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;dynprotab = itab_bdc_tab&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;internal_error = 01&lt;/P&gt;&lt;P&gt;not_open = 02&lt;/P&gt;&lt;P&gt;queue_error = 03&lt;/P&gt;&lt;P&gt;tcode_invalid = 04.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_BUILD_SCRIPT_RECORD *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_build_script_record using dynbegin name value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear itab_bdc_tab.&lt;/P&gt;&lt;P&gt;if dynbegin = 'X'.&lt;/P&gt;&lt;P&gt;move: name to itab_bdc_tab-program,&lt;/P&gt;&lt;P&gt;value to itab_bdc_tab-dynpro,&lt;/P&gt;&lt;P&gt;'X' to itab_bdc_tab-dynbegin.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;move: name to itab_bdc_tab-fnam,&lt;/P&gt;&lt;P&gt;value to itab_bdc_tab-fval.&lt;/P&gt;&lt;P&gt;shift itab_bdc_tab-fval left deleting leading space.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;append itab_bdc_tab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SESSION_CLOSE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_session_close.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;close the session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_CLOSE_GROUP'&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;not_open = 1&lt;/P&gt;&lt;P&gt;queue_error = 2&lt;/P&gt;&lt;P&gt;others = 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;skip 2.&lt;/P&gt;&lt;P&gt;if sy-subrc ne 0.&lt;/P&gt;&lt;P&gt;write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;write : / 'Session created:', v_ssnname,&lt;/P&gt;&lt;P&gt;50 '# of transactions:', v_trans_in_ssn.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_routing_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*FORM read_routing_cache USING pi_matnr&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_alnag&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_verid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DATA: BEGIN OF lt_plpo OCCURS 0,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;vornr LIKE plpo-vornr,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objty LIKE crhd-objty,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid LIKE crhd-objid,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;arbpl LIKE crhd-arbpl,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;END OF lt_plpo,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;l_mapl_plnnr LIKE mapl-plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;determine the routing group#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;chk if its in the cache first, if not then get it from MAPL table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;and put it in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;do nothing - lt_pp04_cache header line has rtg#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;get the routing group # from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT plnnr INTO l_mapl_plnnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM mapl UP TO 1 ROWS&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE matnr = pi_matnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;plnty = 'R' AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;plnal = pi_alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;loekz = space.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDSELECT.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;put it in the cache internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT l_mapl_plnnr IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-matnr = pi_matnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-werks = pi_werks.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-plnnr = l_mapl_plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;APPEND lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;if the rtg# was determined AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- the work center was not determined yet AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- work center was really needed for this line in the input file&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;then&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- read the work center from last PP04 operation on the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- update the cache accordingly&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_pp04_cache-plnnr IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;( pi_verid IS INITIAL OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01 IS INITIAL ).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;REFRESH lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE lt_plpo&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM plas AS b&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN plpo AS c&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN crhd AS e&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE b~plnty = v_plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnnr = lt_pp04_cache-plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnal = lt_pp04_cache-alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~loekz = space AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~steus = v_plpo_steus AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~objty = v_objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~werks = lt_pp04_cache-werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~verwe = v_verwe.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SORT lt_plpo BY vornr DESCENDING.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_plpo INDEX 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_plpo-arbpl IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read work center description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT SINGLE ktext INTO lt_pp04_cache-ktext&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM crtx WHERE objty = lt_plpo-objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid = lt_plpo-objid AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;spras = sy-langu.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;the following read will get the index of the correct record to be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;updated in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MODIFY lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INDEX sy-tabix&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSPORTING arbpl ktext.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*ENDFORM. " read_last_pp04_operation_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_routing&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form read_routing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_mapl occurs 0,&lt;/P&gt;&lt;P&gt;plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;plnal like mapl-plnal,&lt;/P&gt;&lt;P&gt;end of lt_mapl,&lt;/P&gt;&lt;P&gt;l_arbpl like crhd-arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get all the rtg# and grp ctr# from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;select plnnr plnal&lt;/P&gt;&lt;P&gt;into corresponding fields of table lt_mapl&lt;/P&gt;&lt;P&gt;from mapl&lt;/P&gt;&lt;P&gt;where matnr = v_matnr and&lt;/P&gt;&lt;P&gt;werks = itab_xcel-werks and&lt;/P&gt;&lt;P&gt;plnty = v_plnty and "Rate Routing&lt;/P&gt;&lt;P&gt;loekz = space. "with del flag = OFF&lt;/P&gt;&lt;P&gt;sort lt_mapl by plnal.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if not itab_xcel-verid is initial.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-verid = '0001'.&lt;/P&gt;&lt;P&gt;read table lt_mapl index 1.&lt;/P&gt;&lt;P&gt;v_plnnr = lt_mapl-plnnr.&lt;/P&gt;&lt;P&gt;v_plnal = lt_mapl-plnal.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the verid&amp;lt;&amp;gt;0001 then use the rtg-grp# and grp-ctr# of the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;whose work center on the last PP04 operation matches the given verid&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;loop at lt_mapl.&lt;/P&gt;&lt;P&gt;clear l_arbpl.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get the work center from the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_wc_on_last_pp04 using lt_mapl-plnnr&lt;/P&gt;&lt;P&gt;lt_mapl-plnal&lt;/P&gt;&lt;P&gt;changing l_arbpl.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;if itab_xcel-verid = l_arbpl.&lt;/P&gt;&lt;P&gt;v_plnnr = lt_mapl-plnnr.&lt;/P&gt;&lt;P&gt;v_plnal = lt_mapl-plnal.&lt;/P&gt;&lt;P&gt;exit.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;endloop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;do nothing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;For version IDs that are other then '0000' or 'ZWIP' :--&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-verid NE '0000' and&lt;/P&gt;&lt;P&gt;itab_xcel-verid NE 'ZWIP'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if routing group# or group counter was not determined, make the&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;valid-to date 99/99/9999 so that the BDC, on execution, errors out.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_plnnr is initial or&lt;/P&gt;&lt;P&gt;v_plnal is initial.&lt;/P&gt;&lt;P&gt;itab_xcel-bdatu = '99/99/9999'.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;determine the routing group#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;chk if its in the cache first, if not then get it from MAPL table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;and put it in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;do nothing - lt_pp04_cache header line has rtg#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;get the routing group # from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;put it in the cache internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT l_mapl_plnnr IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-matnr = pi_matnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-werks = pi_werks.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-plnnr = l_mapl_plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;APPEND lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;if the rtg# was determined AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- the work center was not determined yet AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- work center was really needed for this line in the input file&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;then&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- read the work center from last PP04 operation on the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- update the cache accordingly&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_pp04_cache-plnnr IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;( pi_verid IS INITIAL OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01 IS INITIAL ).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;REFRESH lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE lt_plpo&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM plas AS b&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN plpo AS c&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN crhd AS e&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE b~plnty = v_plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnnr = lt_pp04_cache-plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnal = lt_pp04_cache-alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~loekz = space AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~steus = v_plpo_steus AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~objty = v_objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~werks = lt_pp04_cache-werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~verwe = v_verwe.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SORT lt_plpo BY vornr DESCENDING.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_plpo INDEX 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_plpo-arbpl IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read work center description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT SINGLE ktext INTO lt_pp04_cache-ktext&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM crtx WHERE objty = lt_plpo-objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid = lt_plpo-objid AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;spras = sy-langu.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;the following read will get the index of the correct record to be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;updated in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MODIFY lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INDEX sy-tabix&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSPORTING arbpl ktext.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform. " read_last_pp04_operation_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_wc_on_last_pp04&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form read_wc_on_last_pp04 using pi_plnnr&lt;/P&gt;&lt;P&gt;pi_plnal&lt;/P&gt;&lt;P&gt;changing pe_arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_plpo occurs 0,&lt;/P&gt;&lt;P&gt;vornr like plpo-vornr,&lt;/P&gt;&lt;P&gt;objty like crhd-objty,&lt;/P&gt;&lt;P&gt;objid like crhd-objid,&lt;/P&gt;&lt;P&gt;arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;end of lt_plpo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get all the PP04 operations for the given rtg# &amp;amp; grp-ctr#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;select vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;P&gt;into corresponding fields of table lt_plpo&lt;/P&gt;&lt;P&gt;from plas as b&lt;/P&gt;&lt;P&gt;inner join plpo as c&lt;/P&gt;&lt;P&gt;on b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty and&lt;/P&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr and&lt;/P&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;P&gt;inner join crhd as e&lt;/P&gt;&lt;P&gt;on c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;P&gt;where b~plnty = v_plnty and "Rate Routing&lt;/P&gt;&lt;P&gt;b~plnnr = pi_plnnr and&lt;/P&gt;&lt;P&gt;b~plnal = pi_plnal and&lt;/P&gt;&lt;P&gt;c~loekz = space and "Oper Del Flag = OFF&lt;/P&gt;&lt;P&gt;c~steus = v_plpo_steus and "PP04&lt;/P&gt;&lt;P&gt;e~objty = v_objty. "WC Obj Type = 'A'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read the last operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;sort lt_plpo by vornr descending.&lt;/P&gt;&lt;P&gt;read table lt_plpo index 1.&lt;/P&gt;&lt;P&gt;pe_arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Hope this helps, Do reward.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edited by: Runal Singh on Mar 6, 2008 2:47 PM&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 06 Mar 2008 09:14:52 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-03-06T09:14:52Z</dc:date>
    <item>
      <title>batch input sessions..........</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467248#M833346</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How to make batch session...?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Mar 2008 08:23:30 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467248#M833346</guid>
      <dc:creator>former_member259275</dc:creator>
      <dc:date>2008-03-06T08:23:30Z</dc:date>
    </item>
    <item>
      <title>Re: batch input sessions..........</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467249#M833347</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi shoaib,&lt;/P&gt;&lt;P&gt;Good.&lt;/P&gt;&lt;P&gt;SESSION METHOD&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;It is one of the BDC techniques for uploading legacy data into SAP&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The data is transferring from the internal table to database table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;through sessions.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Data along with its action is stored in session.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;When the program has finished generating the session, you can run&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the session to execute the transaction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Unless session is processed, the data is not transferred to&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;database tables.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The following Function Modules are used in the session method.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. BDC_OPEN_GROUP (Used to create the session)&lt;/P&gt;&lt;P&gt;Import Parameters :&lt;/P&gt;&lt;P&gt;USER - User Name&lt;/P&gt;&lt;P&gt;CLIENT - Client&lt;/P&gt;&lt;P&gt;GROUP - Name of the session&lt;/P&gt;&lt;P&gt;HOLD - The date when you want to process the session&lt;/P&gt;&lt;P&gt;KEEP - &amp;#145;X&amp;#146; &amp;#150; retain session even after processing it&lt;/P&gt;&lt;P&gt;' ' - Delete the session after processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;2. BDC_INSERT (Data is transferred to session)&lt;/P&gt;&lt;P&gt;Import Parameters :&lt;/P&gt;&lt;P&gt;TCODE - Transaction code&lt;/P&gt;&lt;P&gt;DYNPROTAB &amp;#150; BDCDATA table&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3. BDC_CLOSE_GROUP (Used to close a session)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Processing Steps&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1. Generate the batch input session using function module&lt;/P&gt;&lt;P&gt;BDC_OPEN_GROUP.&lt;/P&gt;&lt;P&gt;2. The proceed as follows for each transaction that the session&lt;/P&gt;&lt;P&gt;contains:&lt;/P&gt;&lt;P&gt;a. In the BDCDATA structure, enter the value for all screens&lt;/P&gt;&lt;P&gt;and fields that must be processed in the transaction.&lt;/P&gt;&lt;P&gt;b. Use BDC_INSERT to transfer the transaction and the BDCDATA&lt;/P&gt;&lt;P&gt;structure to the session.&lt;/P&gt;&lt;P&gt;3. Close the batch input session with BDC_CLOSE_GROUP.&lt;/P&gt;&lt;P&gt;4. Start to process the generated session in T.Code SM35. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Reward if usefull.&lt;/P&gt;&lt;P&gt;Gokul.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Mar 2008 09:08:28 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467249#M833347</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-03-06T09:08:28Z</dc:date>
    </item>
    <item>
      <title>Re: batch input sessions..........</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467250#M833348</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.sapbrainsonline.com/TUTORIALS/TECHNICAL/BDC_tutorial.html" target="test_blank"&gt;http://www.sapbrainsonline.com/TUTORIALS/TECHNICAL/BDC_tutorial.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/abap/bdc%2btutorial" target="test_blank"&gt;https://www.sdn.sap.com/irj/sdn/wiki?path=/display/abap/bdc%2btutorial&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ABAP BDC SESSION METHOD SAMPLE CODE &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pool of form routines&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;include zmppn001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Define BDC Table Structure&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab_bdc_tab occurs 0.&lt;/P&gt;&lt;P&gt;include structure bdcdata.&lt;/P&gt;&lt;P&gt;data: end of itab_bdc_tab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Input record layout of Leagcy File&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;data: begin of itab_xcel occurs 0,&lt;/P&gt;&lt;P&gt;matnr(18) type c,&lt;/P&gt;&lt;P&gt;werks(4) type c,&lt;/P&gt;&lt;P&gt;alnag(2) type c,&lt;/P&gt;&lt;P&gt;verid(4) type c,&lt;/P&gt;&lt;P&gt;text1(40) type c,&lt;/P&gt;&lt;P&gt;bstmi like mkal-bstmi,&lt;/P&gt;&lt;P&gt;bstma like mkal-bstma,&lt;/P&gt;&lt;P&gt;adatu(10) type c,&lt;/P&gt;&lt;P&gt;bdatu(10) type c,&lt;/P&gt;&lt;P&gt;stlal(2) type c,&lt;/P&gt;&lt;P&gt;stlan(1) type c,&lt;/P&gt;&lt;P&gt;serkz(1) type c,&lt;/P&gt;&lt;P&gt;mdv01(8) type c,&lt;/P&gt;&lt;P&gt;elpro(4) type c,&lt;/P&gt;&lt;P&gt;alort(4) type c,&lt;/P&gt;&lt;P&gt;end of itab_xcel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_pp04_cache occurs 0,&lt;/P&gt;&lt;P&gt;matnr like itab_xcel-matnr,&lt;/P&gt;&lt;P&gt;werks like itab_xcel-werks,&lt;/P&gt;&lt;P&gt;alnag like itab_xcel-alnag,&lt;/P&gt;&lt;P&gt;plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;ktext like crtx-ktext,&lt;/P&gt;&lt;P&gt;end of lt_pp04_cache.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: v_ssnnr(4) type n,&lt;/P&gt;&lt;P&gt;v_lines_in_xcel like sy-tabix,&lt;/P&gt;&lt;P&gt;v_ssnname like apqi-groupid,&lt;/P&gt;&lt;P&gt;v_trans_in_ssn type i,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;wa_xcel LIKE itab_xcel,&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;l_tabix like sy-tabix,&lt;/P&gt;&lt;P&gt;v_matnr like rc27m-matnr,&lt;/P&gt;&lt;P&gt;v_plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;v_plnal like mapl-plnal,&lt;/P&gt;&lt;P&gt;v_tcode like sy-tcode value 'C223',&lt;/P&gt;&lt;P&gt;v_plnty like plas-plnty value 'R',&lt;/P&gt;&lt;P&gt;v_objty like crhd-objty value 'A',&lt;/P&gt;&lt;P&gt;v_plpo_steus like plpo-steus value 'PP04',&lt;/P&gt;&lt;P&gt;v_verwe like crhd-verwe value '0007'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parameters&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;selection-screen: skip 3.&lt;/P&gt;&lt;P&gt;selection-screen: begin of block 1 with frame.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;parameters: p_name like rlgrap-filename&lt;/P&gt;&lt;P&gt;default 'C:\My Documents\InputFile.txt'&lt;/P&gt;&lt;P&gt;obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;bdc session name prefix&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_bdcpfx(6) default 'ZPVCRT'&lt;/P&gt;&lt;P&gt;obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;number for transction per BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_trnssn type i&lt;/P&gt;&lt;P&gt;default 2000 obligatory,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;retain the BDC session after successfull execution&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_keep like apqi-qerase&lt;/P&gt;&lt;P&gt;default 'X',&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;user who will be executing BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;p_uname like apqi-userid&lt;/P&gt;&lt;P&gt;default sy-uname&lt;/P&gt;&lt;P&gt;obligatory.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;selection-screen: end of block 1.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;possible entry list (F4 dropdown) for input file name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;at selection-screen on value-request for p_name.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*-SELECT FILE FROM USERS LOCAL PC&lt;/P&gt;&lt;P&gt;call function 'WS_FILENAME_GET'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DEF_FILENAME = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;def_path = 'C:\Temp\'&lt;/P&gt;&lt;P&gt;mask = ',&lt;STRONG&gt;.&lt;/STRONG&gt;,&lt;STRONG&gt;.&lt;/STRONG&gt;.'&lt;/P&gt;&lt;P&gt;mode = 'O'&lt;/P&gt;&lt;P&gt;title = 'Select File '(007)&lt;/P&gt;&lt;P&gt;importing&lt;/P&gt;&lt;P&gt;filename = p_name&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;RC =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;inv_winsys = 1&lt;/P&gt;&lt;P&gt;no_batch = 2&lt;/P&gt;&lt;P&gt;selection_cancel = 3&lt;/P&gt;&lt;P&gt;selection_error = 4&lt;/P&gt;&lt;P&gt;others = 5.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;********************************************************&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;begin the show &lt;SPAN __jive_emoticon_name="happy"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;start-of-selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read data from input file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform transfer_xcel_to_itab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;loop at itab_xcel.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;hang on to xcel line num&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;l_tabix = sy-tabix.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;each line in the xcel file marks begining of new prod.version defn&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if num-of-trnas-in-session = 0, create new BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_trans_in_ssn is initial.&lt;/P&gt;&lt;P&gt;perform bdc_session_open.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;begin new bdc script for rtg create trans&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in bdc-data for prod.version maintenance screens&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_build_script.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;insert the bdc script as a BDC transaction&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_submit_transaction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;keep track of how many BDC transactions were inserted in the BDC&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;add 1 to v_trans_in_ssn.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the user-specified num of trans in BDC session is reached OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if end of input file is reached, close the BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_trans_in_ssn = p_trnssn or&lt;/P&gt;&lt;P&gt;l_tabix = v_lines_in_xcel.&lt;/P&gt;&lt;P&gt;perform bdc_session_close.&lt;/P&gt;&lt;P&gt;clear v_trans_in_ssn.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endloop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;top-of-page.&lt;/P&gt;&lt;P&gt;call function 'Z_HEADER'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;EXPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT1 =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT2 =&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FLEX_TEXT3 =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM TRANSFER_XCEL_TO_ITAB *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Transfer Xcel Spreadsheet to SAP Internal Table *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form transfer_xcel_to_itab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the tab-delimited file into itab&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'WS_UPLOAD'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;filename = p_name&lt;/P&gt;&lt;P&gt;filetype = 'DAT'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IMPORTING&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;filelength = flength&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;data_tab = itab_xcel&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;conversion_error = 1&lt;/P&gt;&lt;P&gt;file_open_error = 2&lt;/P&gt;&lt;P&gt;file_read_error = 3&lt;/P&gt;&lt;P&gt;invalid_table_width = 4&lt;/P&gt;&lt;P&gt;invalid_type = 5&lt;/P&gt;&lt;P&gt;no_batch = 6&lt;/P&gt;&lt;P&gt;unknown_error = 7&lt;/P&gt;&lt;P&gt;others = 8.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;if sy-subrc = 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;sort the data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;sort itab_xcel by matnr werks.&lt;/P&gt;&lt;P&gt;clear v_lines_in_xcel.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if no data in the file - error out&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;describe table itab_xcel lines v_lines_in_xcel.&lt;/P&gt;&lt;P&gt;if v_lines_in_xcel is initial.&lt;/P&gt;&lt;P&gt;write: / 'No data in input file'.&lt;/P&gt;&lt;P&gt;stop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if file upload failed - error out&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;write: / 'Error reading input file'.&lt;/P&gt;&lt;P&gt;stop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SESSION_OPEN *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Open BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_session_open.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;create bdc session name = prefix-from-selectn-screen + nnnn&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;add 1 to v_ssnnr.&lt;/P&gt;&lt;P&gt;concatenate p_bdcpfx v_ssnnr into v_ssnname.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;open new bdc session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_OPEN_GROUP'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;client = sy-mandt&lt;/P&gt;&lt;P&gt;group = v_ssnname&lt;/P&gt;&lt;P&gt;keep = p_keep&lt;/P&gt;&lt;P&gt;user = p_uname&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;client_invalid = 1&lt;/P&gt;&lt;P&gt;destination_invalid = 2&lt;/P&gt;&lt;P&gt;group_invalid = 3&lt;/P&gt;&lt;P&gt;group_is_locked = 4&lt;/P&gt;&lt;P&gt;holddate_invalid = 5&lt;/P&gt;&lt;P&gt;internal_error = 6&lt;/P&gt;&lt;P&gt;queue_error = 7&lt;/P&gt;&lt;P&gt;running = 8&lt;/P&gt;&lt;P&gt;system_lock_error = 9&lt;/P&gt;&lt;P&gt;user_invalid = 10&lt;/P&gt;&lt;P&gt;others = 11.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_BUILD_SCRIPT *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Build BDC *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_build_script.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: l_arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;l_text1 like mkal-text1,&lt;/P&gt;&lt;P&gt;l_mdv01 like mkal-mdv01,&lt;/P&gt;&lt;P&gt;l_mapl like mapl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;clear bdc-data itab - begin of new bdc transaction&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;clear itab_bdc_tab.&lt;/P&gt;&lt;P&gt;refresh itab_bdc_tab.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read material cross reference tables to determine sap part#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;clear : v_matnr, v_plnnr, v_plnal.&lt;/P&gt;&lt;P&gt;perform read_matnr_cross_ref using itab_xcel-matnr&lt;/P&gt;&lt;P&gt;itab_xcel-werks&lt;/P&gt;&lt;P&gt;changing v_matnr.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the version description to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-text1 is initial.&lt;/P&gt;&lt;P&gt;l_text1 = itab_xcel-verid.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;l_text1 = itab_xcel-text1.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the routing group# and group ctr# to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_routing .&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determine the production line to use&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-mdv01 is initial.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if not provided in the file then:&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;prod line = work ctr on the last PP04 op of the rtg determined above&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_wc_on_last_pp04 using v_plnnr v_plnal&lt;/P&gt;&lt;P&gt;changing l_mdv01.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;NOTE: when executing the above form\routine, if v_plnnr is initial&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;or v_plnal is initial, THEN l_mdv01 will automatically be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;returned blank (ie initial)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;l_mdv01 = itab_xcel-mdv01.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;build bdc script&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform bdc_build_script_record&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;using: 'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=ENTE',&lt;/P&gt;&lt;P&gt;' ' 'MKAL-WERKS' itab_xcel-werks,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-MATNR' v_matnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_ADMIN-DISPO' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNR' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_ADMIN-STTAG' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNG' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-MDV01' space,&lt;/P&gt;&lt;P&gt;' ' 'MKAL-PLNNM' space,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;click create button on initial screen and go to detail screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=CREA',&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fill in the detail screen and go back to initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '2000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=CLOS',&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-MATNR' v_matnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-VERID' itab_xcel-verid,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-TEXT1' l_text1,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BSTMI' itab_xcel-bstmi,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BSTMA' itab_xcel-bstma,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ADATU' itab_xcel-adatu,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-BDATU' itab_xcel-bdatu,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-PLTYG' v_plnty,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-PLNNG' v_plnnr,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ALNAG' v_plnal,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-STLAL' itab_xcel-stlal,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-STLAN' itab_xcel-stlan,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-SERKZ' itab_xcel-serkz,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-MDV01' l_mdv01,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ELPRO' itab_xcel-elpro,&lt;/P&gt;&lt;P&gt;' ' 'MKAL_EXPAND-ALORT' itab_xcel-alort,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;save the production version from initial screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;'X' 'SAPLCMFV' '1000',&lt;/P&gt;&lt;P&gt;' ' 'BDC_OKCODE' '=SAVE'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SUBMIT_TRANSACTION *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Submit BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_submit_transaction.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Load BDC script as a trqansction in BDC session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_INSERT'&lt;/P&gt;&lt;P&gt;exporting&lt;/P&gt;&lt;P&gt;tcode = v_tcode&lt;/P&gt;&lt;P&gt;tables&lt;/P&gt;&lt;P&gt;dynprotab = itab_bdc_tab&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;internal_error = 01&lt;/P&gt;&lt;P&gt;not_open = 02&lt;/P&gt;&lt;P&gt;queue_error = 03&lt;/P&gt;&lt;P&gt;tcode_invalid = 04.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_BUILD_SCRIPT_RECORD *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_build_script_record using dynbegin name value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clear itab_bdc_tab.&lt;/P&gt;&lt;P&gt;if dynbegin = 'X'.&lt;/P&gt;&lt;P&gt;move: name to itab_bdc_tab-program,&lt;/P&gt;&lt;P&gt;value to itab_bdc_tab-dynpro,&lt;/P&gt;&lt;P&gt;'X' to itab_bdc_tab-dynbegin.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;move: name to itab_bdc_tab-fnam,&lt;/P&gt;&lt;P&gt;value to itab_bdc_tab-fval.&lt;/P&gt;&lt;P&gt;shift itab_bdc_tab-fval left deleting leading space.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;append itab_bdc_tab.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FORM BDC_SESSION_CLOSE *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close BDC Session *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form bdc_session_close.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;close the session&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;call function 'BDC_CLOSE_GROUP'&lt;/P&gt;&lt;P&gt;exceptions&lt;/P&gt;&lt;P&gt;not_open = 1&lt;/P&gt;&lt;P&gt;queue_error = 2&lt;/P&gt;&lt;P&gt;others = 3.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;skip 2.&lt;/P&gt;&lt;P&gt;if sy-subrc ne 0.&lt;/P&gt;&lt;P&gt;write: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;P&gt;write : / 'Session created:', v_ssnname,&lt;/P&gt;&lt;P&gt;50 '# of transactions:', v_trans_in_ssn.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_routing_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*FORM read_routing_cache USING pi_matnr&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_alnag&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_verid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DATA: BEGIN OF lt_plpo OCCURS 0,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;vornr LIKE plpo-vornr,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objty LIKE crhd-objty,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid LIKE crhd-objid,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;arbpl LIKE crhd-arbpl,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;END OF lt_plpo,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;l_mapl_plnnr LIKE mapl-plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;determine the routing group#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;chk if its in the cache first, if not then get it from MAPL table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;and put it in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;do nothing - lt_pp04_cache header line has rtg#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;get the routing group # from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT plnnr INTO l_mapl_plnnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM mapl UP TO 1 ROWS&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE matnr = pi_matnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;plnty = 'R' AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;plnal = pi_alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;loekz = space.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDSELECT.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;put it in the cache internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT l_mapl_plnnr IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-matnr = pi_matnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-werks = pi_werks.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-plnnr = l_mapl_plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;APPEND lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;if the rtg# was determined AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- the work center was not determined yet AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- work center was really needed for this line in the input file&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;then&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- read the work center from last PP04 operation on the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- update the cache accordingly&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_pp04_cache-plnnr IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;( pi_verid IS INITIAL OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01 IS INITIAL ).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;REFRESH lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE lt_plpo&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM plas AS b&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN plpo AS c&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN crhd AS e&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE b~plnty = v_plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnnr = lt_pp04_cache-plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnal = lt_pp04_cache-alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~loekz = space AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~steus = v_plpo_steus AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~objty = v_objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~werks = lt_pp04_cache-werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~verwe = v_verwe.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SORT lt_plpo BY vornr DESCENDING.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_plpo INDEX 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_plpo-arbpl IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read work center description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT SINGLE ktext INTO lt_pp04_cache-ktext&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM crtx WHERE objty = lt_plpo-objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid = lt_plpo-objid AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;spras = sy-langu.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;the following read will get the index of the correct record to be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;updated in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MODIFY lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INDEX sy-tabix&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSPORTING arbpl ktext.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*ENDFORM. " read_last_pp04_operation_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_routing&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form read_routing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_mapl occurs 0,&lt;/P&gt;&lt;P&gt;plnnr like mapl-plnnr,&lt;/P&gt;&lt;P&gt;plnal like mapl-plnal,&lt;/P&gt;&lt;P&gt;end of lt_mapl,&lt;/P&gt;&lt;P&gt;l_arbpl like crhd-arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get all the rtg# and grp ctr# from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;select plnnr plnal&lt;/P&gt;&lt;P&gt;into corresponding fields of table lt_mapl&lt;/P&gt;&lt;P&gt;from mapl&lt;/P&gt;&lt;P&gt;where matnr = v_matnr and&lt;/P&gt;&lt;P&gt;werks = itab_xcel-werks and&lt;/P&gt;&lt;P&gt;plnty = v_plnty and "Rate Routing&lt;/P&gt;&lt;P&gt;loekz = space. "with del flag = OFF&lt;/P&gt;&lt;P&gt;sort lt_mapl by plnal.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if not itab_xcel-verid is initial.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the verid=0001 then use the 1st good rtg-grp# and grp-ctr#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-verid = '0001'.&lt;/P&gt;&lt;P&gt;read table lt_mapl index 1.&lt;/P&gt;&lt;P&gt;v_plnnr = lt_mapl-plnnr.&lt;/P&gt;&lt;P&gt;v_plnal = lt_mapl-plnal.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if the verid&amp;lt;&amp;gt;0001 then use the rtg-grp# and grp-ctr# of the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;whose work center on the last PP04 operation matches the given verid&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;loop at lt_mapl.&lt;/P&gt;&lt;P&gt;clear l_arbpl.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get the work center from the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;perform read_wc_on_last_pp04 using lt_mapl-plnnr&lt;/P&gt;&lt;P&gt;lt_mapl-plnal&lt;/P&gt;&lt;P&gt;changing l_arbpl.&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;if itab_xcel-verid = l_arbpl.&lt;/P&gt;&lt;P&gt;v_plnnr = lt_mapl-plnnr.&lt;/P&gt;&lt;P&gt;v_plnal = lt_mapl-plnal.&lt;/P&gt;&lt;P&gt;exit.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;endloop.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;else.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;do nothing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;For version IDs that are other then '0000' or 'ZWIP' :--&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if itab_xcel-verid NE '0000' and&lt;/P&gt;&lt;P&gt;itab_xcel-verid NE 'ZWIP'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;if routing group# or group counter was not determined, make the&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;valid-to date 99/99/9999 so that the BDC, on execution, errors out.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;if v_plnnr is initial or&lt;/P&gt;&lt;P&gt;v_plnal is initial.&lt;/P&gt;&lt;P&gt;itab_xcel-bdatu = '99/99/9999'.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;determine the routing group#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;chk if its in the cache first, if not then get it from MAPL table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;and put it in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF sy-subrc = 0.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;do nothing - lt_pp04_cache header line has rtg#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ELSE.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;get the routing group # from MAPL&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;put it in the cache internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT l_mapl_plnnr IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-matnr = pi_matnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-werks = pi_werks.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-plnnr = l_mapl_plnnr.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;APPEND lt_pp04_cache.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;if the rtg# was determined AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- the work center was not determined yet AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- work center was really needed for this line in the input file&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;then&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- read the work center from last PP04 operation on the routing&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;-- update the cache accordingly&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_pp04_cache-plnnr IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl IS INITIAL AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;( pi_verid IS INITIAL OR&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;pi_mdv01 IS INITIAL ).&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read the last PP04 operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLEAR lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;REFRESH lt_plpo.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INTO CORRESPONDING FIELDS OF TABLE lt_plpo&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM plas AS b&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN plpo AS c&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INNER JOIN crhd AS e&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ON c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WHERE b~plnty = v_plnty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnnr = lt_pp04_cache-plnnr AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;b~plnal = lt_pp04_cache-alnag AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~loekz = space AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;c~steus = v_plpo_steus AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~objty = v_objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~werks = lt_pp04_cache-werks AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;e~verwe = v_verwe.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SORT lt_plpo BY vornr DESCENDING.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_plpo INDEX 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;IF NOT lt_plpo-arbpl IS INITIAL.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;lt_pp04_cache-arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;read work center description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SELECT SINGLE ktext INTO lt_pp04_cache-ktext&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;FROM crtx WHERE objty = lt_plpo-objty AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;objid = lt_plpo-objid AND&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;spras = sy-langu.&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;the following read will get the index of the correct record to be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;updated in the cache&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;READ TABLE lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;WITH KEY matnr = pi_matnr&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;werks = pi_werks&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;alnag = pi_alnag.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;MODIFY lt_pp04_cache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INDEX sy-tabix&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSPORTING arbpl ktext.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform. " read_last_pp04_operation_cache&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*&amp;amp; Form read_wc_on_last_pp04&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;amp;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;form read_wc_on_last_pp04 using pi_plnnr&lt;/P&gt;&lt;P&gt;pi_plnal&lt;/P&gt;&lt;P&gt;changing pe_arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data: begin of lt_plpo occurs 0,&lt;/P&gt;&lt;P&gt;vornr like plpo-vornr,&lt;/P&gt;&lt;P&gt;objty like crhd-objty,&lt;/P&gt;&lt;P&gt;objid like crhd-objid,&lt;/P&gt;&lt;P&gt;arbpl like crhd-arbpl,&lt;/P&gt;&lt;P&gt;end of lt_plpo.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get all the PP04 operations for the given rtg# &amp;amp; grp-ctr#&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;select vornr e&lt;SUB&gt;objty e&lt;/SUB&gt;objid e~arbpl&lt;/P&gt;&lt;P&gt;into corresponding fields of table lt_plpo&lt;/P&gt;&lt;P&gt;from plas as b&lt;/P&gt;&lt;P&gt;inner join plpo as c&lt;/P&gt;&lt;P&gt;on b&lt;SUB&gt;plnty = c&lt;/SUB&gt;plnty and&lt;/P&gt;&lt;P&gt;b&lt;SUB&gt;plnnr = c&lt;/SUB&gt;plnnr and&lt;/P&gt;&lt;P&gt;b&lt;SUB&gt;zaehl = c&lt;/SUB&gt;zaehl&lt;/P&gt;&lt;P&gt;inner join crhd as e&lt;/P&gt;&lt;P&gt;on c&lt;SUB&gt;arbid = e&lt;/SUB&gt;objid&lt;/P&gt;&lt;P&gt;where b~plnty = v_plnty and "Rate Routing&lt;/P&gt;&lt;P&gt;b~plnnr = pi_plnnr and&lt;/P&gt;&lt;P&gt;b~plnal = pi_plnal and&lt;/P&gt;&lt;P&gt;c~loekz = space and "Oper Del Flag = OFF&lt;/P&gt;&lt;P&gt;c~steus = v_plpo_steus and "PP04&lt;/P&gt;&lt;P&gt;e~objty = v_objty. "WC Obj Type = 'A'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;read the last operation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;sort lt_plpo by vornr descending.&lt;/P&gt;&lt;P&gt;read table lt_plpo index 1.&lt;/P&gt;&lt;P&gt;pe_arbpl = lt_plpo-arbpl.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;endform. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Hope this helps, Do reward.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Edited by: Runal Singh on Mar 6, 2008 2:47 PM&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Mar 2008 09:14:52 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467250#M833348</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-03-06T09:14:52Z</dc:date>
    </item>
    <item>
      <title>Re: batch input sessions..........</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467251#M833349</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hii!!! the info u have given is really useful thanx....but if i want to put directly into the database which is know as DI( Direct Input) would it be possible to create the batch input session for the DI input metthod&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Mar 2008 09:16:35 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467251#M833349</guid>
      <dc:creator>former_member259275</dc:creator>
      <dc:date>2008-03-06T09:16:35Z</dc:date>
    </item>
    <item>
      <title>Re: batch input sessions..........</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467252#M833350</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Shoaib, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think thats a confusing stuff you need... Direct Input with Batch???&lt;/P&gt;&lt;P&gt;Direct Input means data will be directly updated in the Database, whereas Batch means you will create a session which can be executed any time.&lt;/P&gt;&lt;P&gt;If you need to create a Batch session and then execute it from the program itself then I have a code which will solve your purpose... Give me your mail ID.. I will send it to you..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Cheers!!&lt;/P&gt;&lt;P&gt;Lokesh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 06 Mar 2008 10:00:34 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/batch-input-sessions/m-p/3467252#M833350</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-03-06T10:00:34Z</dc:date>
    </item>
  </channel>
</rss>

