Mittwoch, 30. November 2011

PY - IT0014-Lohnarten sollen wie IT0008 aliquotiert werden

IT0014-Lohnarten werden gekürzt mit bspw. Faktor /801, gewünscht ist ein analoges Verhalten wie IT0008.

Problem: Lohnarten aus IT0014 werden nicht über WPBP-Zeiträume verteilt und erzeugen auch keine solchen im Standard.

Beispiel A: 2 Zeiträume WPBP, /801 50% pro Zeitraum. IT0014-Lohnart 100 Euro wird dem ersten Zeitraum zugeordnet. Dadurch ergibt sich eine ungerechtfertigte Kürzung und ein Betrag von 50 Euro.
Beispiel B: Lohnart 2 mal im Monat, 01. - 14. 100 Euro, 15. - 30. 150 Euro. Ergebnis: 250 Euro. Gewollt wäre gewesen 50 Euro für Zeitraum 1 und 75 für Zeitraum 2 => 125 Euro.

Lösung: aus IT0014 WPBP-Zeiträume generieren und Lohnart verteilen.

1. Schritt: In der Verarbeitungklasse 47 wird eine neue Ausprägung angelegt, z.B. @ und diese der IT0014-Lohnart z.B. 2000 zugeordnet.

2. Schritt: In den Grunddaten Deutschland wird der WPBP-Split erzeugt durch folgenden Aufruf:
....
P0014 Z011 GEN  NOAB      WPBP-Split erzeugen für IT0014
....
Z011 ist eine Regel mit folgendem Aufbau:
Z011




Dadurch wird ein WPBP-Split erzeugt durch die IT0014-Lohnart.

3. Schritt: Beim Einlesen muss die Lohnart auf vorhandene Zeiträume verteit werden.
Hierzu wird die Regel D011 im Block "Einlesen weitere Be- und Abzüge" um den Aufruf für die Ausprägung @ ergänzt.

....

P0014 Y011 GEN  NOAB      WPBP-Split erzeugen für IT0014
....

Y011 ist die Kopie der Standardregel D011 mit dieser Ergänzung:

Y011

 Im Ergebnis sollte sich die Infotyp 0014-Lohnart jetzt wie Infotyp 0008 verhalten. Für weitere Varianten lesen Sie die Dokumentation der Operation WPBPC.


PY DE - Bildung Wandlungsbetrag aus aliquotierten Bezügen

Problem: Bei einem WPBP-Split wird der Wandlungsbetrag nicht bzw. unvollständig (nur ein WPBP-Zeitraum) gebildet.
Grund: Auszug aus Hinweis 600652 F&A Altersvermögensgesetz
....

ii) Bei einem untermonatigen/organisatorischen Wechsel eines MA wird die Ausweislohnart nicht gebildet.
--> Die Zuordnung der Lohnarten zum Modell erfolgt splitgenau. Das Problem entsteht dadurch, daß in der WPBP zwei Einträge vorhanden sind. Die Funktion DAVMG ordnet alles dem Endedatum zu. Liegt dies im zweiten WPBP-Split, ist für diesen keine LA vorhanden. Sie haben jetzt zwei Möglichkeiten: Entweder Sie stellen die Lohnart im zweiten WPBP-Splitzeitraum in der gewünschten Höhe zur Verfügung oder Sie grenzen den Infotyp 699 passend zum organisatorischen Wechsel des Mitarbeiters ab.
....

Lösung: Sammeln der Beträge und Einstellen auf den letzten WPBP-Split

Samstag, 26. November 2011

ABAP - GET PAYROLL

Beispielimplementierung von GET PAYROLL für deutsche Abrechnungsergebnisse:

Eigenschaften: Selektionsbildvariante 900, HR-Reportklasse PY_DEF.

*&---------------------------------------------------------------------*
*& Report  ZGETPAYROLL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZGETPAYROLL.

TABLES: PERNR,PYORGSCREEN, PYTIMESCREEN.

INFOTYPES: 0002.

NODES: PAYROLL TYPE PAYDE_RESULT.

DATA: WA_RT TYPE PC207.

START-OF-SELECTION.

GET PERNR.

RP_PROVIDE_FROM_LAST P0002 SPACE PN-BEGDA PN-ENDDA.

