Problem in select single statement : its urgent

Dear ,
i written one select single stmt i.e
tables : ser03 .
    SELECT SINGLE  * FROM  ser03
           WHERE  obknr  = objk-obknr
           AND    bwart  = '101'
           AND    shkzg  = 'S'.
based on this select stmt their are 5 records in database table satisfying the select stmt where clause  and this select stmt is picking the  fourth record . why this record is picking forth record only even this 4th record is not most recently created record and nor old record this record is middle one if any one plz tell me . points must be given . to access most recently recreated record how to write select stmt. plz tell me .

Hi,
hope this code will help you.
just added the mandt in the where condition.
SELECT SINGLE * FROM ser03
WHERE mandt = sy-mandt
AND obknr = objk-obknr
AND bwart = '101'
AND shkzg = 'S'.
reward if helpful,
teja.

Similar Messages

  • Problems with "Select Distinct" Statement

    Hi... I've a little problem with my SQL Statement...
    I've a Table in a DataBase with Solds of the Month... the fields are: vta_fecha, vta_prod, vta_total, vta_mesa.
    I've to Select only the distincts fields of vta_prod... selected by vta_fecha and vta_mesa...
    My code is like this:         try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                conec = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=C:/POOL/Data/BaseDat.MDB");
                state = conec.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);try{
                rec = state.executeQuery("Select DISTINCT vta_prod, vta_fecha, vta_mesa from Ventas where vta_fecha = #" + Fecha_q + "# And vta_mesa = 0");           
                rec.first();
                int x = 0;
                while (rec.isAfterLast()==false){
                    x++;
                    rec.next();
                rec.first();
                if (x > 0){
                    Productos = new String[x];
                    Total_Vta = new int[x];
                    Cant_Prod = new int[x];
                    x = 0;
                    while (rec.isAfterLast() == false){
                        Productos[x] = rec.getString("vta_prod");
                        rec.next();
                        x++;
                else{
                    Productos = new String[0];
                    Total_Vta = new int[0];
                    Cant_Prod = new int[0];
            }catch(Exception e){JOptionPane.showMessageDialog(null,e.getMessage());}Now, in the Table I have only 3 diferents vta_prod, but this Statement returns 9 Rows... and I don't know why...
    Please help me...
    Regards...

    I don�t have a complete picture because I don�t know what values you are passing in the select and I don�t know your column types but this is what I think is happening from what you have shared.
    You may have misunderstood what the DISTINCT keyword does.
    The DISTINCT keyword applies to the full set of columns in the select (not just the first column). So in your case it would be equivalent to:
    SELECT vta_prod, vta_fecha, vta_mesa
    FROM Ventas
    WHERE ...
    GROUP BY by vta_prod, vta_fecha, vta_mesa
    So, it doesn't matter that you only have 3 distinct vta_prod values if you have multiple values being returned in the other columns. The vta_mesa column can only a return a single value as �0�. That leaves the vta_fecha column which is probably a date/time column and is probably the column that is returning the three other distinct values (one date with three distinct times).
    (3 vta_prod) x (3 vta_fecha) x (1 vta_mesa) or 3x3x1 = 9 rows
    So find a way to strip the time from vta_fecha in your select statement and your SQL should return the results you expect. I�m not an Access expect but I think I remember you can use something like the �Convert� or �DatePart� functions to make that happen (check your documentation to be sure)..
    A couple of asides;
    1) You should use a PreparedStatement and rarely if ever use Statement.
    2) You should start Java variable names with lower case.

  • Code tuning on SELECT SINGLE statement

    Hi,
    Is there a way to optimize a SINGLE SELECT statement ?
    SELECT SINGLE pernr bukrs FROM pa0001
                INTO (it_pernr-pernr,it_pernr-bukrs)
               WHERE pernr = lv_pa9070-pernr
                 AND endda GE lv_yhr_py_pdidom-begda
                 AND begda LE lv_yhr_py_pdidom-endda.
          APPEND it_pernr.
    Thanks in advance for your help.
    Thibault

    What do you mean by optimize? Runtime?
    If the statement is inside a huge loop, there could be room for improvement.
    Please describe the actual problem in detail.
    Also look into the ABAP performance forum and Please Read before Posting in the Performance and Tuning Forum.
    Thomas

  • Error in Select single statement

    Hi All,
    Following is the statement and error message im getting:
    Can anyone help me with this. I am not able to figure out whats wrong with this.
    <b>select SINGLE *
      from  vbrk where  vbeln eq iv_billno.</b>
    <u>Error:</u>
    The INTO clause is missing at SELECT, or the FROM addition at either DELETE, INSERT, MODIFY, or UPDATE is missing.          
    Thanks & Regards,
    Megha

    Program always needs a work area to store the values retrived from your select statement. Either you declare that work area as TABLES: VBRK or DATA: wa_vbrk LIKE VBRK.
    If you use the first option, then you don't need to do anything but it is an obsolete statement.
    If you use the second option, then you should change your select statement as follows
    SELECT SINGLE * FROM vbrk
                    INTO wa_vbrk
                   WHERE vbeln EQ iv_billno.

  • Select single * statement

    Hi everyone,
    I have the follwing two codes .The first one works fine but the second one gives me an error.
    Please let me know what is the error.
    1)The below code works fine
    loop at itab.
    select single * from zxyz
                   where zorder = itab-zorder.
    if zxyz-id is initial.
    endif.
    endloop.
    2)This one doesn't work
    select single * from zac
                   where userid = sy-uname.
    if sy-subrc eq 0.
    endif.
    Iam getting this error please let me know
    The INTO clause is missing at select, or the from addition at either DELETE,INSERT,MODIFY OR UPDATE IS MISSING.
    Thanks in advance.
    Deepthi

    Hi Deepthi,
    You must declare either the table or an work area in your program.
    You can do that with either of the below methods:
    1. Tables: ZAC. (or)
    2. Data: w_zac like ZAC.
    Change your select statement to the following when you use the option 2:
    select single *
           from zac
           into w_zac
           where userid = sy-uname.
    Hope this helps.
    Regards,
    Sumant.
    Message was edited by: Sumant Sura

  • Problem with SELECT SINGLE

    hi
    can you find any error in this
    select single * from makt where matnr = p_matnr and spras = 'sv'.

    Hi,
    Use like this.
    data: BEGIN OF it_makt OCCURS 0,
    matnr LIKE maKT-matnr,
    maktx LIKE makt-maktx,
    END OF it_makt.
    data: process_tab_struct_tmp like IT_MAKT.
    field-symbols: <fs1>.
    after downloading file(excel) to excel_tab....code follows
    LOOP AT EXCEL_TAB.
    assign component excel_tab-col of structure
    process_tab_struct_tmp to <fs1>.
    <fs1> = excel_tab-value.
    at end of row.
    move-corresponding: process_tab_struct_tmp to IT_MAKT.
    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
    EXPORTING
    INPUT = <b>it_makt-matnr</b>
    IMPORTING
    OUTPUT = <b>it_makt-matnr</b>.
    append IT_MAKT.
    endat.
    ENDLOOP.
    Do reward points to useful answers.
    Regards,
    Atish

  • Problem in SELECT SINGLE Query

    Hi,
    I am writing a small quesry in PS, Though the entry exist in database table PRPS, The sy-subrc is 4 for this query.Can u help me.
    data : wa_src_prps like prps-posid.
    start-of-selection.
    wa_src_prps  = '3-3310-02-01-01-10-20'.
        DATA: lv_pbukr LIKE prps-pbukr.
        CLEAR: lv_pbukr.
        SELECT SINGLE pbukr INTO lv_pbukr
                             FROM prps
                             WHERE posid EQ wa_src_prps.
    if sy-subrc = 0.
    write:/5 wa_src_prps, lv_pbukr.
    endif.

    hi,
    DATA : wa_src_prps LIKE prps-posid.
    START-OF-SELECTION.
      wa_src_prps = '0-1000-0'.
    " Conversion Routine for domain PS_POSID
      CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'
        EXPORTING
          input  = wa_src_prps
        IMPORTING
          output = wa_src_prps.
      DATA: lv_pbukr LIKE prps-pbukr.
      CLEAR: lv_pbukr.
      SELECT SINGLE pbukr INTO lv_pbukr
      FROM prps
      WHERE posid EQ wa_src_prps.
      IF sy-subrc = 0.
        WRITE:/5 wa_src_prps, lv_pbukr.
      ENDIF.

  • Problem in transport...its urgent

    Hi SAP gurus,
    Here i am facing problem with transports.
    I am importing one request into production system,but suddenly it got hang.
    i don't know what needs to be done to fix this
    Since it is in production system.please give me any suggestion ASAP
    Thanks & Regards
    Kumar

    Hi,
    When transport request hangs please check the below points.
    1) RDD* jobs are running or not in your SAP system.
    2) At least one background job should be available.
    3) Check the STMS consistency check.
    4) You have to make sure your file system( Trans directory)  should have enough space.
    5) You have to make sure TP process is running at OS level.
    And also check the logs at trans directory.
    I hope it will help you.
    Regards,
    Kiran .V

  • Decompiler problem of java class..its urgent. Please help

    When trying to open a class through Java Decompiler, error message "jad.exe has encountered a problem and needs to close. We are sorry for inconvenience." is shown. The class file (when compiled through build ANT set-up) is getting corrupted for uknown reasons. However, when the same source is compiled through Jdev, the classfile is perfectly ok.
    Note: Both the JDev and Build env are pointing to same jdk version (1.4.2)

    did you try to investigate the differences in the configurations for the ant build and the one with jdev?

  • Select single problem...

    hi all,
    i have to take first value of table BSIS according to condition. i m using select single statement in table BSIS, but problem is that i m getting the value only in header by which i m not able to apply loop at itab. can anyone please help me?
    code.
    SELECT single bukrs hkont gjahr monat shkzg prctr FROM bsis INTO itab
                                    WHERE hkont IN hkont
                                    AND   bukrs IN bukrs
                                    AND   prctr IN prctr
                                    AND   gjahr IN gjahr
                                    AND   monat IN monat.
    here sy-subrc is 0. but value is only in header.
    regards saurabh.

    Hi Saurabh,
    i don't know what your program does but if you process the data you retrieve from table bsis more than once, it may be useful to create your internal table identical to table bsis;
    data: itab like bsis occurs 0 with header line.
    then get all the data from table bsis to your internal table at once.
      select * from bsis
        into table itab.
    then process itab with your selection criteria as you wish.
    avoid using the statement ...into corresponding fields of table (i assume you already are not using this)
    well i don't know what else you can do..
    regards;
    Murat Kaya

  • Regarding select single and select upto???

    HI All,
    Cud u pls let me know the differences between select single and select upto??
    and which is the better option?? pls its quite urgent..plss plss
    plss
    Thanx in Advance
    Prasad

    Hi..,
    According to SAP Performance course the SELECT UP TO 1 ROWS is faster than SELECT SINGLE because you are not using all the primary key fields.
    select single is a construct designed to read database records with primary key. In the absence of the primary key, it might end up doing a sequential search, whereas the select up to 1 rows may assume that there is no primary key supplied and will try to find most suitable index.
    The best way to find out is through sql trace or runtime analysis.
    Use "select up to 1 rows" only if you are sure that all the records returned will have the same value for the field(s) you are interested in. If not, you will be reading only the first record which matches the criteria, but may be the second or the third record has the value you are looking for.
    The System test result showed that the variant Single * takes less time than Up to 1 rows as there is an additional level for COUNT STOP KEY for SELECT ENDSELECT UP TO 1 ROWS.
    The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.
    Mainly:  to read data from
    The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause, applies any aggregate, ordering or grouping functions to them and then returns the first record of the result set.
    Mainly: to check if entries exist.
    Check this example ...
    DATA: gv_vbeln TYPE vbak-vbeln,
    gv_erdat TYPE vbak-erdat.
    SELECT SINGLE vbeln erdat
    FROM vbak
    INTO (gv_vbeln, gv_erdat)
    WHERE erdat = '12/01/2006'.
    SELECT vbeln erdat
    FROM vbak UP TO 1 ROWS
    INTO (gv_vbeln, gv_erdat)
    <b>ORDER BY erdat ASCENDING</b>.
    ENDSELECT.
    *In the example, the select single gets the first record that satisfies the WHERE clause unlike in the UP TO 1 ROWS where it sorts the database records by the earliest date and gets its VBELN.
    <b>Try using the ORDER BY clause in SELECT SINGLE .. It gives an error !! U cannot use that with SELECT SINGLE</b>
    The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.
    Hope u understood !!
    reward if it helps u..
    sai ramesh

  • Diff b/w select single * .... and select....up to 1 row

    Hi Abapers,
    What is the diff b/w Select single * from.... and select * ...up to 1 row.
    Thanks in advance.
    Subbu.

    Select SINGLE...
    SINGLE
    The result of the selection should be a single entry. If it is not possible to identify a unique entry, the system uses the first line of the selection. If you use the FOR UPDATE addition, the selected entry is protected against parallel updates from other transactions until the next database commit (see LUW and database lock mechanism). If the database system identifies a deadlock, a runtime error occurs.
    ... UP TO n ROWS
    Effect
    The set of results is restricted to a maximum of nrows.
    Example
    To output a list of the 3 business customers with the greatest discount:
    DATA WA_SCUSTOM TYPE SCUSTOM.
    SELECT * FROM SCUSTOM INTO WA_SCUSTOM UP TO 3 ROWS
             WHERE CUSTTYPE = 'B'
             ORDER BY DISCOUNT DESCENDING.
      WRITE: / WA_SCUSTOM-ID, WA_SCUSTOM-NAME, WA_SCUSTOM-DISCOUNT.
    ENDSELECT.
    Notes
    If you use an UP TO n ROWS addition in an ORDER-BY clause , the lines read are sorted into the correct order. The first n lines are then displayed. The system may need to read more than n lines from the database to be able to do this.
    If n = 0, all selected lines are displayed.
    n < 0 results in a runtime error.
    <b>Knowing when to use SELECT SINGLE or SELECT ... UP TO 1 ROWS</b>
    A lot of people use the SELECT SINGLE statement to check for the existence of a value in a database. Other people prefer to use the 'UP TO 1 ROWS' variant of the SELECT statement.
    <b>So what's the difference between using 'SELECT SINGLE' statement as against a 'SELECT .... UP TO 1 ROWS' statement ?</b>
    If you're considering the statements
    SELECT SINGLE field INTO w_field FROM table.
    and
    SELECT field INTO w_field FROM table UP TO 1 ROWS. ENDSELECT.
    then looking at the result, not much apart from the extra ENDSELECT statement. Look at the run time and memory usage and they may be worlds apart.
    Why is this ?? The answer is simple.
    The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.
    The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause, applies any aggregate, ordering or grouping functions to them and then returns the first record of the result set.
    Get the difference ??
    If not, here is a good example, credit for this example goes to Richard Harper, a friend of mine on sapfans.com :
    Create a Ztable called ZDifference with 2 fields in it, MANDT of type MANDT and POSNR of type POSNR. Make sure both of these are keys. Also create a table maintenance dialog for it (SE11->Utilities->Table Maintenance Generator). Fill the table with ten rows 000001-000010.
    Then run the program shown below:
    Report Z_Difference
           Message-id 38
           Line-Size  80
           Line-Count 0
           No Standard Page Heading.
    Start-Of-Selection.
      Data: w_Single type Posnr,
            t_Rows   type standard table of Posnr
                     initial size 0
                     with header line.
      Select single Posnr
        from zDifference
        into w_Single.
      Select Posnr
        into table t_Rows
        from zDifference
       up to 1 rows
       order by Posnr descending.
       Write :/ 'Select single:', w_Single.
       Skip 1.
       Write :/ 'Up to 1 rows :'.
       Loop at t_Rows.
            Write t_Rows.
       EndLoop.
    You should see the output:
    Select single: 000001
    Up to 1 rows : 000010
    The first 'SELECT' statement selected the first record in the database according to any selection criterion in the 'WHERE' clause. This is what a 'SELECT SINGLE' does. The second 'SELECT' has asked the database to reverse the order of the records before returning the first row of the result.
    In order to be able to do this the database has read the entire table, sort it and then return the first record. If there was no ORDER BY clause then the results would have been identical (ie both '000001') but the second select if given a big enough table to look at would be far slower.
    Note that this causes a problem in the Extended Program Check if the full key is not specified in a 'SELECT SINGLE'. Replacing the 'SELECT SINGLE' by an "UP TO 1 ROWS" will give the same exact results without any warning but the program will run slower and consume more memory. This is a good example of a warning that we should ignore... considering you are sure of what you are doing !!
    Message was edited by:
            Judith Jessie Selvi

  • Select  single  n   select upto

    frends please provide me the detail document and scenarios where we use with examples about select single and select upto n rows ?

    Hi,
    A lot of people use the SELECT SINGLE statement to check for the existence of a value in a database. Other people prefer to use the 'UP TO 1 ROWS' variant of the SELECT statement.
    So what's the difference between using 'SELECT SINGLE' statement as against a 'SELECT .... UP TO 1 ROWS' statement ?
    If you're considering the statements
    SELECT SINGLE field INTO w_field FROM table.
    and
    SELECT field INTO w_field FROM table UP TO 1 ROWS. ENDSELECT.
    then looking at the result, not much apart from the extra ENDSELECT statement. Look at the run time and memory usage and they may be worlds apart.
    Why is this ?? The answer is simple.
    The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.
    The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause, applies any aggregate, ordering or grouping functions to them and then returns the first record of the result set.
    Get the difference ??
    If not, here is a good example, credit for this example goes to Richard Harper, a friend of mine on sapfans.com :
    Create a Ztable called ZDifference with 2 fields in it, MANDT of type MANDT and POSNR of type POSNR. Make sure both of these are keys. Also create a table maintenance dialog for it (SE11->Utilities->Table Maintenance Generator). Fill the table with ten rows 000001-000010.
    Then run the program shown below:
    Report Z_Difference
           Message-id 38
           Line-Size  80
           Line-Count 0
           No Standard Page Heading.
    Start-Of-Selection.
      Data: w_Single type Posnr,
            t_Rows   type standard table of Posnr
                     initial size 0
                     with header line.
      Select single Posnr
        from zDifference
        into w_Single.
      Select Posnr
        into table t_Rows
        from zDifference
       up to 1 rows
       order by Posnr descending.
       Write :/ 'Select single:', w_Single.
       Skip 1.
       Write :/ 'Up to 1 rows :'.
       Loop at t_Rows.
            Write t_Rows.
       EndLoop.
    You should see the output:
    Select single: 000001
    Up to 1 rows : 000010
    The first 'SELECT' statement selected the first record in the database according to any selection criterion in the 'WHERE' clause. This is what a 'SELECT SINGLE' does. The second 'SELECT' has asked the database to reverse the order of the records before returning the first row of the result.
    In order to be able to do this the database has read the entire table, sort it and then return the first record. If there was no ORDER BY clause then the results would have been identical (ie both '000001') but the second select if given a big enough table to look at would be far slower.
    Note that this causes a problem in the Extended Program Check if the full key is not specified in a 'SELECT SINGLE'. Replacing the 'SELECT SINGLE' by an "UP TO 1 ROWS" will give the same exact results without any warning but the program will run slower and consume more memory. This is a good example of a warning that we should ignore... considering you are sure of what you are doing !!
    Regards,
    Ferry Lianto

  • Diff between select single and select upto 1 rows.

    Hello aLL,
    PL tell what is technical diff between select single and select upto 1 rows and how it is affecting the performance.
    Rushikesh

    Hi
    Knowing when to use SELECT SINGLE or SELECT ... UP TO 1 ROWS
    A lot of people use the SELECT SINGLE statement to check for the existence of a value in a database. Other people prefer to use the 'UP TO 1 ROWS' variant of the SELECT statement.
    So what's the difference between using 'SELECT SINGLE' statement as against a 'SELECT .... UP TO 1 ROWS' statement ?
    If you're considering the statements
    SELECT SINGLE field INTO w_field FROM table.
    and
    SELECT field INTO w_field FROM table UP TO 1 ROWS. ENDSELECT.
    then looking at the result, not much apart from the extra ENDSELECT statement. Look at the run time and memory usage and they may be worlds apart.
    Why is this ?? The answer is simple.
    The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause If this results in multiple records then only the first one will be returned and therefore may not be unique.
    The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause, applies any aggregate, ordering or grouping functions to them and then returns the first record of the result set.
    Get the difference ??
    If not, here is a good example, credit for this example goes to Richard Harper, a friend of mine on sapfans.com :
    Create a Ztable called ZDifference with 2 fields in it, MANDT of type MANDT and POSNR of type POSNR. Make sure both of these are keys. Also create a table maintenance dialog for it (SE11->Utilities->Table Maintenance Generator). Fill the table with ten rows 000001-000010.
    Then run the program shown below:
    Code:
    Program: Z_Difference
    Purpose: A program that demonstrates the difference
    between SELECT SINGLE and SELECT UP TO n ROWS.
    This program requires the data table Z_DIFFERENCE
    to have been created according to the structure
    outlined in the text above and populated with
    at least 10 records.
    Creation Date: 21/04/2004
    Requested By:
    Reference Doc:
    Author: R Harper
    Modification History:
    Date Reason Transport Who
    Report Z_Difference
    Message-id 38
    Line-Size 80
    Line-Count 0
    No Standard Page Heading.
    Start-Of-Selection.
    Data: w_Single type Posnr,
    t_Rows type standard table of Posnr
    initial size 0
    with header line.
    Select single Posnr
    from zDifference
    into w_Single.
    Select Posnr
    into table t_Rows
    from zDifference
    up to 1 rows
    order by Posnr descending.
    Write :/ 'Select single:', w_Single.
    Skip 1.
    Write :/ 'Up to 1 rows :'.
    Loop at t_Rows.
    Write t_Rows.
    EndLoop.
    You should see the output:
    Select single: 000001
    Up to 1 rows : 000010
    The first 'SELECT' statement selected the first record in the database according to any selection criterion in the 'WHERE' clause. This is what a 'SELECT SINGLE' does. The second 'SELECT' has asked the database to reverse the order of the records before returning the first row of the result.
    In order to be able to do this the database has read the entire table, sort it and then return the first record. If there was no ORDER BY clause then the results would have been identical (ie both '000001') but the second select if given a big enough table to look at would be far slower.
    Note that this causes a problem in the Extended Program Check if the full key is not specified in a 'SELECT SINGLE'. Replacing the 'SELECT SINGLE' by an "UP TO 1 ROWS" will give the same exact results without any warning but the program will run slower and consume more memory. This is a good example of a warning that we should ignore... considering you are sure of what you are doing !!

  • What is the problem in this code (problem in select query)

    Just need your help in solving one issue. In the below code one query which is highlighted
    Select statement not working means cursor directly goes to the endselect .means these two statements not executed.
    CLASS cl_abap_container_utilities DEFINITION LOAD.
    CALL METHOD cl_abap_container_utilities=>read_container_c
    I am attaching that code with this mail. Please do the needful help.
    *& Report  ZEOU_RG1                                                   *
    REPORT  zeou_rg1 LINE-SIZE 400.
    Purpose : RG1 Report driver
    Remarks :
    constants
    INCLUDE j_2icons.
    type declerations
    INCLUDE j_2isdef.
    table definitions and internal tables
    INCLUDE j_2iddef.
    INCLUDE <icon>.
    DATA: $plant  TYPE bp_addr_typ,
          $lincnt LIKE sy-linct,
          m_date LIKE j_1ipart2-budat,
          m_chapid LIKE j_1iexcdtl-chapid,
          m_matform LIKE j_1irg1-matform,
          m_bedrate LIKE j_1irg1-bedrate,
          tot_op_bal LIKE j_1irg1-menge,
          tot_qty_mnfr LIKE j_1irg1-menge,
          tot_total_qty_mnfr LIKE j_1irg1-menge,
          tot_remv_home LIKE j_1irg1-menge,
          tot_remv_hval LIKE j_1irg1-exbas,
          tot_remv_expr LIKE j_1irg1-menge,
          tot_remv_eval LIKE j_1irg1-exbas,
          tot_remv_expb LIKE j_1irg1-menge,
          tot_remv_othr LIKE j_1irg1-menge,
          tot_remv_opur LIKE j_1irg1-menge,
          tot_duty_amt  LIKE j_1irg1-exbed,
          tot_cb_fr     LIKE j_1irg1-exbed,
          tot_cb_br     LIKE j_1irg1-exbed.
    DATA: t_rg1_cons TYPE rg1_typ OCCURS 0 WITH HEADER LINE.
    FIELD-SYMBOLS: <x_extrctdata> TYPE c,
                   <x_rg1> TYPE rg1_typ,
                   <x_part1typ> TYPE part1_typ.
    DATA : it_j_1iexchdr TYPE j_1iexchdr OCCURS 0 WITH HEADER LINE,
           wa_j_1iexchdr TYPE j_1iexchdr,
           it_j_1iexcdtl TYPE j_1iexcdtl OCCURS 0 WITH HEADER LINE,
           wa_j_1iexcdtl TYPE j_1iexcdtl.
    selection screen
    PARAMETERS: p_exgrp LIKE j_1iexchdr-exgrp OBLIGATORY MEMORY ID j2i,
                p_stdate   LIKE sy-datum OBLIGATORY,
                p_endate   LIKE sy-datum OBLIGATORY.
    *SELECTION-SCREEN SKIP 1.
    *SELECTION-SCREEN BEGIN OF BLOCK 4 WITH FRAME TITLE TEXT-001.
    *SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN POSITION 01.
    *PARAMETERS: P_INDI RADIOBUTTON GROUP 57F4 DEFAULT 'X'.
    *SELECTION-SCREEN COMMENT (25) TEXT-002.
    *SELECTION-SCREEN END OF LINE.
    *SELECTION-SCREEN BEGIN OF LINE.
    *SELECTION-SCREEN POSITION 01.
    *PARAMETERS: P_CONS RADIOBUTTON GROUP 57F4.
    *SELECTION-SCREEN COMMENT (25) TEXT-003.
    *SELECTION-SCREEN END OF LINE.
    *SELECTION-SCREEN END OF BLOCK 4.
    INITIALIZATION.
    AT SELECTION-SCREEN.
      SELECT SINGLE *
      FROM j_1iexgrps
      WHERE j_1iexcgrp = p_exgrp.
      IF sy-subrc NE 0.
        MESSAGE e399(8i) WITH p_exgrp.
      ENDIF.
    *check company code
      SELECT SINGLE *
      FROM t001k
      WHERE bwkey = j_1iexgrps-j_1iwerks.
      IF sy-subrc NE 0.
        MESSAGE e518(8i) WITH 'the' 'plant' j_1iexgrps-j_1iwerks.
      ENDIF.
    <b>START-OF-SELECTION.
      CLEAR: j_1irg1, j_2icomp.
    retrieve layout name and details
    SELECT SINGLE *
    FROM J_2ILAYCTR
    WHERE BUKRS    = T001K-BUKRS
    AND   REGISTER = C_RG1
    AND   LAYOUTNR = 1.
    IF SY-SUBRC NE 0.
       MESSAGE E635(8I) WITH T001K-BUKRS C_RG1.
    ENDIF.
    SET COUNTRY 'IN'.
      REFRESH t_reciepts.
    report driver logic
      SELECT *
      FROM j_2iextrct
      WHERE exgrp  = p_exgrp
      AND budat   >= p_stdate
      AND budat   <= p_endate
      AND register = c_rg1
      ORDER BY budat keyid.
       assign J_2IEXTRCT-EXTRCTDATA to <x_extrctdata> casting.
       assign T_RG1 to <x_rg1> casting.
       <x_rg1> = <x_extrctdata>.
        CLASS cl_abap_container_utilities DEFINITION LOAD.
        CALL METHOD cl_abap_container_utilities=>read_container_c
          EXPORTING
            im_container           = j_2iextrct-extrctdata
          IMPORTING
            ex_value               = t_rg1
          EXCEPTIONS
            illegal_parameter_type = 1
            OTHERS                 = 2.
       MOVE J_2IEXTRCT-EXTRCTDATA TO T_RG1.
        APPEND t_rg1.
      ENDSELECT.
      DESCRIBE TABLE t_rg1 LINES $lincnt.
      IF $lincnt = 0.
        MESSAGE e548(8i) WITH p_stdate p_endate.
      ENDIF.</b>
    PERFORM PLANT_AND_EXCISE_DTLS USING P_WERKS.
      PERFORM plant_and_excise_dtls USING j_1iexgrps-j_1iwerks.
      MOVE : 'ZJ_2I_RG1' TO j_2ilayctr-layoutname.
      SORT t_rg1 BY  chapid matnr cpudt .
    open form
      PERFORM open_form USING  j_2ilayctr-layoutname j_2ilayctr-noofcopies    "J_2ILAYCTR-LAYOUTNAME
                              j_2ilayctr-outdevice  true.
    process extract data and write
    IF P_INDI = 'X'.
      PERFORM get_data_and_write.
    ELSEIF P_CONS = 'X'.
       PERFORM RG1_PRINT_CONS.
       PERFORM GET_DATA_AND_WRITE_CONS.
    ENDIF.
    close form
      PERFORM close_form.
                              F O R M S
      INCLUDE j_2ilayo.
    *&      Form  GET_DATA_AND_WRITE
    Purpose : Logic to print RG1 report
    FORM get_data_and_write.
      DATA: save_matnr LIKE mara-matnr.
      CLEAR: j_1irg1, j_2icomp, save_matnr.
      SELECT * FROM j_1iexchdr INTO TABLE it_j_1iexchdr
      WHERE  exgrp  = p_exgrp
      AND budat   >= p_stdate
      AND budat   <= p_endate.
      SORT it_j_1iexchdr BY cpudt docno.
      LOOP AT it_j_1iexchdr.
        SELECT * FROM j_1iexcdtl INTO wa_j_1iexcdtl
        WHERE docno = it_j_1iexchdr-docno.
          APPEND wa_j_1iexcdtl TO it_j_1iexcdtl.
        ENDSELECT.
      ENDLOOP.
      clear wa_j_1iexcdtl.
      SORT it_j_1iexcdtl BY chapid  matnr cpudt docno.
      LOOP AT t_rg1.
        CLEAR: j_1irg1, j_2icomp.
    assign header fields
        j_2icomp-stdate = p_stdate.
        j_2icomp-endate = p_endate.
        IF save_matnr NE t_rg1-matnr.
    fill header line with matnr, description, chapterid and unit
          j_1irg1-chapid = t_rg1-chapid.
          mara-matnr  = t_rg1-matnr.
          marav-maktx = t_rg1-maktx.
          mara-meins  = t_rg1-meins.
          save_matnr  = t_rg1-matnr.
          IF sy-tabix NE 1.
            j_2icomp-new_page = true.
          ELSE.
            j_2icomp-new_page = false.
          ENDIF.
        ELSE.
          j_2icomp-new_page = false.
        ENDIF.
        PERFORM write_form USING element-spac function-set
                                  typ-body window-main .
    determine line to display viz. manufacture entry/removal entry
        IF t_rg1-matform  = c_packed.
          j_2icomp-rg1_p_l = c_packed.
        ELSEIF t_rg1-matform  = c_loose.
          j_2icomp-rg1_p_l = c_loose.
        ENDIF.
        j_1irg1-cpudt    = t_rg1-cpudt.
        j_2icomp-op_qty  = t_rg1-op_bal.
        j_2icomp-mf_qty  = t_rg1-qty_mfr.
        j_2icomp-to_qty  = t_rg1-total.
        j_2icomp-cl_fin  = t_rg1-cl_bal_fn.
        j_2icomp-cl_bon  = t_rg1-cl_bal_bn.
        j_2icomp-remarks = t_rg1-remarks.
        j_2icomp-h_menge = t_rg1-h_menge.
        j_2icomp-h_value = t_rg1-h_value.
        j_2icomp-e_menge = t_rg1-e_menge.
        j_2icomp-e_value  = t_rg1-e_value.
        j_2icomp-e_menge_bn = t_rg1-e_menge_bond.
        j_2icomp-o_menge    = t_rg1-o_menge.
        j_2icomp-o_purpose  = t_rg1-o_purpose.
        j_2icomp-o_pur_meng = t_rg1-o_pur_menge.
        j_1irg1-bedrate  = t_rg1-bedrate.
        j_1irg1-exbed    = t_rg1-bedamt.
        j_2icomp-cl_fin  = t_rg1-cl_bal_fn.
        j_2icomp-cl_bon  = t_rg1-cl_bal_bn.
        j_2icomp-remarks = t_rg1-remarks.
       READ TABLE it_j_1iexcdtl WITH KEY cpudt = t_rg1-cpudt
                                         chapid = t_rg1-chapid
                                         matnr = t_rg1-matnr.
    IF sy-subrc = 0.
    get duties for issues only.
        IF t_rg1-rcptissrsn = 'IPD'
        OR t_rg1-rcptissrsn = 'IWD'
        OR t_rg1-rcptissrsn = 'IDH'
        OR t_rg1-rcptissrsn = 'IDE'
        OR t_rg1-rcptissrsn = 'IWE'
        OR t_rg1-rcptissrsn = 'IWT'
        OR t_rg1-rcptissrsn = 'IWO'.
          READ TABLE it_j_1iexchdr WITH KEY exnum = t_rg1-rdoc1
                                            trntyp = 'DLFC'
                                            cpudt = t_rg1-cpudt.
          READ TABLE it_j_1iexcdtl WITH KEY docno = it_j_1iexchdr-docno
                                            cpudt = it_j_1iexchdr-cpudt
                                            trntyp = 'DLFC'
                                            matnr = t_rg1-matnr.
      docyr = it_j_1iexchdr-docyr
          IF IT_j_1iexchdr-expind <> 'B'
          and  it_j_1iexchdr-expind <> 'U'
          and  it_j_1iexchdr-expind <> 'D'
          and  it_j_1iexchdr-expind <> 'N'
          AND  T_RG1-h_menge > 0.
         and  it_j_1iexchdr-expind IS INITIAL.
            IF it_j_1iexchdr-censtat = 'P'.
              wa_j_1iexcdtl-ecs = it_j_1iexcdtl-ecs.
            ENDIF.
            IF it_j_1iexchdr-censtat = 'C'.
              wa_j_1iexchdr-exbed = it_j_1iexchdr-exbed.
              wa_j_1iexchdr-ecs = it_j_1iexchdr-ecs.
              wa_j_1iexchdr-censtat = it_j_1iexchdr-censtat.
              wa_j_1iexchdr-cpudt = it_j_1iexchdr-cpudt.
              wa_j_1iexcdtl-rgplaser = it_j_1iexcdtl-rgplaser.
              wa_j_1iexcdtl-rg23aser = it_j_1iexcdtl-rg23aser.
            ENDIF.
          ENDIF.
         endif.
        ENDIF.
        PERFORM write_form USING element-d function-append
                                typ-body window-main .
        CLEAR :  wa_j_1iexchdr, wa_j_1iexcdtl.
      ENDLOOP.
    ENDFORM.                               " GET_DATA_AND_WRITE
    *&      Form  GET_DATA_AND_WRITE_CONS
          text                                                           *
    -->  p1        text
    <--  p2        text
    FORM get_data_and_write_cons.
      DATA: save_chapid LIKE j_1iexcdtl-chapid.
      CLEAR: j_1irg1, j_2icomp, save_chapid.
      LOOP AT t_rg1_cons.
        CLEAR: j_1irg1, j_2icomp.
    assign header fields
        j_2icomp-stdate = p_stdate.
        j_2icomp-endate = p_endate.
        IF save_chapid NE t_rg1_cons-chapid.
    fill header line with chapterid
          j_1irg1-chapid = t_rg1_cons-chapid.
          save_chapid  = t_rg1_cons-chapid.
          IF sy-tabix NE 1.
            j_2icomp-new_page = true.
          ELSE.
            j_2icomp-new_page = false.
          ENDIF.
        ELSE.
          j_2icomp-new_page = false.
        ENDIF.
        PERFORM write_form USING element-spac function-set
                                  typ-body window-main .
    determine line to display viz. manufacture entry/removal entry
        IF t_rg1_cons-matform  = c_packed.
          j_2icomp-rg1_p_l = c_packed.
        ELSEIF t_rg1_cons-matform  = c_loose.
          j_2icomp-rg1_p_l = c_loose.
        ENDIF.
        j_1irg1-cpudt    = t_rg1_cons-cpudt.
        j_2icomp-op_qty  = t_rg1_cons-op_bal.
        j_2icomp-mf_qty  = t_rg1_cons-qty_mfr.
        j_2icomp-to_qty  = t_rg1_cons-total.
        j_2icomp-cl_fin  = t_rg1_cons-cl_bal_fn.
        j_2icomp-cl_bon  = t_rg1_cons-cl_bal_bn.
        j_2icomp-remarks = t_rg1_cons-remarks.
        j_2icomp-h_menge = t_rg1_cons-h_menge.
        j_2icomp-h_value = t_rg1_cons-h_value.
        j_2icomp-e_menge = t_rg1_cons-e_menge.
        j_2icomp-e_value  = t_rg1_cons-e_value.
        j_2icomp-e_menge_bn = t_rg1_cons-e_menge_bond.
        j_2icomp-o_menge    = t_rg1_cons-o_menge.
        j_2icomp-o_purpose  = t_rg1_cons-o_purpose.
        j_2icomp-o_pur_meng = t_rg1_cons-o_pur_menge.
        j_1irg1-bedrate  = t_rg1_cons-bedrate.
        j_1irg1-exbed    = t_rg1_cons-bedamt.
        j_2icomp-cl_fin  = t_rg1_cons-cl_bal_fn.
        j_2icomp-cl_bon  = t_rg1_cons-cl_bal_bn.
        j_2icomp-remarks = t_rg1_cons-remarks.
        PERFORM write_form USING element-d function-append
                                 typ-body window-main .
    *for grand totals
        tot_remv_hval = tot_remv_hval + t_rg1_cons-h_value.
        tot_remv_eval = tot_remv_eval + t_rg1_cons-e_value.
        tot_duty_amt  = tot_duty_amt  + t_rg1_cons-bedamt.
      ENDLOOP.
    *for grand totals
      j_2icomp-amount1 = tot_remv_hval.
      j_2icomp-amount2 = tot_remv_eval.
      j_2icomp-amount3 = tot_duty_amt.
      PERFORM write_form USING element-t function-append
                                        typ-body window-footer.
    ENDFORM.                               " GET_DATA_AND_WRITE_CONS
    *&      Form  RG1_PRINT_CONS
          text                                                           *
    -->  p1        text
    <--  p2        text
    FORM rg1_print_cons.
      DATA : first_time VALUE on.
      SORT t_rg1 BY chapid cpudt.
      LOOP AT t_rg1.
        IF first_time = on.
          m_chapid = t_rg1-chapid.
          m_date = t_rg1-cpudt.
          m_matform = t_rg1-matform.
          m_bedrate = t_rg1-bedrate.
          first_time = off.
        ENDIF.
        IF m_chapid <> t_rg1-chapid.
          PERFORM chapid_break.
        ELSEIF m_date <> t_rg1-cpudt.
          PERFORM date_break.
        ENDIF.
    Accumulate totals
        tot_op_bal = tot_op_bal + t_rg1-op_bal.
        tot_qty_mnfr = tot_qty_mnfr + t_rg1-qty_mfr.
        tot_total_qty_mnfr = tot_total_qty_mnfr + t_rg1-total.
        tot_remv_home = tot_remv_home + t_rg1-h_menge.
        tot_remv_hval = tot_remv_hval + t_rg1-h_value.
        tot_remv_expr = tot_remv_expr + t_rg1-e_menge.
        tot_remv_eval = tot_remv_eval + t_rg1-e_value.
        tot_remv_expb = tot_remv_expb + t_rg1-e_menge_bond.
        tot_remv_othr = tot_remv_othr + t_rg1-o_menge.
        tot_remv_opur = tot_remv_opur + t_rg1-o_pur_menge.
        tot_duty_amt = tot_duty_amt + t_rg1-bedamt.
        tot_cb_fr = tot_cb_fr + t_rg1-cl_bal_fn.
        tot_cb_br = tot_cb_br + t_rg1-cl_bal_bn.
      ENDLOOP.
      PERFORM chapid_break.
    ENDFORM.                               " RG1_PRINT_CONS
    *&      Form  DATE_BREAK
          text                                                           *
    -->  p1        text
    <--  p2        text
    FORM date_break.
      CLEAR t_rg1_cons.
      t_rg1_cons-chapid = m_chapid.
      t_rg1_cons-cpudt  = m_date.
      t_rg1_cons-op_bal  = tot_op_bal.
      t_rg1_cons-qty_mfr = tot_qty_mnfr.
      t_rg1_cons-total   = tot_total_qty_mnfr.
      t_rg1_cons-h_menge = tot_remv_home.
      t_rg1_cons-h_value = tot_remv_hval.
      t_rg1_cons-e_menge = tot_remv_expr.
      t_rg1_cons-e_value = tot_remv_eval.
      t_rg1_cons-e_menge_bond = tot_remv_expb.
      t_rg1_cons-o_menge      = tot_remv_othr.
      t_rg1_cons-o_pur_menge  = tot_remv_opur.
      t_rg1_cons-bedamt       = tot_duty_amt.
      t_rg1_cons-cl_bal_fn    = tot_cb_fr.
      t_rg1_cons-cl_bal_bn    = tot_cb_br.
      t_rg1_cons-matform      = m_matform.
      t_rg1_cons-bedrate      = m_bedrate.
      APPEND t_rg1_cons.
      tot_op_bal = 0.
      tot_qty_mnfr = 0.
      tot_total_qty_mnfr = 0.
      tot_remv_home = 0.
      tot_remv_hval = 0.
      tot_remv_expr = 0.
      tot_remv_eval = 0.
      tot_remv_expb = 0.
      tot_remv_othr = 0.
      tot_remv_opur = 0.
      tot_duty_amt  = 0.
      tot_cb_fr     = 0.
      tot_cb_br     = 0.
      m_date = t_rg1-cpudt.
      m_matform = t_rg1-matform.
      m_bedrate = t_rg1-bedrate.
    ENDFORM.                               " DATE_BREAK
    *&      Form  CHAPID_BREAK
          text
    -->  p1        text
    <--  p2        text
    FORM chapid_break.
      PERFORM date_break.
      m_chapid = t_rg1-chapid.
    ENDFORM.                               " CHAPID_BREAK

    hi rakesh,
        in your first select single * statement you have given WHERE BUKRS = T001K-BUKRS..but at the point of execution, what will be the value stored in t001k-bukrs...i doubt it will be initial....so,  store bukrs in a variable or hardcode it.....
       in the second select, you hve not given any target work area for the into class...that's y your subrc is 4...specify a target area, where you want the data to be stored...

