GET PERNR auf dem Selection-Screen?

Benutzeroberflächen in SAP Systemen.

GET PERNR auf dem Selection-Screen?

Postby Bilal3242 » Mon Aug 22, 2011 4:14 pm

Hallo,

als ehemaliger Sachbearbeiter (der auch heute noch öfters Vertretung machen muss)
kommen mir seit ich in die Programmierung eingestiegen bin immer wieder Ideen wie
ich die Arbeit vereinfachen könnte.

Letztens war es z.B. ein Art HR-Startprogramm bei dem man nur die Firmen und
Mitarbeiterkreise ankreuzen muss und die entsprechenden Mitarbeiter dann direkt
angezeigt werden - sprich sofort auf dem Selection-Screen ohne das man den Report
erst ausführen muss. Damit es verständlicher wird, hier ein Screenshot:

Image hrreport_a.jpg
(48.34 KiB) Noch nie heruntergeladen

Besonders begeistert bin ich ja von der Dropdown-Funktion (quasi wie in Excel der
Autofilter) mit dem ich die ausgewählten Mitarbeiter noch weiter einschränken kann.

In einem zweiten Reiter kann man dann genau diese ausgewählten Mitarbeiter bearbeiten,
also z.B. Reporte starten (Entgeltnachweis, Urlaubsliste, Zeitnachweis, etc.) und sich mit
den Pfeil-Tasten auch nur innerhalb der gewählten Mitarbeiter bewegen. Auch Abwesenheiten
lassen sich so z.B. einfach als direkter Batch-Input per Knopfdruck hinzufügen.

Image hrreport_b.jpg
(130.04 KiB) Noch nie heruntergeladen

Ist derzeit alles noch in der Testphase, aber dabei bin ich auf ein Problem gestoßen was sich wahrscheinlich nur umständlich lösen lässt.

Und zwar wird die Berechtigungsprüfung im HR ja bei der logischen Datenbank PNP
und GET PERNR durchlaufen. Mit PROVIDE/ENDPROVIDE werden dann die Infotypen
gelesen. Es scheint nun so, dass GET PERNR erst bei Start-of-Selection eine Rolle
spielt und vorher die PERNR nicht füllt. Sprich mit "Provide * from P2001" oder ähnlichem
bekomme ich keine Daten, ich muss immer mit "Select * from PA2001" in die Datenbank
gehen und umgehe so natürlich die Berechtigungsprüfung.

Bevor ich diese Berechtigungsprüfung nun nach SY-UNAME ins Coding einbaue, wollte
ich mal fragen ob nicht doch jemand eine Möglichkeit kennt das besser zu lösen?

So in etwa läuft das derzeit ab:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. REPORT  ZP_TESTHR.
  2.  
  3. TABLES: PA0001.
  4.  
  5. PARAMETERS: PERSO LIKE PA0001-PERNR.
  6. PARAMETERS: FIRMA LIKE PA0001-BUKRS.
  7.  
  8. AT SELECTION-SCREEN.
  9.  
  10. IF PERSO > 0.
  11.   SELECT * FROM PA0001 WHERE PERNR EQ PERSO.
  12.     FIRMA = PA0001-BUKRS.
  13.  
  14.  
GeSHi ©


Sprich sobald man die Personalnummer eingibt und "Enter" drückt, holt er sich die Firma des Mitarbeiters aus Infotyp 0001.

Vor allem da ich demnächst auch noch Abrechnungsergebnisse in den Report aufnehmen
möchte, ist das mit den Berechtigungen recht wichtig...

Viele Grüße
Michael
Bilal3242
...
...
 
Posts: 400
Joined: Wed Apr 15, 2009 12:46 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Lasse815 » Tue Aug 23, 2011 9:06 am

