Freitag, 7. Dezember 2012

Planzeiten: Utility ändern im AvERP-Designer

Fortsetzung zum Thema

"Kein Angst vor dem AvERP-Designer"

 die Folge

"Kleine Änderung am Utility - viel Zeit gespart".


Aufhänger ist das leidige Thema "Planzeiten eintragen über den Job-Server". Wenn der Job-Server steht - leider immer noch als Programm und nicht als Dienst aufgesetzt, sind es die Mitarbeiter, denen beim Stempeln auf einmal Minus-Stunden angezeigt werden, die sich als Erste beschweren.

Kurz das passende Utility gesucht, um Planzeiten nachzutragen - aber leider geht das nur immer für einen Mitarbeiter und nicht für Alle Mitarbeiter, die betroffen sind. Da lohnt es sich doch, kurz in die offenen Sourcen zu sehen, bevor das Utility für X Mitarbeiter X mal mit Eingabe Von-Datum, Bis-Datum aufgerufen wird - zumal es doch schon eine Prozedur für den Job-Server gibt, die das Werk ohne Eingabe und klaglos verrichtet.

Der Aufruf im JOB-Server


d.h. P_CZEITP mit BSM_ID leer, Datum von :DATE bist :DATE+10


Parameter der Prozedur 
CREATE OR ALTER PROCEDURE P_CZEITP (
    BSM_ID INTEGER,
    BDATUM DATE,
    EDATUM DATE)

Name des Utilities bestimmen:

Finde in Anmeldung SYSDBA grau unter dem Utility-Fenster FRUBSN_PLANZEIT_NEU





Schnell im Designer aufgerufen :


Utility wählen und über Eingabe FRUBSM_P positionieren

Editieren

Objectinspector über Rechtsclick auf Maske FRUBSM_PLANZEIT_NEU starten


Rechts-Click


Objectinspector über Rechtsklick auf Startmaske starten.
Pascal.Script für PROC0001 öffnen
über Rechts-Click im Grauen Bereich des Object-Inspector.


(Wenn in einem Utility keine Edit-Elemente und Buttons an der Maske angelegt sind, die über Events die Logik steuern, wird immer die PROC0001 aufgerufen. In diesem Beispiel einfach genutzt, um den aktiven Mitarbeiter über Label1.Caption dynamisch in der Utility-Maske einzutragen.)

Meine kleine Änderung hier gelb unterlegt:
Wenn  Maske leer
und kein Mitarbeiter-Kontext,gefunden über dem Konstrukt
Z := Application.FindComponent(B);
nMyLink := AsInteger(Z.Q_1.FieldByName('ID'));

- Trotzdem eine ID -9999(willkürlich gewählt)
über Label2.Caption, den anderen Objekten der Maske zur Verfügung stellen.

Und zwar erfolgt die Verarbeitung in Button2OnClick Button2 -Caption "Zeit eintragen".
Hier noch die kleine Änderung
 P_CZEITP ohne Parameter BSM_ID aufrufen, wenn nBSM_ID = -9999.

Am einfachsten wird ein Null-Wert an eine Stored-Procdure
FRMData.Stp_Universal übergeben, indem das Binden der Variablen über
<MyObject>.ParamByName unterdrückt wird.