Userexit for deleting  operand at installation fact level

Hi Experts,
In ES31 transaction , I need to make some validations at installation fact level . When I  will click on "delete values"  (By right click to delete the operand values),no exit is getting hit so how  will  I incorporate the same?
Thanks in advance .

PS - System information:
Hardware Overview:
  Model Name:          iMac
  Model Identifier:          iMac4,1
  Processor Name:          Intel Core Duo
  Processor Speed:          2 GHz
  Number Of Processors:          1
  Total Number Of Cores:          2
  L2 Cache:          2 MB
  Memory:          2 GB
  Bus Speed:          667 MHz
  Boot ROM Version:          IM41.0055.B08
  SMC Version (system):          1.1f5
  Serial Number (system):          W86390G0U2P
  Hardware UUID:          00000000-0000-1000-8000-0016CB9ED828
System Software Overview:
  System Version:          Mac OS X 10.6.8 (10K549)
  Kernel Version:          Darwin 10.8.0
  Boot Volume:          Macintosh HD
  Boot Mode:          Normal
  Computer Name:          [...]
  User Name:          [...] (coop)
  Secure Virtual Memory:          Not Enabled
  64-bit Kernel and Extensions:          No
  Time since boot:          4 days 9:09
Other steps I have tried:
Installed all updates from Software Update...
Rebooted
Made sure I was logged in as an administrator
Copied .dmg file to local hard drive before installing

