Hast du vielleicht Show_data_again gesetzt?Der erfaßte Infotypsatz kann im Funktionsexit noch verändert werden.
Der für das Erweiterungsprojekt Verantwortliche muß sicherstellen,
daß die Feldinhalte konsistent sind! Damit die neuen Feldwerte
nochmals am Bildschirm angezeigt werden, muß der Schalter
Show_data_again gesetzt werden.
Code: Alles auswählen.
WHEN '0008'.
CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = innnn
IMPORTING
pnnnn = i0008.
* Statistische Lohnarten (welche nicht in die Gesamtsumme P0008 einlaufen)
SELECT lgart FROM t511 APPENDING TABLE gt_lgart_nosum
WHERE molga EQ '01'
AND begda LE sy-datum
AND endda GE sy-datum
AND adsum EQ space.
CLEAR: inttab.
REFRESH: inttab.
CALL FUNCTION 'RP_FILL_WAGE_TYPE_TABLE'
EXPORTING
pernr = i0008-pernr
begda = sy-datum
endda = sy-datum
infty = '0008'
subty = space
TABLES
ppbwla = inttab
EXCEPTIONS
error_at_indirect_evaluation = 1.
CLEAR i0008-ansal.
* Nur Lohnarten, die in die Gesamtsumme einfließen
LOOP AT inttab.
READ TABLE gt_lgart_nosum WITH KEY = inttab-lgart.
IF sy-subrc EQ 0.
EXIT.
ENDIF.
DO 40 TIMES
VARYING gs_loh-lga FROM i0008-lga01 NEXT i0008-lga02
VARYING gs_loh-bet FROM i0008-bet01 NEXT i0008-bet02.
IF gs_loh-lga = inttab-lgart.
IF gs_loh-bet = space OR gs_loh-bet = inttab-betrg.
ADD inttab-betrg TO i0008-ansal.
ELSE.
ADD gs_loh-bet TO i0008-ansal.
ENDIF.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.
* Eintritt ermitteln
SELECT SINGLE * FROM pa0041 INTO p0041
WHERE pernr = i0008-pernr
AND begda LE sy-datum
AND endda GE sy-datum.
DO 12 TIMES
VARYING gs_dat-dar FROM p0041-dar01 NEXT p0041-dar02
VARYING gs_dat-dat FROM p0041-dat01 NEXT p0041-dat02.
IF gs_dat-dar = '02'.
CLEAR: gv_days, gv_months, gv_years.
CALL FUNCTION 'HRVE_GET_TIME_BETWEEN_DATES'
EXPORTING
beg_date = gs_dat-dat
end_date = sy-datum
IMPORTING
days = gv_days
months = gv_months
years = gv_years
EXCEPTIONS
invalid_period = 1
OTHERS = 2.
ENDIF.
ENDDO.
gv_months = ( gv_years * 12 ) + gv_months.
SELECT SINGLE * FROM pa0001 INTO p0001
WHERE pernr = i0008-pernr
AND begda LE sy-datum
AND endda GE sy-datum.
IF p0001-persg EQ '3'.
faktor = '12'.
ELSE.
IF gv_months LE '999'.
faktor = '13.27'.
ENDIF.
IF gv_months LE '35'.
faktor = '13.17'.
ENDIF.
IF gv_months LE '023'.
faktor = '13.07'.
ENDIF.
IF gv_months LE '011'.
faktor = '12.97'.
ENDIF.
IF gv_months LE '005'.
faktor = '12.72'.
ENDIF.
ENDIF.
IF i0008-trfgr EQ 'AT'.
faktor = '12'.
ENDIF.
i0008-ansal = i0008-ansal * faktor.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = i0008
IMPORTING
prelp = innnn.
Code: Alles auswählen.
i0008-ansal = i0008-ansal * faktor
Code: Alles auswählen.
CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = innnn
IMPORTING
pnnnn = i0008.
Code: Alles auswählen.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = i0008
IMPORTING
prelp = innnn.
Code: Alles auswählen.
IF gs_loh-lga = inttab-lgart.
IF gs_loh-bet = space OR gs_loh-bet = inttab-betrg.
ADD inttab-betrg TO i0008-ansal.
ELSE.
ADD gs_loh-bet TO i0008-ansal.
ENDIF.
EXIT.
ENDIF.
donny hat geschrieben:
Da kannst du doch wohl besser einfach immer den neuen Stand addieren, oder?
Was soll eigentlich passieren, wenn jemand die Lohnart 1308 neu einfügt, oder aus dem Infotyp 0008 entfernt?
Ist ja cool!donny hat geschrieben: Übrigens: RP_FILL_WAGE_TYPE_TABLE gibt in PPBWLA (inttab) auch das Kennzeichen ADSUM zurück... da könntest du dir die Verarbeitung der T511 sparen. Macht das ganze übersichtlicher und schneller! Und wenn du dem FB den neuen I0008 als Parameter übergibts, liest er die Daten IMO nicht von der Datenbank, sondern bringt dir in inttab die neuen Daten zurück, dann kannst du dir auch das mühsame Durchsuchen des I0008 ersparen und brauchst nur noch mit der inttab zu arbeiten.