Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8635

Re: Wrong Dep Calculation on staraight line Method after changing useful life(As per New indian companies Act-2013)

$
0
0

Thanks Mukthar.

 

Due to inconsistency of Period scaling(PERFY) getting error.

 

ANLB-PERFY =12 we are getting Error "AA662"

ANLB-PERFY=365 Working Fine.

 

Same raised to sap and sap has provided soluation with program corrections.

 

Apply below program and execute inconsistency Assets.

Program name : ZCORR_PERFY

 

See below the parameters for the execution:

 

************************

Company Code    >>> 1000

Depreciation area   >>>  blank

Asset  >>>   indicate the inconsistent assets individually or leave

blank for the system to select all inconsistent assets only.

Subnumber >>> 0

 

 

Use of half periods

Dep.to the day  >>>> X  select this check box

Deact.

 

Expired useful life >>> X  select this check box

 

Test run >>> If check box is empty the real update takes place to

correct the inconsistent.

*****************************

 

After applied above changes, its working fine and calculating the Depreciation vlues correctly.

 

ZCORR_PERFY  :



 

*&---------------------------------------------------------------------*

*& Report  ZCORR_PERFY

*&

*&---------------------------------------------------------------------*

*& Korrektur von PERFY Inkonsistenzen.

*&

*& Version     :   2.0

*& Angelegt    :   ME, Datum unbekannt

*& DB Tabellen :   ANLB (upd), ANLC (upd)

*& Schedman    :   Ja

*&

*& Parameter

*& ---------

*& P_MONMIT (Halbperioden prüfen)

*& Es wird geprüft ob der Buchungskreis Halbperioden verwendet (T093C).

*& Falls JA, dann wird in allen Bereichen, die eine Variante mit genau

*& 12 Perioden verwenden, der Faktor "ld_monmit_faktor" auf 2 gestellt.

*& Die Anzahl der Buchungsperioden wird mit diesem Faktor multipliziert.

*& Bei Ermittlung der Nutzungsdauer wird der Faktor dagegen wieder raus-

*& gerechnet, da MONMIT hier keinen Einfluss hat.

*&

*& P_XDAILY (Tages-AfA prüfen)

*& Es werden sämtliche Schlüssel mit XDAILY selektiert. Werden keine

*& Schlüssel gefunden, wird "ld_no_xdaily_found" gesetzt und es geht

*& ganz normal weiter. Einzige Ausnahme: In der ANLB werden auch solche

*& Einträge geprüft, die PERFY = 365 haben.

*&

*& P_XDEAKT (Deaktivierte Anlagen bearbeiten)

*&

*& P_NDABP (Abgelaufene Nutzungsdauer aktualisieren)

*&---------------------------------------------------------------------*

*&

*& 26.09.2011 - Version 2.0

*& - Optionale Bearbeitung deaktiver Anlagen.

*& - Option zur Anpassung der geplanten Nutzungsdauer entfernt.

*& - Schedman Anbindung

*& - Teilweise umfangreiche formale Überarbeitungen

*&---------------------------------------------------------------------*

 

 

REPORT  zcorr_perfy.

 

 

TYPE-POOLS: slis.

INCLUDE: <icon>, racorr_schedman.

 

 

* Lokale Deklaration **************************************************

TYPES: BEGIN OF anlb_log.

INCLUDE STRUCTURE anlb.

TYPES:  perfy_new TYPE anlb-perfy,

        tab2 TYPE char4,

        gjahr TYPE anlc-gjahr,

        ndabj TYPE anlc-ndabj,

        ndabp TYPE anlc-ndabp,

        ndabp_new TYPE anlc-ndabp,

       END OF anlb_log.

 

 

TYPES: BEGIN OF anlc_log.

INCLUDE STRUCTURE anlc.

TYPES:  perfy_new TYPE anlb-perfy,

       END OF anlc_log.

 

 

DATA: lt_anlb_log TYPE TABLE OF anlb_log,

      ls_anlb_log TYPE anlb_log,

      gt_anlc_log TYPE TABLE OF anlc_log,

      ls_anlc_log TYPE anlc_log.

 

 

CONSTANTS: con_xdaily   TYPE anlb-perfy VALUE 365,

           con_monmit_faktor TYPE i VALUE 2,

           con_true  TYPE c VALUE 'X',

           con_false TYPE c VALUE ' ',

           con_anlb_log TYPE c VALUE 'B',

           con_anlc_log TYPE c VALUE 'C'.

 

 

CONSTANTS: gc_handle_top_of_page_html(30) TYPE c

           VALUE 'HANDLE_EVENT_TOP_OF_PAGE_HTML'.

 

 

DATA: lt_yanlb TYPE TABLE OF anlb,   "ANLB von DB

      lt_xanlb TYPE TABLE OF anlb,   "Update-Tabelle

      lt_xanlb_ges TYPE TABLE OF anlb,

      gt_xanlc_ges TYPE TABLE OF anlc,

      ls_t093c TYPE t093c,

      lt_t093a TYPE TABLE OF t093a,

      ls_t093a LIKE LINE OF lt_t093a,

      ls_anlc  TYPE anlc,

      lt_afasl_xdaily_range TYPE RANGE OF t090c-afasl,

      ld_no_xdaily_found TYPE c,

      ld_perfy_allowed TYPE anlb-perfy,

      ld_monmit_faktor TYPE i VALUE 1,

      gt_deakt TYPE TABLE OF anla,   "Deaktivierte Anlagen

      ld_deakt TYPE anla-deakt,

      ls_anlb  TYPE anlb,

      ld_anzbp TYPE t009-anzbp, "Wert für update in ANLB

      ld_afabe TYPE anlb-afabe,

      gd_success TYPE c,

      ld_plabel TYPE char80,

      gd_abgja TYPE t093b-abgja,

      gd_afabe_cnt TYPE sy-dbcnt,

      ld_msg   TYPE string.

 

 

* ALV

DATA: lt_fieldcat      TYPE  slis_t_fieldcat_alv.

*DATA: lt_sort          TYPE  slis_t_sortinfo_alv.

DATA: ls_layout        TYPE  slis_layout_alv.

DATA: lt_events        TYPE  slis_t_event.

*DATA: ls_variant       TYPE  disvariant.

*DATA: ls_print         TYPE  slis_print_alv.

*DATA: lt_excluding     TYPE  slis_t_extab.

*DATA: lt_quickinfo     TYPE  slis_t_qinfo_alv.

*DATA: lt_outtab        TYPE  TABLE OF anlcv.

 

 

* Message Handler / Schedman

CONSTANTS: con_balobject   TYPE balobj_d VALUE 'FIAA',

           con_balsubobj   TYPE balsubobj VALUE '009'.

