SE18 -- BADI : ME_PROCESS_REQ_CUST

HI gurus
I have a question regarding the subscreen capabilities in the BADI : ME_PROCESS_REQ_CUST.
I can see the tab "subscreen" and the fields "call program" , "scr.no.", subscreen area and Desciption. Do anyone know what funtion this is and how I can use this one?
Thanks
Alex

This is used to create your own screens in Enjoy Pur.reqs. You can define your own screen there by adding fields to relavent tables and fetch data. Similar to adding a customer sub screen/screen to vendor master or customer.
Search forum for adding subscreen to pur req's or vendor master or customer master. The process similar to all of them.

Similar Messages

  • Need to stop posting a line item in PR using BADI ME_PROCESS_REQ_CUST

    Hi All,
    I have a requirement to check the combination of the GLaccount and project and if the combination is not allowed i need to show an error message and to stop the user from saving the Purchase Requisition.
    For this i have coded in BADI ME_PROCESS_REQ_CUST in PROCESS_ACCOUNT method.
    the badi is triggered and the error message is also shown but it is not stopping the user from saving the Purchase Requisition.
    i want to know how to invalidate a line item as we do in PO by calling item->invalidate( ) method.
    i couldnt find any method like that in the ME_PROCESS_REQ_CUST BADI.
    Please anyone of us let me know how to invalidate a line item of a purchase requesition.
    Thanks,
    Srinath S

    Hello Srinath
    Looking at the signature of interface method PROCESS_ACCOUNT it becomes obvious that you cannot stop processing of the PO requisition here.
    You need to implement your validations in method CHECK because here you have a CHANGING parameter CH_FAILED (Nomen est Omen!!!).
    Regards
      Uwe

  • Need code for BADI ME_PROCESS_REQ_CUST

    dear experts,
       I have the below requirement.
    I have to create a new tab for location in Purchase requistion transaction.That i Did.
    I want to insert the data from location field to EBAN-ZSTAND(new field to be created in EBAN).
    I want to save the data in EBAN when i will press save button after selecting the location code.
    please give the code suggestion for BADi ME_PROCESS_REQ_CUST for saving the data into
    the location code (EBAN-ZSTAND).
    Thanks,
    Pilot

    Hi,
    get the item data ....
         *DATA : lt_item TYPE MEREQ_ITEM,
                       ls_item liek line of it_item*
             CALL METHOD im_item->GET_DATA
               RECEIVING
                 RE_DATA = lt_item .
    you will get the data in lt_item.. table
    Thanks,
    Shailaja Ainala.

  • BADI - ME_PROCESS_REQ_CUST- G/L Accounts Error Message

    Hi guys,
    I have a problem regarding autodeterminating G/L Accounts.
    I used BADI ME_PROCESS_REQ_CUST with Method: PROCESS_ACCOUNT.
    For setting the G/L Account I used:
                ls_accounting-sakto  = ls_ctrlacc_b-sakto.
                ls_accountingx-sakto = 'X'.
                CALL METHOD im_account->set_exkn
                  EXPORTING
                    im_exkn = ls_accounting.
                CALL METHOD im_account->set_exknx
                  EXPORTING
                    im_exknx = ls_accountingx.
    The problem is in ME52N (changing mode) when i change the G/L Account and after the BADI Logic, a still receive the transaction error "Enter a G/L Account" which will disappear if i press enter again.
    So ...i need in my BADI Logic , at one point (G/L Account is not initial) to erase from the Message Stack that error.
    How do I do that using data and methods from this BADI method: PROCESS_ACCOUNT?
    Thanks a lot.

    I solve this problem by doing :
    CALL METHOD cl_message_handler_mm=>get_handler
            IMPORTING
              ex_handler = lref_msg.
    CALL METHOD lref_msg->remove_all.
    mmpur_message_force  'E' 'ME'  '083' text-003 '' '' ''.
    Now, I don't know how to set cursor on matkl field
    Any opinions?

  • Need sample code for Using BADI ME_PROCESS_REQ_CUST

    Dear all,
    Initially my requirement is to Validate the Document Type of Purchase Request ion as per material.
    I have created a implementation for BADI : ME_PROCESS_REQ_CUST .
    im new to OOPS-ABAP, so pls send *sample code for how to use these methods PROCESS_ITEM,
    like declarations, assignment of data into internal table  for further validation*.
    Regards,
    NIranjan.G

    Hi,
    get the item data ....
         *DATA : lt_item TYPE MEREQ_ITEM,
                       ls_item liek line of it_item*
             CALL METHOD im_item->GET_DATA
               RECEIVING
                 RE_DATA = lt_item .
    you will get the data in lt_item.. table
    Thanks,
    Shailaja Ainala.

  • How to display Warning messages in BADI ME_PROCESS_REQ_CUST?

    Hi,
    I have implemented BADI ME_PROCESS_REQ_CUST and coded necessary logic according to my requirement in Method  PROCESS_ITEM.
    On a certain condition , I need to display a Warning message.
    I have written the code as follows:--
    message w001(00) with 'XYZ'.
    It didnt work.
    Then, I included the message in message class ZPBS, and coded as follows.
    message w012(zpbs).
    But, still it didnt work..
    Can u guys please guide me what I need to do?
    Thanks,
    Shivaa....

    Hello Shiva
    Have a look at method PO_READ of class CL_PO_HEADER_HANDLE_MM.
    METHOD po_read.
      INCLUDE mm_messages_mac.
      DATA: l_po_number TYPE ekko-ebeln.
      IF im_po_number NE space.
        l_po_number = im_po_number.
      ELSE.
        l_po_number = po_number.
      ENDIF.
    * authority check on transaction code disabled
    * If called via CALL TRANSACTION, this check is already done by basis
    * (see note 358122)
    * restriction of T-code authority check to Enjoy only
      IF for_bapi IS INITIAL.
    * tcode authorization
        IF NOT im_tcode IS INITIAL.
          CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
            EXPORTING
              tcode  = im_tcode
            EXCEPTIONS
              ok     = 0
              not_ok = 1
              OTHERS = 2.
          IF sy-subrc NE 0.
            MESSAGE e172(00) WITH im_tcode INTO gl_dummy.
            mmpur_message_forced 'E' '00' '172' im_tcode '' '' ''.
            ex_result = mmpur_no.
            CALL METHOD set_state( im_state = c_available ).
            EXIT.
          ENDIF.
        ENDIF.
      ENDIF.
    Add the include MM_MESSAGE_MAC to you method and set the message using macro MMPUR_MESSAGE_FORCED.
    I am not sure whether the warning will indeed be displayed while changing an item but it should be displayed when checking the purchase requisition and presumably when saving it.
    Regards
       Uwe

  • How to find table structure for IM_ITEM in badi ME_PROCESS_REQ_CUST

    Dear Experts,
    How i can find table structure for IM_ITEM in badi ME_PROCESS_REQ_CUST.

    Hi Ganesh,
    double click the method IF_EX_ME_PROCESS_REQ_CUST~PROCESS_ITEM
    double click TYPE REF TO IF_PURCHASE_REQUISITION_ITEM
    select get_data and click parameters
    here you can find the structure mereq_item.
    This is the process to find the structure....:-)

  • Badi ME_PROCESS_REQ_CUST Sample Code required for changing the values

    Dear Friends,
    I am new to the Badi technology. We would like to populate/change the standard field values, (Purchasing group) during Purchase Requisition creation/change.
    Method --> PROCESS_ITEM.
    I tried the following code, but system blnaks out all the field values entered during PR creation.
    Appreciate, if you could provide me some sample code which can be of help.
    Reg
    Kumar
    Sample code----
    METHOD if_ex_me_process_req_cust~process_item .
    DATA: k_mereqitem          TYPE mereq_item,
            om_data              type mereq_item,
            om_datax             type mereq_itemx,
        k_mereqitem = im_item->get_data( ).
        check im_count = 1.
        if k_mereqitem-bsart = 'ST' and
           k_mereqitem-loekz = ' '.
        om_data-pstyp = '5'. " assign default item category code
        om_data-bnfpo = k_mereqitem-bnfpo.
        om_data-WERKS = k_mereqitem-WERKS.
        om_datax-pstyp = 'X'.
        call method im_item->set_datax
             exporting im_datax = om_datax.
        call method im_item->set_data
             exporting im_data =  om_data.
        endif.
    ENDMETHOD.

    Hi Kumar,
    i have not a special solution for your case, but i use this BADI with great effort
    As my comments in example are in german lg. i explain in short words what i do:
    X) define data
    1) select data from base item
    1a) header-data
    1b) item data (easy)
    1c) accounting data
    2+3) check field values, post warning message + mostly change values + sometimes set cursor focus on field
    Have a look and give me some points if my example increased your BADI knowledge
    regards
    Jörg
    METHOD if_ex_me_process_po_cust~process_item .
    * Business-Add-Inn ME_PROCESS_PO_CUST
    * Jörg Sauterleute - 23.12.2005
    * Ablauf:
    * 1. Datenbschaffung
    * 2. Feldänderungen prüfen + Warnung ausgeben
    * 3. Feldinhalte prüfen + evtl. ändern u. Hinweis ausgeben
      DATA: ls_mepoitem TYPE mepoitem,
            ls_mepoheader TYPE mepoheader,
            ls_mepoaccounting TYPE mepoaccounting.
    * Interfacereferenz auf <if_purchase_order_mm>
      DATA: header_obj TYPE REF TO if_purchase_order_mm.
    * Interfacereferenz auf <if_purchase_order_account_mm> über Tabelle
      DATA: it_accountings TYPE purchase_order_accountings, "Tabelle
            accounting_obj TYPE purchase_order_accounting.
    * Include für Ausgabe von Meldungen
    * im BAdI ME_PROCESS_PO_CUST niemals ABAP-Statement MESSAGE verwenden!
      INCLUDE mm_messages_mac.
    * Hilfsvariablen
      DATA: h_change_mepoitem TYPE c,
            h_text TYPE string.
      IF sy-sysid = 'HLT'. break sau. ENDIF.
    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    * 1. Datenbeschaffung
    * Kopfdaten
      header_obj = im_item->get_header( ).
      ls_mepoheader = header_obj->get_data( ).
    * Positionsdaten
      ls_mepoitem = im_item->get_data( ).
    * Kontierungsdaten (Accounting) über Tabelle it_accountings
      it_accountings = im_item->get_accountings( ).
    * ...IF eingebaut, weil sonst später Abbruch, wenn sy-subrc <> 0
      IF NOT ls_mepoitem-knttp IS INITIAL.
        LOOP AT it_accountings INTO accounting_obj.
          ls_mepoaccounting = accounting_obj-accounting->get_data( ).
        ENDLOOP.
      ENDIF.
    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    * 2. Daten prüfen -> Warnmeldung
    * Feld Empfänger (Kontierung) prüfen -> Warnmeldung
      IF ls_mepoheader-ekorg = '1000' AND
         ls_mepoheader-bsart = 'IB'.
        IF NOT ls_mepoitem-knttp IS INITIAL.
          CASE ls_mepoheader-ekgrp.
            WHEN '500' OR '501'.
              IF NOT ls_mepoaccounting-wempf IS INITIAL.
                mmpur_metafield mmmfd_recipient.       "Warenempfänger - Cursor setzen
                mmpur_message_forced 'I' 'ME' '303' text-011 '' '' ''.
    * Warnmeldung wieder aus Protokoll entfernen.
                IF ls_mepoaccounting-wempf IS INITIAL.
                  mmpur_remove_messages_by_id ls_mepoaccounting-id.
                  mmpur_business_obj_id ls_mepoaccounting-id.
                ENDIF.
              ENDIF.
            WHEN OTHERS.
              IF ls_mepoaccounting-wempf IS INITIAL.
                mmpur_metafield mmmfd_recipient.       "Warenempfänger - Cursor setzen
                mmpur_message_forced 'W' 'ME' '303' text-010 '' '' ''.
              ENDIF.
    * Warnmeldung wieder aus Protokoll entfernen.
              IF NOT ls_mepoaccounting-wempf IS INITIAL.
                mmpur_remove_messages_by_id ls_mepoaccounting-id.
                mmpur_business_obj_id ls_mepoaccounting-id.
              ENDIF.
          ENDCASE.
        ENDIF.
      ENDIF.
    * Ende Feld Empfänger (Kontierung) prüfen -> Warnmeldung
    * Ende test
    * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    * 3. Positionsdaten prüfen/ändern -> setzen
      CLEAR: h_change_mepoitem,
             h_text.
    * Kennzeichen Wareneingang prüfen/ändern
    * Belegart 'NB' immer mit "Wareneingang" wegen Log. Rechnungsprüfung
    * Belegart 'IB' immer ohne "Wareneingang" weil Einsatz Workflow
    * (Kennzeichen 'WEPOS' setzen/nicht setzen)
      IF NOT ls_mepoitem-knttp IS INITIAL.
        CASE ls_mepoheader-bsart.
          WHEN 'NB'.
    * Prüfung ob gesetzt
    * Wenn nicht, dann setzen und Daten übergeben
    * Cursor auf Metafeld (aus Typgruppe MMMFD) für Fehlerbehandlung
            IF ls_mepoitem-wepos IS INITIAL.
              ls_mepoitem-wepos = 'X'.
              h_change_mepoitem = 'X'.
    *           im_item->set_data( EXPORTING im_data = ls_mepoitem ).
              h_text = text-001.
              mmpur_metafield mmmfd_gr_ind .       "WE-Kennzeichen - Cursor setzen
    *           message erst später ausführen!
    *           mmpur_message_forced 'I' 'ME' '303' text-001 '' '' ''.
            ENDIF.
          WHEN 'IB'.
    * Prüfung ob nicht gesetzt
    * Wenn doch, dann entfernen und Daten übergeben
    * Cursor auf Metafeld (aus Typgruppe MMMFD) für Fehlerbehandlung
            IF NOT ls_mepoitem-wepos IS INITIAL.
              ls_mepoitem-wepos = ' '.
              h_change_mepoitem = 'X'.
    *            im_item->set_data( EXPORTING im_data = ls_mepoitem ).
              h_text = text-002.
              mmpur_metafield mmmfd_gr_ind .       "WE-Kennzeichen - Cursor setzen
    *           message erst später ausführen!
    *           mmpur_message_forced 'I' 'ME' '303' text-002 '' '' ''.
            ENDIF.
        ENDCASE.
      ENDIF.
    * Ende Kennzeichen Wareneingang prüfen/ändern
    * Kennzeichen aut. WE-Abrech. (Rechnung) prüfen/ändern
    * (für autom. Gutschriftsverfahren Verpackungseinkauf)
    * Kreditordaten
      DATA: it_lfm1 TYPE TABLE OF lfm1,
            wa_lfm1 TYPE lfm1.
      IF ls_mepoheader-ekorg = '1000' AND
         ls_mepoheader-bsart = 'NB'   OR
         ls_mepoheader-bsart = 'KA'.
        IF ls_mepoitem-xersy IS INITIAL AND
           ls_mepoitem-umson IS INITIAL.                    "kostenlose Lieferung
          SELECT * FROM lfm1 INTO CORRESPONDING FIELDS OF TABLE it_lfm1
                   WHERE lifnr = ls_mepoheader-lifnr AND
                         ekorg = ls_mepoheader-ekorg.
          IF sy-subrc = 0.
            READ TABLE it_lfm1 INTO wa_lfm1 INDEX 1.
            IF wa_lfm1-xersy = 'X'.
              ls_mepoitem-xersy = 'X'.
              h_change_mepoitem = 'X'.
    *          im_item->set_data( EXPORTING im_data = ls_mepoitem ).
              h_text = text-005.
              mmpur_metafield mmmfd_ers.       " Kennz. aut.WE-Abrechnung - Cursor setzen
    *            message erst später ausführen!
    *            mmpur_message_forced 'I' 'ME' '303' text-005 '' '' ''.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    * Ende Kennzeichen aut. WE-Abrech. (Rechnung) prüfen/ändern
    * Kennzeichen WE-bezogene Rechnungsprüfung (Rechnung) prüfen/ändern
    * (für autom. Gutschriftsverfahren Verpackungseinkauf)
    * Kreditordaten bereits deklariert
    *  DATA: it_lfm1 TYPE TABLE OF lfm1,
    *        wa_lfm1 TYPE lfm1.
      IF ls_mepoitem-knttp IS INITIAL.
    * nicht anwenden bei kontierten Bestellungen
        IF ls_mepoitem-pstyp = 0.
    * nicht anwenden bei gefülltem Positionstyp (z.B. 'L' = Lohnbearbeitung, Preis 0,00 EUR)
          IF ls_mepoheader-ekorg = '1000' AND
             ls_mepoheader-bsart = 'NB'   OR
             ls_mepoheader-bsart = 'KA'.
            IF ls_mepoitem-webre IS INITIAL AND
               ls_mepoitem-umson IS INITIAL.                    "kostenlose Lieferung
              SELECT * FROM lfm1 INTO CORRESPONDING FIELDS OF TABLE it_lfm1
                       WHERE lifnr = ls_mepoheader-lifnr AND
                             ekorg = ls_mepoheader-ekorg.
              IF sy-subrc = 0.
                READ TABLE it_lfm1 INTO wa_lfm1 INDEX 1.
                IF wa_lfm1-webre = 'X'.
                  ls_mepoitem-webre = 'X'.
                  h_change_mepoitem = 'X'.
    *          im_item->set_data( EXPORTING im_data = ls_mepoitem ).
                  h_text = text-006.
                  mmpur_metafield mmmfd_gr_based_iv.   "WE-bezogene RP - Cursor setzen
    *            message erst später ausführen!
    *            mmpur_message_forced 'I' 'ME' '303' text-006 '' '' ''.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    * Ende Kennzeichen WE-bezogene Rechnungsprüfung (Rechnung) prüfen/ändern
    ** Kennzeichen Auftragsbestätigungspflicht prüfen/ändern
    ** (bisher nur Natec)
    ** Infosatzdaten (Konditionen) deklarieren
    ** Verweis of Tabelle mit Kopfzeilen immer mit TYPE TABLE OF
    *  DATA: it_ekomd TYPE TABLE OF ekomd,
    *        wa_ekomd TYPE ekomd.
    *  IF ls_mepoheader-ekorg = '1300' AND
    *     ls_mepoheader-bsart = 'NB'   .
    *    CALL FUNCTION 'ME_GET_INFORECORD_CONDITIONS'
    *      EXPORTING
    *        i_ekorg = ls_mepoheader-ekorg
    *        i_esokz = '0'                                       " '0' = NB
    *        i_infnr = ls_mepoitem-infnr
    *        i_lifnr = ls_mepoheader-lifnr
    *        i_matkl = ls_mepoitem-matkl
    *        i_matnr = ls_mepoitem-matnr
    *        i_werks = ls_mepoitem-werks
    *      TABLES
    *        tekomd  = it_ekomd.
    *    SORT it_ekomd BY datbi DESCENDING.
    *    READ TABLE it_ekomd INTO wa_ekomd INDEX 1.
    *    CASE ls_mepoheader-ekorg.
    *      WHEN '1300'.
    **     Anforderung Natec: wenn Infosatz-Kondition
    **       a)  leer o. nicht gültig  => AB setzen, wenn fehlt
    **       b)  älter       2 Monate  => AB setzen, wenn fehlt
    **       c)  nicht älter 2 Monate  => AB entfernen, wenn gesetzt
    **     Hilfsvariablen
    *        DATA: h_vgldat   TYPE sy-datum.   " Vergleichsdatum
    *        DATA: h_ergebnis TYPE c.
    **     Alter der Infosatzkondition ermitteln.
    *        CALL FUNCTION 'CCM_GO_BACK_MONTHS'
    *          EXPORTING
    *            currdate   = sy-datum
    *            backmonths = '002'
    *          IMPORTING
    *            newdate    = h_vgldat.
    *        IF wa_ekomd-datbi < sy-datum OR    " gefunden Kondition nicht gültig oder
    *           wa_ekomd-datbi IS INITIAL.      " keine Kondition gefunden
    *          h_ergebnis = 'a'.
    *        ENDIF.
    *        IF wa_ekomd-datab < h_vgldat.
    *          h_ergebnis = 'b'.
    *        ENDIF.
    *        IF wa_ekomd-datab > h_vgldat.
    *          h_ergebnis = 'c'.
    *        ENDIF.
    **       Prüfung ob nicht gesetzt
    *        IF ls_mepoitem-kzabs = ' ' AND
    *                  h_ergebnis = 'a' OR
    *                  h_ergebnis = 'b' .
    *          ls_mepoitem-kzabs = 'X'.
    *          h_change_mepoitem = 'X'.       "Merker setzen, geändert wird am Schluss
    **               im_item->set_data( EXPORTING im_data = ls_mepoitem ).
    *          h_text = text-003.
    **               message erst später ausführen!
    **               mmpur_message_forced 'I' 'ME' '303' text-004 '' '' ''.
    *        ENDIF.
    **       Prüfung ob gesetzt
    *        IF ls_mepoitem-kzabs = 'X' AND
    *           h_ergebnis        = 'c' .
    *          ls_mepoitem-kzabs = ' '.
    *          h_change_mepoitem = 'X'.       "Merker setzen, geändert wird am Schluss
    **               im_item->set_data( EXPORTING im_data = ls_mepoitem ).
    *          h_text = text-004.
    **               message erst später ausführen!
    **               mmpur_message_forced 'I' 'ME' '303' text-003 '' '' ''.
    *        ENDIF.
    *    ENDCASE.
    *  ENDIF.
    ** Ende Kennzeichen Auftragsbestätigungspflicht prüfen/ändern
    * Bestell-/Bestellpreis-Mengeneinheit prüfen/setzen
      DATA: h_txz01 TYPE mepoitem-txz01.   " Materialkurztext
      IF   ( ls_mepoheader-ekorg = '1000' OR
             ls_mepoheader-ekorg = '1500' ) AND
             ls_mepoheader-bsart = 'IB' AND
         NOT ls_mepoitem-knttp IS INITIAL.
    * Vergleichen ob eingegebene Mengeneinheit in Kurztext "avisiert"
        CONCATENATE '(' ls_mepoitem-meins ')' INTO h_txz01.
        IF ls_mepoitem-txz01 CS h_txz01.
          IF NOT ls_mepoitem-meins IS INITIAL.
            mmpur_metafield mmmfd_unit .       "Steuer-Kennz. - Cursor setzen
            mmpur_message_forced 'W' 'ME' '303' 'ME' ls_mepoitem-meins
                                                     text-031 ''.
          ENDIF.
    * sonst standarmäßig 'LE' setzen wegen Problemen bei Obligo
        ELSE.
          IF NOT ls_mepoitem-meins = 'LE'.
            ls_mepoitem-meins = 'LE'.
            ls_mepoitem-bprme = 'LE'.
            h_change_mepoitem = 'X'.
    *      im_item->set_data( EXPORTING im_data = ls_mepoitem ).
            h_text = text-030.
            mmpur_metafield mmmfd_unit .             "Steuer-Kennz. - Cursor setzen
    *      message erst später ausführen!
    *      mmpur_message_forced 'I' 'ME' '303' text-030 '' '' ''.
          ENDIF.
        ENDIF.
      ENDIF.
    * Ende Bestell-Mengeneinheit prüfen/ändern
    * Steuerkennzeichen prüfen/setzen (für EK-Gruppe 500,501)
      IF ls_mepoheader-ekorg = '5000' AND
         ls_mepoitem-matnr IS INITIAL.
        CASE ls_mepoheader-ekgrp.
          WHEN '500' OR '501'.
            IF ls_mepoitem-mwskz IS INITIAL.
              ls_mepoitem-mwskz = 'V4'.
              h_change_mepoitem = 'X'.
    *    "      im_item->set_data( EXPORTING im_data = ls_mepoitem ).
    *          h_text = text-020.
    *          mmpur_metafield mmmfd_tax_code .       "Cursor Steuer-Kennz.
    *    "      message erst später ausführen!
    *    "      mmpur_message_forced 'I' 'ME' '303' text-020 '' '' ''.
            ENDIF.
        ENDCASE.
      ENDIF.
    * Ende Steuerkennzeichen prüfen/ändern
    * zu 3.
    * zum Schluss noch die geänderten mepoitem-xxxx setzen
    * + gleiche Meldungen (I ME 303) ausgeben
      IF h_change_mepoitem = 'X'.
        im_item->set_data( EXPORTING im_data = ls_mepoitem ).
      ENDIF.
      IF NOT h_text IS INITIAL.
        mmpur_message_forced 'I' 'ME' '303' h_text '' '' ''.
      ENDIF.
    * Ende Daten prüfen/ändern -> setzen
    ENDMETHOD.                    "IF_EX_ME_PROCESS_PO_CUST~PROCESS_ITEM

  • BADI: ME_PROCESS_REQ_CUST  Detecting a Deleted Line Item?

    I have implemented this BADI for mapping and for defaulting GL Account Numbers that we read in a custom ZMAPPING_Table. All of my gl account mapping logic is in the 'PROCESS_ACCOUNT' method in this BADI. Just an FYI, there is some code in the 'PROCESS_ITEM' method in this BADI, for another process, as well.
    It is important that I keep track of the line items and their related GL Account Numbers, Material Groups, and all other line item data entered data during the create and change of a Purchase Requisition in a global internal table during runtime. It is working well.
    The issue is that I need to identify when a line item is being deleted in the P.R. during runtime Then,  I can delete the entry in the internal table as well.  When I delete a line item in the P.R. the logic always seems to break in the 'PROCESS_ITEM' method, and never the 'PROCESS_ACCOUNT' method.
    Is there a delete line item indicator, variable, flag, or field, that I can check during runtime in the 'PROCESS_ITEM' method in my ABAP code to see if a line item is in the process of being deleted in the P.R.? it would probably be easiest to validate this in the 'PROCESS_ITEM' method during runtime since we have some code in this method, and it always enters that logic when a line item is deleted. Below are the objects that are being read. If someone has the answer, I'd sure be happy to get the OO code for it as well, since I am still getting my feet wet with OO.
      Thank-You, Tom M.
    INCLUDE mm_messages_mac. "useful macros for message handling
      DATA: ls_mereqitem   TYPE mereq_item,
            l_matkl        TYPE t023-matkl.
      CLEAR: ls_mereqitem.
      ls_mereqitem   = im_item->get_data( ).
      l_matkl = ls_mereqitem-matkl.
      CONDENSE l_matkl.
    * Check if user is using an OLD material group
      DATA: ls_t023  TYPE t023.
      CLEAR: ls_t023.
      SELECT SINGLE begru
        FROM t023
        INTO ls_t023-begru
        WHERE matkl = l_matkl.
      CASE ls_t023-begru.
        WHEN 'OLD'.
    * PRJ0010029 Begin of Change
          IF sy-tcode = 'ME52N'  OR
             sy-tcode = 'ME52'.
            mmpur_message_forced 'W' 'ME' '303' text-002 text-003 '' ''.
          ELSE.
            mmpur_message_forced 'E' 'ME' '303' text-002 text-003 '' ''.
          ENDIF.
    * PRJ0010029 End   of Change
        WHEN OTHERS.
      ENDCASE.
    * PRJ0010029 - End
    Edited by: Tom Matys on Oct 6, 2011 4:55 PM
    Edited by: Tom Matys on Oct 6, 2011 4:55 PM

    You can check the value of the field LOEKZ of the PR item MEREQ_ITEM.
    DATA: ls_mereqitem   TYPE mereq_item.
    ls_mereqitem   = im_item->get_data( ).
    if ls_mereqitem-LOKEZ = 'X'.  " Item deleted
    endif.
    Regards,
    [Naimesh Patel|http://help-abap.zevolving.com/]

  • How to add custom fields in BADI  Subscreen.

    Hi Friends,
    I have to include some custom fields in MFBF tcode.(In make-to-order tab page).
    To do that I have used RM_HR_INTEGRATION  BADI definition  and created implementation for this. In the provided subscreen I tried to add custom fields but it asks access key . I donu2019t know , how to proceed further. Your help is needed.
    Or kindly provide me solution to achieve my requirement.
    Thanks in Advance,
    senthil.

    Hi Venky,
    We can see the documentation in
    se18 -> badi -> LE_SHP_TAB_CUST_HEAD -> display -> documentation button above the definition name
    in the first pop-up of documentation..go to the end which says 'Further notes'
    Further notes
    Documentation on BAdI Interface LE_SHP_TAB_CUST_HEAD
    click on this and we have a detailed description of each method defined in the badi
    Hope it helps
    Regards
    Byju

  • Purchase order : get Account assignment into BADI

    Hi,
    i'm using the BADI ME_PROCESS_REQ_CUST method POST ; in this method i need to access to items and it's work (i use im_header->get_items( ) ). But now i need to access to Account assignment, how can i do this ? the only object available is im_header.
    Be careful, i can't read database because when i create a new document, the data are not saved again.
    Thanks for help.
    Cheer

    IM_HEADER->get_items( ) returns the internal table RE_ITEMS type ref to MMPUR_REQUISITION_IITEMS (of line type MMPUR_REQUISITION_ITEM) which gives the list of  line items.
    Loop through the internal table RE_ITEMS, refer to the component RE_ITEMS-ITEM (type ref to IF_PURCHASE_REQUISITION_ITEM) & use the method RE_ITEMS-ITEM->IF_ACCT_CONTAINER_MM~GET_ITEMS( ) to get the account assignment details related to each item.  This method is to be called in the loop for each line item.
    Regards, Vinod
    P.S : Is it purchase order or Purchase requisition ? By going through the post it is PR, your subject line seems to be wrong.
    Edited by: Vinod Kumar on Jul 15, 2011 2:21 PM

  • User-Exit or BAdI for creating a PR in MRP and in ENJOY

    Dear experts,
    I have the following problem:
    PR are created in 2 ways in our system.
    a) Manually in ENJOY transitions (ME53N)
    b) via MRP run (MD04, MD15,...)
    My request is to fill the field "vendor material number" in the PR with the value of the connected InfoSet  record (if there is one).
    For PRs that are created manually (a) ) I achieved this very easy by using the BAdI  ME_PROCESS_REQ_CUST and the method PROCESS_ITEM. there I read the infoset record and I fill the fields as required.
    Unfortunately the BAdi is not used when a PR is created by using MRP. I then tried to use the user exit SAPLMEWQ with its component EXIT_SAPLMEWQ_001. but as far as I can see this exit is not used in MRP as well.
    Does anyone has a hint for me how I can achieve this functionality for the MRP run as well?
    thanks!
    Alex

    Hi,
    I have implemented the BAdi as you suggested.
    In the method IF_EX_MD_CHANGE_MRP_DATA~CHANGE_MDPSX_EBAN I have set a breakpoint to see if I stop there if I create my PR.
    I have starte a MRP run (report RMMRP000) and then I transferd my planned order to a PR in transaction MD15.
    Unfortunately the PR is created without the program to stop.
    what am I doing wrong? or am I missing something?
    best regards, and thanks for any help!
    Alex

  • BADI For Commitment Item Change for Service PO

    Hi All,
    I want to change the commitment item in the PR on change of Material Group . I used the BADI ME_PROCESS_REQ_CUST for changing the commitment item and its working fine for all types of PR except Service PR .
    In service PR , its changing the commitment item only on clicking the Account Assigment button because at this instant only the BADI is getting trigger .
    I want to change the commitment item without clicking the Account Assigment button (on pressing enter or at saving time ) .
    Is there any way ?
    Thanks
    Manik L Dhakate

    We are using User Exit MEREQ  EXIT_SAPLMEREQ_010
    In our PR creation for ME51n, we are validating the Person through HR Org structure at the Point of Key in his Cost Center, whether he belong to his Department cost center, we use this User Exit MEREQ  EXIT_SAPLMEREQ_010. If he doesnu2019t not belong, the message pop up as u201C Please use your department cost centeru201D. This works very good in case of NB Document Type (Non stock & Materials).
    We have customized ZCPR (Service PRs), but for service PRs, the place where we enter Account Assignment is Different screen, either it is planned or unplanned service, the system take you to another separate screen to key in Cost Center & GL, here the validation is not happening,
    Please suggest & advice us, we tried in this BADI : ME_PROCESS_REQ_CUST, we can fix it. Any User Exit or BADI for Service PRu2019

  • SOLUTION: tab not showing in ME21N/ME22N with badi ME_GUI_PO_CUST

    Hi,
    I implemented BADI's ME_GUI_PO_CUST and ME_PROCESS_PO_CUST to show a custom tab in the header section of ME21N, ME22N and ME23N.
    But after implementing the BADI's, the tab showed up in ME23N, but not in ME21N and ME22N.
    So I started looking for a solution in the SDN forum, and I saw that there were a LOT of people with the same problem, but nobody ever posted a solution.
    So here is the solution:
    So, I added the fields I wanted to show in the structure CI_EKKODB, implemented the BADI ME_GUI_PO_CUST (the methods SUBSCRIBE and MAP_DYNPRO_FIELDS), and the BADI ME_PROCESS_PO_CUST.
    After that the tab showed up in ME23N, not in ME21N or ME22N.
    So I found an SAP note saying the following:
    Question:
    I implemented the 'ME_GUI_PO_CUST' Business Add-In to display customer-
    specific tab titles in the EnjoySAP purchase order. They are only shown in display mode (ME23N) however, not in create or change. Why?
    Solution:
    You may have forgotten to assign a field status to the user-defined fields on these tabs. As a result, the system automatically interprets the field status as 'hidden' in create and change modes. However if a tab contains only hidden fields, then the entire tab is set to hidden. In display mode, fields without a field status are automatically set to display. That is why the tab is displayed in this case.
    To assign a field status to the user-defined fields, use the methods provided for this purpose in the Business Add-In 'ME_PROCESS_PO_CUST' (compare sample source code in the FIELDSELECTION_ITEM method).
    So in my case, I had to add some code to the  FIELDSELECTION_HEADER method of the BADI ME_PROCESS_PO_CUST.
    This is the code:
    method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER.
      DATA: l_persistent TYPE mmpur_bool.
      FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.
    * if the item is already on the database, we disallow to change field badi_bsgru
      l_persistent = im_header->is_persistent( ).
    *   IF l_persistent EQ mmpur_yes.
        READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY metafield = mmmfd_cust_01.
        IF sy-subrc IS INITIAL.
          <fs>-fieldstatus = '*'. " Input
        ENDIF.
    *   ENDIF.
    endmethod.
    But then, I realized that this BADI was never triggered. When I entered one of the transaction codes ME21N, ME22N or ME23N, the code in the fieldselection_header method was never executed.
    So I went to transaction SE18, and entered ME_PROCESS_PO_CUST in 'Enhancement Spot' and pushed the button display.
    And there in the tab 'Enhancement Implementations', I saw an implementation that was not mine, and that did not show up in the overview of the SE18 'BADI NAME' tab for the same BADI... which to me seems strange.
    So as you may know, there can never be more than one active implementation of the BADI ME_PROCESS_PO_CUST.
    So I disactivated my implementation and put my code in the existing implementation.
    And after that it worked!

    implement first badi :ZME_GUI_PO_CUST:
    METHOD if_ex_me_gui_po_cust~subscribe.
    DATA: ls_subscriber LIKE LINE OF re_subscribers.
    * we want to add a customer subscreen on the item detail tab
       CHECK im_application = 'PO'.
       CHECK im_element     = 'HEADER'.
    * each line in re_subscribers generates a subscreen. We add one subscreen in this example
       CLEAR re_subscribers[].
    * the name is a unique identifier for the subscreen and defined in this class definition
       ls_subscriber-name = subscreen1.
    * the dynpro number to use
       ls_subscriber-dynpro = '0001'.
    * the program where the dynpro can be found
       ls_subscriber-program = 'SAPLMEPOBADIEX'.
    * each subscreen needs his own DDIC-Structure
       ls_subscriber-struct_name = 'MEPO_BADI_STRUCT'.
    * a label can be defined
       ls_subscriber-label = text-001.
    * the position within the tabstrib can be defined
       ls_subscriber-position = 4.
    * the height of the screen can be defined here. Currently we suport two screen sizes:
    * value <= 7 a sevel line subscreen
    * value > 7  a 16 line subscreen
       ls_subscriber-height = 7.
       APPEND ls_subscriber TO re_subscribers.
    ENDMETHOD.
    implement 2nd badi : ZME_PROCESS_PO_CUST:
    method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER.
       DATA: l_persistent TYPE mmpur_bool.
       FIELD-SYMBOLS: <fs> LIKE LINE OF ch_fieldselection.
    * if the item is already on the database, we disallow to change field badi_bsgru
       l_persistent = im_header->is_persistent( ).
    *   IF l_persistent EQ mmpur_yes.
         READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY metafield = mmmfd_cust_01.
         IF sy-subrc IS INITIAL.
           <fs>-fieldstatus = '*'. " Input
         ENDIF.
    *   ENDIF.
    endmethod.

  • Warning messages from ME_PROCESS_REQ_CUST  method CHECK

    Hello All,
    I am facing below mentioned issue with BADI ME_PROCESS_REQ_CUST
    1: how can we issue warning messages from BADI ME_PROCESS_REQ_CUST method CHECK?
    2: Check method is called twice if I click on check button in ME52N.
    Thanks

    HI  ,
    You can  use  Below 
    include mm_messages_mac. "useful macros for message handling
    if  ur condition   .
    mmpur_message_forced 'W' 'ME' '083' text-001 '' '' ''.
    endif.
    text-001  : text element   for your description  .
    BUt Warning Message will not keep the screen on error page  .  it will be  better  to use   'E' for error   if you want 
    mmpur_message_forced 'E' 'ME' '083' text-001 '' '' ''.
    regards
    Deepak.
    Edited by: Deepak Dhamat on Oct 21, 2011 8:20 AM

