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: 

PROVIDE Statement between filter not working?

flohaa
Discoverer
0 Kudos

Hello everybody,

I have encountered a problem with the PROVIDE Statement which produces really weird results for me...

Basically, I want to filter in the table p2001 entries between begda_pa (01.01.2021) and ennda_pa (31.11.2021) and if the subty equals x, perform something.

While debugging I noticed that the first 6 entries are correctly analyzed and everything runs as expected.

Then after no entries should be left in the given timespan 01.01.2021 - 31.11.2021:

The loop continues with p2001-begda set to 20210101 on EVERY loop cycle! and p2001-ennda gets the correct dates of the following entries in p2001 like 20140130.

There is no entry in p2001 with begda = 20210101 and endda 20140130.

The loop should have stopped after 6 cycles.

I'm thankful for any information to what is happening here!

my program looks sth. like this:

DATA: begda_pa TYPE d.
DATA: endda_pa TYPE d.    
begda_pa = pn-begda.
begda_pa+4 = '0101'.
endda_pa = pn-endda.
endda_pa+4 = '1231'.
PROVIDE subty FROM p2001 BETWEEN begda_pa AND endda_pa.
   IF p2001-subty = '0300' OR
      p2001-subty = '0600' OR
      p2001-subty = '0620' .
        PERFORM ...
    ENDIF.
ENDPROVIDE.
1 ACCEPTED SOLUTION

hrmanagerde
Active Participant

Hi Florian,

this is quite interesting because I automatically always used PROVIDE * FROM... and have never thought about it.

I think this is the reason for this strange behaviour.

Best regards,

Armin

4 REPLIES 4

hrmanagerde
Active Participant

Hi Florian,

this is quite interesting because I automatically always used PROVIDE * FROM... and have never thought about it.

I think this is the reason for this strange behaviour.

Best regards,

Armin

Hey Armin,

wow... I tested it with the wildcard now. and it works!

Is this expected behaviour??

Thank you very much!

Florian

hrmanagerde
Active Participant
0 Kudos

Hi Florian,

you're welcome 🙂 I think so. This is the HR-specific, obsolete (according to SAP) short-form of PROVIDE.

As said, I only use the * variant but here is the documentation of what happens if you use it with a specific field (in german):

Die Auswahl ein oder mehrerer Felder eines Infotypen zur Verarbeitung wird Projektion genannt.
Mit der Projektion auf bestimmte Felder wird festgelegt, dass nur der Inhalt dieser Felder und zeitliche Veränderungen dieses Inhalts für die Auswertung interessant sind.
Die Projektion ist ebenso wie der Join eine logische Datensicht, die sich auf ein oder mehrere Felder eines Infotypen konzentriert.
Die Projektion ist ebenfalls eine Operation auf der Zeitachse: es werden neue Gültigkeitszeiträume gebildet für die Fälle, in denen sich der Inhalt eines der Projektionsfelder ändert. Die Werte der Felder, auf die nicht projiziert wird, sind in einem undefinierten Zustand, d.h. nicht mehr für die Ausgabe relevant.
Wenn der Inhalt eines Feldes, auf das projiziert wird, über mehrere Datensätze hinweg unveränderlich bleibt, dann werden die Gültigkeitszeiträume dieser Datensätze zusammengezogen.
Ein solcher Spezialfall der Projektion, bei der Datensätze kontrahiert werden, heißt Kontraktion.

I think this is really very uncommon.

Best regards,

Armin

Hi Armin,

super danke dir, Tag gerettet 😄

Ich bin noch recht frisch in der ABAP Programmierung, ein bisschen was zum Nachlesen ist sehr hilfreich!

Nochmals vielen Dank dir!

VG

Florian