DATA:      ld_ident        TYPE sy-uzeit,

           ld_loghandle    TYPE balloghndl.

 

 

 

 

FIELD-SYMBOLS: <lfs_xanlb> TYPE anlb,

               <lfs_yanlb> TYPE anlb,

               <lfs_anlc_log> TYPE anlc_log.

 

 

************************************************************************

* SELECTION-SCREEN

************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK main WITH FRAME.

  SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN COMMENT (30) l_bukrs FOR FIELD P_BUKRS.

    PARAMETERS p_bukrs TYPE t093c-bukrs MEMORY ID buk OBLIGATORY.

  SELECTION-SCREEN END OF LINE.

 

 

  SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN COMMENT (27) l_afabe FOR FIELD SO_AFABE.

    SELECT-OPTIONS so_afabe FOR ls_anlb-afabe.

  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN COMMENT (27) l_anln1 FOR FIELD SO_ANLN1.

    SELECT-OPTIONS so_anln1 FOR ls_anlb-anln1.

  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.

    SELECTION-SCREEN COMMENT (27) l_anln2 FOR FIELD SO_ANLN2.

    SELECT-OPTIONS so_anln2 FOR ls_anlb-anln2.

  SELECTION-SCREEN END OF LINE.

 

 

  SELECTION-SCREEN SKIP 1.

 

 

  SELECTION-SCREEN BEGIN OF BLOCK checks WITH FRAME TITLE t_checks.

    SELECTION-SCREEN BEGIN OF LINE.

      SELECTION-SCREEN COMMENT (25) l_monmit FOR FIELD P_MONMIT.

      PARAMETERS p_monmit TYPE c AS CHECKBOX.

    SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN BEGIN OF LINE.

      SELECTION-SCREEN COMMENT (25) l_xdaily FOR FIELD P_XDAILY.

      PARAMETERS p_xdaily TYPE c AS CHECKBOX.

    SELECTION-SCREEN END OF LINE.

    SELECTION-SCREEN BEGIN OF LINE.

      SELECTION-SCREEN COMMENT (25) l_xdeakt FOR FIELD P_XDEAKT.

      PARAMETERS p_xdeakt TYPE c AS CHECKBOX.

    SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN END OF BLOCK checks.

 

 

  SELECTION-SCREEN BEGIN OF BLOCK update WITH FRAME TITLE t_update.

    SELECTION-SCREEN BEGIN OF LINE.

      SELECTION-SCREEN COMMENT (25) l_ndabp FOR FIELD P_NDABP.

      PARAMETERS p_ndabp  TYPE c AS CHECKBOX USER-COMMAND UPDOPTS.

    SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN END OF BLOCK update.

 

 

  SELECTION-SCREEN BEGIN OF LINE.

    PARAMETERS: p_test   TYPE c AS CHECKBOX DEFAULT 'X'.

    SELECTION-SCREEN COMMENT (20) l_test FOR FIELD P_TEST.

  SELECTION-SCREEN END OF LINE.

  SELECTION-SCREEN BEGIN OF LINE.

    PARAMETERS p_sepout TYPE c AS CHECKBOX MODIF ID SLI.

    SELECTION-SCREEN COMMENT (40) l_sepout FOR FIELD P_SEPOUT.

  SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN END OF BLOCK main.

 

 

************************************************************************

* INITIALIZATION

************************************************************************

INITIALIZATION.

  t_checks = 'Advanced checks:'.

  t_update = 'Advanced update:'.

 

 

  PERFORM get_parameter_descr USING 'BUKRS' 'L' CHANGING ld_plabel.

  l_bukrs = ld_plabel.

  PERFORM get_parameter_descr USING 'AFABER' 'L' CHANGING ld_plabel.

  l_afabe = ld_plabel.

  PERFORM get_parameter_descr USING 'ANLN1' 'L' CHANGING ld_plabel.

  l_anln1 = ld_plabel.

  PERFORM get_parameter_descr USING 'ANLN2' 'L' CHANGING ld_plabel.

  l_anln2 = ld_plabel.

  PERFORM get_parameter_descr USING 'XHALBPER' 'L' CHANGING ld_plabel.

  l_monmit = ld_plabel.

  PERFORM get_parameter_descr USING 'XDAILY' 'L' CHANGING ld_plabel.

  l_xdaily = ld_plabel.

  PERFORM get_parameter_descr USING 'XDEAKT' 'S' CHANGING ld_plabel.

  l_xdeakt = ld_plabel.

  PERFORM get_parameter_descr USING 'NDABJ' 'L' CHANGING ld_plabel.

  l_ndabp = ld_plabel.

  PERFORM get_parameter_descr USING 'VVJTEST' 'L' CHANGING ld_plabel.

  l_test = ld_plabel.

  PERFORM get_parameter_descr USING 'DOPRXGAW' 'L' CHANGING ld_plabel.

  CONCATENATE ld_plabel ' (ANLB, ANLC)' INTO ld_plabel.

  l_sepout = ld_plabel.

 

 

************************************************************************

* AT SELECTION-SCREEN OUTPUT

************************************************************************

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

*   Checkbox: Ausgabe in separaten Listen

    IF screen-group1 = 'SLI'.

      IF p_ndabp EQ con_true.

        screen-input = 1.

      ELSE.

        screen-input = 0.

      ENDIF.

      MODIFY SCREEN.

    ENDIF.

  ENDLOOP.

 

 

************************************************************************

* START-OF-SELECTION

************************************************************************

START-OF-SELECTION.

 

 

* Message Handler und Schedman starten

IF p_test IS INITIAL.

  PERFORM open_schedman.                                    "schedman

ENDIF.

CALL FUNCTION 'MESSAGES_INITIALIZE'

  EXPORTING   i_no_duplicate_count = 1

  IMPORTING   e_identification     = ld_ident

  EXCEPTIONS  OTHERS               = 3.

* Infos über Parametrisierung des Programms wegschreiben

PERFORM store_flag USING p_monmit 'Check use of half-periods'.

PERFORM store_flag USING p_xdaily 'Check depreciation to the day'.

PERFORM store_flag USING p_xdeakt 'Update deactivated assets'.

PERFORM store_flag USING p_ndabp  'Update exp. useful life'.

 

 

IF p_ndabp IS INITIAL.

  p_sepout = con_false.

ENDIF.

 

 

* Standardmäßig XDAILY nicht(!) prüfen (siehe SELECT)

ld_perfy_allowed = con_xdaily.

 

 

ls_t093c-bukrs = p_bukrs.

 

 

CALL FUNCTION 'T093C_READ'

  EXPORTING  f_t093c = ls_t093c

  IMPORTING  f_t093c = ls_t093c.

 

 

