07-11-2006 4:54 PM
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!
07-12-2006 2:50 AM
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
07-12-2006 2:50 AM
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
07-12-2006 4:54 AM
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.
07-12-2006 7:32 AM
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.