Hallo Michael,
es kommt mir so vor, als ob Du die Welt der Online-Transaktion (wie PA20 - sprich Eingabe, [ENTER], Ergebnis) und Report-Auswertung (wie RPCALCD0 - sprich zuerst alle Selektionen, dann Auswertung, dann Ausgabe) mischen möchtest... das wird Dir nur mit einem Report vermutlich nicht sinnvoll gelingen... wenn Du nach der Eingabe plus [ENTER] direkt ein Ergebnis haben möchtest, dann würde ich dafür eher eine eigene Dialog-Transaktion entwickeln.
Als Alternative zu Deinem Berechtigungsthema könntest Du die Infotypen statt direkt mit SELECT auch mittels Funktionsbaustein (bspw. HR_READ_INFOTYPE) lesen.
Gruß
Chris
Lasse815
....
....
 
Posts: 683
Joined: Wed Nov 23, 2005 12:36 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Bilal3242 » Tue Aug 23, 2011 9:53 am

Hallo Chris,

ChrisB hat geschrieben:es kommt mir so vor, als ob Du die Welt der Online-Transaktion (wie PA20 - sprich Eingabe, [ENTER], Ergebnis) und Report-Auswertung (wie RPCALCD0 - sprich zuerst alle Selektionen, dann Auswertung, dann Ausgabe) mischen möchtest...


Ja, so in etwa habe ich mir das schon vorgestellt und durch meine Tests ja auch herausgefunden das es funktioniert. Wenn ich mit den Pfeil-Buttons z.B. durch die Tage der Mitarbeiter scrolle, sehe ich auf einen Blick ob die anwesend oder abwesend sind ohne jetzt erstmal IT 2011 oder 2001 durchsuchen oder den RPTIME00 starten zu müssen. Und auf gleiche Art und Weise könnte ich da jetzt ja auch noch sonstige Stammdaten oder Abrechnungsergebnisse einbauen.

Bin überrascht wie schnell das geht, selbst bei der Auswahl der Mitarbeiter wo zig Tabellen mit jedem Tastendruck mehrfach per Loop durchlaufen werden klappt das so gut wie ohne Verzögerung.

Natürlich würde ich keine Reporte (wie den RPCALCD0) mit ewig langen Laufzeiten direkt im Startreport ausführen lassen, sowas würde ich dann von dort einfach per Button mit "Submit and return" aufrufen und halt die entsprechenden Selektionsfelder der Zielreporte automatisch mit den ausgewählten Personalnummern füllen lassen. Da klappt es dann auch wieder mit der Berechtigungsprüfung.

das wird Dir nur mit einem Report vermutlich nicht sinnvoll gelingen... wenn Du nach der Eingabe plus [ENTER] direkt ein Ergebnis haben möchtest, dann würde ich dafür eher eine eigene Dialog-Transaktion entwickeln.


Wo genau wäre denn da der Unterschied zu einem Report? Mit Dialogtransaktionen habe ich mich bisher nämlich noch nicht beschäftigt.

Im Prinzip mache ich es doch jetzt schon so wie in der PA20, nur das halt noch wesentlich mehr Daten pro Mitarbeiter angezeigt werden als dort (in der Kopfzeile).

Als Alternative zu Deinem Berechtigungsthema könntest Du die Infotypen statt direkt mit SELECT auch mittels Funktionsbaustein (bspw. HR_READ_INFOTYPE) lesen.


Danke für den Tipp, das versuche ich dann mal.

Viele Grüße
Michael
Bilal3242
...
...
 
Posts: 400
Joined: Wed Apr 15, 2009 12:46 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Bilal3242 » Tue Aug 23, 2011 11:06 am

ChrisB hat geschrieben:Als Alternative zu Deinem Berechtigungsthema könntest Du die Infotypen statt direkt mit SELECT auch mittels Funktionsbaustein (bspw. HR_READ_INFOTYPE) lesen.


Hat funktioniert, danke nochmal. :)

