Overblog Alle Blogs
Edit post Folge diesem Blog Administration + Create my blog
MENU
Werbung
SAPManDoo - SAP Resource

Tarifierung mit BAPI analog zur KP26

11. Dezember 2018 , Geschrieben von sapmandoo Veröffentlicht in #CO

Die Planung von Leistungserbringungen und Tarifen erfolgt im Dialog mithilfe der KP26. In einigen Planungsszenarien stellt sich die Aufgabe, externe Daten ins SAP-System zu laden. Hierfür können verschiedene Importszenarien verwendet werden, u.a. der Upload via BAPI BAPI_COSTACTPLN_POSTACTOUTPUT.

Die Schnittstelle des BAPIs ist dabei nicht gerade ein Ausbund an selbsterklärender Offenherzigkeit, deshalb nachfolgend ein Mustercoding sowohl für periodische als auch Gesamt-Planung. 

Das nachfolgende Coding habe ich auf einem S/4 HANA on premise (1709)  getestet, es sollte aber auch auf älteren Releases lauffähig sein.

Werbung

*&---------------------------------------------------------------------*
*& Report ZTEST_KP26
*&---------------------------------------------------------------------*
*& KP26 tariff planning
*&---------------------------------------------------------------------*
REPORT ztest_kp26.

DATA: it_actout_index    LIKE bapiacpstru OCCURS 0 WITH HEADER LINE.
DATA: it_actout_pervalue LIKE bapiacpval  OCCURS 0 WITH HEADER LINE.
DATA: it_actout_totvalue LIKE bapiacptot  OCCURS 0 WITH HEADER LINE.
DATA: it_actout_object   LIKE bapiacpobj  OCCURS 0 WITH HEADER LINE.
DATA: it_return          LIKE bapiret2    OCCURS 0 WITH HEADER LINE.
DATA: rec_headerinfo     LIKE bapiplnhdr.
DATA: fp_error(1) TYPE c.

" Object index / value index:
" You can post several objects/values at once (with one BAPI call).
" Please make sure, that object and value key correspond in object
" and value tables...
DATA: gw_objcnt(6) TYPE n,
      gw_valcnt(6) TYPE n.

PARAMETERS: p_tariff LIKE bapiacpval-price_var_per01 OBLIGATORY,
            p_kokrs  LIKE rec_headerinfo-co_area OBLIGATORY,
            p_kostl  LIKE it_actout_object-costcenter OBLIGATORY,
            p_lstar  LIKE it_actout_object-acttype OBLIGATORY,
            p_year   LIKE rec_headerinfo-fisc_year OBLIGATORY,
            p_from   LIKE rec_headerinfo-period_from OBLIGATORY,
            p_to     LIKE rec_headerinfo-period_to OBLIGATORY,
            p_versn  LIKE rec_headerinfo-version OBLIGATORY.
PARAMETERS: p_tot RADIOBUTTON GROUP r1 DEFAULT 'X',    "totals planning
            p_per RADIOBUTTON GROUP r1.                "periodic planning

START-OF-SELECTION.
  IF p_per = 'X'.
    PERFORM make_bapi_data_for_actout_per.
  ELSE.
    PERFORM make_bapi_data_for_actout_tot.
  ENDIF.

*&---------------------------------------------------------------------*
* TOTALS
*&---------------------------------------------------------------------*
FORM make_bapi_data_for_actout_tot.

* init. variables
  CLEAR: gw_objcnt, gw_valcnt.

* header data
  CLEAR: rec_headerinfo.
  rec_headerinfo-co_area       = p_kokrs.        "Controlling area
  rec_headerinfo-fisc_year     = p_year.         "Fiscal year
  rec_headerinfo-period_from   = p_from.         "From period
  rec_headerinfo-period_to     = p_to.           "To period
  rec_headerinfo-version       = p_versn.        "Version
  rec_headerinfo-plan_currtype = 'C'.            "Planning Currency

  ADD 1 TO gw_objcnt.

* object list (cost center/activity type or business process)
  CLEAR: it_actout_object.
  it_actout_object-costcenter   = p_kostl.       "Costcenter
  it_actout_object-acttype      =  p_lstar.      "act. type
  it_actout_object-object_index = gw_objcnt.     "Object Index
  APPEND it_actout_object.

  ADD 1 TO gw_valcnt.

* plan values totals
  CLEAR: it_actout_totvalue.
* check structure of table for other values such as quantities, capacities...
  it_actout_totvalue-value_index        = gw_valcnt.       "Value Index
  it_actout_totvalue-price_unit         = 1.               "price unit
  it_actout_totvalue-price_var          = p_tariff.        "var. tariff
  it_actout_totvalue-currency           = 'EUR'.
  it_actout_totvalue-dist_key_price_var = '2'.             "distr.key
  APPEND it_actout_totvalue.

