How to avoid select with in a loop.

Hi friends,
can any tell how to avoid the select with in a loop for the following code, since it badly effecting my performance. if possible with code
SELECT matnr werks
      FROM marc
      INTO TABLE it_marc
      FOR ALL ENTRIES IN it_ausp_1
      WHERE matnr = it_ausp_1-objek AND
         werks = p_werks
        AND mmsta LE 60.
    SORT it_marc BY matnr.
    CLEAR wa_ausp_1.
    CLEAR wa_tabix.
    LOOP AT it_ausp_1 INTO wa_ausp_1.
      wa_tabix = sy-tabix.
      READ TABLE it_marc INTO wa_marc WITH
        KEY matnr = wa_ausp_1-objek
        BINARY SEARCH.
      IF sy-subrc EQ 0.
      ELSE.
        DELETE it_ausp_1 INDEX wa_tabix.
      ENDIF.
    ENDLOOP.                      " LOOP AT it_ausp_1 INTO wa_ausp_1.
    APPEND LINES OF it_ausp_1 TO it_tal.
  IF it_tal[] IS NOT INITIAL.
    LOOP AT t_plan_order INTO fs_plan_order.
      SELECT r~rsnum
             r~rspos
             r~matnr
             r~nomng
             r~meins
             r~plnum
             r~bdter
             r~ewahr
             r~alprf
             r~posnr
             r~baugr
             m~dispo
          INTO TABLE t_resb
          FROM resb AS r
          INNER JOIN marc AS m
          ON rbaugr = mmatnr
         AND rwerks = mwerks
         FOR ALL ENTRIES IN it_tal
         WHERE r~rsnum = fs_plan_order-rsnum
           AND r~matnr = it_tal-objek
           AND r~xloek = ' '
           AND r~werks = p_werks.
      APPEND LINES OF t_resb TO t_tacl.
    ENDLOOP.

SELECT r~rsnum r~rspos r~matnr  r~nomng r~meins r~plnum r~bdter r~ewahr r~alprf r~posnr r~baugr m~dispo
          INTO TABLE t_resb
          FROM resb AS r
          INNER JOIN marc AS m
         ON r~baugr = m~matnr
         AND r~werks = m~werks
         FOR ALL ENTRIES IN it_tal
         WHERE r~rsnum = fs_plan_order-rsnum
         AND r~matnr = it_tal-objek
         AND r~xloek = ' '
         AND r~werks = p_werks.
The logic of this select is completely weird. Whcih order of the db-tables should be used, which indexes?
On RESB matnr, werks and xloek are in one index, but rsnum not.
Are the conditions in fs_plan_order and it_tal connected or independent?
It is probably much faster, to leave the  fs_plan_order condition away and check it on the result.
SELECT r~rsnum r~rspos r~matnr  r~nomng r~meins r~plnum r~bdter r~ewahr r~alprf r~posnr r~baugr m~dispo
          INTO TABLE t_resb
          FROM resb AS r
          INNER JOIN marc AS m
         ON   m~matnr  = r~baugr
         AND m~werks =  r~werks
         FOR ALL ENTRIES IN it_tal
         WHERE         AND r~matnr = it_tal-objek
         AND r~xloek = ' '
         AND r~werks = p_werks.
sort fs_plan_order by rsnum.
loop at it_tal in wa.
   read table fs_plan_order
          with key rsnum = wa-rsnum
          binary search.
   if sy-subrc eq 0.
     append ...
   endif.
endloop.
Siegfried

