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

CO Umlagen - der sog. "Vorbrenner"

25. Februar 2019 , Geschrieben von sapmandoo Veröffentlicht in #CO, #Basis-Entwicklung allg., #S4, #SAP Reports

Umlagen im CO führen insbesondere im Bereich der Konzernumlage immer dann zu Problemen, wenn als Empfängerbezugsbasis die Gesamtkosten einer Kostenstelle herangezogen werden sollen und dazu ggfls. noch eine sehr differenzierte Funktionsbereichsdefinition mit vielen Empfängerkostenstellen vorliegt. Dies führt in Großkonzernen und Retail Gesellschaften mit vielen Filialen und damit einhergehend vielen Empfängerkostenstellen dazu, das bei Aufbau der Sender-/Empfängerbeziehungen eine interne Tabelle aufgebaut wird, die ggfls. die Speichergrenzen übersteigt und zu einem Short Dump führt.
Folgendes Programm sorgt dafür, dass die gebuchten Kostenarten (echte Buchung) auf eine statistische Kennzahl verdichtet werden. 

Der Effekt bei einem Kunden war bspw., dass eine nicht lauffähige Umlage nach 1300 Sekunden durchgebucht wurde.

In diesem Zusammenhang wurde auch eine Meldung bei SAP aufgemacht und es gab diesbezüglich einen regen Austausch mit dem SAP Development Support. Lt. SAP Entwicklung ist demnach die Nutzung solcher „Vorbrenner“ in diesen Konstellationen wohl nicht unüblich.
 

Werbung

Das nachfolgende Programm stellt einen solchen "Vorbrenner" dar.

Das Programm startet mit folgendem Selektionsbildschirm:

Selection-Screen des Programms

Selection-Screen des Programms

  • Der Kostenrechnungskreis ist mit 1000 vorbelegt.
  • Im Feld Kostenstellengruppe kann eine Gruppe oder Selektionsvariante angegeben werden. Es werden nur die Kostenstellen für die Fortschreibung der kumulierten Kosten berücksichtigt, die in der Gruppe enthalten sind. Dies entspricht in der Umlage der Empfängerbezugsbasis.
  • Mittels der Kostenartengruppe (Gruppe/Selektionsvariante) kann auf bestimmte Kosten eingeschränkt werden, um z.B. um bereits ausgeführte Umlagen / Abrechnungen nicht als Empfängerbezugsbasis heranzuziehen. Sofern gewünscht kann das Feld leer gelassen werden und das Häkchen Gesamtkosten gesetzt werden. In diesem Fall werden alle Kosten der in der Kostenstellengruppe angegeben Kostenstellen berücksichtigt.
  • Geschäftsjahr und Periode müssen angegeben werden. Unter dieser Periode erfolgt die Selektion und Fortschreibung.
  • Die statistische Kennzahl ISTKOS ist die statistische Kennzahl, unter der die Kosten fortgeschrieben werden.
     
Werbung

Coding:

*&---------------------------------------------------------------------*
*& Report ZCO_POST_COSTASSKF
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zco_post_costasskf.

* Datendeklaration
INCLUDE zco_post_costasskf_top.
* Selektionsbildschirm
INCLUDE zco_post_costasskf_sel.


START-OF-SELECTION.
  IF gs_selection-kstar IS INITIAL AND p_gesam IS INITIAL.
    "Fehlermeldung
  ENDIF.
*Übernahme der Selektionsparameter in Struktur
  gs_selection-kokrs = p_kokrs.
  gs_selection-gjahr = p_gjahr.
  gs_selection-perio = p_perio.
  gs_selection-gesam = p_gesam.
  gs_selection-verto = p_verto.
  gs_selection-stagr = p_stagr.
  LOOP AT s_verfr REFERENCE INTO DATA(ls_verfr).
    APPEND ls_verfr->* TO gs_selection-verfr.
  ENDLOOP.
  IF gs_selection-koset IS INITIAL. gs_selection-koset = '0101' && gs_selection-kokrs && p_1koset. ENDIF.
  IF gs_selection-kstar IS NOT INITIAL AND p_gesam IS INITIAL. gs_selection-kstar = '0102' && gs_selection-kokrs && p_1kstar. ENDIF.

* Start der Verarbeitung
  DATA(lo_instance) = zcl_co_cost2statfig=>get_instance( ).
  lo_instance->start( gs_selection ).

 

 

