ABAP Code performance

Hi Guys,
The following code seems to be taking considerable time in production. Is there a better way to optimize theis code.
LOOP AT I_T_DATA...
    SELECT SINGLE BUKRS
     INTO (l_bukrs)
     FROM T001K
     WHERE T001K~BWKEY = I_T_DATA-WERKS.
    SELECT SINGLE TARGET1 TARGET2
    INTO (l_salesorg, l_dischan)
    from ZDERIV
    where VALID_FROM le sy-datum
      and SOUR3_FROM le I_T_DATA-prctr
      and SOUR3_TO ge I_T_DATA-prctr
      and SOUR2_FROM le l_bukrs
      and SOUR2_TO ge l_bukrs
      and SOUR1_FROM = 'C100'
      and SOUR1_TO = 'C100'.
    CASE sy-subrc.
     when 0.
       SELECT SINGLE PRODH
       INTO I_T_DATA-zzPRODH
       from mvke
       where matnr eq I_T_DATA-matnr
       and vkorg eq l_salesorg
       and vtweg eq l_dischan.
     WHEN 4.
       Clear: l_salesorg, l_dischan.
    ENDCASE.
Thanks

u don't use select statements in side the loop...cause suppoer ur internal table wch is used for loop has 1000 records..and the table wch is used inside the loop T001w had 500 records..
on the database hitting is  for I_T_DATA is 1000(for example)
                                     1000*500 = 500000... total 1000+500000see hw many times is...for avoid this one u first select the data form db and put into 1 intenal table ...( so it is comes to ur local buffer)..by using this interal table we can use read statement in side the loop...here no data base hitiing...
here the total db hittings : for I_T_DATA: 1000
                                          T001w is      500
                                          Total is      1500.....see the diffrence...
see the code below:
select bukrs into i_too1 for all entries in I_T_DATA where bwkey = I_T_DATA-werks.
SELECT SINGLE TARGET1 TARGET2
INTO table i_ZDERIV----
here it has fields as target1 and target2
from ZDERIV
for all entries in l_i_data
where VALID_FROM le sy-datum
and SOUR3_FROM le I_T_DATA-prctr
and SOUR3_TO ge I_T_DATA-prctr
and SOUR1_FROM = 'C100'
and SOUR1_TO = 'C100'.
after this..
loop at I_T_DATA into wa_t_data.
read table i_t001w into wa_too1w with key bukrs = wa_i_data-werks.
read table i_ZDERIV
into wa_ZDERIV
and SOUR3_FROM le wa_i_DATA-prctr
and SOUR3_TO ge wa_i_DATA-prctr
and SOUR2_FROM le wa_t001w-bukrs
and SOUR2_TO ge wa_t001w-bukrs
with key bukrs = wa_t_data-werks.
here the value of bukrs in wa_t001w-bukrs...
endloop.
inside the loop we can check the sy-subrc's...
i thnk it is useful for u...please give me rely hw it is woking...

