ABAP-年月期间搜索帮助

selection-screen begin of block block1 with frame title text-001.

parameters:p_mon1 like s031-spmon,

           p_mon2 like s031-spmon.

selection-screen end of block block1.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_mon1.

  PERFORM MONAT_F4.

 

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_mon2.

  PERFORM MONAT_F4.

 

FORM MONAT_F4 .

  DATA: BEGIN OF MF_DYNPFIELDS OCCURS 1.

          INCLUDE STRUCTURE DYNPREAD.

  DATA: END   OF MF_DYNPFIELDS.

  DATA: MF_RETURNCODE   LIKE SY-SUBRC,

        MF_MONAT        LIKE ISELLIST-MONTH,

        MF_HLP_REPID    LIKE SY-REPID.

  FIELD-SYMBOLS: <MF_FELD>.

 

* Wert von Dynpro lesen

  GET CURSOR FIELD MF_DYNPFIELDS-FIELDNAME.

  APPEND MF_DYNPFIELDS.

  MF_HLP_REPID = SY-REPID.

  DO 2 TIMES.

    CALL FUNCTION 'DYNP_VALUES_READ'

      EXPORTING

        DYNAME               = MF_HLP_REPID

        DYNUMB               = SY-DYNNR

      TABLES

        DYNPFIELDS           = MF_DYNPFIELDS

      EXCEPTIONS

        INVALID_ABAPWORKAREA = 01

        INVALID_DYNPROFIELD  = 02

        INVALID_DYNPRONAME   = 03

        INVALID_DYNPRONUMMER = 04

        INVALID_REQUEST      = 05

        NO_FIELDDESCRIPTION  = 06

        UNDEFIND_ERROR       = 07.

    IF SY-SUBRC = 3.

*     Aktuelles Dynpro ist Wertemengenbild

      MF_HLP_REPID = 'SAPLALDB'.

    ELSE.

      READ TABLE MF_DYNPFIELDS INDEX 1.

*     Unterstriche durch Blanks ersetzen

      TRANSLATE MF_DYNPFIELDS-FIELDVALUE USING '_ '.

      EXIT.

    ENDIF.

  ENDDO.

  IF SY-SUBRC = 0.

*   Konvertierung ins interne Format

    CALL FUNCTION 'CONVERSION_EXIT_PERI_INPUT'

      EXPORTING

        INPUT         = MF_DYNPFIELDS-FIELDVALUE

      IMPORTING

        OUTPUT        = MF_MONAT

      EXCEPTIONS

        ERROR_MESSAGE = 1.

    IF MF_MONAT IS INITIAL.

*     Monat ist initial => Vorschlagswert aus akt. Datum ableiten

      MF_MONAT = SY-DATLO(6).

    ENDIF.

    CALL FUNCTION 'POPUP_TO_SELECT_MONTH'

      EXPORTING

        ACTUAL_MONTH               = MF_MONAT

      IMPORTING

        SELECTED_MONTH             = MF_MONAT

        RETURN_CODE                = MF_RETURNCODE

      EXCEPTIONS

        FACTORY_CALENDAR_NOT_FOUND = 01

        HOLIDAY_CALENDAR_NOT_FOUND = 02

        MONTH_NOT_FOUND            = 03.

    IF SY-SUBRC = 0 AND MF_RETURNCODE = 0.

      CALL FUNCTION 'CONVERSION_EXIT_PERI_OUTPUT'

        EXPORTING

          INPUT  = MF_MONAT

        IMPORTING

          OUTPUT = MF_DYNPFIELDS-FIELDVALUE.

      COLLECT MF_DYNPFIELDS.

      CALL FUNCTION 'DYNP_VALUES_UPDATE'

        EXPORTING

          DYNAME               = MF_HLP_REPID

          DYNUMB               = SY-DYNNR

        TABLES

          DYNPFIELDS           = MF_DYNPFIELDS

        EXCEPTIONS

          INVALID_ABAPWORKAREA = 01

          INVALID_DYNPROFIELD  = 02

          INVALID_DYNPRONAME   = 03

          INVALID_DYNPRONUMMER = 04

          INVALID_REQUEST      = 05

          NO_FIELDDESCRIPTION  = 06

          UNDEFIND_ERROR       = 07.           "<<== note 148804

    ENDIF.

  ENDIF.

ENDFORM.                                                    " MONAT_F4

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

"前一个月

data:datum type sy-datum.

CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE'

  EXPORTING

    MONTHS        = -1

    OLDDATE       = sy-datum

  IMPORTING

    NEWDATE       = datum

          .

 

  p_mon1 = datum+0(6).

  p_mon2 = sy-datum+0(6).
原文地址:https://www.cnblogs.com/ricoo/p/10170137.html