*&---------------------------------------------------------------------*
*& Include          ZCO_POST_COSTASSKF_TOP
*&---------------------------------------------------------------------*

DATA: gv_kosetname TYPE c LENGTH 10,
      gv_kstarname TYPE c LENGTH 10.

DATA: gs_selection TYPE zcl_co_cost2statfig=>ts_selection.

TABLES: csks.

 

*&---------------------------------------------------------------------*
*& Include          ZCO_POST_COSTASSKF_SEL
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-t01.
PARAMETERS: p_kokrs TYPE kokrs MATCHCODE OBJECT csh_tka01 OBLIGATORY DEFAULT 1000.
PARAMETERS: p_1koset  LIKE rksb1-ksgru OBLIGATORY.
*PARAMETERS: p_2koset  LIKE rgsbs-setnr MODIF ID in5.
PARAMETERS: p_1kstar  LIKE rksb1-kagru.
*PARAMETERS: p_2kstar  LIKE rgsbs-setnr MODIF ID in5.
PARAMETERS: p_gesam AS CHECKBOX.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_gjahr TYPE gjahr OBLIGATORY.
PARAMETERS: p_perio TYPE periode OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b01.

SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE TEXT-t02.
PARAMETERS: p_stagr TYPE ccss-stagr OBLIGATORY.
PARAMETERS: p_verto TYPE csks-kosar.
SELECT-OPTIONS: s_verfr FOR csks-kosar NO INTERVALS.
SELECTION-SCREEN END OF BLOCK b02.

INITIALIZATION.
* Defaultwert Datum
  SELECT SINGLE lmona FROM tka01
    
WHERE kokrs EQ @p_kokrs
    
INTO @DATA(gv_periv).
  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date         = sy-datum
*     I_MONMIT       = 00
      i_periv        = gv_periv
    
IMPORTING
      e_buper        = p_perio
      e_gjahr        
= p_gjahr
    
EXCEPTIONS
      input_false    = 1
      t009_notfound  = 2
      t009b_notfound = 3
      OTHERS         = 4.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

* Periodenberechnung
  p_perio = p_perio - 1.
  IF p_perio EQ 0. p_perio = 12. ENDIF.
  IF p_perio EQ 12. p_gjahr = p_gjahr - 1. ENDIF.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_1koset.
  CALL FUNCTION 'K_GROUP_SELECT'
    EXPORTING
      class         = '0101'
      field_name    = 'KOSTL                         '
      table         = 'CCSS                          '
    IMPORTING
      setid         = gs_selection-koset
      set_name      
= gv_kosetname
    
EXCEPTIONS
      no_set_picked = 02.
  IF sy-subrc = 0.
    p_1koset = gv_kosetname.
  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_1kstar.
  CALL FUNCTION 'K_GROUP_SELECT'
    EXPORTING
      class         = '0102'
      field_name    = 'KSTAR                         '
      table         = 'CCSS                          '
    IMPORTING
      setid         = gs_selection-kstar
      set_name      
= gv_kstarname
    
EXCEPTIONS
      no_set_picked = 02.
  IF sy-subrc = 0.
    p_1kstar = gv_kstarname.
  ENDIF.

AT SELECTION-SCREEN.
  IF p_gesam EQ abap_true.
    CLEAR: p_1kstar, gs_selection-kstar, gv_kstarname.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
    IF screen-name = 'P_1KSTAR'.
      IF p_gesam EQ abap_true.
        CLEAR p_1kstar.
        screen-input = '0'.
      ELSE.
        screen-input = '1'.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.

 

CLASS zcl_co_cost2statfig DEFINITION
  PUBLIC
  FINAL
  