* Selektionstabelle mit Tages-AfA Schlüsseln erstellen

IF NOT p_xdaily IS INITIAL.

  PERFORM get_xdaily_afasl USING ' ' ls_t093c-afapl

                           CHANGING lt_afasl_xdaily_range[].

* Keine Schlüssel mit Tages-AfA gefunden?

  IF lt_afasl_xdaily_range[] IS INITIAL.

*   Weiter wie normal. Einzige Ausnahme: ANLBs mit PERFY 365 auch prüfen

    CLEAR ld_perfy_allowed.

    ld_no_xdaily_found = con_true.

  ENDIF.

ENDIF.

 

 

SELECT * FROM t093a INTO TABLE lt_t093a[]

                    WHERE afapl EQ ls_t093c-afapl

                      AND afabe IN so_afabe[].

 

 

gd_afabe_cnt = sy-dbcnt.

 

 

* Verarbeitung bereichsweise, da sich ANZBP bei bereichsabh. PERIV

* unterscheiden kann.

LOOP AT lt_t093a INTO ls_t093a.

 

 

* Bereichsabhängige Variablen initialisieren **************************

  CLEAR lt_xanlb[].

  CLEAR lt_yanlb[].

  ld_monmit_faktor = 1.

  ld_afabe = ls_t093a-afabe.

  CLEAR gd_abgja.

  SELECT SINGLE abgja

    FROM t093b INTO gd_abgja

    WHERE bukrs EQ p_bukrs

      AND afabe EQ ls_t093a-afabe.

 

 

* Korrekte Anzahl Buchungsperioden eines Bereichs ermitteln.

  PERFORM get_anzbp_for_afabe USING p_bukrs ld_afabe

                              CHANGING ld_anzbp.

 

 

* MONMIT berücksichtigen

  IF NOT p_monmit IS INITIAL AND NOT ls_t093c-monmit IS INITIAL.

    IF ld_anzbp EQ 12.

      ld_monmit_faktor = 2.

    ENDIF.

  ENDIF.

 

 

  ld_anzbp = ld_anzbp * ld_monmit_faktor.

 

 

* Datenselektion: ANLB ************************************************

  IF p_xdaily IS INITIAL OR ld_no_xdaily_found EQ con_true.

*   Anlagen mit von Anzahl Perioden abweichendem PERFY selektieren.

*   Initialer Wert für unbebuchte Anlagen (und evtl. 365) ist ok

    SELECT * FROM anlb INTO TABLE lt_yanlb[]

                       WHERE bukrs EQ p_bukrs

                         AND anln1 IN so_anln1

                         AND anln2 IN so_anln2

                         AND afabe EQ ld_afabe

                         AND perfy NE ld_anzbp

                         AND perfy NE ld_perfy_allowed

                         AND perfy NE '   '

                       ORDER BY PRIMARY KEY.

  ELSE.

*   Wenn auch XDAILY des AfA-Schlüssels geprüft werden soll:

*   Bereiche ohne AFASL mit XDAILY müssen PERFY = ANZBP haben.

*   Für Bereiche mit einem XDAILY-Schlüssel muss PERFY = 365 sein.

    SELECT * FROM anlb INTO TABLE lt_yanlb[]

                       WHERE bukrs EQ p_bukrs

                         AND anln1 IN so_anln1

                         AND anln2 IN so_anln2

                         AND afabe EQ ld_afabe

                         AND perfy NE '   '

                         AND (   ( perfy NE ld_anzbp AND

                                   afasl NOT IN lt_afasl_xdaily_range )

                              OR ( afasl IN lt_afasl_xdaily_range AND

                                   perfy NE con_xdaily ) )

                       ORDER BY PRIMARY KEY.

  ENDIF.

 

 

* Arbeitstabellen korrigieren, Log schreiben **************************

* Daten für UPDATE vorbereiten. Log-Tabelle für Ausgabe füllen.

  LOOP AT lt_yanlb[] ASSIGNING <lfs_yanlb>.

*   Keine Bearbeitung, wenn Anlage deaktiviert

    IF p_xdeakt IS INITIAL.

      PERFORM get_deakt USING <lfs_yanlb>-bukrs

                              <lfs_yanlb>-anln1

                              <lfs_yanlb>-anln2 CHANGING ld_deakt.

    ENDIF.

    IF ld_deakt IS INITIAL.

      APPEND <lfs_yanlb> TO lt_xanlb[] ASSIGNING <lfs_xanlb>.

*     Log-Eintrag mit Daten vor Änderung initialisieren

      MOVE <lfs_xanlb> TO ls_anlb_log.

*     Erstmal PERFY auf ANZBP der GJahresveriante setzen.

      <lfs_xanlb>-perfy = ld_anzbp.

*     XDAILY erst jetzt prüfen, weil kein Einfluss auf NtzDauer

      IF ( p_xdaily EQ con_true ) AND ( ld_no_xdaily_found EQ con_false ).

*       PERFY 356 setzen, falls Schlüssel Tages-AfA verwendet.

        IF <lfs_xanlb>-afasl IN lt_afasl_xdaily_range.

          <lfs_xanlb>-perfy = con_xdaily.

        ENDIF.

      ENDIF.

*     ANLB Änderungen in Log schreiben

      ls_anlb_log-perfy_new = <lfs_xanlb>-perfy.

      APPEND ls_anlb_log TO lt_anlb_log.

*     Abgel. Nutzungsdauer in ANLC updaten

      IF p_ndabp EQ con_true.

        PERFORM recalculate_exp_ul USING <lfs_xanlb> ls_t093c.

      ENDIF.

    ENDIF.

  ENDLOOP.

  IF NOT lt_xanlb[] IS INITIAL.

    DESCRIBE TABLE lt_xanlb[] LINES ld_msg.

    CONCATENATE 'Area' ld_afabe '- Incorrect entries found in ANLB:' ld_msg

      INTO ld_msg SEPARATED BY ' '.

    PERFORM store_f5899_msg USING 'I' ld_msg.

    APPEND LINES OF lt_xanlb[] TO lt_xanlb_ges[].

  ENDIF.

ENDLOOP.

 

 

* Meldung über Anzahl insgesamt bearbeiteter ANLB Einträge

DESCRIBE TABLE lt_xanlb_ges[] LINES ld_msg.

CONCATENATE 'Number of entries to be corrected in ANLB:' ld_msg

  INTO ld_msg SEPARATED BY ' '.

PERFORM store_f5899_msg USING 'I' ld_msg.

 

 

* DB Update durchführen ***********************************************

