<?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: BAPI_PBSRVAPS_GETDETAIL2 in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351475#M803927</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Check this code:&lt;/P&gt;&lt;P&gt;&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; Report  ZUSFORECAST&lt;/P&gt;&lt;P&gt;*&amp;amp;&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;REPORT ZPLIUSFCAST MESSAGE-ID zj01&lt;/P&gt;&lt;P&gt;       LINE-SIZE 132.&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM....... ZPLIUSFCAST&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TITLE......... APO Forecast Interface&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AUTHOR........ Aveek Ghose&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DATE WRITTEN.. 15/09/2006&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;R/3 RELEASE... 4.6C&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;COPIED FROM... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DESCRIPTION... This program reads a forecast file from PPC and loads&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               forecast quantities into APO Demand Planning LiveCache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               - Key Figure 'Customer Forecast Units' (Z_CUSFU).&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               Include change request PD7K900203 in initial transport.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM TYPE.. Inbound Interface&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DEV. CLASS.... ZPLN&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;LOGICAL DB.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SCREENS....... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;GUI TITLE..... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;GUI STATUS.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSACTIONS.. N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;USER EXITS.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CHANGE HISTORY                                                       *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Date       By        Correction Number &amp;amp; Brief Description     Release&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;Tables / Structures&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;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*TABLES: zpln_ppc_loc,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       zpln_ppc_mat.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Selection table for BAPI function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_selection TYPE STANDARD TABLE OF bapi10030pbselection,&lt;/P&gt;&lt;P&gt;      g_selection_wa LIKE LINE OF t_selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Key Figure table for BAPI function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_key_figure_selection TYPE STANDARD TABLE OF bapi10030keyfigure,&lt;/P&gt;&lt;P&gt;      g_key_figure_selection_wa LIKE LINE OF t_key_figure_selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Group By table for BAPI function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_group_by TYPE STANDARD TABLE OF bapi10030pbgroupby,&lt;/P&gt;&lt;P&gt;      g_group_by_wa LIKE LINE OF t_group_by.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series table output from BAPI_PBSRVAPS_GETDETAIL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series TYPE STANDARD TABLE OF bapi10030pbtimeserieso,&lt;/P&gt;&lt;P&gt;      g_time_series_wa LIKE LINE OF t_time_series.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series table input to BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series_chg TYPE STANDARD TABLE OF bapi10030pbtimeseries,&lt;/P&gt;&lt;P&gt;      g_time_series_chg_wa LIKE LINE OF t_time_series_chg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Bucket data input to BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series_item TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;                                           bapi10030pbtimeseriesitem,&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa LIKE LINE OF t_time_series_item.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Characteristic Combination table for BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_char_comb TYPE STANDARD TABLE OF bapi10030pbcharacteristics,&lt;/P&gt;&lt;P&gt;      g_char_comb_wa LIKE LINE OF t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Return table from BAPI function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_return TYPE STANDARD TABLE OF bapiret2,&lt;/P&gt;&lt;P&gt;      g_return_wa LIKE LINE OF t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data,&lt;/P&gt;&lt;P&gt;        source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;        lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;        pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;        pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;        site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;        indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;        date         type datum,     "Date&lt;/P&gt;&lt;P&gt;        gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;        ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;        ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;        units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;      END OF ty_forecast_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data1,&lt;/P&gt;&lt;P&gt;       source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;       lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;       pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;       r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;       pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;       site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;       r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;       indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;       date         type datum,     "Date&lt;/P&gt;&lt;P&gt;       gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;       ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;       ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;       units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;       forecast_cv(20) type c,      " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;       calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;       calweek_end like scal-week,       " Calendar Week&lt;/P&gt;&lt;P&gt;       calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;       calweekend_date type scal-date,   " Calendar Week End date&lt;/P&gt;&lt;P&gt;       calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;       calweek_diff(4) type c,      "Week Diff&lt;/P&gt;&lt;P&gt;       startweek like scal-week,&lt;/P&gt;&lt;P&gt;       endweek   like scal-week,&lt;/P&gt;&lt;P&gt;       start_day like scal-date,&lt;/P&gt;&lt;P&gt;       end_day   like scal-date,&lt;/P&gt;&lt;P&gt;       calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;       calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;       delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;      END OF ty_forecast_data1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;      lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;      pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;      r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;      pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;      site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;      r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;      indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;      calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;      calweek_end type scal-week,  " Calendar Week&lt;/P&gt;&lt;P&gt;      endweek   like scal-week,&lt;/P&gt;&lt;P&gt;      forecast_cv(20) type c,         " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;      date         type datum,     "Date&lt;/P&gt;&lt;P&gt;      gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;      ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;      ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;      units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;      calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;      calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;      calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;      calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;      startweek like scal-week,&lt;/P&gt;&lt;P&gt;      start_day like scal-date,&lt;/P&gt;&lt;P&gt;      end_day   like scal-date,&lt;/P&gt;&lt;P&gt;      delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;     END OF ty_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data4,&lt;/P&gt;&lt;P&gt;        r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;        site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;        r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;        indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;        calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;        source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;        lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;        pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;        pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;        calweek_end type scal-week,  " Calendar Week&lt;/P&gt;&lt;P&gt;        endweek   like scal-week,&lt;/P&gt;&lt;P&gt;        forecast_cv(20) type c,         " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;        date         type datum,     "Date&lt;/P&gt;&lt;P&gt;        gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;        ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;        ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;        units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;        calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;        calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;        calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;        calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;        startweek like scal-week,&lt;/P&gt;&lt;P&gt;        start_day like scal-date,&lt;/P&gt;&lt;P&gt;        end_day   like scal-date,&lt;/P&gt;&lt;P&gt;        delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;     END OF ty_forecast_data4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data2 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data3 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data4 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data4 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;           ty_forecast_data initial size 0 with header line,&lt;/P&gt;&lt;P&gt;      t_forecast_data1 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;                     ty_forecast_data1 initial size 0 with header line,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa LIKE LINE OF t_forecast_data1,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa2 LIKE LINE OF t_forecast_data2,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa3 LIKE LINE OF t_forecast_data3,&lt;/P&gt;&lt;P&gt;      l_forecast_data TYPE STANDARD TABLE OF ty_forecast_data1,&lt;/P&gt;&lt;P&gt;      l_forecast_data_wa like line of t_forecast_data1,&lt;/P&gt;&lt;P&gt;      l_forecast_data2 TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      l_forecast_data_wa2 like line of t_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Smaller forecast table to hold data for specific product/plant&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;combination]&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*DATA: t_forecast_sub TYPE STANDARD TABLE OF ty_forecast_data1,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     g_forecast_sub_wa LIKE LINE OF t_forecast_sub.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_sub TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      t_forecast_sub1 TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      g_forecast_sub_wa LIKE LINE OF t_forecast_sub.&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;Error table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF ty_error_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE ty_forecast_data1.&lt;/P&gt;&lt;P&gt;TYPES:   error_type(1)   TYPE c,&lt;/P&gt;&lt;P&gt;       END OF ty_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_error_data TYPE STANDARD TABLE OF ty_error_data,&lt;/P&gt;&lt;P&gt;      g_error_data_wa LIKE LINE OF t_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Structure to hold input file data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF g_input_data1,&lt;/P&gt;&lt;P&gt;        line(255) type c,&lt;/P&gt;&lt;P&gt;       END OF g_input_data1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: g_input_data type standard table of&lt;/P&gt;&lt;P&gt;                  g_input_data1 initial size 0 with header line.&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;Global Variables&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;DATA: g_date_from    TYPE /sapapo/cdps_eval_date_from, " From Date&lt;/P&gt;&lt;P&gt;      g_date_to      TYPE /sapapo/cdps_eval_date_to.   " To Date&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: g_file  LIKE dxfile-filename,   " Filename&lt;/P&gt;&lt;P&gt;      g_material TYPE /sapapo/matnr,  " Material&lt;/P&gt;&lt;P&gt;      g_cnt_input_recs TYPE i,        " Number of file records&lt;/P&gt;&lt;P&gt;      g_cnt_changes    TYPE i,        " Number of changes attempted&lt;/P&gt;&lt;P&gt;      g_cnt_error_recs  TYPE i,       " Number of records with errors&lt;/P&gt;&lt;P&gt;      g_flg_error.                    " Error&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;Objects&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;DATA: i_file        TYPE REF TO zcl_file.&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;Constants&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;CONSTANTS: c_planningbook TYPE /sapapo/pb_mview      " Planning Book&lt;/P&gt;&lt;P&gt;              VALUE 'Z_PPC_FCST_DP',&lt;/P&gt;&lt;P&gt;           c_period_type TYPE /sapapo/cdps_eval_type " Period Type&lt;/P&gt;&lt;P&gt;              VALUE 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CONSTANTS:&lt;/P&gt;&lt;P&gt;     c_version(22) TYPE c            VALUE '000',  " Version&lt;/P&gt;&lt;P&gt;     c_log_type    TYPE c            VALUE 'L',    " Logical Filetype&lt;/P&gt;&lt;P&gt;     c_logqs     TYPE /sapapo/logqs  VALUE 'PSGA', " Business Sys Grp&lt;/P&gt;&lt;P&gt;     c_ppc_mat_error(1)   TYPE c VALUE '1',&lt;/P&gt;&lt;P&gt;                       " PPC Material not found in custom mapping table&lt;/P&gt;&lt;P&gt;     c_ppc_loc_error(1)   TYPE c VALUE '2',&lt;/P&gt;&lt;P&gt;                       " PPC Location not found in custom mapping table&lt;/P&gt;&lt;P&gt;     c_r3_mat_error(1)    TYPE c VALUE '3',&lt;/P&gt;&lt;P&gt;                       " R/3 to APO material mapping error&lt;/P&gt;&lt;P&gt;     c_r3_loc_error(1)    TYPE c VALUE '4',&lt;/P&gt;&lt;P&gt;                       " R/3 to APO location mapping error&lt;/P&gt;&lt;P&gt;     c_pbook_error(1)     TYPE c VALUE '5',&lt;/P&gt;&lt;P&gt;                       " Error getting planning book information&lt;/P&gt;&lt;P&gt;     c_date_error(1)      TYPE c VALUE '6',&lt;/P&gt;&lt;P&gt;                       " Invalid date error&lt;/P&gt;&lt;P&gt;     c_change_error(1)    TYPE c VALUE '7',&lt;/P&gt;&lt;P&gt;                       " Error changing key figure values&lt;/P&gt;&lt;P&gt;     c_per_ind     TYPE /sapapo/perkz  VALUE 'P',    " Period Indicator&lt;/P&gt;&lt;P&gt;     c_fisc_var    TYPE /sapapo/periv  VALUE 'JJ', " Fiscal year variant&lt;/P&gt;&lt;P&gt;     c_separator   TYPE c              VALUE ',',    " Field separator&lt;/P&gt;&lt;P&gt;     c_no_hdr_material(1) TYPE c VALUE '1',&lt;/P&gt;&lt;P&gt;     C_LOCTYPE TYPE /SAPAPO/C_LOCTYPE VALUE '1002'.&lt;/P&gt;&lt;P&gt;" No header material in file record&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;Selection Screen&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;Files to process&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK file WITH FRAME TITLE text-001.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN SKIP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK infile WITH FRAME TITLE text-002.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_login LIKE filename-fileintern OBLIGATORY&lt;/P&gt;&lt;P&gt;                    DEFAULT 'Z_DDS_43525_GPSG_EMEA_DEMAND'.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_phyin LIKE filename-fileextern.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_horz(4) type c default '60'.&lt;/P&gt;&lt;P&gt;PARAMETERS: P_DIST(4) TYPE C default '0200'.&lt;/P&gt;&lt;P&gt;PARAMETERS: P_LOGSYS TYPE EDIPPARNUM  DEFAULT 'PD1120DEV'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK infile.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK file.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;At Selection Screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  PERFORM sub_get_physical_file USING p_login p_phyin.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;At Selection Screen Output&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Make the physical file name display only&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;AT SELECTION-SCREEN OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  LOOP AT SCREEN.&lt;/P&gt;&lt;P&gt;    IF screen-name = 'P_PHYIN'.&lt;/P&gt;&lt;P&gt;      screen-input = 0.&lt;/P&gt;&lt;P&gt;      MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INITIALIZATION.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR: g_return_wa,&lt;/P&gt;&lt;P&gt;         g_selection_wa,&lt;/P&gt;&lt;P&gt;         g_key_figure_selection_wa,&lt;/P&gt;&lt;P&gt;         g_group_by_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_chg_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_item_wa,&lt;/P&gt;&lt;P&gt;         g_char_comb_wa,&lt;/P&gt;&lt;P&gt;         g_forecast_data_wa,&lt;/P&gt;&lt;P&gt;         g_forecast_sub_wa,&lt;/P&gt;&lt;P&gt;         g_error_data_wa,&lt;/P&gt;&lt;P&gt;         g_input_data,&lt;/P&gt;&lt;P&gt;         g_date_from,&lt;/P&gt;&lt;P&gt;         g_date_to,&lt;/P&gt;&lt;P&gt;         g_cnt_input_recs,&lt;/P&gt;&lt;P&gt;         g_cnt_changes,&lt;/P&gt;&lt;P&gt;         g_cnt_error_recs,&lt;/P&gt;&lt;P&gt;         g_flg_error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_selection,&lt;/P&gt;&lt;P&gt;           t_key_figure_selection,&lt;/P&gt;&lt;P&gt;           t_group_by,&lt;/P&gt;&lt;P&gt;           t_time_series,&lt;/P&gt;&lt;P&gt;           t_time_series_chg,&lt;/P&gt;&lt;P&gt;           t_time_series_item,&lt;/P&gt;&lt;P&gt;           t_char_comb,&lt;/P&gt;&lt;P&gt;           t_forecast_data,&lt;/P&gt;&lt;P&gt;           t_forecast_sub,&lt;/P&gt;&lt;P&gt;           t_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  PERFORM sub_get_physical_file USING p_login p_phyin.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Start-Of-Selection&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;START-OF-SELECTION.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read input file into internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_read_file.&lt;/P&gt;&lt;P&gt;  PERFORM validate_locmap.&lt;/P&gt;&lt;P&gt;  IF NOT t_forecast_data[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Map data to format for processing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM sub_map_data.&lt;/P&gt;&lt;P&gt;    IF NOT t_forecast_data2[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Process valid data records&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM sub_process_data.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display program results&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_display_results.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  sub_display_results&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Write results to spool&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 sub_display_results.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Program Results&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;P&gt;  WRITE: / text-025.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;File locations&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Input File&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;P&gt;  WRITE: / text-026,&lt;/P&gt;&lt;P&gt;        15 p_phyin.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Record Counts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records in input file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-027,&lt;/P&gt;&lt;P&gt;        48 g_cnt_input_recs.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records with errors&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-028,&lt;/P&gt;&lt;P&gt;        48 g_cnt_error_recs.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records successfully updated in planning book&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-029,&lt;/P&gt;&lt;P&gt;        48 g_cnt_changes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;  IF NOT t_error_data[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Error Details:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SKIP.&lt;/P&gt;&lt;P&gt;    WRITE: / text-024.&lt;/P&gt;&lt;P&gt;    SKIP.&lt;/P&gt;&lt;P&gt;    WRITE: / text-006,&lt;/P&gt;&lt;P&gt;          13 text-007,&lt;/P&gt;&lt;P&gt;          29 text-008,&lt;/P&gt;&lt;P&gt;          41 text-009,&lt;/P&gt;&lt;P&gt;          61 text-010.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    WRITE: / text-011 UNDER text-006,&lt;/P&gt;&lt;P&gt;             text-012 UNDER text-007,&lt;/P&gt;&lt;P&gt;             text-013 UNDER text-008,&lt;/P&gt;&lt;P&gt;             text-014 UNDER text-009,&lt;/P&gt;&lt;P&gt;             text-015 UNDER text-010.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    SORT T_ERROR_DATA BY pres_code&lt;/P&gt;&lt;P&gt;                         site&lt;/P&gt;&lt;P&gt;                         date&lt;/P&gt;&lt;P&gt;                         forecast_cv.&lt;/P&gt;&lt;P&gt;    Delete adjacent duplicates from t_error_data comparing pres_code&lt;/P&gt;&lt;P&gt;                                                           site&lt;/P&gt;&lt;P&gt;                                                           date&lt;/P&gt;&lt;P&gt;                                                           forecast_cv.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT t_error_data INTO g_error_data_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      WRITE: / g_error_data_wa-pres_code UNDER text-006,&lt;/P&gt;&lt;P&gt;               g_error_data_wa-site     UNDER text-007,&lt;/P&gt;&lt;P&gt;               g_error_data_wa-date     UNDER text-008,&lt;/P&gt;&lt;P&gt;            48 g_error_data_wa-forecast_cv RIGHT-JUSTIFIED.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      CASE g_error_data_wa-error_type.&lt;/P&gt;&lt;P&gt;        WHEN c_ppc_mat_error.&lt;/P&gt;&lt;P&gt;          WRITE text-031 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_r3_mat_error.&lt;/P&gt;&lt;P&gt;          WRITE text-019 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_r3_loc_error.&lt;/P&gt;&lt;P&gt;          WRITE text-020 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_pbook_error.&lt;/P&gt;&lt;P&gt;          WRITE text-021 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_date_error.&lt;/P&gt;&lt;P&gt;          WRITE text-022 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_change_error.&lt;/P&gt;&lt;P&gt;          WRITE text-023 UNDER text-010.&lt;/P&gt;&lt;P&gt;      ENDCASE.&lt;/P&gt;&lt;P&gt;      CLEAR: g_error_data_wa.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-batch IS INITIAL.&lt;/P&gt;&lt;P&gt;      MESSAGE i000 WITH text-030.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     MESSAGE e000 WITH text-030.                          "TPR1336-&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      MESSAGE i000 WITH text-030.                           "TPR1336+&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_display_results&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  sub_map_data&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Map PPC codes to SAP codes and convert input values&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 sub_map_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_forecast(6) type c,&lt;/P&gt;&lt;P&gt;        l_uom         TYPE i.&lt;/P&gt;&lt;P&gt;  DATA:&lt;/P&gt;&lt;P&gt;  l_sold_num(10) TYPE n,            " Sold To Quantity (numerical char.)&lt;/P&gt;&lt;P&gt;  l_sold(7)      TYPE p DECIMALS 3, " Sold To Quantity (Packed, 3 dec.)&lt;/P&gt;&lt;P&gt;  l_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  l_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  l_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  l_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  l_fiscper(7)   TYPE c.            " Fiscal Period&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_temp_wa LIKE g_forecast_data_wa2,&lt;/P&gt;&lt;P&gt;        l_hold_wa LIKE g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data2 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data3 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data4 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data type ty_forecast_data2.&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data1 type ty_forecast_data1.&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data2 type ty_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Local variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: l_curr_date    TYPE sydatum,  " Program Run Date&lt;/P&gt;&lt;P&gt;        l_record_date  TYPE sydatum,  " Formatted Record Date&lt;/P&gt;&lt;P&gt;        l_curr_year(2) TYPE c,        " Program Year (without century)&lt;/P&gt;&lt;P&gt;        l_curr_year_num TYPE i,       " Integer value of Program Year&lt;/P&gt;&lt;P&gt;        l_century(2)     TYPE c,      " Program Century (without year)&lt;/P&gt;&lt;P&gt;        l_century_num    TYPE i,      " Integer value of Century&lt;/P&gt;&lt;P&gt;        l_input_year_num TYPE i.      " Integer value of Record Year&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Record date - format MM/DD/YY&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: BEGIN OF l_input_date,&lt;/P&gt;&lt;P&gt;          month(2)  TYPE c,&lt;/P&gt;&lt;P&gt;          filler1(1) TYPE c,&lt;/P&gt;&lt;P&gt;          day(2)     TYPE c,&lt;/P&gt;&lt;P&gt;          filler2(1) TYPE c,&lt;/P&gt;&lt;P&gt;          year(2)    TYPE c,&lt;/P&gt;&lt;P&gt;        END OF l_input_date.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS:&lt;/P&gt;&lt;P&gt;    &amp;lt;L_WA_FORECAST&amp;gt;     TYPE ty_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: LV_FORECAST_CV type f.&lt;/P&gt;&lt;P&gt;  CLEAR: lv_forecast_cv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_first_day LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        l_last_day  LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: l_first_day1 LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        l_last_day1  LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: l_start_week LIKE SCAL-WEEK,&lt;/P&gt;&lt;P&gt;        l_end_week   LIKE SCAL-WEEK.&lt;/P&gt;&lt;P&gt;  DATA: l_start_week1 LIKE SCAL-WEEK,&lt;/P&gt;&lt;P&gt;        l_end_week1   LIKE SCAL-WEEK.&lt;/P&gt;&lt;P&gt;  DATA: lv_sap_code(50) type c.&lt;/P&gt;&lt;P&gt;  DATA: RETURN TYPE BAPIRET2.&lt;/P&gt;&lt;P&gt;  DATA: l_date_tabix like sy-tabix.&lt;/P&gt;&lt;P&gt;  DATA: L_TABIX TYPE SY-TABIX.&lt;/P&gt;&lt;P&gt;  DATA: l_start_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_end_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_calyear_diff(4) type c,&lt;/P&gt;&lt;P&gt;        l_calyear_data_start(4) type c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  LOOP AT T_FORECAST_DATA.&lt;/P&gt;&lt;P&gt;    MOVE-CORRESPONDING T_FORECAST_DATA TO T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    APPEND T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    CLEAR: T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&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;Loop through internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_data1 INTO g_forecast_data_wa.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Map Material code to SAP product and conversion factor using&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;cross-reference table; if not found, delete record and store&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;error.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CLEAR: LV_SAP_CODE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'Z_XREF_LOOKUP' DESTINATION P_LOGSYS&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        TRANSID  = 'ZELCUSMATLOOKUP'&lt;/P&gt;&lt;P&gt;        INVALUE  = g_forecast_data_wa-pres_code&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        OUTVALUE = lv_sap_code&lt;/P&gt;&lt;P&gt;        RETURN   = RETURN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&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;P&gt;    IF NOT LV_SAP_CODE IS INITIAL. "RETURN IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert SAP Material Code to APO Material Number; if not found,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;delete record and store error&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT SINGLE matnr FROM /sapapo/matmap&lt;/P&gt;&lt;P&gt;        INTO g_forecast_data_wa-r3_material&lt;/P&gt;&lt;P&gt;        WHERE ext_matnr = lv_sap_code&lt;/P&gt;&lt;P&gt;        AND logqs     = c_logqs.&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;        g_error_data_wa-error_type = c_r3_mat_error.&lt;/P&gt;&lt;P&gt;        APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;        CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;        DELETE t_forecast_data1.&lt;/P&gt;&lt;P&gt;        CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;        ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;        CONTINUE.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    l_uom = 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Store material in error table; delete current record of data&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;table; continue&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_ppc_mat_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_data1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Convert Forecast Quantity using conversion factor&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;    l_forecast = g_forecast_data_wa-units.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-forecast_cv = g_forecast_data_wa-units.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;    CLEAR:   l_calweek,&lt;/P&gt;&lt;P&gt;             l_calweek_end,&lt;/P&gt;&lt;P&gt;             l_calweekend_date,&lt;/P&gt;&lt;P&gt;             l_calweek_diff,&lt;/P&gt;&lt;P&gt;             l_fiscper,&lt;/P&gt;&lt;P&gt;             l_calmonth,&lt;/P&gt;&lt;P&gt;             l_calyear_start,&lt;/P&gt;&lt;P&gt;             l_calyear_end,&lt;/P&gt;&lt;P&gt;             l_start_week,&lt;/P&gt;&lt;P&gt;             l_first_day,&lt;/P&gt;&lt;P&gt;             l_end_week,&lt;/P&gt;&lt;P&gt;             l_last_day.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*Convert Monday Date to Calendar Week and Fiscal Period&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    PERFORM sub_format_dates USING g_forecast_data_wa-gi_date&lt;/P&gt;&lt;P&gt;                                  l_calweek&lt;/P&gt;&lt;P&gt;                                  l_calweek_end&lt;/P&gt;&lt;P&gt;                                  l_calweekend_date&lt;/P&gt;&lt;P&gt;                                  l_calweek_diff&lt;/P&gt;&lt;P&gt;                                  l_fiscper&lt;/P&gt;&lt;P&gt;                                  l_calmonth&lt;/P&gt;&lt;P&gt;                                  l_calyear_start&lt;/P&gt;&lt;P&gt;                                  l_calyear_end&lt;/P&gt;&lt;P&gt;                                  l_start_week&lt;/P&gt;&lt;P&gt;                                  l_first_day&lt;/P&gt;&lt;P&gt;                                  l_end_week&lt;/P&gt;&lt;P&gt;                                  l_last_day.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calweek          = l_calweek.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calweek_end      = l_calweek_end.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calmonth         = l_calmonth.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calyear_start    = l_calyear_start.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calyear_end      = l_calyear_end.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-startweek        = l_start_week.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-endweek          = l_end_week.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-start_day        = l_first_day.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-end_day          = l_last_day.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Modify table record&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    MODIFY t_forecast_data1 FROM g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;    CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;  LOOP AT T_FORECAST_DATA1 INTO L_WA_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-source_code =&lt;/P&gt;&lt;P&gt;         L_WA_FORECAST_DATA1-source_code.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-lang_group =&lt;/P&gt;&lt;P&gt;         L_WA_FORECAST_DATA1-lang_group.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-pres_code = L_WA_FORECAST_DATA1-pres_code.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-r3_material = L_WA_FORECAST_DATA1-r3_material.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-pres_name = L_WA_FORECAST_DATA1-pres_name.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-site    =  L_WA_FORECAST_DATA1-site.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-r3_loc  = L_WA_FORECAST_DATA1-r3_loc.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-indication = L_WA_FORECAST_DATA1-indication.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-date =  L_WA_FORECAST_DATA1-date.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-gi_date = L_WA_FORECAST_DATA1-gi_date.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-ord_number = L_WA_FORECAST_DATA1-ord_number.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-ord_line =  L_WA_FORECAST_DATA1-ord_line.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-units = L_WA_FORECAST_DATA1-units.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-forecast_cv = L_WA_FORECAST_DATA1-forecast_cv.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calweek = L_WA_FORECAST_DATA1-calweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calweek_end =  L_WA_FORECAST_DATA1-calweek_end.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-startweek =  L_WA_FORECAST_DATA1-startweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-endweek   = L_WA_FORECAST_DATA1-endweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-start_day = L_WA_FORECAST_DATA1-start_day.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-end_day   = L_WA_FORECAST_DATA1-end_day.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calyear_start =&lt;/P&gt;&lt;P&gt;                    L_WA_FORECAST_DATA1-calyear_start.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calyear_end  = L_WA_FORECAST_DATA1-calyear_end.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-delete = L_WA_FORECAST_DATA1-delete.&lt;/P&gt;&lt;P&gt;    APPEND l_wa_forecast_data2 TO t_forecast_data2.&lt;/P&gt;&lt;P&gt;    CLEAR: l_wa_forecast_data1.&lt;/P&gt;&lt;P&gt;    Clear: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  SORT T_FORECAST_DATA2 BY&lt;/P&gt;&lt;P&gt;        source_code&lt;/P&gt;&lt;P&gt;        lang_group&lt;/P&gt;&lt;P&gt;        pres_code&lt;/P&gt;&lt;P&gt;        r3_material&lt;/P&gt;&lt;P&gt;        pres_name&lt;/P&gt;&lt;P&gt;        site&lt;/P&gt;&lt;P&gt;        r3_loc&lt;/P&gt;&lt;P&gt;        indication&lt;/P&gt;&lt;P&gt;        calweek&lt;/P&gt;&lt;P&gt;        endweek&lt;/P&gt;&lt;P&gt;        calmonth&lt;/P&gt;&lt;P&gt;        calyear_start&lt;/P&gt;&lt;P&gt;        calyear_end&lt;/P&gt;&lt;P&gt;        calweek_end&lt;/P&gt;&lt;P&gt;        startweek&lt;/P&gt;&lt;P&gt;        start_day&lt;/P&gt;&lt;P&gt;        end_day&lt;/P&gt;&lt;P&gt;        delete.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;  clear: lv_forecast_cv.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;collecting the product Variant.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;  lt_forecast_data2[] = t_forecast_data2[].&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation for JOR and NOR.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  delete lt_forecast_data2 where indication &amp;lt;&amp;gt; 'JOR'&lt;/P&gt;&lt;P&gt;                             and indication &amp;lt;&amp;gt; 'NOR'.&lt;/P&gt;&lt;P&gt;  IF NOT lt_forecast_data2[] is initial.&lt;/P&gt;&lt;P&gt;    LOOP AT lt_forecast_data2 ASSIGNING &amp;lt;L_WA_FORECAST&amp;gt;.&lt;/P&gt;&lt;P&gt;      LV_FORECAST_CV = LV_FORECAST_CV + &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv.&lt;/P&gt;&lt;P&gt;      &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = 'X'.&lt;/P&gt;&lt;P&gt;      AT END OF CALWEEK.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = ' '.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv = lv_forecast_cv.&lt;/P&gt;&lt;P&gt;        CLEAR lv_forecast_cv.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  DELETE lt_forecast_data2 WHERE delete = 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation where Indication ne JOR and NOR.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  lt_forecast_data3[] = t_forecast_data2[].&lt;/P&gt;&lt;P&gt;  loop at lt_forecast_data3.&lt;/P&gt;&lt;P&gt;    if lt_forecast_data3-indication = 'JOR'&lt;/P&gt;&lt;P&gt;    or lt_forecast_data3-indication = 'NOR'.&lt;/P&gt;&lt;P&gt;      delete lt_forecast_data3.&lt;/P&gt;&lt;P&gt;    else.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;*if lt_forecast_data3-calweek &amp;gt; lt_forecast_data3-calweek_end.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;***MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     if lt_forecast_data3-calweek &amp;gt; lt_forecast_data3-endweek.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       delete lt_forecast_data3.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     else.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       append lt_forecast_data3 to lt_forecast_data4.&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;***MOD-011&lt;/P&gt;&lt;P&gt;      append lt_forecast_data3 to lt_forecast_data4.&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     endif.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    endif.&lt;/P&gt;&lt;P&gt;  endloop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation beyond the horizon for all indication.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT lt_forecast_data3[] is initial.&lt;/P&gt;&lt;P&gt;    LOOP AT lt_forecast_data3 ASSIGNING &amp;lt;L_WA_FORECAST&amp;gt;.&lt;/P&gt;&lt;P&gt;      LV_FORECAST_CV = LV_FORECAST_CV + &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv.&lt;/P&gt;&lt;P&gt;      &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = 'X'.&lt;/P&gt;&lt;P&gt;      AT END OF CALWEEK.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = ' '.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv = lv_forecast_cv.&lt;/P&gt;&lt;P&gt;        CLEAR lv_forecast_cv.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  DELETE lt_forecast_data3 WHERE delete = 'X'.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data3 to lt_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;  Refresh: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data2 to t_forecast_data2.&lt;/P&gt;&lt;P&gt;  SORT T_FORECAST_DATA2 BY&lt;/P&gt;&lt;P&gt;        source_code&lt;/P&gt;&lt;P&gt;        lang_group&lt;/P&gt;&lt;P&gt;        pres_code&lt;/P&gt;&lt;P&gt;        r3_material&lt;/P&gt;&lt;P&gt;        pres_name&lt;/P&gt;&lt;P&gt;        site&lt;/P&gt;&lt;P&gt;        r3_loc&lt;/P&gt;&lt;P&gt;        indication&lt;/P&gt;&lt;P&gt;        calweek&lt;/P&gt;&lt;P&gt;        endweek&lt;/P&gt;&lt;P&gt;        calweek_end&lt;/P&gt;&lt;P&gt;        startweek&lt;/P&gt;&lt;P&gt;        start_day&lt;/P&gt;&lt;P&gt;        end_day&lt;/P&gt;&lt;P&gt;        calyear_start&lt;/P&gt;&lt;P&gt;        calyear_end&lt;/P&gt;&lt;P&gt;        delete.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lt_forecast_data2[] = t_forecast_data2[].&lt;/P&gt;&lt;P&gt;  READ TABLE lt_FORECAST_DATA2 INDEX 1.&lt;/P&gt;&lt;P&gt;  l_start_year = lt_forecast_data2-calyear_start.&lt;/P&gt;&lt;P&gt;  DESCRIBE TABLE lt_forecast_data2 lines l_tabix.&lt;/P&gt;&lt;P&gt;  READ TABLE lt_forecast_data2 index l_tabix.&lt;/P&gt;&lt;P&gt;  l_end_year = lt_forecast_data2-calyear_end.&lt;/P&gt;&lt;P&gt;  loop at lt_forecast_data2.&lt;/P&gt;&lt;P&gt;    if sy-tabix = 1.&lt;/P&gt;&lt;P&gt;      l_calyear_data_start = ( lt_forecast_data2-calyear_start + 2 ).&lt;/P&gt;&lt;P&gt;    endif.&lt;/P&gt;&lt;P&gt;    exit.&lt;/P&gt;&lt;P&gt;  endloop.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  delete lt_forecast_data2 where&lt;/P&gt;&lt;P&gt;          calyear_start &amp;gt; l_calyear_data_start.           "#EC PORTABLE&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  delete lt_forecast_data2 where gi_date &amp;lt; sy-datum.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  Refresh: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data2 to t_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_map_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;**&amp;amp;      Form  sub_process_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;      Loop through data records, separate into product/location&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;      sub-groups, and process&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;FORM sub_process_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_temp_wa LIKE g_forecast_data_wa2,&lt;/P&gt;&lt;P&gt;        l_hold_wa LIKE g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR l_hold_wa.&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;  SORT t_forecast_data2 BY r3_material&lt;/P&gt;&lt;P&gt;                           r3_loc&lt;/P&gt;&lt;P&gt;                           date&lt;/P&gt;&lt;P&gt;                           calweek ASCENDING.&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Loop through internal table, collecting sub-table for each&lt;/P&gt;&lt;/LI&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;material/plant&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_data2 INTO g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;    l_temp_wa = g_forecast_data_wa2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Initial Loop Pass -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Save hold variables during first loop pass&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    AT FIRST.&lt;/P&gt;&lt;P&gt;      l_hold_wa = l_temp_wa.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Normal Loop Processing -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  If control break occurs:&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (1) process existing sub-table for&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                               material plant combination;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (2) clear sub-table;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (3) set new hold values;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (4) append current work area to sub-table.&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;  Otherwise, append current work area to sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF ( l_hold_wa-r3_material &amp;lt;&amp;gt; g_forecast_data_wa2-r3_material ) OR&lt;/P&gt;&lt;P&gt;       ( l_hold_wa-r3_loc &amp;lt;&amp;gt; g_forecast_data_wa2-r3_loc ) OR&lt;/P&gt;&lt;P&gt;       ( l_hold_wa-calweek &amp;lt;&amp;gt; g_forecast_data_wa2-calweek ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Process sub-table; clear sub-table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set new hold values; append sub-table.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      l_hold_wa = l_temp_wa.&lt;/P&gt;&lt;P&gt;      APPEND g_forecast_data_wa2 TO t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;      PERFORM sub_call_bapi.&lt;/P&gt;&lt;P&gt;      REFRESH t_forecast_sub.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Append sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      APPEND g_forecast_data_wa2 TO t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Final Loop Pass -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Process existing sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    AT LAST.&lt;/P&gt;&lt;P&gt;      PERFORM sub_call_bapi.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_process_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  sub_read_file&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Read interface file&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 sub_read_file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Get Physical Filename&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF p_phyin IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM sub_get_physical_file USING p_login p_phyin.&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;Open a file object based on the selection screen information.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_file = p_login.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CREATE OBJECT i_file EXPORTING u_f_filename = g_file&lt;/P&gt;&lt;P&gt;                                 u_f_filetype = c_log_type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Check authority for reading the interface file.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;check_read_authority.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Attempt to open file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;open_for_input.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read file into data record and append to internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_read_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close file.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;close.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_read_file&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  sub_get_physical_file&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Determine Physical filename from Logical Filename&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;     --&amp;gt;P_LFILE  Logical Filename&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_PFILE  Physical Filename&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 sub_get_physical_file USING    p_lfile&lt;/P&gt;&lt;P&gt;                                    p_pfile.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CHECK NOT p_lfile IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'FILE_GET_NAME'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      client           = sy-mandt&lt;/P&gt;&lt;P&gt;      logical_filename = p_lfile&lt;/P&gt;&lt;P&gt;      operating_system = sy-opsys&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      file_name        = p_pfile&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      file_not_found   = 1&lt;/P&gt;&lt;P&gt;      OTHERS           = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc NE 0.&lt;/P&gt;&lt;P&gt;    p_pfile = '' .&lt;/P&gt;&lt;P&gt;    MESSAGE e002 WITH p_lfile.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_get_physical_file&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  sub_read_data&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;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;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM sub_read_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: DELIMETER(2) TYPE C VALUE ';'.&lt;/P&gt;&lt;P&gt;  DATA: L_WA_INPUT_DATA TYPE G_INPUT_DATA1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DO.&lt;/P&gt;&lt;P&gt;    READ DATASET i_file-&amp;gt;phys_filename INTO g_input_data.&lt;/P&gt;&lt;P&gt;    IF sy-subrc NE 0.&lt;/P&gt;&lt;P&gt;      IF g_cnt_input_recs = 0.&lt;/P&gt;&lt;P&gt;        MESSAGE s000 WITH Text-004 i_file-&amp;gt;phys_filename&lt;/P&gt;&lt;P&gt;                          Text-005.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       MESSAGE s000 WITH 'Input file' i_file-&amp;gt;phys_filename&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                         'is empty'.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        g_flg_error = 'Y'.&lt;/P&gt;&lt;P&gt;        STOP.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;      EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      APPEND g_input_data.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_input_recs.&lt;/P&gt;&lt;P&gt;      CLEAR: g_input_data,&lt;/P&gt;&lt;P&gt;             g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-002&lt;/P&gt;&lt;P&gt;  LOOP AT  g_input_data.&lt;/P&gt;&lt;P&gt;    t_forecast_data-source_code = g_input_data-line+0(4).&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-source_code  FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-source_code+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-lang_group = g_input_data-line+6(24).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-lang_group.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-lang_group FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-lang_group+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-pres_code = g_input_data-line+30(9).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-pres_code.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-pres_code FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-pres_code+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-pres_name = g_input_data-line+39(38).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-pres_name.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-pres_name FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-pres_name+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-site = p_dist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-indication = g_input_data-line+77(6).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-indication.&lt;/P&gt;&lt;P&gt;    SEARCH t_forecast_data-indication FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-indication+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-date = g_input_data-line+83(11).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-date.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-date FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-date+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-gi_date = g_input_data-line+94(12).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-gi_date.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-gi_date FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-gi_date+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-ord_number = g_input_data-line+106(10).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-ord_number.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-ord_number FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-ord_number+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-ord_line = g_input_data-line+116(8).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-ord_line.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-ord_line FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-ord_line+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-units = g_input_data-line+124(28).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-units.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-units FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-units+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    APPEND t_forecast_data.&lt;/P&gt;&lt;P&gt;    CLEAR t_forecast_data.&lt;/P&gt;&lt;P&gt;    CLEAR: g_input_data,&lt;/P&gt;&lt;P&gt;           g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-002&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_read_data&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  sub_call_bapi&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Read values of sub-table and update the Customer Forecast&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      key figure in the correct time buckets&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 sub_call_bapi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_date         TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_start_date   TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_end_date     TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_period_start TYPE bapi10030pbperiodstart,&lt;/P&gt;&lt;P&gt;        l_period_end   TYPE bapi10030pbperiodend,&lt;/P&gt;&lt;P&gt;        l_matnr        TYPE /sapapo/matnr,&lt;/P&gt;&lt;P&gt;        l_locno        TYPE /sapapo/locno,&lt;/P&gt;&lt;P&gt;        l_lines        TYPE i.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA:&lt;/P&gt;&lt;P&gt;  l_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  l_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  l_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  p_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  p_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  p_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  p_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_calweek_start type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_start_week_day type SCDATUM,    " Date&lt;/P&gt;&lt;P&gt;  l_record_date type sy-datum,      " Date&lt;/P&gt;&lt;P&gt;  lv_year_start type CYEAR,         " Year&lt;/P&gt;&lt;P&gt;  lv_week_start type scal-week,     " Week&lt;/P&gt;&lt;P&gt;  lv_week_end   type scal-week.     " Week&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA: l_time_series_id TYPE /sapapo/mxrow.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA: t_periotab type /SAPAPO/PERIOTAB OCCURS 0 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: g_periotab_wa type /SAPAPO/PERIOTAB.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_selection,&lt;/P&gt;&lt;P&gt;           t_group_by,&lt;/P&gt;&lt;P&gt;           t_key_figure_selection,&lt;/P&gt;&lt;P&gt;           t_time_series,&lt;/P&gt;&lt;P&gt;           t_time_series_chg,&lt;/P&gt;&lt;P&gt;           t_time_series_item,&lt;/P&gt;&lt;P&gt;           t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  READ TABLE t_forecast_sub INDEX 1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  l_matnr = g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;  l_locno = g_forecast_sub_wa-r3_loc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**********************************************************&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Fill parameters/tables for BAPI_PBSRVAPS_GETDETAIL ***&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**********************************************************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Date Parameters&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_date_from = g_forecast_sub_wa-date.&lt;/P&gt;&lt;P&gt;  g_date_to   = g_forecast_sub_wa-gi_date.&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Selection table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_selection_wa-characteristic_name = '9AVERSION'. " Version&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = c_version.              " Default '000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Begin of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_selection_wa-characteristic_name = 'ZMATNR'.   " APO-DP Product&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;End of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = l_matnr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  g_selection_wa-characteristic_name = 'ZDCENTER'.   " Location&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = P_DIST.&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;*MOD-006&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;Group By Table&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Begin of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_group_by_wa-characteristic_name = 'ZMATNR'.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;End of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  APPEND g_group_by_wa TO t_group_by.&lt;/P&gt;&lt;P&gt;  CLEAR g_group_by_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Key Figure Table - Customer Forecast in Units&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_key_figure_selection_wa-key_figure = 'Z_CUSFU'.&lt;/P&gt;&lt;P&gt;  APPEND g_key_figure_selection_wa TO t_key_figure_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_key_figure_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call FM to get time series number&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_GETDETAIL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                      = c_planningbook&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    SELECTION_ID                      =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      period_type                       = c_period_type&lt;/P&gt;&lt;P&gt;      date_from                         = g_date_from&lt;/P&gt;&lt;P&gt;      date_to                           = g_date_to&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                         = t_selection&lt;/P&gt;&lt;P&gt;      group_by                          = t_group_by&lt;/P&gt;&lt;P&gt;      key_figure_selection              = t_key_figure_selection&lt;/P&gt;&lt;P&gt;      time_series                       = t_time_series&lt;/P&gt;&lt;P&gt;      return                            = t_return.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT t_forecast_sub INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_pbook_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;    EXIT.&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;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Fill parameters/tables for BAPI_PBSRVAPS_CHANGEKEYFIGVAL ***&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;Time Series table (containing time series ID)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  READ TABLE t_time_series INDEX 1 INTO g_time_series_wa.&lt;/P&gt;&lt;P&gt;  MOVE-CORRESPONDING g_time_series_wa TO g_time_series_chg_wa.&lt;/P&gt;&lt;P&gt;  APPEND g_time_series_chg_wa TO t_time_series_chg.&lt;/P&gt;&lt;P&gt;  l_time_series_id = g_time_series_wa-time_series_id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR g_time_series_chg_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  T_FORECAST_SUB1[] = T_FORECAST_SUB[].&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series Item table (contains all values to be loaded)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_sub INTO g_forecast_sub_wa.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series ID&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_id    = l_time_series_id.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Check date validity&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date                      = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        plausibility_check_failed = 1&lt;/P&gt;&lt;P&gt;        OTHERS                    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_date_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&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;Get Date Range for given date&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/MC_DATE_GET_FIRST_LAST'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;       i_date            = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;       i_perkz           = 'W'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_FABKL           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_PERIV           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        i_firstdate       = l_start_date&lt;/P&gt;&lt;P&gt;        i_lastdate        = l_end_date&lt;/P&gt;&lt;P&gt;              .&lt;/P&gt;&lt;P&gt;**********&lt;/P&gt;&lt;P&gt;*MOD-011&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;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   CONVERT DATE l_start_date INTO TIME STAMP l_period_start&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                TIME ZONE 'UTC   '.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   g_time_series_item_wa-period_begin      = l_period_start.&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;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   CONVERT DATE l_end_date TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                TIME ZONE 'UTC   '.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*MOD-011&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 for forecast run date.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    l_record_date = sy-datum.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date         = l_record_date&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        week         = l_calweek&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        date_invalid = 1&lt;/P&gt;&lt;P&gt;        OTHERS       = 2.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;      EXIT.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;      p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;    lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;    lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;    concatenate  lv_year_start lv_week_end+4(2) into p_calweek_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        WEEK         = p_calweek_start&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        DATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;        OTHERS       = 2.&lt;/P&gt;&lt;P&gt;    IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/SDP_TB_GET_PERIOTAB'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        I_TBID              = '104  WEEKS'&lt;/P&gt;&lt;P&gt;        I_DIRECTION         = '+'&lt;/P&gt;&lt;P&gt;        I_STARTDATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;        I_OFFSET_IN_DAYS    = '0'&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        E_PERIOTAB          = t_periotab&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        TB_NOT_EXISTS       = 1&lt;/P&gt;&lt;P&gt;        NO_TB_DEFINED       = 2&lt;/P&gt;&lt;P&gt;        WRONG_TB_DEFINITION = 3&lt;/P&gt;&lt;P&gt;        OTHERS              = 4.&lt;/P&gt;&lt;P&gt;    IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT T_PERIOTAB INTO G_PERIOTAB_WA.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;      CONVERT DATE G_PERIOTAB_WA-ertag&lt;/P&gt;&lt;P&gt;          INTO TIME STAMP l_period_start&lt;/P&gt;&lt;P&gt;                   TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-period_begin      = l_period_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      CONVERT DATE G_PERIOTAB_WA-bistag&lt;/P&gt;&lt;P&gt;          TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;P&gt;                                   TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Forecast Value&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      g_time_series_item_wa-time_series_value = 0.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-time_series_id    = l_time_series_id.&lt;/P&gt;&lt;P&gt;      APPEND g_time_series_item_wa TO t_time_series_item.&lt;/P&gt;&lt;P&gt;      CLEAR g_time_series_item_wa.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  SORT t_time_series_item  by TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;                              period_begin&lt;/P&gt;&lt;P&gt;                              period_end.&lt;/P&gt;&lt;P&gt;  delete adjacent duplicates from t_time_series_item&lt;/P&gt;&lt;P&gt;           comparing&lt;/P&gt;&lt;P&gt;           TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;           PERIOD_BEGIN&lt;/P&gt;&lt;P&gt;           PERIOD_END.&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*Delete the first and the last record from the time series table.&lt;/P&gt;&lt;P&gt;  data: l_tabix type sy-tabix.&lt;/P&gt;&lt;P&gt;  DESCRIBE TABLE t_time_series_item lines l_tabix.&lt;/P&gt;&lt;P&gt;  if l_tabix ne 0.&lt;/P&gt;&lt;P&gt;    delete t_time_series_item index l_tabix.&lt;/P&gt;&lt;P&gt;    delete t_time_series_item index 1.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;if  g_material ne g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Refresh the Planning Book&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_CHANGEKEYFIGVAL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                = c_planningbook&lt;/P&gt;&lt;P&gt;      commit_control              = 'E'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                   = t_selection&lt;/P&gt;&lt;P&gt;      time_series                 = t_time_series_chg&lt;/P&gt;&lt;P&gt;      time_series_item            = t_time_series_item&lt;/P&gt;&lt;P&gt;      characteristics_combination = t_char_comb&lt;/P&gt;&lt;P&gt;      return                      = t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If error in return table, store message in error table and attempt&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;rollback; otherwise commit&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  g_material = g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  Refresh: t_time_series_item.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**************&lt;/P&gt;&lt;P&gt;***MOD-011&lt;/P&gt;&lt;P&gt;**************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series Item table (contains all values to be loaded)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_sub1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series ID&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_id    = l_time_series_id.&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;Check date validity&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date                      = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        plausibility_check_failed = 1&lt;/P&gt;&lt;P&gt;        OTHERS                    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_date_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&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;Get Date Range for given date&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/MC_DATE_GET_FIRST_LAST'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;       i_date            = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;       i_perkz           = 'W'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_FABKL           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_PERIV           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        i_firstdate       = l_start_date&lt;/P&gt;&lt;P&gt;        i_lastdate        = l_end_date&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;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CONVERT DATE l_start_date INTO TIME STAMP l_period_start&lt;/P&gt;&lt;P&gt;                 TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;    g_time_series_item_wa-period_begin      = l_period_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CONVERT DATE l_end_date TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;P&gt;                 TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;    g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Forecast Value&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_value =&lt;/P&gt;&lt;P&gt;                                       g_forecast_sub_wa-forecast_cv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    APPEND g_time_series_item_wa TO t_time_series_item.&lt;/P&gt;&lt;P&gt;    CLEAR g_time_series_item_wa.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call FM BAPI_PBSRVAPS_CHANGEKEYFIGVAL to change Z_CUSFU for all&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;time buckets&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  SORT t_time_series_item  by TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;                              period_begin&lt;/P&gt;&lt;P&gt;                              period_end.&lt;/P&gt;&lt;P&gt;  delete adjacent duplicates from t_time_series_item&lt;/P&gt;&lt;P&gt;           comparing&lt;/P&gt;&lt;P&gt;           TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;           PERIOD_BEGIN&lt;/P&gt;&lt;P&gt;           PERIOD_END.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_CHANGEKEYFIGVAL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                = c_planningbook&lt;/P&gt;&lt;P&gt;      commit_control              = 'E'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                   = t_selection&lt;/P&gt;&lt;P&gt;      time_series                 = t_time_series_chg&lt;/P&gt;&lt;P&gt;      time_series_item            = t_time_series_item&lt;/P&gt;&lt;P&gt;      characteristics_combination = t_char_comb&lt;/P&gt;&lt;P&gt;      return                      = t_return.&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;If error in return table, store message in error table and attempt&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;rollback; otherwise commit&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'&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;      RETURN        =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT t_forecast_sub1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_change_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .&lt;/P&gt;&lt;P&gt;    DESCRIBE TABLE t_forecast_sub1 LINES l_lines.&lt;/P&gt;&lt;P&gt;    g_cnt_changes = g_cnt_changes + l_lines.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;************&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;************&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_call_bapi&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  sub_format_dates&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&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;     --&amp;gt;P_L_HOLD_WA_DATE  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_CALWEEK  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_FISCPER  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_CALMONTH  text&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 sub_format_dates USING    p_date&lt;/P&gt;&lt;P&gt;                               p_calweek&lt;/P&gt;&lt;P&gt;                               p_calweek_end&lt;/P&gt;&lt;P&gt;                               p_weekend_date&lt;/P&gt;&lt;P&gt;                               p_week_diff&lt;/P&gt;&lt;P&gt;                               p_fiscper&lt;/P&gt;&lt;P&gt;                               p_calmonth&lt;/P&gt;&lt;P&gt;                               p_calyear_start&lt;/P&gt;&lt;P&gt;                               p_calyear_end&lt;/P&gt;&lt;P&gt;                               p_start_week&lt;/P&gt;&lt;P&gt;                               p_start_week_day&lt;/P&gt;&lt;P&gt;                               p_end_week&lt;/P&gt;&lt;P&gt;                               p_end_week_day.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Local variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: l_curr_date    TYPE sydatum,  " Program Run Date&lt;/P&gt;&lt;P&gt;        l_record_date  TYPE sydatum,  " Formatted Record Date&lt;/P&gt;&lt;P&gt;        l_curr_year(2) TYPE c,        " Program Year (without century)&lt;/P&gt;&lt;P&gt;        l_curr_year_num TYPE i,       " Integer value of Program Year&lt;/P&gt;&lt;P&gt;        l_century(2)     TYPE c,      " Program Century (without year)&lt;/P&gt;&lt;P&gt;        l_century_num    TYPE i,      " Integer value of Century&lt;/P&gt;&lt;P&gt;        l_input_year_num TYPE i.      " Integer value of Record Year&lt;/P&gt;&lt;P&gt;  DATA: con_period_week type /SAPAPO/PERKZ value 'W'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Record date - format MM/DD/YY&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: BEGIN OF l_input_date,&lt;/P&gt;&lt;P&gt;          month(2)  TYPE c,&lt;/P&gt;&lt;P&gt;          filler1(1) TYPE c,&lt;/P&gt;&lt;P&gt;          day(2)     TYPE c,&lt;/P&gt;&lt;P&gt;          filler2(1) TYPE c,&lt;/P&gt;&lt;P&gt;          year(2)    TYPE c,&lt;/P&gt;&lt;P&gt;        END OF l_input_date.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_calweek TYPE kweek,&lt;/P&gt;&lt;P&gt;        l_fiscper TYPE /sapapo/perid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  data: l_calmonth(6) type c,&lt;/P&gt;&lt;P&gt;        l_calyear(6) type c,&lt;/P&gt;&lt;P&gt;        l_month(2) type c,&lt;/P&gt;&lt;P&gt;        l_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_perid type /SAPAPO/PERID.&lt;/P&gt;&lt;P&gt;  DATA: p_calweek_start like scal-week.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: F_DATE TYPE D,&lt;/P&gt;&lt;P&gt;        L_FROMDATE  LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        L_TODATE    LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: lv_year_start(4) type c,&lt;/P&gt;&lt;P&gt;        lv_week_start(2) type c,&lt;/P&gt;&lt;P&gt;        lv_week_end(2) type c.&lt;/P&gt;&lt;P&gt;  DATA: lv_calweek_start type scal-week.&lt;/P&gt;&lt;P&gt;  DATA: lv_start_week_day type scal-date.&lt;/P&gt;&lt;P&gt;  DATA: lv_end_week_day type scal-date.&lt;/P&gt;&lt;P&gt;  DATA: lv_length type i.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  clear: l_perid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Data for forecast run date.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  l_record_date = sy-datum.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Use /SAPAPO/DATE_GET_WEEK, /SAPAPO/PERIOD_GET_FOR_DATE (P/JJ)... but&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;must convert to DATS format first&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;    p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;  lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;  concatenate  lv_year_start lv_week_end into p_calweek_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = p_calweek_start&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  p_end_week_day = p_start_week_day +  p_horz.&lt;/P&gt;&lt;P&gt;  l_record_date  = p_end_week_day.&lt;/P&gt;&lt;P&gt;  CLEAR: l_calweek.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek_end = l_calweek.&lt;/P&gt;&lt;P&gt;    p_calyear_end = l_calweek+2(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR: P_END_WEEK_DAY.&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = p_calweek_end&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = p_end_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  Clear: lv_week_start, lv_week_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_start+4(2).&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_start+0(4).&lt;/P&gt;&lt;P&gt;  concatenate lv_week_start lv_year_start into p_start_week.&lt;/P&gt;&lt;P&gt;  p_calyear_start = lv_year_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_end+4(2).&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_end+0(4).&lt;/P&gt;&lt;P&gt;  concatenate  lv_week_start lv_year_start into p_end_week.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  p_week_diff = p_calweek_end&lt;EM&gt;0(2) - p_calweek&lt;/EM&gt;0(2).&lt;/P&gt;&lt;P&gt;  condense p_week_diff.&lt;/P&gt;&lt;P&gt;  p_week_diff = ceil( p_week_diff ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*Data for availability date.&lt;/P&gt;&lt;P&gt;  l_record_date = p_date.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Use /SAPAPO/DATE_GET_WEEK, /SAPAPO/PERIOD_GET_FOR_DATE (P/JJ)... but&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;must convert to DATS format first&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;    p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;  lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;  lv_length = strlen( lv_week_end ).&lt;/P&gt;&lt;P&gt;  if lv_length &amp;lt; 2.&lt;/P&gt;&lt;P&gt;    concatenate '0' lv_week_end into lv_week_end.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CONSTANTS: C_52(2) TYPE C VALUE '52'.&lt;/P&gt;&lt;P&gt;  concatenate  lv_year_start lv_week_end into lv_calweek_start.&lt;/P&gt;&lt;P&gt;  if lv_calweek_start+4(2) &amp;gt;  c_52.&lt;/P&gt;&lt;P&gt;    lv_calweek_start+4(2) = c_52.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = lv_calweek_start&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = lv_start_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_end_week_day = lv_start_week_day + p_horz.&lt;/P&gt;&lt;P&gt;  l_record_date = lv_end_week_day.&lt;/P&gt;&lt;P&gt;  CLEAR: l_calweek.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek_end = l_calweek.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_end+0(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_end+4(2).&lt;/P&gt;&lt;P&gt;  concatenate  lv_week_start lv_year_start into p_calweek_end.&lt;/P&gt;&lt;P&gt;  p_calyear_end = lv_year_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;  clear: l_perid.&lt;/P&gt;&lt;P&gt;  l_record_date = p_date.&lt;/P&gt;&lt;P&gt;  call function '/SAPAPO/PERIOD_GET_FOR_DATE'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      i_date      = l_record_date&lt;/P&gt;&lt;P&gt;      i_perkz     = 'M'&lt;/P&gt;&lt;P&gt;      I_PERIV     = 'K0'&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      E_PERID     = l_perid&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WRONG_PERKZ = 1&lt;/P&gt;&lt;P&gt;      WRONG_DATE  = 2&lt;/P&gt;&lt;P&gt;      WRONG_PERIV = 3&lt;/P&gt;&lt;P&gt;      OTHERS      = 4.&lt;/P&gt;&lt;P&gt;  if sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calmonth(2)   = l_perid+4(2).&lt;/P&gt;&lt;P&gt;    p_calmonth+2(4) = l_perid(4).&lt;/P&gt;&lt;P&gt;    p_calyear_start = l_perid+0(4).&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_format_dates&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  validate_locmap&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&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; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&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 validate_locmap .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Convert SAP Location Code to APO Location&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  if not t_forecast_data[] is initial.&lt;/P&gt;&lt;P&gt;    READ TABLE t_forecast_data into g_forecast_data_wa index 1.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE locno FROM /sapapo/locmap&lt;/P&gt;&lt;P&gt;      INTO g_forecast_data_wa-r3_loc&lt;/P&gt;&lt;P&gt;     WHERE ext_locno = p_dist&lt;/P&gt;&lt;P&gt;       AND loctype   = c_loctype&lt;/P&gt;&lt;P&gt;       AND LOGQS     = c_logqs.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_r3_loc_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;ENDFORM.                    " validate_locmap&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 04 Feb 2008 07:32:19 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2008-02-04T07:32:19Z</dc:date>
    <item>
      <title>BAPI_PBSRVAPS_GETDETAIL2</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351473#M803925</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Experts,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Im using BAPI_PBSRVAPS_GETDETAIL2 to fetch the data from Planning Book for a certain key figure suppose key1.I'm getting all the values perfectly.The same BAPI is used in the same program to fetch the values of other keyfigure suppose key2,but im getting wrong values.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What i observed is when im using dat BAPI, first to fetch values of key2  and then for key1, its givin correct values  for key2 and for the key 1 its picking wrong value.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So please help me to resolve this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanking You,&lt;/P&gt;&lt;P&gt;Dayakar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Feb 2008 09:19:23 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351473#M803925</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-02-01T09:19:23Z</dc:date>
    </item>
    <item>
      <title>Re: BAPI_PBSRVAPS_GETDETAIL2</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351474#M803926</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Neetesh, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Some insight into the code you have used for calling the BAPI and processing the data thereafter would help us in helping you.. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mani&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 03 Feb 2008 16:25:41 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351474#M803926</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-02-03T16:25:41Z</dc:date>
    </item>
    <item>
      <title>Re: BAPI_PBSRVAPS_GETDETAIL2</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351475#M803927</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Check this code:&lt;/P&gt;&lt;P&gt;&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; Report  ZUSFORECAST&lt;/P&gt;&lt;P&gt;*&amp;amp;&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;REPORT ZPLIUSFCAST MESSAGE-ID zj01&lt;/P&gt;&lt;P&gt;       LINE-SIZE 132.&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM....... ZPLIUSFCAST&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TITLE......... APO Forecast Interface&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AUTHOR........ Aveek Ghose&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DATE WRITTEN.. 15/09/2006&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;R/3 RELEASE... 4.6C&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;COPIED FROM... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DESCRIPTION... This program reads a forecast file from PPC and loads&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               forecast quantities into APO Demand Planning LiveCache&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               - Key Figure 'Customer Forecast Units' (Z_CUSFU).&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               Include change request PD7K900203 in initial transport.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM TYPE.. Inbound Interface&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;DEV. CLASS.... ZPLN&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;LOGICAL DB.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;SCREENS....... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;GUI TITLE..... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;GUI STATUS.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;TRANSACTIONS.. N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;USER EXITS.... N/A&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;=====================================================================*&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CHANGE HISTORY                                                       *&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Date       By        Correction Number &amp;amp; Brief Description     Release&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;Tables / Structures&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;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*TABLES: zpln_ppc_loc,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       zpln_ppc_mat.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Selection table for BAPI function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_selection TYPE STANDARD TABLE OF bapi10030pbselection,&lt;/P&gt;&lt;P&gt;      g_selection_wa LIKE LINE OF t_selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Key Figure table for BAPI function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_key_figure_selection TYPE STANDARD TABLE OF bapi10030keyfigure,&lt;/P&gt;&lt;P&gt;      g_key_figure_selection_wa LIKE LINE OF t_key_figure_selection.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Group By table for BAPI function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_group_by TYPE STANDARD TABLE OF bapi10030pbgroupby,&lt;/P&gt;&lt;P&gt;      g_group_by_wa LIKE LINE OF t_group_by.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series table output from BAPI_PBSRVAPS_GETDETAIL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series TYPE STANDARD TABLE OF bapi10030pbtimeserieso,&lt;/P&gt;&lt;P&gt;      g_time_series_wa LIKE LINE OF t_time_series.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series table input to BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series_chg TYPE STANDARD TABLE OF bapi10030pbtimeseries,&lt;/P&gt;&lt;P&gt;      g_time_series_chg_wa LIKE LINE OF t_time_series_chg.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Bucket data input to BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_time_series_item TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;                                           bapi10030pbtimeseriesitem,&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa LIKE LINE OF t_time_series_item.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Characteristic Combination table for BAPI_PBSRVAPS_CHANGEKEYFIGVAL&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_char_comb TYPE STANDARD TABLE OF bapi10030pbcharacteristics,&lt;/P&gt;&lt;P&gt;      g_char_comb_wa LIKE LINE OF t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Return table from BAPI function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: t_return TYPE STANDARD TABLE OF bapiret2,&lt;/P&gt;&lt;P&gt;      g_return_wa LIKE LINE OF t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data,&lt;/P&gt;&lt;P&gt;        source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;        lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;        pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;        pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;        site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;        indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;        date         type datum,     "Date&lt;/P&gt;&lt;P&gt;        gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;        ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;        ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;        units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;      END OF ty_forecast_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data1,&lt;/P&gt;&lt;P&gt;       source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;       lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;       pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;       r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;       pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;       site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;       r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;       indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;       date         type datum,     "Date&lt;/P&gt;&lt;P&gt;       gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;       ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;       ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;       units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;       forecast_cv(20) type c,      " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;       calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;       calweek_end like scal-week,       " Calendar Week&lt;/P&gt;&lt;P&gt;       calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;       calweekend_date type scal-date,   " Calendar Week End date&lt;/P&gt;&lt;P&gt;       calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;       calweek_diff(4) type c,      "Week Diff&lt;/P&gt;&lt;P&gt;       startweek like scal-week,&lt;/P&gt;&lt;P&gt;       endweek   like scal-week,&lt;/P&gt;&lt;P&gt;       start_day like scal-date,&lt;/P&gt;&lt;P&gt;       end_day   like scal-date,&lt;/P&gt;&lt;P&gt;       calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;       calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;       delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;      END OF ty_forecast_data1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;      lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;      pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;      r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;      pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;      site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;      r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;      indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;      calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;      calweek_end type scal-week,  " Calendar Week&lt;/P&gt;&lt;P&gt;      endweek   like scal-week,&lt;/P&gt;&lt;P&gt;      forecast_cv(20) type c,         " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;      date         type datum,     "Date&lt;/P&gt;&lt;P&gt;      gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;      ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;      ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;      units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;      calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;      calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;      calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;      calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;      startweek like scal-week,&lt;/P&gt;&lt;P&gt;      start_day like scal-date,&lt;/P&gt;&lt;P&gt;      end_day   like scal-date,&lt;/P&gt;&lt;P&gt;      delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;     END OF ty_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF ty_forecast_data4,&lt;/P&gt;&lt;P&gt;        r3_material(40) TYPE c,      " R/3 Material Code&lt;/P&gt;&lt;P&gt;        site(4)      TYPE c,         " PPC Location&lt;/P&gt;&lt;P&gt;        r3_loc(10)    TYPE c,        " R/3 Location&lt;/P&gt;&lt;P&gt;        indication(3) type c,        "Indication&lt;/P&gt;&lt;P&gt;        calweek like scal-week,      " Calendar Week&lt;/P&gt;&lt;P&gt;        source_code(2) type c,       "Source Code&lt;/P&gt;&lt;P&gt;        lang_group(21) type c,       "Language Group&lt;/P&gt;&lt;P&gt;        pres_code(6) type c,         "Presentation Code&lt;/P&gt;&lt;P&gt;        pres_name(40) type c,        "Presentation Name&lt;/P&gt;&lt;P&gt;        calweek_end type scal-week,  " Calendar Week&lt;/P&gt;&lt;P&gt;        endweek   like scal-week,&lt;/P&gt;&lt;P&gt;        forecast_cv(20) type c,         " Forecast Quantity (converted)&lt;/P&gt;&lt;P&gt;        date         type datum,     "Date&lt;/P&gt;&lt;P&gt;        gi_date      type datum,     "Date&lt;/P&gt;&lt;P&gt;        ord_number(8) type c,        "Order Number&lt;/P&gt;&lt;P&gt;        ord_line(6)  type c,         "Order Line Number&lt;/P&gt;&lt;P&gt;        units(20) type c,            "Units&lt;/P&gt;&lt;P&gt;        calyear_start(4) type c,     " Year Start&lt;/P&gt;&lt;P&gt;        calyear_end(4) type c,       " Year End&lt;/P&gt;&lt;P&gt;        calmonth(6) type c,          " Calendar Month&lt;/P&gt;&lt;P&gt;        calyear(6) type c,           " Calendar Year&lt;/P&gt;&lt;P&gt;        startweek like scal-week,&lt;/P&gt;&lt;P&gt;        start_day like scal-date,&lt;/P&gt;&lt;P&gt;        end_day   like scal-date,&lt;/P&gt;&lt;P&gt;        delete(1) type c,            "Delete Flag&lt;/P&gt;&lt;P&gt;     END OF ty_forecast_data4.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data2 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data3 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data4 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;      ty_forecast_data4 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_data TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;           ty_forecast_data initial size 0 with header line,&lt;/P&gt;&lt;P&gt;      t_forecast_data1 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;                     ty_forecast_data1 initial size 0 with header line,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa LIKE LINE OF t_forecast_data1,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa2 LIKE LINE OF t_forecast_data2,&lt;/P&gt;&lt;P&gt;      g_forecast_data_wa3 LIKE LINE OF t_forecast_data3,&lt;/P&gt;&lt;P&gt;      l_forecast_data TYPE STANDARD TABLE OF ty_forecast_data1,&lt;/P&gt;&lt;P&gt;      l_forecast_data_wa like line of t_forecast_data1,&lt;/P&gt;&lt;P&gt;      l_forecast_data2 TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      l_forecast_data_wa2 like line of t_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Smaller forecast table to hold data for specific product/plant&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;combination]&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*DATA: t_forecast_sub TYPE STANDARD TABLE OF ty_forecast_data1,&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     g_forecast_sub_wa LIKE LINE OF t_forecast_sub.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_forecast_sub TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      t_forecast_sub1 TYPE STANDARD TABLE OF ty_forecast_data2,&lt;/P&gt;&lt;P&gt;      g_forecast_sub_wa LIKE LINE OF t_forecast_sub.&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;Error table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF ty_error_data.&lt;/P&gt;&lt;P&gt;INCLUDE TYPE ty_forecast_data1.&lt;/P&gt;&lt;P&gt;TYPES:   error_type(1)   TYPE c,&lt;/P&gt;&lt;P&gt;       END OF ty_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: t_error_data TYPE STANDARD TABLE OF ty_error_data,&lt;/P&gt;&lt;P&gt;      g_error_data_wa LIKE LINE OF t_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Structure to hold input file data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF g_input_data1,&lt;/P&gt;&lt;P&gt;        line(255) type c,&lt;/P&gt;&lt;P&gt;       END OF g_input_data1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: g_input_data type standard table of&lt;/P&gt;&lt;P&gt;                  g_input_data1 initial size 0 with header line.&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;Global Variables&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;DATA: g_date_from    TYPE /sapapo/cdps_eval_date_from, " From Date&lt;/P&gt;&lt;P&gt;      g_date_to      TYPE /sapapo/cdps_eval_date_to.   " To Date&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA: g_file  LIKE dxfile-filename,   " Filename&lt;/P&gt;&lt;P&gt;      g_material TYPE /sapapo/matnr,  " Material&lt;/P&gt;&lt;P&gt;      g_cnt_input_recs TYPE i,        " Number of file records&lt;/P&gt;&lt;P&gt;      g_cnt_changes    TYPE i,        " Number of changes attempted&lt;/P&gt;&lt;P&gt;      g_cnt_error_recs  TYPE i,       " Number of records with errors&lt;/P&gt;&lt;P&gt;      g_flg_error.                    " Error&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;Objects&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;DATA: i_file        TYPE REF TO zcl_file.&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;Constants&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;CONSTANTS: c_planningbook TYPE /sapapo/pb_mview      " Planning Book&lt;/P&gt;&lt;P&gt;              VALUE 'Z_PPC_FCST_DP',&lt;/P&gt;&lt;P&gt;           c_period_type TYPE /sapapo/cdps_eval_type " Period Type&lt;/P&gt;&lt;P&gt;              VALUE 'A'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;CONSTANTS:&lt;/P&gt;&lt;P&gt;     c_version(22) TYPE c            VALUE '000',  " Version&lt;/P&gt;&lt;P&gt;     c_log_type    TYPE c            VALUE 'L',    " Logical Filetype&lt;/P&gt;&lt;P&gt;     c_logqs     TYPE /sapapo/logqs  VALUE 'PSGA', " Business Sys Grp&lt;/P&gt;&lt;P&gt;     c_ppc_mat_error(1)   TYPE c VALUE '1',&lt;/P&gt;&lt;P&gt;                       " PPC Material not found in custom mapping table&lt;/P&gt;&lt;P&gt;     c_ppc_loc_error(1)   TYPE c VALUE '2',&lt;/P&gt;&lt;P&gt;                       " PPC Location not found in custom mapping table&lt;/P&gt;&lt;P&gt;     c_r3_mat_error(1)    TYPE c VALUE '3',&lt;/P&gt;&lt;P&gt;                       " R/3 to APO material mapping error&lt;/P&gt;&lt;P&gt;     c_r3_loc_error(1)    TYPE c VALUE '4',&lt;/P&gt;&lt;P&gt;                       " R/3 to APO location mapping error&lt;/P&gt;&lt;P&gt;     c_pbook_error(1)     TYPE c VALUE '5',&lt;/P&gt;&lt;P&gt;                       " Error getting planning book information&lt;/P&gt;&lt;P&gt;     c_date_error(1)      TYPE c VALUE '6',&lt;/P&gt;&lt;P&gt;                       " Invalid date error&lt;/P&gt;&lt;P&gt;     c_change_error(1)    TYPE c VALUE '7',&lt;/P&gt;&lt;P&gt;                       " Error changing key figure values&lt;/P&gt;&lt;P&gt;     c_per_ind     TYPE /sapapo/perkz  VALUE 'P',    " Period Indicator&lt;/P&gt;&lt;P&gt;     c_fisc_var    TYPE /sapapo/periv  VALUE 'JJ', " Fiscal year variant&lt;/P&gt;&lt;P&gt;     c_separator   TYPE c              VALUE ',',    " Field separator&lt;/P&gt;&lt;P&gt;     c_no_hdr_material(1) TYPE c VALUE '1',&lt;/P&gt;&lt;P&gt;     C_LOCTYPE TYPE /SAPAPO/C_LOCTYPE VALUE '1002'.&lt;/P&gt;&lt;P&gt;" No header material in file record&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;Selection Screen&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;Files to process&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK file WITH FRAME TITLE text-001.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN SKIP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK infile WITH FRAME TITLE text-002.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_login LIKE filename-fileintern OBLIGATORY&lt;/P&gt;&lt;P&gt;                    DEFAULT 'Z_DDS_43525_GPSG_EMEA_DEMAND'.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_phyin LIKE filename-fileextern.&lt;/P&gt;&lt;P&gt;PARAMETERS: p_horz(4) type c default '60'.&lt;/P&gt;&lt;P&gt;PARAMETERS: P_DIST(4) TYPE C default '0200'.&lt;/P&gt;&lt;P&gt;PARAMETERS: P_LOGSYS TYPE EDIPPARNUM  DEFAULT 'PD1120DEV'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK infile.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF BLOCK file.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;At Selection Screen&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;AT SELECTION-SCREEN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  PERFORM sub_get_physical_file USING p_login p_phyin.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;At Selection Screen Output&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Make the physical file name display only&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;AT SELECTION-SCREEN OUTPUT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  LOOP AT SCREEN.&lt;/P&gt;&lt;P&gt;    IF screen-name = 'P_PHYIN'.&lt;/P&gt;&lt;P&gt;      screen-input = 0.&lt;/P&gt;&lt;P&gt;      MODIFY SCREEN.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;INITIALIZATION.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;INITIALIZATION.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR: g_return_wa,&lt;/P&gt;&lt;P&gt;         g_selection_wa,&lt;/P&gt;&lt;P&gt;         g_key_figure_selection_wa,&lt;/P&gt;&lt;P&gt;         g_group_by_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_chg_wa,&lt;/P&gt;&lt;P&gt;         g_time_series_item_wa,&lt;/P&gt;&lt;P&gt;         g_char_comb_wa,&lt;/P&gt;&lt;P&gt;         g_forecast_data_wa,&lt;/P&gt;&lt;P&gt;         g_forecast_sub_wa,&lt;/P&gt;&lt;P&gt;         g_error_data_wa,&lt;/P&gt;&lt;P&gt;         g_input_data,&lt;/P&gt;&lt;P&gt;         g_date_from,&lt;/P&gt;&lt;P&gt;         g_date_to,&lt;/P&gt;&lt;P&gt;         g_cnt_input_recs,&lt;/P&gt;&lt;P&gt;         g_cnt_changes,&lt;/P&gt;&lt;P&gt;         g_cnt_error_recs,&lt;/P&gt;&lt;P&gt;         g_flg_error.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_selection,&lt;/P&gt;&lt;P&gt;           t_key_figure_selection,&lt;/P&gt;&lt;P&gt;           t_group_by,&lt;/P&gt;&lt;P&gt;           t_time_series,&lt;/P&gt;&lt;P&gt;           t_time_series_chg,&lt;/P&gt;&lt;P&gt;           t_time_series_item,&lt;/P&gt;&lt;P&gt;           t_char_comb,&lt;/P&gt;&lt;P&gt;           t_forecast_data,&lt;/P&gt;&lt;P&gt;           t_forecast_sub,&lt;/P&gt;&lt;P&gt;           t_error_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  PERFORM sub_get_physical_file USING p_login p_phyin.&lt;/P&gt;&lt;P&gt;&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Start-Of-Selection&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;START-OF-SELECTION.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read input file into internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_read_file.&lt;/P&gt;&lt;P&gt;  PERFORM validate_locmap.&lt;/P&gt;&lt;P&gt;  IF NOT t_forecast_data[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Map data to format for processing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM sub_map_data.&lt;/P&gt;&lt;P&gt;    IF NOT t_forecast_data2[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Process valid data records&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM sub_process_data.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display program results&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_display_results.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  sub_display_results&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Write results to spool&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 sub_display_results.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Program Results&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;P&gt;  WRITE: / text-025.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;File locations&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Input File&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;P&gt;  WRITE: / text-026,&lt;/P&gt;&lt;P&gt;        15 p_phyin.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Record Counts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  SKIP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records in input file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-027,&lt;/P&gt;&lt;P&gt;        48 g_cnt_input_recs.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records with errors&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-028,&lt;/P&gt;&lt;P&gt;        48 g_cnt_error_recs.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Number of records successfully updated in planning book&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  WRITE: / text-029,&lt;/P&gt;&lt;P&gt;        48 g_cnt_changes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;  IF NOT t_error_data[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Error Details:&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SKIP.&lt;/P&gt;&lt;P&gt;    WRITE: / text-024.&lt;/P&gt;&lt;P&gt;    SKIP.&lt;/P&gt;&lt;P&gt;    WRITE: / text-006,&lt;/P&gt;&lt;P&gt;          13 text-007,&lt;/P&gt;&lt;P&gt;          29 text-008,&lt;/P&gt;&lt;P&gt;          41 text-009,&lt;/P&gt;&lt;P&gt;          61 text-010.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    WRITE: / text-011 UNDER text-006,&lt;/P&gt;&lt;P&gt;             text-012 UNDER text-007,&lt;/P&gt;&lt;P&gt;             text-013 UNDER text-008,&lt;/P&gt;&lt;P&gt;             text-014 UNDER text-009,&lt;/P&gt;&lt;P&gt;             text-015 UNDER text-010.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    SORT T_ERROR_DATA BY pres_code&lt;/P&gt;&lt;P&gt;                         site&lt;/P&gt;&lt;P&gt;                         date&lt;/P&gt;&lt;P&gt;                         forecast_cv.&lt;/P&gt;&lt;P&gt;    Delete adjacent duplicates from t_error_data comparing pres_code&lt;/P&gt;&lt;P&gt;                                                           site&lt;/P&gt;&lt;P&gt;                                                           date&lt;/P&gt;&lt;P&gt;                                                           forecast_cv.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT t_error_data INTO g_error_data_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      WRITE: / g_error_data_wa-pres_code UNDER text-006,&lt;/P&gt;&lt;P&gt;               g_error_data_wa-site     UNDER text-007,&lt;/P&gt;&lt;P&gt;               g_error_data_wa-date     UNDER text-008,&lt;/P&gt;&lt;P&gt;            48 g_error_data_wa-forecast_cv RIGHT-JUSTIFIED.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;      CASE g_error_data_wa-error_type.&lt;/P&gt;&lt;P&gt;        WHEN c_ppc_mat_error.&lt;/P&gt;&lt;P&gt;          WRITE text-031 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_r3_mat_error.&lt;/P&gt;&lt;P&gt;          WRITE text-019 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_r3_loc_error.&lt;/P&gt;&lt;P&gt;          WRITE text-020 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_pbook_error.&lt;/P&gt;&lt;P&gt;          WRITE text-021 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_date_error.&lt;/P&gt;&lt;P&gt;          WRITE text-022 UNDER text-010.&lt;/P&gt;&lt;P&gt;        WHEN c_change_error.&lt;/P&gt;&lt;P&gt;          WRITE text-023 UNDER text-010.&lt;/P&gt;&lt;P&gt;      ENDCASE.&lt;/P&gt;&lt;P&gt;      CLEAR: g_error_data_wa.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-batch IS INITIAL.&lt;/P&gt;&lt;P&gt;      MESSAGE i000 WITH text-030.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     MESSAGE e000 WITH text-030.                          "TPR1336-&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      MESSAGE i000 WITH text-030.                           "TPR1336+&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_display_results&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  sub_map_data&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Map PPC codes to SAP codes and convert input values&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 sub_map_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_forecast(6) type c,&lt;/P&gt;&lt;P&gt;        l_uom         TYPE i.&lt;/P&gt;&lt;P&gt;  DATA:&lt;/P&gt;&lt;P&gt;  l_sold_num(10) TYPE n,            " Sold To Quantity (numerical char.)&lt;/P&gt;&lt;P&gt;  l_sold(7)      TYPE p DECIMALS 3, " Sold To Quantity (Packed, 3 dec.)&lt;/P&gt;&lt;P&gt;  l_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  l_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  l_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  l_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  l_fiscper(7)   TYPE c.            " Fiscal Period&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_temp_wa LIKE g_forecast_data_wa2,&lt;/P&gt;&lt;P&gt;        l_hold_wa LIKE g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data2 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data3 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;  DATA: lt_forecast_data4 TYPE STANDARD TABLE OF&lt;/P&gt;&lt;P&gt;        ty_forecast_data2 initial size 0 with header line.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data type ty_forecast_data2.&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data1 type ty_forecast_data1.&lt;/P&gt;&lt;P&gt;  DATA: l_wa_forecast_data2 type ty_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Local variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: l_curr_date    TYPE sydatum,  " Program Run Date&lt;/P&gt;&lt;P&gt;        l_record_date  TYPE sydatum,  " Formatted Record Date&lt;/P&gt;&lt;P&gt;        l_curr_year(2) TYPE c,        " Program Year (without century)&lt;/P&gt;&lt;P&gt;        l_curr_year_num TYPE i,       " Integer value of Program Year&lt;/P&gt;&lt;P&gt;        l_century(2)     TYPE c,      " Program Century (without year)&lt;/P&gt;&lt;P&gt;        l_century_num    TYPE i,      " Integer value of Century&lt;/P&gt;&lt;P&gt;        l_input_year_num TYPE i.      " Integer value of Record Year&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Record date - format MM/DD/YY&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: BEGIN OF l_input_date,&lt;/P&gt;&lt;P&gt;          month(2)  TYPE c,&lt;/P&gt;&lt;P&gt;          filler1(1) TYPE c,&lt;/P&gt;&lt;P&gt;          day(2)     TYPE c,&lt;/P&gt;&lt;P&gt;          filler2(1) TYPE c,&lt;/P&gt;&lt;P&gt;          year(2)    TYPE c,&lt;/P&gt;&lt;P&gt;        END OF l_input_date.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS:&lt;/P&gt;&lt;P&gt;    &amp;lt;L_WA_FORECAST&amp;gt;     TYPE ty_forecast_data2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: LV_FORECAST_CV type f.&lt;/P&gt;&lt;P&gt;  CLEAR: lv_forecast_cv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_first_day LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        l_last_day  LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: l_first_day1 LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        l_last_day1  LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: l_start_week LIKE SCAL-WEEK,&lt;/P&gt;&lt;P&gt;        l_end_week   LIKE SCAL-WEEK.&lt;/P&gt;&lt;P&gt;  DATA: l_start_week1 LIKE SCAL-WEEK,&lt;/P&gt;&lt;P&gt;        l_end_week1   LIKE SCAL-WEEK.&lt;/P&gt;&lt;P&gt;  DATA: lv_sap_code(50) type c.&lt;/P&gt;&lt;P&gt;  DATA: RETURN TYPE BAPIRET2.&lt;/P&gt;&lt;P&gt;  DATA: l_date_tabix like sy-tabix.&lt;/P&gt;&lt;P&gt;  DATA: L_TABIX TYPE SY-TABIX.&lt;/P&gt;&lt;P&gt;  DATA: l_start_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_end_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_calyear_diff(4) type c,&lt;/P&gt;&lt;P&gt;        l_calyear_data_start(4) type c.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  LOOP AT T_FORECAST_DATA.&lt;/P&gt;&lt;P&gt;    MOVE-CORRESPONDING T_FORECAST_DATA TO T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    APPEND T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    CLEAR: T_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&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;Loop through internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_data1 INTO g_forecast_data_wa.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Map Material code to SAP product and conversion factor using&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;cross-reference table; if not found, delete record and store&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;error.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CLEAR: LV_SAP_CODE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'Z_XREF_LOOKUP' DESTINATION P_LOGSYS&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        TRANSID  = 'ZELCUSMATLOOKUP'&lt;/P&gt;&lt;P&gt;        INVALUE  = g_forecast_data_wa-pres_code&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        OUTVALUE = lv_sap_code&lt;/P&gt;&lt;P&gt;        RETURN   = RETURN.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&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;P&gt;    IF NOT LV_SAP_CODE IS INITIAL. "RETURN IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Convert SAP Material Code to APO Material Number; if not found,&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;delete record and store error&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT SINGLE matnr FROM /sapapo/matmap&lt;/P&gt;&lt;P&gt;        INTO g_forecast_data_wa-r3_material&lt;/P&gt;&lt;P&gt;        WHERE ext_matnr = lv_sap_code&lt;/P&gt;&lt;P&gt;        AND logqs     = c_logqs.&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;        g_error_data_wa-error_type = c_r3_mat_error.&lt;/P&gt;&lt;P&gt;        APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;        CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;        DELETE t_forecast_data1.&lt;/P&gt;&lt;P&gt;        CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;        ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;        CONTINUE.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    l_uom = 1.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Store material in error table; delete current record of data&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;table; continue&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_ppc_mat_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_data1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Convert Forecast Quantity using conversion factor&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;    l_forecast = g_forecast_data_wa-units.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-forecast_cv = g_forecast_data_wa-units.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;    CLEAR:   l_calweek,&lt;/P&gt;&lt;P&gt;             l_calweek_end,&lt;/P&gt;&lt;P&gt;             l_calweekend_date,&lt;/P&gt;&lt;P&gt;             l_calweek_diff,&lt;/P&gt;&lt;P&gt;             l_fiscper,&lt;/P&gt;&lt;P&gt;             l_calmonth,&lt;/P&gt;&lt;P&gt;             l_calyear_start,&lt;/P&gt;&lt;P&gt;             l_calyear_end,&lt;/P&gt;&lt;P&gt;             l_start_week,&lt;/P&gt;&lt;P&gt;             l_first_day,&lt;/P&gt;&lt;P&gt;             l_end_week,&lt;/P&gt;&lt;P&gt;             l_last_day.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*Convert Monday Date to Calendar Week and Fiscal Period&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    PERFORM sub_format_dates USING g_forecast_data_wa-gi_date&lt;/P&gt;&lt;P&gt;                                  l_calweek&lt;/P&gt;&lt;P&gt;                                  l_calweek_end&lt;/P&gt;&lt;P&gt;                                  l_calweekend_date&lt;/P&gt;&lt;P&gt;                                  l_calweek_diff&lt;/P&gt;&lt;P&gt;                                  l_fiscper&lt;/P&gt;&lt;P&gt;                                  l_calmonth&lt;/P&gt;&lt;P&gt;                                  l_calyear_start&lt;/P&gt;&lt;P&gt;                                  l_calyear_end&lt;/P&gt;&lt;P&gt;                                  l_start_week&lt;/P&gt;&lt;P&gt;                                  l_first_day&lt;/P&gt;&lt;P&gt;                                  l_end_week&lt;/P&gt;&lt;P&gt;                                  l_last_day.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calweek          = l_calweek.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calweek_end      = l_calweek_end.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calmonth         = l_calmonth.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calyear_start    = l_calyear_start.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-calyear_end      = l_calyear_end.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-startweek        = l_start_week.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-endweek          = l_end_week.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-start_day        = l_first_day.&lt;/P&gt;&lt;P&gt;    g_forecast_data_wa-end_day          = l_last_day.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Modify table record&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    MODIFY t_forecast_data1 FROM g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;    CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;  LOOP AT T_FORECAST_DATA1 INTO L_WA_FORECAST_DATA1.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-source_code =&lt;/P&gt;&lt;P&gt;         L_WA_FORECAST_DATA1-source_code.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-lang_group =&lt;/P&gt;&lt;P&gt;         L_WA_FORECAST_DATA1-lang_group.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-pres_code = L_WA_FORECAST_DATA1-pres_code.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-r3_material = L_WA_FORECAST_DATA1-r3_material.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-pres_name = L_WA_FORECAST_DATA1-pres_name.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-site    =  L_WA_FORECAST_DATA1-site.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-r3_loc  = L_WA_FORECAST_DATA1-r3_loc.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-indication = L_WA_FORECAST_DATA1-indication.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-date =  L_WA_FORECAST_DATA1-date.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-gi_date = L_WA_FORECAST_DATA1-gi_date.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-ord_number = L_WA_FORECAST_DATA1-ord_number.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-ord_line =  L_WA_FORECAST_DATA1-ord_line.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-units = L_WA_FORECAST_DATA1-units.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-forecast_cv = L_WA_FORECAST_DATA1-forecast_cv.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calweek = L_WA_FORECAST_DATA1-calweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calweek_end =  L_WA_FORECAST_DATA1-calweek_end.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-startweek =  L_WA_FORECAST_DATA1-startweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-endweek   = L_WA_FORECAST_DATA1-endweek.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-start_day = L_WA_FORECAST_DATA1-start_day.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-end_day   = L_WA_FORECAST_DATA1-end_day.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calyear_start =&lt;/P&gt;&lt;P&gt;                    L_WA_FORECAST_DATA1-calyear_start.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-calyear_end  = L_WA_FORECAST_DATA1-calyear_end.&lt;/P&gt;&lt;P&gt;    L_WA_FORECAST_DATA2-delete = L_WA_FORECAST_DATA1-delete.&lt;/P&gt;&lt;P&gt;    APPEND l_wa_forecast_data2 TO t_forecast_data2.&lt;/P&gt;&lt;P&gt;    CLEAR: l_wa_forecast_data1.&lt;/P&gt;&lt;P&gt;    Clear: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  SORT T_FORECAST_DATA2 BY&lt;/P&gt;&lt;P&gt;        source_code&lt;/P&gt;&lt;P&gt;        lang_group&lt;/P&gt;&lt;P&gt;        pres_code&lt;/P&gt;&lt;P&gt;        r3_material&lt;/P&gt;&lt;P&gt;        pres_name&lt;/P&gt;&lt;P&gt;        site&lt;/P&gt;&lt;P&gt;        r3_loc&lt;/P&gt;&lt;P&gt;        indication&lt;/P&gt;&lt;P&gt;        calweek&lt;/P&gt;&lt;P&gt;        endweek&lt;/P&gt;&lt;P&gt;        calmonth&lt;/P&gt;&lt;P&gt;        calyear_start&lt;/P&gt;&lt;P&gt;        calyear_end&lt;/P&gt;&lt;P&gt;        calweek_end&lt;/P&gt;&lt;P&gt;        startweek&lt;/P&gt;&lt;P&gt;        start_day&lt;/P&gt;&lt;P&gt;        end_day&lt;/P&gt;&lt;P&gt;        delete.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;  clear: lv_forecast_cv.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;collecting the product Variant.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;  lt_forecast_data2[] = t_forecast_data2[].&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation for JOR and NOR.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  delete lt_forecast_data2 where indication &amp;lt;&amp;gt; 'JOR'&lt;/P&gt;&lt;P&gt;                             and indication &amp;lt;&amp;gt; 'NOR'.&lt;/P&gt;&lt;P&gt;  IF NOT lt_forecast_data2[] is initial.&lt;/P&gt;&lt;P&gt;    LOOP AT lt_forecast_data2 ASSIGNING &amp;lt;L_WA_FORECAST&amp;gt;.&lt;/P&gt;&lt;P&gt;      LV_FORECAST_CV = LV_FORECAST_CV + &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv.&lt;/P&gt;&lt;P&gt;      &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = 'X'.&lt;/P&gt;&lt;P&gt;      AT END OF CALWEEK.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = ' '.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv = lv_forecast_cv.&lt;/P&gt;&lt;P&gt;        CLEAR lv_forecast_cv.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  DELETE lt_forecast_data2 WHERE delete = 'X'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation where Indication ne JOR and NOR.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  lt_forecast_data3[] = t_forecast_data2[].&lt;/P&gt;&lt;P&gt;  loop at lt_forecast_data3.&lt;/P&gt;&lt;P&gt;    if lt_forecast_data3-indication = 'JOR'&lt;/P&gt;&lt;P&gt;    or lt_forecast_data3-indication = 'NOR'.&lt;/P&gt;&lt;P&gt;      delete lt_forecast_data3.&lt;/P&gt;&lt;P&gt;    else.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;*if lt_forecast_data3-calweek &amp;gt; lt_forecast_data3-calweek_end.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;***MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     if lt_forecast_data3-calweek &amp;gt; lt_forecast_data3-endweek.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       delete lt_forecast_data3.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     else.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       append lt_forecast_data3 to lt_forecast_data4.&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;***MOD-011&lt;/P&gt;&lt;P&gt;      append lt_forecast_data3 to lt_forecast_data4.&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     endif.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;    endif.&lt;/P&gt;&lt;P&gt;  endloop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Aggregation beyond the horizon for all indication.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT lt_forecast_data3[] is initial.&lt;/P&gt;&lt;P&gt;    LOOP AT lt_forecast_data3 ASSIGNING &amp;lt;L_WA_FORECAST&amp;gt;.&lt;/P&gt;&lt;P&gt;      LV_FORECAST_CV = LV_FORECAST_CV + &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv.&lt;/P&gt;&lt;P&gt;      &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = 'X'.&lt;/P&gt;&lt;P&gt;      AT END OF CALWEEK.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-DELETE = ' '.&lt;/P&gt;&lt;P&gt;        &amp;lt;L_WA_FORECAST&amp;gt;-forecast_cv = lv_forecast_cv.&lt;/P&gt;&lt;P&gt;        CLEAR lv_forecast_cv.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  DELETE lt_forecast_data3 WHERE delete = 'X'.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data3 to lt_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-007&lt;/P&gt;&lt;P&gt;  Refresh: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data2 to t_forecast_data2.&lt;/P&gt;&lt;P&gt;  SORT T_FORECAST_DATA2 BY&lt;/P&gt;&lt;P&gt;        source_code&lt;/P&gt;&lt;P&gt;        lang_group&lt;/P&gt;&lt;P&gt;        pres_code&lt;/P&gt;&lt;P&gt;        r3_material&lt;/P&gt;&lt;P&gt;        pres_name&lt;/P&gt;&lt;P&gt;        site&lt;/P&gt;&lt;P&gt;        r3_loc&lt;/P&gt;&lt;P&gt;        indication&lt;/P&gt;&lt;P&gt;        calweek&lt;/P&gt;&lt;P&gt;        endweek&lt;/P&gt;&lt;P&gt;        calweek_end&lt;/P&gt;&lt;P&gt;        startweek&lt;/P&gt;&lt;P&gt;        start_day&lt;/P&gt;&lt;P&gt;        end_day&lt;/P&gt;&lt;P&gt;        calyear_start&lt;/P&gt;&lt;P&gt;        calyear_end&lt;/P&gt;&lt;P&gt;        delete.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lt_forecast_data2[] = t_forecast_data2[].&lt;/P&gt;&lt;P&gt;  READ TABLE lt_FORECAST_DATA2 INDEX 1.&lt;/P&gt;&lt;P&gt;  l_start_year = lt_forecast_data2-calyear_start.&lt;/P&gt;&lt;P&gt;  DESCRIBE TABLE lt_forecast_data2 lines l_tabix.&lt;/P&gt;&lt;P&gt;  READ TABLE lt_forecast_data2 index l_tabix.&lt;/P&gt;&lt;P&gt;  l_end_year = lt_forecast_data2-calyear_end.&lt;/P&gt;&lt;P&gt;  loop at lt_forecast_data2.&lt;/P&gt;&lt;P&gt;    if sy-tabix = 1.&lt;/P&gt;&lt;P&gt;      l_calyear_data_start = ( lt_forecast_data2-calyear_start + 2 ).&lt;/P&gt;&lt;P&gt;    endif.&lt;/P&gt;&lt;P&gt;    exit.&lt;/P&gt;&lt;P&gt;  endloop.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  delete lt_forecast_data2 where&lt;/P&gt;&lt;P&gt;          calyear_start &amp;gt; l_calyear_data_start.           "#EC PORTABLE&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  delete lt_forecast_data2 where gi_date &amp;lt; sy-datum.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  Refresh: t_forecast_data2.&lt;/P&gt;&lt;P&gt;  append lines of lt_forecast_data2 to t_forecast_data2.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;*****************************************************************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_map_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;**&amp;amp;      Form  sub_process_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;      Loop through data records, separate into product/location&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;      sub-groups, and process&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;FORM sub_process_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_temp_wa LIKE g_forecast_data_wa2,&lt;/P&gt;&lt;P&gt;        l_hold_wa LIKE g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR l_hold_wa.&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;  SORT t_forecast_data2 BY r3_material&lt;/P&gt;&lt;P&gt;                           r3_loc&lt;/P&gt;&lt;P&gt;                           date&lt;/P&gt;&lt;P&gt;                           calweek ASCENDING.&lt;/P&gt;&lt;P&gt;**MOD-010&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Loop through internal table, collecting sub-table for each&lt;/P&gt;&lt;/LI&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;material/plant&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_data2 INTO g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;    l_temp_wa = g_forecast_data_wa2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Initial Loop Pass -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Save hold variables during first loop pass&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    AT FIRST.&lt;/P&gt;&lt;P&gt;      l_hold_wa = l_temp_wa.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Normal Loop Processing -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  If control break occurs:&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (1) process existing sub-table for&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                               material plant combination;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (2) clear sub-table;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (3) set new hold values;&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                      (4) append current work area to sub-table.&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;  Otherwise, append current work area to sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF ( l_hold_wa-r3_material &amp;lt;&amp;gt; g_forecast_data_wa2-r3_material ) OR&lt;/P&gt;&lt;P&gt;       ( l_hold_wa-r3_loc &amp;lt;&amp;gt; g_forecast_data_wa2-r3_loc ) OR&lt;/P&gt;&lt;P&gt;       ( l_hold_wa-calweek &amp;lt;&amp;gt; g_forecast_data_wa2-calweek ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Process sub-table; clear sub-table&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Set new hold values; append sub-table.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      l_hold_wa = l_temp_wa.&lt;/P&gt;&lt;P&gt;      APPEND g_forecast_data_wa2 TO t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;      PERFORM sub_call_bapi.&lt;/P&gt;&lt;P&gt;      REFRESH t_forecast_sub.&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Append sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      APPEND g_forecast_data_wa2 TO t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa2.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Final Loop Pass -&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Process existing sub-table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    AT LAST.&lt;/P&gt;&lt;P&gt;      PERFORM sub_call_bapi.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_process_data&lt;/P&gt;&lt;P&gt;**&amp;amp;----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;P&gt;*&amp;amp;      Form  sub_read_file&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Read interface file&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 sub_read_file.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Get Physical Filename&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF p_phyin IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM sub_get_physical_file USING p_login p_phyin.&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;Open a file object based on the selection screen information.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_file = p_login.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CREATE OBJECT i_file EXPORTING u_f_filename = g_file&lt;/P&gt;&lt;P&gt;                                 u_f_filetype = c_log_type.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Check authority for reading the interface file.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;check_read_authority.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Attempt to open file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;open_for_input.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read file into data record and append to internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM sub_read_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Close file.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL METHOD i_file-&amp;gt;close.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_read_file&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  sub_get_physical_file&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Determine Physical filename from Logical Filename&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;     --&amp;gt;P_LFILE  Logical Filename&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_PFILE  Physical Filename&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 sub_get_physical_file USING    p_lfile&lt;/P&gt;&lt;P&gt;                                    p_pfile.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CHECK NOT p_lfile IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'FILE_GET_NAME'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      client           = sy-mandt&lt;/P&gt;&lt;P&gt;      logical_filename = p_lfile&lt;/P&gt;&lt;P&gt;      operating_system = sy-opsys&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      file_name        = p_pfile&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      file_not_found   = 1&lt;/P&gt;&lt;P&gt;      OTHERS           = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc NE 0.&lt;/P&gt;&lt;P&gt;    p_pfile = '' .&lt;/P&gt;&lt;P&gt;    MESSAGE e002 WITH p_lfile.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_get_physical_file&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  sub_read_data&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;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;&lt;STRONG&gt;----&lt;/STRONG&gt;&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FORM sub_read_data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: DELIMETER(2) TYPE C VALUE ';'.&lt;/P&gt;&lt;P&gt;  DATA: L_WA_INPUT_DATA TYPE G_INPUT_DATA1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DO.&lt;/P&gt;&lt;P&gt;    READ DATASET i_file-&amp;gt;phys_filename INTO g_input_data.&lt;/P&gt;&lt;P&gt;    IF sy-subrc NE 0.&lt;/P&gt;&lt;P&gt;      IF g_cnt_input_recs = 0.&lt;/P&gt;&lt;P&gt;        MESSAGE s000 WITH Text-004 i_file-&amp;gt;phys_filename&lt;/P&gt;&lt;P&gt;                          Text-005.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       MESSAGE s000 WITH 'Input file' i_file-&amp;gt;phys_filename&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                         'is empty'.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        g_flg_error = 'Y'.&lt;/P&gt;&lt;P&gt;        STOP.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;      EXIT.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      APPEND g_input_data.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_input_recs.&lt;/P&gt;&lt;P&gt;      CLEAR: g_input_data,&lt;/P&gt;&lt;P&gt;             g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDDO.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-002&lt;/P&gt;&lt;P&gt;  LOOP AT  g_input_data.&lt;/P&gt;&lt;P&gt;    t_forecast_data-source_code = g_input_data-line+0(4).&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-source_code  FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-source_code+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-lang_group = g_input_data-line+6(24).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-lang_group.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-lang_group FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-lang_group+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-pres_code = g_input_data-line+30(9).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-pres_code.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-pres_code FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-pres_code+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-pres_name = g_input_data-line+39(38).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-pres_name.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-pres_name FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-pres_name+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-site = p_dist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-indication = g_input_data-line+77(6).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-indication.&lt;/P&gt;&lt;P&gt;    SEARCH t_forecast_data-indication FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-indication+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-date = g_input_data-line+83(11).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-date.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-date FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-date+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-gi_date = g_input_data-line+94(12).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-gi_date.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-gi_date FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-gi_date+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-ord_number = g_input_data-line+106(10).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-ord_number.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-ord_number FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-ord_number+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-ord_line = g_input_data-line+116(8).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-ord_line.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-ord_line FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-ord_line+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    t_forecast_data-units = g_input_data-line+124(28).&lt;/P&gt;&lt;P&gt;    CONDENSE t_forecast_data-units.&lt;/P&gt;&lt;P&gt;    SEARCH  t_forecast_data-units FOR ';'.&lt;/P&gt;&lt;P&gt;    IF sy-subrc EQ 0.&lt;/P&gt;&lt;P&gt;      t_forecast_data-units+sy-fdpos = space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    APPEND t_forecast_data.&lt;/P&gt;&lt;P&gt;    CLEAR t_forecast_data.&lt;/P&gt;&lt;P&gt;    CLEAR: g_input_data,&lt;/P&gt;&lt;P&gt;           g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-002&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_read_data&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  sub_call_bapi&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Read values of sub-table and update the Customer Forecast&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      key figure in the correct time buckets&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 sub_call_bapi.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_date         TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_start_date   TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_end_date     TYPE sydatum,&lt;/P&gt;&lt;P&gt;        l_period_start TYPE bapi10030pbperiodstart,&lt;/P&gt;&lt;P&gt;        l_period_end   TYPE bapi10030pbperiodend,&lt;/P&gt;&lt;P&gt;        l_matnr        TYPE /sapapo/matnr,&lt;/P&gt;&lt;P&gt;        l_locno        TYPE /sapapo/locno,&lt;/P&gt;&lt;P&gt;        l_lines        TYPE i.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA:&lt;/P&gt;&lt;P&gt;  l_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  l_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  l_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  l_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  l_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_calweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek_end like scal-week,     " Calendar Week&lt;/P&gt;&lt;P&gt;  p_startcalweek like scal-week,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek1(2) type c,             " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweek_end1(2) type c,         " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calweekend_date like scal-week, " Calendar Week&lt;/P&gt;&lt;P&gt;  p_calmonth(6)  type c,            " Calendar Month&lt;/P&gt;&lt;P&gt;  p_calyear_start(4) type c,        " Calendar Year&lt;/P&gt;&lt;P&gt;  p_calyear_end(4) type c,          " Calendar Year&lt;/P&gt;&lt;P&gt;  p_calweek_diff type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_calweek_start type scal-week,    " Diff in week&lt;/P&gt;&lt;P&gt;  p_start_week_day type SCDATUM,    " Date&lt;/P&gt;&lt;P&gt;  l_record_date type sy-datum,      " Date&lt;/P&gt;&lt;P&gt;  lv_year_start type CYEAR,         " Year&lt;/P&gt;&lt;P&gt;  lv_week_start type scal-week,     " Week&lt;/P&gt;&lt;P&gt;  lv_week_end   type scal-week.     " Week&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA: l_time_series_id TYPE /sapapo/mxrow.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  DATA: t_periotab type /SAPAPO/PERIOTAB OCCURS 0 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: g_periotab_wa type /SAPAPO/PERIOTAB.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_selection,&lt;/P&gt;&lt;P&gt;           t_group_by,&lt;/P&gt;&lt;P&gt;           t_key_figure_selection,&lt;/P&gt;&lt;P&gt;           t_time_series,&lt;/P&gt;&lt;P&gt;           t_time_series_chg,&lt;/P&gt;&lt;P&gt;           t_time_series_item,&lt;/P&gt;&lt;P&gt;           t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  READ TABLE t_forecast_sub INDEX 1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  l_matnr = g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;  l_locno = g_forecast_sub_wa-r3_loc.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**********************************************************&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Fill parameters/tables for BAPI_PBSRVAPS_GETDETAIL ***&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**********************************************************&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Date Parameters&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_date_from = g_forecast_sub_wa-date.&lt;/P&gt;&lt;P&gt;  g_date_to   = g_forecast_sub_wa-gi_date.&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Selection table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_selection_wa-characteristic_name = '9AVERSION'. " Version&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = c_version.              " Default '000'&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Begin of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_selection_wa-characteristic_name = 'ZMATNR'.   " APO-DP Product&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;End of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = l_matnr.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  g_selection_wa-characteristic_name = 'ZDCENTER'.   " Location&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_sign = 'I'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_option = 'EQ'.&lt;/P&gt;&lt;P&gt;  g_selection_wa-char_val_low = P_DIST.&lt;/P&gt;&lt;P&gt;  APPEND g_selection_wa TO t_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_selection_wa.&lt;/P&gt;&lt;P&gt;*MOD-006&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;Group By Table&lt;/P&gt;&lt;/LI&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Begin of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  g_group_by_wa-characteristic_name = 'ZMATNR'.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;End of change for TPR0817&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  APPEND g_group_by_wa TO t_group_by.&lt;/P&gt;&lt;P&gt;  CLEAR g_group_by_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Key Figure Table - Customer Forecast in Units&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  g_key_figure_selection_wa-key_figure = 'Z_CUSFU'.&lt;/P&gt;&lt;P&gt;  APPEND g_key_figure_selection_wa TO t_key_figure_selection.&lt;/P&gt;&lt;P&gt;  CLEAR g_key_figure_selection_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call FM to get time series number&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_GETDETAIL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                      = c_planningbook&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    SELECTION_ID                      =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      period_type                       = c_period_type&lt;/P&gt;&lt;P&gt;      date_from                         = g_date_from&lt;/P&gt;&lt;P&gt;      date_to                           = g_date_to&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                         = t_selection&lt;/P&gt;&lt;P&gt;      group_by                          = t_group_by&lt;/P&gt;&lt;P&gt;      key_figure_selection              = t_key_figure_selection&lt;/P&gt;&lt;P&gt;      time_series                       = t_time_series&lt;/P&gt;&lt;P&gt;      return                            = t_return.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT t_forecast_sub INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_pbook_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;    EXIT.&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;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt;Fill parameters/tables for BAPI_PBSRVAPS_CHANGEKEYFIGVAL ***&lt;/P&gt;&lt;/LI&gt;&lt;/UL&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;Time Series table (containing time series ID)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  READ TABLE t_time_series INDEX 1 INTO g_time_series_wa.&lt;/P&gt;&lt;P&gt;  MOVE-CORRESPONDING g_time_series_wa TO g_time_series_chg_wa.&lt;/P&gt;&lt;P&gt;  APPEND g_time_series_chg_wa TO t_time_series_chg.&lt;/P&gt;&lt;P&gt;  l_time_series_id = g_time_series_wa-time_series_id.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR g_time_series_chg_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  T_FORECAST_SUB1[] = T_FORECAST_SUB[].&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series Item table (contains all values to be loaded)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_sub INTO g_forecast_sub_wa.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series ID&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_id    = l_time_series_id.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Check date validity&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date                      = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        plausibility_check_failed = 1&lt;/P&gt;&lt;P&gt;        OTHERS                    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_date_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&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;Get Date Range for given date&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/MC_DATE_GET_FIRST_LAST'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;       i_date            = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;       i_perkz           = 'W'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_FABKL           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_PERIV           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        i_firstdate       = l_start_date&lt;/P&gt;&lt;P&gt;        i_lastdate        = l_end_date&lt;/P&gt;&lt;P&gt;              .&lt;/P&gt;&lt;P&gt;**********&lt;/P&gt;&lt;P&gt;*MOD-011&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;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   CONVERT DATE l_start_date INTO TIME STAMP l_period_start&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                TIME ZONE 'UTC   '.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   g_time_series_item_wa-period_begin      = l_period_start.&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;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   CONVERT DATE l_end_date TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                TIME ZONE 'UTC   '.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*MOD-011&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 for forecast run date.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    l_record_date = sy-datum.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date         = l_record_date&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        week         = l_calweek&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        date_invalid = 1&lt;/P&gt;&lt;P&gt;        OTHERS       = 2.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;      EXIT.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;      p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;    lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;    lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;    concatenate  lv_year_start lv_week_end+4(2) into p_calweek_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        WEEK         = p_calweek_start&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        DATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;        OTHERS       = 2.&lt;/P&gt;&lt;P&gt;    IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;           WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/SDP_TB_GET_PERIOTAB'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        I_TBID              = '104  WEEKS'&lt;/P&gt;&lt;P&gt;        I_DIRECTION         = '+'&lt;/P&gt;&lt;P&gt;        I_STARTDATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;        I_OFFSET_IN_DAYS    = '0'&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        E_PERIOTAB          = t_periotab&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        TB_NOT_EXISTS       = 1&lt;/P&gt;&lt;P&gt;        NO_TB_DEFINED       = 2&lt;/P&gt;&lt;P&gt;        WRONG_TB_DEFINITION = 3&lt;/P&gt;&lt;P&gt;        OTHERS              = 4.&lt;/P&gt;&lt;P&gt;    IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT T_PERIOTAB INTO G_PERIOTAB_WA.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;      CONVERT DATE G_PERIOTAB_WA-ertag&lt;/P&gt;&lt;P&gt;          INTO TIME STAMP l_period_start&lt;/P&gt;&lt;P&gt;                   TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-period_begin      = l_period_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      CONVERT DATE G_PERIOTAB_WA-bistag&lt;/P&gt;&lt;P&gt;          TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;P&gt;                                   TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Forecast Value&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      g_time_series_item_wa-time_series_value = 0.&lt;/P&gt;&lt;P&gt;      g_time_series_item_wa-time_series_id    = l_time_series_id.&lt;/P&gt;&lt;P&gt;      APPEND g_time_series_item_wa TO t_time_series_item.&lt;/P&gt;&lt;P&gt;      CLEAR g_time_series_item_wa.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  SORT t_time_series_item  by TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;                              period_begin&lt;/P&gt;&lt;P&gt;                              period_end.&lt;/P&gt;&lt;P&gt;  delete adjacent duplicates from t_time_series_item&lt;/P&gt;&lt;P&gt;           comparing&lt;/P&gt;&lt;P&gt;           TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;           PERIOD_BEGIN&lt;/P&gt;&lt;P&gt;           PERIOD_END.&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*Delete the first and the last record from the time series table.&lt;/P&gt;&lt;P&gt;  data: l_tabix type sy-tabix.&lt;/P&gt;&lt;P&gt;  DESCRIBE TABLE t_time_series_item lines l_tabix.&lt;/P&gt;&lt;P&gt;  if l_tabix ne 0.&lt;/P&gt;&lt;P&gt;    delete t_time_series_item index l_tabix.&lt;/P&gt;&lt;P&gt;    delete t_time_series_item index 1.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;**MOD-011&lt;/P&gt;&lt;P&gt;*********&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;if  g_material ne g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Refresh the Planning Book&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_CHANGEKEYFIGVAL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                = c_planningbook&lt;/P&gt;&lt;P&gt;      commit_control              = 'E'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                   = t_selection&lt;/P&gt;&lt;P&gt;      time_series                 = t_time_series_chg&lt;/P&gt;&lt;P&gt;      time_series_item            = t_time_series_item&lt;/P&gt;&lt;P&gt;      characteristics_combination = t_char_comb&lt;/P&gt;&lt;P&gt;      return                      = t_return.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If error in return table, store message in error table and attempt&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;rollback; otherwise commit&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;  g_material = g_forecast_sub_wa-r3_material.&lt;/P&gt;&lt;P&gt;ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;*MOD-009&lt;/P&gt;&lt;P&gt;  Refresh: t_time_series_item.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**************&lt;/P&gt;&lt;P&gt;***MOD-011&lt;/P&gt;&lt;P&gt;**************&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series Item table (contains all values to be loaded)&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT t_forecast_sub1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Time Series ID&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_id    = l_time_series_id.&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;Check date validity&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        date                      = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        plausibility_check_failed = 1&lt;/P&gt;&lt;P&gt;        OTHERS                    = 2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_date_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&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;Get Date Range for given date&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CALL FUNCTION '/SAPAPO/MC_DATE_GET_FIRST_LAST'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;       i_date            = g_forecast_sub_wa-gi_date&lt;/P&gt;&lt;P&gt;       i_perkz           = 'W'&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_FABKL           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     I_PERIV           = ' '&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        i_firstdate       = l_start_date&lt;/P&gt;&lt;P&gt;        i_lastdate        = l_end_date&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;Starting Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CONVERT DATE l_start_date INTO TIME STAMP l_period_start&lt;/P&gt;&lt;P&gt;                 TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;    g_time_series_item_wa-period_begin      = l_period_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Ending Timestamp&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CONVERT DATE l_end_date TIME '235959' INTO TIME STAMP l_period_end&lt;/P&gt;&lt;P&gt;                 TIME ZONE 'UTC   '.&lt;/P&gt;&lt;P&gt;    g_time_series_item_wa-period_end        = l_period_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Forecast Value&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    g_time_series_item_wa-time_series_value =&lt;/P&gt;&lt;P&gt;                                       g_forecast_sub_wa-forecast_cv.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    APPEND g_time_series_item_wa TO t_time_series_item.&lt;/P&gt;&lt;P&gt;    CLEAR g_time_series_item_wa.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Call FM BAPI_PBSRVAPS_CHANGEKEYFIGVAL to change Z_CUSFU for all&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;time buckets&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  REFRESH: t_return,&lt;/P&gt;&lt;P&gt;           t_char_comb.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  SORT t_time_series_item  by TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;                              period_begin&lt;/P&gt;&lt;P&gt;                              period_end.&lt;/P&gt;&lt;P&gt;  delete adjacent duplicates from t_time_series_item&lt;/P&gt;&lt;P&gt;           comparing&lt;/P&gt;&lt;P&gt;           TIME_SERIES_ID&lt;/P&gt;&lt;P&gt;           PERIOD_BEGIN&lt;/P&gt;&lt;P&gt;           PERIOD_END.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'BAPI_PBSRVAPS_CHANGEKEYFIGVAL'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      planningbook                = c_planningbook&lt;/P&gt;&lt;P&gt;      commit_control              = 'E'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      selection                   = t_selection&lt;/P&gt;&lt;P&gt;      time_series                 = t_time_series_chg&lt;/P&gt;&lt;P&gt;      time_series_item            = t_time_series_item&lt;/P&gt;&lt;P&gt;      characteristics_combination = t_char_comb&lt;/P&gt;&lt;P&gt;      return                      = t_return.&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;If error in return table, store message in error table and attempt&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;rollback; otherwise commit&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT t_return[] IS INITIAL.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'&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;      RETURN        =&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    LOOP AT t_forecast_sub1 INTO g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;*MOD-010&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_sub_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_change_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      DELETE t_forecast_sub1.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_sub_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;      CONTINUE.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' .&lt;/P&gt;&lt;P&gt;    DESCRIBE TABLE t_forecast_sub1 LINES l_lines.&lt;/P&gt;&lt;P&gt;    g_cnt_changes = g_cnt_changes + l_lines.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;************&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;************&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_call_bapi&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  sub_format_dates&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&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;     --&amp;gt;P_L_HOLD_WA_DATE  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_CALWEEK  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_FISCPER  text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     --&amp;gt;P_L_CALMONTH  text&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 sub_format_dates USING    p_date&lt;/P&gt;&lt;P&gt;                               p_calweek&lt;/P&gt;&lt;P&gt;                               p_calweek_end&lt;/P&gt;&lt;P&gt;                               p_weekend_date&lt;/P&gt;&lt;P&gt;                               p_week_diff&lt;/P&gt;&lt;P&gt;                               p_fiscper&lt;/P&gt;&lt;P&gt;                               p_calmonth&lt;/P&gt;&lt;P&gt;                               p_calyear_start&lt;/P&gt;&lt;P&gt;                               p_calyear_end&lt;/P&gt;&lt;P&gt;                               p_start_week&lt;/P&gt;&lt;P&gt;                               p_start_week_day&lt;/P&gt;&lt;P&gt;                               p_end_week&lt;/P&gt;&lt;P&gt;                               p_end_week_day.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Local variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: l_curr_date    TYPE sydatum,  " Program Run Date&lt;/P&gt;&lt;P&gt;        l_record_date  TYPE sydatum,  " Formatted Record Date&lt;/P&gt;&lt;P&gt;        l_curr_year(2) TYPE c,        " Program Year (without century)&lt;/P&gt;&lt;P&gt;        l_curr_year_num TYPE i,       " Integer value of Program Year&lt;/P&gt;&lt;P&gt;        l_century(2)     TYPE c,      " Program Century (without year)&lt;/P&gt;&lt;P&gt;        l_century_num    TYPE i,      " Integer value of Century&lt;/P&gt;&lt;P&gt;        l_input_year_num TYPE i.      " Integer value of Record Year&lt;/P&gt;&lt;P&gt;  DATA: con_period_week type /SAPAPO/PERKZ value 'W'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Record date - format MM/DD/YY&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: BEGIN OF l_input_date,&lt;/P&gt;&lt;P&gt;          month(2)  TYPE c,&lt;/P&gt;&lt;P&gt;          filler1(1) TYPE c,&lt;/P&gt;&lt;P&gt;          day(2)     TYPE c,&lt;/P&gt;&lt;P&gt;          filler2(1) TYPE c,&lt;/P&gt;&lt;P&gt;          year(2)    TYPE c,&lt;/P&gt;&lt;P&gt;        END OF l_input_date.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: l_calweek TYPE kweek,&lt;/P&gt;&lt;P&gt;        l_fiscper TYPE /sapapo/perid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  data: l_calmonth(6) type c,&lt;/P&gt;&lt;P&gt;        l_calyear(6) type c,&lt;/P&gt;&lt;P&gt;        l_month(2) type c,&lt;/P&gt;&lt;P&gt;        l_year(4) type c,&lt;/P&gt;&lt;P&gt;        l_perid type /SAPAPO/PERID.&lt;/P&gt;&lt;P&gt;  DATA: p_calweek_start like scal-week.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  DATA: F_DATE TYPE D,&lt;/P&gt;&lt;P&gt;        L_FROMDATE  LIKE SCAL-DATE,&lt;/P&gt;&lt;P&gt;        L_TODATE    LIKE SCAL-DATE.&lt;/P&gt;&lt;P&gt;  DATA: lv_year_start(4) type c,&lt;/P&gt;&lt;P&gt;        lv_week_start(2) type c,&lt;/P&gt;&lt;P&gt;        lv_week_end(2) type c.&lt;/P&gt;&lt;P&gt;  DATA: lv_calweek_start type scal-week.&lt;/P&gt;&lt;P&gt;  DATA: lv_start_week_day type scal-date.&lt;/P&gt;&lt;P&gt;  DATA: lv_end_week_day type scal-date.&lt;/P&gt;&lt;P&gt;  DATA: lv_length type i.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  clear: l_perid.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;**MOD-006&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Data for forecast run date.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  l_record_date = sy-datum.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Use /SAPAPO/DATE_GET_WEEK, /SAPAPO/PERIOD_GET_FOR_DATE (P/JJ)... but&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;must convert to DATS format first&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;    p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;  lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;  concatenate  lv_year_start lv_week_end into p_calweek_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = p_calweek_start&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = p_start_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  p_end_week_day = p_start_week_day +  p_horz.&lt;/P&gt;&lt;P&gt;  l_record_date  = p_end_week_day.&lt;/P&gt;&lt;P&gt;  CLEAR: l_calweek.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek_end = l_calweek.&lt;/P&gt;&lt;P&gt;    p_calyear_end = l_calweek+2(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CLEAR: P_END_WEEK_DAY.&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = p_calweek_end&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = p_end_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;  Clear: lv_week_start, lv_week_end.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_start+4(2).&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_start+0(4).&lt;/P&gt;&lt;P&gt;  concatenate lv_week_start lv_year_start into p_start_week.&lt;/P&gt;&lt;P&gt;  p_calyear_start = lv_year_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_end+4(2).&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_end+0(4).&lt;/P&gt;&lt;P&gt;  concatenate  lv_week_start lv_year_start into p_end_week.&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  p_week_diff = p_calweek_end&lt;EM&gt;0(2) - p_calweek&lt;/EM&gt;0(2).&lt;/P&gt;&lt;P&gt;  condense p_week_diff.&lt;/P&gt;&lt;P&gt;  p_week_diff = ceil( p_week_diff ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-006&lt;/P&gt;&lt;P&gt;*Data for availability date.&lt;/P&gt;&lt;P&gt;  l_record_date = p_date.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Use /SAPAPO/DATE_GET_WEEK, /SAPAPO/PERIOD_GET_FOR_DATE (P/JJ)... but&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;must convert to DATS format first&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek(2)   = l_calweek+4(2).&lt;/P&gt;&lt;P&gt;    p_calweek+2(4) = l_calweek(4).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek+2(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek+0(2).&lt;/P&gt;&lt;P&gt;  lv_week_end   = lv_week_start + 1.&lt;/P&gt;&lt;P&gt;  lv_length = strlen( lv_week_end ).&lt;/P&gt;&lt;P&gt;  if lv_length &amp;lt; 2.&lt;/P&gt;&lt;P&gt;    concatenate '0' lv_week_end into lv_week_end.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CONSTANTS: C_52(2) TYPE C VALUE '52'.&lt;/P&gt;&lt;P&gt;  concatenate  lv_year_start lv_week_end into lv_calweek_start.&lt;/P&gt;&lt;P&gt;  if lv_calweek_start+4(2) &amp;gt;  c_52.&lt;/P&gt;&lt;P&gt;    lv_calweek_start+4(2) = c_52.&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'WEEK_GET_FIRST_DAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      WEEK         = lv_calweek_start&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      DATE         = lv_start_week_day&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WEEK_INVALID = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF SY-SUBRC &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO&lt;/P&gt;&lt;P&gt;         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_end_week_day = lv_start_week_day + p_horz.&lt;/P&gt;&lt;P&gt;  l_record_date = lv_end_week_day.&lt;/P&gt;&lt;P&gt;  CLEAR: l_calweek.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  CALL FUNCTION '/SAPAPO/DATE_GET_WEEK'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      date         = l_record_date&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      week         = l_calweek&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      date_invalid = 1&lt;/P&gt;&lt;P&gt;      OTHERS       = 2.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calweek_end = l_calweek.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  lv_year_start = p_calweek_end+0(4).&lt;/P&gt;&lt;P&gt;  lv_week_start = p_calweek_end+4(2).&lt;/P&gt;&lt;P&gt;  concatenate  lv_week_start lv_year_start into p_calweek_end.&lt;/P&gt;&lt;P&gt;  p_calyear_end = lv_year_start.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;  clear: l_perid.&lt;/P&gt;&lt;P&gt;  l_record_date = p_date.&lt;/P&gt;&lt;P&gt;  call function '/SAPAPO/PERIOD_GET_FOR_DATE'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      i_date      = l_record_date&lt;/P&gt;&lt;P&gt;      i_perkz     = 'M'&lt;/P&gt;&lt;P&gt;      I_PERIV     = 'K0'&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      E_PERID     = l_perid&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      WRONG_PERKZ = 1&lt;/P&gt;&lt;P&gt;      WRONG_DATE  = 2&lt;/P&gt;&lt;P&gt;      WRONG_PERIV = 3&lt;/P&gt;&lt;P&gt;      OTHERS      = 4.&lt;/P&gt;&lt;P&gt;  if sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    g_flg_error = 'X'.&lt;/P&gt;&lt;P&gt;    EXIT.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    p_calmonth(2)   = l_perid+4(2).&lt;/P&gt;&lt;P&gt;    p_calmonth+2(4) = l_perid(4).&lt;/P&gt;&lt;P&gt;    p_calyear_start = l_perid+0(4).&lt;/P&gt;&lt;P&gt;  endif.&lt;/P&gt;&lt;P&gt;*MOD-008&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ENDFORM.                    " sub_format_dates&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  validate_locmap&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;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      text&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; --&amp;gt;  p1        text&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; &amp;lt;--  p2        text&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 validate_locmap .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;Convert SAP Location Code to APO Location&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;  if not t_forecast_data[] is initial.&lt;/P&gt;&lt;P&gt;    READ TABLE t_forecast_data into g_forecast_data_wa index 1.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE locno FROM /sapapo/locmap&lt;/P&gt;&lt;P&gt;      INTO g_forecast_data_wa-r3_loc&lt;/P&gt;&lt;P&gt;     WHERE ext_locno = p_dist&lt;/P&gt;&lt;P&gt;       AND loctype   = c_loctype&lt;/P&gt;&lt;P&gt;       AND LOGQS     = c_logqs.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING g_forecast_data_wa TO g_error_data_wa.&lt;/P&gt;&lt;P&gt;      g_error_data_wa-error_type = c_r3_loc_error.&lt;/P&gt;&lt;P&gt;      APPEND g_error_data_wa TO t_error_data.&lt;/P&gt;&lt;P&gt;      CLEAR g_error_data_wa.&lt;/P&gt;&lt;P&gt;      CLEAR g_forecast_data_wa.&lt;/P&gt;&lt;P&gt;      ADD 1 TO g_cnt_error_recs.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;*MOD-011&lt;/P&gt;&lt;P&gt;ENDFORM.                    " validate_locmap&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Feb 2008 07:32:19 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351475#M803927</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-02-04T07:32:19Z</dc:date>
    </item>
    <item>
      <title>Re: BAPI_PBSRVAPS_GETDETAIL2</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351476#M803928</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;There are 2 things i would like to share with you... &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The Bapi's used in the code i guess are obsolete now and BAPI_PBSRVAPS_GETDETAIL2 is the current one. similarly for CHANGE_KEY_FIGVAL2 as well.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That apart, even if you are using the older one, it should still be fetching the values that you need. One thing I observe from the code is (could not go thru the entire code) you are using a READ statement to extract you key id. I could not find the place where you are actually coming at that read statement again to read your second value (maybe i missed it as the code was huge on long).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Things you could do to solve the problem...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;READ at the key_figure_item table. With the key figure id you get read the Key figure table. This way you can be sure that you do not miss any of the key figures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;P.S. Another good practice is to sort the internal table based on the key field and READ that table using BINARY SEARCH, this will also make the read faster.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Mani&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Feb 2008 08:48:41 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/bapi-pbsrvaps-getdetail2/m-p/3351476#M803928</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2008-02-04T08:48:41Z</dc:date>
    </item>
  </channel>
</rss>