Maybe you are looking for

  • Creation of html file

    Hi All, I want to create an html file containing data from database in table format. and also i want to allow it download so how should i go. Thanks Anil

  • Inconsistent datatypes: expected - got -

    hi i am getting the error Error(45,12): PL/SQL: ORA-00932: inconsistent datatypes: expected - got - in this procedure i tried a lot and landed in confused state.. create or replace PROCEDURE BT_CPE_XML_READ1 IS dest_clob CLOB; src_clob BFILE := BFILE

  • The type initializer for 'Oracle.DataAccess.Client.OracleClientFactory'

    Hi Microsoft Visual Studio 2008 Version 9.0.21022.8 RTM Microsoft .NET Framework Version 3.5 SP1 Oracle Developer Tools for Visual Studio 11.1.0.7.20 I have DB 11.2.0.1 installed on my machine ( OraDb11g_home1 ) and ODT in another home OraClient11g_h

  • @Deprecated: Pls comment

    When I add the @Deprecated annotation to the method f() and try to invoke it, the compiler doesnt generate any warning/error. Can u pls let me know why. Java Build: 1.5.0_06-b05 Thank You. import java.util.*; public class PreDefEnumTest      @Overrid

  • Mac G5 and 7.2

    If I upgrade to 7.2 using a Mac G5 will I still be able to use my Spectrasonic plugs? Or for that matter any other AU plugs. Thanks! Peace rikp G5 Duel 2.0   Mac OS X (10.4.2)