Bezogen auf das obige Beispiel würde das nun so aussehen:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. REPORT  ZP_TESTHR.
  2.  
  3. DATA: IT0001 TYPE STANDARD TABLE OF P0001 WITH HEADER LINE.
  4.  
  5. PARAMETERS: PERSO LIKE PA0001-PERNR.
  6. PARAMETERS: FIRMA LIKE PA0001-BUKRS.
  7.  
  8. AT SELECTION-SCREEN.
  9.  
  10. REFRESH IT0001.
  11. CLEAR FIRMA.
  12.  
  13.   IF PERSO > 0.
  14.  
  15.     CALL FUNCTION 'HR_READ_INFOTYPE'
  16.       EXPORTING
  17.         PERNR           = PERSO
  18.         INFTY           = '0001'
  19.         BEGDA           = SY-DATUM
  20.         ENDDA           = SY-DATUM
  21.       TABLES
  22.         INFTY_TAB       = IT0001
  23.       EXCEPTIONS
  24.         INFTY_NOT_FOUND = 1.
  25.  
  26.     LOOP AT IT0001.
  27.       FIRMA = IT0001-BUKRS.
  28.     ENDLOOP.
  29.  
  30.   ENDIF.
  31.  
GeSHi ©
Bilal3242
...
...
 
Posts: 400
Joined: Wed Apr 15, 2009 12:46 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Lasse815 » Fri Aug 26, 2011 9:03 am

Hallo Michael,
zum Thema Dialog-/Report-Programmierung hilft vermutlich ein Blick in die Doku :-)
http://help.sap.com/saphelp_nw70/helpda ... ameset.htm
Gruß
Chris
Lasse815
....
....
 
Posts: 683
Joined: Wed Nov 23, 2005 12:36 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Bilal3242 » Mon Aug 29, 2011 1:57 pm

Danke für den Link. :)

Habe jetzt übrigens das mit den Abrechnungsergebnissen hinbekommen... und zudem auch noch die Zeitarten hinzugefügt. Nun kann ich auf einem Selektionsbild einfach Lohn- und Zeitarten eintippen und mich dann durch die Daten der Mitarbeiter klicken.

Sprich ich werte RT, SALDO und ZES gleichzeitig auf dem Selektionsbild aus. Wie gesagt, es ist keine nennenswerte Verzögerung spürbar, ich drücke auf die Pfeilbuttons und innerhalb von Millisekunden werden alle Daten aktualisiert. Und mit den Berechtigungen gibt's auch keine Probleme, das übernehmen die Funktionsbausteine.

Warum gibt es sowas eigentlich nicht im Standard? Würde doch viel Arbeit sparen, vor allem wenn man irgendwas prüfen muss.

Als nächstes werde ich jetzt noch Buttons für Entgeltabrechnung und Zeitnachweis hinzufügen und zudem die Möglichkeit einbauen die ausgewählten Lohn- und Zeitarten für mehrere Mitarbeiter gleichzeitig auszuwerten (ALV-Liste).
Bilal3242
...
...
 
Posts: 400
Joined: Wed Apr 15, 2009 12:46 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Lasse815 » Tue Aug 30, 2011 9:45 am

Hallo Michael,
also die Verzögerung wird wohl sehr sehr stark von der Anzahl der Ausgewerteten Personen und Perioden abhängen... SAP wird durchaus auch bei Firmen mit mehreren 10.000 Personalnummern eingesetzt - da wird das sicherlich nicht innerhalb von Sekunden funktionieren. Mir ist eine Firma bekannt, bei denen läuft bspw. die Buchungsüberleitung > 48 Stunden...
Hier ist solch eine Auswertung sicher nicht so praktikabel! Und ich wäre an Deiner Stelle auch sehr vorsichtig mit Deiner Anwendung. Wenn es bei Euch nicht nur um < 500 Personalnummern geht, dann würde ich zuerst sehr ausführliche Last-Tests im Produktivsystem machen (mit mehreren gleichzeitigen Aufrufen von mehreren Testusern mit Prüfung des Speicherverbrauchs u. ä.) bevor Du dieses Thema auch nur infohalber dem Fachbereich mitteilst... sonst läufst Du u. U. Gefahr Euer Produktivsystem lahmzulegen...
Oder ist Euer HR System so groß dimensioniert?
Gruß
Chris
Lasse815
....
....
 
