[SAP] Profit Center

Transaktionen

KA01 (Kostenart anlegen)
KA02 (Kostenart ändern)
KA03 (Kostenart anzeigen)
KA04 (Kostenart löschen)
KS01 (Kostenstelle anlegen)
KS02 (Kostenstelle ändern)
KS03 (Kostenstelle anzeigen)
KE51 (Profit Center anlegen)
KE52 (Profit Center ändern)
KE53 (Profit Center anzeigen)

Tabellen

CEPC (Stammdatentabelle von Profit Centern)
CEPCT (Profit-Center-Stammdaten Texte)
CEPC_BUKRS (Buchungskreiszuordnung von Profit Centern)

CDS-Views

SHSM_PROFITCENTER_VH (Join CEPC und CEPCT)

Fiori Apps

F3516 (Profitcenter verwalten)
F0764 (Manage Profit Center Groups)
F2918 (Körperschaftsteuerhierarchien verwalten, Globale Hierarchien verwalten)

Links

[ABAP] Liste aller Umgebungsvariablen

DATA(it_env) = VALUE spfl_environment_list_t( ).
* Get a list of all environment variables
IF cl_spfl_environment=>get_list( IMPORTING env = it_env ) = 0.
* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( it_env ).

*   HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

*   Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

*   cl_gui_container=>default_screen erzwingen
  WRITE: space.
ENDIF.

[ABAP] Muster-Leistungsverzeichnisse lesen

* Muster-LV-Nummer
PARAMETERS: p_spec TYPE tmp_spec-spec_no.

START-OF-SELECTION.

* Muster-Leistungsverzeichnis
  SELECT SINGLE FROM tmp_spec
    FIELDS *
    WHERE spec_no = @p_spec
    INTO @DATA(lv_spec).

  IF sy-subrc = 0.
    DATA(it_esll) = VALUE mmsrv_ml_esll( ).

* Leistungsverzeichnis lesen für Listausgabe im PM/PS
    CALL FUNCTION 'MS_FETCH_SPEC_FOR_LIST'
      EXPORTING
        spec_packno            = lv_spec-packno
      TABLES
        servicetab             = it_esll
*       LIMITTAB               =
      EXCEPTIONS
        no_specification_exist = 1
        OTHERS                 = 2.

    IF sy-subrc = 0.
* Hier Objekte für die Ausgabe hinzufügen
      cl_demo_output=>write_data( it_esll ).

* HTML-Code vom Demo-Output holen
      DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
      cl_abap_browser=>show_html( EXPORTING title       = 'Leistungsverzeichnis'
                                            html_string = lv_html
                                            container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
      WRITE: space.
    ENDIF.
  ENDIF.

[ABAP] ABAP2XLSX: Column Autosize, Verwendung Iterator

SELECT FROM mara
  FIELDS *
  INTO TABLE @DATA(it_mara)
  UP TO 10 ROWS.

IF sy-subrc = 0.
* Excel-Objekt
  DATA(o_xl) = NEW zcl_excel( ).

* aktive Worksheet
  DATA(o_xl_ws) = o_xl->get_active_worksheet( ).
			  
* Name der Sheet
  o_xl_ws->set_title( ip_title = 'Daten' ).

* Tabelle übergeben und Style festlegen
  o_xl_ws->bind_table( ip_table          = it_mara
                       is_table_settings = VALUE #(
*                                                    table_style      = zcl_excel_table=>builtinstyle_medium2
                                                    show_row_stripes = abap_true
                                                  )
                     ).

* alle Spalten mit Iterator durchlaufen und auf Autosize setzen
  DATA(o_col_iterator) = o_xl_ws->get_columns_iterator( ).
  IF o_col_iterator IS BOUND.
	WHILE o_col_iterator->has_next( ).
	  DATA(o_col) = CAST zcl_excel_column( o_col_iterator->get_next( ) ).
	  o_col->set_auto_size( abap_true ).
	ENDWHILE.
  ENDIF.

* Änderungen für alle Spalten übernehmen
  o_xl_ws->calculate_column_widths( ).
ENDIF.

[ABAP] Schlüsselspalten einer DB-Tabelle ermitteln

SELECT FROM mara
  FIELDS *
  INTO TABLE @DATA(it_mara)
  UP TO 10 ROWS.

IF sy-subrc = 0.
* Table: Beschreibung
  DATA(o_tdesc) = CAST cl_abap_tabledescr( cl_abap_tabledescr=>describe_by_data( it_mara ) ).
* Row: Beschreibung
  DATA(o_sdesc) = CAST cl_abap_structdescr( o_tdesc->get_table_line_type( ) ).
* Key Fields
  DATA(it_keyflied_list) = o_sdesc->get_ddic_field_list( ).
