Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Period and year

Former Member
0 Kudos

Hi all,

here is my problem:

I have a selection screen (SSCR) with 2 parameters, one the period and the other one the year.

With this and other selection I have to find in either table MARD or MARDH the period and year closest to the one selected in the SSCR.

For example: I have selected 06 2006 and in MARD there is 2006 04 and MARDH there is 2006 07..Then Id have to chose from MARD.

Thanx for the help!

1 ACCEPTED SOLUTION

former_member223537
Active Contributor
0 Kudos

Hi,

Select LFGJA

LFMON

into table it_mard

from MARD

where lfgja in s_lfgja

and lfmon in s_lfmon.

select LFGJA

LFMON

into table it_mardh

from MARDh

where lfgja in s_lfgja

and lfmon in s_lfmon.

loop at it_mardh into wa_mardh.

append wa_mardh into it_mard.

endloop.

SORT it_mard BY lfgja lfmon DESCENDING.

READ TABLE IT_MARD into WA_MARD INDEX 1.

The record in WA_MARD would be the record closest to the value from SSCR. The record in WA_MARD is the 1st record from internal table IT_MARD.

Best regards,

Prashant

3 REPLIES 3

former_member223537
Active Contributor
0 Kudos

Hi,

Select LFGJA

LFMON

into table it_mard

from MARD

where lfgja in s_lfgja

and lfmon in s_lfmon.

select LFGJA

LFMON

into table it_mardh

from MARDh

where lfgja in s_lfgja

and lfmon in s_lfmon.

loop at it_mardh into wa_mardh.

append wa_mardh into it_mard.

endloop.

SORT it_mard BY lfgja lfmon DESCENDING.

READ TABLE IT_MARD into WA_MARD INDEX 1.

The record in WA_MARD would be the record closest to the value from SSCR. The record in WA_MARD is the 1st record from internal table IT_MARD.

Best regards,

Prashant

Former Member
0 Kudos

Hi Mel,

Please check this piece of code.

TABLES : s031, mard, mardh.

DATA : period(2),

year(4).

TYPES : BEGIN OF tab,

year TYPE lfgja,

period TYPE lfmon,

END OF tab.

DATA : itab1 TYPE TABLE OF tab WITH HEADER LINE,

itab2 TYPE TABLE OF tab WITH HEADER LINE,

wa TYPE tab.

SELECT-OPTIONS: sl_spmon FOR s031-spmon MODIF ID per.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR sl_spmon-low.

PERFORM monat_f4.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR sl_spmon-high.

PERFORM monat_f4.

START-OF-SELECTION.

period = sl_spmon-low+4(2).

year = sl_spmon-low+0(4).

SELECT lfgja lfmon FROM mardh

INTO TABLE itab1

WHERE lfmon >= period AND

lfgja >= year.

SELECT lfgja lfmon FROM mard

INTO TABLE itab2

WHERE lfmon >= period AND

lfgja >= year.

LOOP AT itab1 INTO wa.

itab2-year = wa-year.

itab2-period = wa-period.

APPEND itab2.

ENDLOOP.

DELETE ADJACENT DUPLICATES FROM itab2

COMPARING year period.

SORT itab2 BY year period ASCENDING.

READ TABLE itab2 INDEX 1.

IF sy-subrc = 0.

WRITE : / itab2-period, itab2-year.

ENDIF.

END-OF-SELECTION.

&----


*& 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

Please reward helpful answers.

andreas_mann3
Active Contributor
0 Kudos

hi,

1) calculate difference (absolute) between point of time

from SSCR and results from MARD/H and save data in itab

2) sort table ascending and read with index 1

A.