Similar Messages

  • How to avoid selection-screen?

    Hi,
    i have this short report:
    TABLES: MARA.
    SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
    AT SELECTION-SCREEN.
      IF SY-BATCH = 'X'.
    * how to avoid selection screen
      ENDIF.
    START-OF-SELECTION.
      SELECT * FROM MARA WHERE MATNR IN S_MATNR.
        WRITE: / MARA-MATNR.
      ENDSELECT.
    END-OF-SELECTION.
    in batch i don't want the selection-screen. Is it possible? How can i do this?
    Thanks.
    regards, Dieter

    Dieter Gröhn wrote:
    > Hi,
    >
    > i have this short report:
    >
    >
    > TABLES: MARA.
    > SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
    > *
    > AT SELECTION-SCREEN.
    >   IF SY-BATCH = 'X'.
    > * how to avoid selection screen
    >   ENDIF.
    > *
    > ************************************************************************
    > START-OF-SELECTION.
    > *
    >   SELECT * FROM MARA WHERE MATNR IN S_MATNR.
    >     WRITE: / MARA-MATNR.
    >   ENDSELECT.
    > *
    > END-OF-SELECTION.
    >
    >
    > in batch i don't want the selection-screen. Is it possible? How can i do this?
    >
    > Thanks.
    >
    > regards, Dieter
    Please check the value of the variable sy-binpt, I believe the value of the variable sy-binpt will be set to 'X'  if the program is called from a bath input, hope this helps.

  • How to write select statement before the loop and how to use read statemnt

    Hi,
    Recently our system has changed from 4.6 to ECC6.
    As its migrated its showing lots of errors like in between loop and endloop there should be no select statemnt........
    Can any one please tell how to write that coding in ECC6 , how can i change the code......
    In between loop and endloop i am having lots of select statemnts.....ple tell thye coding how can i select before the loop starts and
    how to read that internal table in loop.

    Hi Deepthi,
    You can do as per below:
    1) Select the required entries from the tables you need (VBAK, VBAP, KNA1, etc)
    SELECT VBELN ERDAT KUNNR
        into table it_vbak
        from VBAK
    where VBELN = S_VBELN. "Selection criteria
    If sy-subrc = 0.
    SELECT VBELN POSNR MATNR
        into table it_vbap
        from VBAP
    for all entries in it_vbak
    where VBELN = it_vbak-vbeln
    SELECT KUNNR NAME1
        into table it_vbak
        from VBAK
    where VBELN = it_vbak-vbeln.
    endif.
    2) Loop at the entries, and read internal table it-kna1 for customer info.
    Loop at it_vbak into wa_vbak.
    read table it_kna1 into wa_kna1 with key kunnr = wa_vbak-kunnr.
    if sy-subrc = 0.
    endif.
    loop at it_vbap into wa_vbap where vbeln = wa_vbak-vbeln.
    endloop.
    endloop.
    This is the basic idea and short example of how to extract entries and read internal table.
    Hope this helps.
    Regards,
    Patrick

  • How to avoid 'select for update'

    Hi,
    we are using the bc4j framework of jdev 3.2.3. We have a View which collects data from several tables in different database schemes, so we naturally have to use the 'union clause'. But if we try to make an update on a row (via 'setAttribute'), we got a DMLException ORA-02014 telling us that we should not use 'select for update' on views whith unions.
    Since i cannot avoid using a union clause, is there a way to avoid the 'select for update' in the bc4j framework?
    Please help, its urgent!
    Thanx,
    Dietmar

    SELECT FOR UPDATE is used for our implementation or row-level locking.
    If you are using pessimistic locking mode, this will occur the first time any attribute is modified.
    If you are using optimistic locking mode, it will be deferred until post/commit time.
    If you are using "none" locking mode, it will not happen in your application may hang indefinitely if another session has locked the row.
    Are you asking how to avoid locking?
    Do you mean to be updating this view with a union over multiple databases?

  • How to avoid select query in loop

    Hi All,
    I have to select entries from table iclpay looping it_dfkkop and delete the entries in it_dfkkop_tmp which are not present in iclpay.
    For this If use below code its working fine, but there is performance issue
        CLEAR: it_iclpay[],it_iclpay.
        LOOP AT it_dfkkop_tmp.
          SELECT claim documentref paycat status FROM iclpay
                    APPENDING CORRESPONDING FIELDS OF TABLE it_iclpay
                            WHERE
                                  active = c_active AND
                                  claim = it_dfkkop_tmp-claim AND
                                  documentref = it_dfkkop_tmp-opbel.
          IF sy-subrc NE 0.
            DELETE it_dfkkop_tmp.
          ENDIF.
        ENDLOOP.
    If I write the code like below its not working
        SELECT claim documentref paycat status FROM iclpay
                INTO TABLE it_iclpay
                        FOR ALL ENTRIES IN it_dfkkop_tmp WHERE
                              active = c_active AND
                              claim = it_dfkkop_tmp-claim AND
                              documentref = it_dfkkop_tmp-opbel.
    Can anyone help on this.

    It did not dump but did not get final(required) output.
    I got the solution now.
    Thanks a lot for responding.
    I have written the below code
    SELECT claim
               documentref
               paycat
               status
               FROM
               iclpay
               APPENDING CORRESPONDING FIELDS OF TABLE it_iclpay
               FOR ALL ENTRIES IN it_dfkkop_tmp WHERE
                                  active = c_active AND
                                  claim = it_dfkkop_tmp-claim AND
                                  documentref = it_dfkkop_tmp-opbel.
        SORT it_dfkkop_tmp BY claim opbel.
        LOOP AT it_dfkkop_tmp.
          READ TABLE it_iclpay INTO  wa_iclpay WITH KEY
                              claim        = it_dfkkop_tmp-claim
                              documentref  = it_dfkkop_tmp-opbel.
          IF sy-subrc NE 0.
            DELETE it_dfkkop_tmp.
          ENDIF.
        ENDLOOP.

  • How to avoid using bapi_commit inside a loop .

    Hi ,
    Need a help.
    This is a program for uploading business partners in CRM.
    The basic logic of the program is as below:
    -         There are two types of records in the upload file – new/ old ones to be updated
    -         A new record is identified by checking if a BP exits based on the cust id
    -         In case it is a new record certain BAPI’s are called to create a new BP, else the address details, identification etc are updated for the existing one.
    -         SQL analysis of the program showed that the maximum amount of time is taken in INSERT/UPDTAE/COMMIT processes.
    When we raised the issue with SAP , they stated that the problem occurs due to the very high no of BAPI_COMMIT calls which is within the loop.
    The standard BAPI available allows passing of one record at a time. Hence passing multiple records at a time and a single commit did not seem feasible.
    Also while updating since there are different BAPI’s for address and identification it is being called in a sequence and commit issued after each. If commit is excluded it gives a locking error since the first BAPI tends to lock the record and does not allow subsequent BAPI call
    kindly suggest me with a solution of using a less commit for updating series of records.
    The code is as follows:
    *& Report  ZBP_BDCP_ACCTRNSDATA_UPLOAD                                 *
    *& Created By : Radhu Shankar.G                                        *
    *& Purpose    : Program to Create Investors with the transaction       *
    *&              data received from the De-dupe Software.               *
    *& Note       : Can be Executed or scheduled only in Background        *
    REPORT  zbp_bdcp_acctrnsdata_upload LINE-SIZE 255 LINE-COUNT 65 NO STANDARD PAGE HEADING
                                                                       MESSAGE-ID zcrm_upload.
    TABLES : bbp_iu01.
    Selection Screen
    SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.
    PARAMETERS: p_file TYPE string LOWER CASE OBLIGATORY.
    SELECTION-SCREEN: END OF BLOCK blk1.
    SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.
    SELECT-OPTIONS:s_email FOR bbp_iu01-email NO INTERVALS.
    SELECTION-SCREEN: END OF BLOCK blk2.
    SELECTION-SCREEN: BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.
    SELECTION-SCREEN COMMENT /1(72) text-004.
    SELECTION-SCREEN COMMENT /1(72) text-006.
    SELECTION-SCREEN COMMENT /1(72) text-007.
    SELECTION-SCREEN COMMENT /1(72) text-005.
    SELECTION-SCREEN: END OF BLOCK blk3.
    Data Declaration
    Main Upload structure and internal table
    DATA : BEGIN OF i_main,
             cust_id        TYPE bu_bpext,              " Customer ID
             inv_type_code  TYPE crmt_mktpfchr_atvalue, " Investor Type Code
             insti_tag      TYPE crmt_mktpfchr_atvalue, " Retail/Instituitional Tag
             name           TYPE char120,               " Name
             address1       TYPE ad_strspp1,                    " Address1
             address2       TYPE ad_strspp2,                    " Address2
             address3       TYPE ad_street,                     " Address3
             city           TYPE ad_city1,              " City
             state          TYPE t005u-bezei,           " Region/State
             country        TYPE landx50,               " Country
             pin_code       TYPE ad_pstcd1,             " Pin Code
             off_phone1     TYPE ad_tlnmbr,             " Office Telephone Number1
             off_phone2     TYPE ad_tlnmbr,             " Office Telephone Number2
             res_phone1     TYPE ad_tlnmbr,             " Residence Telephone Number1
             res_phone2     TYPE ad_tlnmbr,             " Residence Telephone Number1
             mobile         TYPE ad_mbnmbr1,            " Mobile Number
             email          TYPE ad_smtpadr,                    " Email ID
             birth_date     TYPE bu_birthdt,            " Birth Date
             pan_no         TYPE bu_id_number,          " Pan Number
             lob            TYPE crmt_mktpfchr_atvalue, " Line of Business
             fam_tag        TYPE bu_id_number,          " FAM Tag Number
             mod_date       TYPE sy-datum,              " Modified Date
           END OF i_main.
    DATA : it_main      LIKE i_main            OCCURS 0 WITH HEADER LINE.
    Error file structure and internal table
    DATA : BEGIN OF i_error,
             cust_id        TYPE bu_bpext,              " Customer ID
             inv_type_code  TYPE crmt_mktpfchr_atvalue, " Investor Type Code
             insti_tag      TYPE crmt_mktpfchr_atvalue, " Retail/Instituitional Tag
             name           TYPE char120,                     " Name
             address1       TYPE ad_strspp1,                    " Address1
             address2       TYPE ad_strspp2,                    " Address2
             address3       TYPE ad_street,                     " Address3
             city           TYPE ad_city1,              " City
             state          TYPE t005u-bezei,           " Region/State
             country        TYPE landx50,               " Country
             pin_code       TYPE ad_pstcd1,             " Pin Code
             off_phone1     TYPE ad_tlnmbr,             " Office Telephone Number1
             off_phone2     TYPE ad_tlnmbr,             " Office Telephone Number2
             res_phone1     TYPE ad_tlnmbr,             " Residence Telephone Number1
             res_phone2     TYPE ad_tlnmbr,             " Residence Telephone Number1
             mobile         TYPE ad_mbnmbr1,            " Mobile Number
             email          TYPE ad_smtpadr,                    " Email ID
             birth_date     TYPE bu_birthdt,            " Birth Date
             pan_no         TYPE bu_id_number,          " Pan Number
             lob            TYPE crmt_mktpfchr_atvalue, " Line of Business
             fam_tag        TYPE bu_id_number,          " FAM Tag Number
             mod_date       TYPE sy-datum,              " Modified Date
             bp             TYPE bapibus1006_head-bpartner, " BP
             recno(4)       TYPE c,                         " Record No
             message(255)   TYPE c,                         " Error Message
           END OF i_error.
    DATA : it_error         LIKE i_error            OCCURS 0 WITH HEADER LINE.
    BP Telephone, Email & Role Details
    DATA : w_bp_tel        TYPE bapiadtel,
           it_bp_tel       TYPE bapiadtel             OCCURS 0 WITH HEADER LINE,
           it_bp_tel1      TYPE bapiadtel             OCCURS 0 WITH HEADER LINE,
           it_bp_email     TYPE bapiadsmtp            OCCURS 0 WITH HEADER LINE,
           it_bp_email1    TYPE bapiadsmtp            OCCURS 0 WITH HEADER LINE,
           it_bapicomrem   TYPE STANDARD TABLE OF bapicomrem   WITH HEADER LINE,
           it_bapicomrem_x TYPE STANDARD TABLE OF bapicomrex   WITH HEADER LINE,
           it_tel_x        TYPE STANDARD TABLE OF bapiadtelx   WITH HEADER LINE,
           it_email_x      TYPE STANDARD TABLE OF bapiadsmtx   WITH HEADER LINE,
           it_role         TYPE bapibusisb990_bproles OCCURS 0 WITH HEADER LINE,
           it_role_cp      TYPE bapibusisb990_bproles OCCURS 0 WITH HEADER LINE.
    BP Identication Details
    DATA: BEGIN OF it_identification OCCURS 0,
            idcategory TYPE bapibus1006_identification_key-identificationcategory,
            idnumber   TYPE bapibus1006_identification_key-identificationnumber,
          END OF it_identification.
    DATA : w_identification TYPE bapibus1006_identification.
    BP Marketing Attributes
    DATA : BEGIN OF it_crmt OCCURS 0,
            crmt TYPE crmt_mktprof_keys-profile_template_id,
           END   OF it_crmt.
    DATA : it_crmt1  TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,
           it_crmt2  TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,
           it_crmt3  TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,
           it_crmt4  TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,
           it_crmt5  TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,
           it_bp_ret TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.
    BP Basic Details
    DATA : v_partn_cat       TYPE bapibus1006_head-partn_cat,
           w_central         TYPE bapibus1006_central,
           w_central_x       TYPE bapibus1006_central_x,
           w_central_org     TYPE bapibus1006_central_organ,
           w_central_per     TYPE bapibus1006_central_person,
           w_central_group   TYPE bapibus1006_central_group,
           w_centralorg_x    TYPE bapibus1006_central_organ_x,
           w_centralperson_x TYPE bapibus1006_central_person_x,
           w_centralgrp_x    TYPE bapibus1006_central_group_x,
           w_address         TYPE bapibus1006_address,
           w_addr_x          TYPE bapibus1006_address_x,
           v_bp              TYPE bapibus1006_head-bpartner.
    Declaration for Duplication Check
    DATA : w_zacc_address  TYPE zacc_address,
           g_dup_status      TYPE i.
    DATA : it_dup_bp TYPE STANDARD TABLE OF zbuspartner WITH HEADER LINE.
    CONSTANTS: c_pan     TYPE bu_id_type  VALUE 'ZID003',
               c_fam_tag TYPE bu_id_type  VALUE 'ZID011',
               c_cust    TYPE bu_id_type  VALUE 'ZID009'.
    Other Declarations
    DATA : v_inv_type      TYPE crmt_mktpfchr_atvalue, " Investor Type Code
           v_file          TYPE string,
           v_firstname     TYPE bu_nameor1,
           v_filename1(14) TYPE c,
           v_filename2(14) TYPE c,
           v_lines         TYPE int4,
           v_cat           TYPE bu_type,
           recno           TYPE int4,
           loopno          TYPE int4,
           it_iden_ret     TYPE bapiret2 OCCURS 0,
           it_attr_ret     TYPE bapiret2 OCCURS 0,
           it_role_ret     TYPE bapiret2 OCCURS 0,
           wa_iden_ret     TYPE bapiret2,
           wa_attr_ret     TYPE bapiret2,
           it_iden_flag    TYPE c,
           it_attr_flag    TYPE c,
           flag_central    TYPE c,
           flag_addr       TYPE c,
           flag_bp         TYPE c,
           flag_suc        TYPE c,
           flag_exist      TYPE c,
           flag_exit       TYPE c,
           g_bp_msg        TYPE string,
           g_bp_msg1       TYPE string.
    DATA : BEGIN OF i_success,
             rec   TYPE  int4,                      "Record
             name  TYPE  bu_nameor1,                "Name
             bp    TYPE  bapibus1006_head-bpartner, "Business Partner
           END OF i_success,
           it_success     LIKE i_success OCCURS 0 WITH HEADER LINE,
           it_upd_success LIKE i_success OCCURS 0 WITH HEADER LINE.
    Data Declaration for converting spool request to PDF and to trigger mail
    DATA : gd_recsize TYPE i.
    Spool IDs
    TYPES : BEGIN OF t_tbtcp.
            INCLUDE STRUCTURE tbtcp.
    TYPES : END OF t_tbtcp.
    DATA : it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,
           wa_tbtcp TYPE t_tbtcp.
    Job Runtime Parameters
    DATA : gd_eventid                 LIKE tbtcm-eventid,
           gd_eventparm               LIKE tbtcm-eventparm,
           gd_external_program_active LIKE tbtcm-xpgactive,
           gd_jobcount                LIKE tbtcm-jobcount,
           gd_jobname                 LIKE tbtcm-jobname,
           gd_stepcount               LIKE tbtcm-stepcount,
           gd_error                   TYPE sy-subrc,
           gd_reciever                TYPE sy-subrc.
    DATA : w_recsize TYPE i.
    DATA : gd_subject   LIKE sodocchgi1-obj_descr,
           it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,
           it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,
           gd_sender_type     LIKE soextreci1-adr_typ,
           gd_attachment_desc TYPE so_obj_nam,
           gd_attachment_name TYPE so_obj_des.
    Spool to PDF conversions
    DATA : gd_spool_nr LIKE tsp01-rqident,
           gd_destination LIKE rlgrap-filename,
           gd_bytecount LIKE tst01-dsize,
           gd_buffer TYPE string.
    Binary store for PDF
    DATA : BEGIN OF it_pdf_output OCCURS 0.
            INCLUDE STRUCTURE tline.
    DATA : END OF it_pdf_output.
    DATA : v_email1 TYPE somlreci1-receiver,
           v_sender TYPE somlreci1-receiver.
    CONSTANTS: c_no(1)     TYPE c   VALUE ' ',
               c_device(4) TYPE c   VALUE 'LOCL',
               c_delspl    TYPE c   VALUE 'X'.
    DATA : BEGIN OF result OCCURS 0,
             line(100) TYPE c,
           END OF result.
    DATA:i_id_tab TYPE STANDARD  TABLE OF bapibus1006_id_details WITH HEADER LINE.
    eliminting the error for convt page error
    data: g_spl type c value ''.
    eliminting the error for convt page error
    Initialization
    Renaming the target file daily
    CONCATENATE '_' sy-datum '.txt' INTO v_filename1.
    CONCATENATE '_' sy-datum '.TXT' INTO v_filename2.
    START-OF-SELECTION
    START-OF-SELECTION.
      SELECT COUNT(*) FROM zbp_tax_status.
      IF sy-subrc <> 0.
        SKIP 2.
        WRITE:/ text-011.
        STOP.
      ENDIF.
      REFRESH : it_main.
    Uploading the file from either presentatinon layer or application server
      PERFORM file_upload.
    Creating the BP number and assigning & adding up other attributes
      LOOP AT it_main.
        PERFORM data_fill.                       " Filling up global structures & variables
       IF v_bp IS INITIAL.
         PERFORM duplication_check.             " Duplication check
       ENDIF.
        PERFORM bp_creation.                     " BP Creation
        PERFORM return_fill.                     " Filling up Return Tables
        CLEAR : v_bp, it_main, flag_exit, g_dup_status, it_identification, it_crmt, it_crmt1, it_crmt2, it_crmt3, it_crmt4, it_crmt5,
                w_bp_tel,it_bp_tel,it_bp_tel1,it_bp_email,it_bp_email1,it_tel_x,it_email_x,w_addr_x,w_centralorg_x,w_centralperson_x,
                w_centralgrp_x,flag_addr,flag_central,it_iden_flag,it_attr_flag,it_bapicomrem,w_central,w_central_x, v_inv_type,it_bapicomrem_x,
                w_central_org,w_central_per,w_central_group,flag_bp,flag_suc,flag_exist,it_bp_ret,g_bp_msg,g_bp_msg1,v_cat,wa_attr_ret.
        REFRESH :it_identification, it_crmt, it_crmt1, it_crmt2, it_crmt3, it_crmt4, it_crmt5,it_bapicomrem,
                 it_bp_tel,it_bp_tel1,it_bp_email,it_bp_email1,it_tel_x,it_email_x,it_bp_ret,it_bapicomrem_x.
      ENDLOOP.
    Downloading the file to be reprocessed to the application server
      IF it_error[] IS NOT INITIAL.
        PERFORM error_file_download.
      ENDIF.
    Constructing the Return Messages for the Job
      PERFORM return_messages.                  " Return Message Construction
    Converting the return messages into PDF file and trigerring a mail notification
      IF sy-batch EQ 'X'.
        PERFORM get_job_details.
        PERFORM obtain_spool_id.
        PERFORM convert_spool_to_pdf.
        PERFORM process_email.
        PERFORM trigger_email.
      ENDIF.
    *&      Form  file_upload
    FORM file_upload .
    Data declatration
      DATA: l_filestr  TYPE string.
      CLASS cl_abap_char_utilities DEFINITION LOAD.
      CONSTANTS: con_tab  TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.
      REPLACE '.txt' WITH v_filename1 INTO p_file .
      REPLACE '.TXT' WITH v_filename2 INTO p_file .
      MOVE p_file TO v_file.
      IF sy-batch EQ 'X'.
    Uploading the file from application server if the job is scheduled in background
        OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING DEFAULT
    eliminting the error for convt page error
                                  IGNORING CONVERSION ERRORS REPLACEMENT CHARACTER g_spl.
    eliminting the error for convt page error
        IF sy-subrc = 0.
          DO.
            READ DATASET p_file INTO l_filestr.
            IF sy-subrc <> 0.
              EXIT.
            ELSE.
              CLEAR it_main.
              SPLIT l_filestr  AT con_tab INTO:
                it_main-cust_id        it_main-inv_type_code
                it_main-insti_tag      it_main-name
                it_main-address1       it_main-address2
                it_main-address3       it_main-city
                it_main-state          it_main-country
                it_main-pin_code       it_main-off_phone1
                it_main-off_phone2     it_main-res_phone1
                it_main-res_phone2     it_main-mobile
                it_main-email          it_main-birth_date
                it_main-pan_no         it_main-lob
                it_main-fam_tag        it_main-mod_date.
              APPEND it_main.
            ENDIF.
          ENDDO.
        ELSE.
          WRITE : / 'The file',
                     p_file,
                     'is not found.'.
          STOP.
        ENDIF.
        CLOSE DATASET p_file.
      ELSE.
        WRITE : / 'The Program can only be executed in the background.'.
        STOP.
      ENDIF.
      CLEAR : l_filestr, it_main.
    ENDFORM.                    " file_upload
    *&      Form  data_fill
    FORM data_fill .
    Filling up Partner Category (v_Partn_cat) ,workarea (w_central), workarea (w_central_org) & workarea (w_central_per)
      SELECT SINGLE bp_category tax_status FROM zbp_tax_status
                        INTO (v_partn_cat,v_inv_type)
                        WHERE inv_code EQ it_main-inv_type_code.
    Filling up the Authorization Group
      IF it_main-lob EQ 'M' AND it_main-insti_tag EQ 'N'.
        w_central-authorizationgroup = 'ZMFR'.
      ELSEIF it_main-lob EQ 'M' AND it_main-insti_tag EQ 'Y'.
        w_central-authorizationgroup = 'ZMFI'.
      ELSEIF it_main-lob EQ 'P' AND it_main-insti_tag EQ 'N'.
        w_central-authorizationgroup = 'ZPMR'.
      ELSEIF it_main-lob EQ 'P' AND it_main-insti_tag EQ 'Y'.
        w_central-authorizationgroup = 'ZPMI'.
      ELSEIF it_main-lob EQ 'A' AND it_main-insti_tag EQ 'N'.
        w_central-authorizationgroup = 'ZBOR'.
      ELSEIF it_main-lob EQ 'A' AND it_main-insti_tag EQ 'Y'.
        w_central-authorizationgroup = 'ZBOI'.
      ENDIF.
    Filling up workarea (w_address)
      IF it_main-address1 IS NOT INITIAL.
        MOVE : it_main-address1 TO w_address-str_suppl1,
               it_main-address1 TO w_zacc_address-address1,
               'X'              TO w_addr_x-str_suppl1 .
      ENDIF.
      IF it_main-address2 IS NOT INITIAL.
        MOVE : it_main-address2 TO w_address-str_suppl2,
               it_main-address2 TO w_zacc_address-address2,
               'X'              TO w_addr_x-str_suppl2 .
      ENDIF.
      IF it_main-address3 IS NOT INITIAL.
        MOVE : it_main-address3 TO w_address-street,
               it_main-address3 TO w_zacc_address-address3,
              'X'               TO w_addr_x-street.
      ENDIF.
      IF it_main-city  IS NOT INITIAL.
        MOVE :   it_main-city     TO w_address-city,
                 it_main-city     TO w_zacc_address-city,
                 'X'              TO w_addr_x-city.
      ENDIF.
      IF it_main-pin_code  IS NOT INITIAL.
        MOVE :   it_main-pin_code TO w_address-postl_cod1,
                'X'               TO w_addr_x-postl_cod1.
        TRANSLATE w_address-postl_cod1 TO UPPER CASE.
      ENDIF.
      IF it_main-country IS NOT INITIAL.
        MOVE : 'X' TO w_addr_x-country.
      ENDIF.
      IF it_main-state IS NOT INITIAL.
        MOVE: 'X'  TO w_addr_x-region.
      ENDIF.
    Picking up Country & State Codes
      SELECT SINGLE land1 FROM t005t INTO w_address-country
           WHERE spras   EQ 'E'
             AND landx50 EQ it_main-country.
      IF sy-subrc EQ 0.
        SELECT SINGLE bland FROM t005u INTO w_address-region
             WHERE spras EQ 'E'
               AND land1 EQ w_address-country
               AND bezei EQ it_main-state.
        IF sy-subrc NE 0.
          w_address-region = 'ZZ'.
        ENDIF.
      ELSE.
        w_address-country = 'ZZ'.
        SELECT SINGLE bland FROM t005u INTO w_address-region
             WHERE spras EQ 'E'
               AND land1 EQ w_address-country
               AND bezei EQ it_main-state.
        IF sy-subrc NE 0.
          w_address-region = 'ZZ'.
        ENDIF.
      ENDIF.
      w_zacc_address-country = w_address-country.
      w_zacc_address-state   = w_address-region.
    Filling up the BP Role Detail
      it_role-partnerrole = 'Z1INVS'.
      APPEND it_role.
    Finding out the BP number from the client ID
      IF it_main-cust_id IS NOT INITIAL.
        SELECT SINGLE partner FROM but0id INTO  v_bp
                      WHERE type     EQ 'ZID009'
                        AND idnumber EQ it_main-cust_id.
        IF sy-subrc = 0.
          SELECT SINGLE type FROM but000 INTO v_cat
                              WHERE partner = v_bp.
          PERFORM name_processing USING v_cat.
        ENDIF.
      ENDIF.
      IF v_bp IS INITIAL.
        PERFORM name_processing USING v_partn_cat.    " Processing the Name & Title depending on partner category
    Filling up the Identication Number Details
        IF it_main-cust_id IS NOT INITIAL.        " Customer ID
          it_identification-idcategory = 'ZID009'.
          it_identification-idnumber   = it_main-cust_id.
          APPEND it_identification.
          CLEAR  it_identification.
        ENDIF.
        IF it_main-pan_no IS NOT INITIAL.        " Pan Number
          it_identification-idcategory = 'ZID003'.
          it_identification-idnumber   = it_main-pan_no.
          APPEND it_identification.
          CLEAR  it_identification.
        ENDIF.
        IF it_main-fam_tag IS NOT INITIAL.        " Family Tag Number
          it_identification-idcategory = 'ZID011'.
          it_identification-idnumber   = it_main-fam_tag.
          APPEND it_identification.
          CLEAR  it_identification.
        ENDIF.
    Filling up the Marketing Attributes
       IF v_inv_type IS NOT INITIAL.                 " Tax status
         it_crmt1-atname = 'TAX_STATUS'.
         it_crmt1-atwrt  =  v_inv_type.
         APPEND it_crmt1.
         CLEAR : it_crmt1.
       ENDIF.
       IF it_main-lob IS NOT INITIAL.                " Product Tag
         it_crmt1-atname   = 'LOB'.
         IF it_main-lob EQ 'M'.
           it_crmt1-atwrt  = 'MF'.
         ELSEIF it_main-lob EQ 'P'.
           it_crmt1-atwrt  = 'PMS'.
         ELSEIF it_main-lob EQ 'A'.
           it_crmt1-atwrt  = 'BOTH'.
         ENDIF.
         APPEND it_crmt1.
         CLEAR : it_crmt1.
       ENDIF.
       IF it_main-insti_tag IS NOT INITIAL.         " Retail/Instituitional Tag
         it_crmt1-atname   = 'ORGANISATION_STRUCTURE'.
         IF it_main-insti_tag EQ 'N'.
           it_crmt1-atwrt  = 'RETAIL'.
         ELSEIF it_main-insti_tag EQ 'Y'.
           it_crmt1-atwrt  = 'INSTITUTIONAL'.
         ELSEIF it_main-insti_tag EQ 'F'.
           it_crmt1-atwrt  = 'INTERNATIONAL'.
         ENDIF.
         APPEND it_crmt1.
         CLEAR : it_crmt1.
       ENDIF.
       it_crmt2-atname = 'VIP'.
       it_crmt2-atwrt  = 'NOT CLASSIFIED'.
       APPEND it_crmt2.
       CLEAR : it_crmt2.
       it_crmt3-atname = 'PRIORITY'.
       it_crmt3-atwrt  = 'NOT CLASSIFIED'.
       APPEND it_crmt3.
       CLEAR : it_crmt3.
       it_crmt4-atname = 'CONTACTBLE'.
       it_crmt4-atwrt  = 'NOT CLASSIFIED'.
       APPEND it_crmt4.
       CLEAR : it_crmt4.
       it_crmt5-atname = 'SOURCE'.
       it_crmt5-atwrt  = 'CAMS'.
       APPEND it_crmt5.
       CLEAR : it_crmt5.
       it_crmt-crmt = 'CENTALISED_CLF_INV'.
       APPEND it_crmt.
       it_crmt-crmt = 'GENERAL_CLF_INV'.
       APPEND it_crmt.
       it_crmt-crmt = 'MF_CLF_INV'.
       APPEND it_crmt.
       it_crmt-crmt = 'PMS_CLF_INV'.
       APPEND it_crmt.
       it_crmt-crmt = 'SOURCE'.
       APPEND it_crmt.
       CLEAR it_crmt-crmt.
      ENDIF.
    For Return Message
      recno = recno + 1.
    ENDFORM.                    " data_fill
    *&      Form  duplication_check
    FORM duplication_check .
      DATA : l_lines TYPE i.
      IF v_firstname IS NOT INITIAL.
        CALL FUNCTION 'ZACC_DUPLICATIONCHECK'
          EXPORTING
            role            = 'Z1INVS'
            firstname       = v_firstname
            pan_no          = it_main-pan_no
            mobile          = it_main-mobile
            email           = it_main-email
            address         = w_zacc_address
            partnercategory = v_partn_cat
          IMPORTING
            status          = g_dup_status
          TABLES
            buspartner      = it_dup_bp.
        DESCRIBE TABLE it_dup_bp LINES l_lines.
        IF l_lines EQ 1.
          IF g_dup_status EQ 1.
            READ TABLE it_dup_bp INDEX 1.
            MOVE it_dup_bp-partner TO v_bp.
          ELSEIF g_dup_status EQ 2.
            flag_exit = 'X'.
          ENDIF.
        ELSEIF l_lines GT 1.
          flag_exit = 'X'.
        ENDIF.
      ENDIF.
      CLEAR : l_lines, v_firstname.
    ENDFORM.                    " duplication_check
    *&      Form  name_processing
    FORM name_processing USING uv_cat TYPE bu_type.
      IF it_main-name IS NOT INITIAL.
      If category is Person
        IF uv_cat EQ 1.
          CALL FUNCTION 'ZGET_NAME_FROM_STRING'
            EXPORTING
              name   = it_main-name
            IMPORTING
              first  = w_central_per-firstname
              middle = w_central_per-middlename
              last   = w_central_per-lastname.
          w_centralperson_x-firstname  = 'X'.
          w_centralperson_x-middlename = 'X'.
          w_centralperson_x-lastname   = 'X'.
          w_centralperson_x-birthdate  = 'X'.
          MOVE : it_main-birth_date TO w_central_per-birthdate,
                 w_central_per-firstname TO v_firstname.
        ELSEIF uv_cat EQ 2.
        If category is organisation
          CALL FUNCTION 'ZGET_NAME_FROM_STRING'
            EXPORTING
              name   = it_main-name
            IMPORTING
              first  = w_central_org-name2
              middle = w_central_org-name1
              last   = w_central_org-name3.
          w_centralorg_x-name1 = 'X'.
          w_centralorg_x-name2 = 'X'.
          w_centralorg_x-name3 = 'X'.
          MOVE w_central_org-name2 TO v_firstname.
        ELSEIF uv_cat EQ 3.
        If category is group
          CALL FUNCTION 'ZGET_NAME_FROM_STRING'
            EXPORTING
              name   = it_main-name
            IMPORTING
              first  = w_central_group-namegroup2
              middle = w_central_group-namegroup1.
          w_centralgrp_x-namegroup1 = 'X'.
          w_centralgrp_x-namegroup2 = 'X'.
          MOVE w_central_group-namegroup2 TO v_firstname.
        ENDIF.
        MOVE : it_main-name+0(8)    TO w_central-searchterm1,
               'X'                  TO w_central_x-searchterm1.
      ENDIF.
    ENDFORM.                    " name_processing
    *&      Form  bp_creation
    FORM bp_creation.
      DATA:l_identification   TYPE bapibus1006_identification_key-identificationnumber.
    BP Creation
      IF v_bp IS INITIAL.
    Filling up the Telephone Details
        MOVE : w_address-country TO w_bp_tel-country.
        IF it_main-off_phone1 IS NOT INITIAL.     " Office Telephone1
          w_bp_tel-r_3_user  = '1'.
          w_bp_tel-telephone = it_main-off_phone1.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'OFFICE PHONE1'.
          APPEND it_bapicomrem.
        ENDIF.
        IF it_main-off_phone2 IS NOT INITIAL.     " Office Telephone2
          w_bp_tel-telephone = it_main-off_phone2.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'OFFICE PHONE2'.
          APPEND it_bapicomrem.
        ENDIF.
        IF it_main-res_phone1 IS NOT INITIAL.     " Residence Telephone1
          w_bp_tel-telephone = it_main-res_phone1.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'RESIDENCE PHONE1'.
          APPEND it_bapicomrem.
        ENDIF.
        IF it_main-res_phone2 IS NOT INITIAL.     " Residence Telephone2
          w_bp_tel-telephone = it_main-res_phone2.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'RESIDENCE PHONE2'.
          APPEND it_bapicomrem.
        ENDIF.
        IF it_main-mobile IS NOT INITIAL.         " Mobile Number
          w_bp_tel-r_3_user  = '3'.
          w_bp_tel-telephone = it_main-mobile.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.
        ENDIF.
    Filling up the E-Mail Details
        IF it_main-email IS NOT INITIAL.                        " E-mail1
          it_bp_email-e_mail = it_main-email.
          APPEND it_bp_email.
          CLEAR it_bp_email.
        ENDIF.
      BAPI for BP creation
        CALL FUNCTION 'BAPI_BUPA_FS_CREATE_FROM_DATA2'
          EXPORTING
            partnercategory         = v_partn_cat
            centraldata             = w_central
            centraldataperson       = w_central_per
            centraldataorganization = w_central_org
            centraldatagroup        = w_central_group
            addressdata             = w_address
          IMPORTING
            businesspartner         = v_bp
          TABLES
            telefondata             = it_bp_tel
            communicationnotes      = it_bapicomrem
            e_maildata              = it_bp_email
            roles                   = it_role
            return                  = it_bp_ret.
        IF v_bp IS NOT INITIAL.
          flag_bp = 'X'.
        ENDIF.
      Commiting the transaction
        PERFORM transaction_commit.
      To add Identification details to BP
        PERFORM add_details.
        CLEAR   : v_partn_cat, w_central, w_central_per, w_central_org, it_bp_tel, it_bp_email, it_role.
        REFRESH : it_bp_tel, it_bp_email, it_role.
      ELSE.
        flag_exist = 'X'.
    If BP exists,address,communication and ID details will be updated
        CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE'
          EXPORTING
            businesspartner           = v_bp
            centraldata               = w_central
            centraldataperson         = w_central_per
            centraldataorganization   = w_central_org
            centraldatagroup          = w_central_group
            centraldata_x             = w_central_x
            centraldataperson_x       = w_centralperson_x
            centraldataorganization_x = w_centralorg_x
            centraldatagroup_x        = w_centralgrp_x
          TABLES
            return                    = it_bp_ret.
        READ TABLE it_bp_ret WITH KEY type = 'E'.
        IF sy-subrc = 0.
          flag_central = 'E'.
          g_bp_msg  = it_bp_ret-message.
          CLEAR:it_bp_ret.
          REFRESH:it_bp_ret.
        ELSE.
          flag_suc = 'X'.
        ENDIF.
        PERFORM transaction_commit.
    To get the existing communication details
        CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL'
          EXPORTING
            businesspartner = v_bp
          TABLES
            bapiadtel       = it_bp_tel1
            bapiadsmtp      = it_bp_email1.
        LOOP AT it_bp_tel1 WHERE r_3_user = '1' OR r_3_user = ' '.
          it_bp_tel-consnumber = it_bp_tel1-consnumber.
          it_tel_x-updateflag     = 'D'.
          APPEND:it_bp_tel,
                 it_tel_x.
          CLEAR: it_bp_tel,
                 it_tel_x.
        ENDLOOP.
        IF it_main-mobile  IS NOT INITIAL .
          LOOP AT it_bp_tel1 WHERE r_3_user = '2' OR r_3_user = '3'.
            it_bp_tel-consnumber = it_bp_tel1-consnumber.
            it_tel_x-updateflag     = 'D'.
            APPEND:it_bp_tel,
                   it_tel_x.
            CLEAR: it_bp_tel,
                   it_tel_x.
          ENDLOOP.
        ENDIF.
    *Updating communication details
        IF it_main-off_phone1 IS NOT INITIAL.     " Office Telephone1
          w_bp_tel-r_3_user  = '1'.
          w_bp_tel-telephone = it_main-off_phone1.
          it_tel_x-telephone     = 'I'.
          it_tel_x-updateflag    = 'I'.
          APPEND:it_tel_x.
          CLEAR: it_tel_x.
          APPEND w_bp_tel TO it_bp_tel.
          CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'OFFICE PHONE1'.
          APPEND it_bapicomrem.
          it_bapicomrem_x-comm_type  = 'I'.
          it_bapicomrem_x-langu      = 'I'.
          it_bapicomrem_x-comm_notes = 'I'.
          it_bapicomrem_x-updateflag = 'I'.
          APPEND it_bapicomrem_x.
        ENDIF.
        IF it_main-off_phone2 IS NOT INITIAL.     " Office Telephone2
          w_bp_tel-telephone = it_main-off_phone2.
          APPEND w_bp_tel TO it_bp_tel.
          it_tel_x-telephone     = 'I'.
          it_tel_x-updateflag    = 'I'.
          APPEND:it_tel_x.
          CLEAR:it_tel_x.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'OFFICE PHONE2'.
          APPEND it_bapicomrem.
          it_bapicomrem_x-comm_type  = 'I'.
          it_bapicomrem_x-langu      = 'I'.
          it_bapicomrem_x-comm_notes = 'I'.
          it_bapicomrem_x-updateflag = 'I'.
          APPEND it_bapicomrem_x.
        ENDIF.
        IF it_main-res_phone1 IS NOT INITIAL.     " Residence Telephone1
          w_bp_tel-telephone = it_main-res_phone1.
          APPEND w_bp_tel TO it_bp_tel.
          it_tel_x-telephone     = 'I'.
          it_tel_x-updateflag    = 'I'.
          APPEND:it_tel_x.
          CLEAR:it_tel_x.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'RESIDECE PHONE1'.
          APPEND it_bapicomrem.
          it_bapicomrem_x-comm_type  = 'I'.
          it_bapicomrem_x-langu      = 'I'.
          it_bapicomrem_x-comm_notes = 'I'.
          it_bapicomrem_x-updateflag = 'I'.
          APPEND it_bapicomrem_x.
        ENDIF.
        IF it_main-res_phone2 IS NOT INITIAL.     " Residence Telephone2
          w_bp_tel-telephone = it_main-res_phone2.
          APPEND w_bp_tel TO it_bp_tel.
          it_tel_x-telephone     = 'I'.
          it_tel_x-updateflag    = 'I'.
          APPEND:it_tel_x.
          CLEAR:it_tel_x.
          CLEAR : w_bp_tel-telephone.
          it_bapicomrem-comm_type  = 'TEL'.
          it_bapicomrem-langu      = 'EN'.
          it_bapicomrem-comm_notes = 'RESIDECE PHONE2'.
          APPEND it_bapicomrem.
          it_bapicomrem_x-comm_type  = 'I'.
          it_bapicomrem_x-langu      = 'I'.
          it_bapicomrem_x-comm_notes = 'I'.
          it_bapicomrem_x-updateflag = 'I'.
          APPEND it_bapicomrem_x.
        ENDIF.
        IF it_main-mobile IS NOT INITIAL.         " Mobile Number
          w_bp_tel-r_3_user  = '3'.
          w_bp_tel-telephone = it_main-mobile.
          APPEND w_bp_tel TO it_bp_tel.
          it_tel_x-telephone     = 'I'.
          it_tel_x-updateflag    = 'I'.
          APPEND:it_tel_x.
          CLEAR:it_tel_x.
          CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.
        ENDIF.
        IF it_main-email IS NOT INITIAL.
          LOOP AT it_bp_email1.
            it_bp_email-consnumber   = it_bp_email1-consnumber.
            it_email_x-updateflag    = 'D'.
            APPEND:it_bp_email,
                   it_email_x.
          ENDLOOP.
          it_bp_email-e_mail    =   it_main-email.
          it_email_x-e_mail     = 'I'.
          it_email_x-updateflag = 'I'.
          APPEND:it_bp_email,
                 it_email_x.
          CLEAR:it_bp_email,
                it_email_x.
        ENDIF.
        REFRESH:it_bp_ret.
    BP Change
        CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE'
          EXPORTING
            businesspartner = v_bp
            addressdata     = w_address
            addressdata_x   = w_addr_x
          TABLES
            bapiadtel       = it_bp_tel
            bapicomrem      = it_bapicomrem
            bapiadtel_x     = it_tel_x
            bapiadsmtp      = it_bp_email
            bapiadsmt_x     = it_email_x
            bapicomre_x     = it_bapicomrem_x
            return          = it_bp_ret.
        READ TABLE it_bp_ret WITH KEY type = 'E'.
        IF sy-subrc = 0.
          flag_addr = 'E'.
          g_bp_msg1 = it_bp_ret-message.
        ELSE.
          flag_suc = 'X'.
        ENDIF.
        PERFORM transaction_commit.
        REFRESH it_bp_ret.
        IF it_main-pan_no IS NOT INITIAL OR it_main-fam_tag IS NOT INITIAL OR it_main-cust_id IS NOT INITIAL.
        Retreiving the existing Identification details
          PERFORM id_get USING v_bp.
        ENDIF.
      PAN number addition
        IF it_main-pan_no IS NOT INITIAL.
          CLEAR l_identification.
          MOVE it_main-pan_no TO l_identification.
          TRANSLATE l_identification TO UPPER CASE.
          READ TABLE i_id_tab WITH KEY identificationtype = c_pan.
          IF sy-subrc = 0.
          To remove existing PAN number
            PERFORM id_remove USING v_bp c_pan i_id_tab-identificationnumber.
            READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.
            IF sy-subrc EQ 0.
              it_iden_flag = 'E'.
            ELSE.
              flag_suc = 'X'.
            Performing transaction commit
              PERFORM transaction_commit.
            ENDIF.
          ENDIF.
          CLEAR:it_iden_ret[],it_iden_ret.
        To add new PAN number
          PERFORM id_add USING v_bp c_pan l_identification.
          READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.
          IF sy-subrc EQ 0.
            it_iden_flag = 'E'.
          ELSE.
            flag_suc = 'X'.
            PERFORM transaction_commit.
          ENDIF.
        ENDIF.
       Customer ID addition
        IF it_main-cust_id IS NOT INITIAL AND (  g_dup_status = 1 ).
          CLEAR l_identification.
          MOVE it_main-cust_id  TO l_identification.
          TRANSLATE l_identification TO UPPER CASE.
          READ TABLE i_id_tab WITH KEY identificationtype = c_cust.
          IF sy-subrc = 0.
          To remove existing Customer ID
            PERFORM id_remove USING v_bp c_cust i_id_tab-identificationnumber.
            READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.
            IF sy-subrc EQ 0.
              it_iden_flag = 'E'.
            ELSE.
          Performing transaction commit
              PERFORM transaction_commit.
            ENDIF.
          ENDIF.
          CLEAR:it_iden_ret[],it_iden_ret.
        To add new Customer ID number
          PERFORM id_add USING v_bp c_cust l_identification.
          READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.
          IF sy-subrc EQ 0.
            it_iden_flag = 'E'.
          ELSE.
            flag_suc ='X'.
            PERFORM transaction_commit.
          ENDIF.
        ENDIF.
      To add marketing attributes
       IF it_main-insti_tag IS NOT INITIAL AND it_main-lob IS NOT INITIAL.
         PERFORM add_makt_attr .
       ELSE.
         it_attr_flag = 'E'.

    Guy&#65292;i don't regard here is anybody wanna read so much code .For more constructive answers, you would distill core question from your program.

  • How to avoid selection/deselection of TreeItem when changing expandedProp?

    Hello,
    i have an application that uses several TreeViews for Assets and Objects.
    These TreeViews are working with Groups and Subgroups, Sub-Subgroups, and so on ...
    My Problem is: Always when i toggle the expandedProperty of any Group, selected or not, it will change the selection in the TreeView.
    If the Group was selected, it will be deselected, if it was not selected, it will be selected, clearing any other selection.
    How can i prevent this?
    I tried eventFiltering and Handling of the mousePressed events without any success.
    Hopefully someone could help me?
    Thanks in Advance!
    Jewe

    Hello Krishnan,
    i tried to switch all object types from "not changeable" to "changeable original", but still get the popup when switching cube loading mode.
    Do you know the particular object type to manage ?
    Hello Vishnu,
    same thing, whatever the option is (switch on / off standard) I have the transport popup.
    Anyway thanks for your try.

  • How to avoid Xfree with ghostscript

    Hi.
    I have to install CUPS as per Wiki Howto.
    But doing 'pacman -S ghostscript' it require XFree86-4.4.x as dep.
    How can I avoid it ?
    Is it really necessary ?
    Under FreeBSD i can do a :
    make WITHOUT_X11=yes install
    and it is was ok (or also I can install the ghostscript-gui-noX11)
    Thanks
    Leo

    Theoretically you could also pacman -Sd ghostscript to install it without any dependencies, then pacman -Qi ghostscript to check what other dependencies are required and install them one by one with pacman -S. There is no guarantee that ghostcript will work at all after this. But it should be possible :-)
    It would be much better to recompile ghoscript without x with abs.

  • CS4 Extended - how to avoid selecting text layers

    I'm working on creating an image with a number of text layers, most of which are in groups that I've hidden while I work. The problem is, I have so many text layers that every time I click to add another line of text, I wind up hitting one of the text layers in my hidden groups instead.
    Typing my text in some out of the way location and dragging it into position is seriously annoying (and I'm running out of out-of-the-way locations). Is there any way I can prevent my text tool from selecting layers in hidden groups?

    Holding down the shift key while clicking the image with
    the type tool should put the text on a new layer.
    MTSTUNER

  • How to avoid attachment with mail code

    Hi ,
    I have written a code for sending e-mail notification .Code is working fine as e-mail is triggered as expected but when mail is recieved an attachment comes along with it named attzurlm.dat. Plz provide pointers how to remove this attachment .
    PFB the code
    public String sendEmail( List<String> recipientList, String subject, String message , String from,String cc,String logoPath,Logger LOGGER) {
    try{
    functionName="sendEmail()";
    //Set the host smtp address
    Properties props = new Properties();
    Utils util=new Utils();
    //Fetching values from lookup
    tcLookupOperationsIntf lookupIntf = Platform.getService(tcLookupOperationsIntf.class);
    String smtpHost=util.getLookUpValueByKey("LookUp.EmailInfo","CG_EMAIL_SERVER",lookupIntf,LOGGER);
    LOGGER.debug(functionName+ " SMTP Host Name :"+smtpHost);
    props.put("mail.smtp.host", smtpHost);
    props.put("mail.smtp.auth", "false");
    // create some properties and get the default Session
    Session session = Session.getDefaultInstance(props, null);
    //session.setDebug(debug);
    // create a message
    Message msg = new MimeMessage(session);
    //Check if cc is required
    if (cc.length() != 0) {
    InternetAddress ccAddress = new InternetAddress(cc);
    msg.setRecipient(RecipientType.CC, ccAddress);
    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);
    InternetAddress[] addressTo = new InternetAddress[recipientList.size()];
    for (int iCountMail = 0; iCountMail < recipientList.size(); iCountMail++)
    addressTo[iCountMail] = new InternetAddress(recipientList.get(iCountMail));
    msg.setRecipients(Message.RecipientType.TO, addressTo);
    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setText(message);
    MimeMultipart multipart = new MimeMultipart("related");
    // first part (the html)
    BodyPart messageBodyPart = new MimeBodyPart();
    String htmlText = "<br>"+ message + "<BR><BR><P align=\"left\">" + "<br><img src=\"cid:image\"><br><br>" + "</P>";
    messageBodyPart.setContent(htmlText, "text/html");
    multipart.addBodyPart(messageBodyPart);
    messageBodyPart = new MimeBodyPart();
    DataSource fds=null;
    try{
    fds= new FileDataSource(logoPath);
    }catch(Exception exe){
    LOGGER.debug("Function:+ sendEmial :logofile path is missing"+logoPath);
    messageBodyPart.setDataHandler(new DataHandler(fds));
    messageBodyPart.setHeader("Content-ID", "<image>");
    multipart.addBodyPart(messageBodyPart);
    // put everything together
    msg.setContent(multipart);
    Transport.send(msg);
    LOGGER.info("Email sent to recipient :"+recipientList);
    }catch(MessagingException msgExc){
    LOGGER.error(functionName+" Error occurred while sending email:"+msgExc);
    msgExc.printStackTrace();
    return "ERROR";
    }catch(Exception exception){
    LOGGER.error(functionName+" Error occurred while sending email:"+exception);
    exception.printStackTrace();
    return "ERROR";
    return "SUCCESS";
    }

    Code Goes as below in curley braces :
    public String sendEmail( List<String> recipientList, String subject, String message , String from,String cc,String logoPath,Logger LOGGER)     {
            try{
                 functionName="sendEmail()";
                 //Set the host smtp address
                 Properties props = new Properties();
                 Utils util=new Utils();
                 tcLookupOperationsIntf lookupIntf = Platform.getService(tcLookupOperationsIntf.class);
                 String smtpHost=util.getLookUpValueByKey("CG.LookUp.EmailInfo","EMAIL_SERVER",lookupIntf,LOGGER);
                 LOGGER.debug(functionName+ " SMTP Host Name :"+smtpHost);
                 props.put("mail.smtp.host", smtpHost);
                 props.put("mail.smtp.auth", "false");
                // create some properties and get the default Session
                Session session = Session.getDefaultInstance(props, null);
                //session.setDebug(debug);
                // create a message
                Message msg = new MimeMessage(session);
                //Check if cc is required
                if (cc.length() != 0) {
                    InternetAddress ccAddress = new InternetAddress(cc);
                    msg.setRecipient(RecipientType.CC, ccAddress);
                // set the from and to address
                InternetAddress addressFrom = new InternetAddress(from);
                msg.setFrom(addressFrom);
                InternetAddress[] addressTo = new InternetAddress[recipientList.size()];
                for (int iCountMail = 0; iCountMail < recipientList.size(); iCountMail++)
                    addressTo[iCountMail] = new InternetAddress(recipientList.get(iCountMail));
                msg.setRecipients(Message.RecipientType.TO, addressTo);
                // Setting the Subject and Content Type
                msg.setSubject(subject);
                msg.setText(message);
                MimeMultipart multipart = new MimeMultipart("related");
             // first part (the html)
                BodyPart messageBodyPart = new MimeBodyPart();
                String htmlText = "<br>"+ message + "<BR><BR><P align=\"left\">" + "<br><img src=\"cid:image\"><br><br>" + "</P>";
                messageBodyPart.setContent(htmlText, "text/html");
                multipart.addBodyPart(messageBodyPart);
                messageBodyPart = new MimeBodyPart();
                DataSource fds=null;
                try{
                    fds= new FileDataSource(logoPath);
                }catch(Exception exe){
                    LOGGER.debug("Function:+ sendEmial :logofile path is missing"+logoPath);
                messageBodyPart.setDataHandler(new DataHandler(fds));
                messageBodyPart.setHeader("Content-ID", "<image>");
                multipart.addBodyPart(messageBodyPart);
                // put everything together
                msg.setContent(multipart);
                Transport.send(msg);
                LOGGER.info("Email sent to recipient :"+recipientList);
            }catch(MessagingException msgExc){
                 LOGGER.error(functionName+" Error occurred while sending email:"+msgExc);
                 msgExc.printStackTrace();
                 return "ERROR";
            }catch(Exception exception){
                LOGGER.error(functionName+" Error occurred while sending email:"+exception);
                 exception.printStackTrace();
                 return "ERROR";
            return "SUCCESS";

  • How to avoid toll with new Map/Navigator application?

    In some case none of the proposed itinerary are toll free ... and I can't find an option for that..
    I've read (just announcements) that Siri should give this option.. but I cannot have it working..
    Thanks

    It sounds as though something may be wrong with where the app is stored or where the PLIST files are stored. Have you moved anything? Normally you get an option to stop displaying the welcome screen. Once you tell the app not to do that anymore, a notation is made in a PLIST file and the behavior stops.
    Jerry

  • How to avoid SYSTEM_NO_TASK_STORAGE  with multiple single values variable

    Hi experts,
    I am trying to do a distribution with reference data standart SAP function.
    Fields to be changed:
    ZPDHIER2 (Economic Group II)
    ZPDHIER3 (Economic Group III)
    ZPDCLIENT (Client)
    Fields for condition:
    KEY FIGURE NAME
    Fields for reference:
    KEY FIGURE NAME
    ZPDSTATUS (Status)
    FISCPER3 (Fiscal Period)
    The parameters group is like:
    Fields for condition:
    Key figure: ZM_070 (one of the key figures)
    Fields for reference:
    Key figure: ZMONT_TN
    FISCPER3: 001
    Status: DE
    - "Only distribute not assigned" is checked
    I do not want the data to be distributed by any ZPDHIER2, ZPDHIER3 and ZPDCLIENT so I have restricted these characteristics in the planning level by some variables. These variables are user exit type and return multiple single values.
    The issue regarding this message is that when I execute this function, depending on the size of the data brought by ZPDCLIENT user exit variable, this dump might or might not occur. As for the testing I've done, i realize that if the number of clients exceed 500, dump will occur.
    This multiple single values variable (or any other solution) must be prepared for 3900 clients, and this number is expected to increase.
    Anyone have faced same problem?
    Hope you can provide me some help regarding this issue.
    Tanks in advance,
    André Oliveira

    Hi Wadih saad,
    I think the memory is not suffcient to hold the load. Check your swap space and memory during the client export and also check whether there is sufficient space in the hard disk to hold the export files.
    You must have calculated the client size by using the test run. This size must be available as free space in hard disk to do the export.
    Make the available space and do the export it will work.
    Regards,
    Maheswaran J

  • Some basic questions how to handle Exceptions with good style

    Ok I have two really basic Exception questions at once:
    1. Until now I always threw all exceptions back all the way to my main method and it always worked well for me but now I am sitting at a big project where this method would explode the programm with throwings of very many exceptions in very many methods. So I would like to know if there is a more elegant solution.
    2. What do I do with exceptions that will never occur?
    Lets say I have a method like this:
    void main() {calculate();}
    void calculate()
    sum(3,5);
    void sum(int a,int b)
    MathematicsA.initialise("SUM"); // throws AlgorithmNotFoundException, will never occur but has to be handled
    }So what is the most elegant way?:
    h4. 1. Ignore because it will not happen
    void sum(int a,int b)
    try {MathematicsA.initialise("SUM");}
    catch(AlgorithmNotFoundException) {}
    }h4. 2. Print stacktrace and exit
    void sum(int a,int b)
    try {MathematicsA.initialise("SUM");}
    catch(AlgorithmNotFoundException e)
    e.printStackTrace();
    System.exit();
    }h4. 3. throw it everywhere
    void main() throws AlgorithmNotFoundException, throws ThousandsOfOtherExceptions  {}
    void calculate()  throws AlgorithmNotFoundException, throws HundretsOfOtherExceptions
    sum(3,5);
    void sum(int a,int b) throws AlgorithmNotFoundException
    MathematicsA.initialise("SUM");
    }h4. 4. Create special exceptions for every stage
    void main() throws MainParametersWrongException
    try {calculate();}
    catch(Exception e)
      throw new MainParametersWrongException();
    void calculate()  throws SumInternalErrorException
    try {sum(3,5);}
    catch (SumInternalErrorException)    {throw new CalculateException();}
    void sum(int a,int b) throws SumInternalErrorException
    try
    MathematicsA.initialise("SUM");
    } catch (AlgorithmNotFoundException e) {
    throw new SumInternalErrorException();
    }P.S.: Another problem for me is when a method called in a constructor causes an Exception. I don't want to do try/catch everytime I instantiate an object..
    Example:
    public class MySummation()
         Mathematics mathematics;
         public MySummation()
                 mathematics.initialise("SUM"); // throws AlgorithmNotFoundException
         void sum(int x,int y)
              return mathematics.doIt(x,y);
    }(sorry for editing all the time, I was not really sure what I really wanted to ask until i realised that I had in fact 2 questions at the same time, and still it is hard to explain what I really want to say with it but now the post is relatively final and I will only add small things)
    Edited by: kirdie on Jul 7, 2008 2:21 AM
    Edited by: kirdie on Jul 7, 2008 2:25 AM
    Edited by: kirdie on Jul 7, 2008 2:33 AM
    Edited by: kirdie on Jul 7, 2008 2:34 AM

    sphinks wrote:
    I`m not a guru, but give my point of view. First of all, the first way is rude. You shouldn`t use try with empty catch. "rude" isn't the word I'd use to describe it. Think about what happens if an exception is thrown. How will you know? Your app fails, and you have NO indication as to why. "stupid" or "suicidal" are better descriptions.
    Then for the second way, I`ll reccomend for you use not printStackTrace(); , but use special method for it:
    public void outputError (Exception e) {
    e.printStackTrace();
    }It`ll be better just because if in future you`d like to output error message instead of stack of print it on GUI, you`ll need change only one method, but not all 'try' 'catch' statements for changing e.printStackTrace(); with the call of new output method.I disagree with this. Far be it from me to argue against the DRY principle, but I wouldn't code it this way.
    I would not recommend exiting from a catch block like that. It's not a strategy for recovery. Just throw the exception.
    Then, the third way also good, but I suppose you should use throws only if the caller method should know that called method have a problem (for example, when you read parametrs from gui, so if params are inccorect, main method of programm should know about it and for example show alert window)."throw it everywhere"? No, throw it until you get to an appropriate handler.
    If you're writing layered applications - and you should be - you want to identify the layer that will handle the exception. For example, if I'm writing a web app with a view layer, a service layer, and a persistence layer, and there's a problem in the persistence tier, I'd let the service layer know what the persistence exception was. The service layer might translate that into some other exception with some business meaning. The view layer would translate the business exception into something that would be actionable by the user.
    And in all other cases I suppose you should use the fourth way. So I suppose it`s better to combine 2,3,4 ways as I have mentioned above.I don't know that I'd recommend special exceptions for every layer. I'd reuse existing classes where I could (e.g., IllegalArgumentException)
    Sorry, I can give you advice how to avoid problem with try-catch in constructor. :-(You shouldn't catch anything that you can't handle. If an exception occurs in a constructor that will compromise the object you're trying to create, by all means just throw the exception. No try/catch needed.
    You sound like you're looking for a single cookie cutter approach. I'd recommend thinking instead.
    %

  • How to avoid data selection inside the loop?

    Hello Experts,
    I am working on one performance item and I have already applied some changes to the original version.
    Now, If I compare my new program with old program, I have good improvement in performance. I am checking if I can do anything on statements that are top on the below list. I think 40% for Modify statement is acceptable after my research (Below run is updating around 20M records which is real time volume for this application).
    As we can see 34% of run time to going for one SELECT query on custom table. Take a look at below high level flow of my program to understand above select query.
    1. Select data from ZABC
    2. Select data from Variant Table (Var1, Var2, Var3 etc.., 12 in real time)
    3. Loop Variant Table
    4. Select data from X, Y, Z table for Var<n>.
    5. Populate final internal table from ZABC, X, Y and Z table
    6. Modify ZTABLE with Final Internal table data
    7. End Loop on Variant Table
    As described in the flow of the program, ZABC table data is common for all the variants and need not to fetch multiple times. Hence I am doing it only once in my program. Below is that select query:
    select rrcty ryear rbukrs racct rcntr sum( amt1) as amt1  "Like I have 32 amount fields in original query
               from zabc
                into table i_zabc
                where ryear in r_year    " Two records in ranges with I and EQ
                and rvers = '001'
                and rrcty in r_rrcty        "Three records in ranges with I and EQ
                and rldnr = 'DT'
                group by rrcty ryear rbukrs racct rcntr
                order by rrcty ryear rbukrs racct rcntr.
    ZABC table is again having huge volume of data and we are fetching millions of records with above query. That is primary reason to take long time. May be that is okay as I am already using Indexes of this table. But, I am not comfortable with it as it can reach max. memory point and through run time error. Fetch Cursor is one reliable option that I can see here, but with that, I should move ZABC selection inside the variant loop which can cause fetching ZABC data 12 times (Let me know If I am missing anything here).
    Now, third statement in my trace results, with 10% of overall time is this:
    loop at i_abc assigning <fs_abc>. 
    loop at i_table assigning <fs_table> where low <= <fs_abc>-racct and high >= <fs_abc>-racct. 
    endloop. 
    endloop. 
    6 million executions with this complex WHERE condition is causing this statement to get 3rd position in trace results. I tried below two options which are, I think, taking even more time - (I am still monitoring these options)
    1) Removed WHERE condition on LOW, HIGH and applied filter inside the loop.
    2) Removed WHERE condition on HIGH only and applied filter inside the loop.
    Any suggestions on how to proceed with ZABC selection and I_TABLE loop.
    Let me know if you have any questions on above compose.

    Since I looked at this case before, let me try some quick suggestions:
    Is table ZABC related to table X, Y and/or Z and can the selection be limited by applying those 12 selection variants?
    If yes, try a join select involving these tables that could make your step 1 obsolete and replace steps 4 and 5.
    This might also get rid of the "loop inside loop" problem. Generally, make sure that the inner table is declared as a sorted table with a key that consists of the fields as used in the WHERE-condition of the inner loop. Use secondary keys for internal tables if your ABAP release permits and the task at hand warrants it.
    Finally, look at PACKAGE SIZE option for the (join) select to reduce memory consumption.
    Thomas

  • How to avoid data repetation when using select statements with innerjoin

    how to avoid data repetation when using select statements with innerjoin.
    thanks in advance,
    satheesh

    you can use a query like this...
      SELECT DISTINCT
             frg~prc_group1                  "Product Group 1
             frg~prc_group2                  "Product Group 2
             frg~prc_group3                  "Product Group 3
             frg~prc_group4                  "Product Group 4
             frg~prc_group5                  "Product Group 5
             prc~product_id                  "Product ID
             txt~short_text                  "Product Description
    UP TO 10 ROWS
    INTO TABLE l_i_data
    FROM
    Joining CRMM_PR_SALESG and
    COMM_PR_FRG_ROD
    crmm_pr_salesg AS frg
    INNER JOIN comm_pr_frg_rod AS prd
    ON frgfrg_guid = prdfragment_guid
    Joining COMM_PRODUCT and
    COMM_PR_FRG_ROD
    INNER JOIN comm_product AS prc
    ON prdproduct_guid = prcproduct_guid
    Joining COMM_PRSHTEXT and
    COMM_PR_FRG_ROD
    INNER JOIN comm_prshtext AS txt
    ON prdproduct_guid = txtproduct_guid
    WHERE frg~prc_group1 IN r_zprc_group1
       AND frg~prc_group2 IN r_zprc_group2
       AND frg~prc_group3 IN r_zprc_group3
       AND frg~prc_group4 IN r_zprc_group4
       AND frg~prc_group5 IN r_zprc_group5.
    reward it it helps
    Edited by: Apan Kumar Motilal on Jun 24, 2008 1:57 PM

Maybe you are looking for

  • Alternative Free Good determination in Sales order

    Dear Gurus, We activated Free Goods determination. We are maintaining condition records in Tcode VBN1. We are creating the condition records using the fields Sales org, Distribution Channel and Sales Office.  Condition record specifies the free good

  • Sleep or Start up?

    Hello. I wanted to ask the question of whether it is better on an everyday basis to put your computer to sleep, or to shut down and start up every morning. I know there are differing views, but what are some of the positives and negatives on both sid

  • Admin Tool Not Opening In Windows 2003 x64

    Hi Everybody , I installed OBIEE 11G on Win 2003 x64 bit OS, Everything went well but the admin tool is not starting . After a search in a forum I comes to know that Admin tool wont support for x64 bit . Can any one suggest me how to start Admin tool

  • HELP VIDEO CAMERA FINAL CUT PRO 6

    Hey there ok since my camcorder does not work with final cut pro 6 i want one that will but i wenty and looked theres tons of cameras that qualify.. can someone tell me the very best video cameras that i could get for over 600 dollars but under 1200$

  • Lightroom have you ever got a picture name pop up on your screen then another pop up telling you to close lightroom down ? help please !

    I've currently been using been lightroom 3.2 64-bit as my raw manager and official marker for quite a fair few years now, so long I've forgot . . I know that lightroom has gone up to 4 and higher but I'm doing fine anyway ... today I needed to mark a