* nur die Keyfields zurückgeben
  DELETE it_keyflied_list WHERE keyflag <> abap_true.

  cl_demo_output=>write_data( it_keyflied_list ).
  cl_demo_output=>write_data( it_mara ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Key-Fields'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.
ENDIF.

[ABAP] SALV-Grid: Eventhandler für Klick auf eine Zelle (link_click, hotspot)

CLASS lcl_salv DEFINITION FINAL.

  PUBLIC SECTION.

    CLASS-DATA: o_salv TYPE REF TO cl_salv_table.

    CLASS-METHODS on_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING
        row
        column
        sender.
ENDCLASS.

CLASS lcl_salv IMPLEMENTATION.

  METHOD on_link_click.
    IF o_salv IS BOUND.
* Wert in der geklickten Zelle holen
      DATA(lv_matnr18) = CONV matnr18( o_salv->get_selections( )->get_current_cell( )-value ).

* Parameter zum Aufruf MM03:
* https://www.samplecodeabap.com/call-transaction-mm03-with-specific-tab/

* MATNR setzen
      SET PARAMETER ID 'MAT' FIELD lv_matnr18.
* K - Grunddaten anzeigen
      SET PARAMETER ID 'MXX' FIELD 'K'.
* Transaktion MM03 aufrufen (Material anzeigen)
      CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDMETHOD.

ENDCLASS.

START-OF-SELECTION.

  SELECT FROM mara AS m
    INNER JOIN makt AS t ON m~matnr = t~matnr
    FIELDS m~matnr,
           m~laeda,
           m~mtart,
           m~meins,
           t~maktx
    WHERE t~spras EQ @sy-langu
    INTO TABLE @DATA(it_mara)
	UP TO 50 ROWS.

  IF sy-subrc = 0.
    TRY.
        cl_salv_table=>factory( IMPORTING r_salv_table = lcl_salv=>o_salv
                                CHANGING  t_table      = it_mara ).

* Grundeinstellungen
        lcl_salv=>o_salv->get_functions( )->set_all( abap_true ).
        lcl_salv=>o_salv->get_columns( )->set_optimize( abap_true ).
        lcl_salv=>o_salv->get_display_settings( )->set_list_header( 'Material' ).
        lcl_salv=>o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
        lcl_salv=>o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
        LOOP AT lcl_salv=>o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
          DATA(o_col) = <c>-r_column.
          o_col->set_short_text( || ).
          o_col->set_medium_text( || ).
          o_col->set_long_text( |{ o_col->get_long_text( ) }| ).
        ENDLOOP.

* Link-Klick für Spalte MATNR
        CAST cl_salv_column_table( lcl_salv=>o_salv->get_columns( )->get_column( 'MATNR' ) )->set_cell_type( if_salv_c_cell_type=>hotspot ).
* Event-Hanlder für Link-Klick
        SET HANDLER lcl_salv=>on_link_click FOR lcl_salv=>o_salv->get_event( ).

        lcl_salv=>o_salv->display( ).

      CATCH cx_root INTO DATA(e_txt).
        WRITE: / e_txt->get_text( ).
    ENDTRY.
  ENDIF.

[ABAP] Material-Ledger: Materialpreise für unterschiedliche Währungstypen pflegen

* MATNR
PARAMETERS: p_matnr TYPE mara-matnr.
* Bewertungskreis
PARAMETERS: p_bwkey TYPE t001k-bwkey.
* Preis
PARAMETERS: p_price TYPE bapi_matval_prices-price DEFAULT '1.00'.
* Währung
PARAMETERS: p_waers TYPE tcurc-waers DEFAULT 'EUR'.

START-OF-SELECTION.

* Bewertungskreis (MBEW-BWKEY) == WERKS
  DATA(lv_valuationarea) = CONV bapi_matval_key-val_area( p_bwkey ).
* Bewertungsart (MBEW-BWTAR), siehe Tabelle T149D
  DATA(lv_valuationtype) = CONV bapi_matval_key-val_type( ' ' ).
* Struktur Preisänderungs-Datum
  DATA(lv_pricedate) = VALUE bapi_matval_pricedate( price_date  = sy-datum
                                                    fisc_period = sy-datum+4(2)
                                                    fisc_year   = sy-datum+0(4)
                                                  ).
* Belegkopftext
  DATA(lv_doc_header_text) = CONV bktxt( 'Materialbeleg Text' ).

* Material-Ledger-Typ zum Bewertungskreis
  SELECT SINGLE FROM tckm2
    FIELDS matled
    WHERE bwkey = @p_bwkey
    INTO @DATA(lv_matled).

  IF sy-subrc = 0.
* Währungs-, Bewertungstypen zum Material-Ledger-Typ
* CURTP (Währungstyp)
    SELECT FROM tckmit
      INNER JOIN tcval ON tckmit~cvtyp = tcval~cvtyp
      FIELDS tckmit~cvtyp,  " Währungs- und Bewertungstyp
             tcval~currtyp, " Währungstyp
             tcval~valutyp  " Bewertungssicht
      WHERE matled = @lv_matled
      INTO TABLE @DATA(it_cvtyp).

    IF sy-subrc = 0.
* Währungscodes
      SELECT SINGLE FROM tcurc
        FIELDS altwr
        WHERE waers = @p_waers
        INTO @DATA(lv_iso).

      IF sy-subrc = 0.
* Preise für alle Währungstypen (CVTYP) setzen
        DATA: it_prices TYPE STANDARD TABLE OF bapi_matval_prices WITH DEFAULT KEY.

        LOOP AT it_cvtyp ASSIGNING FIELD-SYMBOL(<cv>).
* Beispiel:
*   Preise + Währungen für alle Währungstypen des Ledgers zum Bewertungskreis gleich setzen
* Beachte: es gibt andere Anwendungsfälle, insbesondere bei abweichenden Währungstypen (anderen Konzernwährungen (USD usw.)),
*          bei denen die Preise unterschiedlich sein können
* siehe auch MM03 (Reiter "Buchhaltung 1")
          APPEND VALUE #( valuation_view = <cv>-valutyp            " DOMÄNE VALUTYP: 0  - Legale Bewertung, 1 - Konzernbewertung, 2 - Profit-Center-Bewertung
                          curr_type      = <cv>-cvtyp              " 10 - Buchungskreiswährung, 30 - Konzernwährung, 31 - Konzernwährung, Konzernbewertung
                          currency       = p_waers                 " EUR
                          currency_iso   = lv_iso                  " EUR -> 978
                          price_unit     = 1                       " Preiseinheit aus MBEW-BWPEI
                          price          = p_price ) TO it_prices. " Preis ggf. aus MBEW-VERPR
        ENDLOOP.