IF p_test IS INITIAL.

  gd_success = 'X'.

  UPDATE anlb FROM TABLE lt_xanlb_ges.

  IF sy-subrc EQ 0.

    LOOP AT gt_xanlc_ges[] INTO ls_anlc.

      UPDATE anlc SET ndabj = ls_anlc-ndabj

                      ndabp = ls_anlc-ndabp

                WHERE bukrs EQ ls_anlc-bukrs

                  AND anln1 EQ ls_anlc-anln1

                  AND anln2 EQ ls_anlc-anln2

                  AND gjahr EQ ls_anlc-gjahr

                  AND afabe EQ ls_anlc-afabe.

      IF sy-subrc NE 0.

        CLEAR gd_success.

      ENDIF.

    ENDLOOP.

  ELSE.

    CLEAR gd_success.

  ENDIF.

* COMMIT nur, wenn alle Updates erfolgreich

  IF NOT gd_success IS INITIAL.

    PERFORM store_f5899_msg USING 'S' 'Updates performed successully.'.

    COMMIT WORK.

  ELSE.

    PERFORM store_f5899_msg

      USING 'E' 'Error during update. No changes performed.'.

    ROLLBACK WORK.

  ENDIF.

* Meldungen speichern und Schedman beenden

  CALL FUNCTION 'MESSAGES_SAVE'

    EXPORTING  i_balobject       = con_balobject

               i_balsubobject    = con_balsubobj

               i_identification  = ld_ident

    IMPORTING  e_log_handle      = ld_loghandle

    EXCEPTIONS OTHERS            = 6.

  PERFORM close_schedman USING ld_loghandle.                "schedman

ELSE.

  PERFORM store_f5899_msg USING 'I' 'Testrun. No Updates performed.'.

  ROLLBACK WORK.

ENDIF.

 

 

************************************************************************

* END-OF-SELECTION

************************************************************************

END-OF-SELECTION.

 

 

CALL FUNCTION 'MESSAGES_SHOW'

  EXCEPTIONS OTHERS = 3.

 

 

CALL FUNCTION 'MESSAGES_STOP'

  EXPORTING  i_reset_messages = 'X'

  EXCEPTIONS OTHERS = 1.

 

 

* Ausgabe in nur einer Liste? Dann ANLC- und ANLB-Log verwurschteln

IF p_sepout IS INITIAL.

  LOOP AT gt_anlc_log ASSIGNING <lfs_anlc_log>.

    CLEAR ls_anlb_log.

    MOVE-CORRESPONDING <lfs_anlc_log> TO ls_anlb_log.

    ls_anlb_log-tab2 = 'ANLC'.

    APPEND ls_anlb_log TO lt_anlb_log.

  ENDLOOP.

  SORT lt_anlb_log STABLE BY anln1 anln2 afabe.

ENDIF.

 

 

* ALV Ausgabe

PERFORM init_alv USING con_anlb_log

                 CHANGING lt_fieldcat[]

                          ls_layout

                          lt_events[].

 

 

IF p_sepout EQ con_true.

* "list_append geht nur bei ALV list

  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

    EXPORTING

      I_BYPASSING_BUFFER                = 'X'

      I_CALLBACK_PROGRAM                = 'ZCORR_PERFY'

      IS_LAYOUT                         = ls_layout

      IT_FIELDCAT                       = lt_fieldcat

      IT_EVENTS                         = lt_events

    TABLES

      t_outtab                          = lt_anlb_log[]

    EXCEPTIONS

      PROGRAM_ERROR                     = 1

      OTHERS                            = 2

            .

ELSE.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      I_BYPASSING_BUFFER                = 'X'

      I_CALLBACK_PROGRAM                = 'ZCORR_PERFY'

      I_CALLBACK_HTML_TOP_OF_PAGE       = gc_handle_top_of_page_html

      IS_LAYOUT                         = ls_layout

      IT_FIELDCAT                       = lt_fieldcat

      IT_EVENTS                         = lt_events

    TABLES

      t_outtab                          = lt_anlb_log[]

    EXCEPTIONS

      PROGRAM_ERROR                     = 1

      OTHERS                            = 2

            .

ENDIF.

 

 

IF sy-subrc <> 0.

  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

 

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  get_anzbp_for_afabe

*&---------------------------------------------------------------------*

* Liefert zu einem Bereich die Anzahl der Perioden gemäß zu verwendender

* Geschäftsjahresvariante.

*&---------------------------------------------------------------------*

FORM get_anzbp_for_afabe USING u_bukrs TYPE t093c-bukrs

                               u_afabe TYPE t093b-afabe

                         CHANGING c_anzbp TYPE t009-anzbp.

 

 

  DATA: ls_t001  TYPE t001,

        ls_t093c TYPE t093c,

        ls_t093b TYPE t093b,

        ls_t009  TYPE t009,

        ld_periv TYPE t001-periv.

 

 

  CLEAR c_anzbp.

 

 

  ls_t001-bukrs  = u_bukrs.

  ls_t093c-bukrs = u_bukrs.

  ls_t093b-bukrs = u_bukrs.

  ls_t093b-afabe = u_afabe.

 

 

* Zu verwendende Geshäftsjahresvariante ermitteln

  CALL FUNCTION 'AM_T001_READ'

    EXPORTING  f_t001 = ls_t001

    IMPORTING  f_t001 = ls_t001.

 

 

  CALL FUNCTION 'T093C_READ'

    EXPORTING  f_t093c = ls_t093c

    IMPORTING  f_t093c = ls_t093c

    EXCEPTIONS OTHERS  = 2.

 

 

  CALL FUNCTION 'T093B_READ'

    EXPORTING  f_t093b = ls_t093b

    IMPORTING  f_t093b = ls_t093b

    EXCEPTIONS OTHERS  = 2.

 

 

  IF ls_t093b-periv IS INITIAL.

    IF ls_t093c-periv IS INITIAL.

      ls_t009-periv = ls_t001-periv.

    ELSE.

      ls_t009-periv = ls_t093c-periv.

    ENDIF.

  ELSE.

    ls_t009-periv = ls_t093b-periv.

  ENDIF.

 

 

* Anzahl Buchungsperioden gemäß GJahresvariante lesen.

  CALL FUNCTION 'T009_READ'

    EXPORTING  f_t009    = ls_t009

    IMPORTING  f_t009    = ls_t009

    EXCEPTIONS not_found = 1

               OTHERS    = 2.

 

 

  IF sy-subrc NE 0.

    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

 

 

  c_anzbp = ls_t009-anzbp.

 

 

ENDFORM.                    "GET_ANBZBP_FOR_AFABE

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  get_xdaily_afasl

*&---------------------------------------------------------------------*

* Liefert eine RANGE-Tabelle für alle AFASL mit gesetztem XDAILY.