Similar Messages

  • Q: ABAP code from db to memory decreases performance?

    Hi Gurus,
    We have a problem with some ABAP code (a start routine in a BI load). Basically the situation is: we had some code that builds a hierarchy (and inserts into hierarchy table) based on an attribute load, which worked fine but was to slow.
    As we do not need the hierarchy anymore we changed the code to only build the hierarchy in memory (the reason why we need it at all is because building this is the only way we can ensure to load the right records in the attribute load) and now, it is sloweru2026.which we do not understand.
    In general we have replaced:
    SELECT SINGLE * FROM /BIC/HZTVFKORG INTO nodelast
      WHERE nodeid = lastnode2.
    With:
      READ TABLE VirtHierarchy INTO nodelast
        WITH KEY nodeid = lastnode2.
    And replaced:
      UPDATE /BIC/HZTVFKORG FROM nodelast.
    With:
      MODIFY TABLE VirtHierarchy FROM nodelast.
    And replaced:
      INSERT INTO /BIC/HZTVFKORG VALUES node.
    With:
      APPEND node TO VirtHierarchy.
    As we see it, this should increase the performance of the start routine and the load (it takes several hours for just 50000 records), but it is actually running slower now...
    Does anybody have any idea about why this is not improving performance?
    Thank you in advance,
    Mikael

    Dear Mikael Kilaker,
    There are few reason:
    1. Data overload in memory.
    , if you try to execute
    SELECT SINGLE * FROM /BIC/HZTVFKORG INTO nodelast
    WHERE nodeid = lastnode2.
    With:
    READ TABLE VirtHierarchy INTO nodelast
    WITH KEY nodeid = lastnode2.
    And replaced:
    UPDATE /BIC/HZTVFKORG FROM nodelast.
    With:
    MODIFY TABLE VirtHierarchy FROM nodelast.
    And replaced:
    INSERT INTO /BIC/HZTVFKORG VALUES node.
    With:
    APPEND node TO VirtHierarchy.
    inside any loop conditions, this approach will make the system slow because it will load entire table into memory then system still need to cater space for selected value thus make system not really effective when you execute large volume of data.
    2. Unsorted data.
    It is really great practice if you sort nodelast. It is extra steps but the effect greatly decreased response time when system manipulating sorted data in the internal table.
    3. Use binary search in READ table.
    Try to use this code
    READ TABLE VirtHierarchy INTO nodelast
    WITH KEY nodeid = lastnode2 BINARY SEARCH.
    this practice also will increase performance when you execute large data inside internal table.
    Do reward points if this helps you

  • Improve data load performance using ABAP code

    Hi all,
             I want to improve my load performance using ABAP code, how to do this?. If i writing ABAP code in SE38 how i can call
    in BW side? if give sample code to improve load performance it will be usefull. please guide me.

    There are several points that can improve performance of your ABAP code:
    1. Avoid using SELECT...ENDSELECT... construct and use SELECT ... INTO TABLE.
    2. Use WHERE clause in your SELECT statement to restrict the volume of data retrieved.
    3. Use FOR ALL ENTRIES in your SELECT statement to retrieve the matching records at one shot.
    4.Avoid using nested SELECT and SELECT statements within LOOPs.
    5. Avoid using INTO CORRESPONDING FIELDS OF. Instead use INTO TABLE.
    6. Avoid using SELECT * and select only the required fields from the table.
    7. Avoid Executing a SELECT multiple times in the program.
    8. Avoid nested loops when working with large internal tables.
    9.Whenever using READ TABLE use BINARY SEARCH addition to speed up the search.
    10. Use FIELD-SYMBOLS instead of a work area when there are more than 200 entries in an internal table where some fields are being manipulated.
    11. Use MOVE with individual variable/field moves instead of MOVE-CORRESPONDING.
    12. Use CASE instead of IF/ENDIF whenever possible.
    13. Runtime transaction code se30 can be used to measure the application performance.
    14. Transaction code st05 can be used to analyse the SQL trace and measure the performance of the select statements of the program.
    15. Start routines can be used when transformation is needed in the data package level. Field/individual routines can be used for a simple formula or calculation. End routines are used when you wish to populate data not present in the source but present in the target.
    16. Always use a WHERE clause for DELETE statement. To delete records for multiple values, use SELECT-OPTIONS.
    17. Always use 'IS INITIAL' instead of equal to '' because null for a character is '' but '0' for an integer.
    Hope it helps.

  • UNIX command in ABAP code

    Hi All,
    I need to use unix command (MOVE) in ABAP code for transfering a file from one directory to another directory.
    Can any one help with how to used unix commands in ABAP?
    Thanks in advance.
    Regards,
    Hemendra

    The recommended approach always used to be to use transaction SM69 to define a "soft" command name to the operating system command so that it could be configured to work across Windows, Unix etc.  For example:
    Command name       OS         Type             OS command                                 Parameters for operating system command 
    Z_FILE_MOVE        SunOS      Customer    mv                                                 ? ?   
    You can then call function module SXPG_COMMAND_EXECUTE (quite well documented) to actually perform the command passing in the appropriate number of parameters.
    Jonathan

  • Schedule a background job for a program using ABAP code.

    Hi,
    I have to write a program to schedule a background job for another program.
    Need your help to understand how we can achieve this functionality.Any example of an abap code would be of great help.
    Need it urgently.
    Thanks in advance.
    Sandeep.

    Hi Sandeep,
    Here is the demo program regarding the BDC For the background job.
    report zprprbdc1
           no standard page heading line-size 255.
    include bdcrecx1.
    parameters: dataset(132) lower case.
    ***    DO NOT CHANGE - the generated data section - DO NOT CHANGE    ***
    *   If it is nessesary to change the data section use the rules:
    *   1.) Each definition of a field exists of two lines
    *   2.) The first line shows exactly the comment
    *       '* data element: ' followed with the data element
    *       which describes the field.
    *       If you don't have a data element use the
    *       comment without a data element name
    *   3.) The second line shows the fieldname of the
    *       structure, the fieldname must consist of
    *       a fieldname and optional the character '_' and
    *       three numbers and the field length in brackets
    *   4.) Each field must be type C.
    *** Generated data section with specific formatting - DO NOT CHANGE  ***
    ***data: begin of itab occurs 0 ,
    ***       matnr(20) type c,
    ***       mbrsh(30) type c,
    ***       mtart(30) type c,
    ***       kzsel(20) type c,
    ***       maktx(40) type c,
    ***       meins(5) type c,
    ***       end of itab.
    data: begin of record occurs 0,
    * data element: MATNR
            matnr_001(018),
    * data element: MBRSH
            mbrsh_002(001),
    * data element: MTART
            mtart_003(004),
    * data element: XFELD
            kzsel_01_004(001),
    * data element: MAKTX
            maktx_005(040),
    * data element: MEINS
            meins_006(003),
    * data element: MTPOS_MARA
            mtpos_mara_007(004),
          end of record.
    *** End generated data section ***
    start-of-selection.
    *perform open_dataset using dataset.
    perform open_group.
    **do.
    **read dataset dataset into record.
    **if sy-subrc <> 0. exit. endif.
    call function 'GUI_UPLOAD'
      exporting
        filename                      = 'c:\jitu\bdc\10002.txt'
       filetype                      = 'ASC'
       has_field_separator           = 'x'
    *   HEADER_LENGTH                 = 0
    *   READ_BY_LINE                  = 'X'
    *   DAT_MODE                      = ' '
    *   CODEPAGE                      = ' '
    *   IGNORE_CERR                   = ABAP_TRUE
    *   REPLACEMENT                   = '#'
    *   CHECK_BOM                     = ' '
    *   VIRUS_SCAN_PROFILE            =
    *   NO_AUTH_CHECK                 = ' '
    * IMPORTING
    *   FILELENGTH                    =
    *   HEADER                        =
      tables
        data_tab                      = record
    * EXCEPTIONS
    *   FILE_OPEN_ERROR               = 1
    *   FILE_READ_ERROR               = 2
    *   NO_BATCH                      = 3
    *   GUI_REFUSE_FILETRANSFER       = 4
    *   INVALID_TYPE                  = 5
    *   NO_AUTHORITY                  = 6
    *   UNKNOWN_ERROR                 = 7
    *   BAD_DATA_FORMAT               = 8
    *   HEADER_NOT_ALLOWED            = 9
    *   SEPARATOR_NOT_ALLOWED         = 10
    *   HEADER_TOO_LONG               = 11
    *   UNKNOWN_DP_ERROR              = 12
    *   ACCESS_DENIED                 = 13
    *   DP_OUT_OF_MEMORY              = 14
    *   DISK_FULL                     = 15
    *   DP_TIMEOUT                    = 16
    *   OTHERS                        = 17
    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 record .
    perform bdc_dynpro      using 'SAPLMGMM' '0060'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RMMG1-MATNR'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'RMMG1-MATNR'
                                  record-matnr_001.
    perform bdc_field       using 'RMMG1-MBRSH'
                                  record-mbrsh_002.
    perform bdc_field       using 'RMMG1-MTART'
                                  record-mtart_003.
    perform bdc_dynpro      using 'SAPLMGMM' '0070'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MSICHTAUSW-DYTXT(01)'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=ENTR'.
    perform bdc_field       using 'MSICHTAUSW-KZSEL(01)'
                                  record-kzsel_01_004.
    perform bdc_dynpro      using 'SAPLMGMM' '4004'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=BU'.
    perform bdc_field       using 'MAKT-MAKTX'
                                  record-maktx_005.
    perform bdc_field       using 'BDC_CURSOR'
                                  'MARA-MEINS'.
    perform bdc_field       using 'MARA-MEINS'
                                  record-meins_006.
    perform bdc_field       using 'MARA-MTPOS_MARA'
                                  record-mtpos_mara_007.
    perform bdc_transaction using 'MM01'.
    **enddo.
    endloop.
    perform close_group.
    *perform close_dataset using dataset.
    &*****************Reward point if helpful************&

  • How to transfer data in change log table of dso to z-table using abap code

    Hi  can you please explain me how to transfer data in change log table of dso to z-table using abap code ,with out using Function module concept

    PROGRAM NAME:   ZBW_DELTA_TO_GSTAR                                 **
    report ZBW_DELTA_TO_GSTAR no standard page heading
                                     line-size 120
                                     line-count 75
                                     message-id ZBW_MSG_CLS.
    tables:   ZGIV_DLTA_EBV_BB,
              ZGIV_DLTA_EM2_BL,
              ZGIV_DLTA_EM2_BK.
    Selection Screen Definitions
    SELECTION-SCREEN: BEGIN OF BLOCK INNER WITH FRAME TITLE TEXT-001.
    SELECTION-SCREEN: SKIP 1.
    PARAMETERS:       EBVBB RADIOBUTTON GROUP ROLL,
                      EM2BL RADIOBUTTON GROUP ROLL,
                      EM2BK RADIOBUTTON GROUP ROLL.
    SELECTION-SCREEN: END OF BLOCK INNER.
    Data:  WS_UPDATE_FLAG  Type C,
           UCounter(9)      Type N,
           ICounter(9)      Type N.
    DATA:  T_ZGIV_DLTA_EBV_BB Type Standard Table of ZGIV_DLTA_EBV_BB,
           s_ZGIV_DLTA_EBV_BB LIKE line of T_ZGIV_DLTA_EBV_BB.
    DATA:  T_ZGIV_DLTA_EM2_BK Type Standard Table of ZGIV_DLTA_EM2_BK,
           s_ZGIV_DLTA_EM2_BK LIKE line of T_ZGIV_DLTA_EM2_BK.
    DATA:  T_ZGIV_DLTA_EM2_BL Type Standard Table of ZGIV_DLTA_EM2_BL,
           s_ZGIV_DLTA_EM2_BL LIKE line of T_ZGIV_DLTA_EM2_BL.
    Standard Internal Tables - Describe usage.
    data: begin of i_AEPSD_O0140 occurs 0.
            include structure /BIC/AEPSD_O0140.
    data: end of i_AEPSD_O0140.
    data: begin of i_AEPSD_O0240 occurs 0.
            include structure /BIC/AEPSD_O0240.
    data: end of i_AEPSD_O0240.
    data: begin of i_AEPSD_O0340 occurs 0.
            include structure /BIC/AEPSD_O0340.
    data: end of i_AEPSD_O0340.
    data: begin of i_GIV_DLTA_EBV_BB occurs 0.
            include structure ZGIV_DLTA_EBV_BB.
    data: end of i_GIV_DLTA_EBV_BB.
    data: begin of i_GIV_DLTA_EM2_BK occurs 0.
            include structure ZGIV_DLTA_EM2_BK.
    data: end of i_GIV_DLTA_EM2_BK.
    data: begin of i_GIV_DLTA_EM2_BL occurs 0.
            include structure ZGIV_DLTA_EM2_BL.
    data: end of i_GIV_DLTA_EM2_BL.
    Miscellaneous Program Variables and Constants.
    TOP-OF-PAGE
    top-of-page.
    START-OF-SELECTION
    start-of-selection.
      Clear: i_GIV_DLTA_EBV_BB,
             i_GIV_DLTA_EM2_BK,
             i_GIV_DLTA_EM2_BL,
             UCounter, ICounter.
      IF EBVBB = 'X'.
        PERFORM 100_EXTRACT_EBV_BB_DELTA_RECS.
      ELSEIF EM2BK = 'X'.
        PERFORM 100_EXTRACT_EM2_BK_DELTA_RECS.
      ELSE.
        PERFORM 100_EXTRACT_EM2_BL_DELTA_RECS.
      ENDIF.
    FORM 100_EXTRACT_EBV_BB_DELTA_RECS
    FORM 100_EXTRACT_EBV_BB_DELTA_RECS.
      Refresh:   i_AEPSD_O0140,
                 i_GIV_DLTA_EBV_BB.
      Clear:      UCounter, ICounter, s_ZGIV_DLTA_EBV_BB .
      Select * From /BIC/AEPSD_O0140
        Into TABLE i_AEPSD_O0140.
      IF SY-Subrc = 0.
        LOOP AT i_AEPSD_O0140.
          MOVE-CORRESPONDING i_AEPSD_O0140 TO s_ZGIV_DLTA_EBV_BB.
          MOVE SY-DATUM to s_ZGIV_DLTA_EBV_BB-create_dt.
          INSERT ZGIV_DLTA_EBV_BB FROM s_ZGIV_DLTA_EBV_BB.
          IF SY-Subrc = 0.
            ICounter = ICounter + 1.
          ELSE.
            UPDATE ZGIV_DLTA_EBV_BB FROM  s_ZGIV_DLTA_EBV_BB.
            IF SY-Subrc = 0.
              UCounter = UCounter + 1.
            ELSE.
              Message E067 with SY-DATUM ' ' SY-UZEIT ' '.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    "100_EXTRACT_EBV_BB_DELTA_RECS
    FORM 100_EXTRACT_EM2_BK_DELTA_RECS
    FORM 100_EXTRACT_EM2_BK_DELTA_RECS.
    Refresh:   i_AEPSD_O0240,
               i_GIV_DLTA_EM2_BK.
      Clear:      UCounter, ICounter, s_ZGIV_DLTA_EM2_BK .
      Select * From /BIC/AEPSD_O0240
        Into TABLE i_AEPSD_O0240.
      IF SY-Subrc = 0.
        LOOP AT i_AEPSD_O0240.
          MOVE-CORRESPONDING i_AEPSD_O0240 TO s_ZGIV_DLTA_EM2_BK.
          MOVE SY-DATUM to s_ZGIV_DLTA_EM2_BK-create_dt.
            INSERT ZGIV_DLTA_EM2_BK FROM s_ZGIV_DLTA_EM2_BK.
          IF SY-Subrc = 0.
            ICounter = ICounter + 1.
          ELSE.
            UPDATE ZGIV_DLTA_EM2_BK FROM  s_ZGIV_DLTA_EM2_BK.
            IF SY-Subrc = 0.
              UCounter = UCounter + 1.
            ELSE.
              Message E067 with SY-DATUM ' ' SY-UZEIT ' '.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    "100_EXTRACT_EM2_BK_DELTA_RECS
    FORM 100_EXTRACT_EM2_BL_DELTA_RECS
    FORM 100_EXTRACT_EM2_BL_DELTA_RECS.
    Refresh:   i_AEPSD_O0340,
               i_GIV_DLTA_EM2_BL.
      Clear:      UCounter, ICounter, s_ZGIV_DLTA_EM2_BL .
      Select * From /BIC/AEPSD_O0340
        Into TABLE i_AEPSD_O0340.
      IF SY-Subrc = 0.
        LOOP AT i_AEPSD_O0340.
          MOVE-CORRESPONDING i_AEPSD_O0340 TO s_ZGIV_DLTA_EM2_BL.
          MOVE SY-DATUM to s_ZGIV_DLTA_EM2_BL-create_dt.
            INSERT ZGIV_DLTA_EM2_BL FROM s_ZGIV_DLTA_EM2_BL.
          IF SY-Subrc = 0.
            ICounter = ICounter + 1.
          ELSE.
            UPDATE ZGIV_DLTA_EM2_BL FROM  s_ZGIV_DLTA_EM2_BL.
            IF SY-Subrc = 0.
              UCounter = UCounter + 1.
            ELSE.
              Message E067 with SY-DATUM ' ' SY-UZEIT ' '.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    "100_EXTRACT_EM2_BL_DELTA_RECS
    END-OF-SELECTION
    end-of-selection.
      perform D1000_REPORT_DATA.
    D1000_REPORT_DATA
    form D1000_REPORT_DATA.
    *Display the title of the program
      write: /25 SY-TITLE.
      skip.
    Diaplay the details of the user and time
      write: /1 'Executed by', 15 SY-UNAME, 30 'Date',
      38 SY-DATUM, 53 'Time', 60 SY-UZEIT.
      skip 2.
      write: /  'Delta Records have been extracted  ',
             /   'Updates : ', UCounter,
             /   'Inserts : ', ICounter.
      skip.
      skip 3.
      write: /20 'End of the report'.
    endform.                                           "D1000_REPORT_DATA
    chgeck it out this also may hep you

  • ABAP code which will use function module during field mapping in LSMW

    Hi,
    During field mapping in LSMW, for one of the field called field, I want to use a function module 'QF05_RANDOM_INTEGER', which will generate random numbers and map that random number to that field.
    How do I write ABAP code which uses function module, during filed mapping for a particluar field in LSMW ?
    Please help...
    Regards,
    Tushar.

    Hi Tushar,
    You can write in FORM ROUTINE and LSMW.
    I hope you know how to write ABAP code at field level.
    If not ...
    Come to change mode->select the field->Rule->ABAP Code
    write a perform statement in ABAP code at field level.
    <b>PERFORM test</b> using val
                 changing valu.
    Go to Utilities(at menu)->switch layout-> extras ->select Layout->check Form routine-> it will display a FORM Routine... at bottom
    this is the place where you can write some code for
    <b> FORM test</b> using value
              changing value1
      FM call....
    .ENDFORM  
    Get the value1 returned and use for the Field population.
    Reward points if this Helps.
    Manish
    Message was edited by:
            Manish Kumar

  • ABAP Code Problem in Start Routine to Fill the value from Look-up Table ???

    Hi all,
         I am trying to fill the values of DOC_NUMBER & PLANT from look-up table /BIC/AZSD_O0700 (Billing Item ODS) for each BILL_NUM in Start Routine for Update Rules of Billing Header ODS and modify the data_package.
    What is wrong with the below ABAP code, PLEASE ???
    data: it_data type standard table of data_package_structure
            with header line
            with non-unique default key initial size 0.
    types: begin of billing_item_type,
                 BILL_NUM          like /BIC/AZSD_O0700-BILL_NUM,
                 DOC_NUMBER   like /BIC/AZSD_O0700-DOC_NUMBER,
                 PLANT               like /BIC/AZSD_O0700-PLANT,
             end of billing_item_type.
    refresh it_data.
    clear it_data.
    it_data[] = DATA_PACKAGE[].
    refresh DATA_PACKAGE.
    clear DATA_PACKAGE.
    loop at it_data.
        select DOC_NUMBER PLANT into (it_data-DOC_NUMBER, it_data-PLANT)
               from /BIC/AZSD_O0700
               where  BILL_NUM  = it_data-BILL_NUM
               and    FISCVARNT = it_data-fiscvarnt.
        endselect.
        if sy-subrc = 0.
           move-corresponding it_data to DATA_PACKAGE.
        endif.
      endloop.
      modify DATA_PACKAGE.
    Thanks,
    Venkat.

    Hi Venkat,
      Two things -One is the performance and the other ... there is no Append  within the loop.
      Try moving the select statement ousdie the loop to improve performance and move the modify statement into the loop ... change modify to append. Code below.
       Let me know if you need more help.
    Best regards,
    Kazmi
    data: it_data type standard table of data_package_structure
    with header line
    with non-unique default key initial size 0.
    types: begin of billing_item_type,
    BILL_NUM like /BIC/AZSD_O0700-BILL_NUM,
    DOC_NUMBER like /BIC/AZSD_O0700-DOC_NUMBER,
    PLANT like /BIC/AZSD_O0700-PLANT,
    end of billing_item_type.
    refresh it_data.
    clear it_data.
    it_data] = DATA_PACKAGE[.
    refresh DATA_PACKAGE.
    clear DATA_PACKAGE.
    loop at it_data.
    select DOC_NUMBER PLANT into (it_data-DOC_NUMBER, it_data-PLANT)
    from /BIC/AZSD_O0700
    where BILL_NUM = it_data-BILL_NUM
    and FISCVARNT = it_data-fiscvarnt.
    endselect.
    if sy-subrc = 0.
    move-corresponding it_data to DATA_PACKAGE.
    Append DATA_PACKAGE.
    endif.
    endloop.

  • Need help in ABAP code to Enhance the Extract Structure ?????

    Hi all,
        I want to enhance the extract structure to get KBETR & KBRUE fields of KONP table since it didn’t allow me to add those fields while creating the generic extractor because of currency key problems. I want to read all KONP records into internal table with KNUMH (Key). Next, I want to fill them into ZZKBETR & ZZKBRUE of Extract Structure ZOXUR40065 in loop.
    DATA:
      i_t_zrebate like ZOXUR40065 occurs 0 with header line,
      reb_tabix like sy-tabix.
    TABLES: KONP.
      Could you please help me in completing the ABAP code?
    Thanks,
    Venkat.

    Hello Manga,
        I have included the following code in ZXRSAU01:
    WHEN 'ZREBATE'.
    PERFORM ZREBATE_EXIT TABLES C_T_DATA.
    After Double click on ZREBATE_EXIT on perform statement, it created ZXRSAF01 include and the following code is added in it:
    FORM ZREBATE_EXIT TABLES FP_C_T_DATA STRUCTURE ZOXUR40065.
    DATA:
    i_t_zrebate like ZOXUR40065 occurs 0 with header line,
    reb_tabix like sy-tabix.
    FIELD-SYMBOLS: <l_c_t_data> TYPE ZOXUR40065.
    LOOP AT fp_c_t_data ASSIGNING <l_c_t_data>.
    reb_tabix = sy-tabix.
    select single KBETR KBRUE
    into (<l_c_t_data>-ZZKBETR,
    <l_c_t_data>-ZZKBRUE,
    from KONP
    where KNUMH eq <l_c_t_data>-KNUMH.
    if sy-subrc eq 0.
    MODIFY fp_c_t_data FROM <l_c_t_data> INDEX reb_tabix.
    endif.
    CLEAR:reb_tabix.
    ENDLOOP.
    ENDFORM.
    When I tried to Activate this ZXRSAF01 include, it fails with 'The FORM "ZREBATE_EXIT" does not exist'.
      Should it be FP_C_T  or P_C_T? I found P_C_T in ZXRSAF01 include.
      What is wrong with it, please ?
       Can't I add this whole code in main include ZXRSAU01itself?
      The Extractor ZREBATE is based on KONA, KONH & KONP tables. This Extractor and KONA table have the same 4000 records and KONP has 13000 records. I want to extract KBERT & KBRUE from KONP.
       Thanks in advance.
    Regards,
    Venkat

  • Reg: ABAP code for customer exit variable

    Hi Team,
    I have a requirement to create a report  based on an multiprovider 'TEST'.
    Based on the input selection of Period; I need to define a Keyfigure X which will be a count of value available for that Period in one cube involved in the MProvider. E.g.: If for period 12, the value = 1 in the cube; then this keyfigure will give the count as 1 in the output of the report.
    The second KF Y values are available in the second infocube directly: ibut should be displayed based on the value of the KF 'X' with logic as if X > 0 ; then the values should be read from the second infocube in the report. & if X <= 0; no values should be displayed.
    Please help me with the ABAP code to be used in the query level.
    Thanks & Regards
    Sneha

    Hi Sneha,
       I would suggest the following
    1.Please change the design the cube and include a key figure Zcount that would be incremented for each record.
    Now as per the first requirement you need to get the count for a Input Period from First cube
    This would be very simple to implement , all you have to do is restrict this KF with the Input characteristic/variable and also the First Infocube.
    2.You can also use exception aggreation counter to address this requirement . Even in this case you need to include a dummy key figure in the cube and the exception characteristic would be the period in the Infocube.
    But performance would be on downside when compared to the first one.
    3.The second requirement is quite simple
    Create a formula KF as follows
      (KF1 > 0)*KF2 . 
      KF1 > 0 is a logical operation and it would always return 1 on success and 0 otherwise.
    Hope this helps,
    Regards,
    James Harold.

  • Unwanted ABAP Code Block Triggering - IF condition not working

    Friends,
    I am facing weird issue in my production system i.e. one of the code block which was bounded in IF condition is getting triggered. However, as per the data that I have in my system this IF condition should skip that code block.
    Let me give you code and execution flow here:
    I have Program A in which I am submitting Program B in background mode to selected server. This Program A will be executed by end user in Background mode.
    call function 'JOB_OPEN'
         exporting
           jobname          = job_name
         importing
           jobcount         = job_number
         exceptions
           cant_create_job  = 01
           invalid_job_data = 02
           jobname_missing  = 03.
    if sy-subrc = 0.
         submit program B
                  via job job_name number job_number
                  with p_sched  = sched
                  with period_p = period
                  with fyear_p  = fyear
                  with username = ruser
    and return.
    call function 'JOB_CLOSE'
         exporting
           jobcount             = job_number
           jobname              = job_name
           sdlstrtdt            = start_date
           sdlstrttm            = start_time
          targetserver          = l_targetserver          "V05++
         exceptions
           cant_start_immediate = 01
           invalid_startdate    = 02
           jobname_missing      = 03
           job_close_failed     = 04
           job_nosteps          = 05
           job_notex            = 06
           lock_failed          = 07.
    endif.
    As you can see in code, I am passing job to run on l_targetserver. This program also releases some other jobs on other programs.
    In Program B, I have code like this:
    Top Include.
    start-of-selection.
    perform routine1 using p_fyear. "THIS HAS SOME SELECT QUERIES  AND  OTHER CODE and THERE IS NO ISSUE WITH IT. THIS ROUTINE IS
    ALSO HAVING ONE AND ONLY 'CLEAR' statement on DELTA_FLAG.
    perrform routine2.
    form routine2.
    loop itab into wa.  " This itab was populated in routine1
      perform get_flag." WE ARE PASSING VALUE TO DELTA_FLAG VARIABLE HERE. YOU CAN CHECK CODE BELOW.
    perform process_data. "CHECK THIS ROUTINE
    peform update_records.
    endloop.
    endform.
    Form Get_FLag.
    select * from dbtable into localtable where <condition>. " THIS QUERY RETURNS SOME DATA AND MY FLAG WILL BE SET AS 'X'.
    if sy-subrc = 0.
    delta_flag = 'X'. "THis one declared in top include.
    endif.
    EndForm.
    Form Process_Data.
    Perform get_dataset1.
    while counter <> 0. " Variable Counter declared in top include and default value is 20. Value will be decreased in side this loop. No issues with it.
    if wa-fld1 = '1'. "Check value of one of the field.
      continue.
    endif.
    perform get_delta_data. " We have Unwanted ABAP code (for my scenario) here.
    endwhile.
    Endform.
    form update_records.
    call function 'FUNCTION' in update task exporting par1 = itab.
    commitwork
    endform.
    form get_delta_data.
    if delta_flag is initial.
    select data from BSEG into i_bseg where <condition>. " This query is getting triggered in my system.
    endif.
    endform.
    All my data objects were declared in Top include of the program. Subroutines with their parameters were same as above code. I am not using any sub-routine second time or out-side of this program. As shown, this program updates records to one of the table with UPDATE function module IN UPDATE TASK and there is COMMITWORK after that. This task is part of
    As you could understand, DELTA_FLAG is having 'X' but query on BSEG is getting triggered. We are not clearing this variable after populating 'X' to it. I can see this query from Program B captured in ST12 trace results. (Verified it multiple times)
    I did this analysis:
    1. Ran this process in foreground with debugging, then there is no issue.
    2. Debugged 'Finished' job of my production system, but I dont see this code triggered in Debug mode.
    3. Replicated same execution process in our non-production environments, but there is no issue.
    Let me know if you need any other details.
    Thanks for your time.
    Regards,
    Naveen

    I forgot the one bit, which might actually have been useful: I'd be moving the if delta_flag is initial. out of form get_delta_data, before perform get_delta_data.Since you are calling in nested loops there, every little bit of run-time counts, and "philosophically" I feel - procedure should do what its name promises it will, and not check whether it's "appropriate time" to do it
    cheers and good luck
    Jānis

  • Structure of abap code in fi module

    Hi all
    I joined like fresher could you help me how to write the abap code
    structure of the abap code

    CHECK THIS
    I HOPE IT WILL HELP YOU.
    *& Report  ZDTK_FI_CRDB
    *& DESCRIPTION : CREDIT DEBIT NOTE FOR CUSTOMER OR VENDOR.
    REPORT  ZDTK_FI_CRDB NO STANDARD PAGE HEADING
                                LINE-COUNT 65(5)
                                LINE-SIZE 80
                                MESSAGE-ID ZTAR_FI
    *&       STRUCTURE DECLARATION
    TYPES : BEGIN OF TY_ADDR,
                    BUKRS TYPE BUKRS,          "COMPANY CODE
                    LIFNR TYPE LIFNR,          "VENDOR NO
                    KUNNR TYPE KUNNR,          "CUSTOMJER NO
                    NAME1 TYPE NAME1,          "NAME1
                    NAME2 TYPE NAME2,          "NAME2
                    ORT01 TYPE ORT01,          "CITY
                    ORT02 TYPE ORT02,
                    PSTLZ TYPE PSTLZ,          "POSTAL CODE
                    STRAS TYPE STRAS,          "STREET
                    ADRNR TYPE ADRNR,          "ADDRESS NO
                    TELF1 TYPE TELF1,          "TELEFHONE NO
                    TELF2 TYPE TELF2,          "TELEFHONE NO 2
                    TELFX TYPE TELFX,          "FAX
             END OF TY_ADDR,
          BEGIN OF TY_LFA1,
                   KUNNR TYPE KUNNR,          "CUSTOMJER NO
                   NAME1 TYPE NAME1,          "NAME1
                   NAME2 TYPE NAME2,          "NAME2
                   ORT01 TYPE ORT01,          "CITY
                   ORT02 TYPE ORT02,
                   PSTLZ TYPE PSTLZ,          "POSTAL CODE
                   STRAS TYPE STRAS,          "STREET
                   ADRNR TYPE ADRNR,          "ADDRESS NO
                   TELF1 TYPE TELF1,          "TELEFHONE NO
                   TELF2 TYPE TELF2,          "TELEFHONE NO 2
                   TELFX TYPE TELFX,          "FAX
            END OF TY_LFA1,
           BEGIN OF TY_DOCM,
                    GJAHR TYPE GJAHR,
                    BELNR TYPE BELNR_D,
                    BUDAT TYPE BUDAT,
                    BLDAT TYPE BLDAT,
                    BLART TYPE BLART,
                    BSCHL TYPE BSCHL,
                    SHKZG TYPE SHKZG,
                    XBLNR TYPE XBLNR,
                    DMBTR TYPE DMBTR,
                    SGTXT TYPE SGTXT,
                    REBZG TYPE REBZG,
                    REBZJ TYPE REBZJ,
                    KUNNR TYPE KUNNR,
                    LIFNR TYPE LIFNR,
             END OF TY_DOCM.
    *&       TABLE DECLARATION
    DATA : T_ADDR TYPE STANDARD TABLE OF TY_ADDR,
    *&       WORK AREA  DECLARATION
           W_ADDR TYPE TY_ADDR,
           W_DOCM TYPE TY_DOCM,
          W_LFA1 TYPE TY_LFA1,
    *&       GLOBLE VARIABLE DECLARATION
           G_KUNNR TYPE KUNNR,
           G_LIFNR TYPE LIFNR,
           DCAMT TYPE DMBTR.
    *&       INITIALIZATION
    INITIALIZATION.
    CLEAR :
    *REFRESH :
    *&       SELECTION SCREEN DECLARATION
    SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
    SELECTION-SCREEN SKIP 1.
    PARAMETERS : S_BUKRS TYPE BSID-BUKRS OBLIGATORY DEFAULT '1000'.
    PARAMETERS : S_BELNR TYPE BELNR_D OBLIGATORY DEFAULT '1600000070'.
    PARAMETERS : S_GJAHR TYPE GJAHR OBLIGATORY DEFAULT '2008'.
    PARAMETERS : ASON TYPE BUDAT OBLIGATORY DEFAULT SY-DATUM.
    PARAMETERS : S_KUNNR TYPE KUNNR MODIF ID GP1.
    PARAMETERS : S_LIFNR TYPE LIFNR MODIF ID GP2.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN : END OF BLOCK B1.
    SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN BEGIN OF LINE.
    PARAMETERS R1  RADIOBUTTON GROUP RAO DEFAULT 'X' USER-COMMAND hit.
    SELECTION-SCREEN COMMENT (50) TEXT-003 FOR FIELD R1.
    PARAMETERS R2  RADIOBUTTON GROUP RAO.
    SELECTION-SCREEN COMMENT (50) TEXT-004 FOR FIELD R2.
    SELECTION-SCREEN END OF LINE.
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN END OF BLOCK B2.
    *SELECTION-SCREEN: BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-005.
    *SELECTION-SCREEN SKIP 1.
    *SELECTION-SCREEN BEGIN OF LINE.
    *PARAMETERS R3  RADIOBUTTON GROUP RAJ DEFAULT 'X' USER-COMMAND hit.
    *SELECTION-SCREEN COMMENT (50) TEXT-006 FOR FIELD R1.
    *PARAMETERS R4  RADIOBUTTON GROUP RAJ.
    *SELECTION-SCREEN COMMENT (50) TEXT-007 FOR FIELD R2.
    *SELECTION-SCREEN END OF LINE.
    *SELECTION-SCREEN SKIP 1.
    *SELECTION-SCREEN : END OF BLOCK B3.
    *&       AT SELECTION SCREEN
    AT SELECTION-SCREEN.
           PERFORM VALIDATE_SELECTION.
    *&       AT SELECTION SCREEN OUTPUT
    AT SELECTION-SCREEN OUTPUT.
           PERFORM SCREEN_OUTPUT.
    *&       START OF SELECTION
    START-OF-SELECTION.
    IF R1 = 'X'.
            PERFORM GET_DOCUMENT_L.
    ELSEIF R2 = 'X'.
            PERFORM GET_DOCUMENT_K.
    ENDIF.
    *&       END OF SELECTION
    END-OF-SELECTION.
    PERFORM DISPLAY.
    *&       TOP OF PAGE
    *TOP-OF-PAGE.
          PERFORM PAGE_HEADER.
    *&      Form  VALIDATE_SELECTION
          text
    form VALIDATE_SELECTION .
    DATA : L_BUKRS TYPE BSID-BUKRS.
    SELECT SINGLE BUKRS FROM KNB1
                        INTO L_BUKRS
                       WHERE BUKRS = S_BUKRS.
    *IF SY-SUBRC <> 0.
    *MESSAGE E001.
    *LEAVE LIST-PROCESSING.
    *ENDIF.
    DATA : L_KUNNR TYPE BSID-KUNNR.
    SELECT SINGLE KUNNR FROM BSID
                        INTO L_KUNNR
                       WHERE KUNNR = S_KUNNR.
    *IF SY-SUBRC <> 0.
    *MESSAGE E002.
    *LEAVE LIST-PROCESSING.
    *ENDIF.
    endform.                    " VALIDATE_SELECTION
    *&      Form  SCREEN_OUTPUT
          text
    form SCREEN_OUTPUT .
        IF R1 = 'X'.
          LOOP AT SCREEN.
            if screen-group1 = 'GP1'.
              SCREEN-active = '0'.
    *SCREEN-INTENSIFIED = '0'.
              MODIFY SCREEN.
            ENDIF.
          ENDLOOP.
        ELSE.
          LOOP AT SCREEN.
            IF SCREEN-group1 = 'GP2'.
              SCREEN-active = '0'.
    *SCREEN-INTENSIFIED = '1'.
              MODIFY SCREEN.
            ENDIF.
          ENDLOOP.
        ENDIF.
    endform.                    " SCREEN_OUTPUT
    *&      Form  GET_DOCUMENT_L
          text
    FORM GET_DOCUMENT_L .
    DATA : MESSG(60).
    SELECT SINGLE BUKRS
                  LIFNR
                  GJAHR
                  BELNR
                  BUDAT
                  BLDAT
                  BLART
                  BSCHL
                  SHKZG
                  DMBTR
                  SGTXT
                  REBZG
                  REBZJ FROM BSIK
                        INTO CORRESPONDING FIELDS OF W_DOCM
                       WHERE BUKRS = S_BUKRS AND
                             GJAHR = S_GJAHR AND
                             BELNR = S_BELNR.
    SELECT SINGLE DMBTR FROM BSIK INTO DCAMT
                       WHERE BELNR = W_DOCM-REBZG AND
                             GJAHR = W_DOCM-REBZJ.
    IF NOT W_DOCM IS INITIAL.
            PERFORM GET_LFA1.
    ELSE.
    SELECT SINGLE BUKRS
                  LIFNR
                  GJAHR
                  BELNR
                  BUDAT
                  BLDAT
                  BLART
                  BSCHL
                  SHKZG
                  DMBTR
                  SGTXT
                  REBZG
                  REBZJ FROM BSAK
                        INTO CORRESPONDING FIELDS OF W_DOCM
                       WHERE BUKRS = S_BUKRS AND
                             GJAHR = S_GJAHR AND
                             BELNR = S_BELNR.
    SELECT SINGLE DMBTR FROM BSAK INTO DCAMT
                       WHERE BELNR = W_DOCM-REBZG AND
                             GJAHR = W_DOCM-REBZJ.
          IF NOT W_DOCM IS INITIAL.
                  PERFORM GET_LFA1.
          ELSE.
          CONCATENATE 'THERE IS NO DOCUMENT NO' S_BELNR S_GJAHR 'FOR VENDOR' INTO  MESSG
                       SEPARATED BY SPACE.
          MESSAGE I011 WITH MESSG.
          LEAVE LIST-PROCESSING.
          ENDIF.
    ENDIF.
    ENDFORM.                    " GET_DOCUMENT_L
    *&      Form  GET_LFA1
          text
    FORM GET_LFA1 .
    SELECT SINGLE LIFNR
                  NAME1
                  NAME2
                  ORT01
                  ORT02
                  PSTLZ
                  STRAS
                  ADRNR
                  TELF1
                  TELF2
                  TELFX FROM LFA1 INTO CORRESPONDING FIELDS OF W_ADDR
                          WHERE LIFNR = W_DOCM-LIFNR.
    ENDFORM.                    " GET_LFA1
    *&      Form  GET_DOCUMENT_K
          text
    FORM GET_DOCUMENT_K .
    DATA : MESSG(60).
    SELECT SINGLE BUKRS
                  KUNNR
                 LIFNR
                  GJAHR
                  BELNR
                  BUDAT
                  BLDAT
                  BLART
                  BSCHL
                  SHKZG
                  DMBTR
                  SGTXT
                  REBZG
                  REBZJ FROM BSID
                        INTO CORRESPONDING FIELDS OF W_DOCM
                       WHERE  BUKRS = S_BUKRS AND
                              GJAHR = S_GJAHR AND
                              BELNR = S_BELNR.
    SELECT SINGLE DMBTR FROM BSID INTO DCAMT
                       WHERE BELNR = W_DOCM-REBZG AND
                             GJAHR = W_DOCM-REBZJ.
    IF NOT W_DOCM IS INITIAL.
            PERFORM GET_KNA1.
    ELSE.
    SELECT SINGLE BUKRS
                  KUNNR
                 LIFNR
                  GJAHR
                  BELNR
                  BUDAT
                  BLDAT
                  BLART
                  BSCHL
                  SHKZG
                  DMBTR
                  SGTXT
                  REBZG
                  REBZJ FROM BSAD
                        INTO CORRESPONDING FIELDS OF W_DOCM
                       WHERE  BUKRS = S_BUKRS AND
                              GJAHR = S_GJAHR AND
                              BELNR = S_BELNR.
    SELECT SINGLE DMBTR FROM BSAD INTO DCAMT
                       WHERE BELNR = W_DOCM-REBZG AND
                             GJAHR = W_DOCM-REBZJ.
          IF NOT W_DOCM IS INITIAL.
                  PERFORM GET_KNA1.
          ELSE.
          CONCATENATE 'THERE IS NO DOCUMENT NO' S_BELNR S_GJAHR 'FOR CUSTOMER' INTO  MESSG
                       SEPARATED BY SPACE.
          MESSAGE I011 WITH MESSG.
          LEAVE LIST-PROCESSING.
          ENDIF.
    ENDIF.
    ENDFORM.                    " GET_DOCUMENT_K
    *&      Form  GET_KNA1
          text
    FORM GET_KNA1 .
    SELECT SINGLE KUNNR
                  NAME1
                  NAME2
                  ORT01
                  ORT02
                  PSTLZ
                  STRAS
                  ADRNR
                  TELF1
                  TELF2
                  TELFX FROM KNA1 INTO CORRESPONDING FIELDS OF W_ADDR
                          WHERE KUNNR = W_DOCM-KUNNR.
    ENDFORM.                    " GET_KNA1
    *&      Form  DISPLAY
          text
    FORM DISPLAY .
    LONG TEXT *************************
    *DATA : BEGIN OF inline OCCURS 0,
    *END OF inline.
    *TYPES: BEGIN OF TY_LONGT,
                   tdformat TYPE tdformat,
                   tdline TYPE tdline,
          END OF TY_LONGT.
    *DATA : TLONGT TYPE STANDARD TABLE OF TY_LONGT,
          WLONGT TYPE TY_LONGT.
    DATA: BEGIN OF DTEXT OCCURS 50.
    *DATA: MATNR LIKE PBIM-MATNR.
    INCLUDE STRUCTURE TLINE.
    DATA: END OF DTEXT.
    DATA: BEGIN OF HTEXT.
    INCLUDE STRUCTURE THEAD.
    DATA: END OF HTEXT.
    DATA: BEGIN OF LTEXT OCCURS 50.
    INCLUDE STRUCTURE TLINE.
    DATA: END OF LTEXT.
    DATA: TNAME LIKE THEAD-TDNAME.
    CONCATENATE S_BUKRS W_DOCM-BELNR S_GJAHR '002' INTO  TNAME.
    *SEPARATED BY SPACE.
    DATA : W_STXL TYPE STXL.
    SELECT SINGLE * FROM STXL INTO W_STXL
                             WHERE TDNAME = TNAME.
    IF NOT W_STXL IS INITIAL.
    *SELECT * FROM PBIM WHERE WERKS IN S_WERKS.
    *MOVE PBIM-BDZEI TO TNAME.
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        CLIENT                        = SY-MANDT
        ID                            = W_STXL-TDID
        LANGUAGE                      = W_STXL-TDSPRAS
        NAME                          = TNAME
        OBJECT                        = W_STXL-TDOBJECT
      ARCHIVE_HANDLE                = 0
      LOCAL_CAT                     = ' '
    IMPORTING
        HEADER                        = HTEXT
      TABLES
        LINES                         = LTEXT
    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 LTEXT.
    IF LTEXT-TDLINE NE ''.
    MOVE LTEXT-TDLINE TO DTEXT-TDLINE.
    APPEND DTEXT.
    ENDIF.
    ENDLOOP.
    ENDIF.
    LONG TEXT *************************
    CUSTOMER / VENDOR NO *************************
    DATA : CUVE(10).
    IF R1 = 'X'.
    CUVE = W_ADDR-LIFNR.
    ELSEIF R2 = 'X'.
    CUVE = W_ADDR-KUNNR.
    ENDIF.
    CUSTOMER / VENDOR NO *************************
    CR / DR DATA *************************
    IF DCAMT IS INITIAL.
    SELECT SINGLE DMBTR FROM BSIS INTO DCAMT
                       WHERE BELNR = W_DOCM-REBZG AND
                             GJAHR = W_DOCM-REBZJ .
                          ( KOART = 'D' OR KOART = 'K' ).
    ENDIF.
    CR / DR DATA *************************
    DATA: CNAME TYPE BUTXT.
    SELECT SINGLE BUTXT FROM T001 INTO CNAME
                       WHERE BUKRS = S_BUKRS.
    DATA : NAME(60),
           STREET(60),
           TELFX(60).
    CONCATENATE W_ADDR-NAME1 W_ADDR-NAME2 INTO  NAME
    SEPARATED BY SPACE.
    CONCATENATE W_ADDR-ORT01 W_ADDR-ORT02 'POSTAL CODE :' W_ADDR-PSTLZ INTO  STREET
    SEPARATED BY SPACE.
    CONCATENATE 'Tel No.:' W_ADDR-TELF1 W_ADDR-TELF2 'FAX :' W_ADDR-TELFX INTO  TELFX
    SEPARATED BY SPACE.
    DATA : CRDB(20),
           CRDBA(16),
           BALC TYPE DMBTR.
    IF W_DOCM-SHKZG = 'S'.
    CRDB = 'Debit Note No. :'.
    CRDBA = 'DEBIT'.
    BALC = DCAMT + W_DOCM-DMBTR.
    ELSEIF W_DOCM-SHKZG = 'H'.
    CRDB = 'Credit Note No. :'.
    CRDBA = 'CREDIT'.
    BALC = DCAMT - W_DOCM-DMBTR.
    ENDIF.
    SKIP 5.
    *FORMAT INVERSE.
                ULINE 03(77).
    WRITE : 03 SY-VLINE, 80 '|',
            /03 SY-VLINE, NAME, 54 'Party No.:' COLOR 7, CUVE COLOR 7, 80 '|',
            /03 SY-VLINE, W_ADDR-STRAS, 80 '|',
            /03 SY-VLINE, STREET, 80 '|',
            /03 SY-VLINE, TELFX, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 05 CNAME COLOR 2,  80 '|',
            /03 SY-VLINE, 36 CRDB RIGHT-JUSTIFIED, 59 W_DOCM-BELNR, 71 W_DOCM-GJAHR, 80 '|',
            /03 SY-VLINE, 58 'DATE :', W_DOCM-BUDAT, 80 '|',
            /03 SY-VLINE, 80 '|'. ULINE 03(77).
    WRITE : /03 SY-VLINE, 80 '|'.
    IF NOT DTEXT IS INITIAL.
    LOOP AT DTEXT.
    WRITE : /03 SY-VLINE, 05 DTEXT-TDLINE COLOR 1, 80 '|'.
    ENDLOOP.
    ELSEIF W_DOCM-SGTXT NE ''.
    WRITE : /03 SY-VLINE, 05 W_DOCM-SGTXT COLOR 1, 80 '|'.
    ELSE.
    WRITE : /03 SY-VLINE, 80 '|'.
    ENDIF.
    WRITE : /03 SY-VLINE, 80 '|',
    *WRITE : /03 SY-VLINE, TNAME, 80 '|',
           /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 08 'WORKING OF INTEREST CALCULATION AS ON                                   ' COLOR 4,
             47 ASON COLOR 4, '  [ 360 DAYS BASIS ]' COLOR 4, 80 '|',
            /03 SY-VLINE, 80 '|'. ULINE 03(77).
    WRITE : /03 SY-VLINE, 11 'DATE', 23 'INVOICE', 41 CRDBA, 55 'BALANCE', 64 'DAYS', 70 'INTEREST', 80 '|',
            /03 SY-VLINE, 23 ' AMOUNT', 41 'AMOUNT', 55' AMOUNT', 70 ' @ 8.00% ', 80 '|',
            /03 SY-VLINE, 80 '|'. ULINE 03(77).
    WRITE : /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 06 W_DOCM-BUDAT, 15 DCAMT, 32 W_DOCM-DMBTR, 47 BALC, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|'. ULINE 03(77).
    WRITE : /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 10 'PREPARED BY', 35 'ACCOUNTANT', 60 'MANAGER', 80 '|',
            /03 SY-VLINE, 80 '|',
            /03 SY-VLINE, 80 '|'. ULINE 03(77).
    ENDFORM.                    " DISPLAY

  • ABAP code issue

    Hello Team,
    We are facing ABAP coding performance issue in BW production and quality system. This is holding under production data loading.
    There is piece of code written in BW while loading data from one target to other
    Code:
    DELETE SOURCE_PACKAGE WHERE recordmode = 'X' OR recordmode = 'R'
    OR recordmode = 'D'.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE it_new_source
    FROM /bic/afao06pa100
    FOR ALL ENTRIES IN SOURCE_PACKAGE
    where /bic/fcckjobno = SOURCE_PACKAGE-/bic/fcckjobno
    and /bic/fcckjitid = SOURCE_PACKAGE-/bic/fcckjitid.
    * Since the preceding tranformation in the data flow already aggregates
    *multiple occurences of single SO into one record the deletion of
    *duplicates
    * is obsolete
    *    SORT SOURCE_PACKAGE BY doc_number ASCENDING s_ord_item ASCENDING
    *    record DESCENDING.
    *    delete ADJACENT DUPLICATES FROM SOURCE_PACKAGE COMPARING doc_number
    *    s_ord_item.
    SORT SOURCE_PACKAGE BY /bic/fcckjobno /bic/fcckjitid.
    LOOP AT it_new_source INTO wa_new_source.
    READ TABLE SOURCE_PACKAGE WITH KEY
    /bic/fcckjobno = wa_source-/bic/fcckjobno
    /bic/fcckjitid = wa_source-/bic/fcckjitid
    BINARY SEARCH
    INTO wa_source.
    IF sy-subrc = 0.
    MOVE-CORRESPONDING wa_new_source TO ls_target_key.
    MOVE-CORRESPONDING wa_source TO wa_new_source.
    MOVE-CORRESPONDING ls_target_key TO wa_new_source.
    MODIFY it_new_source FROM wa_new_source.
    ENDIF.
    ENDLOOP.
    REFRESH SOURCE_PACKAGE.
    SOURCE_PACKAGE[] = it_new_source[].
    REFRESH it_new_source.
    Above code takes long time for execution.
    In production for 3930891 number or records it runs for an hour an hour and goes into infinite loop without loading any data.
    We have tried same data load in quality system. (BR1)
    For 68293 records load has executed for 8-9 hours and then completed successfully.
    I have tried editing code in BR1 system by removing  ‘INTO CORRESPONDING FIELDS OF TABLE’ and written plain selection of all fields. Performed ST05 trace by commenting other code. But still found it is taking time at select statement and not improvement in load run time at start routine.
    Also tried editing select statement like below but it took same time:
    SELECT /BIC/FCCKCANC PCA_DOCTYP PCA_DOCNO PCA_ITEMNO CHRT_ACCTS MATERIAL
    ACCOUNT COMP_CODE CO_AREA PROFIT_CTR VERSION PART_PRCTR FISCPER
    FISCVARNT /BIC/FCCKJITID /BIC/FCCKJOBNO RECORDMODE /BIC/FCCKCNTR
    /BIC/FCCKCNTN /BIC/FCCKEXIMP /BIC/FCCKJOBTP
    /BIC/FCCKINTST /BIC/FCCKMAJBN /BIC/FCCKALST /BIC/FCCHUBIND
    /BIC/FCCSFCLDT /BIC/FCCHDCLDT /BIC/FCCKETADT /BIC/FCCKETDDT
    /BIC/FCCFULFDT /BIC/FCCKHBL /BIC/FCCKCBL /BIC/FCCKJCRBY /BIC/FCCKLCRBY
    INTO TABLE it_new_source
    FROM /bic/afao06pa100
    FOR ALL ENTRIES IN SOURCE_PACKAGE
    where /bic/fcckjobno = SOURCE_PACKAGE-/bic/fcckjobno
    and /bic/fcckjitid = SOURCE_PACKAGE-/bic/fcckjitid.
    Please suggest code improvement.
    Any data base improvement for tables?
    Any indexing improvement for tables?
    If required please get in touch with data base team for same.

    LOOP AT it_new_source INTO wa_new_source.
    do.
    READ TABLE SOURCE_PACKAGE
         INDEX W_TABIX
         INTO wa_source.
    IF SY-SUBRC NE SPACE.
       EXIT.
    ENDIF.
    IF     wa_new_source-/bic/fcckjobno lt wa_source-/bic/fcckjobno.
      exit.
    elseif wa_new_source-/bic/fcckjobno EQ wa_source-/bic/fcckjobno.
      MOVE-CORRESPONDING wa_new_source TO ls_target_key.
      MOVE-CORRESPONDING wa_source TO wa_new_source.
      MOVE-CORRESPONDING ls_target_key TO wa_new_source.
      MODIFY it_new_source FROM wa_new_source.
       EXIT.
    elseif wa_new_source-/bic/fcckjobno gt wa_source-/bic/fcckjobno.
      w_tabix = w_tabix + 1.
    endif.
    ENDIF.
    DONE.
    ENDLOOP.
    I put only for one field control, you must add the second field in the logic.
    With this kind of code you read only 1 time the two tables.
    This code comes from an old age name : R/2  
    regards
    Fred

  • WebDynpro Abap code to read IView Name

    Hi Friends,
    Could you please give me Webdynpro abap code to read the name of the Iview.
    Regards,
    Lakshmi Prasad.

    Hello Lakshmi,
    I dont think this is possible. If you want to differentiate from which iView your web dynpro application is launched, then you can pass some constant as Application Parameter in the iView. and in the web dynpro application you can read this parameter and perform your required logic.
    For example suppose say your web dynpro application is hosted in iView1 and iView2. In both the iview properties, pass a parameter (say IVIEWNAMe) with values 'iView1' and iView2 respectively.
    then in the Webdynpro -> Window Controllers' -> default event handler method, you read the parameter IVIEWNAME and based on the value you can peform your logic.
    BR, Saravanan

  • Move ABAP code from Z-namespace to other namespace

    Hello,
    I wonder how one can move custom ABAP code that was created in the Z-namespace to a NEW namespace, that was just created upon a confirmed "request namespace". The Z-namespace ABAP code is developed to work in SAP ERP.
    I have learned that you need the developer key of an SAP ERP installation to move ABAP code to the new namespace.
    Now, if a third party is performing this namespace move, what kind of developer key do they need? Can one give them the developer key of the created namespace or do they need THEIR OWN developer keys?

    Hello Rob,
    Thanks for the reply . I would not be deleting the objects from the sap namespace as I would need to do a double maintenance in both (customer as well as the sap namespace). However , if I have some code that gets generated and want  to have it in both my namespaces , would this(just copying it) be the best way ?
    Thanks,
    ~Vj

Maybe you are looking for

  • My Apple TV does not show all of the movies in my library.

    All are in the movies category, no home videos here.  It almost seems to be movies that I have removed from a device.  At least some of the ones not showing up were recently removed from my iPad.  Came back from a trip and removed some of the movies

  • How to enable APEX in 11gR2?

    I just got done starting from scratch on a new server. Installed OS (Windows 2008R2 SP1) and patched. Installed Grid Control. Installed 11gR2 (11.2.0.1). Verified that the database is up and working. I'm trying to enable the existing APEX already in

  • Why can't I get I cloud drive on my iPad after I have updated to 8.1.1

    My iPad won't give me the option to get iCloud drive on my iPad, I have uupdated to the most recent version and signed out and back into icloud, but I can't get I cloud drive, please help

  • SAP Archiving - Migrating from one archive backend to another.

    Hi, We use SARA for archiving and the archiving system is IBM Provided Filenet Database with ACSAP middle-ware. From 1999 till 2009 we have archived terabytes of data into Filenet Database. We plan to discontinue Filenet as our choice of archiving ba

  • HT201242 how to delete podcasts in ipod touch

    I am having trouble deleting old podcasts.  I selected the podcasts and try to erease them by using the backspace key and the delete key, but did not work.  I need help. thanks, sagrait