WRITE:/ PERNR-PERNR, P0002-VORNA, P0002-NACHN.

GET PAYROLL.

  LOOP AT PAYROLL-INTER-RT INTO WA_RT.
    WRITE:/ WA_RT-LGART, WA_RT-BETRG.
  ENDLOOP.

END-OF-SELECTION.

Freitag, 25. November 2011

PY - Gemeindeschlüssel

Auszug aus Hinweis 760868

Fragen zur Gemeindenummer
1. Wofür wird Tabelle P01T_AGS benötigt?
2. Muss die Customizingtabelle P01T_AGS gepflegt werden?
3. Wird Tabelle T5D2B noch gebraucht?
4. Wie wird die Tabelle T5D2B aktualisiert?
5. Wie unterscheiden sich Tabelle P01T_AGS und T5D2B?
6. Bei der Pflege von Infotyp 0012 erhalten Sie die Meldungsnr. 5D 832
   Gemeindenummer von der Steuerkarte nicht eingetragen. Was ist zu tun?
7. Im Report RPUTX5D0 wird die Meldung 'Kein Eintrag in Tabelle
   P01T_AGS' ausgegeben. Was ist zu tun?


Fragen zur Gemeindenummer
ad 1. Lohnsteuerbescheinigungen müssen an die einzelnen Bundesländer
      verteilt werden. Bundesländer sind nicht im R/3 hinterlegt. In
      Tabelle P01T_AGS wird jeder Postleitzahl/ Ort eine Gemeindenummer
      zugeordnet. Die 1. und 2. Ziffer der Gemeindenummer entspricht
      dem Bundesland, so dass über die Gemeindenummer das Bundesland
      ermittelt werden kann. Das Empfängerbundesland wird über die
      aktuell gepflegte PLZ im Infotyp 0006 ermittelt. Es wird jedoch
      die im Infotyp 0012 hinterlegte AGS in der Meldung angegeben.

ad 2. Die Tabelle wurde im Mandanten 000 zur Verfügung gestellt. Eine
      Aktualisierung kann über den Report RPUTX2D0 vorgenommen werden.
      Die aktuellste Version wird auf unseren Internetseiten im SAP
      Service Marktplatz unter dem Alias HRDE (http://service.sap.com/
      HRDE) zur Verfügung gestellt. Unter Hinweis 919546 wird die
      aktuelle Version der AGS-Datei bekannt gegeben.
      I.d.R. ist es nicht notwendig, dass die Tabelle in allen
      Mandanten gepflegt wird. Wird kein Eintrag für PLZ/Ort im
      aktuellen Mandanten gefunden, wird zusätzlich im Mandanten 000
      gesucht.

ad 3. JA! Diese Tabelle ist Prüftabelle für die Gemeindenummer im
      Infotyp 0012.

ad 4. Die Tabelle T5D2B wird über den Report RPUSTGD0 gefüllt. Dieser
      Report liest eine Datei mit den Gemeindedaten ein, die vom
      Bundesamt für Finanzen zur Verfügung gestellt wird. Diese Datei
      enthält nur die aktuell gültigen Gemeindenummern. In Ausnahme-
      fällen kann es dazu kommen ,dass von Gemeinden die Gemeindenummer
      nicht mehr in der Datei des Bundesamtes steht. Aus diesem Grund
      ist es nicht mehr möglich, mit Report RPUSTGD0 alte Einträge zu
      löschen.

ad 5. Die unterschiedliche Anzahl von Einträgen in den Tabellen
      P01T_AGS und T5D2B erklärt sich dadurch, dass die P01T_AGS eine
      Zuordnung von jeder PLZ und dem Ortsnamen zu einer Gemeindenummer
      enthält. Die T5D2B enthält lediglich alle Gemeindenummern. Die
      P01T_AGS enthält dementsprechend mehr Einträge als die T5D2B, da
      verschiedene PLZ die selbe Gemeindenummer haben. Zusätzlich sind
      die unterschiedlichen Schreibweisen der Orte (z.B. St./Sankt) in
      Tabelle P01T_AGS berücksichtigt.