*

* -> u_oldtab: Wenn 'X', Selektion über alte Tabellen

*&---------------------------------------------------------------------*

FORM get_xdaily_afasl USING u_oldtab TYPE c

                            u_afapl  TYPE t093c-afapl

                      CHANGING c_afasl_range LIKE lt_afasl_xdaily_range.

 

 

  DATA: ld_afasl  TYPE t090c-afasl,

        ls_afasl_range LIKE LINE OF c_afasl_range[].

 

 

  ls_afasl_range-sign = 'I'.

  ls_afasl_range-option = 'EQ'.

 

 

  IF u_oldtab EQ con_true. "Alte Tabellen

    SELECT c~afasl INTO ld_afasl

                   FROM  t090c AS c JOIN t090 AS t

                         ON c~nafasl EQ t~afarsl

                   WHERE t~xdaily EQ con_xdaily.

      ls_afasl_range-low = ld_afasl.

      APPEND ls_afasl_range TO c_afasl_range[].

    ENDSELECT.

 

 

  ELSE.                    "Neue Tabellen

    SELECT afasl FROM t090na INTO ld_afasl

             WHERE afapl  EQ u_afapl

               AND xdaily EQ con_true.

      ls_afasl_range-low = ld_afasl.

      APPEND ls_afasl_range TO c_afasl_range[].

    ENDSELECT.

  ENDIF.

 

 

ENDFORM.

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  recalculate_exp_ul

*&---------------------------------------------------------------------*

* Abgelaufene Nutzungsdauer neurechnen

*&---------------------------------------------------------------------*

FORM recalculate_exp_ul USING us_anlb  TYPE anlb

                              us_t093c TYPE t093c.

 

 

 

 

  TYPES: BEGIN OF recalc_buf,

          bukrs TYPE anla-bukrs,

          anln1 TYPE anla-anln1,

          anln2 TYPE anla-anln2,

          ants  TYPE ants,

          gjahr TYPE anlc-gjahr,

         END OF recalc_buf.

 

 

* Puffer, um doppelte Bearbeitung zu verhindern

  STATICS: st_recalc_buf TYPE SORTED TABLE OF recalc_buf

                         WITH UNIQUE KEY bukrs anln1 anln2.

 

 

  DATA: ls_ants TYPE ants,

        lt_anlb TYPE TABLE OF anlb,

        lt_anlc TYPE TABLE OF anlc,

        ls_anlc LIKE LINE OF lt_anlc,

        lt_anlz TYPE TABLE OF anlz,

        ld_afabg TYPE anlb-afabg,

        ld_gjahr TYPE anlc-gjahr,

        lt_anfm  TYPE TABLE OF anfm,

        ls_recalc_buf TYPE recalc_buf.

 

 

  FIELD-SYMBOLS: <lfs_anlb> TYPE anlb.

 

 

* Daten lesen *********************************************************

* Anlage schon bearbeitet (anderer AfA-Bereich)?

  READ TABLE st_recalc_buf[] WITH KEY bukrs = us_anlb-bukrs

                                      anln1 = us_anlb-anln1

                                      anln2 = us_anlb-anln2

                                 INTO ls_recalc_buf

                                 BINARY SEARCH.

 

 

  IF sy-subrc EQ 0.

    ls_ants  = ls_recalc_buf-ants.

    ld_gjahr = ls_recalc_buf-gjahr.

 

 

  ELSE.

 

 

    CALL FUNCTION 'APER_GET_ANTS_FROM_DB'

      EXPORTING  i_bukrs = us_anlb-bukrs

                 i_anln1 = us_anlb-anln1

                 i_anln2 = us_anlb-anln2

                 i_budat = sy-datum

      IMPORTING  e_ants  = ls_ants.

 

 

    SELECT * FROM anlb INTO TABLE lt_anlb[]

                       WHERE bukrs EQ us_anlb-bukrs

                         AND anln1 EQ us_anlb-anln1

                         AND anln2 EQ us_anlb-anln2.

*   Erstes Jahr der Berechnung ermitteln

*   kleinstes AfA-Beginndatum feststellen, um Beginn-Gjahr zu ermitteln

    CLEAR ld_afabg.

 

 

    LOOP AT lt_anlb[] ASSIGNING <lfs_anlb>.

*     Normal-AfA-Beginn checken

      IF NOT <lfs_anlb>-afabg IS INITIAL.

        IF ld_afabg IS INITIAL.

          ld_afabg = <lfs_anlb>-afabg.

        ELSE.

          IF <lfs_anlb>-afabg < ld_afabg.

            ld_afabg = <lfs_anlb>-afabg.

          ENDIF.

        ENDIF.

      ENDIF.

*     Sonder-AfA-Beginn checken

      IF NOT <lfs_anlb>-safbg IS INITIAL.

        IF ld_afabg IS INITIAL.

          ld_afabg = <lfs_anlb>-safbg.

        ELSE.

          IF <lfs_anlb>-safbg < ld_afabg.

            ld_afabg = <lfs_anlb>-safbg.

          ENDIF.

        ENDIF.

      ENDIF.

    ENDLOOP.

 

 

*   Wenn kein AFA-Beg gesetzt, kann auch keine Nutzd. ermittelt werden

    IF NOT ld_afabg IS INITIAL.

*      Erstes Geschäftsjahr der Anlage ermitteln

       CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'

          EXPORTING    i_date   = ld_afabg

                       i_monmit = us_t093c-monmit

                       i_periv  = us_t093c-periv

          IMPORTING    e_gjahr  = ld_gjahr

          EXCEPTIONS   OTHERS  = 01.

    ENDIF.

*   Puffer nur sinnvoll, wenn mehr als ein Bereich geprüft wird.

    IF gd_afabe_cnt GT 1.

      ls_recalc_buf-bukrs = us_anlb-bukrs.

      ls_recalc_buf-anln1 = us_anlb-anln1.

      ls_recalc_buf-anln2 = us_anlb-anln2.

      ls_recalc_buf-ants  = ls_ants.

      ls_recalc_buf-gjahr = ld_gjahr.

*     Anlage mit ld_gjahr Puffer schreiben

      INSERT ls_recalc_buf INTO TABLE st_recalc_buf[].

    ENDIF.

  ENDIF.

 

 

* Abgel. Nutzungsdauer neurechnen *************************************

  IF NOT ld_gjahr IS INITIAL.

*   Leere ANLC als "Behälter" für Nutzungsdauer

    MOVE-CORRESPONDING us_anlb TO ls_anlc.

    ls_anlc-gjahr = ld_gjahr.

    APPEND ls_anlc TO lt_anlc[].

 

 

    CLEAR lt_anlb[].

    APPEND us_anlb TO lt_anlb[].

 

 

