Abfrage Eingabefeld in Maske

Alles über Formulare, deren Erstellung und deren eventueller Austausch

Moderator: SYNERPY

Antworten
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Abfrage Eingabefeld in Maske

Beitrag von TE999 »

Hallo,

ich hänge bei einer Abfrage eines Variablenfeldes.
Und zwar möchte ich in Abhänigkeit des Feldes Lohn_Gehalt aus BSM-Mitarbeiterstamm eine entsprechende Bildschirmaufschrift anzeigen.

Das Feld Lohn_Gehalt ist in der Tabelle BSM vom Typ VarChar(1) deklariert. Eingabe L oder G

Meine Abfrage:

IF (E_Lohn_Gehalt.Field.AsString= 'G ') THEN
L_BSM_LOHNFAKTOR.Caption := 'Gehalt'
ELSE
L_BSM_LOHNFAKTOR.Caption := 'Stundenlohn';

Leider steht im Label L_BSM_LOHNFAKTOR immer Stundenlohn.

Was mache ich falsch?
AvERP-Version: 4.2.5.25
DMS Server-Version: 1.1.0.2
Datenbank: 2009-A01 umgesetzt auf Firebird 2.5
Firebird 2.5 Server auf PC Windows 2000
Client über Terminalserver Windows 2003
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Nix :) Der Haken ist nur, daß die Beschriftungen der Felder vom Sprachsystem von Averp verwaltet werden und deswegen nur sehr bedingt nach Bedarf umgeschaltet werden können. Das konstant angezeigte "Stundenlohn" ist in den Sprachübersetzungen (siehe AverpAdmin) als deutscher Wert für das entsprechende Feld aus V_BSM hinterlegt.

Die Caption eines L_xxx zu ändern funktioniert nur dann, wenn dieses Label KEIN Feldlabel ist. Der Trick ist also folgender:

Das vorhandene L_BSM_LOHNFAKTOR aus der Maske entfernen. An der gleichen Position eigenes L_xxx mit anderem Namen einbauen. Das kann dann so wie im geschriebenen Code verwendet werden. In dem Falle wäre es sogar so machbar, daß das Label standardmäßig mit "Lohn/Gehalt" beschriftet ist, was dann den Sinn des Feldes in der leeren Maske widerspiegelt. Mit dem vorgeschlagenen Code im OnDataChange wird dann, sobald es Daten gibt, dazu passend auf die Einzelanzeige "Lohn" oder "Gehalt" umgeschaltet.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Danke,

ist aber noch nicht ganz das was ich suche.
Vieleicht habe ich auch etwas vergessen zu erwähnen.
Ich habe das Feld Lohn_Gehalt von der Tabelle BSM in die View Monatsauswertung BSMZ übergeben.
Die Ausgabe auf der Maske "E_LOHN_GEHALT" kommt korrekt. L oder G
Jetzt möchte ich aber die Information in der Maske noch für die Ausgabe eines Textes Lohn oder Gehalt und dann später noch für eine weitere Berechnung nutzen.
Hier scheitere ich jetzt mit meiner Abfrage:

IF (E_Lohn_Gehalt.Field.AsString= 'G ') THEN
L_BSM_LOHNFAKTOR.Caption := 'Gehalt'
ELSE
L_BSM_LOHNFAKTOR.Caption := 'Stundenlohn';

Leider steht im Label L_BSM_LOHNFAKTOR immer Stundenlohn.
L_BSM_LOHNFAKTOR ist als freies Label hinzugefügt. Wenn ich es direkt zuweise geht es aber ich bekomme eine Auswertung über die If Then Anweisung nicht hin.
Ich vermute es liegt an den Datentypen.