ad 6. Die AGS-Nummer im Infotyp 0012 wird nach Einspielen des Jahres-
      wechsels für unbeschränkt Steuerpflichtige verprobt. Wenn bei
      unbeschränkt Steuerpflichtigen aufgrund eines Wohnsitzes im Aus-
      land keine Steuerkarte vorliegt, kann die Gemeindenummer nicht
      gepflegt werden. In diesen Fällen ist im Infotyp 0012 unter Vor-
      lage das Flag 'liegt nicht vor' anzukreuzen. Als Grund kann man
      'ohne Verschulden des AN' angeben.

ad 7. Es ist zu überprüfen, ob für die in Infotyp 0006 im Ständigen
      Wohnsitz für diese Personalnummer hinterlegte Postleitzahl tat-
      sächlich in der Tabelle P01T_AGS hinterlegt ist.

Donnerstag, 17. November 2011

PY - WPBP-Split

Personalabrechnung (PY) Teilung der Abrechnungsperiode aufgrund von geänderten Einträgen in folgenden Infotypen:
  • Maßnahmen (0000) 
  • Organisatorische Zuordnung (0001) 
  • Sollarbeitszeit (0007) 
  • Basisbezüge (0008) 
  • Kostenverteilung (0027) 
Aufgrund des WPBP-Splits ist eine tagesgenaue Entgeltberechnung möglich. Beispiel: Wenn ein Mitarbeiter innerhalb einer Abrechnungsperiode ein höheres Basisgehalt bekommt, wird der Infotyp Basisbezüge (0008) zu einem bestimmten Datum geändert und abgegrenzt. Es existieren zwei Datensätze für eine Abrechnungsperiode. Bei der Abrechnung schreibt das System die Lohnart Basisbezüge mit zwei unterschiedlichen Splitkennzeichen in die Tabelle RT. Diese Splitkennzeichen sind ein Verweis auf die Tabelle WPBP, in der die zugehörigen Werte stehen. Das System berücksichtigt die beiden Datensätze für die entsprechenden Teilzeiträume bei der Entgeltberechnung.

PY - Splitkennzeichen für ELIMI, RESET...

*     alle Kennzeichen sind zu entfernen
R     Mitarbeiterkreisgruppierung- Tabelle: T503
      Personalrechenregel
A     Arbeitsplatz-Zeitraum                 WPBP
1     1. nationale Split (SV)               SV
2     2. nationale Split (Steuer)           XST
3     3. nationale Split
T     alternative Bezahlung                 ALP
K     Kostenrechnung                        C1
U     Überweisung                           BT
X     variable Zuordnung                    V0 (Operation SETIN)
Y     Zuordnung Abwesenheit
Z     Zeiteinheit

Mittwoch, 9. November 2011

ABAP - ALV Grid Grundbausteine

Hier die Grundbausteine um ein vernünftiges ALV Grid zu produzieren:

Im DATA-Bereich:
* Daten für Ausgabebaustein
....
TYPE-POOLS: SLIS.

DATA: FIELDCAT_ALV    TYPE SLIS_T_FIELDCAT_ALV,
      FIELDCAT_ALV_WA TYPE SLIS_FIELDCAT_ALV,
      SORT_ALV        TYPE SLIS_T_SORTINFO_ALV,
      SORT_ALV_WA     TYPE SLIS_SORTINFO_ALV,
      LAYOUT_ALV      TYPE SLIS_LAYOUT_ALV,
      FILTER_ALV      TYPE SLIS_T_FILTER_ALV,
      FILTER_ALV_WA   TYPE SLIS_FILTER_ALV,
      EVENTS_ALV      TYPE SLIS_T_EVENT,
      EVENTS_ALV_WA   TYPE SLIS_ALV_EVENT,
      HEADER_ALV      TYPE SLIS_T_LISTHEADER,
      HEADER_ALV_WA   TYPE SLIS_LISTHEADER,
      FOOTER_ALV      TYPE SLIS_T_LISTHEADER,
      FOOTER_ALV_WA   TYPE SLIS_LISTHEADER,
      GS_VARIANT      TYPE DISVARIANT.

DATA: G_REPID LIKE SY-REPID.
DATA: L_TITLE TYPE LVC_TITLE.
....
* Am Ende des Datenselektion
....
  PERFORM DISPLAY_ALVLIST.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALVLIST
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_ALVLIST .
*----Anzeigevarianten
  GS_VARIANT-REPORT = SY-REPID.
