1

DIALOGFELD recordID aus Auswahl weiterverarbeiten

Hallo liebe Community,

über ein Dialogfeld lasse ich die Auswahl eines Datensatzes treffen.

Dazu lasse ich mir ein Textfeld des Datensatzes anzeigen.

Die 'TABELLE1' ist in diesem Fall verknüpft: 

let MCH := for i in 'TABELLE1'.'UNTERTABELLE1 do
        i.'TEXTFELD'
    end;
let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", MCH);

Funktioniert gut. Wie kann ich denn aus der Antwort mit der Datensatznummer der Auswahl weiterarbeiten?

Mein versuch funktioniert nicht, ich brauche die Nummer des ausgewählten Datensatzes um diese in ein dynamisches Auswahlfeld zu übertragen.

let PG := first((select 'TABELLE1)[Nr = myAuswahl]).Nr;

 Kann mir jemand helfen?

 

Viele Grüße

 

Stefan

14 Antworten

null
    • Fox Concepts
    • Christoph.2
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Stefan,

    fürchte ich hab noch nicht ganz verstanden, was du vor hast, aber hier ein paar Inputs.

    Erstmal, wenn du über den Dialog eine Record Nr zurück bekommst, brauchst du kein select für die Tabelle, das geht dann auch mit der Funktion record()

    record('TABELLE1', number(Nr))

    Das zweite, woran das Ganze wahrscheinlich bei dir scheitert, ist, dass du aus dem Dialog Text zurückbekommst und sowohl record() als auch für das Setzten des dyn Auswahlfeldes eine Number notwendig ist. Wenn PG dein dyn Auswahlfeld ist musst du außerdem das let weglassen. Und die Abfrage des Records kannst du dir dann natürlich auch wieder sparen. Also ganz einfach:

    PG := number(myAuswahl)
      • Stefan_Mann
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Christoph Hallo Christoph,

      danke für die schnelle Antwort! Das DAF das die Information aus dem Dialog erhalten soll steht in einer anderen Tabelle in einem Datensatz der anschließend angelegt wird. Daher speichere ich erst über "let" in einer Variablen. Das DAF verweist auf 'UNTERTABELLE1'. Hier mal das vollständige Script:

      
      let MCH := for i in 'TABELLE1'.'UNTERTABELLE1 do
              i.'TEXTFELD'
          end;
      let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", MCH);
      let PG := number(myAuswahl);
      let my := this;
      let myNew := (create 'TABELLE3');
      myNew.(
              DAF := PG;
          );

      Also die Idee ist:

      Ich befinde mich in 'TABELLE2'. 'TABELLE1' ist daran verknüpft. ich mache einen Dialog in dem ich die Datensätze der 'UNTERTABELLE1' zur Auswahl anbiete. Dann lasse ich ein neuen Datensatz in einer anderen 'TABELLE3' erstellen in dem es ein DAF gibt das auf 'UNTERTABELLE1' verweist. Dieses soll den Wert aus der Auswahl bei Anlage des Datensatzes erhalten.

      Kannst Du helfen?

      • Fox Concepts
      • Christoph.2
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Stefan Mann ok, probieren wirs nocheinmal.

      Wenn du den Inhalt des Textfeldes zur Auswahl anbieten willst (was natürlich Sinn macht :)), geh ich davon aus, dass die Texte eindeutig sind.Die Schleife am Anfang kannst du dir übrigens auch sparen, da folgende Variante auch einen Array liefert. Und im weiteren suchst du dann ja wieder aus dem gleichen Record der 'TABELLE1' den richtigen ' Record 'UNTERTABELLE1'


      let MCH := 'TABELLE1'.'UNTERTABELLE1.'TEXTFELD' let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", MCH); let PG := first('TABELLE1'.'UNTERTABELLE1['TEXTFELD'= myAuswahl]); let my := this; let myNew := (create 'TABELLE3'); myNew.DAF := number(PG);

      Hoffe das ist jetzt das was du suchst.

    • Stefan_Mann
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Ergänzung:

    Zur Anzeige im Dialogfeld möchte ich nicht die Datensatznummer anbieten sondern den Inhalt des 'TEXTFELD' !!

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Stefan Mann nicht schön aber selten. 

      Feld bezug wird bei öffnen und schliesen von einem Tab mit user() gefüllt. Das benötige ich bis zu 4 mal. (ergibt max 4 für eine Buchung in frage kommenden Kunden) Diese werden im Dialog zum auswählen angezeigt, weiterverarbeitet wird aber die Nr des Datensatzes. Um keine leeren felder im Dialog zu haben sind alle 4 Varianten abgebildet als if/else zweig.

      Vielleicht kannst es ja für dich umgestalten. Wenn es besser und schöner geht... nehm ich das sehr gerne an.

      let an := cnt(select 'Aufträge' where bezug = user());
      if an = 4 then
          let KV := (select 'Aufträge' where bezug = user()).Name;
          let a0 := item(KV, 0);
          let a1 := item(KV, 1);
          let a2 := item(KV, 2);
          let a3 := item(KV, 3);
          let KV1 := (select 'Aufträge' where bezug = user()).Nr;
          let a00 := item(KV1, 0);
          let a11 := item(KV1, 1);
          let a22 := item(KV1, 2);
          let a33 := item(KV1, 3);
          let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
          let dia := dialog("Auftrag für Buchung wählen", tex, [a0, a1, a2, a3, "Abbrechen"]);
          let erg := if dia = a0 then
                  first(select 'Aufträge' where Nr = number(a00))
              else
                  if dia = a1 then
                      first(select 'Aufträge' where Nr = number(a11))
                  else
                      if dia = a2 then
                          first(select 'Aufträge' where Nr = number(a22))
                      else
                          if dia = a3 then
                              first(select 'Aufträge' where Nr = number(a33))
                          end
                      end
                  end
              end;
          Text := number(erg)
      else
          if an = 3 then
              let KV := (select 'Aufträge' where bezug = user()).Name;
              let a0 := item(KV, 0);
              let a1 := item(KV, 1);
              let a2 := item(KV, 2);
              let KV1 := (select 'Aufträge' where bezug = user()).Nr;
              let a00 := item(KV1, 0);
              let a11 := item(KV1, 1);
              let a22 := item(KV1, 2);
              let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
              let dia := dialog("Auftrag für Buchung wählen", tex, [a0, a1, a2, "Abbrechen"]);
              let erg := if dia = a0 then
                      first(select 'Aufträge' where Nr = number(a00))
                  else
                      if dia = a1 then
                          first(select 'Aufträge' where Nr = number(a11))
                      else
                          if dia = a2 then
                              first(select 'Aufträge' where Nr = number(a22))
                          end
                      end
                  end;
              Text := number(erg)
          else
              if an = 2 then
                  let KV := (select 'Aufträge' where bezug = user()).Name;
                  let a0 := item(KV, 0);
                  let a1 := item(KV, 1);
                  let KV1 := (select 'Aufträge' where bezug = user()).Nr;
                  let a00 := item(KV1, 0);
                  let a11 := item(KV1, 1);
                  let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
                  let dia := dialog("Auftrag für Buchung wählen", tex, [a0, a1, "Abbrechen"]);
                  let erg := if dia = a0 then
                          first(select 'Aufträge' where Nr = number(a00))
                      else
                          if dia = a1 then
                              first(select 'Aufträge' where Nr = number(a11))
                          end
                      end;
                  Text := number(erg)
              else
                  if an = 1 then
                      let KV := (select 'Aufträge' where bezug = user()).Name;
                      let a0 := item(KV, 0);
                      let KV1 := (select 'Aufträge' where bezug = user()).Nr;
                      let a00 := item(KV1, 0);
                      let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
                      let dia := dialog("Auftrag für Buchung wählen", tex, [a0, "Abbrechen"]);
                      let erg := if dia = a0 then
                              first(select 'Aufträge' where Nr = number(a00))
                          end;
                      Text := number(erg)
                  end
              end
          end
      end
      
    • Torsten_Stang.1
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hm, was mir auffällt: Du bietest mit 

    let MCH := for i in 'TABELLE1'.'UNTERTABELLE1' do
            i.'TEXTFELD'
        end;
    let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", MCH);

    Datensätze aus 'UNTERTABELLE1' an, willst aber damit auf einen Eintrag in 'TABELLE1'  verweisen (und das, in dem Du den Inhalt von 'TEXTFELD' mit dem Inhalt von 'Nr' vergleichst):

    let PG := first((select 'TABELLE1')[Nr = myAuswahl]).Nr;

    Ich hätte hier eher etwas wie

    let PG := first(select 'UNTERTABELLE1' where 'TEXTFELD'=myAuswahl).Nr

    erwartet.

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Torsten Stang bei mir geht das nicht. Da ja der bei mir gezeigte name mehrfach vorkommen kann. Der kartenreiter welcher die DAF enthält wird geöffnet, dabei wird für eine zuordnung über "Feld bezug:= user() " ein wert geschaffen den man zuordnen kann. (Hab bis zu 3 Instanzen offen) die enthaltenen DAF bzw. die Tabellen dahinter sind nicht verknüpft zu der Tabelle Aufträge. So mußte ich mir ein Werkzeug schaffen, trotz alle dem dem User eine Auswahl anzubieten um auch wirklich den richtigen Datensatz für die Buchung aus zu wählen, was natürlich über die Namen geschehen muss. Nach der ersten Auswahl ist es für folge Buchungen in dem Datensatz einfach, da über (select 'Aufträge' where Nr != number(a00)).(bezug := null) alle eventuell nicht geschlossenen Tabs der Bezug entzogen wird.

      Funktionieren tut das super, auch wenn ich hier noch die userkennung noch nicht eingebaut habe. Was heißt ich entziehen ja allen die Grundlage, nicht nur mir.

      Aber es wäre geil wenn es auch einfacher gehen würde

    • Stefan_Mann
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Danke für die Antworten, michi : ist mir zu komplex :-) Torsten Stang : funzt nicht :-(

    Habs aber gelöst mit:

    let GR := 'VERKNÜPFTER DATENSATZ TABELLE1';
    let MCH := for i in 'TABELLE1'.'UNTERTABELLE1' do
            i.Nr
        end;
    let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", MCH.'TEXTFELD);
    let PG := first((select 'UNTERTABELLE1')['VERKÜPFUNG ZU TABELLE1' = GR][TEXTFELD = myAuswahl]);
    

    Jetzt habe ich eine neue Denkaufgabe:

    Ich habe in einer 'UNTERTABELLE' mehrere Datensätze aber immer kleiner  <5.

    Jetzt möchte ich über das Dialogfeld einen zum Öffnen auswählen. Anbieten möchte ich den Text eine DAF im Dialog:

    let my := this;
    let DIA := for i in 'UNTERTABELLE1' do
            i.text('Auswahl Medium') end;
    let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", DIA);
    let PG := first((select 'UNTERTABELLE1')[ICH = my]['Auswahl Medium' = number(myAuswahl)]);
    popupRecord(PG)
    

    Es wird zwar brav der Dialog abgefragt, aber passieren tut nix. Habt Ihr dazu eine Idee? VG

      • Leonid_Semik.2
      • vor 1 Jahr
      • Gemeldet - anzeigen
      let my := this;
      let DIA := 'UNTERTABELLE1'.(text('Auswahl Medium'));
      let myAuswahl := dialog("Bitte wählen!", "PROGRAMMM", array(DIA,["Abbrechen"]));
      if myAuswahl!="Abbrechen" then
      let PG := first('UNTERTABELLE1')[text('Auswahl Medium') = myAuswahl]);
      popupRecord(PG)
      end
      

      Leo

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Leonid Semik hab dein Skript gleich mal missbraucht. Klappt auch super und ist schön kurz. Ich benötige aber dringend die Kombination "Name + KV-Nr" zum zuordnen. 

      Kann man die Anzeige der KV-Nr im Dialog auf die letzten 3 Zeichen begrenzen? Jedoch für die suche als ganzes nehmen? (Ist einfach eine Platz frage im Dialog)

      let DIA := (select 'Aufträge' where bezug = user()).(Name + "/" + 'KV-Nr.');
      let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
      let myAuswahl := dialog("Kunde auswählen", tex, array(DIA, ["Abbrechen"]));
      if myAuswahl != "Abbrechen" then
          let PG := first((select 'Aufträge')[Name + "/" + 'KV-Nr.' = myAuswahl]);
          'Ausgabe test' := number(PG) + " / " + PG.Name;
          (select 'Aufträge' where Nr != PG and userFullName() = Nameuser).(bezug := null)
      end
      

      • Leonid_Semik.2
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi du kannst den Text mit substr() reduzieren, z.B. so:
       

      (Name + "/" + substr(text('KV-Nr.'),0,3))
      
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Leonid Semik brauch aber den kompletten Text nach der auswahl im dialog , für die Weiterverarbeitung 

      • Leonid_Semik.2
      • vor 1 Jahr
      • Gemeldet - anzeigen
      let DIA := (select 'Aufträge' where bezug = user()).(Name + "/" + substr('KV-Nr.',0,3));
      let tex := "Warenbuchung" + "
      " + "
      " + Artikelbezeichnung + "
      " + "
      " + "Menge:  " + 'Menge für Buchung';
      let myAuswahl := dialog("Kunde auswählen", tex, array(DIA, ["Abbrechen"]));
      if myAuswahl != "Abbrechen" then
          let PG := first((select 'Aufträge')[(Name + "/" + substr('KV-Nr.',0,3)) = myAuswahl]);
          'Ausgabe test' := number(PG) + " / " + PG.Name;
          (select 'Aufträge' where Nr != PG and userFullName() = Nameuser).(bezug := null)
      end (empty)

      Brauchst du nicht, kannst auch abkürzen. 

      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Leonid Semik hab noch die längenbestimmung mit rein genommen, da die Texte unterschiedlich lang sind, sollte jetzt passen.

      let DIA := (select 'Aufträge' where bezug = user()).(Name + "/" + substr('KV-Nr.', length('KV-Nr.') - 4, 4));
      

Content aside

  • 1 „Gefällt mir“ Klicks
  • vor 1 JahrZuletzt aktiv
  • 14Antworten
  • 105Ansichten
  • 6 Folge bereits