* assignment of objects, values and control data
  "the items given in the object and value tables are linked by  the index value
  "this is important, if you want to plan multiple objects with one BAPI call
  CLEAR: it_actout_index.
  it_actout_index-object_index = gw_objcnt.          "Object Index
  it_actout_index-value_index  = gw_valcnt.          "Value Index
  APPEND it_actout_index.

  CALL FUNCTION 'BAPI_COSTACTPLN_POSTACTOUTPUT'
    EXPORTING
      headerinfo     = rec_headerinfo
    TABLES
      indexstructure = it_actout_index
      coobject       = it_actout_object
      totvalue       = it_actout_totvalue
      return         = it_return.

  IF it_return[] IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ELSE.
    fp_error = 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.

ENDFORM.                    " MAKE_BAPI_DATA_FOR_ACTOUT

*&---------------------------------------------------------------------*
* PERIODIC VALUES
*&---------------------------------------------------------------------*
FORM make_bapi_data_for_actout_per .

* init. variables
  CLEAR: gw_objcnt, gw_valcnt,
         it_actout_index[],    it_actout_object[],
         it_actout_pervalue[].

* header data
  CLEAR: rec_headerinfo.
  rec_headerinfo-co_area       = p_kokrs.        "Controlling area
  rec_headerinfo-fisc_year     = p_year.         "Fiscal year
  rec_headerinfo-period_from   = p_from.         "From period
  rec_headerinfo-period_to     = p_to.           "To period
  rec_headerinfo-version       = p_versn.        "Version
  rec_headerinfo-plan_currtype = 'C'.            "Planning Currency

  ADD 1 TO gw_objcnt.

*  object list (cost center/activity type or business process)
  CLEAR: it_actout_object.
  it_actout_object-costcenter   = p_kostl.       "Costcenter
  it_actout_object-acttype      =  p_lstar.      "act. type
  it_actout_object-object_index = gw_objcnt.     "Object Index
  APPEND it_actout_object.

  ADD 1 TO gw_valcnt.

* plan values per period
  CLEAR: it_actout_pervalue.
* check structure of table for other values such as quantities, capacities...
  it_actout_pervalue-value_index   = gw_valcnt.       "Value Index
  it_actout_pervalue-price_unit_per01 = 1.            "price unit per.
  it_actout_pervalue-price_unit_per02 = 1.
  it_actout_pervalue-price_unit_per03 = 1.
  it_actout_pervalue-price_unit_per04 = 1.
  it_actout_pervalue-price_unit_per05 = 1.
  it_actout_pervalue-price_unit_per06 = 1.
  it_actout_pervalue-price_unit_per07 = 1.
  it_actout_pervalue-price_unit_per08 = 1.
  it_actout_pervalue-price_unit_per09 = 1.
  it_actout_pervalue-price_unit_per10 = 1.
  it_actout_pervalue-price_unit_per11 = 1.
  it_actout_pervalue-price_unit_per12 = 1.
  it_actout_pervalue-price_var_per01 = p_tariff.     "var. tariff per.
  it_actout_pervalue-price_var_per02 = p_tariff.
  it_actout_pervalue-price_var_per03 = p_tariff.
  it_actout_pervalue-price_var_per04 = p_tariff.
  it_actout_pervalue-price_var_per05 = p_tariff.
  it_actout_pervalue-price_var_per06 = p_tariff.
  it_actout_pervalue-price_var_per07 = p_tariff.
  it_actout_pervalue-price_var_per08 = p_tariff.
  it_actout_pervalue-price_var_per09 = p_tariff.
  it_actout_pervalue-price_var_per10 = p_tariff.
  it_actout_pervalue-price_var_per11 = p_tariff.
  it_actout_pervalue-price_var_per12 = p_tariff.
  it_actout_pervalue-currency = 'EUR'.
  APPEND it_actout_pervalue.

* assignment of objects, values and control data
  CLEAR: it_actout_index.
  it_actout_index-object_index = gw_objcnt.          "Object Index
  it_actout_index-value_index  = gw_valcnt.          "Value Index
  APPEND it_actout_index.

  CALL FUNCTION 'BAPI_COSTACTPLN_POSTACTOUTPUT'
    EXPORTING
      headerinfo     = rec_headerinfo
    TABLES
      indexstructure = it_actout_index
      coobject       = it_actout_object
      pervalue       = it_actout_pervalue
      return         = it_return.

  IF it_return[] IS INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.
  ELSE.
    fp_error = 'X'.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ENDIF.

ENDFORM.                    " MAKE_BAPI_DATA_FOR_ACTOUT

Eingabewerte BAPI

Eingabewerte BAPI

Diesen Post teilen
Repost0
Um über die neuesten Artikel informiert zu werden, abonnieren:
Kommentiere diesen Post