研究MC.9的时候发现MC.9对于年月帮助的实现比较好。
贴出来大家一起研究研究。或许对以后的开发有所帮助呢!
虽然没怎么读懂,但是用着好像还可以了。
*&---------------------------------------------------------------------*
*& Form monat_f4
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
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.
* ASSIGN (MF_DYNPFIELDS-FIELDNAME) TO <MF_FELD>. " ==>> note 148804
* <MF_FELD> = MF_MONAT.
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