Folgende Bausteine sind ab S/4 HANA verfügbar:
Variante 1 (Anlegen und ändern eines Infosatzes)
* Testlauf? PARAMETERS: p_test TYPE abap_bool DEFAULT abap_true. * Kennzeichen Regellieferant? PARAMETERS: p_relif TYPE abap_bool DEFAULT abap_true. * Nummer des Einkaufsinfosatzes EINA PARAMETERS: p_infnr TYPE infnr. * Materialnummer MARA PARAMETERS: p_matnr TYPE matnr. * Lieferant LFA1 PARAMETERS: p_lifnr TYPE lfa1-lifnr. * Basismengeneinheit T006 PARAMETERS: p_meins TYPE t006-msehi DEFAULT 'ST'. * Bestellmengeneinheit T006 PARAMETERS: p_bstme TYPE t006-msehi DEFAULT 'ST'. * Zähler für die Umrechnung BPRME in BME PARAMETERS: p_bpumz TYPE bpumz DEFAULT '1'. * Nenner für die Umrechnung BPRME in BME PARAMETERS: p_bpumn TYPE bpumn DEFAULT '1'. * Einkaufsorganisation T024E PARAMETERS: p_ekorg TYPE t024e-ekorg. * Werk T001W PARAMETERS: p_werks TYPE werks_d. * Typ des Einkaufsinfosatzes * 0 Normal * 2 Konsignation * 3 Lohnbearbeitung * P Pipeline * 1 Chargeable PARAMETERS: p_esokz TYPE esokz DEFAULT '0'. * Planlieferzeit in Tagen PARAMETERS: p_plifz TYPE plifz DEFAULT '5'. * Einkäufergruppe T024 PARAMETERS: p_bkgrp TYPE t024-ekgrp. * Umsatzsteuerkennzeichen T007A PARAMETERS: p_mwskz TYPE t007a-mwskz DEFAULT 'V1'. * Konditionsbetrag PARAMETERS: p_kbetr TYPE konp-kbetr DEFAULT '100.0'. START-OF-SELECTION. * Einkaufsinfosatz - allgemeine Daten SELECT SINGLE FROM eina FIELDS infnr WHERE matnr = @p_matnr AND lifnr = @p_lifnr INTO @DATA(lv_infnr). * Schalter für Neuanlage oder Update Tabellen EINA und EINE DATA(lv_eina_update) = abap_true. DATA(lv_eine_update) = abap_false. IF sy-subrc = 0. lv_eina_update = abap_true. * Einkaufsinfosatz - Einkaufsorganisationsdaten SELECT SINGLE FROM eine FIELDS loekz WHERE infnr = @lv_infnr AND werks = @p_werks INTO @DATA(lv_loekz). IF sy-subrc = 0. lv_eine_update = abap_true. ELSE. lv_eine_update = abap_false. ENDIF. ELSE. lv_eina_update = abap_false. ENDIF. DATA(ls_eina) = VALUE mewieina( info_rec = COND infnr( WHEN lv_eina_update = abap_true THEN lv_infnr ELSE '' ) vendor = p_lifnr norm_vend = CONV relif( p_relif ) material = p_matnr vend_mat = CONV idnlf( |{ p_matnr ALPHA = IN WIDTH = 10 }| ) base_uom = p_meins po_unit = p_bstme conv_num1 = p_bpumz conv_den1 = p_bpumn ). DATA(ls_einax) = VALUE mewieinax( info_rec = lv_eina_update " Infosatz neu/update vendor = 'X' norm_vend = p_relif material = 'X' base_uom = 'X' po_unit = 'X' conv_num1 = 'X' conv_den1 = 'X' ). DATA(ls_eine) = VALUE mewieine( info_rec = COND infnr( WHEN lv_eine_update = abap_true THEN lv_infnr ELSE '' ) purch_org = p_ekorg plant = p_werks info_type = p_esokz conv_num1 = p_bpumz conv_den1 = p_bpumn plnd_delry = p_plifz pur_group = p_bkgrp tax_code = p_mwskz net_price = p_kbetr currency = 'EUR' price_unit = '1' ). DATA(ls_einex) = VALUE mewieinex( info_rec = lv_eine_update " Infosatz neu/update purch_org = 'X' plant = 'X' info_type = 'X' conv_num1 = 'X' conv_den1 = 'X' plnd_delry = 'X' pur_group = 'X' tax_code = 'X' ). * Konditionen DATA: it_cond_validity TYPE STANDARD TABLE OF mewivalidity WITH DEFAULT KEY. DATA: it_condition TYPE STANDARD TABLE OF mewicondition WITH DEFAULT KEY. APPEND VALUE #( plant = p_werks valid_from = sy-datum valid_to = '99991231' ) TO it_cond_validity. APPEND VALUE #( cond_type = 'PB00' cond_value = p_kbetr currency = 'EUR' cond_p_unt = '1' " KPEIN '1' cond_unit = p_bstme " KMEIN 'ST' ) TO it_condition. DATA(it_return) = VALUE mewi_t_return( ). * RFC Function Module to Create and Change Info Record CALL FUNCTION 'ME_INFORECORD_MAINTAIN' EXPORTING i_eina = ls_eina i_einax = ls_einax i_eine = ls_eine i_einex = ls_einex testrun = p_test * IMPORTING * E_EINA = * E_EINE = TABLES * TXT_LINES = cond_validity = it_cond_validity condition = it_condition * COND_SCALE_VALUE = * COND_SCALE_QUAN = return = it_return. * Fehlerauswertung DATA(lv_message) = ||. LOOP AT it_return ASSIGNING FIELD-SYMBOL(<m>) WHERE type CA 'AEX'. IF lv_message IS INITIAL. lv_message = <m>-message. ELSE. lv_message = |{ lv_message }/{ <m>-message }|. ENDIF. WRITE: / <m>-message. ENDLOOP. IF lv_message IS INITIAL. DATA(lv_return) = VALUE bapiret2( ). * alles ok: COMMIT CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' IMPORTING return = lv_return. WRITE: / lv_return-message. ELSE. * bei Fehlern: ROLLBACK CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ENDIF.
Variante 2 (Anlegen und ändern mehrerer Infosätze)
* https://wiki.scn.sap.com/wiki/pages/viewpage.action?pageId=533669791 * SAP Note: 2492873 (Verbesserung im Beschaffungsprozess zur Pflege mehrerer Infosätze zusammen mit Konditionen) * https://launchpad.support.sap.com/#/notes/2492873 * SAP Note: 3070467 (ME_INFORECORD_MAINTAIN_MULTI: Template for creating info record - SAP for Me) * https://me.sap.com/notes/3070467/E * RFC Function Module to Create and Change multiple Info Records CALL FUNCTION 'ME_INFORECORD_MAINTAIN_MULTI' * EXPORTING * TESTRUN = * IMPORTING * ET_EINA = * ET_EINE = * TABLES * T_EINA = * T_EINAX = * T_EINE = * T_EINEX = * TXT_LINES = * COND_VALIDITY = * CONDITION = * COND_SCALE_VALUE = * COND_SCALE_QUAN = * RETURN = . DATA(lv_return) = VALUE bapiret2( ). * Daten verbuchen CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = abap_true IMPORTING return = lv_return. WRITE: / |COMMIT [{ lv_return-type } { lv_return-number }]: { lv_return-message }|.
Variante 3 (DMC_MIG_PURCH_INFO_RECORD)
DATA(lv_test) = abap_true. DATA(ls_eina) = VALUE eina( ). DATA: it_eine TYPE STANDARD TABLE OF eine WITH DEFAULT KEY. * Migration of purchasing info record * kapselt folgende Funktionsbausteine * ME_INITIALIZE_INFORECORD * ME_MAINTAIN_INFORECORD * ME_POST_INFORECORD CALL FUNCTION 'DMC_MIG_PURCH_INFO_RECORD' EXPORTING * ACTIVITY = 'H' " V - update, H - create i_eina = ls_eina * I_EINE = * O_EINA = * O_EINE = * I_VORGA = 'B' " Kennung für die Anwendung, die den Funktionsbaustein aufruft: A - Integrierte Artikelpflege, B - ALE testrun = lv_test * IMPORTING * E_EINA = * E_EINE = TABLES * T_HEAD = * T_LINE = t_eine = it_eine.