CREATE PUBLIC .

  PUBLIC SECTION.

 

    TYPES:
      tr_kosar TYPE RANGE OF csks-kosar .
    TYPES:
      BEGIN OF ts_selection.
    TYPES kokrs TYPE kokrs.
    TYPES koset TYPE rgsbs-setnr.
    TYPES kstar TYPE rgsbs-setnr.
    TYPES gesam TYPE checkbox.
    TYPES gjahr TYPE gjahr.
    TYPES perio TYPE periode.
    TYPES verto TYPE kosar.
    TYPES verfr TYPE tr_kosar.
    TYPES stagr TYPE stagr.
    TYPES END OF ts_selection .

    TYPES BEGIN OF ts_csks.
    TYPES kokrs TYPE kokrs.
    TYPES kostl TYPE kostl.
    TYPES datbi TYPE datbi.
    TYPES bukrs TYPE bukrs.
    TYPES prctr TYPE prctr.
    TYPES kosar TYPE kosar.
    TYPES END OF ts_csks.

    TYPES tt_csks TYPE STANDARD TABLE OF ts_csks WITH DEFAULT KEY
                                                 WITH UNIQUE HASHED KEY k1 COMPONENTS kokrs kostl datbi
                                                 
WITH NON-UNIQUE SORTED KEY k2 COMPONENTS kosar.

    TYPES tt_cskb TYPE STANDARD TABLE OF cskb WITH DEFAULT KEY.

    TYPES BEGIN OF ts_costs.
    TYPES kokrs TYPE kokrs.
    TYPES kostl TYPE kostl.
    TYPES bukrs TYPE bukrs.
    TYPES prctr TYPE prctr.
    TYPES kosar TYPE kosar.
    TYPES wrttp TYPE co_wrttp.
    TYPES sum   TYPE coep-wkgbtr.
    TYPES END OF ts_costs.

    TYPES tt_costs TYPE STANDARD TABLE OF ts_costs WITH DEFAULT KEY.

    CLASS-METHODS get_instance
      RETURNING
        
VALUE(ro_instance) TYPE REF TO zcl_co_cost2statfig .
    METHODS start
      
IMPORTING
        !is_selection TYPE ts_selection .
protected section.
private section.

  data CV_FAILURE type ABAP_BOOL .
  data GT_COSTS type TT_COSTS .
  data CV_VERTO type KOSAR .
  data GR_KSTAR type REP_EAPS_TAB_KSTAR_RANGE .
  data GT_VERTO type TT_CSKS .
  data RT_VERFR type TR_KOSAR .
  data CV_GESAM type CHECKBOX .
  data CV_DATAB type DATEFROM .
  data CV_DATBI type DATETO .
  data CV_GJAHR type GJAHR .
  data CV_KOKRS type KOKRS .
  data CV_PERIO type PERIODE .
  class-data GO_INSTANCE type ref to ZCL_CO_COST2STATFIG .
  data GT_CSKB type TT_CSKB .
  data GR_KOSTL type HRPP_SEL_KOSTL .
  data CV_STAGR type STAGR .
  data GT_RETURN type BAPIRET2_T .

  methods CALCULATE_COSTS .
  methods DBSEL_CSKB
    
importing
      !IT_KSTAR type REP_EAPS_TAB_KSTAR_RANGE
    returning
      
value(RT_CSKB) type TT_CSKB .
  methods DBSEL_CSKS
    
importing
      !IT_KOSTL type HRPP_SEL_KOSTL
    returning
      
value(RT_CSKS) type TT_CSKS .
  methods POST_STATFIG .
  methods REVERSE_STATFIGPOST .
  methods SHOW_LOG .
  methods SET_DATA
    
importing
      !IS_SELECTION type TS_SELECTION .
  methods SET_KOSTENARTEN
    
importing
      !IS_SELECTION type TS_SELECTION .
  methods SET_KOSTENSTELLEN
    
importing
      !IS_SELECTION type TS_SELECTION .
  methods SET_SELMAIN
    
importing
      !IS_SELECTION type TS_SELECTION .
ENDCLASS.



CLASS ZCL_CO_COST2STATFIG IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->CALCULATE_COSTS
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD calculate_costs.

    DATA: lv_tabix     TYPE sy-tabix,
          ls_costverto TYPE ts_costs,
          lt_costverto TYPE tt_costs.

*   Prüfen, ob bereits eine Fehlersituation vorliegt
    CHECK cv_failure IS INITIAL.
*   Select aus COEP, da hier die Daten mit Vorzeichen vorliegen
    SELECT
      a~kokrs, a~kostl, b~bukrs, b~prctr, b~kosar,
      a~wrttp, SUM( a~wkgbtr ) AS sum "Direkte Summierung möglich, da Werte positiv und negativ vorliegen
      FROM coep AS a
      INNER 
JOIN csks AS b
      
ON a~kokrs EQ b~kokrs AND a~kostl EQ b~kostl
      