*    Bis zum aktuellen GJAHR neurechnen

     WHILE ld_gjahr < us_t093c-lgjahr.

        CALL FUNCTION 'RA_FISCAL_YEAR_CHANGE'

             EXPORTING     i_ants                   = ls_ants

                           i_ndab                   = 'X'

                           i_cal_closed_fyears      = 'X'

             TABLES        t_anfm                   = lt_anfm[]

                           t_anlb                   = lt_anlb[]

                           t_anlc                   = lt_anlc[]

                           t_anlz                   = lt_anlz[]

             EXCEPTIONS    depr_not_posible         = 01

                           minwert_verletzt         = 02

                           normal_afa_verletzt      = 03

                           period_false             = 04

                           rbw_virt_afaber_verletzt = 05

                           sonder_afa_verletzt      = 06.

 

 

*       Wenn von existierendem ANLC an, dann neue zurückgeben

        READ TABLE lt_anlc INTO ls_anlc INDEX 1.

        IF ls_anlc-gjahr GT gd_abgja.

          MOVE-CORRESPONDING ls_anlc TO ls_anlc_log.

          APPEND ls_anlc_log TO gt_anlc_log.

          APPEND ls_anlc TO gt_xanlc_ges.

        ENDIF.

 

 

        ld_gjahr = ld_gjahr + 1.

     ENDWHILE.

   ENDIF.

 

 

ENDFORM.

 

 

*&---------------------------------------------------------------------*

*&      Form  get_deakt

*&---------------------------------------------------------------------*

* Liefert Deaktivierungsdatum einer Anlage

*&---------------------------------------------------------------------*

FORM get_deakt USING u_bukrs TYPE anla-bukrs

                     u_anln1 TYPE anla-anln1

                     u_anln2 TYPE anla-anln2

               CHANGING c_deakt TYPE anla-deakt.

 

 

  STATICS: ss_last_asset TYPE anla_key,

           sd_deakt      TYPE anla-deakt.

  DATA:    ls_curr_asset TYPE anla_key.

 

 

  ls_curr_asset-bukrs = u_bukrs.

  ls_curr_asset-anln1 = u_anln1.

  ls_curr_asset-anln2 = u_anln2.

 

 

  IF ls_curr_asset NE ss_last_asset.

*   Puffer aktualisieren

    CLEAR sd_deakt.

    SELECT SINGLE deakt FROM anla

           INTO sd_deakt

           WHERE bukrs EQ ls_curr_asset-bukrs

             AND anln1 EQ ls_curr_asset-anln1

             AND anln2 EQ ls_curr_asset-anln2.

    ss_last_asset = ls_curr_asset.

  ENDIF.

 

 

  c_deakt = sd_deakt.

 

 

ENDFORM.

 

 

*&---------------------------------------------------------------------*

*&      Form  get_parameter_description

*&---------------------------------------------------------------------*

*       Liefert sprachabhängigen Feldbezeichner

*----------------------------------------------------------------------*

*      -->U_DELEM    Datenelement

*      <--C_DESCR    Text

*----------------------------------------------------------------------*

FORM get_parameter_descr USING u_delem TYPE char30

                               u_text TYPE c

                         CHANGING c_descr LIKE ld_plabel.

 

 

  DATA ls_dfies TYPE dfies.

 

 

  CALL FUNCTION 'DDIF_FIELDINFO_GET'

    EXPORTING   tabname         = u_delem

                all_types       = 'X'

    IMPORTING   dfies_wa        = ls_dfies

    EXCEPTIONS  not_found       = 1

                internal_error  = 2

                OTHERS          = 3

            .

  IF SY-SUBRC EQ 0.

    CASE u_text.

      WHEN 'S'. c_descr = ls_dfies-scrtext_s.

      WHEN 'M'. c_descr = ls_dfies-scrtext_m.

      WHEN 'L'. c_descr = ls_dfies-scrtext_l.

      WHEN 'R'. c_descr = ls_dfies-reptext.

    ENDCASE.

  ELSE.

    c_descr = '???'.

  ENDIF.

ENDFORM.

 

 

*&---------------------------------------------------------------------*

*&      Form  init_callback_routines

*&---------------------------------------------------------------------*

FORM init_alv USING u_alv

              CHANGING ct_fieldcat TYPE slis_t_fieldcat_alv

                       cs_layout   TYPE slis_layout_alv

                       ct_events   TYPE  slis_t_event.

 

 

  CLEAR: ct_fieldcat, cs_layout, ct_events[].

 

 

  PERFORM init_fieldcatalog USING u_alv CHANGING lt_fieldcat.

  PERFORM init_layout USING u_alv CHANGING ls_layout.

* PERFORM init_sort CHANGING lt_sort.

* PERFORM init_excluding CHANGING lt_excluding.

* PERFORM init_print CHANGING ls_print.

  PERFORM init_callback_routines USING u_alv CHANGING lt_events.

 

 

ENDFORM.

 

 

*&---------------------------------------------------------------------*

*&      Form  init_fieldcatalog

*&---------------------------------------------------------------------*

FORM init_fieldcatalog USING u_alv

                       CHANGING ct_fieldcat TYPE slis_t_fieldcat_alv.

 

 

  FIELD-SYMBOLS: <lfs_fieldcat> LIKE LINE OF ct_fieldcat.

  DATA: lt_anlc_fieldcat TYPE slis_t_fieldcat_alv,

        ls_fieldcat LIKE LINE OF ct_fieldcat,

        ld_nextcol TYPE sy-cucol VALUE 1,

        ld_col_pos TYPE sy-tabix.

 

 

IF u_alv EQ con_anlb_log.

* get ANLB fieldcat as default

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

    EXPORTING

      i_structure_name   = 'ANLB'

      i_bypassing_buffer = 'X'

    CHANGING

      ct_fieldcat        = ct_fieldcat

    EXCEPTIONS

      OTHERS             = 1.

 

 

  LOOP AT ct_fieldcat ASSIGNING <lfs_fieldcat>.

*   Technischer Feldname als Überschrift

    <lfs_fieldcat>-reptext_ddic = <lfs_fieldcat>-fieldname.

    <lfs_fieldcat>-ddictxt      = 'R'.