* Materialpreis-Änderungsbeleg
        DATA: lv_pricechangedocument TYPE bapi_pricechange_document.
* Fehlermeldungen des BAPIs
        DATA(it_bapiret2) = VALUE bapiret2_t( ).

* Materialpreis-Änderung
* Voraussetzung ist Pflege der Materialbewertung zum Materialstamm
        CALL FUNCTION 'BAPI_MATVAL_PRICE_CHANGE'
          EXPORTING
            material            = CONV bapi_matval_key-material( p_matnr ) " MARA-MATNR
            valuationarea       = lv_valuationarea                         " MBEW-BWKEY
            valuationtype       = lv_valuationtype                         " MBEW-BWTAR
            pricedate           = lv_pricedate
            doc_header_text     = lv_doc_header_text
          IMPORTING
            pricechangedocument = lv_pricechangedocument
          TABLES
            prices              = it_prices
            return              = it_bapiret2.

        IF lines( it_bapiret2 ) > 0.
          IF it_bapiret2[ 1 ]-type CA 'EAX'.
* bei Fehler: Rollback
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
          ELSE.
            DATA(lv_return) = VALUE bapiret2( ).
* alles ok: COMMIT
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait   = abap_true
              IMPORTING
                return = lv_return.
          ENDIF.
        ENDIF.

        cl_demo_output=>write_data( p_matnr ).
        cl_demo_output=>write_data( p_bwkey ).
        cl_demo_output=>write_data( lv_pricedate ).
        cl_demo_output=>write_data( lv_doc_header_text ).
        cl_demo_output=>write_data( it_prices ).
        cl_demo_output=>write_data( lv_pricechangedocument ).
        cl_demo_output=>write_data( it_bapiret2 ).
        cl_demo_output=>write_data( lv_return ).

* HTML-Code vom Demo-Output holen
        DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
        cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                              html_string = lv_html
                                              container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
        WRITE: space.
      ENDIF.
    ENDIF.
  ENDIF.

[SAP] Material Ledger / Materialbewertung / Materialpreise

Transaktionen

MR21 (Preisänderung)
CKM3PH (Materialpreishistorie)
OMX1 (ML-Aktivierung auf n BWKRSe)
OMX2 (Material-Ledger-Typ definieren)
OMX3 (ML-Bewertungskreis-Zuordnung)
OMX4 (Nummernkreispflege ML-BELEG)

Funktionsbausteine

BAPI_MATVAL_PRICE_CHANGE (Materialpreis-Änderung)

Domänen

CURTP (Währungstyp)

Tabellen

MBEW (Materialbewertung)
TCKMHD (Beschreibung des Material-Ledger-Typs)
TCKMT (Material-Ledger-Typ (Text-Tabelle))
TCKMIT (Währungs-,Bewertungstypen zum Material-Ledger-Typ)
TCKM2 (Bewertungskreissteuerung tabelle – valuation area control t.)
CKMLHD (Material-Ledger: Kopfsatz)
CKMLPP (Material-Ledger: Perioden-Summensätze Mengen)
CKMLPR (Material-Ledger: Preise)
CKMLCR (Material-Ledger: Perioden-Summensätze Werte)

Views

FCML_MLMASTER (Super-Join: CKMLHD/CKMLPP/CKMLPR/CKMLCR)
/FMP/V_MP_CR_M (Materialpreise -CKMLCR – MBEW)

Fiori-Apps

F4006 (Materialbestandspreise hochladen)

Links