Maybe you are looking for

  • Touchsmart 9100 Audio Cuts Out

    I have Touchsmart 9100 with Realtek High Definition Audio running Win 7 Home Premium SP1, 8GB RAM (currently: 7.75GB Physical, 1.88GB Available, Total Virtual 13.7GB, Available Virtual 7.53); Dell 5650 5.1 surround sound with the three-to-one reducer

  • Strange PLS-00305 Error in simple mapping

    Hello, I have a problem with deploying a simple mapping in OWB92. It just map a sequence nextval to key column of table. Validation and Generation processes tells me 'is ok', but deploy generate more(20!) strange warnings. First warning looks like "O

  • Maintain Vendor in more than 1 language

    After ECC 6.0, need to login under "EN", before was "ZH". Is it possible to maintain the same vendor code in more than 1 language? In ME21N, the language at the header uses the default from LFA1. Had anybody been through this scenarios before? Please

  • #1899-DEC-30 00:00:00# converts to to_date('00:00:00', 'HH24:MI:SS')

    I'm converting a system from Access to Oracle DB. Many functions in the system use time ... In Access the time can be referrenced by #00:00:00#. Internally, Access appears to store the time as 1899-DEC-30 00:00:00 (probably stored as number of (milli

  • Cisco FlexConnect flow for guest.

    Hi all, We are planning to upgrade our wireless infrastructure and I need some verification on the configuration. Our current setup is the following: We have 2 WiSMs on the HO as active/backup and one 4400 series as an anchor. All access points are i