FM CONVERSION_EXIT_MATN1_INPUT

i have matnr 22-222-222, i made this FUNC and i get new number, i want to compare the matnr <b>before</b> the func and to the matnr <b>after</b> the FUNC
loop at itab.
loop at itab1 matnrB = itab-marnrA.
how i can do it,
endloop.
endloop.

Hi,
SORT ITAB BY MARNRA.
LOOP at ITAB.
   READ TABLE ITAB1 WITH KEY MATNRB = ITAB-MARNRA BINARY
                                                 SEARCH.
- sravan

Similar Messages

  • CONVERSION_EXIT_MATN1_INPUT is not working!

    Hello
    I am using to convert material number from external format to internal format in order to pad leading zeros to the material number, am using CONVERSION_EXIT_MATN1_INPUT, but dont know why its not working if the IMPORT matnr length is 9
    1) If IMPORT material is '12345678' (length is 8) - is working fine and am getting 000000000012345678
    2) If IMPORT material is '123456789' (length is 9) - is NOT working! am getting error message "The material number is longer than the length set" pls. let me know the reason and fix pls.
    Thank you

    Thank you
    I saw 'Material No. Length' field is populated with 8 in OMSL tx.
    But, i saw CHAR18 as in TNRO table for 'Number length domain' field
    Pls. let me know that issue is because of OMSL's 8?
    If so, then i have to pad zeros as prefix MANUALLY by logic in the prog. in order to make it to 18 length?

  • "ASSIGN not allowed for substrings" error in CONVERSION_EXIT_MATN1_INPUT

    Hi,
    I have a custom function module Z_CONVERT_VALUE_TO_INTERNAL that converts an external value to an internal value - it has a data-element parameter.
    When I use this function module for the data element MATNR, it calls the standard function module CONVERSION_EXIT_MATN1_INPUT, which then causes a short dump at this line of code:
    ASSIGN INPUT(LNG_E) TO <E_PTR>.      "->Eingabe
    The short dump says "ASSIGN not allowed for substrings", and the runtime error is ASSIGN_SUBSTRING_NOT_ALLOWED.
    Any explanation?  Does this line of code work in some circumstances?
    Thanks,
    John

    I've found the explanation.
    For both the function modules above, the input parameter for the external value has no type specified.
    It appears therefore that the type is inherited from the calling program.
    As my calling program was passing the external value in a variable of type STRING, the value was also being passed to CONVERSION_EXIT_MATN1_INPUT as type STRING.
    Hence the error "ASSIGN not allowed for substrings".
    When I changed the type of the variable to character (TYPE C), that solved it.

  • CONVERSION_EXIT_MATN1_INPUT

    ihave
    matnr = '3al78830aa'
    i use this FM and it's not making convert
    so this
    SELECT SINGLE * FROM MARA
    WHERE  MATNR = MATNR.
    dont work
    idea???

    hey declare variable v_matnr ........
    parameter: p_matnr like mara-matnr default   '3al78830aa'.
    data: v_matnr type mara-matnr.
    then write u r select single
    SELECT SINGLE matnr  FROM MARA into v_matnr
    WHERE MATNR = p_matnr.
    reward points if helpful......
    Message was edited by:
            raam

  • RE : Creation of subcontrating PO - Components details

    Hi Experts,
    I am doing a subcontracting purchase order using BAPI - (Bapi_po_create1). But iam not able to update for the sub components of the materials. So, I opted for the PO creation first using Bapi_po_create1 and then using the FM Bapi_po_change iam changing the sub component details in the structure POCOMPONENTS available. PO is created successfully But still its not getting updated with subcontract details instead the system is bringing some standard values in the place of mat no., quantity, price , unit. but the return message is "Pur order changed".
    Note: For PO change iam passing the PO number generated above and the component details alone. That didnt work. Then I passed the header, Item and schedule details too still the same not geting updated but PO created.
    Please suggest.
    Thanks,
    Karthikeyan.

    Hi Karthi
    Use the below code
    loop at itab1.
    Reset values for next row
        if itab1-row ne gd_currentrow.
          append tab .
          clear tab.
          gd_currentrow = itab1-row.
        endif.
        case itab1-col.
          when '0001'. "PGNAM
            TAB-CO_CODE = itab1-value.
          when '0002'. "RONAM
            TAB-DOC_TYPE = itab1-value.
          when '0003'. "JVLEVEL
            TAB-DOC_DATE = itab1-value.
          when '0004'. "FTTYPE
            TAB-PURCH_ORG = itab1-value.
          when '0005'. "LANG
            TAB-PUR_GROUP =  itab1-value.
          when '0006'. "LTEXT
            TAB-VENDOR = itab1-value.
          when '0007'. "LTEXT
            TAB-PMNTTRMS = itab1-value.
          when '0008'. "LTEXT
            TAB-PO_ITEM = itab1-value.
          when '0009'. "LTEXT
            TAB-sched_line = itab1-value.
          when '0010'. "FTTYPE
            TAB-ACCTASSCAT = itab1-value.
          when '0011'. "FTTYPE
            TAB-ITEM_CAT = itab1-value.
          when '0012'. "FTTYPE
            TAB-MATERIAL = itab1-value.
          when '0013'. "FTTYPE
            TAB-QUANTITY = itab1-value.
          when '0014'. "FTTYPE
            TAB-UNIT  = itab1-value.
          when '0015'. "FTTYPE
           shift itab1-value left deleting leading space.
            TAB-DELIV_DATE = itab1-value.
          when '0016'. "FTTYPE
            TAB-NET_PRICE = itab1-value.
          when '0017'. "FTTYPE
            TAB-ORDERPR_UN = itab1-value.
          when '0018'. "FTTYPE
            TAB-PLANT = itab1-value.
          when '0019'. "FTTYPE
            TAB-STORE_LOC = itab1-value.
             when '0020'. "FTTYPE
            TAB-batch = itab1-value.
             when '0021'. "FTTYPE
            TAB-SD_DOC = itab1-value.
             when '0022'. "FTTYPE
            TAB-SDOC_ITEM = itab1-value.
             when '0023'. "FTTYPE
            TAB-MATERIAL1 = itab1-value.
             when '0024'. "FTTYPE
            TAB-PLANT1 = itab1-value.
             when '0025'. "FTTYPE
            TAB-QUANTITY1 = itab1-value.
             when '0026'. "FTTYPE
            TAB-UNIT1 = itab1-value.
        endcase.
      endloop.
      append tab.
      clear tab.
    sort tab by PO_ITEM sched_line.
    DELETE TAB WHERE PO_ITEM = SPACE.
    DELETE TAB WHERE sched_line = SPACE.
    loop at tab.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = tab-material
          IMPORTING
            OUTPUT = tab-material.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = tab-material1
          IMPORTING
            OUTPUT = tab-material1.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
          EXPORTING
            INPUT  = tab-vendor
          IMPORTING
            OUTPUT = tab-vendor.
      concatenate tab-doc_DATE4(4) tab-doc_DATE2(2) tab-doc_DATE+0(2) into tab-doc_DATE.
      concatenate tab-DELIV_DATE4(4) tab-DELIV_DATE2(2) tab-DELIV_DATE+0(2) into tab-DELIV_DATE.
    header-comp_code    = TAB-CO_CODE.
    header-doc_type     = TAB-DOC_TYPE.
    header-DOC_DATE     = tab-doc_DATE.
    header-creat_date   = sy-datum.
    header-item_intvl   = '10'.
    header-vendor       = TAB-VENDOR.
    header-GR_MESSAGE   = 'X'.
    header-langu        = sy-langu.
    header-pmnttrms     = TAB-PMNTTRMS.
    header-purch_org    = TAB-PURCH_ORG.
    header-pur_group    = TAB-PUR_GROUP.
    header-currency     = 'INR'.
    headerx-comp_code   = c_x.
    headerx-doc_type    = c_x.
    header-DOC_DATE     = c_x.
    headerx-creat_date  = c_x.
    headerx-item_intvl  = c_x .
    headerx-vendor      = c_x.
    headerx-GR_MESSAGE  = c_x.
    headerx-langu       = c_x.
    headerx-pmnttrms    = c_x .
    headerx-purch_org   = c_x.
    headerx-pur_group   = c_x.
    headerx-currency    =  c_x.
    *p_int = p_int + 10.
    wa_item-po_item     = TAB-PO_ITEM.
    wa_item-ACCTASSCAT  = TAB-ACCTASSCAT.
    wa_item-ITEM_CAT    = TAB-ITEM_CAT.
    p_matnr = TAB-MATERIAL.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
    input = p_matnr
    IMPORTING
    output = p_matnr
    EXCEPTIONS
    length_error = 1
    OTHERS = 2.
    wa_item-material    = p_matnr.
    wa_item-PO_UNIT     = TAB-UNIT.
    wa_item-plant       = TAB-PLANT.
    wa_item-stge_loc    = TAB-STORE_LOC.
    wa_item-quantity    = TAB-QUANTITY.
    wa_item-NET_PRICE   = TAB-NET_PRICE.
    wa_item-BATCH       = TAB-BATCH.
    wa_item-conf_ctrl   = ''.
    wa_item-ACKN_REQD   = ''.
    WA_ITEM-ERS = ''.
    APPEND wa_item TO it_item.
    wa_itemx-po_item     = TAB-PO_ITEM.
    wa_itemx-ACCTASSCAT  = c_x.
    wa_itemx-ITEM_CAT    = c_x.
    wa_itemx-material    = c_x.
    wa_itemx-PO_UNIT     = c_x.
    wa_itemx-plant       = c_x .
    wa_itemx-stge_loc    = c_x .
    wa_itemx-quantity    = c_x .
    wa_itemx-item_cat    = c_x .
    wa_itemx-acctasscat  = c_x .
    wa_itemx-NET_PRICE   = c_x .
    wa_itemx-BATCH       = c_x .
    wa_itemx-conf_ctrl   = 'X'.
    wa_itemx-ACKN_REQD   = 'X'.
    WA_ITEMX-ERS         = 'X'.
    APPEND wa_itemx TO it_itemx.
    wa_POSCHEDULE-PO_ITEM       = TAB-PO_ITEM.
    wa_POSCHEDULE-SCHED_LINE    = TAB-sched_line.
    wa_POSCHEDULE-DELIVERY_DATE = TAB-DELIV_DATE.
    wa_POSCHEDULE-QUANTITY      = TAB-QUANTITY.
    APPEND wa_POSCHEDULE TO it_POSCHEDULE.
    wa_POSCHEDULEx-PO_ITEM       = TAB-PO_ITEM.
    wa_POSCHEDULEx-SCHED_LINE    = TAB-sched_line.
    wa_POSCHEDULEx-DELIVERY_DATE = c_x.
    wa_POSCHEDULEx-QUANTITY      = c_x.
    APPEND wa_POSCHEDULEx TO it_POSCHEDULEx.
    wa_IMEPOACCOUNT-PO_ITEM      = TAB-PO_ITEM.
    wa_IMEPOACCOUNT-SERIAL_NO    = TAB-sched_line.
    wa_IMEPOACCOUNT-SD_DOC       = TAB-SD_DOC.
    wa_IMEPOACCOUNT-ITM_NUMBER   = TAB-SDOC_ITEM.
    APPEND wa_IMEPOACCOUNT TO it_IMEPOACCOUNT.
    wa_IMEPOACCOUNTX-PO_ITEM     = TAB-PO_ITEM.
    wa_IMEPOACCOUNTX-SERIAL_NO   = TAB-sched_line.
    wa_IMEPOACCOUNTX-SD_DOC      = c_x .
    wa_IMEPOACCOUNTX-ITM_NUMBER  = c_x .
    APPEND wa_IMEPOACCOUNTX TO it_IMEPOACCOUNTX.
    wa_POCOMPONENT-PO_ITEM      = TAB-PO_ITEM.
    wa_POCOMPONENT-SCHED_LINE   = TAB-sched_line.
    wa_POCOMPONENT-ITEM_NO      = TAB-sched_line.
    p_matnr1                    = TAB-MATERIAL1.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
    input = p_matnr1
    IMPORTING
    output = p_matnr1
    EXCEPTIONS
    length_error = 1
    OTHERS = 2.
    wa_POCOMPONENT-MATERIAL       = p_matnr1.
    wa_POCOMPONENT-ENTRY_QUANTITY = TAB-QUANTITY1.
    wa_POCOMPONENT-PLANT          = TAB-PLANT1.
    wa_POCOMPONENT-CHANGE_ID      = 'I'.
    APPEND wa_POCOMPONENT TO it_POCOMPONENT.
    wa_POCOMPONENTX-PO_ITEM        = TAB-PO_ITEM.
    wa_POCOMPONENTX-SCHED_LINE     = TAB-sched_line.
    wa_POCOMPONENTX-ITEM_NO        = TAB-sched_line.
    wa_POCOMPONENTX-MATERIAL       = c_x.
    wa_POCOMPONENTX-ENTRY_QUANTITY = c_x.
    wa_POCOMPONENTX-PLANT          = c_x.
    wa_POCOMPONENTx-CHANGE_ID      = c_x.
    APPEND wa_POCOMPONENTX TO it_POCOMPONENTX.
      endloop.
    CALL FUNCTION 'BAPI_PO_CREATE1'
    EXPORTING
    poheader = header
    poheaderx = headerx
    IMPORTING
    exppurchaseorder = p_pono
    TABLES
    return = return
    poitem = it_item
    poitemx = it_itemx
    POSCHEDULE = it_POSCHEDULE
    POSCHEDULEx = it_POSCHEDULEx
    POACCOUNT = it_IMEPOACCOUNT
    POACCOUNTX = it_IMEPOACCOUNTX
    POCOMPONENTS = It_POCOMPONENT
    POCOMPONENTSX = It_POCOMPONENTX.

  • Gui_upload

    Hi  i have  one zprogram, it is written for to get the data from application server ,
    now i need to change the code to take the file from local drive.
    here iam giving the code ,could any one help me in this.
    INCLUDE zppiforecasttop.
    INCLUDE zppiforecastf01.
    SELECTION SCREEN EVENTS
    *Check the splitting rules against source file format
    AT SELECTION-SCREEN ON RADIOBUTTON GROUP r4.
    IF rb_spmon = 'X' AND rb_week = 'X'.
    MESSAGE e005(z1) WITH text-t13.
    ENDIF.
    IF rb_spday <> 'X' AND rb_daily = 'X'.
    MESSAGE e005(z1) WITH text-t14.
    ENDIF.
    F4 value help on filename field
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
    CLEAR: w_choice, t_filelist.
    REFRESH: t_filelist.
    w_proc = 'proc'.
    w_txt = 'txt'.
    get and open logical filename
    CALL FUNCTION 'FILE_GET_NAME'
    EXPORTING
    logical_filename = p_lognam
    parameter_1 = i_para_1
    parameter_2 = i_para_2
    parameter_3 = i_para_3
    IMPORTING
    file_name = w_dir
    EXCEPTIONS
    file_not_found = 1
    OTHERS = 2.
    IF sy-subrc NE 0.
    MESSAGE e005(z1) WITH text-t18.
    ENDIF.
    CALL FUNCTION 'EPS_GET_DIRECTORY_LISTING'
    EXPORTING
    dir_name = w_dir
    file_mask = '.'
    TABLES
    dir_list = t_files
    EXCEPTIONS
    invalid_eps_subdir = 1
    sapgparam_failed = 2
    build_directory_failed = 3
    no_authorization = 4
    read_directory_failed = 5
    too_many_read_errors = 6
    empty_directory_list = 7
    OTHERS = 8.
    *If the return code is not 0 exit from event
    IF sy-subrc <> 0.
    EXIT.
    ELSE.
    *Loop at list of files and convert to display format
    LOOP AT t_files.
    only show processed files with filename 'proc'
    SEARCH t_files-name FOR w_proc.
    IF sy-subrc = 0.
    t_filelist-name = t_files-name.
    t_filelist-size = t_files-size.
    APPEND t_filelist.
    ENDIF.
    only show processed files with filename 'txt'
    SEARCH t_files-name FOR w_txt.
    IF sy-subrc = 0.
    t_filelist-name = t_files-name.
    t_filelist-size = t_files-size.
    APPEND t_filelist.
    ENDIF.
    ENDLOOP.
    IF t_filelist[] IS INITIAL.
    EXIT.
    ENDIF.
    ENDIF.
    *Display list of available files in a popup screen
    CALL FUNCTION 'POPUP_WITH_TABLE_DISPLAY'
    EXPORTING
    endpos_col = '100'
    endpos_row = '23'
    startpos_col = '10'
    startpos_row = '5'
    titletext = 'Select File'
    IMPORTING
    choise = w_choice
    TABLES
    valuetab = t_filelist
    EXCEPTIONS
    break_off = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    READ TABLE t_filelist INDEX w_choice.
    CONCATENATE w_dir t_filelist-name INTO p_file.
    ELSE.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Start of Selection
    START-OF-SELECTION.
    *Check that the filetype corresponds to the selection
    PERFORM check_file.
    *Upload the file by resolving logical filename.
    PERFORM upload_file.
    *Depending on the selection criteria, alter the input data into the
    *desired format and store.
    PERFORM populate_post_split_table.
    *Build the idoc of type SOPGEN01
    PERFORM post_idoc.
    Rename the file extension from '.txt' to '*.proc_yyyymmdd', if
    *reprocessing a file do nothing
    SEARCH p_file FOR '*txt'.
    IF sy-subrc = 0.
    PERFORM rename_file.
    ENDIF.
    End of Selection
    END-OF-SELECTION.
    *Output error report
    PERFORM error_report.
    Top of Page
    TOP-OF-PAGE.
    PERFORM top_of_page.
    &#9668;.........this is the first include........................
    &#9668;----
    INCLUDE ZPPIFORECASTTOP *
    TABLES
    TABLES: marc, "Plant Data for Material
    marm, "Units of Measure for Material
    edidd, "Data record (IDoc)
    edidc, "Control Segment
    e1lipm0, "General characteristic segment
    e1lipv0, "General version segment
    e1lipp0. "Performance measure segment
    SELECTION SCREEN
    SELECTION-SCREEN BEGIN OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t01.
    PARAMETERS: rb_1000 RADIOBUTTON GROUP r1 DEFAULT 'X',
    rb_1005 RADIOBUTTON GROUP r1.
    SELECTION-SCREEN END OF BLOCK b2.
    SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-t02.
    PARAMETERS: rb_mgx RADIOBUTTON GROUP r2 DEFAULT 'X',
    rb_other RADIOBUTTON GROUP r2.
    SELECTION-SCREEN END OF BLOCK b3.
    SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE text-t03.
    PARAMETERS: rb_month RADIOBUTTON GROUP r3 DEFAULT 'X',
    rb_week RADIOBUTTON GROUP r3,
    rb_daily RADIOBUTTON GROUP r3.
    SELECTION-SCREEN END OF BLOCK b4.
    SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME TITLE text-t04.
    PARAMETERS: rb_spmon RADIOBUTTON GROUP r4 DEFAULT 'X',
    rb_spwk RADIOBUTTON GROUP r4,
    rb_spday RADIOBUTTON GROUP r4.
    SELECTION-SCREEN END OF BLOCK b5.
    SELECT-OPTIONS: so_datum FOR sy-datum, " (Planning time horizon)
    so_matnr FOR marc-matnr. " (Material Master)
    PARAMETERS: p_lognam LIKE filenameci-fileintern
    DEFAULT 'ZPPIFORECAST_FILENAME' NO-DISPLAY,
    p_file LIKE rlgrap-filename OBLIGATORY. "(Input file)
    SELECTION-SCREEN END OF BLOCK b1.
    TYPES
    TYPES: BEGIN OF workdate,
    datum LIKE sy-datum,
    day TYPE p,
    workday(1) TYPE c,
    END OF workdate.
    TYPES: BEGIN OF postsplit.
    INCLUDE STRUCTURE zppiforecast.
    TYPES: fromdat LIKE sy-datum,
    todat LIKE sy-datum,
    split_date LIKE sy-datum,
    split_value(10) TYPE c,
    flg_noscp(1) TYPE c,
    END OF postsplit.
    TYPES: BEGIN OF exception.
    INCLUDE STRUCTURE zppiforecast.
    TYPES: docnum TYPE docnum,
    message TYPE edi_statx_,
    END OF exception.
    TYPES: BEGIN OF filelist,
    name TYPE epsfilnam,
    size(10) TYPE c,
    END OF filelist.
    DATA
    DATA: t_files TYPE TABLE OF epsfili INITIAL SIZE 0 WITH HEADER LINE,
    i_file TYPE TABLE OF zppiforecast INITIAL SIZE 0 WITH HEADER LINE,
    t_exception TYPE TABLE OF exception INITIAL SIZE 0
    WITH HEADER LINE,
    i_post_split TYPE TABLE OF postsplit INITIAL SIZE 0
    WITH HEADER LINE,
    t_workdates TYPE TABLE OF workdate INITIAL SIZE 0
    WITH HEADER LINE,
    t_filelist TYPE TABLE OF filelist INITIAL SIZE 0 WITH HEADER LINE.
    DATA: t_edidc TYPE TABLE OF edidc INITIAL SIZE 0 WITH HEADER LINE,
    t_edidd TYPE TABLE OF edidd INITIAL SIZE 0 WITH HEADER LINE,
    t_edids TYPE TABLE OF edids INITIAL SIZE 0 WITH HEADER LINE.
    DATA: w_choice TYPE sy-tabix, "Index of chosen file
    w_line(100), "100 character string
    w_dir LIKE epsf-epsdirnam, "Directory path
    w_hiper LIKE t445p-hiper, "Forecast lower limit
    w_fuper LIKE t445p-fuper, "Forecast upper limit
    w_count TYPE i, "Counter
    w_total TYPE i, "Total
    w_start LIKE sy-datum, "Start date in the range
    w_end LIKE sy-datum, "End date in the range
    w_date LIKE sy-datum, "Curent Date
    w_first LIKE sy-datum, "First working date in range
    w_flg_noscp(1) TYPE c, "No SCP UoM flag
    w_days TYPE butag, "No of days
    w_day TYPE p, "Day of the week indicator
    w_value LIKE zppiforecast-value, "Record Value
    w_post_split TYPE postsplit, "Work area for post split table line
    w_docnum LIKE edidc-docnum, "IDOC number
    w_docnum_no_zero LIKE w_docnum, " IDOC number wthout zeros
    w_statva LIKE stacust-statva,
    w_error(1) TYPE c,
    w_matnr TYPE matnr,
    w_tabix TYPE sytabix,
    w_messg TYPE message,
    w_msgln TYPE i,
    w_todat LIKE sy-datum,
    w_fromdat LIKE sy-datum,
    w_lines TYPE i,
    w_count_idoc_errors TYPE i,
    w_count_recs_uploaded TYPE i,
    w_count_idoc_posted TYPE i.
    DATA: w_proc(4) TYPE c.
    DATA: w_txt(4) TYPE c.
    DATA: logsys LIKE tbdls-logsys.
    CONSTANTS
    CONSTANTS: c_uom LIKE marm-meinh VALUE 'SCP', "Unit of measure
    c_delim TYPE x VALUE '09',
    c_type LIKE rlgrap-filetype VALUE 'DAT',
    c_werks_1000 LIKE marc-werks VALUE '1000',
    c_werks_1005 LIKE marc-werks VALUE '1005',
    c_pltyp_805 LIKE t445p-sctyp VALUE 'Z_805',
    c_pltyp_810 LIKE t445p-sctyp VALUE 'Z_810',
    c_mestyp_805 TYPE edi_mestyp VALUE 'LIP805',
    c_mestyp_810 TYPE edi_mestyp VALUE 'LIP810',
    c_rcvprt TYPE edi_rcvprt VALUE 'LS',
    c_sndprn TYPE edi_sndprn VALUE 'WEBM_LS',
    c_sndprt TYPE edi_sndprt VALUE 'LS'.
    &#9668;..............this is the second include.................
    &#9668;----
    INCLUDE ZPPIFORECASTF01 *
    *& Form upload_file
    form upload_file.
    data: w_matnr like mara-matnr,
    w_datum like sy-datum.
    *Open file in read mode
    open dataset p_file for input in text mode.
    if sy-subrc = 0.
    do.
    clear: t_exception.
    *Read line of data into text string variable
    read dataset p_file into w_line.
    *If successful. append the internal file table
    if sy-subrc = 0.
    add 1 to w_count_recs_uploaded.
    *Split the string at delimiter into internal file table
    split w_line at c_delim into i_file-matnr
    i_file-datum
    i_file-value.
    call function 'CONVERSION_EXIT_MATN1_INPUT'
    exporting
    input = i_file-matnr
    importing
    output = w_matnr
    exceptions
    length_error = 1
    others = 2.
    i_file-index = sy-index.
    *Check that the date is in the correct format.
    call function 'CONVERT_DATE_TO_INTERN_FORMAT'
    exporting
    datum = i_file-datum
    dtype = 'DATS'
    importing
    error = w_error
    idate = i_file-datum
    messg = w_messg
    msgln = w_msgln.
    *If an error has occurred write entry to error table, otherwise append
    *record list
    if not w_error is initial.
    t_exception = i_file.
    t_exception-message = text-006.
    append t_exception.
    else.
    check i_file-datum in so_datum.
    append i_file.
    endif.
    else.
    exit.
    endif.
    enddo.
    else.
    message w005(z1) with 'File ' p_file ' cannot be opened'.
    endif.
    *Close the file
    close dataset p_file.
    endform. " upload_file
    *& Form process_monthly
    form process_monthly.
    data: w_mm type bumon,
    w_yyyy type bdatj.
    w_mm = i_file-datum+4(2).
    w_yyyy = i_file-datum(4).
    *Get the number of days in the month
    call function 'NUMBER_OF_DAYS_PER_MONTH_GET'
    exporting
    par_month = w_mm
    par_year = w_yyyy
    importing
    par_days = w_days.
    *Set date variable to first day
    w_date = i_file-datum.
    *Get the first working day in the month
    perform get_first_day.
    *Set date variable to last day in the month
    w_date = i_file-datum + w_days - 1.
    *Get the last working day in the month
    perform get_last_day.
    *Populate the post split table with monthly value
    i_post_split-split_value = w_value.
    i_post_split-matnr = i_file-matnr.
    i_post_split-fromdat = w_fromdat.
    i_post_split-todat = w_todat.
    i_post_split-datum = i_file-datum.
    i_post_split-value = i_file-value.
    i_post_split-index = i_file-index.
    i_post_split-split_date = i_file-datum.
    i_post_split-flg_noscp = w_flg_noscp.
    append i_post_split.
    endform. " process_monthly
    *& Form check_material
    form check_material using value(plant) value(pltyp).
    *Check that the material plant combination exists
    select single matnr from marc into w_matnr
    where matnr = i_file-matnr
    and werks = plant.
    *Check return code, if no record found, write to error table and delete
    if sy-subrc <> 0.
    w_tabix = sy-tabix.
    t_exception = i_file.
    t_exception-message = text-001.
    append t_exception.
    delete i_file index w_tabix.
    w_error = 'X'.
    exit.
    endif.
    Start DEVK931385
    if plant = c_werks_1000. "DEVK931385
    *Check that the material exists in the infotype hierarchy
    select single matnr from s805e into w_matnr where ssour = space
    and werks = plant
    and matnr = i_file-matnr.
    else. "DEVK931385
    *Check that the material exists in the infotype hierarchy S810e
    select single matnr from s810e into w_matnr where ssour = space
    and werks = plant
    and matnr = i_file-matnr.
    endif. "DEVK931385
    End DEVK931385
    if sy-subrc <> 0.
    w_tabix = sy-tabix.
    t_exception = i_file.
    t_exception-message = text-006.
    append t_exception.
    delete i_file index w_tabix.
    w_error = 'X'.
    exit.
    endif.
    *Get the forcast limits from info structure
    select single hiper fuper from t445p into (w_hiper, w_fuper)
    where sctyp = pltyp.
    *Determine start and end limits for forecasting based on current date
    w_start = sy-datum - w_hiper.
    Start DEVK931340
    w_end = sy-datum + w_fuper. "DEL
    w_end = sy-datum + ( ( w_fuper * 7 ) / 5 ).
    END DEVK931340
    endform. " check_material
    12:33:06 PM&#9668;&----
    *& Form process_weekly
    form process_weekly.
    data: w_mm type bumon,
    w_yyyy type bdatj.
    clear: w_total.
    w_date = i_file-datum.
    w_mm = i_file-datum+4(2).
    w_yyyy = i_file-datum(4).
    *If the souce file is in monthly format
    if rb_month = 'X'.
    *Get the number of days in the current month
    call function 'NUMBER_OF_DAYS_PER_MONTH_GET'
    exporting
    par_month = w_mm
    par_year = w_yyyy
    importing
    par_days = w_days.
    *Set date variable to last day in the month
    w_date = i_file-datum + w_days - 1.
    *Get the last working day in the month
    perform get_last_day.
    *Set date variable to first day
    w_date = i_file-datum.
    *Get the first working day in the month
    perform get_first_day.
    else.
    *Otherwise set for days in week
    w_days = 7.
    endif.
    do w_days times.
    *Clear the table of workdates
    clear: t_workdates.
    *Check if the day is a working day
    call function 'DATE_CHECK_WORKINGDAY'
    exporting
    date = w_date
    factory_calendar_id = 'GB'
    message_type = 'I'
    exceptions
    date_after_range = 1
    date_before_range = 2
    date_invalid = 3
    date_no_workingday = 4
    others = 5.
    *If successful, set the workday flag to (Y)es
    if sy-subrc = 0.
    t_workdates-datum = w_date.
    t_workdates-workday = 'Y'.
    *Increment the counter for total number of workdays
    add 1 to w_total.
    else.
    *Otherwise (N)o
    t_workdates-datum = w_date.
    t_workdates-workday = 'N'.
    endif.
    *Get the day in the week of the current date, (1 = Monday, 7 = Sunday)
    call function 'DAY_IN_WEEK'
    exporting
    datum = w_date
    importing
    wotnr = t_workdates-day.
    append t_workdates.
    add 1 to w_date.
    enddo.
    loop at t_workdates.
    *If the day is a workday
    if t_workdates-workday = 'Y'.
    *If the fromdate is blank, set to current date in loop (first working
    *day)
    if i_post_split-fromdat is initial.
    i_post_split-fromdat = t_workdates-datum.
    i_post_split-split_date = t_workdates-datum.
    endif.
    *Set variable to pick up last working date
    i_post_split-todat = t_workdates-datum.
    *Increment loop counter
    add 1 to w_count.
    endif.
    *If the day is a Sunday
    if ( ( t_workdates-day = 7 or t_workdates-datum+6(2) = w_days )
    and w_count <> 0 ).
    *Poplulate the post split table
    if rb_month = 'X'.
    i_post_split-fromdat = w_fromdat.
    i_post_split-todat = w_todat.
    endif.
    i_post_split-matnr = i_file-matnr.
    i_post_split-datum = i_file-datum.
    i_post_split-value = i_file-value.
    i_post_split-index = i_file-index.
    i_post_split-split_value = ( ( w_value / w_total ) * w_count ).
    i_post_split-flg_noscp = w_flg_noscp.
    append i_post_split.
    clear: w_count,
    i_post_split.
    endif.
    endloop.
    endform. " process_weekly
    *& Form get_first_day
    form get_first_day.
    do w_days times.
    call function 'DATE_CHECK_WORKINGDAY'
    exporting
    date = w_date
    factory_calendar_id = 'GB'
    message_type = 'I'
    exceptions
    date_after_range = 1
    date_before_range = 2
    date_invalid = 3
    date_no_workingday = 4
    others = 5.
    if sy-subrc = 0.
    w_fromdat = w_date.
    exit.
    endif.
    add 1 to w_date.
    enddo.
    endform. " get_first_day
    *& Form get_last_day
    form get_last_day.
    do w_days times.
    call function 'DATE_CHECK_WORKINGDAY'
    exporting
    date = w_date
    factory_calendar_id = 'GB'
    message_type = 'I'
    exceptions
    date_after_range = 1
    date_before_range = 2
    date_invalid = 3
    date_no_workingday = 4
    others = 5.
    if sy-subrc = 0.
    w_todat = w_date.
    exit.
    endif.
    subtract 1 from w_date.
    enddo.
    endform. " get_last_day
    12:33:30 PM&#9668;
    *& Form process_daily
    form process_daily.
    data: w_mm type bumon,
    w_yyyy type bdatj,
    new_w_date like w_date.
    clear: w_total.
    w_mm = i_file-datum+4(2).
    w_yyyy = i_file-datum(4).
    w_date = i_file-datum.
    if rb_month = 'X'.
    *Get the number of days in the current month
    call function 'NUMBER_OF_DAYS_PER_MONTH_GET'
    exporting
    par_month = w_mm
    par_year = w_yyyy
    importing
    par_days = w_days.
    *If the source file is in weekly format set to days in week
    elseif rb_week = 'X'.
    w_days = 7.
    else.
    *If source file is daily, set to day
    w_days = 1.
    endif.
    do w_days times.
    clear: t_workdates.
    *Check the current day is a workday
    call function 'DATE_CHECK_WORKINGDAY'
    exporting
    date = w_date
    factory_calendar_id = 'GB'
    message_type = 'I'
    exceptions
    date_after_range = 1
    date_before_range = 2
    date_invalid = 3
    date_no_workingday = 4
    others = 5.
    *If successful, set workday flag to (Y)es and append workday table
    if sy-subrc = 0.
    t_workdates-datum = w_date.
    t_workdates-workday = 'Y'.
    append t_workdates.
    *Increment total
    add 1 to w_total.
    START PKA01
    else.
    Add 1 to w_date and w_days to make it loop again until a the next work
    day is found!!!!!
    END PKA01
    if rb_daily = 'X'.
    new_w_date = w_date.
    while new_w_date ne ''.
    add 1 to new_w_date.
    *Check the current day is a workday
    call function 'DATE_CHECK_WORKINGDAY'
    exporting
    date = new_w_date
    factory_calendar_id = 'GB'
    message_type = 'I'
    exceptions
    date_after_range = 1
    date_before_range = 2
    date_invalid = 3
    date_no_workingday = 4
    others = 5.
    if sy-subrc = 0.
    t_workdates-datum = new_w_date.
    t_workdates-workday = 'Y'.
    append t_workdates.
    add 1 to w_total.
    exit.
    endif.
    endwhile.
    endif.
    endif.
    *Increment date
    add 1 to w_date.
    enddo.
    *Get the number of workdays in the period
    describe table t_workdates lines w_lines.
    *Get the first entry in the table
    read table t_workdates index 1.
    w_fromdat = t_workdates-datum.
    *Get the last entry in the table
    read table t_workdates index w_lines.
    w_todat = t_workdates-datum.
    loop at t_workdates.
    *Populate the post split table
    i_post_split-fromdat = w_fromdat.
    i_post_split-todat = w_todat.
    i_post_split-split_date = t_workdates-datum.
    i_post_split-matnr = i_file-matnr.
    i_post_split-datum = i_file-datum.
    i_post_split-value = i_file-value.
    i_post_split-index = i_file-index.
    i_post_split-split_value = w_value / w_total.
    i_post_split-flg_noscp = w_flg_noscp.
    START PKA01
    For daily sorce data which is split daily check that an entry doesnt
    already exist in the post split table for this date - only the fromdat
    is checked because for daily split fromdat = todat
    read table i_post_split into w_post_split
    with key matnr = i_file-matnr
    fromdat = i_file-datum
    split_date = t_workdates-datum.
    if sy-subrc = 0.
    ...an entry exist so add the new value to the existing one and update
    the table record
    i_post_split-split_value = i_post_split-split_value +
    w_post_split-split_value.
    append i_post_split.
    MODIFY i_post_split from w_post_split index sy-tabix.
    else.
    END PKA01
    append i_post_split.
    START PKA01
    endif.
    END PKA01
    endloop.
    endform. " process_daily
    *& Form check_range
    form check_range.
    *If file date is not in forcast range discard
    if i_file-datum < w_start or i_file-datum > w_end.
    w_tabix = sy-tabix.
    t_exception = i_file.
    t_exception-message = text-002.
    append t_exception.
    delete i_file index w_tabix.
    w_error = 'X'.
    endif.
    endform. " check_range
    *& Form check_uom
    form check_uom.
    *Get the alternative UoM for Material
    select single * from marm where matnr = i_file-matnr
    and meinh = c_uom.
    if sy-subrc = 0.
    w_value = ( i_file-value * ( marm-umren / marm-umrez ) ).
    else.
    w_value = i_file-value.
    w_flg_noscp = 'X'.
    endif.
    w_flg_noscp = 'X'. "jsa01
    endform. " check_uom
    *& Form check_first_day
    form check_first_day.
    *If the date is not the first of the month, copy to error table, delete
    *and end current loop process
    if i_file-datum+6(2) <> '01'.
    w_tabix = sy-tabix.
    t_exception = i_file.
    t_exception-message = text-003.
    append t_exception.
    delete i_file index w_tabix.
    w_error = 'X'.
    endif.
    endform. " check_first_day
    12:34:00 PM&#9668;&----
    *& Form check_monday
    form check_monday.
    call function 'DAY_IN_WEEK'
    exporting
    datum = i_file-datum
    importing
    wotnr = w_day.
    *If the day is not a monday, copy to error table, delete
    *and end current loop process
    if w_day <> 1.
    w_tabix = sy-tabix.
    t_exception = i_file.
    t_exception-message = text-004.
    append t_exception.
    delete i_file index w_tabix.
    w_error = 'X'.
    endif.
    endform. " check_monday
    *& Form populate_post_split_table
    form populate_post_split_table.
    *Sort the uploaded table by material and date
    sort i_file by matnr datum.
    loop at i_file.
    perform material_internal_format.
    *clear loop variables
    clear: w_hiper,
    w_fuper,
    w_count,
    w_error,
    w_fromdat,
    w_todat,
    w_flg_noscp,
    t_exception.
    *Clear the contents of the internal table which holds work days
    refresh: t_workdates.
    *If plant radiobutton is set
    if rb_1000 = 'X'.
    *Check the material/plant combination
    perform check_material using c_werks_1000 c_pltyp_805.
    else.
    *Check the material/plant combination
    perform check_material using c_werks_1005 c_pltyp_810.
    endif.
    if w_error = 'X'.
    continue.
    endif.
    *If the uploaded file is in monthly format
    if rb_month = 'X'.
    *Check that the record is for the first day of the month
    perform check_first_day.
    if w_error = 'X'.
    continue.
    endif.
    *Check the value is within the range for the infotype
    perform check_range.
    if w_error = 'X'.
    continue.
    endif.
    *Check that an 'SCP' unit of measure exists and convert value
    perform check_uom.
    *Otherwise if the file is in weekly format
    elseif rb_week = 'X'.
    *Check that the record corresponds to a monday
    perform check_monday.
    if w_error = 'X'.
    continue.
    endif.
    *Check the value is within the range for the infotype
    perform check_range.
    if w_error = 'X'.
    continue.
    endif.
    *Check that an 'SCP' unit of measure exists and convert value
    perform check_uom.
    else.
    *Check the value is within the range for the infotype
    perform check_range.
    if w_error = 'X'.
    continue.
    endif.
    *Check that an 'SCP' unit of measure exists and convert value
    perform check_uom.
    endif.
    *If split monthly flag has been chosen
    if rb_spmon = 'X'.
    *Process value using split monthly process
    perform process_monthly.
    *Otherwise, if weekly split
    elseif rb_spwk = 'X'.
    *Process value using split weekly process
    perform process_weekly.
    *Otherwise daily split
    else.
    *Process value using split daily process
    perform process_daily.
    endif.
    endloop.
    endform. " populate_post_split_table
    *& Form build_idoc
    Build and submit the idoc for processing
    form post_idoc.
    *Get the logical system for ALE processing
    perform get_ale_data.
    check not logsys is initial.
    *Populate the IDOC control record
    perform build_control_data.
    *Sort the data by material, date and value
    sort i_post_split by matnr datum value fromdat todat split_date.
    *Build idocs and post them
    loop at i_post_split.
    clear: e1lipp0,
    t_exception.
    *Move i_post_split header to a work area
    w_post_split = i_post_split.
    at new datum.
    clear: e1lipm0, e1lipv0, t_edidd.
    refresh t_edidd.
    *Build the general characteristic segment
    perform build_e1lipm0_segment.
    *Build the general version segment
    perform build_e1lipv0_segment.
    endat.
    *Build the performance measure segment
    perform build_e1lipp0_segment.
    at end of datum.
    *Submit IDOC for inbound processing
    perform submit_idoc.
    endat.
    endloop.
    endform. " build_idoc
    12:34:22 PM&#9668;&----
    *& Form submit_idoc
    Start inbound processing of IDOC
    form submit_idoc.
    clear: w_docnum_no_zero.
    call function 'IDOC_WRITE_AND_START_INBOUND'
    exporting
    i_edidc = edidc
    do_commit = 'X'
    importing
    docnum = w_docnum
    tables
    i_edidd = t_edidd
    exceptions
    idoc_not_saved = 1
    others = 2.
    if sy-subrc = 0.
    call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
    exporting
    input = w_docnum
    importing
    output = w_docnum_no_zero.
    perform check_idoc_status_records.
    else.
    t_exception-index = w_post_split-index.
    t_exception-matnr = w_post_split-matnr.
    t_exception-datum = w_post_split-datum.
    t_exception-message = t_edids-statxt.
    append t_exception.
    w_error = 'X'.
    endif.
    *If the no SCP UoM flag is set, write an entry to exception table
    if w_post_split-flg_noscp = 'X'.
    t_exception-index = w_post_split-index.
    t_exception-matnr = w_post_split-matnr.
    t_exception-datum = w_post_split-datum.
    t_exception-value = w_post_split-value.
    t_exception-docnum = w_docnum_no_zero.
    t_exception-message = text-005.
    append t_exception.
    endif.
    endform. " write_idoc
    *& Form build_control_data
    *& Build the IDOC control record
    form build_control_data.
    clear edidc.
    edidc-idoctp = 'SOPGEN01'. " Basic type
    if rb_1000 = 'X'.
    edidc-mestyp = c_mestyp_805. " Message type
    else.
    edidc-mestyp = c_mestyp_810. " Message type
    endif.
    edidc-rcvprt = c_rcvprt. " Partner type of receiver
    concatenate 'SAP' sy-sysid(3) into edidc-rcvpor. " Receiver port
    concatenate sy-sysid(3) 'CLNT' sy-mandt into edidc-rcvprn.
    edidc-direct = '2'. " Inbound
    concatenate 'SAP' sy-sysid(3) into edidc-sndpor.
    edidc-sndprt = c_sndprt. " Partner type of sender
    edidc-sndprn = c_sndprn. " Partner number of sender
    endform. " get_control_data
    *& Form get_ale_data
    Get logical system for ALE processing
    form get_ale_data.
    call function 'OWN_LOGICAL_SYSTEM_GET'
    importing
    own_logical_system = logsys
    exceptions
    own_logical_system_not_defined = 1
    others = 2.
    if sy-subrc <> 0.
    clear logsys.
    endif.
    endform. " get_ale_data
    *& Form build_e1lipv0_segment
    Create the general version segment
    form build_e1lipv0_segment.
    e1lipv0-vrsio = 'A00'.
    e1lipv0-avrsi = 'X'.
    e1lipv0-vetxt = 'Active Version'.
    move e1lipv0 to t_edidd-sdata.
    move 'E1LIPV0' to t_edidd-segnam.
    t_edidd-hlevel = '02'.
    append t_edidd.
    endform. " send_idoc
    *& Form build_e1lipm0_segment
    form build_e1lipm0_segment.
    e1lipm0-vontg = w_post_split-fromdat.
    e1lipm0-bistg = w_post_split-todat.
    e1lipm0-perio = '0'.
    if rb_1000 = 'X'.
    e1lipm0-m01 = c_werks_1000.
    else.
    e1lipm0-m01 = c_werks_1005.
    endif.
    e1lipm0-m02 = w_post_split-matnr.
    e1lipm0-m03 = 'SCP'.
    e1lipm0-m06 = 'T'.
    move e1lipm0 to t_edidd-sdata.
    move 'E1LIPM0' to t_edidd-segnam.
    t_edidd-hlevel = '01'.
    append t_edidd.
    endform. " build_e1lipm0_segment
    *& Form build_e1lipp0_segment
    form build_e1lipp0_segment.
    e1lipp0-sptag = w_post_split-split_date.
    if rb_mgx = 'X'.
    e1lipp0-kz02 = w_post_split-split_value.
    e1lipp0-kz03 = '/'.
    else.
    e1lipp0-kz02 = '/'.
    e1lipp0-kz03 = w_post_split-split_value.
    endif.
    move e1lipp0 to t_edidd-sdata.
    move 'E1LIPP0' to t_edidd-segnam.
    t_edidd-hlevel = '03'.
    append t_edidd.
    endform. " build_e1lipp0_segment
    *& Form check_idoc_status_records
    form check_idoc_status_records.
    clear: t_edids.
    refresh: t_edids.
    select * from edids into table t_edids where docnum = w_docnum.
    clear: w_error.
    loop at t_edids.
    clear: w_statva.
    select single statva from stacust into w_statva
    where status = t_edids-status.
    case w_statva.
    *When the status group is of type 'E' or 'F'.
    when 'E' or 'F'.
    t_exception-value = w_post_split-value.
    t_exception-index = w_post_split-index.
    t_exception-matnr = w_post_split-matnr.
    t_exception-datum = w_post_split-datum.
    t_exception-docnum = w_docnum_no_zero.
    t_exception-message = t_edids-statxt.
    append t_exception.
    w_error = 'X'.
    when others.
    endcase.
    endloop.
    if w_error is initial.
    add 1 to w_count_idoc_posted.
    else.
    add 1 to w_count_idoc_errors.
    endif.
    endform. " check_idoc_status_records
    12:34:35 PM&#9668;&----
    *& Form rename_file
    Form to rename file
    form rename_file.
    data: l_filename_new(120), " New filename
    l_filename_temp(120), " Temporary filename
    l_command(250), " Unix command line
    w_extension(14).
    move p_file to l_filename_new.
    *Replace the file extension of the file to indicate that it has been
    *processed
    concatenate '.proc_' sy-datum into w_extension.
    replace '.txt' with w_extension into l_filename_new.
    Create UNIX rename command
    concatenate 'mv' p_file l_filename_new
    into l_command separated by space.
    Create temporary unique file name
    concatenate p_file 'TEMP'
    into l_filename_temp.
    move l_filename_new to p_file.
    Open temporary dataset but use the filter command to execute the UNIX
    rename command 'mv'.
    This method has been used instead of SAP external commands because
    of file length limitations. The external command only allows a line of
    128 chars which means filenames can only be about 62chars when doing
    a move i.e. mv <file1> <file2>
    open dataset l_filename_temp for output filter l_command.
    if sy-subrc ne 0.
    message e005(z1) with text-007.
    exit.
    endif.
    Close the temporary dataset
    close dataset l_filename_temp.
    if sy-subrc ne 0.
    message e005(z1) with text-007.
    exit.
    endif.
    Delete the temporary dataset
    delete dataset l_filename_temp.
    if sy-subrc ne 0.
    message e005(z1) with text-007.
    exit.
    endif.
    endform. " rename_file
    *& Form material_internal_format
    form material_internal_format.
    call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
    input = i_file-matnr
    importing
    output = i_file-matnr.
    endform. " material_internal_format
    *& Form error_report
    form error_report.
    format color col_normal.
    skip.
    *Loop at exception table and output contents
    loop at t_exception.
    write: / t_exception-index,
    t_exception-matnr,
    24 t_exception-datum,
    t_exception-value right-justified,
    t_exception-docnum,
    t_exception-message.
    endloop.

    hi,
    define internal table. e.g. it_data & follow the steps
    PARAMETERS: p_rfname LIKE rlgrap-filename OBLIGATORY.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_rfname.
      PERFORM get_desktop_file_help.
         Form  get_desktop_file_help
    FORM get_desktop_file_help.
      DATA : v_file LIKE rlgrap-filename.
      CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
        EXPORTING
          program_name  = syst-repid
          dynpro_number = syst-dynnr
          field_name    = 'P_RFNAME'
        CHANGING
          file_name     = v_file
        EXCEPTIONS
          mask_too_long = 1
          OTHERS        = 2.
      IF sy-subrc <> 0.
        MESSAGE i368(00) WITH 'Enter Correct File'.
        STOP.
      ELSE.
        MOVE : v_file TO p_rfname.
      ENDIF.
    ENDFORM.                    " get_desktop_file_help
    START-OF-SELECTION.
      PERFORM upload_file_from_desktop CHANGING g_error.
         Form  upload_file_from_desktop
    FORM upload_file_from_desktop CHANGING p_error.
      IF NOT sy-batch IS INITIAL.
        MESSAGE e368(00) WITH 'Files can only be uploaded'
                              'in foreground'.
      ELSE.
        CALL FUNCTION 'WS_UPLOAD'
          EXPORTING
            filename                = p_rfname
            filetype                = 'DAT'
          TABLES
            data_tab                = it_data
          EXCEPTIONS
            conversion_error        = 1
            invalid_table_width     = 2
            invalid_type            = 3
            no_batch                = 4
            unknown_error           = 5
            gui_refuse_filetransfer = 6
            OTHERS                  = 7.
        IF sy-subrc NE 0.
          MESSAGE i368(00) WITH 'Error while reading data from file'.
          MOVE : 'X' TO p_error.
        ENDIF.
      ENDIF.
    ENDFORM.                    "upload_file_from_desktop
    raj

  • Problem while saveing in Table Control.

    Hi
    I am geting error while saving data in table control.
    This table contol is pop up window at end of screen .
    user enter qty & uom in TC..
    Error i am getting is...
    Field symbol has not been assigned.
    Error analysis                                                                               
    The system tried to access an anasigned field symbol (data segment        
    number 32772).                                                                               
    The field symbol is no longer assigned, because a Unicode program         
    previously tried to set the field symbol using an ASSIGN statement with   
    an offset/length declaration. The memory addressed in this offset/length  
    declaration, however, no longer lay within the valid range.                                                                               
    Information on where terminated                                                                               
    The termination occurred in the ABAP program "SAPLOMCV" in                
    "CONVERSION_EXIT_MATN1_INPUT".                                           
    i Have coded like this..
    MODULE USER_COMMAND_0112 INPUT.
      CASE OKCODE.
        WHEN 'BACK' or 'CANCEL'.
          SET SCREEN 0.
    This iti is contain data which diplay in TC
         when 'DISPLAY'.
              LOOP AT ITI.
              read table iti with key ingr_code = iti-ingr_code
                                      ingr_desc = iti-ingr_desc.
              wka1-ingr_code = iti-ingr_code.
              wka1-ingr_desc = iti-ingr_desc.
              wka1-conc = iti-conc.
              wka1-quantity = iti-quantity.
              wka1-uom = iti-uom.
            append wka1 to itf.
            ENDLOOP.
         WHEN 'SAV'.
          loop at itf where check = 'x' .
                  update zacg_ns
                    set ingr_code = itf-ingr_code
                    col_name = itf-ingr_desc
                    conc = itf-conc
                    quantity = itf-quantity
                      UOM =  itf-UOM
                      ru = itf-ru
                      where ingr_code = itf-ingr_code
                      and col_name = itf-ingr_desc.
        zacg_ns-ingr_code = itf-ingr_code.
       zacg_ns-col_name = itf-ingr_desc.
       zacg_ns-conc = itf-conc.
      zacg_ns-quantity = itf-quantity.
    zacg_ns-UOM = itf-UOM.
    update zacg_ns.
                     endloop.
                     leave program.
                  ENDCASE.
              ENDMODULE.                 " USER_COMMAND_0112  INPUT
    MODULE read_table_control INPUT
    MODULE read_table_control INPUT.
      MODIFY itf  INDEX tc-current_line.
    ENDMODULE.                    "read_table_control INPUT
    *&  Include           ZACG_NS_2                                        *
    *&      Module  STATUS_0111  OUTPUT
          text
    MODULE STATUS_0111 OUTPUT.
      SET PF-STATUS 'ZNEWSHADE'.
      SET TITLEBAR 'ZNS'.
    ENDMODULE.                 " STATUS_0111  OUTPUT
    *&      Module  STATUS_0112  OUTPUT
          text
    MODULE STATUS_0112 OUTPUT.
      SET PF-STATUS 'ZTC'.
    SET TITLEBAR 'xxx'.
      DESCRIBE TABLE itf LINES lines.
      tc-lines = lines.
    ENDMODULE.                 " STATUS_0112  OUTPUt
                                                                                    PROCESS BEFORE OUTPUT.
    MODULE STATUS_0112.
    LOOP at itf WITH CONTROL TC CURSOR tc-current_line.
        MODULE TC_PBO  .
      ENDLOOP.
    PROCESS AFTER INPUT.
      MODULE CANCEL AT EXIT-COMMAND.
    LOOP at itf .
        module read_table_control.
      ENDLOOP.
    MODULE USER_COMMAND_0112.
    Can any one help me..

    Hi,
    Did you enter that filed later after creating the table control?
    You check in the element list whether for that element u have an entry or not..
    Regards,
    Nishant

  • Storage location Data is not saving in table MARD using BAPI method.

    Hi Experts,
    TABLES: T001L, "Storage Locations
            MARA,  "General Material Data
            MAKT,  "Material Descriptions
            MBEW,  "Material Valuation
            MARC,  "Plant Data for Material
            MARD.  "Storage Location Data for Mate
    DATA: BAPI_HEAD   LIKE BAPIMATHEAD,  "MATERIAL
          BAPI_MAKT   LIKE BAPI_MAKT,    "Material Description
          BAPI_MARA1  LIKE BAPI_MARA,    "Client Data
          BAPI_MARAX  LIKE BAPI_MARAX,
          BAPI_MARC1  LIKE BAPI_MARC,    "Plant View
          BAPI_MARCX  LIKE BAPI_MARCX,
          BAPI_MBEW1  LIKE BAPI_MBEW,    "Accounting View
          BAPI_MBEWX  LIKE BAPI_MBEWX,
          BAPI_MARD1  LIKE BAPI_MARD,    "Storage location
          BAPI_MARDX  LIKE BAPI_MARDX,
          BAPI_RETURN LIKE BAPIRET2.
    DATA: BEGIN OF INT_MAKT OCCURS 100.
            INCLUDE STRUCTURE BAPI_MAKT.
    DATA: END OF INT_MAKT.
    DATA: BEGIN OF INT_MAT OCCURS 100,
             WERKS(4),     "Plant
             LGORT(4),     "Storage location
             MTART(4),     "Material type
             MATNR(18),    "Material number
             MAKTX(40),     "Material description
             MATKL(9) ,    "Material group
             MBRSH(1),     "Industry sector
             MEINS(3),     "Base unit of measure
             GEWEI(3),     "Weight Unit
             SPART(2),     "Division
             EKGRP(3),     "Purchasing group
             VPRSV(1),     "Price control indicator
             STPRS(12),    "Standard price
             PEINH(3),     "Price unit
             SPRAS(2),     "Language key
             BKLAS(4),     "VALUATION CLASS
             VERPR TYPE VERPR_BAPI,    "MOVING PRICE
             BWTTY(1),     "Valuation Catogory
             MLAST(1),     "Price determination
             MLMAA(1),     "Material Ledger
             EKLAS(4),     "Valuation Class for sales order stock
             QKLAS(4),     "Valuation Class for Project Stock
             ZKPRS TYPE DZKPRS, "Future price
             ZKDAT TYPE DZKDAT, "Valid From Date
             BWPRS TYPE BWPRS,  "Tax price 1
             BWPS1 TYPE BWPS1,  "Tax price 2
             VJBWS TYPE VJBWS,  "Tax price 3
             ABWKZ TYPE ABWKZ,  "Devaluatin indicator
             BWPRH TYPE BWPRH,  "Commercial price 1
             BWPH1 TYPE BWPH1,  "Commercial price 2
             VJBWH TYPE VJBWH,  "Commercial Price 3
             XLIFO(1),          "LIFO/FIFO revelant
             MYPOL(4),          "Pool no for LIFO
             MMSTA(2),          "Plant specific material status
             AUSME TYPE AUSME,  "Unit of issue
             QMATA(6),          "Material Authorization group
             RBNRM(9),          "Catalog Profile
             WEBAZ TYPE WEBAZ,  "Goods reciept processing time in days
             PRFRQ TYPE PRFRQ,  "Recurring Insepction
             SSQSS(8),          "QM Control key
             QZGTP(4),          "Certificate Type
             QSSYS(4),          "Required QM system for vendor
           END OF INT_MAT.
    DATA: V_MATNR TYPE MARA-MATNR.
    SELECT-OPTIONS:
                PLANT    FOR  MARC-WERKS OBLIGATORY MEMORY ID PLT,
                S_LGORT  FOR  MARD-LGORT MEMORY ID STL,
                MATERIAL FOR  MARA-MATNR MEMORY ID MAT,
                MATLTYPE FOR  MARA-MTART MEMORY ID MTY,
                DIVISION FOR  MARA-SPART MEMORY ID DIV.
    PARAMETERS:  F_FILE LIKE RLGRAP-FILENAME
                 DEFAULT 'C:\DATA\ZMATERIAL.XLS' MEMORY ID F_FILE,
    GETDATA AS CHECKBOX, "Tick to download materials data to local harddisk
             UPDDATA AS CHECKBOX. "Tick to update date to Materials Master
    IF GETDATA = 'X'.
       PERFORM DOWNLOAD_DATA.
       PERFORM DOWNLOAD_FILE.
    ENDIF.
    IF UPDDATA = 'X'.
       PERFORM UPLOAD_FILE.
       PERFORM UPDATE_MM.
    ENDIF.
    FORM DOWNLOAD_DATA.
    SELECT * FROM MARC  WHERE LVORM EQ ' '
                          AND WERKS IN PLANT
                          AND MATNR IN MATERIAL.
        CLEAR MARA.
        SELECT SINGLE * FROM MARA WHERE MATNR =  MARC-MATNR.
        CHECK MATLTYPE.
        CHECK DIVISION.
        CLEAR MBEW.
        SELECT SINGLE * FROM MBEW WHERE MATNR =  MARC-MATNR
                                    AND BWKEY =  MARC-WERKS.
        CLEAR MAKT.
        SELECT SINGLE * FROM MAKT WHERE SPRAS =  'EN'
                                    AND MATNR =  MARC-MATNR.
        CLEAR MARD.
        SELECT SINGLE * FROM MARD WHERE WERKS IN PLANT
                                  AND   LGORT IN S_LGORT.
        WRITE:/ MARC-WERKS,    "Plant
                MARD-LGORT,    "Storage location
                MARA-MTART,    "Material type
                MARA-MATNR,    "Material number
                MARA-MATKL,    "Material group
                MARA-MBRSH,    "Industry sector
                MARA-MEINS,    "Base unit of measure
                MARA-GEWEI,    "Weight Unit
                MARA-SPART,    "Division
                MARC-EKGRP,    "Purchasing group
                MBEW-VPRSV,    "Price control indicator
                MBEW-STPRS,    "Standard price
                MBEW-PEINH,    "Price unit
                MBEW-BKLAS,    "VALUE CLASS
                MAKT-SPRAS,    "Language key
                MBEW-BKLAS,    "Valuation Class
                MBEW-VERPR,    "Moving price
                MAKT-MAKTX,    "Material description
                MBEW-BWTTY,    "Valutaion Catogorey
                MBEW-MLAST,    "Price Determination
                MBEW-MLMAA,    "Material Ledger
                MBEW-EKLAS,    "Valuation class for Sales order stock
                MBEW-QKLAS,    "Valutaion Class for Project Stock
                MBEW-ZKPRS,    "Future Price
                MBEW-ZKDAT,    "Valid From Date
                MBEW-BWPRS,    "Tax price 1
                MBEW-BWPS1,    "Tax price 2
                MBEW-VJBWS,    "Tax price 3
                MBEW-ABWKZ,    "Devaluatin indicator
                MBEW-BWPRH,    "Commercial price 1
                MBEW-BWPH1,    "Commercial price 2
                MBEW-VJBWH,    "Commercial Price 3
                MBEW-XLIFO,    "LIFO/FIFO revelant
                MBEW-MYPOL,    "Pool no for LIFO
                MARC-MMSTA,    "Plant specific material status
                MARC-AUSME,    "Unit of issue
                MARC-QMATA,    "Material Authorization group
                MARA-RBNRM,    "Catalog Profile
                MARC-WEBAZ,    "Goods reciept processing time in days
                MARC-PRFRQ,    "Recurring Insepction
                MARC-SSQSS,    "QM Control key
                MARC-QZGTP,    "Certificate Type
                MARC-QSSYS.    "Required QM system for vendor
                INT_MAT-WERKS = MARC-WERKS.    "Plant
                INT_MAT-LGORT = MARD-LGORT.    "Storage Location
                INT_MAT-MTART = MARA-MTART.    "Material type
                INT_MAT-MATNR = MARA-MATNR.    "Material number
                INT_MAT-MAKTX = MAKT-MAKTX.    "Material description
                INT_MAT-MATKL = MARA-MATKL.    "Material group
                INT_MAT-MBRSH = MARA-MBRSH.    "Industry sector
                INT_MAT-MEINS = MARA-MEINS.    "Base unit of measure
                INT_MAT-GEWEI = MARA-GEWEI.    "Weight Unit
                INT_MAT-SPART = MARA-SPART.    "Division
                INT_MAT-EKGRP = MARC-EKGRP.    "Purchasing group
                INT_MAT-VPRSV = MBEW-VPRSV.    "Price control indicator
                INT_MAT-STPRS = MBEW-STPRS.    "Standard price
                INT_MAT-PEINH = MBEW-PEINH.    "Price unit
                INT_MAT-SPRAS = MAKT-SPRAS.    "Language key
                INT_MAT-BKLAS = MBEW-BKLAS.    "VALVATION CLASS
                INT_MAT-VERPR = MBEW-VERPR.    "MOVING price
                INT_MAT-BWTTY = MBEW-BWTTY.    "Valutaion Catogorey
                INT_MAT-MLAST = MBEW-MLAST.    "Price Determination
                INT_MAT-MLMAA = MBEW-MLMAA.    "Material Ledger
                INT_MAT-EKLAS = MBEW-EKLAS.    "Valuation class forS.O Stock
                INT_MAT-QKLAS = MBEW-QKLAS.    "Valutaion Class for Project
                INT_MAT-ZKPRS = MBEW-ZKPRS.    "Future Price
                INT_MAT-ZKDAT = MBEW-ZKDAT.    "Valid From Date
                INT_MAT-BWPRS = MBEW-BWPRS.    "Tax price 1
                INT_MAT-BWPS1 = MBEW-BWPS1.    "Tax price 2
                INT_MAT-VJBWS = MBEW-VJBWS.    "Tax price 3
                INT_MAT-ABWKZ = MBEW-ABWKZ.    "Devaluatin indicator
                INT_MAT-BWPRH = MBEW-BWPRH.    "Commercial price 1
                INT_MAT-BWPH1 = MBEW-BWPH1.    "Commercial price 2
                INT_MAT-VJBWH = MBEW-VJBWH.    "Commercial Price 3
                INT_MAT-XLIFO = MBEW-XLIFO.    "LIFO/FIFO revelant
                INT_MAT-MYPOL = MBEW-MYPOL.    "Pool no for LIFO
                INT_MAT-MMSTA = MARC-MMSTA.    "Plant specific material
                INT_MAT-AUSME = MARC-AUSME.    "Unit of issue
                INT_MAT-QMATA = MARC-QMATA.    "Material Authorization group
                INT_MAT-RBNRM = MARA-RBNRM.    "Catalog Profile
                INT_MAT-WEBAZ = MARC-WEBAZ.    "Goods reciept processing
                INT_MAT-PRFRQ = MARC-PRFRQ.    "Recurring Insepction
                INT_MAT-SSQSS = MARC-SSQSS.    "QM Control key
                INT_MAT-QZGTP = MARC-QZGTP.    "Certificate Type
                INT_MAT-QSSYS = MARC-QSSYS.    "Required QM system for
                APPEND INT_MAT.
                CLEAR  INT_MAT.
    ENDSELECT.
    ENDFORM.
    FORM DOWNLOAD_FILE.
    call function 'WS_DOWNLOAD'
      EXPORTING
        FILENAME                      = F_FILE
        FILETYPE                      = 'DAT'
      FILETYPE                      = 'WK1'
      tables
        data_tab                      = INT_MAT
      EXCEPTIONS
        FILE_OPEN_ERROR               = 1
        FILE_WRITE_ERROR              = 2
        INVALID_FILESIZE              = 3
        INVALID_TYPE                  = 4
        NO_BATCH                      = 5
        UNKNOWN_ERROR                 = 6
        INVALID_TABLE_WIDTH           = 7
        GUI_REFUSE_FILETRANSFER       = 8
        CUSTOMER_ERROR                = 9
        OTHERS                        = 10.
    IF SY-SUBRC = 0.
       FORMAT COLOR COL_GROUP.
       WRITE:/ 'Data Download Successfully to your local harddisk'.
       SKIP.
    ENDIF.
    ENDFORM.
    FORM UPLOAD_FILE.
    call function 'WS_UPLOAD'
      EXPORTING
        FILENAME                      = F_FILE
        FILETYPE                      = 'DAT'
      FILETYPE                      = 'WK1'
      tables
        data_tab                      = INT_MAT
      EXCEPTIONS
        FILE_OPEN_ERROR               = 1
        FILE_WRITE_ERROR              = 2
        INVALID_FILESIZE              = 3
        INVALID_TYPE                  = 4
        NO_BATCH                      = 5
        UNKNOWN_ERROR                 = 6
        INVALID_TABLE_WIDTH           = 7
        GUI_REFUSE_FILETRANSFER       = 8
        CUSTOMER_ERROR                = 9
        OTHERS                        = 10.
    IF SY-SUBRC = 0.
       FORMAT COLOR COL_GROUP.
       WRITE:/ 'Data Upload Successfully from your local harddisk'.
       SKIP.
    ENDIF.
    ENDFORM.
    FORM UPDATE_MM.
    LOOP AT INT_MAT.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT              = INT_MAT-MATNR
    IMPORTING
       OUTPUT             = INT_MAT-MATNR
    EXCEPTIONS
      LENGTH_ERROR       = 1
      OTHERS             = 2
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    Header
        BAPI_HEAD-MATERIAL        = INT_MAT-MATNR.
        BAPI_HEAD-IND_SECTOR      = INT_MAT-MBRSH.
        BAPI_HEAD-MATL_TYPE       = INT_MAT-MTART.
        BAPI_HEAD-BASIC_VIEW      = 'X'.
        BAPI_HEAD-PURCHASE_VIEW   = 'X'.
        BAPI_HEAD-ACCOUNT_VIEW    = 'X'.
    Material Description
        REFRESH INT_MAKT.
        INT_MAKT-LANGU           = INT_MAT-SPRAS.
        INT_MAKT-MATL_DESC       = INT_MAT-MAKTX.
        APPEND INT_MAKT.
    Client Data - Basic
        BAPI_MARA1-MATL_GROUP     = INT_MAT-MATKL.
        BAPI_MARA1-BASE_UOM       = INT_MAT-MEINS.
        BAPI_MARA1-UNIT_OF_WT     = INT_MAT-GEWEI.
        BAPI_MARA1-DIVISION       = INT_MAT-SPART.
        BAPI_MARAX-MATL_GROUP = 'X'.
        BAPI_MARAX-BASE_UOM   = 'X'.
        BAPI_MARAX-UNIT_OF_WT = 'X'.
        BAPI_MARAX-DIVISION   = 'X'.
    Plant - Purchasing
        BAPI_MARC1-PLANT      = INT_MAT-WERKS.
        BAPI_MARC1-PUR_GROUP  = INT_MAT-EKGRP.
        BAPI_MARC1-PUR_STATUS = INT_MAT-MMSTA.
        BAPI_MARC1-ISSUE_UNIT = INT_MAT-AUSME.
        BAPI_MARC1-QM_AUTHGRP = INT_MAT-QMATA.
        BAPI_MARC1-GR_PR_TIME = INT_MAT-WEBAZ.
        BAPI_MARC1-INSP_INT   = INT_MAT-PRFRQ.
        BAPI_MARC1-CTRL_KEY   = INT_MAT-SSQSS.
        BAPI_MARC1-CERT_TYPE  = INT_MAT-QZGTP.
        BAPI_MARC1-QM_RGMTS   = INT_MAT-QSSYS.
        BAPI_MARCX-PLANT      = INT_MAT-WERKS.
        BAPI_MARCX-PUR_GROUP  = 'X'.
        BAPI_MARCX-PUR_STATUS = 'X'.
        BAPI_MARCX-ISSUE_UNIT = 'X'.
        BAPI_MARCX-QM_AUTHGRP = 'X'.
        BAPI_MARCX-GR_PR_TIME = 'X'.
        BAPI_MARCX-INSP_INT   = 'X'.
        BAPI_MARCX-CTRL_KEY   = 'X'.
        BAPI_MARCX-CERT_TYPE  = 'X'.
        BAPI_MARCX-QM_RGMTS   = 'X'.
    Accounting 1
        BAPI_MBEW1-VAL_AREA      = INT_MAT-WERKS.
        BAPI_MBEW1-PRICE_CTRL    = INT_MAT-VPRSV.
        BAPI_MBEW1-STD_PRICE     = INT_MAT-STPRS.
        BAPI_MBEW1-PRICE_UNIT    = INT_MAT-PEINH.
        BAPI_MBEW1-MOVING_PR     = INT_MAT-VERPR.
        BAPI_MBEW1-VAL_CLASS     = INT_MAT-BKLAS.
        BAPI_MBEW1-VAL_CAT       = INT_MAT-BWTTY.
        BAPI_MBEW1-ML_SETTLE     = INT_MAT-MLAST.
        BAPI_MBEW1-ML_ACTIVE     = INT_MAT-MLMAA.
        BAPI_MBEW1-VM_SO_STK     = INT_MAT-EKLAS.
        BAPI_MBEW1-VM_P_STOCK    = INT_MAT-QKLAS.
        BAPI_MBEW1-FUTURE_PR     = INT_MAT-ZKPRS.
        BAPI_MBEW1-VALID_FROM    = INT_MAT-ZKDAT.
    *ACCOUNTING 2
       BAPI_MBEW1-TAXPRICE_1    = INT_MAT-BWPRS.
       BAPI_MBEW1-TAXPRICE_2    = INT_MAT-BWPS1.
       BAPI_MBEW1-TAXPRICE_3    = INT_MAT-VJBWS.
       BAPI_MBEW1-DEVAL_IND     = INT_MAT-ABWKZ.
       BAPI_MBEW1-COMMPRICE1    = INT_MAT-BWPRH.
       BAPI_MBEW1-COMMPRICE2    = INT_MAT-BWPH1.
       BAPI_MBEW1-COMMPRICE3    = INT_MAT-VJBWH.
       BAPI_MBEW1-LIFO_FIFO     = INT_MAT-XLIFO.
       BAPI_MBEW1-POOLNUMBER    = INT_MAT-MYPOL.
        BAPI_MBEWX-VAL_AREA   = INT_MAT-WERKS.
        BAPI_MBEWX-PRICE_CTRL = 'X'.
        BAPI_MBEWX-STD_PRICE  = 'X'.
        BAPI_MBEWX-PRICE_UNIT = 'X'.
        BAPI_MBEWX-MOVING_PR =  'X'.
        BAPI_MBEWX-VAL_CLASS =  'X'.
        BAPI_MBEWX-VAL_CAT       = 'x'.
        BAPI_MBEWX-ML_SETTLE     = 'X'.
        BAPI_MBEWX-ML_ACTIVE     = 'X'.
        BAPI_MBEWX-VM_SO_STK     = 'X'.
        BAPI_MBEWX-VM_P_STOCK    = 'X'.
        BAPI_MBEWX-FUTURE_PR     = 'X'.
        BAPI_MBEWX-VALID_FROM    = 'X'.
       BAPI_MBEWX-TAXPRICE_1    = 'X'.
       BAPI_MBEWX-TAXPRICE_2    = 'X'.
       BAPI_MBEWX-TAXPRICE_3    = 'X'.
       BAPI_MBEWX-DEVAL_IND     = 'X'.
       BAPI_MBEWX-COMMPRICE1    = 'X'.
       BAPI_MBEWX-COMMPRICE2    = 'X'.
       BAPI_MBEWX-COMMPRICE3    = 'X'.
       BAPI_MBEWX-LIFO_FIFO     = 'X'.
       BAPI_MBEWX-POOLNUMBER    = 'X'.
    *Storage Locations
        BAPI_MARD1-PLANT      = INT_MAT-WERKS.
        BAPI_MARD1-STGE_LOC   = INT_MAT-LGORT.
        BAPI_MARDX-PLANT      = INT_MAT-WERKS.
        BAPI_MARDX-STGE_LOC   = INT_MAT-LGORT.
       WRITE:/ BAPI_HEAD-MATERIAL, BAPI_MARC1-PLANT ,BAPI_MARD1-STGE_LOC.
        call function 'BAPI_MATERIAL_SAVEDATA'
          exporting
            HEADDATA                   = BAPI_HEAD
            CLIENTDATA                 = BAPI_MARA1
            CLIENTDATAX                = BAPI_MARAX
            PLANTDATA                  = BAPI_MARC1
            PLANTDATAX                 = BAPI_MARCX
          FORECASTPARAMETERS         =
          FORECASTPARAMETERSX        =
          PLANNINGDATA               =
          PLANNINGDATAX              =
    <b>      STORAGELOCATIONDATA        =  BAPI_MARD1
           STORAGELOCATIONDATAX       =  BAPI_MARDX</b>
            VALUATIONDATA              = BAPI_MBEW1
            VALUATIONDATAX             = BAPI_MBEWX
          WAREHOUSENUMBERDATA        =
          WAREHOUSENUMBERDATAX       =
          SALESDATA                  = BAPI_MVKE1
          SALESDATAX                 = BAPI_MVKEX
          STORAGETYPEDATA            =
          STORAGETYPEDATAX           =
          IMPORTING
            RETURN                     = BAPI_RETURN
          TABLES
            MATERIALDESCRIPTION        = INT_MAKT
          UNITSOFMEASURE             =
          UNITSOFMEASUREX            =
          INTERNATIONALARTNOS        =
          MATERIALLONGTEXT           =
          TAXCLASSIFICATIONS         =
          RETURNMESSAGES             =
          PRTDATA                    =
          PRTDATAX                   =
          EXTENSIONIN                =
          EXTENSIONINX               =
    IF BAPI_RETURN-TYPE = 'E'.
       WRITE:/ 'Error Message ', BAPI_RETURN-MESSAGE.
    ENDIF.
    ENDLOOP.
    ENDFORM.
    <b>i am using this bapi method to copy materials from one plant to another plant using storage location so here what happenig is everyting is going correct but only the storage location data is not saving in table mard so any body faced this kind of problem please tell me.... and one more dbt
    bapi_marcx-pur_status = 'x' what is 'X' here??? is that mandatory field or required field ???
    points wil be rewarded.
    reagrds,
    sunil k airam.

    In the HEADDATA structure, STORAGE_VIEW should also be set as 'X' , in order to update storage location data
    for example
    BAPI_HEAD-STORAGE_VIEW = 'X'.
    Also, PUR_STATUS corresponds to field MARA-MSTAE whose domain has value table T141, therefore values in the field are checked against T141
    Edited by: Harris Veziris on May 12, 2008 12:37 PM

  • Delete the entry from dropdown list in the pop up window in ALV report

    Hi All,
    I have a requirement in the ALV interactive report ZMM_IMPL .If we enter selection screen parameters its displaying the first screen.If we click on 'Goods Issue' tab ,it display the pop up window for Requirement Pick list with Batch number ,Storage location and Quantity.Here we have F4 option for batch number(MCH1-CHARG) and we could see all batches (with stock and without stock) in the drop down.
    Now my requirement is i would need to delete the non stock batches from drop down values.
    Ex:we clich F4 in batch number field(CHARG) ,could see 4 batches Test1 ,Test2 ,Test3 and Test4 .Here Test1 ,Test2 are Batch stock and other two are Non stock batches. We could see all these batches (with and without stock) in MCHB table.Now i would need to delete non stock batches(Batch with zero qty (MCHB-CLABS = 0) from drop down.
    Any idea on this.
    Regards,
    Rpn

    Hi,
    User wants to appear only batches with stock value in the drop down .Here Batches test1, test2 , test3 have stock but  test4  has no stock value. Now the requirement is  if stock does not exist in any of those batches it should not appear in the drop down and propose batches based on quantity.
    Batch stock value can be seen through transaction MB52  and could see only Test1.Test2 and Test3.
    They have arleady code in the program for F4 help to Batch number as following,
      CLEAR: lips.
      REFRESH: gt_lips.
      lips-vbeln = f_vbeln.
      lips-posnr = f_posnr.
      lips-matnr = f_matnr.
      lips-werks = f_werks.
      lips-lfimg = f_bdmng.  "store the requirement quantity for display
      lips-pstyv = f_res_del.  "use to store RES or DEL      "DV1K919143
      CALL SCREEN '0100' STARTING AT 10 2.
    for the ok code to be BT_SAVE all the validation are complete
      IF g_ok_code NE 'BT_SAVE'.
        f_answer = 'A'.
      ENDIF.
    The logic for screen '0100' as follows
    PROCESS BEFORE OUTPUT.
    *&spwizard: pbo flow logic for tablecontrol 'TC_LIPS'
      module TC_LIPS_change_tc_attr.
    *&spwizard: module TC_LIPS_change_col_attr.
      loop at   GT_LIPS
           into GS_LIPS
           with control TC_LIPS
           cursor TC_LIPS-current_line.
        module TC_LIPS_get_lines.
    *&spwizard:   module TC_LIPS_change_field_attr
      endloop.
      MODULE STATUS_0100.
    PROCESS AFTER INPUT.
    *&spwizard: pai flow logic for tablecontrol 'TC_LIPS'
      loop at GT_LIPS.
        chain.
          field GS_LIPS-CHARG.
          field GS_LIPS-LGORT.
          field GS_LIPS-LFIMG.
          module TC_LIPS_modify on chain-request.
        endchain.
        field GS_LIPS-SELKZ
          module TC_LIPS_mark on request.
      endloop.
      module TC_LIPS_user_command.
    *&spwizard: module TC_LIPS_change_tc_attr.
    *&spwizard: module TC_LIPS_change_col_attr.
    MODULE USER_COMMAND_0100.
    MODULE USER_COMMAND_EXIT_0100 AT EXIT-COMMAND.
    process on value-request.
      field gs_lips-charg module lips-charg_values.
    Logic for F4 help as following
    DATA: mc_object LIKE dd23l-mconame,
             help_lips LIKE lips.
       DATA: dseltab LIKE dselc OCCURS 10 WITH HEADER LINE.
       DATA: lf_shlpname LIKE dd30v-shlpname,
             lx_shlp TYPE shlp_descr_t,
             ls_interface LIKE ddshiface,
             lf_rc LIKE sy-subrc,
             lt_retvalues LIKE ddshretval OCCURS 0,
             ls_retvalue LIKE ddshretval.
       help_lips = lips.
       IF NOT help_lips-matnr IS INITIAL.
         CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
           EXPORTING
             input        = help_lips-matnr
           IMPORTING
             output       = help_lips-matnr
           EXCEPTIONS
             length_error = 1
             OTHERS       = 2.
         IF sy-subrc <> 0.
        exit.                        "Ignore conversion errors "50A
         ENDIF.
       ELSE.
         EXIT.
       ENDIF.
       SET PARAMETER ID 'MAT' FIELD help_lips-matnr.
       SET PARAMETER ID 'WRK' FIELD help_lips-werks.
      Export parameters to memory to enable search help via classes
       CLEAR dseltab.
       REFRESH dseltab.
       dseltab-fldname = 'MANDT'.
       MOVE sy-mandt TO dseltab-fldinh.
       APPEND dseltab.
       dseltab-fldname = 'MATNR'.
       MOVE help_lips-matnr TO dseltab-fldinh.
       APPEND dseltab.
       dseltab-fldname = 'WERKS'.
       MOVE help_lips-werks TO dseltab-fldinh.
       APPEND dseltab.
       dseltab-fldname = 'CHARG'.
       MOVE help_lips-charg TO dseltab-fldinh.
       APPEND dseltab.
       EXPORT dseltab TO MEMORY ID 'DSELTAB'.
      Get description for search help
       mc_object = 'MCH1'.
       lf_shlpname = mc_object.
       CALL FUNCTION 'F4IF_GET_SHLP_DESCR'
         EXPORTING
           shlpname = lf_shlpname
           shlptype = 'SH'
         IMPORTING
           shlp     = lx_shlp
         EXCEPTIONS
           OTHERS   = 1.
      Enable value copy from search help to dynpro field
       READ TABLE lx_shlp-interface INTO ls_interface
                                    WITH KEY shlpfield = 'CHARG'.
       ls_interface-valfield = 'X'.
       MODIFY lx_shlp-interface FROM ls_interface INDEX sy-tabix.
      Start search help dialog
       CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
         EXPORTING
           shlp          = lx_shlp
         TABLES
           return_values = lt_retvalues
         EXCEPTIONS
           OTHERS        = 1.
       IF sy-subrc EQ 0.
         READ TABLE lt_retvalues INTO ls_retvalue
                                 WITH KEY fieldname = 'CHARG'.
         IF sy-subrc EQ 0.
           lips-charg = ls_retvalue-fieldval.
           gs_lips-charg = ls_retvalue-fieldval.
         ENDIF.
       ENDIF.
    How to delete entry from F4 help.Any idea?
    Regards,
    Reddy

  • Alv report output doubt..........

    Hi Frds,
    A13001 : is Material Number..
    I have maintained text in material master
    1st : RMCODE1 RMDECSRIPTION1 USAGE1
    2nd : RMCODE2 RMDECSRIPTION1 USAGE2
    Present output is A13001 : RMCODE1 RMDECSRIPTION1 USAGE1  RMCODE2 RMDECSRIPTION1 USAGE2
    My customer is asking in alv output as given below...
    A13001 : RMCODE1 RMDECSRIPTION1 USAGE1
    A13001 :  RMCODE2 RMDECSRIPTION1 USAGE2
    For reference screen shot attached........
    Pls help me ........
    Regards,
    Kabil

    Hi Sreekanth,
    Pls find my piece of code as you said...........
    FORM fill_final .
       DATA : it_tline TYPE TABLE OF tline,
              wa_tline LIKE LINE OF it_tline.
       DATA : text(250) TYPE c.
       DATA : wrk_name TYPE thead-tdname.
       REFRESH gt_final.
       LOOP AT gt_mara INTO gw_mara.
         MOVE: gw_mara-matnr TO gw_final-matnr,
               gw_mara-werks TO gw_final-werks.
          READ TABLE gt_makt INTO gw_makt WITH KEY matnr = gw_mara-matnr.
         IF sy-subrc = 0.
           MOVE : gw_makt-maktx TO gw_final-maktx.
         ENDIF.
         REFRESH : it_tline.
         CLEAR   : wrk_name.
         wrk_name = gw_final-matnr.
    *    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    *      EXPORTING
    *        input        = gw_final-line1
    *      IMPORTING
    *        output       = gw_final-line1
    *      EXCEPTIONS
    *        length_error = 1
    *        OTHERS       = 2.
         CALL FUNCTION 'READ_TEXT'
           EXPORTING
    *    CLIENT                        = SY-MANDT
             id                            = 'GRUN'
             language                      = 'E'
             name                          = wrk_name
             object                        = 'MATERIAL'
    *    ARCHIVE_HANDLE                = 0
    *    LOCAL_CAT                     = ' '
    *  IMPORTING
    *    HEADER                        =
           TABLES
             lines                         = it_tline
          EXCEPTIONS
            id                            = 1
            language                      = 2
            name                          = 3
            not_found                     = 4
            object                        = 5
            reference_check               = 6
            wrong_access_to_archive       = 7
            OTHERS                        = 8
         IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
         LOOP AT  it_tline INTO wa_tline.
           CASE sy-tabix.
             WHEN 1.
               gw_final-line1 =  wa_tline-tdline.
             WHEN 2.
               gw_final-line2 =  wa_tline-tdline.
             WHEN 3.
               gw_final-line3 =  wa_tline-tdline.
             WHEN 4.
               gw_final-line4 =  wa_tline-tdline.
           ENDCASE.
         ENDLOOP.
         REFRESH : it_tline.
         CLEAR   : wrk_name.
         wrk_name = gw_final-matnr.
         CALL FUNCTION 'READ_TEXT'
         EXPORTING
    *    CLIENT                        = SY-MANDT
           id                            = 'IVER'
           language                      = 'E'
           name                          = wrk_name
           object                        = 'MATERIAL'
    *    ARCHIVE_HANDLE                = 0
    *    LOCAL_CAT                     = ' '
    *  IMPORTING
    *    HEADER                        =
         TABLES
           lines                         = it_tline
        EXCEPTIONS
          id                            = 1
          language                      = 2
          name                          = 3
          not_found                     = 4
          object                        = 5
          reference_check               = 6
          wrong_access_to_archive       = 7
          OTHERS                        = 8
         IF sy-subrc <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         ENDIF.
         LOOP AT  it_tline INTO wa_tline.
           CASE sy-tabix.
             WHEN 1.
               gw_final-line5 =  wa_tline-tdline.
             WHEN 2.
               gw_final-line6 =  wa_tline-tdline.
             WHEN 3.
               gw_final-line7 =  wa_tline-tdline.
             WHEN 4.
               gw_final-line8 =  wa_tline-tdline.
           ENDCASE.
         ENDLOOP.
         APPEND gw_final TO gt_final.
         CLEAR gw_final.
       ENDLOOP.
    ENDFORM.                    " FILL_FINAL

  • Not able to create sales order  using BAPI - BAPI_SALESORDER_CREATEFROMDAT2

    Hi Experts,
    I am not able to create sales order . I am using BAPI - BAPI_SALESORDER_CREATEFROMDAT2
    to create sales order .I am passing external sales order number to the parameter
    SALESDOCUMENTIN.
    I am getting following error.
    "524   |Only quantity 1 EA is allowed (Item 00001"
    Here EA is UOM(Unit of measurement).
    Below is the sample program through which i am trying to create the sales order.
    *& Report  ZSDC_SALES_TEST
    report  zsdc_sales_test.
    *DATA: wa_bapi_header    TYPE bapisdhd1.
    Include Name    - ZSDC_SALES_ORD_UPLOAD_TOP
    Program Name    - ZSDC_SALES_ORD_UPLOAD_1393
    Program Title   - Include for Data Declaration  and selection screen
    Created by      - Lalitha W
    Created on      - 18-Nov-2008
    Object ID       - SD_C_1393_SALES_ORDER_UPLOAD
    Request Id      - SD3K905579
    Description - This is a common INCLUDE for data declarations and
    *selection screen details.
                            HISTORY
    Date    |Developer |Req by    | Description              |Reference ID
            |          |          |                          |
            |          |          |                          |
                               TYPE-POOLS
    *TYPE-POOLS: truxs, abap, slis.
                              TABLES
    *TABLES: t100.
                               TYPES
    types:begin of   ty_header,
            auart(4)    type c,    " Sales Order Type
            vkorg(4)    type c,    " Sales Organization
            vtweg(2)    type c,    " Distrubution Channel
            spart(2)    type c,    " Division
            kunnr_1(10) type c,    " Sold to Party
            kunnr_2(10) type c,    " Ship to Party
            augru(3)    type c,    " Order Reason
            bstkd(35)   type c,    " PO Number
            bstdk(10)   type c,    " PO Date
            ketdat(10)  type c,    " Required Delivery Date
            zterm(4)    type c,    " Payment Terms
            inco1(3)    type c,    " Inco Terms -1
            inco2(28)   type c,    " Inco Terms -2
            prsdt(10)   type c,    " pricing date
            waerk(5)    type c,    " Document Currency
            vkbur(4)    type c,    " Sales Office
            vkgrp(3)    type c,    " Sales group
            pltyp(2)    type c,    " Price List type
            kdgrp(2)    type c,    " Customer Group
            bstkd_e(35) type c,    " Ship-to-party PO number
            submi(10)   type c,    " Collective Number
            bname(35)   type c,    " Name
            ihrez(12)   type c,    " Your Reference
            kschl_1(4)   type c,    " Condition Type
            kbetr_1(11)  type c,    " Amount
            kschl_2(4)   type c,    " Condition Type
            kbetr_2(11)  type c,    " Amount
            kschl_3(4)   type c,    " Condition Type
            kbetr_3(11)  type c,    " Amount
           partner_1(25) TYPE c,    "  Partner(Bill To Party Number)
           partner_2(25) TYPE c,    "  Partner(Payer Number)
           partner_3(25) TYPE c,    "  Partner(Sales Responsible Number)
           partner_4(25) TYPE c,    "  Partner(Order admin)
           partner_5(25) TYPE c,    "  Partner(Contact person)
            partner_1(10) type c,    "  Partner(Bill To Party Number)
            partner_2(10) type c,    "  Partner(Payer Number)
            partner_3(10) type c,    "  Partner(Sales Responsible Number)
            partner_4(10) type c,    "  Partner(Order admin)
            partner_5(10) type c,    "  Partner(Contact person)
            tdspras_1(2)  type c,
            text_1(500)   type c,    " Text Before Items Z012
            tdspras_2(2)  type c,
            text_2(500)   type c,    " Invocie Up Z034
            tdspras_3(2)  type c,
            text_3(500)   type c,    " Invocie Down Z035
            tdspras_4(2)  type c,
            text_4(500)   type c,    " Customer Reference Continue Z018
            tdspras_5(2)  type c,
            text_5(500)   type c,    " Dispatch Marks/ Order Z019
            tdspras_6(2)  type c,
            text_6(500)   type c,    " Ordered By  Z003
            tdspras_7(2)  type c,
            text_7(500)   type c,    " Sales Parameters Z002
            kvgr1(3)      type c,    " Industry
            kvgr2(3)      type c,    " customer BU
    end of ty_header.
    types: begin of ty_item,
              bstkd(35)     type c,    " PO Number
              bstdk(10)     type c,    " PO Date
              bstkd_e(35)   type c,    " Ship-to-party PO number
              posnr(6)      type c,    " POSTION NUMBER
              matnr(18)     type c,    " Material Number
              kwmeng(18)    type c,    " Order Quantity
              pstyv(4)      type c,    " Sales doc. item categ
              kursk(18)     type c,    " EXCHANGE RATE****
              ffprf(8)      type c,    " DIP PROFILE
              werks(4)      type c,    " Delivering Plant
              vstel(4)      type c,    " SHIPPING POINT
              lgort(4)      type c,    " STORAGE LOCATION
              route(6)      type c,    " Route
              kurrf(18)     type c,    " EXCHANGE RATE-FI
              ntgew(18)     type c,    " Net Weight
              brgew(18)     type c,    " Gross Weight
              gewei(3)      type c,    " Weight Unit
              prctr(10)     type c,    " profit center
              abgrs(6)      type c,    " RESULT ANALYSIS KEY
              kalsm_k(4)    type c,    " COSTING SHEET
              kschl_1(4)    type c,    " Condition Type
              kbetr_1(11)   type c,    " Amount
              kschl_2(4)    type c,    " Condition Type
              kbetr_2(11)   type c,    " Amount
              kschl_3(4)    type c,    " Condition Type
              kbetr_3(11)   type c,    " Amount
              text_1(500)    type c,    " material Text 0001
              tdspras_1(1)   type c,
              text_2(500)    type c,    " Pr Text 9001
              tdspras_2(1)   type c,
           end of ty_item.
    types:  begin of ty_schedule_line,
             bstkd(35)       type c, "PO number
             bstdk(10)       type c, "PO date
             bstkd_e(35)     type c, "Ship-to-party PO number
             posnr(6)        type c, "sales doc.Item
             etdat(10)       type c, "Schedule line date
             wmeng(2)        type c, "Order Quantity
            end of ty_schedule_line.
    types: begin of ty_err  ,
            auart(4)    type c,    " Sales Order Type
            vkorg(4)    type c,    " Sales Organization
            vtweg(2)    type c,    " Distrubution Channel
            spart(2)    type c,    " Division
            kunnr_1(10) type c,    " Sold to Party
            kunnr_2(10) type c,    " Ship to Party
            augru(3)    type c,    " Order Reason
            bstkd(35)   type c,    " PO Number
            bstdk(10)   type c,    " PO Date
            ketdat(10)  type c,    " Required Delivery Date
            zterm(4)    type c,    " Payment Terms
            inco1(3)    type c,    " Inco Terms -1
            inco2(28)   type c,    " Inco Terms -2
            prsdt(10)   type c,    " pricing date
            waerk(5)    type c,    " Document Currency
            vkbur(2)    type c,    " Sales Office
            vkgrp(3)    type c,    " Sales group
            pltyp(2)    type c,    " Price List type
            kdgrp(2)    type c,    " Customer Group
            bstkd_e(35) type c,    " Ship-to-party PO number
            submi(10)   type c,    " Collective Number
            bname(35)   type c,    " Name
            ihrez(12)   type c,    " Your Reference
            kschl_1(4)   type c,    " Condition Type
            kbetr_1(11)  type c,    " Amount
            kschl_2(4)   type c,    " Condition Type
            kbetr_2(11)  type c,    " Amount
            kschl_3(4)   type c,    " Condition Type
            kbetr_3(11)  type c,    " Amount
            partner_1(25) type c,    "  Partner(Bill To Party Number)
            partner_2(25) type c,    "  Partner(Payer Number)
            partner_3(25) type c,    "  Partner(Sales Responsible Number)
            partner_4(25) type c,    "  Partner(Order admin)
            partner_5(25) type c,    "  Partner(Contact person)
            tdspras_1(2)  type c,
            text_1(500)   type c,    " Text Before Items Z012
            tdspras_2(2)  type c,
            text_2(500)   type c,    " Invocie Up Z034
            tdspras_3(2)  type c,
            text_3(500)   type c,    " Invocie Down Z035
            tdspras_4(2)  type c,
            text_4(500)   type c,    " Customer Reference Continue Z018
            tdspras_5(2)  type c,
            text_5(500)   type c,    " Dispatch Marks/ Order Z019
            tdspras_6(2)  type c,
            text_6(500)   type c,    " Ordered By  Z003
            tdspras_7(2)  type c,
            text_7(500)   type c,    " Sales Parameters Z002
            kvgr1(3)      type c,    " Industry
            kvgr2(3)      type c,    " customer BU
            message(600) type c,
      end of ty_err.
    types: begin of ty_t685a,
            kschl type kschl,
            krech type krech,
          end of ty_t685a.
                       INTERNAL TABLES
    ***header
    data:  g_krech_1(4)    type c,    " Calculation type for condition
           g_krech_2(4)    type c,    " Calculation type for condition
           g_krech_3(4)    type c.    " Calculation type for condition
          g_krech_4(4)    TYPE c,    " Calculation type for condition
          g_krech_5(4)    TYPE c,    " Calculation type for condition
          g_krech_6(4)    TYPE c,    " Calculation type for condition
          g_krech_7(4)    TYPE c,    " Calculation type for condition
          g_krech_8(4)    TYPE c,    " Calculation type for condition
          g_krech_9(4)    TYPE c,    " Calculation type for condition
          g_krech_10(4)   TYPE c,    " Calculation type for condition
          g_krech_11(4)   TYPE c,    " Calculation type for condition
          g_krech_12(4)   TYPE c,    " Calculation type for condition
          g_krech_13(4)   TYPE c,    " Calculation type for condition
          g_krech_14(4)   TYPE c,    " Calculation type for condition
          g_krech_15(4)   TYPE c,    " Calculation type for condition
          g_krech_16(4)   TYPE c,    " Calculation type for condition
          g_krech_17(4)   TYPE c,    " Calculation type for condition
          g_krech_18(4)   TYPE c,    " Calculation type for condition
          g_krech_19(4)   TYPE c,    " Calculation type for condition
          g_krech_20(4)   TYPE c.    " Calculation type for condition
    Items
    data:   g_krech_item_1(4)   type c,    " Calculation type for condition
            g_krech_item_2(4)   type c,    " Calculation type for condition
            g_krech_item_3(4)   type c.    " Calculation type for condition
           g_krech_item_4(4)   TYPE c,    " Calculation type for condition
           g_krech_item_5(4)   TYPE c,    " Calculation type for condition
           g_krech_item_6(4)   TYPE c,    " Calculation type for condition
           g_krech_item_7(4)   TYPE c,    " Calculation type for condition
           g_krech_item_8(4)   TYPE c,    " Calculation type for condition
           g_krech_item_9(4)   TYPE c,    " Calculation type for condition
           g_krech_item_10(4)  TYPE c,    " Calculation type for condition
           g_krech_item_11(4)  TYPE c,    " Calculation type for condition
           g_krech_item_12(4)  TYPE c,    " Calculation type for condition
           g_krech_item_13(4)  TYPE c,    " Calculation type for condition
           g_krech_item_14(4)  TYPE c,    " Calculation type for condition
           g_krech_item_15(4)  TYPE c,    " Calculation type for condition
           g_krech_item_16(4)  TYPE c.    " Calculation type for condition
    data: it_t685a  type standard table of ty_t685a.
    data: wa_bapi_header    type bapisdhd1,
         wa_bapi_headerx   TYPE bapisdhd1x,
          it_bapi_item      type table of bapisditm,
         it_bapi_itemx     TYPE TABLE OF bapisditmx,
          it_bapi_cond      type table of bapicond,
         it_bapi_condx     TYPE TABLE OF bapicondx,
          it_bapi_partner   type table of bapiparnr,
          it_bapi_shdl      type table of bapischdl,
         it_bapi_shdlx     TYPE TABLE OF bapischdlx,
         it_bapi_order_text type TABLE OF BAPISDTEXT,
          it_bapireturn     type table of bapiret2.
    data:  wa_bapi_item       like line of it_bapi_item,
          wa_bapi_itemx      LIKE LINE OF it_bapi_itemx,
           wa_bapi_cond       like line of it_bapi_cond,
          wa_bapi_condx      LIKE LINE OF it_bapi_condx,
           wa_bapi_partner    like line of it_bapi_partner,
           wa_bapi_shdl       like line of it_bapi_shdl,
          wa_bapi_shdlx      LIKE LINE OF it_bapi_shdlx,
          wa_bapi_order_text like LINE OF it_bapi_order_text,
           wa_bapireturn      like line of it_bapireturn.
    *DATA: zmode(1) VALUE 'N'.
    data: it_header      type standard table of ty_header.
    *DATA: it_temp_header TYPE STANDARD TABLE OF ty_header.
    data: it_item        type standard table of ty_item.
    *DATA: it_temp_item   TYPE STANDARD TABLE OF ty_item.
    data: it_err         type standard table of ty_err.
    data: it_fline1 type standard table of tline,
          wa_fline1 type tline.
    data: it_thead1 type thead.
    data: it_fline2 type standard table of tline,
          wa_fline2 type tline.
    data: it_thead2 type thead.
    data: it_fline3 type standard table of tline,
          wa_fline3 type tline.
    data: it_thead3 type thead.
    data: it_fline4 type standard table of tline,
          wa_fline4 type tline.
    data: it_thead4 type thead.
    data: it_fline5 type standard table of tline,
          wa_fline5 type tline.
    data: it_thead5 type thead.
    data: wa_header         like line of it_header,
          wa_item           like line of it_item,
          wa_err            type ty_err,
         wa_bill           LIKE LINE OF it_bill,
         wa_bill1          LIKE LINE OF it_bill,
          wa_iterr          like line of it_err,
          wa_t685a          like line of it_t685a.
         wa_bill_item TYPE ty_bill_item.
    data: it_schedule_line  type standard table of ty_schedule_line,
          wa_schedule_line type ty_schedule_line.
    data: sales_order_no     type bapivbeln-vbeln.
    data: ext_sales_order_no type bapivbeln-vbeln.
    Variable to be used to separate the fields which are concatenated by a
    runtime character
    *DATA: g_tabchar(1) TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
    *DATA: wa_truxs_t_text_data TYPE truxs_t_text_data.
    *DATA: g_filename      TYPE string,
         g_path          TYPE string,
         g_fullpath      TYPE string,
         g_user_action   TYPE i,
         g_file_encoding TYPE abap_encoding.
    *DATA : g_text(8192),
    data : g_mstring1(100) type c,
          g_mstring2(100) type c,
          g_mstring3(100) type c,
          g_mstring4(100) type c,
          g_mstring5(100) type c.
    data: g_count1 type ebelp,
          g_str_count1(6) type c.
    data: g_count type ebelp,
          g_str_count(6) type c.
    *DATA: f_subrc      LIKE sy-subrc,
         f_subrc1     LIKE sy-subrc,
         f_error(500) TYPE c,
         item1(27)    TYPE c,
         item2(27)    TYPE c,
         item3(27)    TYPE c,
         item4(27)    TYPE c,
         i            TYPE ekpo-ebelp.
    *DATA: g_billplan_header TYPE c,
         g_billplan_item TYPE c.
    data : g_external_so type vbak-vbeln. "SO
                          SELECTION-SCREEN
    selection-screen begin of block frame1 with frame title text-001 .
    parameters:p_file1 type rlgrap-filename, "OBLIGATORY, "Header data.
               p_file2 type rlgrap-filename, "OBLIGATORY, "Item Data.
               p_file3 type rlgrap-filename,            "Schedule line.
               p_file4 type rlgrap-filename ."OBLIGATORY. "Error file.
    selection-screen end of block frame1.
    start-of-selection.
      wa_bapi_header-doc_type     =  'Z0MX'. "order type
      wa_bapi_header-sales_org    =  '0130'."sales org
      wa_bapi_header-distr_chan   =  '13'.  "distr channel
      wa_bapi_header-division     =  '13'.  "division
    Old code from copied program
    wa_bapi_header-purch_no_s   =  wa_header-kunnr_2.  " Ship to party
    New code as required in Finland project
    We are using to Header ->Order Tab -> Ship to Party -> Purchase order no (BSTKD_E) to store Old legacy SO number
      wa_bapi_header-purch_no_s   =  'MX100443'.  "External SO i.e Old legacey SO number
      wa_bapi_header-ref_1_s      = '0000666666'. "Sold to party
    wa_bapi_header-ord_reason   =  wa_header-augru.
      wa_bapi_header-purch_no_c   =  'ddr1234'.    " PO number
      wa_bapi_header-purch_date   =  sy-datum.    " PO date
      wa_bapi_header-req_date_h   =  sy-datum.   " Required Delivery Date
      wa_bapi_header-pmnttrms     =  '01'.    " Payment Terms
    wa_bapi_header-incoterms1   =  wa_header-inco1.
    wa_bapi_header-incoterms2   =  wa_header-inco2.
    wa_bapi_header-price_date   =  wa_header-prsdt.    " Pricing date
    wa_bapi_header-currency     =  wa_header-waerk.    " Document Currency
    wa_bapi_header-sales_grp  =  wa_header-vkgrp. " Sales group
    wa_bapi_header-price_list   =  wa_header-pltyp. " Price list type
    wa_bapi_header-cust_group   =  wa_header-kdgrp.   " Cust Group
    wa_bapi_header-ship_type    =  wa_header-vsart.   " Shipping Type
    wa_bapi_header-purch_no_s   =  wa_header-bstkd_e. " Ship-to-party po number
    wa_bapi_header-collect_no   =  wa_header-submi.   " Collective No.
    wa_bapi_header-name         =  wa_header-bname.   " Name
    wa_bapi_header-ref_1        =  wa_header-ihrez.   " Your Reference
    wa_bapi_header-cust_grp1    =  wa_header-kvgr1.   " Industry
    wa_bapi_header-cust_grp2    =  wa_header-kvgr2.   " Customer BU
    *ENDFORM.                    " f_header
    IF wa_header-partner_1 IS NOT INITIAL.
        wa_bapi_partner-partn_role = 'AG'.
        wa_bapi_partner-partn_numb = '0000666666'.
        wa_bapi_partner-itm_number = '000000'.
        append wa_bapi_partner to it_bapi_partner.
        clear wa_bapi_partner.
    ENDIF.
      call function 'CONVERSION_EXIT_ALPHA_INPUT'
        exporting
          input  = wa_header-partner_2
        importing
          output = wa_header-partner_2.
    IF wa_header-partner_2 IS NOT INITIAL.
        wa_bapi_partner-partn_role = 'WE'.
        wa_bapi_partner-partn_numb = '0000666666'.
        wa_bapi_partner-itm_number = '000000'.
        append wa_bapi_partner to it_bapi_partner.
        clear wa_bapi_partner.
    ENDIF.
      perform f_item.
    data : order_items_inx type table of bapisditmx with header line.
      order_items_inx-material          = 'X'.  "
      order_items_inx-target_qty        = 'X'.  "
      order_items_inx-comp_quant        = 'X'.  "
      order_items_inx-trgqty_den        = 'X'.
      order_items_inx-rnddlv_qty        = 'X'.
    order_items_inx-updateflag = 'I'.
    order_items_inx-target_qu = 'X'.
      order_items_inx-plant             = 'X'.  "
      append order_items_inx.
      call function 'BAPI_SALESORDER_CREATEFROMDAT2'
        exporting
          salesdocumentin = 'MX11111152'
      order_header_in      = wa_bapi_header
             order_header_inx     = wa_bapi_headerx
      importing
      salesdocument        = sales_order_no
      tables
      return               = it_bapireturn
      order_items_in       = it_bapi_item
      order_items_inx      =  order_items_inx
      order_partners       = it_bapi_partner
       order_conditions_in  = it_bapi_cond.
      if sy-subrc is initial.
      commit work.
      endif.
    *&      Form  f_item
          text
    form f_item .
      call function 'CONVERSION_EXIT_ALPHA_INPUT'
        exporting
          input  = wa_item-posnr
        importing
          output = wa_item-posnr.
      wa_item-posnr = '000010'.
    IF sy-subrc EQ 0. "IS INITIAL.
      move wa_item-posnr to g_str_count."commented out by shakti
    ENDIF.
      wa_bapi_item-itm_number        =  wa_item-posnr.  " Line item
    WA_BAPI_ITEM-PO_ITM_NO         =  WA_ITEM-EBELP.
    wa_bapi_item-division          = wa_item-spart.
      wa_bapi_item-purch_no_c        = 'ddr1234'.   " po number
      wa_bapi_item-purch_date        = sy-datum.   " po date
      wa_bapi_item-purch_no_s        = 'MX11111112'. " Ship-to-party po number
      wa_item-matnr = 'MAXIMO_SERVICE'.
      call function 'CONVERSION_EXIT_MATN1_INPUT'
        exporting
          input        = wa_item-matnr
        importing
          output       = wa_item-matnr
        exceptions
          length_error = 1
          others       = 2.
      if sy-subrc is initial.
        wa_bapi_item-material        = wa_item-matnr.  "material
      endif.
      wa_bapi_item-target_qty        = '1'. " Order qty
      wa_bapi_item-comp_quant = '1'.
      wa_bapi_item-target_qu = 'EA'.
        wa_bapi_item-fixed_quan = '1'.
    wa_bapi_item-comp_quant        = wa_item-kwmeng.
    wa_bapi_item-trgqty_den        = '1'.
    wa_bapi_item-rnddlv_qty        = wa_item-kwmeng.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
       EXPORTING
         input  = wa_item-ps_psp_pnr
       IMPORTING
         output = wa_item-ps_psp_pnr.
    IF sy-subrc = 0.
       wa_bapi_item-wbs_elem          = wa_item-ps_psp_pnr.
    ENDIF.
      wa_bapi_item-item_categ        = 'ZMAX'.
    wa_bapi_item-ex_rate_fi        = wa_item-kurrf.
    wa_bapi_item-dli_profil        = wa_item-ffprf.   " Dynamic item processor profile
    wa_bapi_item-route             = wa_item-route.   " route
    wa_bapi_item-exchg_rate        = wa_item-kursk.
      wa_bapi_item-plant             = '2090'.   " Plant
      wa_bapi_item-ship_point        = 'FN11'.   " Shipping point
    wa_bapi_item-store_loc         = wa_item-lgort.   " stg loc
    REPLACE ALL OCCURRENCES OF  ',' IN wa_item-ntgew WITH '.'.
    REPLACE ALL OCCURRENCES OF  ',' IN wa_item-brgew WITH '.'.
    wa_bapi_item-net_weight        = wa_item-ntgew.  "
    wa_bapi_item-gross_wght        = wa_item-brgew.  "
      call function 'CONVERSION_EXIT_CUNIT_INPUT'
        exporting
          input    = wa_item-gewei
          language = sy-langu
        importing
          output   = wa_item-gewei.
       EXCEPTIONS
         unit_not_found = 1
         OTHERS         = 2.
    IF sy-subrc <> 0.
    ENDIF.
      wa_bapi_item-untof_wght        =  'KG'.  " weight unit
      replace all occurrences of  ',' in wa_item-kursk with '.'.
      replace all occurrences of  ',' in wa_item-kurrf with '.'.
    wa_bapi_item-profit_ctr        = wa_item-prctr.   " Profit center
    wa_bapi_item-resanalkey        = wa_item-abgrs.   " RESULT ANALYSIS KEY
    wa_bapi_item-cstg_sheet        = wa_item-kalsm_k. " COSTING SHEET
      append wa_bapi_item to it_bapi_item.
    endform.                    " f_item
    Thanks & regards,
    Chetan

    see the following to create sales order:-
    *& Report  ZSALESORDER
    *&DEVELOPED BY JANI KRUPA 4.10.2008
    REPORT  ZSALESORDER.
    Parameters
    Sales document type
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text FOR FIELD p_auart.
    PARAMETERS: p_auart TYPE auart OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Sales organization
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text1 FOR FIELD p_vkorg.
    PARAMETERS: p_vkorg TYPE vkorg OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Distribution channel
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text2 FOR FIELD p_vtweg.
    PARAMETERS: p_vtweg TYPE vtweg OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Division.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text3 FOR FIELD p_spart.
    PARAMETERS: p_spart TYPE spart OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    SKIP 1.
    Sold-to
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text4 FOR FIELD p_sold.
    PARAMETERS: p_sold  TYPE kunnr OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Ship-to
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text5 FOR FIELD p_ship.
    PARAMETERS: p_ship  TYPE kunnr OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    SKIP 1.
    Material
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text6 FOR FIELD p_matnr.
    PARAMETERS: p_matnr TYPE matnr   OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Quantity.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text7 FOR FIELD p_menge.
    PARAMETERS: p_menge TYPE kwmeng  OBLIGATORY.
    SELECTION-SCREEN END OF LINE.
    Plant
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text9 FOR FIELD p_plant.
    PARAMETERS: p_plant TYPE werks_d .
    SELECTION-SCREEN END OF LINE.
    Complete Deliver
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 2(20) v_text10 FOR FIELD p_autlf.
    PARAMETERS: p_autlf TYPE autlf DEFAULT 'X'.
    SELECTION-SCREEN END OF LINE.
    Data declarations.
    DATA: v_vbeln            LIKE vbak-vbeln.
    DATA: header             LIKE bapisdhead1.
    DATA: headerx            LIKE bapisdhead1x.
    DATA: item               LIKE bapisditem  OCCURS 0 WITH HEADER LINE.
    DATA: itemx              LIKE bapisditemx OCCURS 0 WITH HEADER LINE.
    DATA: partner            LIKE bapipartnr  OCCURS 0 WITH HEADER LINE.
    DATA: return             LIKE bapiret2    OCCURS 0 WITH HEADER LINE.
    DATA: lt_schedules_inx   TYPE STANDARD TABLE OF bapischdlx
                             WITH HEADER LINE.
    DATA: lt_schedules_in    TYPE STANDARD TABLE OF bapischdl
                             WITH HEADER LINE.
    DATA: lt_schedules_ink    TYPE STANDARD TABLE OF bapisdhead1
                             WITH HEADER LINE.
    Initialization.
    INITIALIZATION.
    v_text   = 'Order type'.
    v_text1  = 'Sales Org'.
    v_text2  = 'Distribution channel'.
    v_text3  = 'Division'.
    v_text4  = 'Sold-to'.
    v_text5  = 'Ship-to'.
    v_text6  = 'Material'.
    v_text7  = 'Quantity'.
    v_text9  = 'Plant'.
    v_text10 = 'Complete delivery'.
    Start-of-selection.
    START-OF-SELECTION.
    Header data
    Sales document type
      header-doc_type = p_auart.
      headerx-doc_type = 'X'.
    Sales organization
      header-sales_org = p_vkorg.
      headerx-sales_org = 'X'.
    Distribution channel
      header-distr_chan  = p_vtweg.
      headerx-distr_chan = 'X'.
    Division
      header-division = p_spart.
      headerx-division = 'X'.
      headerx-updateflag = 'I'.
    *Complete delivery
        header-COMPL_DLV = p_autlf.
        header-COMPL_DLV = 'X'.
    Partner data
    Sold to
      partner-partn_role = 'AG'.
      partner-partn_numb = p_sold.
      APPEND partner.
    Ship to
      partner-partn_role = 'WE'.
      partner-partn_numb = p_ship.
      APPEND partner.
    ITEM DATA
      itemx-updateflag = 'I'.
    Line item number.
      item-itm_number = '000010'.
      itemx-itm_number = 'X'.
    Material
      item-material = p_matnr.
      itemx-material = 'X'.
    Plant
      item-plant    = p_plant.
      itemx-plant   = 'X'.
    Quantity
      item-target_qty = p_menge.
      itemx-target_qty = 'X'.
    item category
      itemx-ITEM_CATEG = 'X'.
      APPEND item.
      APPEND itemx.
      ITEM DATA
      itemx-updateflag = 'I'.
    Line item number.
      item-itm_number = '000020'.
      itemx-itm_number = 'X'.
    Material
      item-material = p_matnr.
      itemx-material = 'X'.
    Plant
      item-plant    = p_plant.
      itemx-plant   = 'X'.
    Quantity
      item-target_qty = p_menge.
      itemx-target_qty = 'X'.
      APPEND item.
      APPEND itemx.
      Fill schedule lines
      lt_schedules_in-itm_number = '000010'.
      lt_schedules_in-sched_line = '0001'.
      lt_schedules_in-req_qty    = p_menge.
      APPEND lt_schedules_in.
      Fill schedule line flags
      lt_schedules_inx-itm_number  = '000010'.
      lt_schedules_inx-sched_line  = '0001'.
      lt_schedules_inx-updateflag  = 'X'.
      lt_schedules_inx-req_qty     = 'X'.
      APPEND lt_schedules_inx.
      Fill schedule lines
      lt_schedules_in-itm_number = '000020'.
      lt_schedules_in-sched_line = '0001'.
      lt_schedules_in-req_qty    = p_menge.
      APPEND lt_schedules_in.
      Fill schedule line flags
      lt_schedules_inx-itm_number  = '000020'.
      lt_schedules_inx-sched_line  = '0001'.
      lt_schedules_inx-updateflag  = 'X'.
      lt_schedules_inx-req_qty     = 'X'.
      APPEND lt_schedules_inx.
    Call the BAPI to create the sales order.
      CALL FUNCTION 'BAPI_SALESDOCU_CREATEFROMDATA1'
           EXPORTING
                sales_header_in     = header
                sales_header_inx    = headerx
           IMPORTING
                salesdocument_ex    = v_vbeln
           TABLES
                return              = return
                sales_items_in      = item
                sales_items_inx     = itemx
                sales_schedules_in  = lt_schedules_in
                sales_schedules_inx = lt_schedules_inx
                sales_partners      = partner.
    Check the return table.
      LOOP AT return WHERE type = 'E' OR type = 'A'.
        EXIT.
      ENDLOOP.
      IF sy-subrc = 0.
        WRITE: / 'Error in creating document'.
      ELSE.
    Commit the work.
        COMMIT WORK AND WAIT.
        WRITE: / 'Document ', v_vbeln, ' created'.
      ENDIF.

  • Hi ALL i have a BDC code  it is not working properly

    this BDC code is not working properly , when ever the file is transfering BDC is aborting in the case of   invalid material/batch comes into teh picture... so please could you ''Check for invalid material/batch combinations so they are not processed by the BDC in the program and correctly output in an exception report''
    *****************************CODE HERE*****************************
    S E L E C T I O N S C R E E N
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
    PARAMETERS: p_file LIKE rlgrap-filename,
    p_arch LIKE rlgrap-filename. "RM080107
    SELECTION-SCREEN SKIP.
    PARAMETERS: p_mode LIKE ctu_params-dismode DEFAULT 'N'.
    SELECTION-SCREEN END OF BLOCK b1.
    I N C L U D E S
    INCLUDE zwm_np_stock_recon_top.
    INCLUDE zwm_np_stock_recon_f01.
    I N I T I A L I Z A T I O N
    INITIALIZATION.
    PERFORM get_interface_filename USING c_interface_file p_file.
    PERFORM get_interface_filename USING c_archive_file p_arch."RM080107
    S T A R T O F S E L E C T I O N
    START-OF-SELECTION.
    PERFORM read_file USING p_file.
    PERFORM pre_processing.
    E N D O F S E L E C T I O N
    END-OF-SELECTION.
    PERFORM process_checks.
    IF w_no_change = 'X'.
    WRITE: / text-b03.
    WRITE: / sy-uline(34).
    ELSE.
    PERFORM bdc_mi09.
    PERFORM file_check_report.
    PERFORM bdc_report.
    ENDIF.
    PERFORM post_process_checks.
    *-- Move the processed file to archive directory
    PERFORM move_file.
    ...*************.........first include...................************
    INCLUDE ZWM_NP_STOCK_RECON_TOP *
    Data declaration ----------------------------------------------
    TYPES: st_rawdata(2000) TYPE c.
    TYPES: BEGIN OF st_stck_cnt,
    werks TYPE iseg-werks, "plant
    lgort TYPE iseg-lgort, "storage location
    matnr TYPE iseg-matnr, "material number
    charg TYPE iseg-charg, "batch
    vfdat TYPE mch1-vfdat, "Sell by date
    lwedt TYPE mch1-lwedt, "Manufacture date
    quarn(8) TYPE n, "qaunrantine quantity
    menge(8) TYPE n, "quantity on hand
    message(1), "Message Type (E/W/I)
    msg_txt TYPE t100-text, "Message Text
    zerostck(1), "Zero stock identifier "RM220307
    END OF st_stck_cnt.
    TYPES: BEGIN OF st_batch_errors,
    matnr TYPE iseg-matnr, "material number
    charg TYPE iseg-charg, "batch
    clabs TYPE mchb-clabs, "Stock Balance
    END OF st_batch_errors.
    DATA:
    t_rawdata TYPE TABLE OF st_rawdata,
    w_rawdata TYPE st_rawdata,
    t_stck_cnt TYPE TABLE OF st_stck_cnt,
    d_stck_cnt TYPE TABLE OF st_stck_cnt, "RM191006
    w_stck_cnt TYPE st_stck_cnt,
    t_batch_errors TYPE TABLE OF st_batch_errors,
    w_batch_errors TYPE st_batch_errors,
    t_messtab LIKE bdcmsgcoll OCCURS 0,
    w_messtab LIKE LINE OF t_messtab,
    w_no_change.
    CONSTANTS: c_interface_file(26) TYPE c VALUE 'ZNP_STOCK_RECON',
    c_archive_file(26) TYPE c
    VALUE 'ZNP_STOCK_RECON_ARCHIVE'. "RM080107
    .*************................second include..........************
    ***INCLUDE ZWM_NEXTPHARMA_STOKRECON_F01 .
    *& Form read_file
    reads NextPharma file sent through via webmethods
    -->P_FILENAME
    FORM read_file USING p_filename.
    CLEAR: t_rawdata,
    w_rawdata.
    REFRESH: t_rawdata.
    OPEN DATASET p_filename FOR INPUT IN TEXT MODE.
    IF sy-subrc <> 0.
    MESSAGE e720(01).
    ENDIF.
    DO.
    READ DATASET p_filename INTO w_rawdata.
    IF sy-subrc <> 0.
    EXIT.
    ELSE.
    APPEND w_rawdata TO t_rawdata.
    ENDIF.
    ENDDO.
    CLOSE DATASET p_filename.
    ENDFORM. " read_file
    *& Form pre_processing
    Read file values into internal table
    FORM pre_processing.
    DATA: lw_matnr TYPE iseg-matnr.
    LOOP AT t_rawdata INTO w_rawdata.
    lw_matnr = w_rawdata+21(20). "RM031006
    lw_matnr = w_rawdata+22(18). "RM031006
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
    input = lw_matnr
    IMPORTING
    output = lw_matnr
    EXCEPTIONS
    length_error = 1
    OTHERS = 2.
    MOVE: lw_matnr TO w_stck_cnt-matnr.
    w_stck_cnt-werks = w_rawdata+14(4).
    w_stck_cnt-lgort = w_rawdata+18(4).
    w_stck_cnt-charg = w_rawdata+84(25).
    w_stck_cnt-vfdat = w_rawdata+109(8).
    w_stck_cnt-lwedt = w_rawdata+117(8).
    w_stck_cnt-quarn = w_rawdata+141(8).
    w_stck_cnt-menge = w_rawdata+125(8).
    APPEND w_stck_cnt TO t_stck_cnt.
    CLEAR w_stck_cnt.
    ENDLOOP.
    SORT t_stck_cnt BY werks
    lgort
    matnr
    charg.
    DELETE ADJACENT DUPLICATES FROM t_stck_cnt.
    ENDFORM. " pre_processing
    *& Form bdc_mi09
    Run file data via BDC TCODE: MI09
    FORM bdc_mi09.
    DATA: t_bdcdata TYPE TABLE OF bdcdata,
    w_bdcdata TYPE bdcdata,
    lw_datum(10) TYPE c,
    lw_count(2) TYPE n.
    WRITE sy-datum TO lw_datum DD/MM/YYYY.
    Front Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0700'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Enter
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '/00'.
    APPEND w_bdcdata TO t_bdcdata.
    Count Date
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'RM07I-ZLDAT'.
    w_bdcdata-fval = lw_datum.
    APPEND w_bdcdata TO t_bdcdata.
    Document Date
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'RM07I-BLDAT'.
    w_bdcdata-fval = lw_datum.
    APPEND w_bdcdata TO t_bdcdata.
    Plant
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'IKPF-WERKS'.
    w_bdcdata-fval = w_stck_cnt-werks.
    APPEND w_bdcdata TO t_bdcdata.
    Storage Location
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'IKPF-LGORT'.
    w_bdcdata-fval = w_stck_cnt-lgort.
    APPEND w_bdcdata TO t_bdcdata.
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    Do not submit items with Errors against them
    CHECK w_stck_cnt-message NE 'E' AND
    w_stck_cnt-zerostck NE 'X'.
    "RM220307
    lw_count = lw_count + 1.
    Input Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0731'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Page Down
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '=P+'.
    APPEND w_bdcdata TO t_bdcdata.
    Material
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-MATNR(01)'.
    w_bdcdata-fval = w_stck_cnt-matnr.
    APPEND w_bdcdata TO t_bdcdata.
    Batch
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-CHARG(01)'.
    w_bdcdata-fval = w_stck_cnt-charg.
    APPEND w_bdcdata TO t_bdcdata.
    IF w_stck_cnt-menge NE 0.
    Quantity
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-ERFMG(01)'.
    w_bdcdata-fval = w_stck_cnt-menge.
    APPEND w_bdcdata TO t_bdcdata.
    *-- Begin RM220307 - We need to create an item when the quantity is zero
    *-- in file and is non-zero in SAP
    ELSE.
    Zero Stock indicator
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-XNULL(01)'.
    w_bdcdata-fval = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    *-- End RM220307
    ENDIF.
    ENDLOOP.
    CHECK lw_count NE 0.
    After all line items have been input
    Final Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0731'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Save Document
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '=BU'.
    APPEND w_bdcdata TO t_bdcdata.
    CALL TRANSACTION 'MI09' USING t_bdcdata
    MODE p_mode
    MESSAGES INTO t_messtab.
    ENDFORM. " bdc_mi09
    *& Form bdc_report
    Write BDC Messages.
    FORM bdc_report.
    DATA: lw_text TYPE t100-text.
    SKIP.
    WRITE: / text-b01.
    WRITE: / sy-uline(21).
    SKIP.
    Write BDC Messages
    LOOP AT t_messtab INTO w_messtab WHERE msgspra = sy-langu.
    MESSAGE ID w_messtab-msgid TYPE w_messtab-msgtyp
    NUMBER w_messtab-msgnr
    WITH w_messtab-msgv1
    w_messtab-msgv2
    w_messtab-msgv3
    w_messtab-msgv4
    INTO lw_text.
    WRITE: / lw_text.
    ENDLOOP.
    ENDFORM. " bdc_report
    *& Form process_checks
    Perform process check before creating BDC Session
    FORM process_checks.
    DATA: lw_clabs LIKE mchb-clabs,
    lw_menge LIKE mchb-clabs,
    lw_matnr LIKE mara-matnr,
    lw_charg LIKE mch1-charg,
    lw_fail,
    lw_vfdat TYPE mch1-vfdat,
    lv_sell TYPE c, "RM191006
    lv_qty(8) TYPE c. "RM191006
    CLEAR: d_stck_cnt[], d_stck_cnt. "RM191006
    Check if any of the stock figures differ from current stock figures
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    lw_menge = w_stck_cnt-menge.
    SELECT SINGLE clabs INTO lw_clabs
    FROM mchb
    WHERE matnr = w_stck_cnt-matnr
    AND werks = w_stck_cnt-werks
    AND lgort = w_stck_cnt-lgort
    AND charg = w_stck_cnt-charg.
    IF sy-subrc = 0.
    IF lw_clabs NE lw_menge.
    lw_fail = 'X'.
    *-- Begin RM220307 - Do not create PI item if the stock is zero in the
    *-- file and is zero in SAP
    EXIT.
    ELSEIF lw_clabs = 0 AND lw_menge = 0.
    w_stck_cnt-zerostck = 'X'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    ENDIF.
    *-- End RM220307
    ELSE.
    lw_fail = 'X'.
    ERROR
    ENDIF.
    ENDLOOP.
    If no differences are found set NO CHANGE Flag
    IF lw_fail NE 'X'.
    w_no_change = 'X'.
    EXIT.
    ENDIF.
    Check for Errors in file data
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    CLEAR lv_sell. "RM191006
    SELECT SINGLE matnr INTO lw_matnr
    FROM mara
    WHERE matnr = w_stck_cnt-matnr.
    IF sy-subrc NE 0.
    Invalid Material (E)
    w_stck_cnt-message = 'E'.
    w_stck_cnt-msg_txt = 'Invalid Material'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    ENDIF.
    SELECT SINGLE charg vfdat
    INTO (lw_charg, lw_vfdat)
    FROM mch1 "KOB01 - changed from MCHA
    WHERE matnr = w_stck_cnt-matnr
    AND charg = w_stck_cnt-charg.
    AND werks = w_stck_cnt-werks.
    IF sy-subrc NE 0.
    Invalid Material Batch (E)
    w_stck_cnt-message = 'E'.
    CONCATENATE 'Invalid Material Batch for plant' w_stck_cnt-werks
    INTO w_stck_cnt-msg_txt SEPARATED BY space.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    ELSE.
    IF w_stck_cnt-vfdat <> lw_vfdat.
    Sell by dates do not match (W)
    w_stck_cnt-message = 'W'.
    w_stck_cnt-msg_txt =
    'Sell by Date does not match Shelf life Expiry Date'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    lv_sell = 'X'. "RM191006
    CONTINUE. "RM191006
    ENDIF.
    ENDIF.
    IF w_stck_cnt-quarn > 0.
    Quarantine balance not Zero (W)
    w_stck_cnt-message = 'W'.
    *-- Begin RM191006
    *-- We do want all warning messages on the report
    lv_qty = w_stck_cnt-quarn.
    CONDENSE lv_qty NO-GAPS.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
    input = lv_qty
    IMPORTING
    output = lv_qty.
    w_stck_cnt-msg_txt = 'Quarantine balance is not zero'.
    CONCATENATE 'Quarantine balance is ' lv_qty '- not zero'
    INTO w_stck_cnt-msg_txt SEPARATED BY space.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    IF lv_sell = 'X'.
    APPEND w_stck_cnt TO d_stck_cnt.
    CLEAR lv_sell.
    ELSE.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    ENDIF.
    *-- End RM191006
    ENDIF.
    ENDLOOP.
    *-- Begin RM191006
    *-- Finally get all the records into dummy table to report
    APPEND LINES OF t_stck_cnt TO d_stck_cnt.
    SORT d_stck_cnt.
    DELETE ADJACENT DUPLICATES FROM d_stck_cnt.
    *-- End RM191006
    ENDFORM. " process_checks
    *& Form file_check_report
    Write warning and Error messages from File checks
    FORM file_check_report.
    WRITE: /2 'Material',
    22 'Batch',
    32 'Sell By',
    45 'Message Text'.
    WRITE: /2 sy-uline(115).
    SKIP.
    LOOP AT t_stck_cnt INTO w_stck_cnt. "RM191006
    LOOP AT d_stck_cnt INTO w_stck_cnt. "RM191006
    CHECK w_stck_cnt-message NE ' '.
    WRITE: /2 w_stck_cnt-matnr,
    22 w_stck_cnt-charg,
    32 w_stck_cnt-vfdat,
    43 w_stck_cnt-message,
    45 w_stck_cnt-msg_txt.
    ENDLOOP.
    ENDFORM. " file_check_report
    *& Form post_process_checks
    Check Material Batches in SAP against NP File
    FORM post_process_checks.
    RANGES: r_matnr FOR mchb-matnr,
    r_lgort FOR mchb-lgort,
    r_werks FOR mchb-werks.
    SORT t_stck_cnt.
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    AT END OF matnr.
    r_lgort-sign = 'I'.
    r_lgort-option = 'EQ'.
    r_lgort-low = w_stck_cnt-lgort.
    APPEND r_lgort.
    r_werks-sign = 'I'.
    r_werks-option = 'EQ'.
    r_werks-low = w_stck_cnt-werks.
    APPEND r_werks.
    r_matnr-sign = 'I'.
    r_matnr-option = 'EQ'.
    r_matnr-low = w_stck_cnt-matnr.
    APPEND r_matnr.
    ENDAT.
    ENDLOOP.
    Select all material batches for NP Materials
    SELECT matnr charg clabs
    INTO TABLE t_batch_errors
    FROM mchb
    WHERE werks IN r_werks
    AND lgort IN r_lgort.
    IF sy-subrc EQ 0.
    Check if the Material Batches are in the NP file
    LOOP AT t_batch_errors INTO w_batch_errors.
    Disregard Batches without positive unrestricted stock
    IF w_batch_errors-clabs LE 0.
    DELETE t_batch_errors.
    CONTINUE.
    ENDIF.
    READ TABLE t_stck_cnt INTO w_stck_cnt
    WITH KEY matnr = w_batch_errors-matnr
    charg = w_batch_errors-charg.
    IF sy-subrc = 0.
    DELETE t_batch_errors.
    ENDIF.
    ENDLOOP.
    ENDIF.
    CHECK NOT t_batch_errors[] IS INITIAL.
    Write Batch chak results to report
    SKIP.
    WRITE: / text-b02.
    WRITE: / sy-uline(74).
    WRITE: /2 'Material',
    22 'Batch'.
    WRITE: /2 sy-uline(32).
    SKIP.
    LOOP AT t_batch_errors INTO w_batch_errors.
    WRITE: /2 w_batch_errors-matnr,
    22 w_batch_errors-charg.
    ENDLOOP.
    ENDFORM. " post_process_checks
    G E T _ I N T E R F A C E _ F I L E N A M E
    FORM get_interface_filename USING filename lw_path.
    DATA: i_file TYPE filename-fileintern,
    out_filename LIKE v_path-pathextern.
    CLEAR: out_filename.
    i_file = filename.
    get the interface filename to be used when creating file
    CALL FUNCTION 'FILE_GET_NAME'
    EXPORTING
    logical_filename = i_file
    IMPORTING
    file_name = out_filename
    EXCEPTIONS
    file_not_found = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    MOVE out_filename TO lw_path.
    IF filename NE c_archive_file. "RM080107
    CONCATENATE lw_path 'NP_StockBalance.dat'
    INTO lw_path.
    *-- Begin RM080107 - Add timestamp to the archived file
    ELSE.
    CONCATENATE lw_path 'NP_StockBalance' sy-datum sy-uzeit '.dat'
    INTO lw_path.
    ENDIF.
    *-- End RM080107
    ELSE.
    ENDIF.
    ENDFORM. "get_interface_filename
    *& Form move_file RM080107
    Move the processed file to archive directory
    FORM move_file.
    *-- At last move the file to archive directory
    OPEN DATASET p_arch FOR OUTPUT IN TEXT MODE.
    IF sy-subrc = 0.
    LOOP AT t_rawdata INTO w_rawdata.
    TRANSFER w_rawdata TO p_arch.
    ENDLOOP.
    ENDIF.
    CLOSE DATASET p_arch.
    DELETE DATASET p_file.
    ENDFORM. " move_file

    Hi,
    S E L E C T I O N S C R E E N
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
    PARAMETERS: p_file LIKE rlgrap-filename,
    p_arch LIKE rlgrap-filename. "RM080107
    SELECTION-SCREEN SKIP.
    PARAMETERS: p_mode LIKE ctu_params-dismode DEFAULT 'N'.
    SELECTION-SCREEN END OF BLOCK b1.
    I N C L U D E S
    INCLUDE zwm_np_stock_recon_top.
    INCLUDE zwm_np_stock_recon_f01.
    I N I T I A L I Z A T I O N
    INITIALIZATION.
    PERFORM get_interface_filename USING c_interface_file p_file.
    PERFORM get_interface_filename USING c_archive_file p_arch."RM080107
    S T A R T O F S E L E C T I O N
    START-OF-SELECTION.
    PERFORM read_file USING p_file.
    PERFORM pre_processing.
    E N D O F S E L E C T I O N
    END-OF-SELECTION.
    PERFORM process_checks.
    IF w_no_change = 'X'.
    WRITE: / text-b03.
    WRITE: / sy-uline(34).
    ELSE.
    PERFORM bdc_mi09.
    PERFORM file_check_report.
    PERFORM bdc_report.
    ENDIF.
    PERFORM post_process_checks.
    *-- Move the processed file to archive directory
    PERFORM move_file.
    ...*************.........first include...................************
    INCLUDE ZWM_NP_STOCK_RECON_TOP *
    Data declaration ----------------------------------------------
    TYPES: st_rawdata(2000) TYPE c.
    TYPES: BEGIN OF st_stck_cnt,
    werks TYPE iseg-werks, "plant
    lgort TYPE iseg-lgort, "storage location
    matnr TYPE iseg-matnr, "material number
    charg TYPE iseg-charg, "batch
    vfdat TYPE mch1-vfdat, "Sell by date
    lwedt TYPE mch1-lwedt, "Manufacture date
    quarn(8) TYPE n, "qaunrantine quantity
    menge(8) TYPE n, "quantity on hand
    message(1), "Message Type (E/W/I)
    msg_txt TYPE t100-text, "Message Text
    zerostck(1), "Zero stock identifier "RM220307
    END OF st_stck_cnt.
    TYPES: BEGIN OF st_batch_errors,
    matnr TYPE iseg-matnr, "material number
    charg TYPE iseg-charg, "batch
    clabs TYPE mchb-clabs, "Stock Balance
    END OF st_batch_errors.
    DATA:
    t_rawdata TYPE TABLE OF st_rawdata,
    w_rawdata TYPE st_rawdata,
    t_stck_cnt TYPE TABLE OF st_stck_cnt,
    d_stck_cnt TYPE TABLE OF st_stck_cnt, "RM191006
    w_stck_cnt TYPE st_stck_cnt,
    t_batch_errors TYPE TABLE OF st_batch_errors,
    w_batch_errors TYPE st_batch_errors,
    t_messtab LIKE bdcmsgcoll OCCURS 0,
    w_messtab LIKE LINE OF t_messtab,
    w_no_change.
    CONSTANTS: c_interface_file(26) TYPE c VALUE 'ZNP_STOCK_RECON',
    c_archive_file(26) TYPE c
    VALUE 'ZNP_STOCK_RECON_ARCHIVE'. "RM080107
    .*************................second include..........************
    ***INCLUDE ZWM_NEXTPHARMA_STOKRECON_F01 .
    *& Form read_file
    reads NextPharma file sent through via webmethods
    -->P_FILENAME
    FORM read_file USING p_filename.
    CLEAR: t_rawdata,
    w_rawdata.
    REFRESH: t_rawdata.
    OPEN DATASET p_filename FOR INPUT IN TEXT MODE.
    IF sy-subrc <> 0.
    MESSAGE e720(01).
    ENDIF.
    DO.
    READ DATASET p_filename INTO w_rawdata.
    IF sy-subrc <> 0.
    EXIT.
    ELSE.
    APPEND w_rawdata TO t_rawdata.
    ENDIF.
    ENDDO.
    CLOSE DATASET p_filename.
    ENDFORM. " read_file
    *& Form pre_processing
    Read file values into internal table
    FORM pre_processing.
    DATA: lw_matnr TYPE iseg-matnr.
    LOOP AT t_rawdata INTO w_rawdata.
    lw_matnr = w_rawdata+21(20). "RM031006
    lw_matnr = w_rawdata+22(18). "RM031006
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
    input = lw_matnr
    IMPORTING
    output = lw_matnr
    EXCEPTIONS
    length_error = 1
    OTHERS = 2.
    MOVE: lw_matnr TO w_stck_cnt-matnr.
    w_stck_cnt-werks = w_rawdata+14(4).
    w_stck_cnt-lgort = w_rawdata+18(4).
    w_stck_cnt-charg = w_rawdata+84(25).
    w_stck_cnt-vfdat = w_rawdata+109(8).
    w_stck_cnt-lwedt = w_rawdata+117(8).
    w_stck_cnt-quarn = w_rawdata+141(8).
    w_stck_cnt-menge = w_rawdata+125(8).
    APPEND w_stck_cnt TO t_stck_cnt.
    CLEAR w_stck_cnt.
    ENDLOOP.
    SORT t_stck_cnt BY werks
    lgort
    matnr
    charg.
    DELETE ADJACENT DUPLICATES FROM t_stck_cnt.
    ENDFORM. " pre_processing
    *& Form bdc_mi09
    Run file data via BDC TCODE: MI09
    FORM bdc_mi09.
    DATA: t_bdcdata TYPE TABLE OF bdcdata,
    w_bdcdata TYPE bdcdata,
    lw_datum(10) TYPE c,
    lw_count(2) TYPE n.
    WRITE sy-datum TO lw_datum DD/MM/YYYY.
    <b>select single MATNR
                       WERKS
                       CHARG
               from MCHA
               into (l_matnr, l_werks, l_charg)
               where matnr = w_stck_cnt-matnr
                  and werks = w_stck_cnt-werks.
                  and charg =  w_stck_cnt-charg.
    if sy-subrc ne 0.
    continue.
    endif.</b>
    Front Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0700'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Enter
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '/00'.
    APPEND w_bdcdata TO t_bdcdata.
    Count Date
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'RM07I-ZLDAT'.
    w_bdcdata-fval = lw_datum.
    APPEND w_bdcdata TO t_bdcdata.
    Document Date
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'RM07I-BLDAT'.
    w_bdcdata-fval = lw_datum.
    APPEND w_bdcdata TO t_bdcdata.
    Plant
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'IKPF-WERKS'.
    w_bdcdata-fval = w_stck_cnt-werks.
    APPEND w_bdcdata TO t_bdcdata.
    Storage Location
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'IKPF-LGORT'.
    w_bdcdata-fval = w_stck_cnt-lgort.
    APPEND w_bdcdata TO t_bdcdata.
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    Do not submit items with Errors against them
    CHECK w_stck_cnt-message NE 'E' AND
    w_stck_cnt-zerostck NE 'X'.
    "RM220307
    lw_count = lw_count + 1.
    Input Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0731'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Page Down
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '=P+'.
    APPEND w_bdcdata TO t_bdcdata.
    Material
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-MATNR(01)'.
    w_bdcdata-fval = w_stck_cnt-matnr.
    APPEND w_bdcdata TO t_bdcdata.
    Batch
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-CHARG(01)'.
    w_bdcdata-fval = w_stck_cnt-charg.
    APPEND w_bdcdata TO t_bdcdata.
    IF w_stck_cnt-menge NE 0.
    Quantity
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-ERFMG(01)'.
    w_bdcdata-fval = w_stck_cnt-menge.
    APPEND w_bdcdata TO t_bdcdata.
    *-- Begin RM220307 - We need to create an item when the quantity is zero
    *-- in file and is non-zero in SAP
    ELSE.
    Zero Stock indicator
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'ISEG-XNULL(01)'.
    w_bdcdata-fval = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    *-- End RM220307
    ENDIF.
    ENDLOOP.
    CHECK lw_count NE 0.
    After all line items have been input
    Final Screen
    CLEAR w_bdcdata.
    w_bdcdata-program = 'SAPMM07I'.
    w_bdcdata-dynpro = '0731'.
    w_bdcdata-dynbegin = 'X'.
    APPEND w_bdcdata TO t_bdcdata.
    Save Document
    CLEAR w_bdcdata.
    w_bdcdata-fnam = 'BDC_OKCODE'.
    w_bdcdata-fval = '=BU'.
    APPEND w_bdcdata TO t_bdcdata.
    CALL TRANSACTION 'MI09' USING t_bdcdata
    MODE p_mode
    MESSAGES INTO t_messtab.
    ENDFORM. " bdc_mi09
    *& Form bdc_report
    Write BDC Messages.
    FORM bdc_report.
    DATA: lw_text TYPE t100-text.
    SKIP.
    WRITE: / text-b01.
    WRITE: / sy-uline(21).
    SKIP.
    Write BDC Messages
    LOOP AT t_messtab INTO w_messtab WHERE msgspra = sy-langu.
    MESSAGE ID w_messtab-msgid TYPE w_messtab-msgtyp
    NUMBER w_messtab-msgnr
    WITH w_messtab-msgv1
    w_messtab-msgv2
    w_messtab-msgv3
    w_messtab-msgv4
    INTO lw_text.
    WRITE: / lw_text.
    ENDLOOP.
    ENDFORM. " bdc_report
    *& Form process_checks
    Perform process check before creating BDC Session
    FORM process_checks.
    DATA: lw_clabs LIKE mchb-clabs,
    lw_menge LIKE mchb-clabs,
    lw_matnr LIKE mara-matnr,
    lw_charg LIKE mch1-charg,
    lw_fail,
    lw_vfdat TYPE mch1-vfdat,
    lv_sell TYPE c, "RM191006
    lv_qty(8) TYPE c. "RM191006
    CLEAR: d_stck_cnt[], d_stck_cnt. "RM191006
    Check if any of the stock figures differ from current stock figures
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    lw_menge = w_stck_cnt-menge.
    SELECT SINGLE clabs INTO lw_clabs
    FROM mchb
    WHERE matnr = w_stck_cnt-matnr
    AND werks = w_stck_cnt-werks
    AND lgort = w_stck_cnt-lgort
    AND charg = w_stck_cnt-charg.
    IF sy-subrc = 0.
    IF lw_clabs NE lw_menge.
    lw_fail = 'X'.
    *-- Begin RM220307 - Do not create PI item if the stock is zero in the
    *-- file and is zero in SAP
    EXIT.
    ELSEIF lw_clabs = 0 AND lw_menge = 0.
    w_stck_cnt-zerostck = 'X'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    ENDIF.
    *-- End RM220307
    ELSE.
    lw_fail = 'X'.
    ERROR
    ENDIF.
    ENDLOOP.
    If no differences are found set NO CHANGE Flag
    IF lw_fail NE 'X'.
    w_no_change = 'X'.
    EXIT.
    ENDIF.
    Check for Errors in file data
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    CLEAR lv_sell. "RM191006
    SELECT SINGLE matnr INTO lw_matnr
    FROM mara
    WHERE matnr = w_stck_cnt-matnr.
    IF sy-subrc NE 0.
    Invalid Material (E)
    w_stck_cnt-message = 'E'.
    w_stck_cnt-msg_txt = 'Invalid Material'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    ENDIF.
    SELECT SINGLE charg vfdat
    INTO (lw_charg, lw_vfdat)
    FROM mch1 "KOB01 - changed from MCHA
    WHERE matnr = w_stck_cnt-matnr
    AND charg = w_stck_cnt-charg.
    AND werks = w_stck_cnt-werks.
    IF sy-subrc NE 0.
    Invalid Material Batch (E)
    w_stck_cnt-message = 'E'.
    CONCATENATE 'Invalid Material Batch for plant' w_stck_cnt-werks
    INTO w_stck_cnt-msg_txt SEPARATED BY space.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    ELSE.
    IF w_stck_cnt-vfdat <> lw_vfdat.
    Sell by dates do not match (W)
    w_stck_cnt-message = 'W'.
    w_stck_cnt-msg_txt =
    'Sell by Date does not match Shelf life Expiry Date'.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    lv_sell = 'X'. "RM191006
    CONTINUE. "RM191006
    ENDIF.
    ENDIF.
    IF w_stck_cnt-quarn > 0.
    Quarantine balance not Zero (W)
    w_stck_cnt-message = 'W'.
    *-- Begin RM191006
    *-- We do want all warning messages on the report
    lv_qty = w_stck_cnt-quarn.
    CONDENSE lv_qty NO-GAPS.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
    EXPORTING
    input = lv_qty
    IMPORTING
    output = lv_qty.
    w_stck_cnt-msg_txt = 'Quarantine balance is not zero'.
    CONCATENATE 'Quarantine balance is ' lv_qty '- not zero'
    INTO w_stck_cnt-msg_txt SEPARATED BY space.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    CONTINUE.
    IF lv_sell = 'X'.
    APPEND w_stck_cnt TO d_stck_cnt.
    CLEAR lv_sell.
    ELSE.
    MODIFY t_stck_cnt FROM w_stck_cnt.
    ENDIF.
    *-- End RM191006
    ENDIF.
    ENDLOOP.
    *-- Begin RM191006
    *-- Finally get all the records into dummy table to report
    APPEND LINES OF t_stck_cnt TO d_stck_cnt.
    SORT d_stck_cnt.
    DELETE ADJACENT DUPLICATES FROM d_stck_cnt.
    *-- End RM191006
    ENDFORM. " process_checks
    *& Form file_check_report
    Write warning and Error messages from File checks
    FORM file_check_report.
    WRITE: /2 'Material',
    22 'Batch',
    32 'Sell By',
    45 'Message Text'.
    WRITE: /2 sy-uline(115).
    SKIP.
    LOOP AT t_stck_cnt INTO w_stck_cnt. "RM191006
    LOOP AT d_stck_cnt INTO w_stck_cnt. "RM191006
    CHECK w_stck_cnt-message NE ' '.
    WRITE: /2 w_stck_cnt-matnr,
    22 w_stck_cnt-charg,
    32 w_stck_cnt-vfdat,
    43 w_stck_cnt-message,
    45 w_stck_cnt-msg_txt.
    ENDLOOP.
    ENDFORM. " file_check_report
    *& Form post_process_checks
    Check Material Batches in SAP against NP File
    FORM post_process_checks.
    RANGES: r_matnr FOR mchb-matnr,
    r_lgort FOR mchb-lgort,
    r_werks FOR mchb-werks.
    SORT t_stck_cnt.
    LOOP AT t_stck_cnt INTO w_stck_cnt.
    AT END OF matnr.
    r_lgort-sign = 'I'.
    r_lgort-option = 'EQ'.
    r_lgort-low = w_stck_cnt-lgort.
    APPEND r_lgort.
    r_werks-sign = 'I'.
    r_werks-option = 'EQ'.
    r_werks-low = w_stck_cnt-werks.
    APPEND r_werks.
    r_matnr-sign = 'I'.
    r_matnr-option = 'EQ'.
    r_matnr-low = w_stck_cnt-matnr.
    APPEND r_matnr.
    ENDAT.
    ENDLOOP.
    Select all material batches for NP Materials
    SELECT matnr charg clabs
    INTO TABLE t_batch_errors
    FROM mchb
    WHERE werks IN r_werks
    AND lgort IN r_lgort.
    IF sy-subrc EQ 0.
    Check if the Material Batches are in the NP file
    LOOP AT t_batch_errors INTO w_batch_errors.
    Disregard Batches without positive unrestricted stock
    IF w_batch_errors-clabs LE 0.
    DELETE t_batch_errors.
    CONTINUE.
    ENDIF.
    READ TABLE t_stck_cnt INTO w_stck_cnt
    WITH KEY matnr = w_batch_errors-matnr
    charg = w_batch_errors-charg.
    IF sy-subrc = 0.
    DELETE t_batch_errors.
    ENDIF.
    ENDLOOP.
    ENDIF.
    CHECK NOT t_batch_errors[] IS INITIAL.
    Write Batch chak results to report
    SKIP.
    WRITE: / text-b02.
    WRITE: / sy-uline(74).
    WRITE: /2 'Material',
    22 'Batch'.
    WRITE: /2 sy-uline(32).
    SKIP.
    LOOP AT t_batch_errors INTO w_batch_errors.
    WRITE: /2 w_batch_errors-matnr,
    22 w_batch_errors-charg.
    ENDLOOP.
    ENDFORM. " post_process_checks
    G E T _ I N T E R F A C E _ F I L E N A M E
    FORM get_interface_filename USING filename lw_path.
    DATA: i_file TYPE filename-fileintern,
    out_filename LIKE v_path-pathextern.
    CLEAR: out_filename.
    i_file = filename.
    get the interface filename to be used when creating file
    CALL FUNCTION 'FILE_GET_NAME'
    EXPORTING
    logical_filename = i_file
    IMPORTING
    file_name = out_filename
    EXCEPTIONS
    file_not_found = 1
    OTHERS = 2.
    IF sy-subrc = 0.
    MOVE out_filename TO lw_path.
    IF filename NE c_archive_file. "RM080107
    CONCATENATE lw_path 'NP_StockBalance.dat'
    INTO lw_path.
    *-- Begin RM080107 - Add timestamp to the archived file
    ELSE.
    CONCATENATE lw_path 'NP_StockBalance' sy-datum sy-uzeit '.dat'
    INTO lw_path.
    ENDIF.
    *-- End RM080107
    ELSE.
    ENDIF.
    ENDFORM. "get_interface_filename
    *& Form move_file RM080107
    Move the processed file to archive directory
    FORM move_file.
    *-- At last move the file to archive directory
    OPEN DATASET p_arch FOR OUTPUT IN TEXT MODE.
    IF sy-subrc = 0.
    LOOP AT t_rawdata INTO w_rawdata.
    TRANSFER w_rawdata TO p_arch.
    ENDLOOP.
    ENDIF.
    CLOSE DATASET p_arch.
    DELETE DATASET p_file.
    ENDFORM. " move_file
    Best regards,
    Prashant

  • How to call a "Z"module pool program in a "z"report

    Hi Guys,
    I have two reports .
    1. Report : uploads a tab delimited " .Txt1" file and update the "z1" table
        ".TXT1" : File contains 4 fields
    2. Module pool. :Uploads a a tab delimited " .Txt2" file and update another "z2" table
        ".TXT2" file contains  the 4 fileds of ".TXT1" and also 2 extra fields.
    I want to merge (call) the module pool program in the Report and perform the upload function using only one ".TXT" file.Please do guide me precisely .
    *Report:*
    REPORT zrswbgcs009 NO STANDARD PAGE HEADING MESSAGE-ID zwb
                         LINE-SIZE 185.
    TABLES:  zgcs_foc.      "FOC Parts Table
    *data count buffer
    DATA:    read_cnt(6)    TYPE p,        "Find read record
             update_cnt(6)  TYPE p,        "OK record
             error_cnt(6)   TYPE p.        "Error record
    *file buffer(FOC)
    DATA: BEGIN OF FOC_inrec  OCCURS  0,
            CUSTOMER(10),      "Customer
            PART_CODE(18),     "Parts Code
            REF_NO(35),        "Ref No.
            REF_DATE(10),      "Ref Date
            QTY(12),           "Parts Qty
            TEXT(100),         "Remark
          END OF FOC_inrec.
    *file buffer
    DATA: BEGIN OF inrec  OCCURS  0,
            CUSTOMER(10),      "Customer
            PART_CODE(18),     "Parts Code
            REF_NO(35),        "Ref No.
            REF_DATE(10),      "Ref Date
            QTY(12),           "Parts Qty
            PRICE(15),         "Parts Price
            WAERK(5),          "Parts Currency
            TEXT(100),         "Remark
          END OF inrec.
    DATA : v_file      LIKE rlgrap-filename.
    DATA gt_zgcs_foc LIKE zgcs_foc OCCURS 0 WITH HEADER LINE.
    DATA gs_zgcs_foc LIKE zgcs_foc.
    *File name ACCEPT--------------------------------------------------
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN  BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
    *Company code
    PARAMETERS:  p_comp LIKE zgcs_imei-company OBLIGATORY.
    PARAMETERS:  pcfile LIKE rlgrap-filename OBLIGATORY LOWER CASE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 1.
    PARAMETERS: HQfile  RADIOBUTTON GROUP b2.
    SELECTION-SCREEN COMMENT 7(20)  text-101 FOR FIELD HQfile.
    SELECTION-SCREEN POSITION 31.
    PARAMETERS: SUBfile RADIOBUTTON GROUP b2.
    SELECTION-SCREEN COMMENT 37(20) text-102 FOR FIELD SUBfile.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN  END   OF BLOCK b1.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF BLOCK box WITH FRAME.
    SELECTION-SCREEN: COMMENT /2(40) text-011, COMMENT  42(40) text-001,
                      ULINE,
                      COMMENT /2(40) text-012, COMMENT  42(40) text-002,
                      COMMENT /2(40) text-013, COMMENT  42(40) text-003,
                      COMMENT /2(40) text-014, COMMENT  42(40) text-004,
                      COMMENT /2(40) text-015, COMMENT  42(40) text-005,
                      COMMENT /2(40) text-016, COMMENT  42(40) text-006,
                      COMMENT /2(40) text-017, COMMENT  42(40) text-007,
                      COMMENT /2(40) text-018, COMMENT  42(40) text-008,
                                               COMMENT /42(40) text-009.
    SELECTION-SCREEN END OF BLOCK box.
    * -- AT SELECTION SCREEN ON
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR pcfile.
      CALL FUNCTION 'WS_FILENAME_GET'
           EXPORTING
                def_filename     = space
                def_path         = 'C:\'
                mask             = ',*.txt,*.TXT.'
                mode             = 'O'
                title            = ' '
           IMPORTING
                filename         = pcfile
           EXCEPTIONS
                inv_winsys       = 1
                no_batch         = 2
                selection_cancel = 3
                selection_error  = 4
                OTHERS           = 5.
    *-----------------------------start--------------------------------
    START-OF-SELECTION.
      CLEAR: read_cnt, update_cnt, error_cnt.
      REFRESH gt_zgcs_foc.        CLEAR gs_zgcs_foc.
      PERFORM file_upload_from_pc.
      SORT gt_zgcs_foc.
      DELETE ADJACENT DUPLICATES FROM gt_zgcs_foc
             COMPARING COMPANY CUSTOMER PART_CODE REF_NO REF_DATE.
    *// customer code check
      DATA: LT_ZESTD LIKE ZESTD OCCURS 0 WITH HEADER LINE.
      IF NOT gt_zgcs_foc[] IS INITIAL.
        SELECT COMPANY CUSTOMER CURRENCY
          INTO CORRESPONDING FIELDS OF TABLE LT_ZESTD
          FROM ZESTD
           FOR ALL ENTRIES IN gt_zgcs_foc
         WHERE COMPANY  = gt_zgcs_foc-COMPANY
           AND CUSTOMER = gt_zgcs_foc-CUSTOMER.
      ENDIF.
      SORT LT_ZESTD BY COMPANY CUSTOMER.
    *// part code check
      DATA: LT_MARA LIKE MARA OCCURS 0 WITH HEADER LINE.
      IF NOT gt_zgcs_foc[] IS INITIAL.
        SELECT *
          INTO TABLE LT_MARA
          FROM MARA
           FOR ALL ENTRIES IN gt_zgcs_foc
         WHERE MATNR = gt_zgcs_foc-PART_CODE.
      ENDIF.
      SORT LT_MARA BY MATNR.
      LOOP AT gt_zgcs_foc.
    *// customer code check
        READ TABLE LT_ZESTD WITH KEY
                COMPANY  = gt_zgcs_foc-COMPANY
                CUSTOMER = gt_zgcs_foc-CUSTOMER.
        IF SY-SUBRC <> 0.
          WRITE:/'Invalid Customer code ',
             gt_zgcs_foc-COMPANY, ' ',
             gt_zgcs_foc-CUSTOMER.
          STOP.
        ENDIF.
    *// part code check
        READ TABLE LT_MARA WITH KEY MATNR = gt_zgcs_foc-PART_CODE
          BINARY SEARCH.
        IF SY-SUBRC <> 0.
          WRITE:/ 'Invalid part code ', gt_zgcs_foc-PART_CODE.
          STOP.
        ENDIF.
    *// REF_NO
        TRANSLATE gt_zgcs_foc-REF_NO     TO UPPER CASE.
        SHIFT gt_zgcs_foc-REF_NO     LEFT DELETING LEADING SPACE.
        IF gt_zgcs_foc-REF_NO = SPACE.
          WRITE:/'Ref No. is blank'.
          STOP.
        ENDIF.
    *// REF_DATE
        IF gt_zgcs_foc-REF_DATE = 0.
          WRITE:/'Invalid Ref Date'.
          STOP.
        ENDIF.
    *// QTY
    *    IF gt_zgcs_foc-QTY CO ' 0123456789'.
    *    ELSE.
    *      WRITE:/ gt_zgcs_foc-QTY, ' Invalid Qty value'.
    *      STOP.
    *    ENDIF.
      ENDLOOP.
    * Insert/Update table
    *  MODIFY zgcs_foc FROM TABLE gt_zgcs_foc.
      INSERT zgcs_foc FROM TABLE gt_zgcs_foc.
      IF sy-subrc EQ 0.
        COMMIT WORK.
        DESCRIBE TABLE gt_zgcs_foc LINES update_cnt.
        error_cnt = read_cnt - update_cnt.
      ELSE.
        ROLLBACK WORK.
        error_cnt = read_cnt - update_cnt.
      ENDIF.
      ULINE.
      FORMAT COLOR 3.
      WRITE: / 'Read count                :', read_cnt.
      WRITE: / 'Insert/Update count       :', update_cnt.
      WRITE: / 'Error count               :', error_cnt.
      FORMAT COLOR OFF.
    *end-of-selection--------------------------------------------------
    END-OF-SELECTION.
    *&      Form FILE_UPLOAD_FROM_PC
    FORM file_upload_from_pc.
      IF pcfile IS INITIAL.
        WRITE: / 'SELECT UPLOAD FILE !'.
      ELSE.
        MOVE pcfile TO v_file.
    * HQ file upload
        IF HQfile EQ 'X'.
          CALL FUNCTION 'WS_UPLOAD'
               EXPORTING
                    filename                = v_file
                    filetype                = 'DAT'
               TABLES
                    data_tab                = FOC_inrec
               EXCEPTIONS
                    conversion_error        = 1
                    file_open_error         = 2
                    file_read_error         = 3
                    invalid_type            = 4
                    no_batch                = 5
                    unknown_error           = 6
                    invalid_table_width     = 7
                    gui_refuse_filetransfer = 8
                    customer_error          = 9
                    OTHERS                  = 10.
          IF sy-subrc <> 0.
            WRITE: / 'FILE UPLOAD                :', sy-subrc.
          ENDIF.
          LOOP AT FOC_inrec.
            ADD 1 TO read_cnt.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-customer
                 importing
                      output = FOC_inrec-customer.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-part_code
                 importing
                      output = FOC_inrec-part_code.
            MOVE-CORRESPONDING FOC_inrec TO gs_zgcs_foc.
            MOVE p_comp          TO gs_zgcs_foc-company.
            MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
            MOVE sy-uname        TO gs_zgcs_foc-ERNAM.
            MOVE sy-datum        TO gs_zgcs_foc-ERDAT.
            MOVE sy-UZEIT        TO gs_zgcs_foc-ERZET.
    * Source(1:HQ,2:SUB,0:Etc)
            MOVE '1'             TO gs_zgcs_foc-source.
            APPEND gs_zgcs_foc TO gt_zgcs_foc.
          ENDLOOP.
    * SGE file upload
        ELSE.
          CALL FUNCTION 'WS_UPLOAD'
               EXPORTING
                    filename                = v_file
                    filetype                = 'DAT'
               TABLES
                    data_tab                = inrec
               EXCEPTIONS
                    conversion_error        = 1
                    file_open_error         = 2
                    file_read_error         = 3
                    invalid_type            = 4
                    no_batch                = 5
                    unknown_error           = 6
                    invalid_table_width     = 7
                    gui_refuse_filetransfer = 8
                    customer_error          = 9
                    OTHERS                  = 10.
          IF sy-subrc <> 0.
            WRITE: / 'FILE UPLOAD                :', sy-subrc.
          ENDIF.
          LOOP AT inrec.
            ADD 1 TO read_cnt.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = inrec-customer
                 importing
                      output = inrec-customer.
            call function 'CONVERSION_EXIT_ALPHA_INPUT'
                 exporting
                      input  = FOC_inrec-part_code
                 importing
                      output = FOC_inrec-part_code.
            MOVE-CORRESPONDING inrec TO gs_zgcs_foc.
            MOVE p_comp          TO gs_zgcs_foc-company.
            MOVE gs_zgcs_foc-qty TO gs_zgcs_foc-balan.
            MOVE sy-uname        TO gs_zgcs_foc-ERNAM.
            MOVE sy-datum        TO gs_zgcs_foc-ERDAT.
            MOVE sy-UZEIT        TO gs_zgcs_foc-ERZET.
    * Source(1:HQ,2:SUB,0:Etc)
            MOVE '2'             TO gs_zgcs_foc-source.
            APPEND gs_zgcs_foc TO gt_zgcs_foc.
          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDFORM.
    *MODULE POOL::*
    *& Module Name      : Warranty Bill
    *& Sub-Module       : W/B
    *& Description      : Parts Q'ty Adjust(Sales & Warranty)
    *& Program Name     : ZRSWBP004
    *& History
    *& Date             Author            Reason
    *& 2007.05.08       Song, Ji-Hyun     Initial Coding     Req.by WH.Song
    *& Logic Process
    *  - CONDITIONS
    *    Company, Customer, Material
    *  - PROCESS
    *    Display,Insert,Update data in the T/B ZESP04
    REPORT  zrswbp004 NO STANDARD PAGE HEADING
                      MESSAGE-ID 00
                      LINE-SIZE  250
                      LINE-COUNT 50.
    *               G L O B A L    V A R I A B L E S                       *
    TABLES : zesp04.
    DATA : BEGIN OF itab_list OCCURS 0,
            company       LIKE zesp04-company,
            customer      LIKE zesp04-customer,
            material      LIKE zesp04-material,
            adj_date      LIKE zesp04-adj_date,
            adjust        LIKE zesp04-adjust,
            reason        LIKE zesp04-reason,
            reason_code   LIKE zesp04-reason_code,
            doc_no        LIKE zesp04-doc_no,
            in_date       LIKE zesp04-in_date,
            create_id     LIKE zesp04-create_id,
          END OF itab_list.
    DATA : itab_upload LIKE TABLE OF zesp04 WITH HEADER LINE.
    DATA : s_mode(10).
    DATA : table_name(10) VALUE 'ZESP04'.
    DATA : tot_cnt TYPE i.
    DATA : ref_flag(1).
    *               M A C R O    D E F I N E                               *
    DEFINE conversion_kunnr.
      call function 'CONVERSION_EXIT_ALPHA_INPUT'
           exporting
                input  = &1
           importing
                output = &1.
    END-OF-DEFINITION.
    DEFINE conversion_material.
      call function 'CONVERSION_EXIT_MATN1_INPUT'
           exporting
                input  = &1
           importing
                output = &1.
    END-OF-DEFINITION.
    *               S E L E C T I O N   S C R E E N                        *
    SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME  TITLE title1.
    PARAMETERS     : company LIKE zesp04-company MEMORY ID buk MODIF ID v1
                     OBLIGATORY.
    SELECT-OPTIONS : customer   FOR zesp04-customer MEMORY ID kun
                                                    MODIF ID v1.
    SELECT-OPTIONS : material   FOR zesp04-material MEMORY ID mat
                                                    MODIF ID v1.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN POSITION 3.
    SELECTION-SCREEN COMMENT 3(12) text-002 MODIF ID v2.
    PARAMETERS : up_flag AS CHECKBOX MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(12) text-001 MODIF ID v2.
    PARAMETERS : p_fname(300) LOWER CASE MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b1.
    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME  TITLE title2.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 3(53) text-003 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(10) text-004 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(12) text-005 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(12) text-006 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(15) text-007 MODIF ID v2.
    PARAMETERS : df1 TYPE c RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN COMMENT 24(13) text-012 MODIF ID v2.
    PARAMETERS : df2 TYPE c RADIOBUTTON GROUP grp1.
    SELECTION-SCREEN COMMENT 41(11) text-013 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(14) text-008 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(11) text-009 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(14) text-010 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN BEGIN OF LINE.
    SELECTION-SCREEN COMMENT 5(10) text-011 MODIF ID v2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN END OF BLOCK b2.
    INCLUDE zrswbp004_pbo.
    INCLUDE zrswbp004_pai.
    INITIALIZATION.
      title1 = ' Parts Quantity Adjustment '.
      title2 = ' Text File Layout '.
    *            S T A R T   O F   S E L E C T I O N                       *
    TOP-OF-PAGE.
      PERFORM write_header.
    TOP-OF-PAGE DURING LINE-SELECTION.
      PERFORM write_header.
    START-OF-SELECTION.
      IF up_flag = 'X'.
        PERFORM upload_data.
      ELSE.
        PERFORM select_data.
        SET PF-STATUS 'PF01' EXCLUDING 'SAVE'.
        PERFORM display_data.
      ENDIF.
    AT USER-COMMAND.
      PERFORM user_command.
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
      PERFORM get_filename.
    *&      Form  SELECT_DATA
    *       Select Data for Display
    FORM select_data.
      SELECT * FROM (table_name)
        INTO CORRESPONDING FIELDS OF TABLE itab_list
       WHERE company = company
         AND customer IN customer
         AND material IN material.
      CHECK sy-subrc <> 0.
      WRITE: 'No data found with your option.'.
    ENDFORM.                    " SELECT_DATA
    *&      Form  DISPLAY_DATA
    *       Display Data following Condition
    FORM display_data.
      LOOP AT itab_list.
        FORMAT COLOR 2 INTENSIFIED.
        WRITE : / '|' NO-GAP.
        WRITE :  (07) itab_list-company    CENTERED   NO-GAP, '|' NO-GAP,
                 (10) itab_list-customer   CENTERED   NO-GAP, '|' NO-GAP,
                 (20) itab_list-material   CENTERED   NO-GAP, '|' NO-GAP,
                 (10) itab_list-adj_date   CENTERED   NO-GAP, '|' NO-GAP,
                 (15) itab_list-adjust  RIGHT-JUSTIFIED  NO-GAP, '|'
    NO-GAP,
                 (55) itab_list-reason LEFT-JUSTIFIED NO-GAP, '|' NO-GAP,
                 (11) itab_list-reason_code CENTERED  NO-GAP, '|' NO-GAP,
                 (10) itab_list-doc_no      CENTERED  NO-GAP, '|' NO-GAP,
                 (10) itab_list-in_date  CENTERED   NO-GAP, '|' NO-GAP,
                 (12) itab_list-create_id  CENTERED   NO-GAP, '|' NO-GAP.
        FORMAT INTENSIFIED OFF.
        HIDE itab_list.
      ENDLOOP.
      WRITE : / sy-uline(171).
    ENDFORM.                    " DISPLAY_DATA
    *&      Form  WRITE_HEADER
    *       Write Report Header
    FORM write_header.
      DATA : line(1024).
      CLEAR line WITH '-'.
      DESCRIBE TABLE itab_list LINES tot_cnt.
      FORMAT INTENSIFIED ON.
      WRITE : 15 'Parts Quantity Adjustment'.
      SKIP.
      WRITE : / 'Total Count : ', tot_cnt.
      WRITE : /.
      WRITE : (171) sy-uline.
      WRITE : / '|' NO-GAP.
      WRITE : (07) 'Company'  CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Customer' CENTERED   NO-GAP, '|' NO-GAP,
              (20) 'Material' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Adj. Date' CENTERED   NO-GAP, '|' NO-GAP,
              (15) 'Adjust' CENTERED   NO-GAP, '|' NO-GAP,
              (55) 'Reason' CENTERED   NO-GAP, '|' NO-GAP,
              (11) 'Reason Code' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'Doc No' CENTERED   NO-GAP, '|' NO-GAP,
              (10) 'IN DATE' CENTERED   NO-GAP, '|' NO-GAP,
              (12) 'CREATE ID' CENTERED   NO-GAP, '|' NO-GAP.
      WRITE : /(171) sy-uline.
      FORMAT INTENSIFIED OFF.
    ENDFORM.                    " WRITE_HEADER
    *&      Form  UPLOAD_DATA
    *       Data Upload from File
    FORM upload_data.
      DATA : l_filename LIKE rlgrap-filename,
             temp_dateformat TYPE dateformat.
      IF df1 = 'X'.
        temp_dateformat = 'YYYY.MM.DD'.
      ELSE.
        temp_dateformat = 'DD.MM.YYYY'.
      ENDIF.
      MOVE p_fname TO l_filename.
      CHECK l_filename NE space.
      CALL FUNCTION 'WS_UPLOAD'
           EXPORTING
                filename                = l_filename
                filetype                = 'DAT'
                dat_d_format            = temp_dateformat
           TABLES
                data_tab                = itab_list
           EXCEPTIONS
                conversion_error        = 1
                file_open_error         = 2
                file_read_error         = 3
                invalid_type            = 4
                no_batch                = 5
                unknown_error           = 6
                invalid_table_width     = 7
                gui_refuse_filetransfer = 8
                customer_error          = 9.
      IF sy-subrc NE 0.
        MESSAGE s000 WITH 'File upload is failed!'.
        STOP.
      ELSE.
        CLEAR : itab_upload, itab_upload[].
        LOOP AT itab_list.
          MOVE-CORRESPONDING itab_list TO itab_upload.
          conversion_kunnr    itab_upload-customer.
          conversion_material itab_upload-material.
          itab_upload-mandt     = sy-mandt.
          itab_upload-in_date   = sy-datum.
          itab_upload-create_id = sy-uname.
    *>>>>Insert by GSCHOI 2007.11.08
          IF itab_list-adj_date+0(6) NE sy-datum+0(6).
            MESSAGE i368 WITH 'Adjust month must same as current month!'.
            ROLLBACK WORK.
            STOP.
          ENDIF.
    *<<<<End
          APPEND itab_upload.
          INSERT INTO (table_name) VALUES itab_upload.
          IF sy-subrc EQ 0.
            CONTINUE.
          ELSEIF sy-subrc EQ 4.
            MESSAGE s368 WITH 'Duplicated Data Error!'.
            ROLLBACK WORK.
            STOP.
          ELSE.
            MESSAGE s368 WITH 'File Error!'.
            ROLLBACK WORK.
            STOP.
          ENDIF.
        ENDLOOP.
      ENDIF.
      IF sy-subrc EQ 0.
        MESSAGE s368 WITH 'Uploaded Successfully!'.
      ENDIF.
    ENDFORM.                    " UPLOAD_DATA
    *&      Form  USER_COMMAND
    *       User Command Execution in Screen 1000
    FORM user_command.
      MOVE-CORRESPONDING itab_list TO zesp04.
      CASE sy-ucomm.
        WHEN 'INSERT'.
          PERFORM insert_item.
        WHEN 'UPDATE'.
          PERFORM update_item.
        WHEN 'DISPLAY'.
          PERFORM display_item.
        WHEN 'REFRESH'.
          PERFORM refresh_list.
      ENDCASE.
      IF ref_flag = 'Y'.
        PERFORM refresh_list.
        CLEAR ref_flag.
      ENDIF.
    ENDFORM.                    " USER_COMMAND
    *&      Form  INSERT_ITEM
    *       When Clicking Insert Button
    FORM insert_item.
      CLEAR : s_mode.
      CLEAR : zesp04.
      s_mode = 'INSERT'.
      CALL SCREEN '100'.
    ENDFORM.                    " INSERT_ITEM
    *&      Form  UPDATE_ITEM
    *       When Clicking Update Button
    FORM update_item.
      CLEAR : s_mode.
      s_mode = 'UPDATE'.
      CALL SCREEN '100'.
    ENDFORM.                    " UPDATE_ITEM
    *&      Form  DISPLAY_ITEM
    *       When Clicking Display Button
    FORM display_item.
      CLEAR : s_mode.
      s_mode = 'DISPLAY'.
      CALL SCREEN '100'.
    ENDFORM.                    " DISPLAY_ITEM
    *&      Form  REFRESH_LIST
    *       When Clicking Refresh Button or Returning Display Screen
    FORM refresh_list.
      CLEAR : itab_list, itab_list[].
      PERFORM select_data.
      sy-lsind = sy-lsind - 1.
      PERFORM display_data.
    ENDFORM.                    " REFRESH_LIST
    *&      Form  GET_FILENAME
    *       Get Filename
    FORM get_filename.
      DATA: l_fname LIKE ibipparms-path .
      DATA : p_name LIKE sy-repid.
      p_name = sy-repid.
      CALL FUNCTION 'F4_FILENAME'
           EXPORTING
                program_name  = p_name
                dynpro_number = sy-dynnr
                field_name    = ''
           IMPORTING
                file_name     = l_fname.
      p_fname = l_fname.
    ENDFORM.                    " GET_FILENAME
    Edited by: Matt on Nov 24, 2008 11:24 AM - surrounded the ABAP with  tags

    Hi,
        Use SUBMIT statement in your first Report zrswbgcs009 at the end, to call the Modulepool program zrswbp004.
    do a search in SDN you will get lot of threads on SUBMIT statement with selection screen.
    SUBMIT... [VIA SELECTION-SCREEN]
               [USING SELECTION-SET <var>]
               [WITH <sel> <criterion>]
               [WITH FREE SELECTIONS <freesel>]
               [WITH SELECTION-TABLE <rspar>].
    http://help.sap.com/saphelp_nw04/Helpdata/EN/9f/dba51a35c111d1829f0000e829fbfe/content.htm
    Regards
    Bala Krishna

  • Printing report directly from printer

    Hi,
    I need a small information.if any one of our guys can give me some info that would be great.
    I am writing a ABAP report now. lets say when we write 'hello world' in code and F8  program o/p will show 'hello world' right. I need to print this through user default printer automatically...might be pop-up for confirmation would help.
    Thanks in advance...
    Raj

    Hi Rich,
    Calling program is
    REPORT ZTESTRAJ1 .
    parameters:p_date like sy-datum.
    DATA: SELTAB     TYPE TABLE OF RSPARAMS,
          SELTAB_WA  LIKE LINE OF SELTAB.
    start-of-selection.
          CLEAR SELTAB_WA.
    MOVE: 'p_date' TO SELTAB_WA-SELNAME,
          'P'     TO SELTAB_WA-KIND,      " PARAMETER
          sy-datum    TO SELTAB_WA-LOW.
    APPEND SELTAB_WA TO SELTAB.
    CLEAR SELTAB_WA.
    MOVE: 'p_matnr' TO SELTAB_WA-SELNAME,
          'P'     TO SELTAB_WA-KIND,      " PARAMETER
          '1233344'  TO SELTAB_WA-LOW.
    APPEND SELTAB_WA TO SELTAB.
    SUBMIT Ztestraj with p_date eq sy-datum
                    with p_uname eq sy-uname
                    with p_matnr eq '122333' and return.
    if sy-subrc = 0.
    write 'Printed'.
    endif.
    Here is the program Ztestraj
    parameters:
    p_matnr like mara-matnr,
    p_date like sy-datum,
    p_uname like sy-uname.
    data:  l_matnr like mcha-matnr.
    start-of-selection.
    l_matnr = p_matnr.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
      EXPORTING
        INPUT              = l_matnr
    IMPORTING
       OUTPUT             =  l_matnr
    EXCEPTIONS
      LENGTH_ERROR       = 1
      OTHERS             = 2
    IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ENDIF.
    WRITE:  L_MATNR.
    DATA: PARAMS LIKE PRI_PARAMS,
          DAYS(1)  TYPE N VALUE 2,
          COUNT(3) TYPE N VALUE 1,
          VALID    TYPE C.
    CALL FUNCTION 'GET_PRINT_PARAMETERS'
      EXPORTING DESTINATION           = 'LOCL'
                COPIES                = COUNT
                LIST_NAME             = 'ZTESTRAJ'
                LIST_TEXT             = 'SUBMITTO SAP-SPOOL'
                IMMEDIATELY           = 'X'
                RELEASE               = 'X'
                NEW_LIST_ID           = 'X'
                EXPIRATION            = DAYS
                LINE_SIZE             = 80
                LINE_COUNT            = 120
                LAYOUT                = 'X_44_120'
               SAP_COVER_PAGE        = 'X'
                COVER_PAGE            = 'X'
               RECEIVER              = 'SAP*'
               DEPARTMENT            = 'System'
                NO_DIALOG             = 'X'
      IMPORTING OUT_PARAMETERS        = PARAMS
                VALID                 = VALID.
    IF VALID <> SPACE.
      SUBMIT ztestraj TO SAP-SPOOL
        SPOOL PARAMETERS PARAMS
        WITHOUT SPOOL DYNPRO and return.
        if sy-subrc = 0.
        endif.
    ENDIF.

  • View for CDPOS & CDHDR tables

    Hi all,
    I am developing a report for which I am fetching fields from CDPOS & CDHDR tables (both r cluster tables). when i run st05, it fetches values from a cluster table CDCLS which takes most of the database time.
    Is there any view for CDPOS & CDHDR tables?
    How to find the views for cluster tables?
    Thanx in advance.
    Vijay.

    hi,
    check this code,
    here i used function module to get details of cdhdr,cdpos.
    TABLES : MARC.
    DATA :BEGIN OF GI_MARC OCCURS 0,
          MATNR LIKE MARC-MATNR,
          WERKS LIKE MARC-WERKS,
          DISPO LIKE MARC-DISPO,
          END OF GI_MARC.
    DATA : CHAR TYPE I,
           COUNT TYPE I,
           VAR TYPE I.
    DATA : BEGIN OF GI_FINAL OCCURS 2000,
           MATNR LIKE MARC-MATNR,
           DISPO LIKE MARC-DISPO,
           USERNAME LIKE CDHDR-USERNAME,
           UDATE LIKE CDHDR-UDATE,
           UTIME LIKE CDHDR-UTIME,
           TCODE LIKE CDHDR-TCODE,
           TABNAME LIKE CDPOS-TABNAME,
           TABKEY  LIKE CDPOS-TABKEY,
           FNAME  LIKE CDPOS-FNAME,
           VALUE_NEW  LIKE CDPOS-VALUE_NEW,
           VALUE_OLD   LIKE CDPOS-VALUE_OLD,
           CHANGENR LIKE CDHDR-CHANGENR,
           END OF GI_FINAL.
    DATA : MATNR LIKE MARC-MATNR,
           DISPO LIKE MARC-DISPO,
           USERNAME1 LIKE CDHDR-USERNAME,
           UDATE1 LIKE CDHDR-UDATE,
           UTIME LIKE CDHDR-UTIME,
           TCODE LIKE CDHDR-TCODE,
           CHANGENR LIKE CDHDR-CHANGENR.
    DATA : GI_CDHDR LIKE CDHDR OCCURS 0 WITH HEADER LINE.
    DATA : GI_CDPOS LIKE CDPOS OCCURS 0 WITH HEADER LINE.
    DATA : OBJECTCLAS LIKE CDHDR-OBJECTCLAS VALUE 'MATERIAL',
           OBJECTID LIKE CDHDR-OBJECTID,
           USERNAME LIKE CDHDR-USERNAME VALUE 'RSS-SPE',
           UDATE LIKE CDHDR-UDATE VALUE '20070101',
           CHANGE_IND LIKE CDHDR-CHANGE_IND VALUE 'U'.
    type-pools: slis.
    data: gt_slis_fcat type slis_t_fieldcat_alv.
    data: gt_fieldcat type slis_t_fieldcat_alv.
    *data: gt_fieldcatall type slis_t_fieldcat_alv.
    data: g_repid like sy-repid.
    data: gs_layout type slis_layout_alv.
    gs_layout-zebra             = 'X'.
    gs_layout-colwidth_optimize = 'X'.
    SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-110.
    SELECT-OPTIONS :  P_DISPO FOR MARC-DISPO.
    SELECT-OPTIONS : RECORDS FOR CHAR.
    SELECTION-SCREEN : END OF BLOCK B1.
    START-OF-SELECTION.
    perform process_data.
    perform f_fieldcat_init using gt_fieldcat[].
    perform alv_display tables gi_final using gt_fieldcat[].
    form process_data.
      SELECT MATNR WERKS DISPO FROM MARC INTO TABLE GI_MARC
                                WHERE DISPO IN P_DISPO
                                AND WERKS = '1011'." Becoz we hav to chk the
    the changes made in the material while extendin tht matrl frm 1011 to
    *other plant.
      IF NOT GI_MARC[] IS INITIAL.
        IF NOT RECORDS-LOW IS INITIAL .
          IF NOT RECORDS-HIGH IS INITIAL.
            DESCRIBE TABLE GI_MARC LINES COUNT.
            IF RECORDS-HIGH < COUNT.
              DELETE GI_MARC FROM RECORDS-HIGH TO COUNT.
            ENDIF.
            IF RECORDS-LOW <> 1.
              IF RECORDS-LOW <> 0.
                DELETE GI_MARC FROM 1 TO RECORDS-LOW.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
      LOOP AT GI_MARC.
        CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
          EXPORTING
            INPUT              = GI_MARC-MATNR
         IMPORTING
           OUTPUT             = GI_MARC-MATNR
    EXCEPTIONS
      LENGTH_ERROR       = 1
      OTHERS             = 2
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        OBJECTID = GI_MARC-MATNR .
        CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
          EXPORTING
      ARCHIVE_HANDLE                   = 0
           DATE_OF_CHANGE                   = UDATE
            OBJECTCLASS                      = OBJECTCLAS
            OBJECTID                         = OBJECTID
      TIME_OF_CHANGE                   = '000000'
           USERNAME                         = USERNAME
      LOCAL_TIME                       = ' '
      DATE_UNTIL                       = '99991231'
      TIME_UNTIL                       = '235959'
          TABLES
            I_CDHDR                          = GI_CDHDR
         EXCEPTIONS
           NO_POSITION_FOUND                = 1
           WRONG_ACCESS_TO_ARCHIVE          = 2
           TIME_ZONE_CONVERSION_ERROR       = 3
           OTHERS                           = 4
        IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.
        CALL FUNCTION 'ARCH_ANA_PROGRESS_INDICATOR'
             EXPORTING
                  TEXT = 'Processing'.
        IF NOT GI_CDHDR[] IS INITIAL.
          LOOP AT GI_CDHDR.
          MOVE GI_MARC-MATNR TO GI_FINAL-MATNR.
          MOVE GI_MARC-DISPO TO GI_FINAL-DISPO.
          MOVE GI_CDHDR-USERNAME TO GI_FINAL-USERNAME.
          MOVE GI_CDHDR-UDATE TO GI_FINAL-UDATE.
          MOVE GI_CDHDR-TCODE TO GI_FINAL-TCODE.
          MOVE GI_CDHDR-CHANGENR TO GI_FINAL-CHANGENR.
            VAR = 1.
            CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
              EXPORTING
                INPUT              = GI_FINAL-MATNR
                IMPORTING
               OUTPUT             = GI_FINAL-MATNR
             EXCEPTIONS
               LENGTH_ERROR       = 1
               OTHERS             = 2
            IF SY-SUBRC <> 0.
            ENDIF.
            OBJECTID = GI_FINAL-MATNR ."to ensure that objid is in proper
    *format
            SELECT *
                   FROM CDPOS
                   INTO TABLE GI_CDPOS
              PACKAGE SIZE 100
              FOR ALL ENTRIES IN GI_cdhdr
                   WHERE OBJECTID = OBJECTID
                     AND CHANGENR = GI_CDHDR-CHANGENR
                     AND OBJECTCLAS = OBJECTCLAS
                     AND CHNGIND =  CHANGE_IND." only those values will b
    *takn which have been modified nd nt created
            IF SY-SUBRC = 0.
              LOOP AT GI_CDPOS.
          MOVE GI_MARC-MATNR TO GI_FINAL-MATNR.
          MOVE GI_MARC-DISPO TO GI_FINAL-DISPO.
          MOVE GI_CDHDR-USERNAME TO GI_FINAL-USERNAME.
          MOVE GI_CDHDR-UDATE TO GI_FINAL-UDATE.
          MOVE GI_CDHDR-TCODE TO GI_FINAL-TCODE.
          MOVE GI_CDHDR-CHANGENR TO GI_FINAL-CHANGENR.
                MOVE GI_CDPOS-TABNAME TO GI_FINAL-TABNAME.
                MOVE GI_CDPOS-TABKEY TO GI_FINAL-TABKEY.
                MOVE GI_CDPOS-FNAME TO GI_FINAL-FNAME.
                MOVE GI_CDPOS-VALUE_NEW TO GI_FINAL-VALUE_NEW.
                MOVE GI_CDPOS-VALUE_OLD TO GI_FINAL-VALUE_OLD.
                  APPEND GI_FINAL.
                  CLEAR GI_FINAL.
               ENDIF.
                VAR = VAR + 1.
       ENDSELECT.
              ENDLOOP.
            ENDIF.
          ENDLOOP.
              CALL FUNCTION 'ARCH_ANA_PROGRESS_INDICATOR'
             EXPORTING
                  TEXT = 'Processing'.
        ENDIF.
      ENDLOOP.
      endform.
    form f_fieldcat_init using lt_fieldcat type slis_t_fieldcat_alv.
      data: ls_fieldcat type slis_fieldcat_alv.
       clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'MATNR'.
      ls_fieldcat-seltext_l    = 'Material number'.
    ls_fieldcat-tabname      = 'GI_final'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'DISPO'.
      ls_fieldcat-seltext_l    = 'mrp controller'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'USERNAME'.
      ls_fieldcat-seltext_l    = 'Username'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'CHANGENR'.
      ls_fieldcat-seltext_l    = 'Change Number'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'UDATE'.
      ls_fieldcat-seltext_l    = 'modified date'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'UTIME'.
      ls_fieldcat-seltext_l    = 'MODIFIED TIME'.
      append ls_fieldcat to lt_fieldcat.
    clear ls_fieldcat.
    ls_fieldcat-fieldname    = 'UDATE'.
    ls_fieldcat-seltext_l    = 'MODIFIED DATE'.
    append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'TCODE'.
      ls_fieldcat-seltext_l    = 'TRANSACTION CODE'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'TABNAME'.
      ls_fieldcat-seltext_l    = 'TABLE NAME'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'TABKEY'.
      ls_fieldcat-seltext_l    = 'TABLE KEY'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'FNAME'.
      ls_fieldcat-seltext_l    = 'FNAME'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'FVALUE'.
      ls_fieldcat-seltext_l    = 'FVALUE'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'VALUE_NEW'.
      ls_fieldcat-seltext_l    = 'NEW VALUE'.
      append ls_fieldcat to lt_fieldcat.
      clear ls_fieldcat.
      ls_fieldcat-fieldname    = 'VALUE_OLD'.
      ls_fieldcat-seltext_l    = 'OLD VALUE'.
      append ls_fieldcat to lt_fieldcat.
    endform.                    " f_fieldcat_init
    form alv_display tables  gi_final using gt_fieldcat .
      call function 'REUSE_ALV_LIST_DISPLAY'
       exporting
      I_INTERFACE_CHECK              = ' '
      I_BYPASSING_BUFFER             =
      I_BUFFER_ACTIVE                = ' '
       I_CALLBACK_PROGRAM             = ' Material list '
      I_CALLBACK_PF_STATUS_SET       = ' '
      I_CALLBACK_USER_COMMAND        = ' '
      I_STRUCTURE_NAME               =
         is_layout                      = gs_layout
         it_fieldcat                    = gt_fieldcat
      IT_EXCLUDING                   =
      IT_SPECIAL_GROUPS              =
      IT_SORT                        =
      IT_FILTER                      =
      IS_SEL_HIDE                    =
      I_DEFAULT                      = 'X'
      I_SAVE                         = ' '
      IS_VARIANT                     =
      IT_EVENTS                      =
      IT_EVENT_EXIT                  =
      IS_PRINT                       =
      IS_REPREP_ID                   =
      I_SCREEN_START_COLUMN          = 0
      I_SCREEN_START_LINE            = 0
      I_SCREEN_END_COLUMN            = 0
      I_SCREEN_END_LINE              = 0
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER        =
      ES_EXIT_CAUSED_BY_USER         =
        tables
          t_outtab                       = gi_final
    EXCEPTIONS
      PROGRAM_ERROR                  = 1
      OTHERS                         = 2
      if sy-subrc <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.
    endform.
    regards
    siva

Maybe you are looking for