Die Umstellung auf den TS2010 muss bis Dezember erfolgt sein, ansonsten werden die DEÜV-Meldungen abgewiesen. In der Minimalvariante muss lediglich der neue 5-stellige Tätigkeitsschlüssel festgelegt werden pro Personalnummer, der Rest läßt sich aus dem TS2003 bzw. IT0008 bzw. IT0016 ableiten.
SAP hat dazu den Report RPUD3SD0_TSFILL ausgeliefert. Ich verwende den nicht sondern benutze lieber die LSMW wenn die neuen 5-Steller bereits pro Personalnummer vorliegen. SAP benutzt übrigens zur Ermittlung ob Teilzeit oder nicht im Standard das Teilzeitkennzeichen in IT0007 – hier halte ich persönlich den Beschäftigungsgrad in IT0008 für besser, aber das kommt natürlich auf den konkreten Fall an.
Die LSMW ist schnell zusammengestellt, Input ist Personalnummer und neuer Tätigkeitsschlüssel, das Datum ist fix, der Rest wird abgeleitet. Das geschieht durch eine Routine auf das Feld PERNR.
Die BI-Aufzeichnung heißt COP_0020, da IT0020 zum Datum 01.11.2011 kopiert wird.
Es gibt eine globale Variable ZSKIP, mit der in einer weiteren Routine auf das Feld TTSCH geprüft wird, wenn es nicht initial ist dann wird ‚/‘ übergeben, d.h. der Wert nicht überschrieben.
* Eigene Routine
FORM UR_WERTE_FUELLEN
USING P_IN
CHANGING P_OUT.
TYPES:
ABAP_BOOL TYPE C LENGTH 1.
DATA: ZPA0020 TYPE P0020.
DATA: ZPA0002 LIKE PA0002.
DATA: ZPA0016 LIKE PA0016.
DATA: ZPA0008 LIKE PA0008.
DATA: PA_VTFRM TYPE X_FLAG VALUE ‚X‘.
DATA:
L_BEFRISTET TYPE ABAP_BOOL,
L_TEILZEIT TYPE ABAP_BOOL, „YCTN1532667
L_VTFRM TYPE P01_D3_VTFRM. „YCTN1532667
DATA: G_DATUM_INDIV TYPE BEGDA VALUE ‚20111101‘.
CONSTANTS:
ABAP_TRUE TYPE ABAP_BOOL VALUE ‚X‘,
ABAP_FALSE TYPE ABAP_BOOL VALUE ‚ ‚,
ABAP_UNDEFINED TYPE ABAP_BOOL VALUE ‚-‚.
* Daten lesen
SELECT SINGLE * FROM PA0020 INTO
CORRESPONDING FIELDS OF ZPA0020 WHERE PERNR = P_IN AND BEGDA
LE G_DATUM_INDIV AND ENDDA GE G_DATUM_INDIV.
IF SY-SUBRC NE 0.
SKIP_RECORD.
WRITE:/ P_IN, ‚IT0020 nicht gefunden.‘.
EXIT.
ENDIF.
SELECT SINGLE * FROM PA0002 INTO ZPA0002 WHERE PERNR = P_IN AND BEGDA
LE G_DATUM_INDIV AND ENDDA GE G_DATUM_INDIV.
IF SY-SUBRC NE 0.
SKIP_RECORD.
WRITE:/ P_IN, ‚IT0002 nicht gefunden.‘.
EXIT.
ENDIF.
SELECT SINGLE * FROM PA0016 INTO ZPA0016 WHERE PERNR = P_IN AND BEGDA
LE G_DATUM_INDIV AND ENDDA GE G_DATUM_INDIV.
IF SY-SUBRC NE 0.
SKIP_RECORD.
WRITE:/ P_IN, ‚IT0016 nicht gefunden.‘.
EXIT.
ENDIF.
SELECT SINGLE * FROM PA0008 INTO ZPA0008 WHERE PERNR = P_IN AND BEGDA
LE G_DATUM_INDIV AND ENDDA GE G_DATUM_INDIV.
IF SY-SUBRC NE 0.
SKIP_RECORD.
WRITE:/ P_IN, ‚IT0008 nicht gefunden.‘.
EXIT.
ENDIF.
* Abschluss und Berufsausbildung umsetzen.
CASE ZPA0020-AUSBG.
WHEN 1.
COP_0020-ABSCH = 9.
COP_0020-ABBRF = 1.
WHEN 2.
COP_0020-ABSCH = 9.
CASE ZPA0020-STBRF.
WHEN 3. COP_0020-ABBRF = 3.
WHEN OTHERS. COP_0020-ABBRF = 2.
ENDCASE.
WHEN 3.
COP_0020-ABSCH = 4.
COP_0020-ABBRF = 1.
WHEN 4.
COP_0020-ABSCH = 4.
CASE ZPA0020-STBRF.
WHEN 3. COP_0020-ABBRF = 3.
WHEN OTHERS. COP_0020-ABBRF = 2.
ENDCASE.
WHEN 5.
COP_0020-ABSCH = 4.
COP_0020-ABBRF = 5.
WHEN 6.
COP_0020-ABSCH = 4.
COP_0020-ABBRF = 5.
WHEN 7.
COP_0020-ABSCH = 9.
COP_0020-ABBRF = 9.
ENDCASE.
* keine Arbeitnehmerüberlassung
COP_0020-ANUEB = ‚1‘.
* bereits gefüllte Felder nicht überschreiben
CLEAR ZSKIP.
IF NOT ZPA0020-TTSCH IS INITIAL.
ZSKIP = ‚X‘.
ENDIF.
IF NOT ZPA0020-ABSCH IS INITIAL.
COP_0020-ABSCH = ‚/‘.
ENDIF.
IF NOT ZPA0020-ABBRF IS INITIAL.
COP_0020-ABBRF = ‚/‘.
ENDIF.
IF NOT ZPA0020-ANUEB IS INITIAL.
COP_0020-ANUEB = ‚/‘.
ENDIF.
* Vertragsform füllen
IF ZPA0020-VTFRM IS INITIAL.
* alles ausser 01 ist befristet
IF ZPA0016-CTTYP NE ’01‘.
L_BEFRISTET = ‚X‘.
ENDIF.
* wenn Beschäftigungsgrad <> 100 dann Teilzeit
IF ZPA0008-BSGRD LT ‚100‘.
L_TEILZEIT = ‚X‘.
ENDIF.
* möglicherweise alter Schlüssel nicht richtig
IF L_TEILZEIT = ‚X‘ AND NOT ( ZPA0020-STBRF = ‚8‘
OR ZPA0020-STBRF = ‚9‘ ).
WRITE:/ P_IN, ‚Teilzeit laut IT0008 aber Vz. laut IT0020!‘.
ENDIF.
CASE L_TEILZEIT. „YCTN1532667
WHEN ABAP_TRUE. “ Teilzeit „
CASE L_BEFRISTET. „
WHEN ABAP_TRUE. “ befristet „
L_VTFRM = 4. „
WHEN ABAP_FALSE. “ unbefristet „
L_VTFRM = 2. „
ENDCASE. „
WHEN ABAP_FALSE. “ Vollzeit „
CASE L_BEFRISTET. „
WHEN ABAP_TRUE. “ befristet „
L_VTFRM = 3. „
WHEN ABAP_FALSE. “ unbefristet „
L_VTFRM = 1. „
ENDCASE. „
ENDCASE. „YCTN1532667
IF L_VTFRM IS INITIAL. „YCTN1532667
* Vertragsform kann aus IT0008/ IT0016 nicht ermittelt werden
CASE ZPA0020-STBRF.
WHEN 8 OR 9. „Teilzeit
CASE L_BEFRISTET.
WHEN ABAP_TRUE. „befristet
L_VTFRM = 4.
WHEN ABAP_FALSE. „unbefristet
L_VTFRM = 2.
WHEN ABAP_UNDEFINED. “ nicht ermittelbar
CLEAR L_VTFRM.
ENDCASE.
WHEN OTHERS. „Vollzeit
CASE L_BEFRISTET.
WHEN ABAP_TRUE. „befristet
L_VTFRM = 3.
WHEN ABAP_FALSE. „unbefristet
L_VTFRM = 1.
WHEN ABAP_UNDEFINED. “ nicht ermittelbar
CLEAR L_VTFRM.
ENDCASE.
ENDCASE.
ENDIF.
IF NOT L_VTFRM IS INITIAL.
COP_0020-VTFRM = L_VTFRM.
ELSE.
SKIP_RECORD.
WRITE:/ P_IN, ‚Vertragsform nicht ermittelbar.‘.
ENDIF.
ENDIF.
P_OUT = P_IN.
* …
ENDFORM. „ur_WERTE_FUELLEN
Wenn Sie diese Routine verwenden dann nur auf eigene Gefahr!