*-----Headeraufbau
  HEADER_ALV_WA-TYP  = 'H'.
  HEADER_ALV_WA-INFO = '<<Überschrift>>'.
  APPEND HEADER_ALV_WA TO HEADER_ALV.


*  PERFORM STANDARD_HEADER_INFO2 CHANGING HEADER_ALV_WA.

*  APPEND HEADER_ALV_WA TO HEADER_ALV.

*  HEADER_ALV_WA-TYP  = 'S'.
*  HEADER_ALV_WA-KEY  = '<<Zweite Überschrift>>'.
**  WRITE DDAY TO HEADER_ALV_WA-INFO.
*  APPEND HEADER_ALV_WA TO HEADER_ALV.

  CLEAR HEADER_ALV_WA.
*  HEADER_ALV_WA-TYP  = 'S'.
*  APPEND HEADER_ALV_WA TO HEADER_ALV.

  G_REPID = SY-REPID.

*-----Aufbau des Feldkatalogs
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      I_PROGRAM_NAME         = G_REPID
      I_STRUCTURE_NAME       = '<<Ausgabestruktur aus DDIC>>'
      I_INCLNAME             = G_REPID
      I_BYPASSING_BUFFER     = 'X'
    CHANGING
      CT_FIELDCAT            = FIELDCAT_ALV
    EXCEPTIONS
      INCONSISTENT_INTERFACE = 1
      PROGRAM_ERROR          = 2.

  LOOP AT FIELDCAT_ALV INTO FIELDCAT_ALV_WA.
    CASE FIELDCAT_ALV_WA-FIELDNAME.

      WHEN '<<Feldname>>'.
        FIELDCAT_ALV_WA-OUTPUTLEN = 10.
        FIELDCAT_ALV_WA-SELTEXT_S = '<<gewünschte Bezeichnung>>'.
        FIELDCAT_ALV_WA-DDICTXT   = 'S'.

      WHEN '<<Feldname2>>'.
....
* Hier alle Felder mit Überschriften versehen wenn gewünscht


    ENDCASE.
    MODIFY FIELDCAT_ALV FROM FIELDCAT_ALV_WA.
  ENDLOOP.

*-----Listlayout
*  LAYOUT_ALV-COLWIDTH_OPTIMIZE = 'X'.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM       = G_REPID
*            I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
            I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
            I_CALLBACK_TOP_OF_PAGE   = 'TOP_OF_PAGE'
            IS_LAYOUT                = LAYOUT_ALV
            IT_FIELDCAT              = FIELDCAT_ALV
            IT_SORT                  = SORT_ALV
*            IT_EVENTS                = EVENTS_ALV
*            IT_EVENTS                = ZTEVENTS
            I_SAVE                   = 'A'
*           IS_VARIANT               = GS_VARIANT
            I_GRID_TITLE             = L_TITLE
       TABLES
            T_OUTTAB                 = <<Ergebnistabelle wie Ausgabestruktur>>
       EXCEPTIONS
            PROGRAM_ERROR            = 1.


ENDFORM.                    " DISPLAY_ALVLIST

*---------------------------------------------------------------------*
*       FORM top_of_page                                              *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = HEADER_ALV.
ENDFORM.                    "top_of_page

*---------------------------------------------------------------------*
*       FORM user_command                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  P_UCOMM                                                       *
*  -->  P_SELFELD                                                     *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING P_UCOMM LIKE SY-UCOMM
                        P_SELFELD TYPE SLIS_SELFIELD.

  CONSTANTS: LC_DEL LIKE SY-UCOMM VALUE 'DEL'.
  DATA: L_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA: FIELDCAT TYPE LVC_T_FCAT.

  CASE P_UCOMM.
    WHEN LC_DEL.

...
    WHEN OTHERS.
      " ignorieren
  ENDCASE.

ENDFORM.     " USER_COMMAND
*&---------------------------------------------------------------------*
*&      Form  SET_PF_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

* DATA: ANWSTATUS LIKE PNPSTATU VALUE '<<XYZ>>'.