*   Sonstiges Formatierungen

    CASE <lfs_fieldcat>-fieldname.

      WHEN 'MANDT'.

        <lfs_fieldcat>-key = con_true.

      WHEN 'BUKRS'.

        <lfs_fieldcat>-key = con_true.

      WHEN 'ANLN1'.

        <lfs_fieldcat>-key = con_true.

      WHEN 'ANLN2'.

        <lfs_fieldcat>-key = con_true.

      WHEN 'AFABE'.

        <lfs_fieldcat>-key = con_true.

      WHEN 'BDATU'.

        <lfs_fieldcat>-key = con_true.

       WHEN OTHERS.

         IF <lfs_fieldcat>-fieldname NE 'ADATU' AND

            <lfs_fieldcat>-fieldname NE 'ERNAM' AND

            <lfs_fieldcat>-fieldname NE 'ERDAT' AND

            <lfs_fieldcat>-fieldname NE 'XLOEV' AND

            <lfs_fieldcat>-fieldname NE 'XSPEB' AND

            <lfs_fieldcat>-fieldname NE 'AFABG' AND

            <lfs_fieldcat>-fieldname NE 'AFASL' AND

            <lfs_fieldcat>-fieldname NE 'NDJAR' AND

            <lfs_fieldcat>-fieldname NE 'NDPER' AND

            <lfs_fieldcat>-fieldname NE 'NDPER_NEW' AND

            <lfs_fieldcat>-fieldname NE 'LGJAN' AND

            <lfs_fieldcat>-fieldname NE 'PERFY' AND

            <lfs_fieldcat>-fieldname NE 'PERFY_NEW'.

 

 

           <lfs_fieldcat>-no_out = 'X'.

         ELSE.

           IF <lfs_fieldcat>-fieldname EQ 'PERFY'.

             <lfs_fieldcat>-emphasize = 'C610'.

*            Eintrag kopieren für geändertes PERFY

             MOVE <lfs_fieldcat> TO ls_fieldcat.

             ls_fieldcat-fieldname = 'PERFY_NEW'.

             ls_fieldcat-emphasize = 'C510'.

             APPEND ls_fieldcat TO ct_fieldcat.

           ENDIF.

         ENDIF.

    ENDCASE.

  ENDLOOP.

* Wenn Ausgabe in 1 Liste, dann einige ANLC Felder mit in Feldkatalog

  IF p_ndabp EQ con_true AND p_sepout EQ con_false.

    DESCRIBE TABLE ct_fieldcat LINES ld_col_pos.

    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

      EXPORTING

        i_structure_name   = 'ANLC'

        i_bypassing_buffer = 'X'

      CHANGING

        ct_fieldcat        = lt_anlc_fieldcat

      EXCEPTIONS

        OTHERS             = 1.

    LOOP AT lt_anlc_fieldcat ASSIGNING <lfs_fieldcat>.

*     Technischer Feldname als Überschrift

      IF <lfs_fieldcat>-fieldname EQ 'BUKRS' OR

         <lfs_fieldcat>-fieldname EQ 'GJAHR' OR

         <lfs_fieldcat>-fieldname EQ 'NDABJ' OR

         <lfs_fieldcat>-fieldname EQ 'NDABP'.

        ADD 1 TO ld_col_pos.

        <lfs_fieldcat>-col_pos = ld_col_pos.

        CASE <lfs_fieldcat>-fieldname.

          WHEN 'BUKRS'.

            <lfs_fieldcat>-fieldname = 'TAB2'.

            CLEAR <lfs_fieldcat>-key.

            <lfs_fieldcat>-emphasize = 'C410'.

            <lfs_fieldcat>-reptext_ddic = <lfs_fieldcat>-fieldname.

          WHEN 'GJAHR'.

            CLEAR <lfs_fieldcat>-key.

            <lfs_fieldcat>-emphasize = 'C410'.

          WHEN 'NDABJ'.

            <lfs_fieldcat>-emphasize = 'C500'.

          WHEN 'NDABP'.

            <lfs_fieldcat>-emphasize = 'C500'.

        ENDCASE.

        <lfs_fieldcat>-reptext_ddic = <lfs_fieldcat>-fieldname.

        <lfs_fieldcat>-ddictxt      = 'R'.

        APPEND <lfs_fieldcat> TO ct_fieldcat.

      ENDIF.

    ENDLOOP.

  ENDIF.

* Zweiter Feldkatalog für ANLC-Daten ---*

ELSE.

* get ANLC fieldcat as default

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'

    EXPORTING  i_structure_name   = 'ANLC'

               i_bypassing_buffer = 'X'

    CHANGING   ct_fieldcat        = ct_fieldcat

    EXCEPTIONS OTHERS             = 1.

 

 

  LOOP AT ct_fieldcat ASSIGNING <lfs_fieldcat>.

*   Technischer Feldname als Überschrift

    IF <lfs_fieldcat>-fieldname NE 'BUKRS' AND

       <lfs_fieldcat>-fieldname NE 'ANLN1' AND

       <lfs_fieldcat>-fieldname NE 'ANLN2' AND

       <lfs_fieldcat>-fieldname NE 'GJAHR' AND

       <lfs_fieldcat>-fieldname NE 'AFABE' AND

       <lfs_fieldcat>-fieldname NE 'NDABJ' AND

       <lfs_fieldcat>-fieldname NE 'NDABP'.

 

 

      <lfs_fieldcat>-tech = con_true.

    ELSE.

      <lfs_fieldcat>-reptext_ddic = <lfs_fieldcat>-fieldname.

      <lfs_fieldcat>-ddictxt      = 'R'.

      IF <lfs_fieldcat>-fieldname EQ 'NDABJ'.

        <lfs_fieldcat>-emphasize = 'C500'.

      ELSEIF <lfs_fieldcat>-fieldname EQ 'NDABP'.

        <lfs_fieldcat>-emphasize = 'C500'.

      ENDIF.

    ENDIF.

  ENDLOOP.

ENDIF.

ENDFORM.                    " init_fieldcatalog

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  init_layout

*&---------------------------------------------------------------------*

FORM init_layout USING u_alv

                 CHANGING cs_layout   TYPE  slis_layout_alv.

  cs_layout-window_titlebar   = 'ZCORR_PERFY: RESULTS'.

  cs_layout-colwidth_optimize = con_true.

  cs_layout-zebra             = con_true.

  IF p_sepout EQ con_true.

    IF u_alv EQ con_anlb_log.

      cs_layout-list_append       = 'Y'.

    ELSE.

      cs_layout-list_append       = 'X'.

    ENDIF.

  ENDIF.

ENDFORM.                    " init_layout

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  init_callback_routines

*&---------------------------------------------------------------------*

FORM init_callback_routines USING u_alv

                            CHANGING ct_events TYPE  slis_t_event.

 

 

  DATA: ls_events LIKE LINE OF ct_events.

 

 

  IF u_alv EQ con_anlb_log AND P_NDABP EQ con_true.