WHERE a~kokrs EQ @cv_kokrs
      
AND   a~lednr EQ '00'
      AND   a~gjahr EQ @cv_gjahr
      
AND   a~perio EQ @cv_perio
      
AND   a~kstar IN @gr_kstar
      
AND   a~kostl IN @gr_kostl
      
GROUP BY a~kokrs, b~bukrs, b~prctr, a~kostl, b~kosar, a~wrttp
      
INTO CORRESPONDING FIELDS OF TABLE @gt_costs.
*   Buchungskreis 1003 hat Filialkostenstellen, die irrelevant sind, Nullzeilen ignorieren!
    DELETE gt_costs WHERE ( bukrs = '1003' AND kosar EQ cv_verto ) OR sum IS INITIAL.
    DELETE gt_costs WHERE wrttp NE '04'.
*   Verdichtung
    LOOP AT gt_verto REFERENCE INTO DATA(ls_verto).
      CLEAR ls_costverto.
      MOVE-CORRESPONDING ls_verto->* TO ls_costverto.
      LOOP AT gt_costs REFERENCE INTO DATA(ls_costs)
        WHERE bukrs EQ ls_verto->bukrs
        
AND   prctr EQ ls_verto->prctr
        
AND   

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->DBSEL_CSKB
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_KSTAR                       TYPE        REP_EAPS_TAB_KSTAR_RANGE
* | [<-()] RT_CSKB                        TYPE        TT_CSKB
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD dbsel_cskb.

    IF cv_gesam IS INITIAL AND it_kstar IS NOT INITIAL.
      SELECT kokrs, kstar, katyp FROM cskb
        
WHERE kokrs EQ @cv_kokrs
        
AND   kstar IN @it_kstar
        
AND   datbi GE @cv_datbi
        
INTO CORRESPONDING FIELDS OF TABLE @rt_cskb.
    ELSE.
      SELECT kokrs, kstar, katyp FROM cskb
        
WHERE kokrs EQ @cv_kokrs
        
AND   datbi GE @cv_datbi
        
INTO CORRESPONDING FIELDS OF TABLE @rt_cskb.
    ENDIF.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->DBSEL_CSKS
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_KOSTL                       TYPE        HRPP_SEL_KOSTL
* | [<-()] RT_CSKS                        TYPE        TT_CSKS
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD dbsel_csks.

    SELECT kokrs, kostl, datbi, bukrs, prctr, kosar
      
FROM csks
      
WHERE kokrs EQ @cv_kokrs
      
AND   kostl IN @it_kostl
      
AND   datbi GE @cv_datbi
      
AND   datab LE @cv_datab
      
and   kosar EQ @cv_verto
      
INTO CORRESPONDING FIELDS OF TABLE @rt_csks.


  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_CO_COST2STATFIG=>GET_INSTANCE
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RO_INSTANCE                    TYPE REF TO ZCL_CO_COST2STATFIG
* +--------------------------------------------------------------------------------------</SIGNATURE>
  method GET_INSTANCE.

    IF go_instance IS INITIAL.
      CREATE OBJECT go_instance.
    ENDIF.

    ro_instance = go_instance.


  endmethod.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->POST_STATFIG
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD post_statfig.

    DATA: lt_item   TYPE STANDARD TABLE OF bapiskfitm WITH DEFAULT KEY,
          lt_return TYPE bapiret2_t,
          ls_return TYPE REF TO bapiret2,
          lv_count  TYPE i.

*   Bei Fehler keine weitere Verarbeitung
    CHECK cv_failure IS INITIAL.
*   Ohne Daten keine Competition
    CHECK gt_costs IS NOT INITIAL.
*   Kopfdaten füllen
    DATA(ls_header) = VALUE bapidochdrp( co_area    = cv_kokrs
                                         postgdate  
= cv_datbi
                                         doc_hdr_tx 
= 'CUM_COSTS' && ' ' && cv_gjahr && '/' && cv_perio
                                         username   
= sy-uname ).
*   Positionsdaten füllen
    LOOP AT gt_costs REFERENCE INTO DATA(ls_costs).
      lv_count = lv_count + 1.
      APPEND VALUE bapiskfitm( statkeyfig = cv_stagr
                               stat_qty   
= CONV smexxx( ls_costs->sum )
                               seg_text   = ' '
                               rec_cctr   = ls_costs->kostl ) TO lt_item.
      IF lv_count = 899.
