SAP Jobsuche bei DV-Treff
Kaja
  • Kaja
  • SAP Forum - Neuling Thema Starter
vor 15 Jahre

Hallo Zusammen,

ich möchte in einem ABAP-Programm die Anzahl von Tagen zwischen zwei Daten berechnen. Grundsätzlich kann man ja im ABAP einfach die Differenz bilden:

gv_anzahl_tage= gs_item_venddat - gs_item-vbegdat.

Allerdings möchte ich die Anzahl Tage in meinem Fall "kaufmännisch" bilden, also mit 360 Tagen pro Jahr bzw. 30 Tagen pro Monat rechnen.

Beispiele:

28.02.2009 - 31.01.2009 = 30 Tage

15.02.2009 - 31.01.2009 = 15 Tage

28.02.2009 - 27.02.2009 = 3 Tage

31.05.2009 - 31.12.2009 = 150 Tage

Hintergrund von dieser etwas "seltsamen" Berechnung ist, dass wir in Verträgen die Monatspreise bei verkürzter Laufzeit nur anteilig berechnen, aber eben von 30 Tagen pro Monat ausgehen. 

Wäre schön, wenn mir hier jemand helfen könnte.

Viele Grüße

Kaja

 

 

 

Förderer

Chriz
  • Chriz
  • SAP Forum - Experte
vor 15 Jahre
Hallo,

gv_anzahl_tage = 0.

while gs_item-venddat+0(4) > gs_item_vbegdat+0(4).

gv_anzahl_tage = gv_anzahl_tage + 360.

gs_item-venddat+0(4) = gs_item-venddat+0(4) - 1.

endwhile.

if gs_item-venddat+4(2) < gs_item-vgebdat+4(2).

gs_item-venddat+4(2) = gs_item-venddat + 12.

gv_anzahl_tage = gv_anzahl_tage - 360.

endif.

gv_anzahl_tage = gv_anzahl_tage + ( gs_item-venddat+4(2) - gs_item-vbegdat+4(2) - 1 ) * 30 ) + 30 - gs_item-venddat+6(2) + gs_item-vbegdat+4(2)

Beim letzen Statement kann es sein, daß ich mich um 30 Tage verhauen habe ... probier es aus ... (ist eine TrockenÜbung)

Gruß

Chriz

Kaja
  • Kaja
  • SAP Forum - Neuling Thema Starter
vor 15 Jahre
Hallo Chriz,

vielen Dank für Deine Hilfe! Ich habe den Code noch ein wenig abgeändert, so dass nun auch berücksichtigt wird, ob ein Monat 28, 29, 30 oder 31 Tage hat. Dein Code war aber genau das, was ich benötigt habe, um einen Anfang zu finden :-)

Grüße

Kaja

--Abgeänderter Code----

* Anzahl Tage für volle Jahre

while gs_item-venddat+0(4) > gs_item-vbegdat+0(4).

gv_anzahl_tage = gv_anzahl_tage + 360.

gs_item-vbegdat+0(4) = gs_item-vbegdat+0(4) + 1.

endwhile.

* Anzahl Tage für volle Monate

while gs_item-venddat+4(2) > gs_item-vbegdat+4(2).

gs_item-vbegdat+4(2) = gs_item-vbegdat+4(2) + 1.

gv_anzahl_tage = gv_anzahl_tage + 30.

endwhile.

* Anzahl Tage

if gs_item-venddat+4(2) = '02'.

if gs_item-venddat+6(2) = '28' OR gs_item-venddat+6(2) = '29'.

gs_item-venddat+6(2) = '30'.

endif.

elseif gs_item-venddat+6(2) = '31'.

gs_item-venddat+6(2) = '30'.

endif.

gv_anzahl_tage = gv_anzahl_tage + gs_item-venddat+6(2) - gs_item-vbegdat+6(2) + 1.

Chriz
  • Chriz
  • SAP Forum - Experte
vor 15 Jahre
Hallo Kaja,

die Angleichung der Tage sollte eigentlich im Klammerausdruck passieren (der beim 2. Hinschauen auch noch zu komplex gecodet ist 😉 ) - wie gesagt Trockenübung

aber wenn das Prob gelöst ist, ist es ja ok.

Gruß ins Münsterland

wird da mittlerweile auch ABAP programmiert? ;-)

dsp8487
vor 11 Jahre
Funktionsbaustein: SD_DATETIME_DIFFERENCE

Import-Parameter Wert

DATE1 08.04.1987

TIME1 00:00:01

DATE2 26.06.2013

TIME2 00:00:01

Export-Parameter Wert

DATEDIFF 9.576 <- Dif in Tagen

TIMEDIFF 0

EARLIEST 1

Info: TIME1 & 2 dürfen nicht '00:00:00', sonst gibts ein Fehler. Wenn die Zeit keine Rolle spielt, einfach beide auf zB '00:00:01' setzen.

Benutzer, die gerade dieses Thema lesen