*  SET PF-STATUS ANWSTATUS EXCLUDING RT_EXTAB.

ENDFORM.                    " SET_PF_STATUS

ABAP - Nummernkreise anlegen und abfragen

Nummernkreise werden mit Transaktion SNRO angelegt und mit Funktionsbaustein NUMBER_GET_NEXT verarbeitet.

EEL/ SV Aktuelle Hinweise (Release 4.7 Stand Support packages C1)


Update 09.11.

     0001568770 Auswertung IT0700 bei der Arbeitsbescheinigung § 312 SGB III
     0001570409 AAG: Falsche Anzahl Tage in Grundlagenmonat für MuschG
     0001583960 SV: Sammelhinweis für Verbesserungen und Korrekturen
     0001586897 Korrekturen Bescheinigungswesen 07/2011
     0001592357 EEL: Sachbearbeiterliste Prozesssicht
     0001593621 DEÜV Datensatz-Version 02: Korrekturen II
     0001595255 Wegfall von Rückmeldungswegen in SV-Meldeverfahren
     0001595618 DEÜV: Korrekturen bei der Meldungserstellung
     0001600293 EEL: Korrekturen und Erweiterungen 1
     0001601899 EEL: Korrekturen und Erweiterungen 2
     0001602564 SV: Technische Änderung B2A-Manager für den Beitragsnachweis
     0001604180 EEL: Korrekturen und Erweiterungen 3
     0001605377 EEL: Korrekturen und Erweiterungen 4
     0001606024 EEL: Vorgabe Defaultwerte für Beschäftigungsbetrieb
     0001606249 EEL: Keine Selektion der Abwesenheit / falscher Zeitraum
     0001607909 EEL: Korrekturen und Erweiterungen 5
     0001608897 EEL: Korrekturen und Erweiterungen 6
     0001610523 EEL: Korrekturen und Erweiterungen 7
     0001610884 EEL: FAQ
     0001611040 EEL: Vorgabe abweichender Werte für Bescheinigungslohnarten
     0001611633 EEL: Änderungen an Infotyp 0651
     0001611930 EEL: Korrekturen und Erweiterungen 8
     0001612872 EEL: Korrekturen und Erweiterungen 9
     0001613126 EEL: Falsche Daten in Statustabelle
     0001613443 EEL: Korrekturen und Erweiterungen 10
     0001614456 EEL / BEW: Fehler bei Bescheinigungsfunktion KUZR
     0001615410 EEL: Korrekturen und Erweiterungen 11
     0001616045 EEL: Protokollierung Ermittlung Brutto- / Nettobeträge
     0001616536 EEL: Korrekturen und Erweiterungen 12
     0001617344 EEL: Meldung der beitragspflichtigen Einnahmen
     0001619053 EEL: Korrekturen und Erweiterungen 13
     0001619790 EEL / BEW: Fehler bei Bescheinigungsfunktion CAAT
     0001620938 Knappschaft: Schließung der Weiterleitungsstelle 98094032
     0001621523 EEL: Überarbeitung Report 'Rückmeldungen EEL verarbeiten'
     0001623073 EEL: Prozesssicht - Korrekturen und Erweiterungen 1
     0001624666 EEL: Korrekturen und Erweiterungen 14
     0001626107 EEL: Stornierungen im Status initial
     0001626520 EEL: Korrekturen und Erweiterungen 15
     0001636098 EEL: Ermittlung der Abwesenheiten für Vorerkrankungsabfrage
     0001633983 EEL: Korrekturen und Erweiterungen 16
     0001633006 EEL: Emittlung des letzten Abrechnungszeitraums




Report RPCEELD0_PROCESS steht ohne September CLC-Package nicht zur Verfügung!

Aber Vorsicht beim Einspielen in Release 6.00 =>

ACHTUNG - Release 6.00 - Ergänzung am 9.9.2011, Hinweis 1610398 Mit dem HRSP 73 / CLC 73 für das Release 6.00 wurde ein Fehler ausgeliefert. Es wird kein AVMG berechnet ! Die Korrektur wurde mit Hinweis 1629659  ausgeliefert.

Montag, 7. November 2011

PY - Umstellung DEÜV-Schlüssel auf TS2010

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!

Freitag, 4. November 2011