*       Funktionsbaustein aufrufen
        CALL FUNCTION 'BAPI_ACC_STAT_KEY_FIG_POST'
          EXPORTING
            doc_header = ls_header
*           IGNORE_WARNINGS       = ' '
*      IMPORTING
*           doc_no     = lv_belnr
          TABLES
            doc_items  = lt_item
            
return     = lt_return.
*       Rückgabetabelle auswerten
        LOOP AT lt_return REFERENCE INTO ls_return.
          IF ls_return->type CA 'AEX'.
            cv_failure = abap_true.
          ENDIF.
          APPEND ls_return->* TO gt_return.
        ENDLOOP.
*       Clear
        CLEAR: lv_count, lt_item, lt_return.
      ENDIF.
    ENDLOOP.

*   Letzter Block
    IF lt_item IS NOT INITIAL.
*     Funktionsbaustein aufrufen
      CALL FUNCTION 'BAPI_ACC_STAT_KEY_FIG_POST'
        EXPORTING
          doc_header = ls_header
*         IGNORE_WARNINGS       = ' '
*      IMPORTING
*         doc_no     = lv_belnr
        TABLES
          doc_items  = lt_item
          
return     = lt_return.
*     Rückgabetabelle auswerten
      LOOP AT lt_return REFERENCE INTO ls_return.
        IF ls_return->type CA 'AEX'.
          cv_failure = abap_true.
        ENDIF.
        APPEND ls_return->* TO gt_return.
      ENDLOOP.
*       Clear
      CLEAR: lv_count, lt_item, lt_return.
    ENDIF.

*   Fehlerprüfung
    IF cv_failure NE abap_true.
*     Auf Datenbank schreiben
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.
    ELSE.
*     Nicht auf DB schreiben
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.

  ENDMETHOD.

 

Werbung

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->REVERSE_STATFIGPOST
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD reverse_statfigpost.

*   Erst mal kein Storno, sondern nur Fehlermeldung ausgeben
*   Selektion Kopf und Position
    SELECT
      a~kokrs, a~belnr,
      SUM( b~smebtr ) AS wert
      
FROM cobk AS a
      INNER 
JOIN coepr AS b
      
ON  a~kokrs EQ b~kokrs
      
AND a~belnr EQ b~belnr
      
WHERE a~kokrs EQ @cv_kokrs
      
AND   a~gjahr EQ @cv_gjahr
*      AND   a~versn EQ 0
      AND   a~vrgng EQ 'RKS'
      AND   a~perab EQ @cv_perio
      
AND   a~stflg NE @abap_true
      
AND   a~stokz NE @abap_true
      
AND   b~stagr EQ @cv_stagr
      
GROUP BY a~kokrs, a~belnr
      
INTO TABLE @DATA(lt_cobk).

*   Daten gefunden? Dann Fehler und Returntabelle füllen
    LOOP AT lt_cobk REFERENCE INTO DATA(ls_cobk).
      cv_failure = abap_true.
      APPEND VALUE bapiret2( id         = 'ZCO'
                             number     = 5       "Bitte &1 / &2 in &3 mittels KB34N stornieren (Wert: &4).
                             type       = 'E'
                             message_v1 = ls_cobk->kokrs
                             message_v2 
= ls_cobk->belnr
                             message_v3 
= cv_gjahr && '/' && cv_perio
                             message_v4 
= CONV char13( ls_cobk->wert ) ) TO gt_return.
    ENDLOOP.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->SET_DATA
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_SELECTION                   TYPE        TS_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD set_data.

*   Datum/Kostenrechnungskreis setzen
    set_selmain( is_selection ).
*   Kostenstellen festlegen
    set_kostenstellen( is_selection ).
*   Kostenarten festlegen
    set_kostenarten( is_selection ).

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->SET_KOSTENARTEN
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_SELECTION                   TYPE        TS_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD set_kostenarten.

    DATA: lt_setvalues TYPE TABLE OF setvalues,
          lr_kstar     TYPE rep_eaps_tab_kstar_range.

    IF is_selection-kstar IS NOT INITIAL.
*     Werte importieren
      CALL FUNCTION 'G_SET_TREE_IMPORT'
        EXPORTING
          client          = sy-mandt
          setid           