Posts: 683
Joined: Wed Nov 23, 2005 12:36 pm

Re: GET PERNR auf dem Selection-Screen?

Postby Bilal3242 » Tue Aug 30, 2011 10:49 am

Hallo Chris,

ChrisB hat geschrieben:Hallo Michael,
also die Verzögerung wird wohl sehr sehr stark von der Anzahl der Ausgewerteten Personen und Perioden abhängen...


Am längsten dauert das Starten des Reportes mit etwa 10 Sekunden, da er sich zu dem Zeitpunkt aus der PA0001 alle derzeit aktiven Mitarbeiter heraussucht. Die werden dann in eine interne Tabelle geschrieben, aus der sich je nach Auswahl der Firmen und Bereiche eine zweite interne Tabelle aufbaut. Quasi die "zu bearbeitenden Mitarbeiter". Und die kann man dann halt der Reihe nach durchklicken, um sich Stammdaten oder Abrechnungsergebnisse anzuschauen oder Auswertungen mit genau diesen Mitarbeitern zu starten.

Die wirklich aufwändigen "On-Screen" Auswertungen wie Abrechnungsergebnisse oder Stammdaten macht er ja immer einzeln für den aktuell ausgewählten Mitarbeiter, da spielt es dann keine Rolle mehr wie viele Personalnummern es im System gibt.

SAP wird durchaus auch bei Firmen mit mehreren 10.000 Personalnummern eingesetzt - da wird das sicherlich nicht innerhalb von Sekunden funktionieren. Mir ist eine Firma bekannt, bei denen läuft bspw. die Buchungsüberleitung > 48 Stunden... Hier ist solch eine Auswertung sicher nicht so praktikabel!


Klar, da geht das so natürlich nicht, aber man könnte das ganze sicher noch etwas optimieren. Wenn ich dran denke wie ich oft ich da über die Tabellen loope, sind bestimmt noch einige Verbesserungen möglich. Zur Not könnte ein zweiter Report auch jede Nacht Tabellen füllen mit denen dann tagsüber gearbeitet wird.

Und ich wäre an Deiner Stelle auch sehr vorsichtig mit Deiner Anwendung. Wenn es bei Euch nicht nur um < 500 Personalnummern geht, dann würde ich zuerst sehr ausführliche Last-Tests im Produktivsystem machen (mit mehreren gleichzeitigen Aufrufen von mehreren Testusern mit Prüfung des Speicherverbrauchs u. ä.)


Ok, das sollte man natürlich noch prüfen, bevor das alle Sachbearbeiter einsetzen. Aber derzeit sehe ich da eigentlich kein Problem. Es geht bei uns um etwa 2000 Personalnummern und letztendlich macht der Report ja auch nichts anderes als das was man sowieso machen würde... nur halt viel einfacher, da nicht mehrere Infotypen, Reporte oder Transaktionen manuell gestartet werden müssen.

Mein Ziel ist eigentlich, dass sich die Sachbearbeiter nie wieder mit Reporten und Varianten rumschlagen müssen. Es gibt dann nur noch einen einzigen Report, der alle anderen auf Knopfdruck startet (ohne via Selection-Screen).

Viele Grüße
Michael

P.S. Auch für mich selbst habe ich schon einen solchen Startreport erstellt... siehe Anhang. Der spart doch jede Menge Sucherei (es sei denn man kennt eh alles auswendig ;) ).
Bilal3242
...
...
 
Posts: 400
Joined: Wed Apr 15, 2009 12:46 pm


Return to Dialogprogrammierung

Who is online

Users browsing this forum: No registered users and 2 guests