Ich habe das ganze auch direkt in der Maske BSM ausprobiert. Es klappt selbst da nicht. Ist die Bezeichnung E_Lohn_Gehalt.Field.AsString hier richtig?
AvERP-Version: 4.2.5.25
DMS Server-Version: 1.1.0.2
Datenbank: 2009-A01 umgesetzt auf Firebird 2.5
Firebird 2.5 Server auf PC Windows 2000
Client über Terminalserver Windows 2003
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Ich bin mir jetzt wirklich nicht mehr sicher, ob das ändern der Caption überhaupt noch geht, wenn die Maske erst mal angezeit ist. Was wäre denn von der Idee zu halten zwei Labels zu machen, und deren Eigenschaft VISIBLE über Kreuz auf True und False zu stellen? Das geht auf jeden Fall, wie viele Buttons in verschiedenen Masken zeigen.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Îch habs probiert. Es klappt nicht. Der Fehler liegt nicht an den Label.
Ich vermute ich kann die Information aus den Feld E_LOHN_GEHALT sollte L oder G sein mit den Ausdruck E_LOHN_GEHALT.Field.AsString nicht auslesen. Ich habs schon mit.Text versucht-geht aber auch nicht.
AvERP-Version: 4.2.5.25
DMS Server-Version: 1.1.0.2
Datenbank: 2009-A01 umgesetzt auf Firebird 2.5
Firebird 2.5 Server auf PC Windows 2000
Client über Terminalserver Windows 2003
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Das Auslesen der E_xxx ist in der Tat nicht immer so ganz einwandfrei. Es gäbe aber den Weg über folgenden Konstrukt, wobei die Nummer der Query natürlich angepaßt werden muss:

Code: Alles auswählen

sLG := AsString(q_1.FieldByName('LOHN_GEHALT'));
if (sLG = 'G') then usw.
Das Auslesen der Maskenfelder habe ich mir irgendwann mal abgewöhnt.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Habe ich heute auch schon versucht. Klappte nicht, obwohl kein Fehler erkennbar ist.

:?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?: :?:
AvERP-Version: 4.2.5.25
DMS Server-Version: 1.1.0.2
Datenbank: 2009-A01 umgesetzt auf Firebird 2.5
Firebird 2.5 Server auf PC Windows 2000
Client über Terminalserver Windows 2003
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Haben Sie schonmal innerhalb der Anweisungsblöcke der If-Anweisung sich mit einer MESSAGE anzeigen lassen, in welchen Zweig die Maschine abbiegt? Und eventuell mit einer weiteren Message mal den Inhalt der Variablen sLG anzeigen lassen. Dann wüßten Sie immerhin schonmal, ob der Fehler im Auslesen des Feldes oder später liegt

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
TE999
Beiträge: 126
Registriert: Sa Jul 28, 2007 8:49 pm
Wohnort: Gera

Beitrag von TE999 »

Ich habe noch etwas getestet mit Teilerfolgen.

Bei Aufruf des ganzen über ein OnExit aufgerufene Procedure funktioniert alles. Der Inhalt von sLG wird Ordnungsgemäß ausgelesen und verarbeitet. Die Labelinformationen werden getauscht.

Sobald ich das ganze aber von einer anderen Stelle aus aufrufte klappt es nicht mehr.
Getestet habe ich Aufruf von OnFormShow, onDataChange, before und after post/edit/Update.
Ich werde an dieser Stelle erst mal aufhören. Es geht zu mindestens teilweise.

Danke miboe
AvERP-Version: 4.2.5.25
DMS Server-Version: 1.1.0.2
Datenbank: 2009-A01 umgesetzt auf Firebird 2.5
Firebird 2.5 Server auf PC Windows 2000
Client über Terminalserver Windows 2003
miboe
Beiträge: 1295
Registriert: Fr Jul 28, 2006 9:13 am

Beitrag von miboe »

Mal bitte folgendes probieren: In der Maske in das Event OnDataChange eine MESSAGE einbauen, sowas wie "HALLO". Es sieht so aus, als würden in der Maske keine Events ausgewertet.

Und nur am Rande: von welcher Maske reden wir denn? FRMV_BSMZ? Dann kann ich da ja auch mal reinschauen. Zumindest in die Basisversion davon.

Gruß
Michael
Nur wer das Unmögliche versucht, wird das Machbare erreichen!
--
Datenbank: 2012-A02
Programm: 4.2.5.65
OS: Win 7 Pro / Ubuntu 10.04.3
Antworten