= is_selection-kstar
*         tabname         = table
*         fieldname       = fieldname
          no_descriptions = abap_true
          no_rw_info      
= abap_true
          date_from       
= cv_datab
          date_to         
= cv_datbi
        
TABLES
*         set_hierarchy   =
          set_values      = lt_setvalues
        
EXCEPTIONS
          set_not_found   = 1
          OTHERS          = 3.
*     Werte in Rangetabelle übernehmen
      LOOP AT lt_setvalues REFERENCE INTO DATA(ls_set).
        APPEND VALUE rep_eaps_str_kstar_range( sign    = 'I'
                                               option  = 'BT'
                                               low     = ls_set->from
                                               high    = ls_set->to ) TO gr_kstar.
      ENDLOOP.
    ENDIF.
*   Benötigte Daten selektieren und in Attributtabelle stellen
    gt_cskb = dbsel_cskb( gr_kstar ).

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->SET_KOSTENSTELLEN
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_SELECTION                   TYPE        TS_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD set_kostenstellen.

    DATA: lt_setvalues TYPE TABLE OF setvalues.

    CALL FUNCTION 'G_SET_TREE_IMPORT'
      EXPORTING
        client          = sy-mandt
        setid           
= is_selection-koset
*       tabname         = table
*       fieldname       = fieldname
        no_descriptions = abap_true
        no_rw_info      
= abap_true
        date_from       
= cv_datab
        date_to         
= cv_datbi
      
TABLES
*       set_hierarchy   =
        set_values      = lt_setvalues
      
EXCEPTIONS
        set_not_found   = 1
        OTHERS          = 3.

    LOOP AT lt_setvalues REFERENCE INTO DATA(ls_set).
      APPEND VALUE hrpp_sel_st_kostl( sign    = 'I'
                                      option  = 'BT'
                                      low     = ls_set->from
                                      high    = ls_set->to ) TO gr_kostl.
    ENDLOOP.

    gt_verto = dbsel_csks( gr_kostl ).


  ENDMETHOD.



 

* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->SET_SELMAIN
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_SELECTION                   TYPE        TS_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD set_selmain.

*   Übernahme in globale Attribute
    cv_gjahr = is_selection-gjahr.
    cv_perio = is_selection-perio.
    cv_kokrs = is_selection-kokrs.
    cv_gesam = is_selection-gesam.
    rt_verfr = is_selection-verfr.
    cv_verto = is_selection-verto.
    cv_stagr = is_selection-stagr.
*   Datum ermitteln
    SELECT SINGLE lmona FROM tka01
      
WHERE kokrs EQ @cv_kokrs
      
INTO @DATA(lv_periv).
*   Anfangsdatum
    CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
      EXPORTING
        i_gjahr        = cv_gjahr
*       I_MONMIT       = 00
        i_periv        = lv_periv
        i_poper        
= cv_perio
      
IMPORTING
        e_date         = cv_datab
      
EXCEPTIONS
        input_false    = 1
        t009_notfound  = 2
        t009b_notfound = 3
        OTHERS         = 4.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.
*   Enddatum
    CALL FUNCTION 'LAST_DAY_OF_MONTHS'
      EXPORTING
        day_in            = cv_datab
      
IMPORTING
        last_day_of_month = cv_datbi
      
EXCEPTIONS
        day_in_no_date    = 1
        OTHERS            = 2.
    IF sy-subrc <> 0.
* Implement suitable error handling here
    ENDIF.



  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_CO_COST2STATFIG->SHOW_LOG
* +-------------------------------------------------------------------------------------------------+
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD show_log.

    CALL FUNCTION 'C14ALD_BAPIRET2_SHOW'
      TABLES
        i_bapiret2_tab = gt_return.

  ENDMETHOD.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_CO_COST2STATFIG->START
* +-------------------------------------------------------------------------------------------------+
* | [--->] IS_SELECTION                   TYPE        TS_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD start.

*   Wesentliche Attribute füllen
    set_data( is_selection ).
*   Ggfls. bisherige stat. Kennzahl stornieren
    reverse_statfigpost( ).
*   Kosten ermitteln und Verdichten
    calculate_costs( ).
*   Wert buchen
    post_statfig( ).
*   Protokoll ausgeben
    show_log( ).

  ENDMETHOD.
ENDCLASS.

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