0

Eine vielleicht unglückliche Feldbezeichnung ‘Nr.‘ ändern

Ich habe einen Feldnamen names 'Rechnung Nr.'. Nun bekomme ich in folgendem Code

...

let NRN := text(y) + "/" + s;
let Aa := max((select Auftrag).'Lfd-ANr');
let NAN := "A" + text(Aa + 1);
let NeuerA := (create Auftrag);
NeuerA.('Geschäftsbereich' := AGBer);
NeuerA.(Auftragnummer := NAN);
NeuerA.(Kunde := KNr);
let NeueRg := (create Rechnung);
NeueRg.('Rechnung Nr.':= NRN);
NeueRg.('zum Auftrag' := ANr);
NeueRg.(Rechnungsanschrift := RgAnschrift);
NeueRg.(Aussteller := AGBer);
popupRecord(NeuerA);
popupRecord(NeueRg)

vom Editor die Fehlermeldung

Die Ausdrücke für "dann" und "sonst" liefern unterschiedliche Datentypen zurück in Zeile ... in der NeueRg.('Rechnung Nr.':= NRN); steht.

Der Editor ersetzt dann NeueRg.('Rechnung Nr.':= NRN); durch NeueRg.(A:= NRN);

Fragen

1. Kann es sein, dass die Fehlermeldung mit der Feldbezeichnung 'Rechnung Nr.' wegen der festen Belegung von Nr unter Ninox unglücklich gewählt ist?

2. Wenn ja, kann ich den Feldnamen in der Tabelle Rechnung problemlos ändern, sondass auch sämtlicher anderer Code noch läuft?

3. Wenn nein, woran könnte die Fehlermeldungbliegen?

9 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo ASi,

    sicher, dass das die ganze Formel ist? z.B. ---NeueRg.('zum Auftrag' := ANr);---- Was ist ANr?
    Normalerweise tauchen solche Fehlermeldungen beim if then Befehl auf. Früher gab es die Empfehlung die Variablen mit mindestens zwei Buchstaben zu benennen weil Ninox intern die Felder alphabetisch nummerriert (A,B,C....).

    Leo

    Leo

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Kleine Ergänzung: Ein Feldname wie 'Rechnung Nr.' sollte normalerweise keine Probleme bereiten. Und ja, man kann jeden Tabellen- und Feldnamen ändern, Ninox ändert ihn dann automatisch auch in allen Formeln und Skripten.

    • ASi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Euch. Dann liege ich mit meiner Vermutung über den Feldnamen falsch. Hier ist der vollständige Code. Der

    let RgNr := this.Nr;
    let RgAnschrift := this.Rechnungsanschrift;
    let ANr := this.'zum Auftrag'.Nr;
    let A := first((select Auftrag)[Nr = ANr]);
    let AGBer := A.'Geschäftsbereich';
    let KNr := A.Kunde.Nr;
    let Ra := max((select Rechnung).'Lfd-RNr');
    let y := number(substr(text(Ra), 0, 2));
    let x := number(substr(text(Ra), 2, 3));
    x := x + 1;
    let s := "";
    if x < 10 then
    s := "00" + text(x)
    else
    if x < 100 then s := "0" + text(x) else s := text(x) end
    end;
    let NRN := text(y) + "/" + s;
    let Aa := max((select Auftrag).'Lfd-ANr');
    let NAN := "A" + text(Aa + 1);
    let NeuerA := (create Auftrag);
    NeuerA.('Geschäftsbereich' := AGBer);
    NeuerA.(Auftragnummer := NAN);
    NeuerA.(Kunde := KNr);
    let NeueRg := (create Rechnung);
    NeueRg.('zum Auftrag' := ANr);
    NeueRg.('Rechnung Nr.' := NRN);
    NeueRg.(Rechnungsanschrift := RgAnschrift);
    NeueRg.(Aussteller := AGBer);
    popupRecord(NeuerA);
    popupRecord(NeueRg)

    Der Editor erstet dann 

    NeueRg.('Rechnung Nr.' := NRN);

    durch 

    NeueRg.(A := NRN);

    mit der obigen Fehlermeldung.

    • ASi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Leo, tatsächlich konnte ich das Problem lösen, indem ich die Variable A durch AG ersetzt habe.

    Jetzt habe ich mit den obigen Code noch das Problem, dass die neue Rechnung (NeueRg) nicht mit dem neuen Auftrag (NeuerA) verknüpft wird, sondern mit dem gleichen Auftrag, mit den die alte Rechnung (this) verknüpft ist. Woran könnte das liegen?

    Ich danke jetzt schon mal für die tolle Unterstützung, die ich durch Euch erfahre.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ohne den Code jetzt komplett zu durchschauen: Wenn ich nes richtig sehe, wird der Variable ANr in Zeile 3 ja die Auftragsnummer des "alten" Auftrags zugewiesen. Der neue Auftrag wird erst später erstellt (ID in Variable 'NeuerA'). Ich würde es mal so versuchen:

    NeueRg.('zum Auftrag' := NeuerA.Auftragsnummer);

    • ASi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke Copytexter. Das hat mir den richtigen Weg gezeigt. So hat es dann funktioniert: 

    NeueRg.('zum Auftrag':=NeuerA.Nr);

    • ASi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Und jetzt kommt gleich die nächste Frage (sorry :-)). Beim Durchlaufen des Codes werden beide Datensätze korrekt erzeugt und angezeigt. Allerdings wird beim neuen Datensatz in der Tabelle Rechnung das Feld 'Rechnung Nr.' nicht mit dem erzeugten String NRN - einer selbst vergebenen, laufenden Rechnungsnummer - gefüllt, sondern merkwürdigerweise mit dem Inhalt des Feldes 'Auftragnummer' aus dem neuen Datensatz der Tabelle Auftrag. Es wirkt, als ob die beiden Felder Rechnung.'Rechnung Nr.' und Auftrag.Auftragnummer verknüpft sind. So wird das Feld Rechnung.'Rechnung Nr.' auf null gesetzt, wenn ich den dazugehörigen Auftrag lösche.

    Was muss ich ändern, damit ich das Feld Rechnung.'Rechnung Nr.' mit dem erzeugten String NRN füllen kann?

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Puh, aus dem oben abgebildeten Code kann ich(!) jetzt nicht erkennen, woran das liegen könnte. Das Szenario lässt sich auch nicht auf die Schnelle nachstellen. Was mir so spontan einfällt: Man könnte prüfen, ob

    - die Feldtypen übereinstimmen ('Rechnung Nr.' müsste wohl ein Textfeld sein)

    - irgendwo Trigger laufen ("Bei neuem Datensatz" oder "Nach Änderung")
    - alle beteiligten Variablen korrekt benannt sind (siehe Problem mit Variabe "A")

    Und wenn der Code mit einer Schaltfläche ausgeführt wird (ansonsten kann man ihn testweise in eine Schaltfläche packen), dann könnte man zum "Debuggen" hier und dort mal einen dialog() einbauen, um das Zwischenergebnis zu überprüfen. Zum Beispiel nach der Wertzuweisung an die Variable NRN:

    [...]
    let NRN := text(y) + "/" + s;
    dialog("Prüfen", "Variable NRN: " + NRN, ["Ok"];
    [...]

    Oder du stellst die DB mit Demodaten zum Download ins Netz, damit man mal reinschauen kann.

    • ASi
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Danke für die Tipps. Der Code funktioniert in der Mac App! Nur in der Web Anwendung generiert er den Fehler. Da ich das Programm hauptsächlich auf dem Mac nutze, kann ich damit leben.

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 9Antworten
  • 1556Ansichten