*

  ls_events-name = 'TOP_OF_LIST'.

  ls_events-form = 'HANDLE_EVENT_TOP_OF_LIST'.

  APPEND ls_events TO ct_events.

 

 

  IF p_ndabp EQ con_true AND p_sepout EQ con_true.

*   2. ALV für ANLC-Daten anhängen

    ls_events-name = 'END_OF_LIST'.

    ls_events-form = 'HANDLE_EVENT_END_OF_LIST'.

    APPEND ls_events TO ct_events.

  ENDIF.

  ENDIF.

 

 

ENDFORM.                    " init_callback_routines

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  handle_event_top_of_list

*&---------------------------------------------------------------------*

*       Text erzeugen

*----------------------------------------------------------------------*

FORM handle_event_top_of_list .

 

 

  SKIP 1.

  IF p_test EQ con_true.

    WRITE ICON_HINT AS ICON.

    WRITE 'Program started in testmode: No updates performed'.

  ELSE.

    IF gd_success EQ con_true.

      WRITE ICON_HINT AS ICON.

      WRITE 'Updates performed successfully'.

    ELSE.

      WRITE ICON_ALERT AS ICON.

      WRITE 'Errors during update'.

    ENDIF.

  ENDIF.

 

 

  ULINE.

 

 

ENDFORM.                    " handle_event_top_of_list

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  handle_event_end_of_list

*&---------------------------------------------------------------------*

*       Bei abgel. Nutzungsdauer neurechnen auch ANLC Daten anzeigen.

*----------------------------------------------------------------------*

FORM handle_event_end_of_list .

 

 

* ALV Ausgabe

PERFORM init_alv USING con_anlc_log

                 CHANGING lt_fieldcat[]

                          ls_layout

                          lt_events[].

 

 

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'

  EXPORTING

    I_BYPASSING_BUFFER                = 'X'

    I_CALLBACK_PROGRAM                = 'ZCORR_PERFY'

    IS_LAYOUT                         = ls_layout

    IT_FIELDCAT                       = lt_fieldcat

    IT_EVENTS                         = lt_events

  TABLES

    t_outtab                          = gt_anlc_log[]

  EXCEPTIONS

    PROGRAM_ERROR                     = 1

    OTHERS                            = 2

          .

IF sy-subrc <> 0.

  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

 

 

 

 

ENDFORM.                    " handle_event_end_of_list

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  handle_event_top_of_page_html

*&---------------------------------------------------------------------*

*       Text-Ausgabe

*----------------------------------------------------------------------*

FORM handle_event_top_of_page_html USING top TYPE REF TO cl_dd_document.

 

 

  DATA: lr_grid TYPE REF TO cl_gui_alv_grid,

        ld_text(255) TYPE c,

        ld_count TYPE i.

  CONSTANTS: con_set_row_height(14) TYPE c VALUE 'SET_ROW_HEIGHT'.

  FIELD-SYMBOLS <lfs_afasl_range> LIKE LINE OF lt_afasl_xdaily_range.

 

 

* Höhe des Info-Fensters setzen

  TRY.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

      e_grid = lr_grid.

 

 

  CALL METHOD lr_grid->parent->parent->(con_set_row_height)

    EXPORTING

      id     = 1

      height = 10.

  CATCH CX_SY_DYN_CALL_ILLEGAL_FUNC.

*   GET_GLOBALS_FROM_SLVC_FULLSCR ist erst seit Hw 407811 vorhanden.

  ENDTRY.

 

 

  IF NOT p_test IS INITIAL.

    ld_text = 'Testmode: No actions performed.'.

  ELSE.

    ld_text = 'Updates performed.'.

  ENDIF.

  CALL METHOD top->add_text

    EXPORTING

      text         = ld_text

      sap_emphasis = 'STRONG'.

 

 

  IF p_monmit EQ con_true.

    ld_text = 'Half Periods (T093C-MONMIT):'.

    IF ls_t093c-monmit IS INITIAL.

      CONCATENATE ld_text ' not set' INTO ld_text.

    ELSE.

      CONCATENATE ld_text ls_t093c-monmit INTO ld_text.

    ENDIF.

    CALL METHOD top->underline.

    CALL METHOD top->add_text

    EXPORTING

      text         = ld_text

      sap_emphasis = 'STRONG'.

  ENDIF.

 

 

  IF p_xdaily EQ con_true.

    CALL METHOD top->underline.

    CALL METHOD top->add_text

    EXPORTING

      text         = 'AFASL with XDAILY set :'

      sap_emphasis = 'STRONG'.

    CALL METHOD top->add_gap.

*   Schlüssel auflisten

    CLEAR ld_text.

    DESCRIBE TABLE lt_afasl_xdaily_range LINES ld_count.

    SUBTRACT 1 FROM ld_count.

    LOOP AT lt_afasl_xdaily_range ASSIGNING <lfs_afasl_range>.

        CONCATENATE ld_text <lfs_afasl_range>-low

                    INTO ld_text.

        IF sy-index LT ld_count.

          CONCATENATE ld_text ',' INTO ld_text.

        ENDIF.

        CALL METHOD top->add_text

        EXPORTING

          text         = ld_text.

        CALL METHOD top->add_gap EXPORTING width = 1.

        CLEAR ld_text.

    ENDLOOP.

  ENDIF.

 

 

ENDFORM.                    " handle_event_top_of_page_html

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  store_f5899_msg

*&---------------------------------------------------------------------*

FORM store_f5899_msg USING u_msgty TYPE c

                     CHANGING u_msgv1 TYPE string.

  CALL FUNCTION 'MESSAGE_STORE'

    EXPORTING

      arbgb = 'F5'

      msgty = u_msgty

      msgv1 = u_msgv1

      txtnr = 899.

  CLEAR u_msgv1.

ENDFORM.                    " STORE_F5899_MSG

 

 

 

 

*&---------------------------------------------------------------------*

*&      Form  store_flag

*&---------------------------------------------------------------------*

*       Wert einer Checkbox im Log speichern.

*       ud_value  -> Wert der Parameter-Checkbox

*       ud_descr  -> Bezeichnung für Log

*----------------------------------------------------------------------*

FORM store_flag USING ud_value TYPE xfeld

                      ud_descr TYPE string.

  DATA: ld_msg TYPE string.

  IF NOT ud_value IS INITIAL.

    ld_msg = 'Yes'.

  ELSE.

    ld_msg = 'No'.

  ENDIF.

  CONCATENATE ud_descr ':' ld_msg

    INTO ld_msg SEPARATED BY ' '.

  PERFORM store_f5899_msg USING 'I' ld_msg.

ENDFORM.                    " store_flag

 

 

 

Regards

Devi


Viewing all articles
Browse latest Browse all 8635

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>