0

Kunde übertragen

Hallo liebe Ninox Community,

ich komme wiedermal nicht weiter und brauche Hilfe. Ich habe drei Tabellen "AUFTRÄGE" "ANGEBOT" "RECHNUNG". 

Im "AUFTRÄGE" erfasse ich meinen  Auftrag und füge den Kunde hinzu. Wenn ich dann zu Hause bin, erstelle ich ein Angebot. Wenn ich dann auf den + Drücke (siehe Bild) der verknüpften Tabelle "ANGEBOT". Öffnet sich das Formular wo ich das Angebot erstelle. Automatisch wird eine Angebots-Nummer erstellt, die Formel habe ich bei der Tabelle " ANGEBOT" - Träger beim neuen Datensatz  - reingepackt. Das klappt super. 

1. Möchte ich es so hinbekommen, wenn ich auf den + Drücke das die nächste folgende Angebotsnummer erstellt wird und der Kunde aus dem "AUFTRAG" übernommen wird.

2. Will ich,  wenn durch die Tabelle "ANGEBOT" ein Angebot erstell wird und es keinem Auftrag zugeordnet ist. Das die nächste folgende Angebots-Nummer automatisch erstellt wird.

Ich hoffe ihr versteht mein Problem und könnt mir helfen.

Lg Victor

8 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Victor, zu Punkt 1: Man könnte den Trigger "Bei neuem Datensatz" in der Tabelle 'Angebot' um folgende Zeile ergänzen:

    Kunde := Auftrag.Kunde;
    

    Das funktioniert natürlich nur, wenn das Angebot tatsächlich direkt aus dem Auftrag heraus erstellt wird.

    Punkt 2 verstehe ich nicht. Wenn die Angebots-Nummer automatisch mit dem Trigger "Bei neuem Datensatz" erstellt wird, sollte das doch immer funktionieren, ob ein Auftrag zugeordnet ist oder nicht. Es sei denn man würde beim Generieren der Angebots-Nummer irgendwie auf die Auftrags-Nummer Bezug nehmen. Um dazu aber was sagen zu können, müsste man wissen, wie der Code des Trigger genau aussieht.

    • chalvi // WERBEAGENTUR GbR
    • VS2021
    • vor 2 Jahren
    • Gemeldet - anzeigen

    Hallo Planox.pro,

    danke für deine Antwort. Bei Punkt 2 hast du vollkommen recht. Ich merke das ich bei einigen Sachen zu kompliziert denke. 

    Zu Punkt 1 habe ich es genau so umgesetzt wie du es vorgeschlagen hast. Leider meldet er "Ausdruck mehrerer Ergebnisse". Ich verwende es so! 

    let myYear := format(today(), "YY");
    let LastNum := max((select ANGEBOT where substr('ID-Nr', 0, 2) = "AN" and substr('ID-Nr', 2, 2) = myYear).number(substr('ID-Nr', 4, 4)));
    'ID-Nr' := "AN" + myYear + format(LastNum + 1, "000");
    Kunde :='AUFTRÄGE'.Kunde;

    Lg Victor

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

      VS2021 Ja, wenn die Verknüpfung 'AUFTRÄGE' heißt, dann muss das natürlich auch so geschrieben werden. Da ich die genaue Bezeichnung der Verknüpfung nicht kannte, habe ich im Beispiel die wahrscheinlichste eingesetzt. In der Hoffnung, dass du das Prinzip verstehst und ggf. die tatsächliche Bezeichnung einsetzt. Hat ja auch geklappt. ;)

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro 

      Ich habe es vielleicht falsch ausgedrückt, bei 

      Kunde :='AUFTRÄGE'.Kunde;

      gibt er mit eine Fehlermeldung "Der Ausdruck liefert mehrere Datensätze zurück. Es funktioniert nicht. 

      Ich hänge mal eine Datenbank dran, da habe ich es aufgebaut. Mit einem Button kriege ich es hin, aber es muss dem Auftrag zugeordnet werden und es klappt nicht. 

      Mein Wunsch ist, wenn ich in der Tabelle "Auftrag" auf das + der Verknüpften Tabelle "Angebot" klicke das es mir einen Datensatz mit eine neuen Auftrag-Nummer vergibt und den Kunden aus der Tabelle "Auftrag" übernimmt. Leider kriege ich es nicht hin. 

       

      Vielen Dank für deine Geduld! 

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

      VS2021 

      Ach so, das Angebot ist 1:N mit dem Auftrag verknüpft. Dann muss man Ninox sagen, welcher der Einträge gemeint ist. Wenn es nur einen gibt, kann man den mit first() ansprechen. Da ich aber nicht sicher bin, ob nicht vielleicht doch mehrere Aufträge mit dem Angebot verknüpft werden, würde ich in diesem Fall vorsichtshalber den letzten nehmen, also last(). Das gesamte Skript für den On-Create-Trigger in der Tabelle 'Angebote' sähe dann so aus:

      let myYear := format(today(), "YY");
      let LastNum := max((select Angebot where substr('Auftrag-Nummer', 0, 2) = "AN" and substr('Auftrag-Nummer', 2, 2) = myYear).number(substr('Auftrag-Nummer', 4, 4)));
      'Auftrag-Nummer' := "AN" + myYear + format(LastNum + 1, "000");
      Kunde := last(Auftrag.Kunde order by number(Nr))

      Die Zeilen mit "let me := this" und "create Angebot" habe ich entfernt, weil mit dem Klick auf das Plus ja bereits ein neuer Datensatz erzeugt wurde und Ninox sich bei Ausführung des Triggers schon in diesem neuen Datensatz befindet.

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro 

      Vielen Dank für deine Antwort und Hilfe planox.pro. Ich habe jetzt endlich wieder Zeit mich dem Thema Ninox zu widmen. ich habe deine Formel eingefügt und es funktioniert leider nicht. Ich habe es in die Datenbank "Beispiel" eingefügt macht es nicht das was ich brauche. Hättest du da noch eine Möglichkeit, was ich falsch mache. 

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

      VS2021 Ein bisschen mehr Information als "funktioniert nicht" dürfte es schon sein. Ich hatte die Datenbank noch bei mir gespeichert, und da funktioniert es.

      • chalvi // WERBEAGENTUR GbR
      • VS2021
      • vor 2 Jahren
      • Gemeldet - anzeigen

      planox. pro Vielen Dank für deine Hilfe. Ich habe jetzt den Fehler rausbekommen. Es funktioniert in der Cloud-Version mit deiner Formel, aber in der Mac-Version leider nicht. Und ich arbeite die ganze Zeit in der Mac-Version.