Similar Messages

  • How to add new operand in installation facts through FMs

    Hi,
    Please guide me for the following query:
    How to add new operands in installation facts through Function Module?
    Please guide me with any function module through which i can acheive the above requirement.
    Thanks and Regards

    Hi,
    Thanks for your reply please.
    Through the BAPI which you have specified i have not been able to add any new operand in the installation facts.
    Please guide me with the parameters which are required to be passed to create a new operand entry in the installation facts.
    Please guide.
    Thanks and Regards
    Edited by: MP Vashishth on Aug 11, 2011 1:43 PM

  • Material deletion at the batch management level

    hello all,
    i would like to know how the material is flagged for deletion at the storage location level. how to indicate the deletion flag and what is the tcode for this.
    thanks..

    Hi Maxx,
    Use trx code MM06 ( flag material for deletion )
                       MM70  Archive .Object name MM_MATNR
    Hope it will help u
    Regards,
    Hareesha
    Reward points for usefull answer's

  • Vendor - MArk for Deletion at Comp code & Pur Org Level

    Hi Gurus
    I want a list of vendors (about 150 Vendor)  to be  Marked for Deletion at Comp code & Pur Org Level  
    How to proceed ?

    hi,
    To be able to archive, you must set the deletion flag in the master record. You can set this flag for a complete vendor or for individual company codes or purchasing organizations.
    You can archive data from different tables using the archiving object FI_ACCPAYB...
    Mark a vendor for deletion centrally as follows:
    Choose Master records ->Maintain centrally -->Mark for deletion.
    The initial screen appears.
    Enter the vendor account number and, if you wish, the company code and a purchasing organization.
    If you do not specify the key for a purchasing organization, you cannot delete this area at a later date, should you wish to.
    Select ENTER .
    The screen for specifying data for deletion appears.
    Select data to mark for deletion by clicking next to the appropriate field.
    Save your entries by choosing Vendor ->Save.
    The system displays the initial screen, with a message confirming that the data has been saved.
    Mark a vendor master record for deletion for the Accounting Department as follows:
    Choose Master records -> Mark for deletion.
    The system displays the initial screen.
    Enter the vendor's account number and the company code.
    Select ENTER .
    The system displays the screen for selecting areas to mark for deletion.
    Select the data either in the company code or in all areas to mark for deletion.
    If you click next to the All areas field, the system will later delete all data for all company codes and for all purchasing areas in this vendor master record.
    Save your entries by choosing Vendor -> Save.
    After you mark a vendor master record for deletion, you can still post to the vendor account. This is necessary, since you might still need to clear open items. When you post, the system issues a warning that you are posting to an account that is marked for deletion.
    Displaying Archived Vendor Master Data
    To display single documents for the archiving object FI_ACCPAYB using Archive Information System you require an information structure that has been created based on one of the following standard field catalogs provided by SAP:
    ●     SAP_FI_ACCPAY_1 (vendor master data FI)
    ●     SAP_FIACCPAY_2 (vendor master data SD)
    Each information structure must be active and filled.
    Edited by: Priyanka Paltanwale on Aug 21, 2008 9:09 AM

  • Material for deletion at different level

    Hi,
    Below is our requirement.
    As the Mill 3007 is no longer into existence following changes are required.
    1)All the materials for Mill 3007 should be marked for deletion on Plant level (MARC).
    2)All the materials which are connected to Mill 3007 only, should be marked for deletion on General data level (MARA).
    3)And all material which comes under condition 2 should set to Block for use.
          MARC-MMSTA u2013 Status 03.
    Can any1 plz explain how to go abt this? How to get list of material in all cases? and How to set for deletion in mass?
    Regards

    Thanks for the quick reply.
    But what u r saying is for Individual material. As I said 1 mill is no more into existence so I want to block all materials for that mill to set for deletion at Plant Level.
    And also is there a way to find the list of material which belongs to only spec plant?
    bcoz even if u try MM60, it gives u list of material associated to particular plant but it might possible that materil is maintained in some other Plant also. So how to find list of matrl in ONLY particular palnt and nt maintained in any other plant?
    Regards

  • Flag Material master for deletion at plant level using MM17

    Hello Everybody,
    Here is the issue.
    We are trying to flag materials for deletion using MM17.
    When we try to set deletion flag at client level everything looks good.
    But when we try to set deletion flag at plant level we are getting the following error message.
          Messages have been issued: number MASS172234000587
          Message no. MK101
          Diagnosis
          During inbound processing for the IDoc, messages have arisen while checking material data.
          System Response
          The system has filed these messages in the form of an application log with the number        
    Any thoughts..
    Regards
    Pravin

    If you get such red message in MM17, then you can select it and click the button for detail.
    This will get you into the application log where you can review the detailed error cases.
    Alternative, you can access the log with transaction SLG1, enter as object: MASS and as sub object: BUS1001
    Execute.
    Double click the message text "Messages have been issued: number MASS172234000587
    You get a pop-up from where you can disply the application log (hyperlink Execute at the very end of the text)

  • Partner selection at sales order entry: ship-to's flagged for deletion

    Hi All,
    I need some inputs for the following issue.
    For Partner selection at sales order entry level: ship-to's flagged for deletion are also proposed as it is entered in customer master. I dont want to delete the ship-to's marked for deletion in the customer master.
    In short - only the ship-to's that are not marked for deletion should get populated.
    Kindly suggest if there is an userexit for the same.
    Regards
    KCB

    Hi,
    You can try Blocking option for the particular Ship to Party.
    But this will not disable it appearing in the Partner Function Selection Pop up.
    Once you block it; though it appear in the selection pop up, you cannot select & proceed, as it gives a error message.
    You can set this block in 2 ways.
    1 - Tx: XD05
    Go to the Tx give the customer number, sales area & Pres enter.
    There you can set different type of blocks depend on your scenario.
    Save
    2 - Tx: XD02
    Go to TX, Give the Customer number (Ship to Party) & go in. Since you have marked him as a delete, you'll get a warning message there too.
    Select Menu option -> Extras -> Blocking Data
    You'll coime to the same screen as above.
    Maintain relevant blocks & Save
    Check whether it satisfy your requirement.
    Best regards,
    Anupa

  • Standard report on Installation facts inconsistencies

    Hello
    Is there any standard report showing inconsistent installation facts details? Any help would be greatly appreciated.
    Thanks
    Rajat

    Hi,
    S_KK4_82000014 gives you a list of Operands based your your specified parameters, but to check for consistency, you would probably need to do a mass overall check (EAMACH).
    Regards,
    Ivor Martin

  • Userexit for SO Create/Change.

    Hi,
    Please tell me the userexit for the Sales Order Create/Chagne

    Hi,
    You can find the user exits in the include MV45AFZZ....
    Details are given below   :
    <b>User exits in the program MV45AFZZ</b>
    The user exits which you can use for modifications in sales document processing are listed below.
    •     USEREXIT_DELETE_DOCUMENT
    This user exit can be used for deleting data which was stored in a separate table during sales document creation, for example, if the sales document is deleted.
    For example, if an additional table is filled with the name of the person in charge (ERNAM) during order entry, this data can also be deleted after the sales order has been deleted.
    The user exit is called up at the end of the FORM routine BELEG_LOESCHEN shortly before the routine BELEG_SICHERN.
    •     USEREXIT_FIELD_MODIFICATION
    This user exit can be used to modify the attributes of the screen fields.
    To do this, the screen fields are allocated to so-called modification groups 1 - 4 and can be edited together during a modification in ABAP. If a field has no field name, it cannot be allocated to a group.
    The usage of the field groups (modification group 1-4) is as follows:
    •     Modification group 1: Automatic modification with transaction MFAW
    •     Modification group 2: It contains 'LOO' for step loop fields
    •     Modification group 3: For modifications which depend on check tables or on other fixed information
    •     Modification group 4: is not used
    The FORM routine is called up for every field of a screen. If you require changes to be made, you must make them in this user exit.
    This FORM routine is called up by the module FELDAUSWAHL.
    See the Screen Painter manual for further information on structuring the interface.
    •     USEREXIT_MOVE_FIELD_TO_VBAK
    Use this user exit to assign values to new fields at sales document header level. It is described in the section strong> "Transfer of the customer master fields into the sales document".
    The user exit is called up at the end of the FORM routine VBAK_FUELLEN.
    •     USEREXIT_MOVE_FIELD_TO_VBAP
    Use this user exit to assign values to new fields at sales document item level. It is described in the section strong> "Copy customer master fields into the sales document".
    The user exit is called up at the end of the FORM routine VBAP_FUELLEN.
    •     USEREXIT_MOVE_FIELD_TO_VBEP
    Use this user exit to assign values to new fields at the level of the sales document schedule lines.
    The user exit is called up at the end of the FORM routine VBEP_FUELLEN.
    •     USEREXIT_MOVE_FIELD_TO_VBKD
    Use this user exit to assign values to new fields for business data of the sales document. It is described in the section strong> "Copy customer master fields into sales document" .
    The user exit is called up at the end of the FORM routine VBKD_FUELLEN.
    •     USEREXIT_NUMBER_RANGE
    Use this user exit to define the number ranges for internal document number assignment depending on the required fields. For example, if you want to define the number range depending on the sales organization (VKORG) or on the selling company (VKBUR), use this user exit.
    The user exit is called up in the FORM routine BELEG_SICHERN.
    •     USEREXIT_PRICING_PREPARE_TKOMK
    Use this user exit if you want to include and assign a value to an additional header field in the communication structure KOMK taken as a basis for pricing.
    •     USEREXIT_PRICING_PREPARE_TKOMP
    Use this user exit if you want to include or assign a value to an additional item field in the communication structure KOMP taken as a basis for pricing.
    •     USEREXIT_READ_DOCUMENT
    You use this user exit if further additional tables are to be read when importing TA01 or TA02.
    The user exit is called up at the end of the FORM routine BELEG_LESEN.
    •     USEREXIT_SAVE_DOCUMENT
    Use this user exit to fill user-specific statistics update tables.
    The user exit is called up by the FORM routine BELEG-SICHERN before the COMMIT command.
    Note
    If a standard field is changed, the field r185d-dataloss is set to X. The system queries this indicator at the beginning of the safety routine. This is why this indicator must also be set during the maintenance of user-specific tables that are also to be saved.
    •     USEREXIT_SAVE_DOCUMENT_PREPARE
    Use this user exit to make certain changes or checks immediately before saving a document. It is the last possibility for changing or checking a document before posting.
    The user exit is carried out at the beginning of the FORM routine BELEG_SICHERN.
    Working with User Exits
    Updating the document flow
    The total quantity to be billed is transferred to the sequential data record. Quantities which have already been billed are managed within the SAP system. This process is influenced by user exits. User exits directly influence the update of compressed document flow VBAPF in the system. This document flow accumulates quantities which have already been billed and compares them to new billing quantities. A new billing document is then created with the following quantity:
    Quantity to be billed = New quantity - quantity already billed
    Using user exits, you can specify the keys to which records of the compressed document flow are to be stored.
    santhosh

  • Middleware Replication-ISU Installation Facts into CRM Service Contract

    Hi All,
    I would like to share an update which I have followed for one of my implementation project.
    Following document will help you, if you want to replicate some of the data from ISU to CRM Service contract custom fields, which is not the standard replication practice.
    [Middleware Replication-ISU Installation Facts into CRM Service Contract|http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/30e51278-00f0-2d10-89a9-ee3d76447650]
    Appreciate your feedback.
    Cheers,
    Suraj

    Hi Fritz,
    As requested following are the code samples-
    For  ISU System BAdI "ECRM_CRM_DOWNLOAD" as below:
    X_CONTRACTPOS               TYPE ECRM_CRMCONTRACT_DATA_POS          Item Data (Enhanced)
    XY_CONTRACTPOS               TYPE ECRM_CRMCONTRACTPOS          Transfer Structure: Contract Status from CRM to IS-U
    XY_CONTRACTPOSX               TYPE ECRM_CRMCONTRACTPOSX          Transfer Structure: Contract Status from CRM to IS-U
    TXY_CONTRACTCONF          TYPE ECRM_CRMCONTRACTCONF_TAB          Configuration Container
    TXY_CONTRACT_STATUS_DATES     TYPE ECRM_CRMCONTRACT_STATUS_DAT_T     Status and Date Tab
    METHOD if_ex_ecrm_crm_download~crm_download_fill_data_new.
    *...Local data declaration
      DATA : l_c_string1      TYPE  string1,
             ls_contractconf  TYPE  ecrm_crmcontractconf.
      IF x_contractpos-partner       IS NOT INITIAL AND
         x_contractpos-everh-anlage  IS NOT INITIAL.
        SELECT SINGLE string1
                                 FROM  ettifn
                                 INTO  l_c_string1
                                 WHERE anlage = x_contractpos-everh-anlage.
        IF sy-subrc EQ 0.
          MOVE : x_contractpos-partner            TO  ls_contractconf-partner,
                 x_contractpos-everh-contractpos  TO  ls_contractconf-ref_guid,
                 'OPERAND'                        TO  ls_contractconf-attr_name,
                 l_c_string1                      TO  ls_contractconf-value.
          CALL METHOD me->fill_container
            EXPORTING
              ip_contractconf = ls_contractconf
              ip_value        = ls_contractconf-value
              ip_name         = 'Operand'
            CHANGING
              li_contractconf = txy_contractconf.
        ENDIF.
      ENDIF.
    ENDMETHOD.
    VALUE( IP_CONTRACTCONF )     TYPE ECRM_CRMCONTRACTCONF     Configuration Container
    VALUE( IP_VALUE )          TYPE TEXT70               Error message text - long text of the error
    VALUE( IP_NAME )          TYPE CU_CHARC               Characteristic Name
    VALUE( LI_CONTRACTCONF )     TYPE ECRM_CRMCONTRACTCONF_TAB     Configuration Container
    METHOD fill_container.
      DATA : l_c_contractconf TYPE ecrm_crmcontractconf.
      FIELD-SYMBOLS : <contractconf> TYPE ecrm_crmcontractconf.
      l_c_contractconf = ip_contractconf.
      READ TABLE li_contractconf ASSIGNING <contractconf> WITH KEY ref_guid = ip_contractconf-ref_guid
           attr_name = ip_name.
      IF sy-subrc EQ 0.
        <contractconf>-value = ip_value.
      ELSE.
        l_c_contractconf-value = ip_value.
        l_c_contractconf-attr_name = ip_name.
        INSERT l_c_contractconf INTO TABLE li_contractconf.
      ENDIF.
    ENDMETHOD.
    For CRM system BAdI "ECRM_DOWNLOAD" as below:
    IP_MTR_TYPE     TYPE /NPC/MTRTYPE          Meter Type
    IP_REF_GUID     TYPE CRMT_OBJECT_GUID          GUID of a CRM Order Object
    CP_CS_TRANS_MSG     TYPE BAD_BUS_TRANSN_MESSAGE     Transaction Messaging BDoc
    METHOD fill_container.
      DATA:           li_flds_upt_orderadm_i TYPE TABLE OF smog_sfldn.
      FIELD-SYMBOLS : <orderadm_i>           TYPE bad_orderadm_i_mess.
      READ TABLE cp_cs_trans_msg-orderadm_i ASSIGNING <orderadm_i> WITH KEY guid = ip_ref_guid.
      IF sy-subrc EQ 0.
        APPEND 'ZZ_METER_TYPE'    TO  li_flds_upt_orderadm_i.
        CALL FUNCTION 'SMO_SNDBITS_SETX'
          EXPORTING
            structurename       = 'BAD_ORDERADM_I_MESS'
            ddic                = 'X'
          TABLES
            sfields             = li_flds_upt_orderadm_i
          CHANGING
            sndbits             = <orderadm_i>-sendbits
          EXCEPTIONS
            structure_not_found = 1
            wrong_fieldname     = 2
            OTHERS              = 3.
        <orderadm_i>-zz_meter_type = ip_mtr_type.
      ENDIF.
    IS_CONTRACT_DATA     TYPE ECRM_ISU_CONTRACT_DATA2     
    CS_BUS_TRANS_MSG     TYPE BAD_BUS_TRANSN_MESSAGE     Transaction Messaging Business Document
    METHOD if_ex_ecrm_download~ecrm_download_fill_data.
      DATA :   ls_contractconf  TYPE  ecrm_isu_contractconf2,
               ls_orderadm_i    TYPE  bad_orderadm_i_mess.
      LOOP AT is_contract_data-t_contractconf INTO ls_contractconf.
        READ TABLE cs_bus_trans_msg-orderadm_i  INTO ls_orderadm_i WITH KEY guid = ls_contractconf-ref_guid.
        IF sy-subrc EQ 0.
          MOVE : ls_contractconf-value  TO  ls_orderadm_i-zz_meter_type.
          CALL METHOD me->fill_container
            EXPORTING
              ip_mtr_type         = ls_orderadm_i-zz_meter_type
              ip_ref_guid         = ls_orderadm_i-guid
            CHANGING
              cp_cs_trans_msg     = cs_bus_trans_msg.
        ENDIF.
      ENDLOOP.
    ENDMETHOD.
    ENDMETHOD.
    Cheers,
    Suraj

  • Material deletion flag at storage location level is not working

    I have a material that is created in some plants and also in some storage locations within each plant. If I mark the deletion flag at plant level I am not able to create a PO -> Me051 error message appears. Whereas if I mark the deletion flag at storage location level nothing appens. I am able to create a PO and also to create to goods receipt. Is there any customization that I should do in order to get the error message?
    Thanks in advance.

    storage location level deletion flag is not checked at order creation.
    it is assumed that you can change the storage location when you do the receipt.
    MRP run is at plant level, so the requirement is valid even the storage location view is flagged for deletion.

  • Find flagged process orders for deletion

    Hi all ,
    How do i find flagged process orders for deletion ?
    i need report or t-code

    Hello,
    Try with t-code COOISPI. In selection,Put material no and system status(sel. at header level) as DLFL
    and also check  "with deeltion flag indicator"
    Check with result and revert.
    Regards,

  • Is this a bug for 10.3.9 installation

    Hi everyone especially mac experts
    This is my first visit to this forum. I have been using my Powerbook g4 12 inch for 3 - 4 years, never had any problem til now!!
    My mac has problem all the sudden, got hacked or something, I dont know, I cannot even restart, it hung since apple logo appear, only way is insert install disc + press C with only one option it allowed me to do "erase and install" no backup no upgrade!!!!
    Anyway, that is not my question, it just a whining, my question is when i tried to reinstall with my installation CD that came with my powerbook and/or panther CD with 3 blacks and 1 codeX, which I got it when I was a member of developer connect. The series of problem are as follow
    1. during installation of CD2, i got installation failure with error messages said some packages cannot install!!!
    2. after i ignore (1), by click "quit" which is only one option anyway, os started to ask me to fill in all information include setting user name and password for admin account. so i did. Then I start to do "software update", and it failed to update/install QuickTime 7.x.x. Then i tried to download only, unpackage and install myself, it has the same results
    3. From (2) i search solution on mac website by using winXP, and found that i have to remove some packages in /Library/../receipts/ and reinsert CD 2 again to reinstall, cool.. i will give it a shot. Unfortunately, it asked for admin password and i could not give a correct password, but i remember and have it written down on a paper. Then i check at Preference->account->admin and see it shows 7 digits or * instead of 9 digits. I wonder that someone might hacked into my computer and change it.
    Therefore, I decide to reinstall again, this time, i spent more time by include erase disk with option "write zero to disk" and no network connection to make sure there is no trace from hacker! Unfortunately, I got the same problem from (1) to (3) without update software d/l. therefore, i believe (3)is a bug it is obvious from my observation, if i cannot solve (3) i will not be able to solve (1) and (2), and i will not have my mac back to work
    Please give me advice, i already lost all my data and spent my weekend trying to fix these problems, which non can be fixed (yet)
    Thanks in advance

    Roam,
    Thanks again for your suggestion,
    "Furthermore one should always Repair Permissions both before doing a Software Update and again afterwards."
    I honestly dont know anything about this "Repair Permissions" from the name, i though it is a verification of authentication to repair OS or some kind of credential issue, and since i m admin user then there is no point to verify it, i should be allowed to do so. Again it is my first time to do this thing in 3 - 4 years of using panther, every time i update software i never ever do this! If this step is essential for every update and installation why dont apple put them as one of TODO step during the processes (as licensing agreement) instead of keep them as an option (just my thought) Anyway, I m glad u tell me about it, and i will give it a shot tonight.
    "That may because you didn't have sufficient disk space. In fact running out of disk space can create all sorts of problems. Please tell me how disk space is available on your
    start up drive."
    That what I thought coz i have only 5.x GB left in 60 GB HD. Thats why I claimed as whining and have to scarify the lost of data by reinstall panther in order to get my mac back to work
    "So are you saying it is a bug or it is a hacker, I don't believe it is either"
    Please see second update info about password, and i m not impose anyone to believe, thats why the topic is a questioning sentence "Is this a bug.."
    "This Discussion site is not Applecare. The people here give their time voluntarily to those who are receptive to help."
    Thats why i ask for "mac expert" not "apple authority/technician" and always appreciate any suggestion.
    Anyway, that great to hear from you and i have learned new thing from your suggestion. I will let u know when i have tried it.

  • Will deleting a column at logical schema delete the same at physical level by DDL Sync?

    Will deleting a column at logical schema delete the same at physical level by DDL Sync?

    Hi David,
    First of all thanks for your quick response and for your help logging the enhancement request,
    I am testing more or less your suggestion but I  am not sure if I understood exactly what you mean,
    1)I imported from data dictionary in a new model and into the options menu on the schema select screen I un-ckecked partitions and triggers,
    I guessed that the import should not get from the data dictionary the information about the partitions but the result is that the tables partitioned (by list in this case) are partitioned by range without fields into the physical model on SDDM,
    2)I select one of the tables modify a NO partitioned option and propagate the option for the rest of the tables
    3) I imported again from data dictionary but this time I included the partitions into the option menu on select schema screen,
    into tabular view on compare models screen I can select all the tables with different partitioned option, also I can change for "list partitions" and select only the partitions that I want to import.
    So I have a solution for my problem, thanks a lot for your suggestion
    The second step I'm not sure is needed or maybe I can avoid the step with some configuration setting in any of the preferences screen,
    if not, I think the options to not include partitions into select schema screen are not so clear, at least for me,
    please, could you confirm me if a way to avoid the second step exists or if I misunderstood this option?
    thanks in advance

  • BADI enhancement for Enjoy PO Tcodes at "header level".

    I could successfully add an item level tab to MEXXN PO tcodes. Somebody help me with the ME_GUI_PO_CUST and ME_PROCESS_PO implementations to add a customer field , say ZZ_ETYP in a separate header level tab "Expense type".
    Do I need to add subscreen2 attribute to the implementing class ?
    Will one structure do for both header and item level data ?
    Do I need to create a separate table ( like ZMEPO_BADI_EXAMPL for items ) for the header also ?
    It would be gr8 if i could get the code for the above BADIs and MEPOBADIEX's function modules.

    Dear Iyer,
    Kindly go through the code.. hope this will help you...
    <b>DETAILED DATABASE DESIGN SPECIFICATIONS</b>
    <b>1. ZTPTP_HEADER</b>
    Header: Expense Type
    Field Name     Field Type     Key Information     Field Description
    MANDT     MANDT     X     Client
    EBELN     EBELN     X     Purchasing Document Number
    ZZ_EXPTYPE     ZZEXPTYPE          Expense Type
    <b>2. ZTPTP_ITEM</b>
    Item: Retainage
    Field Name     Field Type     Key Information     Field Description
    MANDT     MANDT     X     Client
    EBELN     EBELN     X     Purchasing Document Number
    EBELP     EBELP     X     Item Number of Purchasing Document
    ZZ_RETAINAGE      ZZRETAINAGE           Retainage
    <b>3. ZSPTP_HEADER</b>
    PO Enhancement structure: Header
    Field Name     Field Type     Key Information     Field Description
    EBELN     EBELN          Purchasing Document Number
    ZZ_EXPTYPE     ZZEXPTYPE          Expense Type
    <b>4. ZSPTP_ITEM</b>
    PO Enhancement structure: Item
    Field Name     Field Type     Key Information     Field Description
    EBELN     EBELN          Purchasing Document Number
    EBELP     EBELP          Item Number of Purchasing Document
    ZZ_RETAINAGE      ZZRETAINAGE           Retainage
    Detailed logic
    <b>LZPTP_PORETAINAGETOP (TOP INCLUDE) FG: ZPTP_PORETAINAGE</b>
    persistent item data
    data: git_persistent_data type sorted table of ztptp_item
                             with unique key mandt ebeln ebelp,
    actual item data
          git_data            type sorted table of ztptp_item
                             with unique key mandt ebeln ebelp.
    persistent header data
    data: git_persistent_head type sorted table of ztptp_header
                             with unique key mandt ebeln ,
    actual header data
          git_head            type sorted table of ztptp_header
                             with unique key mandt ebeln .
    dynpro output structure
    tables: zsptp_item,
            zsptp_header.
    definitions required for dynpro/framework integration
    data: ok-code type sy-ucomm.
    Following is a SAP include.
    include lmeviewsf01.
    <b>1. ZPTP_COMMIT_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_COMMIT. In this Function module we update the database table ZTPTP_HEADER i.e. as per a change / insert or delete command at the header level. This database table’s size will always be low. It just contains the PO s data just being edited or created.
    The interface would look like:
         TABLES
          IMT_DATA_NEWHD STRUCTURE ZTPTP_HEADER
          IMT_DATA_OLDHD STRUCTURE ZTPTP_HEADER
          Comparing the old and new data we update 3 different internal tables and using these we can update the internal tables ZTPTP_HEADER before actually updating the database table EKKO.A similar logic is coded in the sample FM : MEPOBADIEX_COMMIT
    <b>
    2. ZPTP_COMMIT_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_COMMIT. In this Function module we update the database table ZTPTP_HEADER i.e. as per a change / insert or delete command at the item level. This database table’s size will always be low. It just contains the PO s latest data just being edited or created.
    The interface would look like :
         TABLES
           IMT_DATA_NEW STRUCTURE  ZTPTP_ITEM
      IMT_DATA_OLD STRUCTURE  ZTPTP_ITEM
          Comparing the old and new data we update 3 different internal tables and using these we can update the internal tables ZTPTP_HEADER before actually updating the database table EKPO. A similar logic is coded in the sample FM : MEPOBADIEX_COMMIT
    <b>3. ZPTP_GET_DATA_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_GET_DATA. This FM is responsible for updating an internal table (git_head) which would hold the data the user has changed or created or displayed till the current point of time. It would also hold the latest customer header data that is to be displayed in case of a change transaction.
    The interface would be as follows:
    Local Interface:
    IMPORTING
         REFERENCE(IM_EBELN) TYPE  EBELN
         REFERENCE(IM_EBELP) TYPE  EBELP OPTIONAL
    EXPORTING
         REFERENCE(EX_HEAD) TYPE  ZTPTP_HEADER
    Read expense type from git_header. If not found, get expense value from EKKO.
    <b>4. ZPTP_GET_DATA_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_GET_DATA. This FM is responsible for updating an internal table (git_data) which would hold the data the user has changed or created or displayed till the current point of time. It would also hold the latest customer item data that is to be displayed in case of a change transaction.
    The interface would be as follows:
    Local Interface:
      IMPORTING
         REFERENCE(IM_EBELN) TYPE  EBELN
         REFERENCE(IM_EBELP) TYPE  EBELP
      EXPORTING
         VALUE(EX_DATA) TYPE  ZTPTP_ITEM
    Read Retainage from git_data. If not found, get Retainage value from EKPO.
    <b>5.  ZPTP_INIT FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_INIT. This FM is responsible for clearing the header and item internal tables.
    clear: git_persistent_data[], git_data[],git_persistent_head[],git_head[].
    <b>6. ZPTP_OPEN FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_OPEN.  This FM is responsible for existing information from respective database tables.
    The interface would be as follows:
    Local Interface:
    IMPORTING
    REFERENCE(IM_EBELN) TYPE  EBELN
    Get Expense type and Retainage from customer created Tables and assign it to respective global internal tables.
    <b>7.  ZPTP_POP_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POP. This FM is responsible for getting header values from screen fields.
    The interface would be as follows:
    Local Interface:
    EXPORTING
       REFERENCE(EX_DYNP_DATAHD) TYPE  ZSPTP_HEADER
    get dynpro data
      ex_dynp_datahd = zsptp_header.
    <b>8.  ZPTP_POP_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POP. This FM is responsible for getting item values from screen fields.
    The interface would be as follows:
    Local Interface:
    EXPORTING
       REFERENCE(EX_DYNP_DATA) TYPE  ZSPTP_ITEM
    get dynpro data
      ex_dynp_data = zsptp_item.
    <b>9.  ZPTP_POST_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POST. This FM is responsible for preparing header data for posting.
    Local Interface:
    IMPORTING
       VALUE(IM_EBELN) TYPE  EBELN
    prepare customers data for posting
      check not im_ebeln is initial.
      lit_data_newhd[] = git_head.
      lit_data_oldhd[] = git_persistent_head.
      lwa_head-mandt = sy-mandt.
      lwa_head-ebeln = im_ebeln.
      modify lit_data_newhd from lwa_head transporting mandt ebeln where ebeln is initial.
    Commit data in Database ztptp_header.
      call function 'ZPTP_COMMIT_HEADER'
        tables
          imt_data_newhd = lit_data_newhd
          imt_data_oldhd = lit_data_oldhd.
    <b>10. ZPTP_POST_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_POST. This FM is responsible for preparing item data for posting.
    "Local Interface:
    IMPORTING
        VALUE(IM_EBELN) TYPE  EBELN
      data: lwa_data like line of git_data,
            lit_data_new type standard table of ztptp_item,
            lit_data_old type standard table of ztptp_item.
    prepare customers data for posting
      check not im_ebeln is initial.
      lit_data_new[] = git_data.
      lit_data_old[] = git_persistent_data.
      lwa_data-mandt = sy-mandt.
      lwa_data-ebeln = im_ebeln.
      modify lit_data_new from lwa_data transporting mandt ebeln where ebeln is initial.
    Commit data in Database ztptp_item.
      call function 'ZPTP_COMMIT_ITEM' in update task
        tables
          imt_data_new = lit_data_new
          imt_data_old = lit_data_old.
    <b>11.  ZPTP_PUSH_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_PUSH. This FM is responsible for populating header values to screen fields.
    Local Interface:
      IMPORTING
         REFERENCE(IM_DYNP_DATAHD) TYPE  ZSPTP_HEADER
    set dynpro data
      zsptp_header = im_dynp_datahd .
    <b>12.  ZPTP_PUSH_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_PUSH. This FM is responsible for populating item values to screen fields.
    Local Interface:
    IMPORTING
       REFERENCE(IM_DYNP_DATA) TYPE  ZSPTP_ITEM
    set dynpro data
      zsptp_item = im_dynp_data .
    <b>13. ZPTP_SET_DATA_HEADER FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_SET_DATA. This FM is responsible for keep update header  information in git_header.
    delete a line from git_data
        delete table git_head with table key mandt = sy-mandt
                                            ebeln = im_datahd-ebeln.
    update customer data
        read table git_head assigning <lf_datahd> with table key
                                            mandt = sy-mandt
                                            ebeln = im_datahd-ebeln.
        if sy-subrc is initial.
    update existing data
          <lf_datahd>-zz_exptype = im_datahd-zz_exptype.
        else.
    make a new entry into the data table
          lwa_head = im_datahd.
          lwa_head-mandt = sy-mandt.
          insert lwa_head into table git_head.
        endif.
    <b>14. ZPTP_SET_DATA_ITEM FG: ZPTP_PORETAINAGE</b>
    Get the sample function module code from the standard FM: MEPOBADIEX_SET_DATA. This FM is responsible for keep update item information in git_data.
    delete a line from git_data
        delete table git_data with table key mandt = sy-mandt
                                            ebeln = im_data-ebeln
                                            ebelp = im_data-ebelp.
    update customer data
        read table git_data assigning <lf_data> with table key
                                            mandt = sy-mandt
                                            ebeln = im_data-ebeln
                                            ebelp = im_data-ebelp.
        if sy-subrc is initial.
    update existing data
          <lf_data>-zz_retainage = im_data-zz_retainage.
        else.
    make a new entry into the data table
          lwa_data = im_data.
          lwa_data-mandt = sy-mandt.
          insert lwa_data into table git_data.
        endif.
    <b>DETAILED SCREEN DESIGN SPECIFICATIONS</b>
    <b>screen 0002</b>
    Item Retainage
    ZSPTP_ITEM-ZZ_RETAINAGE     DEC     5     Retainage
    Screen Logic / Process before Output
      call method call_view->handle_event( 'PBO' ).
    Screen Logic / Process after Input
    call method call_view->handle_event( 'PAI' )
    <b>Screen 0003</b>
    Header: Expense type
    ZSPTP_HEADER-ZZ_EXPTYPE     NUMC     4     Expense Type
    Screen Logic / Process before Output
      call method call_view->handle_event( 'PBO' ).
    Screen Logic / Process after Input
    call method call_view->handle_event( 'PAI' )
    <b>DETAILED CLASS DESIGN SPECIFICATIONS</b>
    <b>A. ZCL_IM_ME_GUI_PO_CUST</b>
    Description
    Imp. Class ZME_GUI_PO_CUST
    Attributes
    Name     Level     Visibility     Type
    SUBSCREEN1     Constant     Public     MEPO_NAME
    SUBSCREEN2     Constant     Public     MEPO_NAME
    DYNP_DATA_PBO     Instance Attribute     Private     ZSPTP_ITEM
    DYNP_DATA_PAI     Instance Attribute     Private     ZSPTP_ITEM
    DYNP_DATA_PBOHD     Instance Attribute     Private     ZSPTP_HEADER
    DYNP_DATA_PAIHD     Instance Attribute     Private     ZSPTP_HEADER
    Methods
    Name     Level     Visibility
    IF_EX_ME_GUI_PO_CUST~SUBSCRIBE     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP     Instance Attribute     Public
    IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL     Instance Attribute     Public
    <b>1. SUBSCRIBE</b>
    Description
    Publisch Customer's Own Screens
    Detailed logic
      when lc_item.
    the name is a unique identifier for the subscreen and defined in this class definition
      lwa_subscriber-name = subscreen1.
    the dynpro number to use
      lwa_subscriber-dynpro = '0002'.
    the program where the dynpro can be found
      lwa_subscriber-program = 'SAPLZPTP_PORETAINAGE'.
    each subscreen needs his own DDIC-Structure
      lwa_subscriber-struct_name = 'ZSPTP_ITEM'.
    a label can be defined
      lwa_subscriber-label = text-001.
    the position within the tabstrib can be defined
      lwa_subscriber-position = 1.
      lwa_subscriber-height = 7.
      append lwa_subscriber to re_subscribers.
    Header subscreen
      when lc_header.
    the name is a unique identifier for the subscreen and defined in this class definition
      lwa_subscriber-name = subscreen2.
    the dynpro number to use
      lwa_subscriber-dynpro = '0003'.
    the program where the dynpro can be found
      lwa_subscriber-program = 'SAPLZPTP_PORETAINAGE'.
    each subscreen needs his own DDIC-Structure
      lwa_subscriber-struct_name = 'ZSPTP_HEADER'.
    a label can be defined
      lwa_subscriber-label = text-002.
    the position within the tabstrib can be defined
      lwa_subscriber-position = 1.
      lwa_subscriber-height = 7.
      append lwa_subscriber to re_subscribers.
      endcase.
    <b>2. MAP_DYNPRO_FIELDS</b>
    Description
    Build Up Field Catalog
    Detailed logic
      loop at ch_mapping assigning <lf_mapping>.
    *Assignment of metafields to the customer fields.
        case <lf_mapping>-fieldname.
          when 'EBELN'.       <lf_mapping>-metafield = mmmfd_preq_no_po.
          when 'EBELP'.       <lf_mapping>-metafield = mmmfd_preq_item_po.
          when 'ZZ_RETAINAGE'. <lf_mapping>-metafield = mmmfd_cust_01.
          when 'ZZ_EXPTYPE'.   <lf_mapping>-metafield = mmmfd_cust_02.
        endcase.
      endloop.
    <b>
    3. TRANSPORT_FROM_MODEL</b>
    Description
    Data Transport from Business Object
    Detailed logic
        when subscreen1.
    Get the item object
          mmpur_dynamic_cast lif_item im_model.
          check not lif_item is initial.
          lwa_mepoitem = lif_item->get_data( ).
    transport customer fields
          call function 'ZPTP_GET_DATA_ITEM'
            exporting
              im_ebeln = lwa_mepoitem-ebeln
              im_ebelp = lwa_mepoitem-ebelp
            importing
              ex_data  = lwa_customer.
    store info for later use
          move-corresponding lwa_mepoitem to dynp_data_pbo.
          move lwa_customer-zz_retainage to dynp_data_pbo-zz_retainage.
        when subscreen2.
    Get the header object
          mmpur_dynamic_cast lif_header im_model.
          check not lif_header is initial.
    transport standard fields
          lwa_mepohead = lif_header->get_data( ).
    transport customer fields
          call function 'ZPTP_GET_DATA_HEADER'
            exporting
              im_ebeln = lwa_mepohead-ebeln
            importing
              ex_head  = lwa_customerhd.
    store info for later use
          move-corresponding lwa_mepohead to dynp_data_pbohd.
          if not lwa_customerhd-zz_exptype is initial.
            move lwa_customerhd-zz_exptype to dynp_data_pbohd-zz_exptype.
          else.
            move dynp_data_paihd-zz_exptype to dynp_data_pbohd-zz_exptype.
          endif.
        when others.
      endcase.
    <b>4. TRANSPORT_TO_DYNP</b>
    Description
    Data Transport to Screen
    Detailed logic
    case im_name.
        when subscreen1 .
       Pushing item data to screen fields
          call function 'ZPTP_PUSH_ITEM'
            exporting
              im_dynp_data = dynp_data_pbo.
        when subscreen2 .
       Pushing header data to screen fields
          call function 'ZPTP_PUSH_HEADER'
            exporting
              im_dynp_datahd = dynp_data_pbohd.
        when others.
      endcase.
    <b>5. TRANSPORT_FROM_DYNP</b>
    Description
    Data Transport from Screen
    Detailed logic
    case im_name.
        when subscreen1.
    Getting item data from screen fields
          call function 'ZPTP_POP_ITEM'
            importing
              ex_dynp_data = dynp_data_pai.
          if dynp_data_pai ne dynp_data_pbo
           or dynp_data_paihd ne dynp_data_pbohd.
    If data  changed we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
        endif.
        when subscreen2.
    Getting header data from screen fields
          call function 'ZPTP_POP_HEADER'
            importing
              ex_dynp_datahd = dynp_data_paihd.
          if dynp_data_paihd ne dynp_data_pbohd
          or dynp_data_pai ne dynp_data_pbo.
    If data changed we have to notify the framework
    to transport data to the model
            re_changed = mmpur_yes.
          endif.
        when others.
      endcase.
    <b>6. TRANSPORT_TO_MODEL</b>
    Description
    Treatment of Function Codes
    Detailed logic
      case im_name.
        when subscreen1.
    is it an item? im_model can be header or item.
          mmpur_dynamic_cast lif_item im_model.
          check not lif_item is initial.
          lwa_mepoitem = lif_item->get_data( ).
    standard fields changed?
          if dynp_data_pbo-ebeln ne dynp_data_pai-ebeln  or
             dynp_data_pbo-ebelp ne dynp_data_pai-ebelp or
             dynp_data_pbo-zz_retainage ne dynp_data_pai-zz_retainage.
    update standard fields
            lwa_mepoitem-ebeln = dynp_data_pai-ebeln.
            lwa_mepoitem-ebelp = dynp_data_pai-ebelp.
            lwa_mepoitem-zzretainage = dynp_data_pai-zz_retainage.
            call method lif_item->set_data( lwa_mepoitem ).
          endif.
    customer fields changed?
          if dynp_data_pbo-zz_retainage ne dynp_data_pai-zz_retainage.
            call function 'ZPTP_GET_DATA_ITEM'
              exporting
                im_ebeln = lwa_mepoitem-ebeln
                im_ebelp = lwa_mepoitem-ebelp
              importing
                ex_data  = lwa_customer.
            lwa_customer-zz_retainage = dynp_data_pai-zz_retainage.
    Commit changes to database.
            call function 'ZPTP_SET_DATA_ITEM'
              exporting
                im_data = lwa_customer.
          endif.
        when subscreen2.
    is it an header? im_model can be header or item.
          mmpur_dynamic_cast lif_header im_model.
          check not lif_header is initial.
          lwa_mepohead = lif_header->get_data( ).
    standard fields changed?
          if dynp_data_pbohd-ebeln ne dynp_data_paihd-ebeln or
          dynp_data_pbohd-zz_exptype ne dynp_data_paihd-zz_exptype.
    update standard fields
            lwa_mepohead-ebeln = dynp_data_paihd-ebeln.
            lwa_mepohead-zzexptype = dynp_data_paihd-zz_exptype.
            call method lif_header->set_data( lwa_mepohead ).
          endif.
    customer fields changed?
          if dynp_data_pbohd-zz_exptype ne dynp_data_paihd-zz_exptype.
            call function 'ZPTP_GET_DATA_HEADER'
              exporting
                im_ebeln = lwa_mepohead-ebeln
              importing
                ex_head  = lwa_customerhd.
            lwa_customerhd-zz_exptype = dynp_data_paihd-zz_exptype.
    Commit changes to database.
            call function 'ZPTP_SET_DATA_HEADER'
              exporting
                im_datahd = lwa_customerhd.
          endif.
        when others.
      endcase.
    <b>
    B. ZCL_IM_ME_PROCESS_PO_CUST</b>
    Description
    Imp. Class for BAdI imp. ZME_PROCESS_PO_CUST
    Methods
    Name     Level     Visibility
    IF_EX_ME_PROCESS_PO_CUST~INITIALIZE     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~OPEN     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~PROCESS_HEADER     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~POST     Instance Attribute     Public
    IF_EX_ME_PROCESS_PO_CUST~CLOSE     Instance Attribute     Public
    <b>
    1. INITIALIZE</b>
    Description
    Initializations (Invoked Once Only)
    Detailed logic
    initializations
      call function 'ZPTP_INIT'.
    <b>2. OPEN</b>
    Description
    Open a Purchase Order
    Detailed logic
    data: lwa_mepoheader type mepoheader.
    read customer data
    this has to be done when we open a persistent object
      check im_trtyp eq 'V' or im_trtyp eq 'A'.
      lwa_mepoheader = im_header->get_data( ).
    read customer data from database
      call function 'ZPTP_OPEN'
        exporting
          im_ebeln = lwa_mepoheader-ebeln.
    <b>3. PROCESS_HEADER</b>
    Description
    Processing of Header Data
    Detailed logic
    data: lwa_mepohead type mepoheader,
            lwa_customerhd type ztptp_header.
      include mm_messages_mac. "useful macros for message handling
    here we check customers data
      lwa_mepohead = im_header->get_data( ).
      if lwa_mepohead-loekz eq 'D'.
    a physical deletion of the header was carried out.
        lwa_customerhd-ebeln = lwa_mepohead-ebeln.
        call function 'ZPTP_SET_DATA_HEADER'
          exporting
            im_datahd                  = lwa_customerhd
            im_physical_delete_request = 'X'.
      endif.
    <b>4. PROCESS_ITEM</b>
    Description
    Processing of Item Data
    Detailed logic
    data: lwa_mepoitem type mepoitem,
            lwa_customer type ztptp_item.
      include mm_messages_mac. "useful macros for message handling
    here we check customers data
      lwa_mepoitem = im_item->get_data( ).
      if lwa_mepoitem-loekz eq 'D'.
    a physical deletion of the item was carried out. therrefor we have to
    delete customer data on the level of the item
        lwa_customer-ebeln = lwa_mepoitem-ebeln.
        lwa_customer-ebelp = lwa_mepoitem-ebelp.
        call function 'ZPTP_SET_DATA_ITEM'
          exporting
            im_data                    = lwa_customer
            im_physical_delete_request = 'X'.
      endif.
    <b>5. POST</b>
    Description
    Post
    Detailed logic
    *Posting header data
          call function 'ZPTP_POST_HEADER'
            exporting
              im_ebeln       = im_ebeln.
    *Posting item data
          call function 'ZPTP_POST_ITEM'
            exporting
              im_ebeln       = im_ebeln.
    <b>
    6. CLOSE</b>
    Description
    Closing Processing
    Detailed logic
    close customer data
      call function 'ZPTP_INIT'.

Maybe you are looking for