0

Per Button Datensätze für Druck in eine temporäre Tabelle

Wahrscheinlich ganz einfach, aber....
Ich habe eine Tabelle AUFTRAEGE mit einer Untertabelle POSITIONEN. Nun möchte ich - einzelne Datensätze mit fest definierten Parametern wie z.B. Feld 1 ist leer oder Feld 2 hat den Wert "Hallo" - aus POSITIONEN per Button in eine neue Tabelle kopieren. Dies um dann diese Tabelle über ein PDF Formular auszudrucken. Nach Abschluß des Drucks möchte ich ebenfall per Button die Datensätze aus der "Hilfstabelle" (nicht die Originale) löschen.
Ich bin damit ein wenig überfordert und würde mich über Hilfe sehr freuen.

12 Antworten

null
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    um nicht die einzelnen Datenfelder zu kopieren, würde ich in die Hilfstabelle die Verknüpfung zu der Tabelle Positionen hinzufügen. Dann die Formel für den Knopf:
    for ii in select Positionen where 'Feld 1'=null or 'Feld 2'="Hallo" do
    let NT:=create Hilfstabelle;
    NT.Positionen:=ii
    end;
    printTable("Hilfstabelle",“Ansicht“);
    delete select Hilfstabelle


    Den Ansicht der Hilfstabelle für PDF Druck muss du natürlich zuerst konfigurieren.
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Guten Morgen Leo,
    was würde ich ohne Deine Unterstützung bloß machen?
    Funktioniert tadellos, nur habe ich einen Gedankenfehler gemacht.
    Die erzeugte Hilfstabelle kann ich nicht FORMATIERT über die PDF Funktion ausdrucken. Mit dem Print Befehl bekomme ich lediglich eine Tabelleansicht, die ich nicht formatieren kann.
    Also bräuchte ich eine Hilfstabelle mit nur einem Datensatz und darin noch eine Tabelle mit den ausgewählten Positionen. Das läßt sich dann über PDF frei gestalten.
    Vielleicht noch einen kleinen Denkanstoß Deinerseits?
    PS: In Deinem Codebeispiel waren die "" mal "richtig" und mal "falsch"...
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    was genau verstehst du unter "formatiert"? Die Tabellenspalten kannst du in der Ansichten beliebig formatieren. Oder meinst du das Dokument rund um die Tabelle?
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Genau, ich möchte je nach Anwendungsfall einen differenzierten Briefbogen kreieren. In diesen sollen dann die ausgewählen Positionen formatiert eingefügt werden = wie eine Untertabelle. Es geht also nicht um die Tabelleansicht sondern um das PDF Ergebnis.
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Ich bräuchte also ein create Drucktabelle mit nur einem Datensatz. Diesem Datensatz müßte dann mit select.... Positionen die ausgewählten Positionen zugeordnet werden, also als Untertabelle.
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Ich würde dann eine zusätzliche Tabelle namens Berichtstabelle anlegen.
    Die Hilfstabelle erhält dann zusätzlich noch die Verknüpfung zu der Berichtstabelle (n:m Beziehung). In der Berichtstabelle würde ich dann noch Die Suchfeleder Feld 1 und Feld 2 anlegen. Die Abfrage würde ich dann auch aus der Berichtstabelle starten. Die Formel:
    ---
    let myB:=Nr;
    let F1:='Feld 1';
    let F2:='Feld 2';
    for ii in select Positionen where 'Feld 1'=F1 or 'Feld 2'=F2 do
    let NT:=create Hilfstabelle;
    NT.Positionen:=ii;
    NT.Berichtstabelle:=myB
    end;
    printRecord(this, "layoutName");
    delete select Hilfstabelle

    ---
    Du kannst die Berichtstabelle verstecken und immer nur den ersten Datensatz von anderen Formularen mit der Schaltfläche aufrufen. Die Formel dazu wäre:
    ---
    popupRecord ( record(Berichtstabelle,1))
    ---

    Grüße
    Leo
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Leo, hat etwas gedauert und ich hab' mich mächtig angestrengt :)
    Meine Lösung ist jetzt:

    create Drucktabelle;
    let myB := Nr;
    for ii in select Positionen where 'Feld 1' = "Hallo" do
    let NT := (create Druckpositionen);
    NT.(Drucktabelle := myB);
    NT.(Positionen := ii)
    end

    Nochmals herzlichen Dank.
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Hallo Leo,
    läuft jetzt alles wie gewünscht.

    Wenn ich allerdings im nächsten Schritt Deinen Vorschlag mit

    popupRecord ( record(Berichtstabelle,1))

    einsetze, fällt Ninox beim Aufruf der Funktion in eine Endloschleife, d.h. ich sehe einen einen drehenden Kringel und nichts passiert mehr.

    Hast Du dafür eine Erklärung?
    • Leonid_Semik
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Prüf mal ob einen Record mit ID=1 überhaupt gibt.
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Ja, den gibt es
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Entschuldigung, nein doch nicht. Bei jedem Aufruf wird ja ein neuer Datensatz mit einer neuen ID erzeugt. Genau das ist das Problem. Aufgerufen wird id1, die es aber nach dem zweiten Durchlauf nicht mehr gibt, da ich die DAtensätze nach dem Druck ja lösche. Also muss ich das löschen lassen, was aber zu immer neuen (leeren Datensätzen) führt. Oder ich ich muss einen Datensatz mauell anlegen, diesen nicht mehr löschen und die dann aktuelle id aufrufen.
    • Holzi
    • vor 6 Jahren
    • Gemeldet - anzeigen
    Fester Datensatz, dessen id aufrufen. Problem gelöst. Jetzt funktioniert alles.
    Vielen Dank für Deine Hilfe.

Content aside

  • vor 6 JahrenZuletzt aktiv
  • 12Antworten
  • 6254Ansichten