Maintenance View: Loop at screen!

hi,
I created a view maintenance on Ztable.
This table contains 3 fields.
I want to display one of this fields in "Display Mode" when the user Create/change the table in sm30.
There is an event in maintenace view that allow me to do this?
Thank you
Joseph

Hi,
Generate a table maintenance for Z table you created in SE11->Utilities->Table Maintenance Generator.Give appropriate authorisation group while genearting table maintenance.
Once it's get generated.Then click function group->Main program.
Uncomment the PBO Include which appears as commented.Give it suitable name.
Then in the PBO write the following.,
module display.
module display output.
LOOP AT SCREEN.
  if screen-name = 'ZZZtable-FIELDNAME'.
      screen-input = '0'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
endmodule.                
Hope it helps.If so,reward points.Otherwise ,get back.

Similar Messages

  • Maintenance view Events for description in details

    hello i have a maintenance view with 2 screen ( one overview other details ) i want fill a label in the details screen with the description of some code ( custom table with all custom fills )
    but i don't find what event is the right , i try the event 26 , i put a break-point just for check but dont get trigger that event when i display the item in details screen
    Thanks

    thanks i add the form to the event 01 but the breakpoint is not called , i even change the maintenance view i select create modules but don't work , any idea ? maybe i am missing something
    pd: when i create the firts time the form i select create new include

  • How to use table maintenance view in module pool screen

    hi ,
    want to use table maintenance view in a module pool screen so that i can edit, insert, delete and update date in to the ztable.please help.

    You can simply call it via SM30.   Or you can call the table maintence view from any program(report or module pool) using a function module.
      call function 'VIEW_MAINTENANCE_CALL'
           exporting
                action                       = 'U'
                view_name                    = 'Z_Table_Name'
           exceptions
                client_reference             = 1
                foreign_lock                 = 2
                invalid_action               = 3
                no_clientindependent_auth    = 4
                no_database_function         = 5
                no_editor_function           = 6
                no_show_auth                 = 7
                no_tvdir_entry               = 8
                no_upd_auth                  = 9
                only_show_allowed            = 10
                system_failure               = 11
                unknown_field_in_dba_sellist = 12
                view_not_found               = 13
                others                       = 14.
    Regards,
    RIch Heilman

  • For new entries pass input screen values to PBO of maintenance view

    For maintaining Z table using a customized program with selection screen and FM   'VIEW_MAINTENANCE_CALL' is called . Its working fine for selecting existing entries as per selection screen values. In case if there is no entry found as per input values the maintenance screen comes blank with "No entries found that match selection criteria".
    Instead of this want to pass input screen values on maintenance view if no entry is found thru PBO selection screen. The total & extract tables are empty. No suitable event is found. How this can be done.
    Thanks
    pt

    You could try in a first step to read database to check existence :
    CALL FUNCTION 'VIEW_GET_DATA'
      EXPORTING
        view_name   = 'ZXXXX'
      TABLES
        dba_sellist = it_sellist
        data        = data
      EXCEPTIONS
        OTHERS      = 1.
    If data found, call the view maintenance
    CALL FUNCTION 'VIEW_MAINTENANCE_CALL'
      EXPORTING
        action      = 'U'
        view_name   = 'ZXXXX'
      TABLES
        dba_sellist = it_sellist.
    else create one new record providing required value in a work area
      CALL FUNCTION 'VIEW_MAINTENANCE_SINGLE_ENTRY'
        EXPORTING
          action               = 'INS'
          view_name            = 'ZXXXX'
          insert_key_not_fixed = ' ' " if full key provided
          no_transport         = 'X'
        TABLES
          dba_sellist          = it_sellist
        CHANGING
          entry                = wa_zxxxx
        EXCEPTIONS
          OTHERS               = 1.
    Regards,
    Raymond

  • How to assign maintenance view to a selection screen field in a program.

    Hi Experts,
    I have created a custom table. Now, I have a program where there is a selection screen field for example "Load". After entering a value in the selection screen, and press enter, the user must be redirected to the maintenance view of the custom table to modify the specifed record.
    Can anyone help me on how to do that?
    Thanks a lot for ur precious help.
    Regards,
    Aksh

    Hi,
    What is the need to search for a program.
    Use transaction SM30 or SE16 to create or maintain entries in the table.
    e.g. if the Maintenance view is created on table A, then Goto transaction SM30 or SE16 and give the table name as A and proceed. This will automatically take u to the maintenance view on tha table A.
    Regards,
    Himanshu

  • Add field in table maintenance generator screen of maintenance view

    Hi,
    I am having a table with field user-id. I want to generate a maintenance view which will have corresponding user name as input disabled field. Since there are two tables USR21 and ADRP I need to access(not a direct check table) I will have to modify the code generated by the table maintenance generator.
    Problem is that it is having one internal table EXTRACT at table control loop. That internal table cannot be accessed if you write a module inside the table control loop and try to catch. The error coming as EXTRACT is not object of structure and therefore no component. I tried to capture the value of the Loop but could not be successful. Any suggestion please.
    Thanks,
    Atanu

    Hi,
    sample:
          MODULE LISTE_UPDATE_LISTE.
        ENDCHAIN.
    *--->begin of your change
        CHAIN.
          FIELD YTAB1-BILKS .
          FIELD YTAB1-BILKH .
           module check_bewar  ON CHAIN-input. "your checks
        ENDCHAIN.
    *-----> end of your change
      ENDLOOP.
      MODULE LISTE_AFTER_LOOP.
    ->  module check_bewar  is in an includ z123_INCL
    Regards Andreas

  • F4 help for fields in maintenance view resp. generated maintenance screen

    Hello,
    I’m new to ABAP and I have to deal with the following requirement:
    I have a maintenance view V1 what from a maintenance screen was generated automatically by the maintenance screen generator.
    Now I have to add a search help for one field F1 of the maintenance screen. The values for the search help of F1 depend on a specific value of a second field F2 of the maintenance screen. So I need value of F2 as import parameter for f4-help. F1 and F2 come from different tables.
    As I’m new to ABAP I have several questions or thoughts:
    - I’m not able to easily add a search help to F1 because I’m using the maintenance view V1 and that’s why it is not possible to assign the import parameter F2 to the search help – right?
    - In general, its not that easy to add search help to views than tables or structures - why?
    - I’m not able to just modify the generated objects because further automatic generation of the maintenance screen will delete it – right?
    - The generated function module provides user includes to add user specific coding. Is there any chance to add a f4-help to field F1 and assign value of F2 to that search help as import parameter with coding in user include?
    - any other ideas? I did not expect this topic to be so complicated as the requirement to change f4-help in a maintenance view resp. screen isn't very special.
    can anyone help me?
    Thank You!
    Regards
    Fabian

    Hi Fabian,
    Phew! Thats quite a few questions in one... I'll try to answer them to best of my knowledge..
    You can definitely have an external Search Help for a field of a Maintenance View, by calling it directly in the Screen Action Flow, using a PROCESS ON VALUE-REQUEST (like PAI or PBO). While defining such custom code on a generated screen, always make sure you do not write the coding inside the generated includes (SVIM* or <FUGR>TOP, <FUGR>DAT, etc..). Define new includes, or use those which are not generated by View Maintenance. This way, even if the dialogue is regenerated, your custom code will not vanish.
    This will answer your questions 1 and 2 generally, and your question 3 also.
    A Maintenance View, is something where values are read and populated purely at run-time. It does not have an Entry Help or such options, as it depends on the underlying tables. I hope this further helps with questions 1 and 2.
    Coming to your question 4 and 5, which form the main question - pre-filling value of F2 while calling search-help for F1 - yes, it is possible. On the view maintenance screen, there are standard structure variables (like EXTRACT TOTAL etc), which will give you the field values of the current record. But, it can no way assure that when you call the help for F1, the field F2 is already filled!
    For this, I can suggest that you programmatically implement a check to see if F2 value is filled, and read if it is. Or, if it is not filled, maybe you can shoot a Pop-up for F2, take the value at run-time, find help for F1 and get value, and also fill the F2 value (from your implementation) into the currect screen F2 value! (Phew...it is complex...)
    But am sorry, there is no other way, wherein you can gaurentee that F2 value is pre-filled always, when you can help for F1. (You could try making F2 as obligatory on screen, but it still doesnt necessarily solve this purpose..!).
    Hope it helps. Get back to me by e-mail if you need more help, or simple post a reply.
    Regards,
    Rekha

  • Changing overview screen of maintenance view

    Hi expert,
    I have to insert three fields on the screen of maintenance view apart from the table fields. on PBO section of the screen i have put my logic to populate them.
    plz help its urgent....
    sample code will be very helpful

    Hi,
    You can write the code in the SE51, just find the Program name for that one(System -> Status), Then goto SE51 and write the logic, there in the PBO write the logic to fill the fields according to your requirment.
    As per SAP standard, it is not recommended to change the overview screens, becaue, it you generate the table maintanence screen then this code will be disapper and your fields will be deleted ..
    Regards
    Sudheer

  • Using DYNP_VALUES_UPDATE with a Maintenance View

    Hi,
    I am using a maintenance view to insert values into a table. When user creates a new entry, based on the value provided for a field,I need to fill a read-only field. In PAI, when user enters a value for one field, I am using FM 'DYNP_GET_STEPL' to  get the current line and then DYNP_VALUES_UPDATE to fill the contents to the read-only field. But this does not seem to work. Any idea?
    Regards
    Rachana

    Hi Tamas,
    I tried both the options suggested by you.
    I am updating the underlying structure, still its not visible when the screen loads again. But if you see the same field gets filled with DYNP_VALUES_UPDATE if an F4 help is used for teh first(editable) field and then my read-only field is also filled in the PROCESS ON VALUE REQUEST module.
    So my guess is that, since it is a table control, it loops through the rest of the table control which is empty and my underlying structure gets cleared. So the problem could be where I am actually filling the field.
    Is it possible to somehow fill the <EXTRACT> table so that teh value is not lost?
    Regards
    Rachana

  • Maintenance View issues with an ABAP program

    Hi,
    I need to update a Maintenance view(V_JURIC) from a txt file. I created an ABAP module to do this and when I update the tables that compose the view(TABLE_A and TABLE_B), the view is not completely getting updated in the last field. Any suggestions? Here is  sample of the code:
    REPORT zbr_loc_mast_data_1 MESSAGE-ID fb.
    TABLES: j_1btxjurt,
            j_1btxjur.
    DATA wa_j_1btxjurv TYPE j_1btxjurv.
    DATA wa_j_1btxjurt TYPE j_1btxjurt.
    DATA wa_j_1btxjur TYPE j_1btxjur.
    DATA: BEGIN OF i_j_1btxjurt OCCURS 2000.
            INCLUDE STRUCTURE j_1btxjurt.
    DATA: END OF i_j_1btxjurt.
    DATA: i_j_1btxjurv LIKE j_1btxjurv OCCURS 0 WITH HEADER LINE.
    DATA: BEGIN OF rec OCCURS 0,
          tbl_name(10)     TYPE c,        " Table name(Constant 'J_1BTXJURV')
          field_2(1)       TYPE c,        " Constant "X"
          jur_code(10)     TYPE c,        " Jurisdiction code
          municip(60)      TYPE c,        " Municipality Name
    END OF rec.
    DATA: w_num_recs TYPE i.
    SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
    PARAMETERS: in_file TYPE localfile OBLIGATORY
                DEFAULT 'C:\lista de municipios.txt'.
    SELECTION-SCREEN END OF BLOCK block1.
    START-OF-SELECTION.
      PERFORM read_file.
      IF sy-subrc = 0.
        PERFORM update_table.
      ENDIF.
    END-OF-SELECTION.
    *Summary
        WRITE: / 'Number of records read: ' COLOR COL_TOTAL INVERSE OFF INTENSIFIED ON,
             32 w_num_recs COLOR COL_POSITIVE INVERSE OFF
                INTENSIFIED ON.
    *       Form  read_file
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM read_file.
      DATA: l_filename TYPE string.
      MOVE in_file TO l_filename.
      CALL METHOD cl_gui_frontend_services=>gui_upload
        EXPORTING
          filename                = l_filename
          filetype                = 'DAT'
    *      HAS_FIELD_SEPARATOR     = SPACE
    *      HEADER_LENGTH           = 0
    *      READ_BY_LINE            = 'X'
    *      DAT_MODE                = SPACE
    *      CODEPAGE                = SPACE
    *      IGNORE_CERR             = ABAP_TRUE
    *      REPLACEMENT             = '#'
    *      VIRUS_SCAN_PROFILE      =
    *    IMPORTING
    *      FILELENGTH              =
    *      HEADER                  =
        CHANGING
          data_tab                = rec[]
        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
          not_supported_by_gui    = 17
          error_no_gui            = 18
          OTHERS                  = 19.
      IF sy-subrc <> 0.
        MESSAGE e039 WITH in_file.
      ENDIF.
    ENDFORM.                    " read_file
    *       Form  update_table
    *       text
    *  -->  p1        text
    *  <--  p2        text
    FORM update_table.
      CLEAR: w_num_recs,
             w_num_recs_btable,
             w_num_recs_atable,
             w_num_recs_inserted.
        LOOP AT rec.
        w_num_recs = w_num_recs + 1.
        MOVE 'BR'          TO wa_j_1btxjur-country.
        MOVE rec-jur_code  TO wa_j_1btxjur-taxjurcode.
        MOVE 'PT'          TO wa_j_1btxjurt-spras.
        MOVE 'BR'          TO wa_j_1btxjurt-country.
        MOVE rec-jur_code  TO wa_j_1btxjurt-taxjurcode.
        MOVE rec-municip   TO wa_j_1btxjurt-text.
        INSERT into j_1btxjurt values wa_j_1btxjurt.
        IF sy-subrc = 0.
          COMMIT WORK.
        ENDIF.
        INSERT into j_1btxjur values wa_j_1btxjur.
        IF sy-subrc = 0.
          COMMIT WORK.
        ENDIF.
      ENDLOOP.
      ENDFORM.                    " update_table
    Edited by: Thomas Zloch on Nov 5, 2010 9:24 AM - please use code tags

    MOVE 'PT'          TO wa_j_1btxjurt-spras.
    maybe change that to:
    MOVE 'P'          TO wa_j_1btxjurt-spras.

  • Data validation in maintenance view

    I have a maintenance view which is just simply a projection of a database table.
    I'm trying to add a validation before user save the data, what I have done is add a standard event by using 'Table Maintenance Generator', there is an event 'Before saving the data in the database' which I think is proper place to do the validation.
    Now the problem is if the user input is invalid, after validation and message displayed on the screen, the entry user is editing will be locked, and cannot be back to editable even you click 'Change<->Display' button, user have to back to SM30 screen and re-enter again.
    The idea behavior is the screen stays and the entry is editable, user can correct his input immediately.
    So someone can provide any advice regard this problem?
    Thanks in advance.
    Ben

    Hi
    You can set the flag VIM_ABORT_SAVING in order to abort the saving process and back to maintenance screen without to go out from SM30
    I've found a my old code:
    * Check entries with same sorting key
       loop at t_sort_key_count.
         check t_sort_key_count-tot > 1.
         message i398(00) with <...............>
         vim_abort_saving = 'X'.
         exit.
       endloop.
    I use e message tyoe I instead of E, in order not to lock the process and back to imain screen
    Max

  • QUESTION on MAINTENANCE VIEW

    Hi gurus,
    I am not familiar with MAINTENANCE VIEW TABLE, can someone please tell me on how to create it and how can I use it for query or select.
    I hope someone can help me.
    Thanks in advance.

    hello gurus,
    im new to this community please help me out from this please explain what are different conditions are there for install and replace in this code pzzzzzzzzz its really urgent evening is my delivery
    THIS IS MIS SHOWS A LEAD TIME FOR DEVICES PERTAINING TO A SELECTION*
    CRITERIA FROM THE TIME OF ISSUE OF METER FROM THE DEPOT FOR NEW   *
    INSTALLATION / REPLACEMENT CONNECTION TO THE FIRST BILL          *
    Designer           : K SRIKANTH                                 *
    Programmer            : K SRIKANTH                                 *
    Programming Date      : 29/12/2004
    Change Tracking No     : D90K                                    *
    Program Title          : LEAD TIME REPORT FROM DEVICE * *
                        INSTALLATION/REPLACEMENT TO FIRST BILL *
    MODIFICATIONS                                                     *
    DATE       | BY      | DESCRIPTION       | Chg Trck No             *
    dd.mm.yy   | xxxxx   |                   |                         *
               |         |                   |                         *
               |         |                   |                         *
    ASSUMPTIONS:
    THE VALUES FROM THE TABLE V_EABL ARE SELECTED ONLY FOR METER       *
    READING REASON '01','02','03' & '22' FOR THE FIELD ABLESGR.
    THE VALUES FROM THE TABLE ETDZ ARE SELECTED ONLY FOR REGISTER
    CODE '01' FOR THE FIELD ZWKENN .
    THE NUMBER OF RECORDS FETCHED FROM TABLE EGERH, WHILE RUNNING IN   *
    FOREGROUND, DEPENDS UPON THE SELECTION CRITERIA. WHILE RUNNING IN  *
    BACKGROUND THIS CONDITION IS NOT APPLICABLE.                        *
    REPORT ZRDMD01A MESSAGE-ID ZS LINE-SIZE 150 .
    TYPE-POOLS : SLIS .
    TABLE DECLARATION*********************
    TABLES :
    IFLOT ,
    TE401 ,  "   Transactions reasons
    EGERH ,          " Historical Data of ISU Device Master Record
    EQUI ,           " Equipment master data
    EASTL,          " Billing data: Installation Structure at Device Level
    EANL ,          " Installation
    EVBS ,          " Premise
    EADRREGAREAA,   " Role-Spec. Allocation: Reg. Str. Area to Reg. StrGroup
    EHAUISU ,       " Connect. Obj.
    ILOA  ,          "  PM Object Location and Account Assignment
    EABLG ,         " MR Reasons in MR Document
    EABL  ,          "  MR Document
    EVER ,           " IS-U Cont.
    ERCH ,           "  Billing Doc. Data
    ERCHC    ,      "  Invoicing/Reversal History: ERCH
    ETYP ,
    ETDZ,
    EASTS ,
    V_EABL ,
    EADRREGAREAT .
    ***INTERNAL TABLE DECLARATION*****
    DATA : BEGIN OF ITCOM OCCURS 100,
             STATUS(50) TYPE C ,
            REGIOAREA LIKE EADRREGAREAA-REGIOAREA,
            DESCRIPT LIKE EADRREGAREAT-DESCRIPT ,
            V0_15 TYPE I,
            V16_30 TYPE I,
            V31_45 TYPE I,
            V46_60 TYPE I,
            V61_75 TYPE I,
            V76_90 TYPE I,
            V90 TYPE I,
            VNTAV TYPE I,
            TOTAL TYPE I ,
           REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP ,
          END OF ITCOM .
    DATA : ITFLD TYPE SLIS_T_FIELDCAT_ALV ,
           SFLD TYPE  SLIS_FIELDCAT_ALV ,
           ITH  TYPE  SLIS_T_FIELDCAT_ALV ,
           STH  TYPE  SLIS_FIELDCAT_ALV ,
           SIT  TYPE  SLIS_FIELDCAT_ALV,
           ITA  TYPE  SLIS_T_FIELDCAT_ALV ,
           IEVENTS TYPE SLIS_T_EVENT ,
           ALV_T_EVENT TYPE SLIS_T_EVENT WITH HEADER LINE,
           ITEVENTS TYPE SLIS_ALV_EVENT ,
             EVENTS TYPE SLIS_T_EVENT ,
            EVNTS  TYPE SLIS_ALV_EVENT ,
            EVNTS1  TYPE SLIS_ALV_EVENT ,
            EVNTS2  TYPE SLIS_ALV_EVENT ,
            EVNTS3  TYPE SLIS_ALV_EVENT ,
            EVENTS_SUMM TYPE SLIS_T_EVENT ,
            EVENTS_DETAIL TYPE SLIS_T_EVENT ,
            EVENTS_SPL TYPE SLIS_T_EVENT .
    DATA : ITHD TYPE SLIS_T_LISTHEADER ,
            HD TYPE SLIS_LISTHEADER ,
           ITD TYPE SLIS_T_LISTHEADER ,
            TD  TYPE SLIS_LISTHEADER .
    DATA : BEGIN OF ITFIN OCCURS 0,
        EQUNR   LIKE EGERH-EQUNR ,   " EQUIPMENT NUMBER
        ANLAGE  LIKE EASTL-ANLAGE  , "INSTLLATION NUMBER
        VSTELLE LIKE EANL-VSTELLE,   "PREMISE
        LOGIKNR LIKE EGERH-LOGIKNR,  "LOGICAL DEVICE NUMBER
        SERNR   LIKE EQUI-SERNR,     "DEVICE NUMBER
        VKONTO  LIKE EVER-VKONTO,    "CONTRACT NUMBER
        REGIOAREA LIKE EADRREGAREAA-REGIOAREA,
        REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP,
        LTPU(8)  TYPE C ,   "LEAD FROM PREMISE T UI
        LTUB(8)  TYPE C,    "LEAD FROM UTILITY INS TO BILLING INS
        LTBM(8)  TYPE C,    "LEAD FROM BI TO MR ORDER
        LTMA(8)  TYPE C,    "LEAD MR ORDER TO ACTUAL MR
        LTAB(8)  TYPE C,    "LEAD FROM ACTUAL MR TO SCHEDULE BILL ORDER
        LTBA(8)  TYPE C,    "LEAD TIME FROM SCHED BILL ORDER TO ACTUAL BILL
        SUM(8)  TYPE C ,    "TOTAL LEAD FROM UI TO ACTUAL BILL
        SERIAL  TYPE I ,
        BIS  LIKE  EGERH-BIS ,
           AB   LIKE  EGERH-AB,
           ZWGRUPPE LIKE EGERH-ZWGRUPPE ,
           EINBDAT LIKE EGERH-EINBDAT,
           AUSBDAT  LIKE EGERH-AUSBDAT,
           GERWECHS LIKE EGERH-GERWECHS,
           DEVLOC   LIKE EGERH-DEVLOC,
           SPARTE LIKE  EQUI-SPARTE,
            ANLART LIKE EANL-ANLART,
            HAUS  LIKE EVBS-HAUS,
            VBSART LIKE EVBS-VBSART,
            ABLBELNR LIKE EABLG-ABLBELNR,
           ABLESGR LIKE EABLG-ABLESGR ,
           ADAT LIKE V_EABL-ADAT ,
          VERTRAG LIKE EVER-VERTRAG,
              DESCRIPT(20) TYPE C, " LIKE EADRREGAREAT-DESCRIPT ,
             STATUS(40) TYPE C ,
         END OF ITFIN .
    DATA : ITAAA LIKE ITFIN OCCURS 100 WITH HEADER LINE ,
           ITBBB LIKE ITFIN OCCURS 100 WITH HEADER LINE .
    DATA : BEGIN OF ITTE4 OCCURS 100,
          GERWECHS LIKE TE401-GERWECHS,
          EAWKENNZE LIKE TE401-EAWKENNZE,
          EAWKENNZA LIKE TE401-EAWKENNZA,
          EAWKENNZW LIKE TE401-EAWKENNZW,
          GERWETXT  LIKE TE401T-GERWETXT ,
          END OF ITTE4 .
    DATA : BEGIN OF ITEAS OCCURS 100,
           ANLAGE LIKE EASTL-ANLAGE,
           LOGIKNR LIKE EASTL-LOGIKNR,
          BIS LIKE EASTL-BIS,
          AB LIKE EASTL-AB,
           ERDAT LIKE EASTL-ERDAT,
            END OF ITEAS .
    DATA : BEGIN OF ITDES OCCURS 0 ,
           LANGU LIKE EADRREGAREAT-LANGU,
           ROLE   LIKE EADRREGAREAT-ROLE ,
          REGIOAREA LIKE EADRREGAREAA-REGIOAREA ,
          DESCRIPT(20) type c ," LIKE EADRREGAREAT-DESCRIPT ,
          END OF ITDES .
    DATA : BEGIN OF ITMX1 OCCURS 0 ,
           EQUNR LIKE EGERH-EQUNR,
           BIS  LIKE  EGERH-BIS ,
           AB   LIKE  EGERH-AB,
           LOGIKNR LIKE EGERH-LOGIKNR,
           ZWGRUPPE LIKE EGERH-ZWGRUPPE ,
           EINBDAT LIKE EGERH-EINBDAT,
           AUSBDAT  LIKE EGERH-AUSBDAT,
           GERWECHS LIKE EGERH-GERWECHS,
           DEVLOC   LIKE EGERH-DEVLOC,
           MATNR LIKE EQUI-MATNR,
           SERNR LIKE EQUI-SERNR,
           SPARTE LIKE EQUI-SPARTE,
            ANLAGE LIKE EASTL-ANLAGE,
            ERDAT_EAS LIKE EASTL-ERDAT, "ERDAT_EAS
            VSTELLE LIKE EANL-VSTELLE,
            ANLART LIKE EANL-ANLART,
            ERDAT_EAN LIKE EANL-ERDAT, "ERDAT_EAN
             HAUS  LIKE EVBS-HAUS,
             VBSART LIKE EVBS-VBSART,
             ERDAT_EVB LIKE EVBS-ERDAT,  "ERDAT_EVB
            REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP,
             REGIOAREA LIKE EADRREGAREAA-REGIOAREA ,
             DESCRIPT(20) type c ,
              ABLBELNR LIKE V_EABL-ABLBELNR ,
            ABLESGR LIKE V_EABL-ABLESGR ,
            ADAT LIKE V_EABL-ADAT ,
            ADATSOLL LIKE V_EABL-ADATSOLL ,
            VERTRAG LIKE EVER-VERTRAG,
           VKONTO LIKE  EVER-VKONTO,
            BELNR LIKE ERCH-BELNR,
          VKONT LIKE ERCH-VKONT,
          BEGABRPE LIKE ERCH-BEGABRPE,
          ENDABRPE LIKE ERCH-ENDABRPE,
          ABRDATS LIKE ERCH-ABRDATS,
          BUDAT LIKE ERCHC-BUDAT,
           LFDNR LIKE ERCHC-LFDNR,
          END OF ITMX1 .
    DATA : BEGIN OF ITMX2 OCCURS 0,
           EQUNR LIKE EGERH-EQUNR,
           BIS  LIKE  EGERH-BIS ,
           AB   LIKE  EGERH-AB,
          LOGIKNR LIKE EGERH-LOGIKNR,
           ZWGRUPPE LIKE EGERH-ZWGRUPPE ,
           EINBDAT LIKE EGERH-EINBDAT,
           AUSBDAT  LIKE EGERH-AUSBDAT,
           GERWECHS LIKE EGERH-GERWECHS,
           DEVLOC   LIKE EGERH-DEVLOC,
           MATNR LIKE EQUI-MATNR,
           SERNR LIKE EQUI-SERNR,
           SPARTE LIKE EQUI-SPARTE,
            ANLAGE LIKE EASTL-ANLAGE,
            LOGIKNR LIKE EGERH-LOGIKNR,
            ERDAT LIKE EASTL-ERDAT, "ERDAT_EAS
            END OF ITMX2 .
    DATA : BEGIN OF ITMX4 OCCURS 0 ,
            ANLAGE  LIKE EANL-ANLAGE ,
            VSTELLE LIKE EANL-VSTELLE,
             HAUS  LIKE EVBS-HAUS,
             VBSART LIKE EVBS-VBSART,
             ERDAT LIKE EVBS-ERDAT,  "ERDAT_EVB
            REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP,
             REGIOAREA LIKE EADRREGAREAA-REGIOAREA ,
              DESCRIPT(20) type c ,
           ANLART LIKE EANL-ANLART,
             END OF ITMX4 .
    DATA : BEGIN OF ITEVE OCCURS 0 ,
            ANLAGE LIKE EVER-ANLAGE ,
             VKONTO LIKE  EVER-VKONTO,
            VERTRAG LIKE EVER-VERTRAG,
           SPARTE LIKE EVER-SPARTE ,
           END OF ITEVE .
    DATA : BEGIN OF ITMX3 OCCURS 0 ,
             EQUNR  LIKE V_EABL-EQUNR ,
            ABLBELNR LIKE V_EABL-ABLBELNR ,
            ABLESGR LIKE V_EABL-ABLESGR ,
            ADAT LIKE V_EABL-ADAT ,
            ADATSOLL LIKE V_EABL-ADATSOLL ,
             ANLAGE LIKE EVER-ANLAGE ,
             VKONTO LIKE  EVER-VKONTO,
            VERTRAG LIKE EVER-VERTRAG,
           SPARTE LIKE EVER-SPARTE ,
         VKONT LIKE ERCH-VKONT,
          BEGABRPE LIKE ERCH-BEGABRPE,
          ENDABRPE LIKE ERCH-ENDABRPE,
          ABRDATS LIKE ERCH-ABRDATS,
            BELNR LIKE ERCH-BELNR,
          LFDNR LIKE ERCHC-LFDNR,
           BUDAT LIKE ERCHC-BUDAT,
          SWERK LIKE ILOA-SWERK ,
            END OF ITMX3.
    data : BEGIN OF ITERC OCCURS 0 ,
          BEGABRPE LIKE ERCH-BEGABRPE,
          ENDABRPE LIKE ERCH-ENDABRPE,
          ABRDATS LIKE ERCH-ABRDATS,
          VERTRAG like ERCH-VERTRAG ,
          BELNR LIKE ERCH-BELNR,
          VKONT LIKE ERCH-VKONT ,
          LFDNR LIKE ERCHC-LFDNR,
           BUDAT LIKE ERCHC-BUDAT,
          END OF ITERC .
    DATA : BEGIN OF ITMX7 OCCURS 0,
          SRNO   TYPE I  ,
           STATUS(40) TYPE C ,
           REGIOAREA  LIKE EADRREGAREAA-REGIOAREA ,
           REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP ,
           DESCRIPT(20) TYPE C ," LIKE  EADRREGAREAT-DESCRIPT  ,
           V0_15  LIKE ITCOM-V0_15 ,
           V16_30 LIKE ITCOM-V16_30 ,
           V31_45 LIKE ITCOM-V31_45 ,
           V46_60 LIKE ITCOM-V46_60 ,
          V61_75 LIKE ITCOM-V61_75 ,
          V76_90 LIKE ITCOM-V76_90 ,
          V90   LIKE ITCOM-V90 ,
          VNTAV LIKE ITCOM-VNTAV  ,
          TOTAL TYPE I ,
             END OF ITMX7 .
    DATA : BEGIN OF ITETD OCCURS 0,
          EQUNR LIKE ETDZ-EQUNR ,
          ZWNUMMER LIKE ETDZ-ZWNUMMER,
          ZWKENN  LIKE ETDZ-ZWKENN ,
          LOGIKZW LIKE ETDZ-LOGIKZW ,
          ANLAGE  LIKE EASTS-ANLAGE ,
         BIS     LIKE EASTS-BIS,
          ZWNABR  LIKE EASTS-ZWNABR ,
          END OF ITETD .
      DATA : BEGIN OF ITEAN OCCURS 100,
          ANLAGE LIKE  EASTL-ANLAGE,
         SPARTE LIKE  EQUI-SPARTE,
          VSTELLE LIKE EANL-VSTELLE,
          ANLART LIKE EANL-ANLART,
          ERDAT LIKE EANL-ERDAT ,
             HAUS  LIKE EVBS-HAUS,
             VBSART LIKE EVBS-VBSART,
             ERDAT_EVBS LIKE EVBS-ERDAT,  "ERDAT_EVB
            REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP,
             REGIOAREA LIKE EADRREGAREAA-REGIOAREA ,
              DESCRIPT(20) type c ,
          END OF ITEAN .
    DATA : BEGIN OF ITSPL OCCURS 0 ,
            TPLNR LIKE IFLOT-TPLNR ,
            TPLMA LIKE IFLOT-TPLMA ,
            HAUS  LIKE EHAUISU-HAUS ,
            REGIOGROUP LIKE EADRREGAREAA-REGIOGROUP ,
            END OF ITSPL .
    DATA : BEGIN OF ITEGE OCCURS 0,
           EQUNR LIKE EGERH-EQUNR ,
           LOGIKNR LIKE EGERH-LOGIKNR,
           MATNR   LIKE EQUI-MATNR ,
           SERNR  LIKE EQUI-SERNR,
           SPARTE  LIKE EQUI-SPARTE,
           DEVLOC  LIKE EGERH-DEVLOC,
           END OF ITEGE .
    DATA : ITMOD LIKE ITMX2 OCCURS 0 WITH HEADER LINE ,
           WA_ITMX2 LIKE ITMX2 .
    DATA : WA-EQUNR LIKE EQUI-EQUNR ,
           WA-ANLAGE LIKE EASTL-ANLAGE .
      DATA : w_variant  like disvariant ,
             W_VARIANT_SAVE  TYPE C .
    DATA : REP-ID LIKE SY-REPID,
         W_REPID LIKE SY-REPID .
    DATA PUSH TYPE SSCRFIELDS-UCOMM .
    DATA  COUNT TYPE I .
    DATA : V13 TYPE I ,
           V17 TYPE  I.
    DATA CNT TYPE I .
    DATA VARIANT LIKE SY-TABIX .
    DATA :  SNT TYPE I ,
            PNT TYPE I ,
         V_COUNT TYPE I VALUE 1 .
    DATA: ylayout TYPE slis_layout_alv ,
         XLAYOUT TYPE SLIS_LAYOUT_ALV .
    DATA  KNT TYPE I VALUE 0  .
    DATA I_SORT TYPE slis_t_sortinfo_alv WITH HEADER LINE .
    DATA : V_DATE LIKE SY-DATUM ,
          V_DATUM(10) TYPE C ,
          GX_VARIANT LIKE DISVARIANT,
          G_VARIANT LIKE DISVARIANT,
                G_SAVE(1) TYPE C VALUE 'A',
                G_EXIT(1) TYPE C,
                N TYPE I ,
                M TYPE I ,
                C TYPE I VALUE 0 .
    DATA  G_REPID LIKE SY-REPID .
    DATA: GT_PRINT TYPE SLIS_PRINT_ALV.
    DATA YREPID LIKE SY-REPID .
    DATA: X_LAYOUT TYPE SLIS_LAYOUT_ALV ,
          Y_LAYOUT TYPE SLIS_LAYOUT_ALV ,
          Z_LAYOUT TYPE SLIS_LAYOUT_ALV.
    DATA : TITLE LIKE SY-TITLE .
    DATA : V_ENTER TYPE I ,
           V_MODIFY TYPE I .
    ******************SELECTION SCREEN ************************
    SELECTION-SCREEN BEGIN OF BLOCK BL1 WITH FRAME TITLE TEXT-001 .
    PARAMETERS P_SPART LIKE EQUI-SPARTE DEFAULT  '01' .
    SELECTION-SCREEN COMMENT 40(15)  TEXT-005 .
    SELECT-OPTIONS : S_SWERK FOR ILOA-SWERK DEFAULT  'M011',
                     S_RAREA FOR EADRREGAREAA-REGIOAREA ,
                     S_RGROUP FOR EADRREGAREAA-REGIOGROUP,
                     S_AB FOR EGERH-AB OBLIGATORY .
    SELECTION-SCREEN END OF BLOCK BL1 .
    SELECTION-SCREEN BEGIN OF BLOCK BL2 WITH FRAME TITLE TEXT-002 .
    SELECT-OPTIONS: S_SERNR FOR EQUI-SERNR ,
                    S_MATNR FOR EQUI-MATNR OBLIGATORY ,
                    S_VSTELL FOR EANL-VSTELLE ,
                    S_HAUS FOR EHAUISU-HAUS .
    SELECTION-SCREEN  END OF BLOCK BL2.
    SELECTION-SCREEN BEGIN OF BLOCK BL3 WITH FRAME TITLE TEXT-003 .
    SELECT-OPTIONS: S_VKONTO FOR EVER-VKONTO .
    SELECTION-SCREEN END OF BLOCK BL3 .
    SELECTION-SCREEN BEGIN OF BLOCK BL4 WITH FRAME TITLE TEXT-004 .
    PARAMETERS: P_INSTA RADIOBUTTON GROUP RAD1 DEFAULT 'X' ,
                P_REPLC RADIOBUTTON GROUP RAD1 ,
                P_IP RADIOBUTTON GROUP RAD1 .
    SELECT-OPTIONS : S_GERWE FOR EGERH-GERWECHS .
    SELECTION-SCREEN END OF BLOCK BL4 .
    SELECTION-SCREEN BEGIN OF BLOCK BL5 WITH FRAME TITLE TEXT-006.
    PARAMETERS  : P_VARI LIKE DISVARIANT-VARIANT ."DEFAULT '/ALL'.
    SELECTION-SCREEN COMMENT 47(40) varname FOR FIELD P_VARI .
    SELECTION-SCREEN SKIP 1.
    SELECTION-SCREEN PUSHBUTTON /5(25) BUT1 USER-COMMAND UCSS .
    PARAMETERS: P_FIXVAR LIKE KAEP_SETT-FIXVAR NO-DISPLAY,
                P_MAXSEL LIKE KAEP_SETT-MAXSEL NO-DISPLAY DEFAULT 1000.
    SELECTION-SCREEN END OF BLOCK BL5.
    *******INITIALIZATION************************
    INITIALIZATION .
    SET PF-STATUS 'INST' .
    G_REPID = SY-REPID.
    PERFORM VARIANT_INIT.
    Default variant
      GX_VARIANT = G_VARIANT.
      CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
           EXPORTING
                I_SAVE     = G_SAVE
           CHANGING
                CS_VARIANT = GX_VARIANT
           EXCEPTIONS
                NOT_FOUND  = 2.
      IF SY-SUBRC = 0.
        P_VARI = GX_VARIANT-VARIANT.
      ENDIF.
      MOVE 'Further Settings' TO BUT1 .
    AT SELECTION SCREEN EVENT******
    AT SELECTION-SCREEN .
      CASE SY-UCOMM .
        WHEN 'UCSS' .
          CALL FUNCTION 'K_LINE_ITEM_TECH_SETTINGS_SET'
               CHANGING
                    C_FIXVAR = P_FIXVAR
                    C_MAXSEL = P_MAXSEL.
      ENDCASE .
      IF NOT S_RAREA IS INITIAL .
        SELECT SINGLE * FROM EADRREGAREAA
         WHERE REGIOAREA IN S_RAREA .
        IF  SY-SUBRC <> 0 .
          MESSAGE E058(00) WITH S_RAREA-LOW S_RAREA-HIGH.
          LEAVE TO LIST-PROCESSING .
        ENDIF .
      ENDIF.
      IF NOT S_MATNR IS INITIAL .
        SELECT SINGLE * FROM ETYP
              WHERE MATNR IN S_MATNR
              AND KOMBINAT = 'Z'.
          IF SY-SUBRC <> 0 .
            MESSAGE E411(EG) .
            LEAVE TO  LIST-PROCESSING .
          ENDIF.
       ENDIF.
    IF NOT S_SWERK IS INITIAL .
        SELECT SINGLE * FROM ILOA
              WHERE SWERK IN S_SWERK .
          IF SY-SUBRC <> 0 .
            MESSAGE E412(I0) .
            LEAVE TO LIST-PROCESSING .
          ENDIF.
    ENDIF.
    IF NOT S_RGROUP IS INITIAL .
        SELECT SINGLE * FROM EADRREGAREAA
              WHERE REGIOGROUP IN S_RGROUP .
          IF SY-SUBRC <> 0 .
            MESSAGE E025(E7) .
            LEAVE TO LIST-PROCESSING .
          ENDIF.
    ENDIF.
    IF NOT  S_HAUS IS INITIAL .
      SELECT SINGLE * FROM EHAUISU
        WHERE HAUS IN S_HAUS .
        IF SY-SUBRC <> 0 .
          MESSAGE E011(E9) WITH 'Connection Object' S_HAUS-LOW S_HAUS-HIGH .
            LEAVE TO LIST-PROCESSING .
          ENDIF.
    ENDIF.
    IF NOT  S_VSTELL IS INITIAL .
      SELECT SINGLE * FROM EANL
        WHERE VSTELLE IN S_VSTELL .
        IF SY-SUBRC <> 0 .
            MESSAGE E011(E9) WITH 'Premise' S_VSTELL-LOW S_VSTELL-HIGH .
            LEAVE TO LIST-PROCESSING .
          ENDIF.
    ENDIF.
    IF NOT  S_VKONTO IS INITIAL .
      SELECT SINGLE * FROM EVER
        WHERE VKONTO IN S_VKONTO .
        IF SY-SUBRC <> 0 .
            MESSAGE E001(>3) .
            LEAVE TO LIST-PROCESSING .
          ENDIF.
    ENDIF.
    IF NOT S_GERWE IS INITIAL .
      SELECT SINGLE * FROM TE401
       WHERE GERWECHS IN S_GERWE .
        IF SY-SUBRC <> 0 .
          MESSAGE E058(00) WITH S_GERWE-LOW S_GERWE-HIGH .
          LEAVE TO LIST-PROCESSING .
        ENDIF.
    ENDIF.
    IF NOT P_SPART IS INITIAL .
    SELECT SINGLE * FROM EQUI
      WHERE SPARTE = P_SPART .
        IF SY-SUBRC <> 0 .
          MESSAGE E058(00).
           LEAVE TO LIST-PROCESSING .
        ENDIF.
    ENDIF.
    CASE SY-UCOMM .
    WHEN '&LFO'.
    WRITE:/ ' DOCUMENTATION' .
    ENDCASE .
    PERFORM VARIANT_EXISTENCE .
    AT SELECTION-SCREEN OUTPUT .
      LOOP AT SCREEN .
        IF SCREEN-NAME = 'P_SPART' .
          SCREEN-INPUT = 0 .
          MODIFY SCREEN .
        ENDIF .
      ENDLOOP .
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI .
    PERFORM F4_FOR_VARIANT.
    ***************START OF SELECTION EVENT****************
    START-OF-SELECTION .
      IF P_INSTA = 'X' .
        PERFORM INSTALL .
      ELSEIF P_REPLC = 'X' .
        PERFORM REPLACE .
      ELSEIF P_IP = 'X' .
        PERFORM INS_REPL .
      ENDIF.
    IF SY-BATCH = ' ' .
      SELECT  A~EQUNR
             A~BIS
              A~AB
             A~LOGIKNR
              A~ZWGRUPPE
              A~EINBDAT
              A~AUSBDAT
              A~GERWECHS
              A~DEVLOC
              B~MATNR
              B~SERNR
              B~SPARTE
              D~ANLAGE
              D~LOGIKNR
              D~ERDAT  FROM ( ( EGERH AS A INNER JOIN EQUI AS B
                                    ON AEQUNR = BEQUNR )
                      INNER JOIN EASTL AS D ON ALOGIKNR = DLOGIKNR )
                                        AND   ABIS     = DBIS
                                        AND   AAB      = DAB )
              INTO TABLE ITMX2 UP TO P_MAXSEL ROWS
              FOR ALL ENTRIES IN ITTE4
              WHERE  A~GERWECHS = ITTE4-GERWECHS
              AND    A~BIS GE S_AB-LOW
              AND  A~AB IN S_AB
              AND A~KOMBINAT = 'Z'
              AND A~EINBDAT NE '00000000'
              AND A~AUSBDAT EQ '00000000'
              AND B~MATNR  IN S_MATNR
              AND B~SERNR IN S_SERNR
              AND B~SPARTE = P_SPART
              AND D~BIS GE S_AB-LOW .
             AND D~AB IN S_AB .
    ELSE.
        SELECT A~EQUNR
             A~BIS
              A~AB
             A~LOGIKNR
              A~ZWGRUPPE
              A~EINBDAT
              A~AUSBDAT
              A~GERWECHS
              A~DEVLOC
              B~MATNR
              B~SERNR
              B~SPARTE
              D~ANLAGE
              D~LOGIKNR
              D~ERDAT
              FROM ( ( EGERH AS A INNER JOIN EQUI AS B
                                    ON AEQUNR = BEQUNR )
                      INNER JOIN EASTL AS D ON ALOGIKNR = DLOGIKNR )
                                        AND   ABIS     = DBIS
                                        AND   AAB      = DAB )
              INTO  TABLE ITMX2
              FOR ALL ENTRIES IN ITTE4
              WHERE  A~GERWECHS = ITTE4-GERWECHS
              AND    A~BIS GE S_AB-LOW
              AND  A~AB IN S_AB
              AND A~KOMBINAT = 'Z'
              AND A~EINBDAT NE '00000000'
              AND A~AUSBDAT EQ '00000000'
              AND B~MATNR  IN S_MATNR
              AND B~SERNR IN S_SERNR
              AND B~SPARTE = P_SPART
              AND D~BIS GE S_AB-LOW .
             AND D~AB IN S_AB .
    ENDIF.
    SORT ITMX2 BY ANLAGE EQUNR .
    LOOP AT ITMX2 .
    IF ITMX2-ANLAGE =  WA_ITMX2-ANLAGE .
         MOVE-CORRESPONDING WA_ITMX2 TO ITMOD .
         APPEND ITMOD.
         CLEAR ITMOD .
        MOVE-CORRESPONDING ITMX2 TO ITMOD .
         APPEND ITMOD.
         CLEAR ITMOD .
    ENDIF.
    MOVE-CORRESPONDING ITMX2 TO WA_ITMX2  .
    ENDLOOP .
    SORT ITMOD BY ANLAGE EQUNR .
    DELETE ADJACENT DUPLICATES FROM ITMOD .
    IF NOT ITMOD[] IS INITIAL .
    SELECT A~EQUNR
           A~ZWNUMMER
           A~ZWKENN
           A~LOGIKZW
           B~ANLAGE
           B~ZWNABR
           FROM ( ETDZ AS A INNER JOIN EASTS AS B
                  ON ALOGIKZW = BLOGIKZW )
            INTO TABLE ITETD
            FOR ALL ENTRIES IN ITMOD
            WHERE A~EQUNR = ITMOD-EQUNR
            AND   A~BIS  GE S_AB-LOW
           AND   A~AB   IN S_AB
            AND   A~ZWNUMMER = 1
            AND   B~ZWNABR NE 'X' .
    SORT ITETD BY ANLAGE EQUNR .
    LOOP AT ITMX2 .
       LOOP AT ITETD WHERE ANLAGE EQ ITMX2-ANLAGE .
              V_ENTER =  1 .
            IF ITETD-EQUNR  EQ ITMX2-EQUNR .
               V_MODIFY =  1 .
               EXIT .
           ENDIF.
      ENDLOOP .
         IF V_ENTER = 1 AND V_MODIFY =  0 .
            DELETE ITMX2 .
         ENDIF.
         CLEAR : ITMX2 ,V_ENTER ,V_MODIFY .
    ENDLOOP .
    ENDIF.
    MESSAGE S015(ZS).
    IF NOT ITMX2[] IS INITIAL .
    SELECT  ANLAGE
             VSTELLE
             ANLART
             ERDAT
             FROM EANL INTO CORRESPONDING FIELDS OF TABLE ITEAN
             FOR ALL ENTRIES IN ITMX2
             WHERE ANLAGE = ITMX2-ANLAGE
             AND   SPARTE = P_SPART
             AND   VSTELLE IN S_VSTELL .
    ENDIF.
    SORT ITEAN BY ANLAGE .
    IF NOT ITEAN[] IS INITIAL .
    SELECT  E~ANLAGE
             E~VSTELLE
             F~haus
             F~VBSART
             F~ERDAT
             H~REGIOGROUP
             H~REGIOAREA
             L~DESCRIPT
         FROM ( ( ( ( EANL AS E INNER JOIN EVBS AS F
                           ON EVSTELLE = FVSTELLE )
                      INNER JOIN EHAUISU AS G ON FHAUS = GHAUS    )
                      INNER JOIN EADRREGAREAA AS H ON G~REGIOGROUP =
                                                            H~REGIOGROUP )
                      INNER JOIN EADRREGAREAT AS L ON H~REGIOAREA =
                                                           L~REGIOAREA   )
             INTO TABLE ITMX4
            FOR ALL ENTRIES IN ITEAN
             WHERE E~ANLAGE = ITEAN-ANLAGE
             AND   E~VSTELLE = ITEAN-VSTELLE
             AND   L~LANGU = SY-LANGU
             AND   H~REGIOGROUP IN S_RGROUP
             AND   H~REGIOAREA IN S_RAREA .
    ENDIF.
    *LOOP AT ITEAN .
    READ TABLE ITMX4 WITH KEY  VSTELLE = ITEAN-VSTELLE .
      IF SY-SUBRC EQ 0 .
         MOVE-CORRESPONDING ITMX4 TO ITEAN .
         ITEAN-ERDAT_EVBS = ITMX4-ERDAT .
         MODIFY ITEAN .
      ENDIF.
    *ENDLOOP .
    LOOP AT ITMX2 .
      ITMX1-ERDAT_EAS = ITMX2-ERDAT .
    MOVE-CORRESPONDING ITMX2 TO ITMX1 .
    READ TABLE ITEAN WITH KEY ANLAGE = ITMX2-ANLAGE .
       IF SY-SUBRC EQ 0 .
             ITMX1-ERDAT_EAN = ITEAN-ERDAT .
             MOVE-CORRESPONDING ITEAN TO ITMX1 .
       READ TABLE ITMX4 WITH KEY ANLAGE = ITMX2-ANLAGE .
        IF SY-SUBRC EQ 0 .
              ITMX1-ERDAT_EVB = ITMX4-ERDAT .
            MOVE-CORRESPONDING ITMX4 TO ITMX1 .
        ENDIF.
    WE WILL GET ONLY THOSE RECORDS THAT IS HAVING REGIO GROUP,DIVISON
        APPEND ITMX1.
        CLEAR ITMX1 .
      ENDIF.
    ENDLOOP .
    IF NOT ITMX4[] IS INITIAL .
    SELECT  EQUNR
             ABLBELNR
             ABLESGR
             ADAT
             ADATSOLL
             ANLAGE FROM V_EABL
             INTO TABLE ITMX3
             FOR ALL ENTRIES IN ITMX1
             WHERE ANLAGE = ITMX1-ANLAGE
            AND   EQUNR  = ITMX1-EQUNR
            AND  ADATSOLL GE S_AB-LOW
            ANd ( ABLESGR  EQ  '01'
            OR  ABLESGR  EQ  '02'
            OR  ABLESGR  EQ  '03'
            OR  ABLESGR  EQ  '22'  ) .
    SELECT  B~EQUNR
             A~ABLBELNR
             A~ABLESGR
             B~ADAT
             B~ADATSOLL
             A~ANLAGE
         FROM ( EABLG AS A INNER JOIN EABL AS B ON AABLBELNR = BABLBELNR
            INTO CORRESPONDING FIELDS OF TABLE ITMX3
            FOR ALL ENTRIES IN ITMX1
            WHERE A~ANLAGE = ITMX1-ANLAGE
            AND   B~EQUNR  = ITMX1-EQUNR
            AND  B~ADATSOLL GE S_AB-LOW
            AND  A~ABRDATS  GE S_AB-LOW
            AND ( A~ABLESGR EQ '01'
            OR  A~ABLESGR EQ '02'
            OR  A~ABLESGR EQ '03'
            OR  A~ABLESGR EQ '22'   ) .
    ENDIF.
    SELECT  ANLAGE
             VKONTO
             VERTRAG
             SPARTE
             FROM EVER INTO TABLE ITEVE
             FOR ALL ENTRIES IN ITMX1
             WHERE ANLAGE = ITMX1-ANLAGE
             AND   SPARTE = P_SPART .
    LOOP AT ITMX1 .
    READ TABLE  ITMX3 WITH KEY ANLAGE = ITMX1-ANLAGE
                                EQUNR  = ITMX1-EQUNR .
      IF SY-SUBRC EQ 0 .
       MOVE-CORRESPONDING ITMX3 TO ITMX1 .
       ENDIF.
      READ TABLE ITEVE WITH KEY ANLAGE = ITMX1-ANLAGE .
       IF SY-SUBRC EQ 0 .
          MOVE-CORRESPONDING ITEVE TO ITMX1 .
       ENDIF.
      MODIFY ITMX1 .
    ENDLOOP .
    SELECT J~BEGABRPE
             J~ENDABRPE
             J~ABRDATS
             J~VKONT
             j~vertrag
             K~BELNR
             K~LFDNR
             K~BUDAT
            FROM ( ERCH AS J INNER JOIN ERCHC AS K ON JBELNR = KBELNR )
            INTO CORRESPONDING FIELDS OF TABLE ITERC
             FOR ALL ENTRIES  IN ITMX1
             WHERE J~VERTRAG = ITMX1-VERTRAG
             AND   J~ADATSOLL GE S_AB-LOW .
    *SELECT BEGABRPE
            ENDABRPE
            ABRDATS
            VKONT
            vertrag
            K~BELNR
            K~LFDNR
            K~BUDAT
           FROM  ERCH     INTO CORRESPONDING FIELDS OF TABLE ITERC
            FOR ALL ENTRIES  in ITMX1
            WHERE VERTRAG = ITMX1-VERTRAG
            and   ADATSOLL GE S_AB-LOW .
    LOOP AT ITMX1 .
    READ TABLE ITERC WITH KEY VERTRAG = ITMX1-VERTRAG .
      IF SY-SUBRC EQ 0 .
        ITMX1-BEGABRPE = ITERC-BEGABRPE .
       ITMX1-ENDABRPE = ITERC-ENDABRPE .
       ITMX1-ABRDATS = ITERC-ABRDATS .
       ITMX1-BELNR = ITERC-BELNR .
       ITMX1-LFDNR = ITERC-LFDNR .
       ITMX1-BUDAT = ITERC-BUDAT .
       MODIFY ITMX1 TRANSPORTING BEGABRPE ENDABRPE ABRDATS  BELNR
          LFDNR BUDAT .
       ENDIF.
    ENDLOOP .
    MESSAGE S014(ZS) .
    LOOP AT ITMX1 .
    MOVE-CORRESPONDING ITMX1 TO ITFIN .
      ITFIN-LTPU = ITMX1-ERDAT_EAN - ITMX1-ERDAT_EVB .
      ITFIN-LTUB  = ITMX1-ERDAT_EAS - ITMX1-ERDAT_EAN .
    IF NOT ITMX1-ADATSOLL IS INITIAL AND ( NOT ITMX1-EINBDAT IS  INITIAL )
       ITFIN-LTBM  =  ITMX1-ADATSOLL - ITMX1-EINBDAT .
         ELSE .
             ITFIN-LTBM = 'NTAV'.
         ENDIF.
      IF NOT ITMX1-ADAT IS INITIAL  AND ( NOT ITMX1-ADATSOLL IS INITIAL ) .
        ITFIN-LTMA  =   ITMX1-ADAT - ITMX1-ADATSOLL .
      ELSE .
        ITFIN-LTMA = 'NTAV' .
      ENDIF.
      IF NOT ITMX1-ABRDATS IS INITIAL AND ( NOT ITMX1-ADAT IS INITIAL ) .
        ITFIN-LTAB  =   ITMX1-ABRDATS - ITMX1-ADAT .
      ELSE .
        ITFIN-LTAB =  'NTAV' .
      ENDIF.
      IF NOT ITMX1-BUDAT IS INITIAL AND ( NOT ITMX1-ABRDATS IS INITIAL ) .
           ITFIN-LTBA =   ITMX1-BUDAT - ITMX1-ABRDATS  .
    ELSE.
        ITFIN-LTBA = 'NTAV'.
      ENDIF.
      ITFIN-SUM = 0.
      IF ITFIN-LTPU NE 'NTAV' AND ITFIN-LTPU NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTPU.
      ENDIF.
      IF ITFIN-LTUB NE 'NTAV' AND ITFIN-LTUB NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTUB.
      ENDIF.
      IF ITFIN-LTBM NE 'NTAV' AND ITFIN-LTBM NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTBM.
      ENDIF.
      IF ITFIN-LTMA NE 'NTAV' AND ITFIN-LTMA NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTMA.
      ENDIF.
      IF ITFIN-LTAB NE 'NTAV' AND ITFIN-LTAB NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTAB.
      ENDIF.
      IF ITFIN-LTBA NE 'NTAV' AND ITFIN-LTBA NE 'N/A'.
        ITFIN-SUM = ITFIN-SUM + ITFIN-LTBA.
      ENDIF.
      APPEND ITFIN .
      CLEAR ITFIN .
    ENDLOOP .
    DELETE ADJACENT DUPLICATES FROM ITFIN .
    PERFORM SUMMARY .
    Message S013(ZS).
    PERFORM BACKGROUND .
    CLEAR: ITMX2[] ,ITSPL[],ITEGE[] ,ITTE4[],ITMX7[] .
    MESSAGE S017(ZS) .
    SUBROUTINES********************************
    FOR INSTALLATION********************************
    FORM INSTALL .
      SELECT GERWECHS
            EAWKENNZE
            EAWKENNZW
             FROM TE401 INTO CORRESPONDING FIELDS OF TABLE ITTE4
            WHERE GERWECHS IN S_GERWE
              AND  EAWKENNZE = 'X' .
    IF SY-SUBRC NE 0 .
       MESSAGE S002(ZS).
       LEAVE TO LIST-PROCESSING .
    ENDIF.
    ENDFORM .
    ************************REPLACE****************************
    FORM REPLACE .
      SELECT GERWECHS
             EAWKENNZE
             EAWKENNZW FROM TE401 INTO CORRESPONDING FIELDS OF TABLE ITTE4
        WHERE GERWECHS IN S_GERWE
        AND  EAWKENNZW = 'X' .
    IF SY-SUBRC NE 0.
       MESSAGE S003(ZS) .
       LEAVE TO LIST-PROCESSING .
    ENDIF.
    ENDFORM .
    ************************INSTALL/REPLACEMENT*********************
    FORM INS_REPL .
      SELECT GERWECHS
           EAWKENNZE
           EAWKENNZA
           EAWKENNZW FROM TE401 INTO CORRESPONDING FIELDS OF TABLE ITTE4
      WHERE GERWECHS IN S_GERWE
      AND ( EAWKENNZE = 'X'
      OR  EAWKENNZW = 'X'  ) .
    IF SY-SUBRC NE 0.
       MESSAGE S004(ZS) .
       LEAVE TO LIST-PROCESSING .
    ENDIF.
    ENDFORM .
    FIELD CATALOG FOR DETAILED REPORT ******************
    FORM FIELDCATALOG USING F_FIELDCAT .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'STATUS' .
      SFLD-SELTEXT_S = 'Details'.
      SFLD-SELTEXT_M = 'Details'.
      SFLD-JUST =   'L' .
      SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'EQUNR' .
      SFLD-SELTEXT_S = 'Equipment'.
      SFLD-SELTEXT_M = 'Equipment'.
      SFLD-JUST =   'L' .
      SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'ANLAGE' .
      SFLD-SELTEXT_S = 'Installat.'.
      SFLD-SELTEXT_M = 'Installation'.
      SFLD-JUST =   'L' .
      SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'SERNR' .
      SFLD-SELTEXT_S = 'Serial no.'.
      SFLD-SELTEXT_M = 'Serial number'.
      SFLD-JUST =   'L' .
    SFLD-KEY  = 'X' .
    SFLD-HOTSPOT = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'VKONTO' .
      SFLD-SELTEXT_S = 'Cont.Acct'.
      SFLD-SELTEXT_M = 'Contract Acct'.
      SFLD-JUST =   'L' .
    SFLD-KEY  = 'X' .
    SFLD-HOTSPOT = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'REGIOAREA' .
      SFLD-SELTEXT_S = 'Reg. area'.
      SFLD-SELTEXT_M = 'Reg. struc.area'.
      SFLD-JUST =   'L' .
      SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'REGIOGROUP' .
      SFLD-SELTEXT_S = 'RegStrGrp.'.
      SFLD-SELTEXT_M = 'Reg. Str. Grp.'.
      SFLD-JUST =   'L' .
      SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD  .
      SFLD-FIELDNAME = 'LTPU' .
      SFLD-SELTEXT_S = 'Prm-Util'.
      SFLD-SELTEXT_L = 'Premise to Utility installation in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LTUB' .
      SFLD-SELTEXT_S = 'Util-BInst'.
      SFLD-SELTEXT_L = 'Utility to Billing installation in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LTBM' .
      SFLD-SELTEXT_M = 'BInst-MRO'.
      SFLD-SELTEXT_L = 'Billing to Meter reading order in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LTMA' .
      SFLD-SELTEXT_M = 'MRO-AcRead'.
      SFLD-SELTEXT_L = 'Meter reading order to actual reading in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LTAB' .
      SFLD-SELTEXT_M = 'AcRead-BiOr'.
      SFLD-SELTEXT_L = 'Actual reading to Billing order in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LTBA' .
      SFLD-SELTEXT_M = 'BiOr-AcBill'.
      SFLD-SELTEXT_L = 'Billing order to Actual billing in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'SUM' .
      SFLD-SELTEXT_M = 'TOTAL'.
      SFLD-SELTEXT_L = 'Total lead time in days'.
      SFLD-JUST =   'R' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'VSTELLE' .
      SFLD-SELTEXT_S = 'Premise'.
      SFLD-SELTEXT_M = 'Premise'.
      SFLD-JUST =   'L' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'LOGIKNR' .
      SFLD-SELTEXT_S = 'LogDev.no.'.
      SFLD-SELTEXT_M = 'Log. dev. no.'.
      SFLD-JUST =   'L' .
    SFLD-KEY  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'BIS' .
      SFLD-SELTEXT_M = 'Valid to'.
      SFLD-SELTEXT_L = 'Date at Which a Time Slice Expires'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'AB' .
      SFLD-SELTEXT_M = 'Valid from'.
      SFLD-SELTEXT_L = 'Date from which time slice is valid'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'ZWGRUPPE' .
      SFLD-SELTEXT_S = 'Reg. group'.
      SFLD-SELTEXT_M = 'Register group'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'EINBDAT' .
      SFLD-SELTEXT_S = 'Inst. date'.
      SFLD-SELTEXT_M = 'Install. date'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD.
      SFLD-FIELDNAME = 'AUSBDAT' .
      SFLD-SELTEXT_S = 'Remov.date'.
      SFLD-SELTEXT_M = 'Removal date'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'GERWECHS' .
      SFLD-SELTEXT_S = 'Reason'.
      SFLD-SELTEXT_M = 'Activity reason'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'DEVLOC' .
      SFLD-SELTEXT_S = 'Dev. loc.'.
      SFLD-SELTEXT_M = 'Device location'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'SPARTE' .
      SFLD-SELTEXT_S = 'Division'.
      SFLD-SELTEXT_M = 'Division'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'ANLART' .
      SFLD-SELTEXT_S = 'Inst. type'.
      SFLD-SELTEXT_M = 'Inst. type'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'HAUS' .
      SFLD-SELTEXT_S = 'Conn.obj.'.
      SFLD-SELTEXT_M = 'Connection obj.'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD .
      SFLD-FIELDNAME = 'VBSART' .
      SFLD-SELTEXT_S = 'Prem. type'.
      SFLD-SELTEXT_M = 'Premise type'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD.
      SFLD-FIELDNAME = 'ABBELNR' .
      SFLD-SELTEXT_S = 'Int.MRD ID'.
      SFLD-SELTEXT_M = 'Int. MR doc. ID'.
      SFLD-JUST =   'C' .
      SFLD-NO_OUT  = 'X' .
      APPEND SFLD TO ITFLD .
      CLEAR SFLD.
      SFLD-FIELDNAME = 'ABLESGR' .

  • How to create transaction for a maintenance view, Thank you.

    How to create transaction for a maintenance view,
    Thank you.
    deniz...

    Hi Deniz,
    Go to se93.
    Then create the new T.code.
    Under that select parameter Transaction.
    Then give the sm30 in the t.code in default values tab.
    check the checkbox skip initial screen.
    in classification tab.
    click checkbox inherit gui attributes..
    Now below..
    In the default values..
    select
    viewname and give ur table name.
    UPDATE= Xsave
    view - table name ( Should be upper case
    update X ( should be upper case).
    http://www.sap-basis-abap.com/sapbs011.htm
    Hope this helps you.
    Regards,
    Viveks

  • Read Only access for a Maintenance view

    Hi All,
    I have a requirement like this.
    There is a Z Maintenance View (namely ZVHR_GRD_TARGET), for this i have to maintain the status as Read Only, and have to create a transaction code for this view with only SE16 access.
    I am doing like this.
    In the Z view, in the tab "Maint. Status", i have selected the radio button "Read Only" and saved it.
    I have created a transaction code for this view with SE16 access with the inputs
    Transaction                                                           SE16
    Selected the check box "Skip Intial Screen"
    Selected the check box for GUI status
    Name of the Screenfield                                          DATABROWSE-TABLENAME
    value                                                                      ZVHR_GRD_TARGET (i.e, view name)
    But the transaction code is not executing.
    So can any help me out in the requirement
    Regards
    Srinivas Kodukula

    Anchorage,
    Please refer to the following link:
    Read Only Schema in Oracle APPS 11i
    http://oracle.anilpassi.com/read-only-schema-in-oracle-apps-11i.html
    You may also search this forum as the same topic was discussed here many times before.

  • How to call a maintenance view  from a program

    Hello Abapers,
    Can anybody explain with some examples. How to call a mainetenance view from a program.
    Thanks
    Ranjith.

    Use FM 'VIEW_MAINTENANCE_CALL'.
    REPORT  zmaintaintest.
    VARIABLES / CONSTANTS                          
    CONSTANTS: 
                    c_action(1) TYPE c VALUE 'U',                                 "Update
              c_viewname TYPE tabname value 'ZEMP_EXAMPLE', "View Name
              c_field(6) TYPE c VALUE 'EMPNO'.                            "Field Name
    INTERNAL TABLES
    DATA: itab_rangetab TYPE STANDARD TABLE OF vimsellist,
              v_empno TYPE zempno,
              wa_rangetab TYPE vimsellist.
    SELECTION SCREEN
    PARAMETERS:     p_empno TYPE   zempno   OBLIGATORY.  "Emplyee ID
    AT SELECTION-SCREEN                                                 
    AT SELECTION-SCREEN.
    Chcking the existence of the user in EMPLOYEE table
      PERFORM validate_employee.
    START_OF_SELECTION                                                  
    START-OF-SELECTION.
    This will restrict the user view so that user can only view/change
    Table data corresponding to his/her Employee ID
      PERFORM define_limited_data_area.
    Displaying table maintenance view for a particular employee ID
      PERFORM call_view_maintenance.
    *&      Form validate_employee
    Validate plant entered in the selection screen
    FORM validate_employee.
      SELECT SINGLE empno     u201CEmployee ID
        FROM zemp_example     u201CEmployee Table
        INTO v_empno
        WHERE empno = p_empno.
      IF sy-subrc <> 0.
        MESSAGE 'Not an Valid User' TYPE 'I'.
      ENDIF.
    ENDFORM.                    "validate_employee
    *&      Form DEFINE_LIMITED_DATA_AREA
    To restrict the user view so that user can see/change table data
    corresponding to his employee ID. Here one internal table is
    getting populated with field name as u201CEMPNOu201D (Key field of the table)
    And value as given by user in Selection Screen and this is passed as
    Parameter in function module 'VIEW_MAINTENANCE_CALL'
    FORM define_limited_data_area.
      CLEAR wa_rangetab.
      wa_rangetab-viewfield  = c_field.
      wa_rangetab-operator  = 'EQ'.
      wa_rangetab-value       = p_empno.
      APPEND wa_rangetab TO itab_rangetab.
    ENDFORM.                    "define_limited_data_area
    *&      Form CALL_VIEW_MAINTENANCE.
    Displaying table maintenance view for a particular employee ID
    FORM call_view_maintenance.
      CALL FUNCTION 'VIEW_MAINTENANCE_CALL'      
        EXPORTING
          action           = c_action
          view_name   = c_viewname
        TABLES
          dba_sellist     = itab_rangetab.
    ENDFORM.                    "call_view_maintenance
    Regards,
    Joy.

Maybe you are looking for