0

Nur bestimmte Datensätze drucken

Guten Tag miteinander,

ich bin neu hier im Forum und überhaupt bei Ninox. Es braucht einige Umgewöhnung von Access zu Ninox, aber so langsam blicke ich durch (mit Betonung auf langsam). Darum stehe ich vor einem bestimmt simplen Problem für KennerInnen von Ninox:

Ich habe eine Tabelle "Themen" mit einer Untertabelle "Termine". In "Termine" gibt es ein Ja/Nein-Feld "Bezahlt?". Wenn jemand den Termin bezahlt hat, klicke ich dieses an = true. Aus einer Beispieldatenbank habe ich den Button ausgewählt, der automatisch die Rechnung generiert und als Bild speichert. Jetzt möchte ich es so haben, dass auf der Rechnung nur die Datensätze aus "Termine" drauf sind, die "Bezahlt?" = false haben. Wie kriege ich das hin?

Hier der Code von meinem Druck-Button:

let myFileName := "Rechnung_" + ThemenNr + "_vom_" + format(if 'Datum Rechnung' then 'Datum Rechnung' else today() end, "YYYY-MM-DD") + ".pdf";
importFile(this, printAndSaveRecord(this, "Rechnung"), myFileName);
Rechnung := myFileName

Kann mir jemand weiterhelfen? Der Button befindet sich auf der Formularansicht der Tabelle "Thema", der eben die Untertabelle "Termine" enthält.

Vielen Dank für eure Hilfe!

LG tanja

26 Antworten

null
    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Berechnungsfeld in der Datenbank Themen einfügen und als Funktion dahinterlegen:

    let a:=select Themen;

    Let s:="";

    for i in a do

    if i.Bezahlt=1 then

    s:=s+i.Rechnungsdaten +"

    ";

    end

    end;

     

    So ungefähr jedenfalls als 1. Ansatz.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Muss wohl

    "if i.'Bezahlt ?' then"

    heissen (ohne 1. und letztes Anführungszeichen natürlich)

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    oder, falls nicht bezahlt:

    if i.Bezahlt?=false then

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Vielen Dank für die Antwort. Ich versuche das noch zu verstehen: Worauf bezieht sich dein Ausdruck Rechnungsdaten? Wenn ich dort Rechnung einsetze wie mein Bild-Feld, geschieht jedoch nichts. Das Berechnungsfeld muss ich doch irgendwie noch in meinen Code einbauen?

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Das Berechnungsfeld muss man als neues Feld einfügen in die Tabelle "Themen" bzw. in einen Record aus der Tabelle "Themen", wie ein Texfeld, dann eine Funktion hinterlegen.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Rechnungsdaten ist nur ein Platzhalter für z.B ein Textfeld aus Deiner Tabelle "Themen". Ich weiss nicht, aus welchen Spalten die Tabelle Themen aufgebaut ist.

    Hat sie z.B. ein Textfeld "Beschreibung", dann musst Du i.Beschreibung schreiben, den Text kannst Du Dir beliebig lang erzeugen, also z.B.

    text(i.Feldname1)+text(i.Feldname2) usw.

    Dabei kann Feld1 z B  auch ein Datumsfeld sein.

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hm, ich stehe echt auf dem Schlauch. Vielleicht kannst du mir den Code mal erklären, Zeile für Zeile? Es muss dann doch irgend ein Wert im Berechnungsfeld stehen, oder? Wie hängt dieser Wert mit dem Druck der Rechnung zusammen? Es tut mir leid, kann dich dir noch so ohne weiteres folgen. Aber vielen Dank für deine Mühe!

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Automatisch werden alle Felder eines Records einer Tabelle gedruckt, also auch das Berechnungsfeld.

     

    Das Berechnungsfeld enthält nichts, es kann nur etwas aus einer Berechnung darstellen, meistens das Resultat einer Berechnung, einfaches Skript wâre 5*4, das Bfeld würde 20 anzeigen.

    Man kann aber auch in einem Bfeld HTML-Text, oder normalen Text ausgeben.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    let a:=select Themen;

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Damit wähle ich alle Records der Tabelle Themen aus und packe sie in ein Array. Let ist ein Schlüsselwort, was eine Zuweisung einleitet.

    Abschliessend enthält a ein Array mit allen Records.

    Select ist ein SQL-Befehl.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Dann laufe ich mit einer For-Schleife durch das gesamte Array.

    Der Schleifenzähler i enthält dann immer den aktuellen Record, ist also kein Integer.

    Mit i.Feldnamen kann man jetzt auf jedes Feld des Records zugreifen.

    Also frage ich das Ja/Nein-Feld ab,

    Mit i.Bezahlt?, weil der Feldname "Bezahlt?" heisst.

    Wenn Bezahlt? =false ist, dann steht der Ja/Nein-Schalter auf Nein.

    Habe ich dann so einen Record gefunden, bei dem der Ja/Nein-Schalter auf Nein steht, dann berechne ich etwas, in diesem Fall erstelle ich einen Ausgabetext, der später auf dem Ausdruck erscheint.

     

    Ich gebe zu, Beschreibungen sind manchmal mühsam und unverständlich.

     

    Vielleicht war es aber doch etwas verständlich. Sonst müsste man eine Beispiel-Datenbank schreiben und hochladen zum Runterladen.

    Wenig Zeit dafür.

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Danke für die Erklärung. Es leuchtet mir alles irgendwie ein, nur verstehe ich immer noch nicht, wie das mit dem Druck meiner Rechnung zusammenhängt. Ich hänge mal einen Screenshot an, vielleicht wird es dann klarer, was ich mir vorstelle:

     

    Ein Kunde kann verschiedenen Termine wahrnehmen. Zum Teil bezahlt er diese bar, der Rest geht auf Rechnung. Ich möchte auf der Rechnung (die ich als pdf erstelle) dann nur die Datensätze drauf haben, die noch nicht bezahlt sind. In meinem Verständnis muss doch der Code, der den Datensatz im Druckmodus darstellt, angepasst werden, da sich dieser auf die Untertabelle "Termine" bezieht? Danke nochmals für die Hilfe.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo TaBi,

    Du kannst im Layout in der Tabelle Dienstleistung folgende Formel bei 'Art Dienstleistung' schreiben:

    ---

    if 'Bezahlt?' then "a" else 'Art Dienstleistung'

    ---

    und bei Filter für  diese Spalte

    ---

       >"a" 

    ---

    So werden dir dynamisch alle nicht bezahlte Datensätze gefiltert.

     

    Leo

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Filter nach Klick auf Kopf der Spalte "Bezahlt?" und in die Filter-Zeile klicken und Nein auswählen.

    Danach drucken und es werden nur die Zeilen angezeigt, die nicht bezahlt sind.

    Schnell und ohne Programmierung.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich meinte, man muss auf auf den Kopf der Spalte "Bezahlt?" klicken, also direkt auf den Text "Bezahlt?". Dann erscheint ein Dialog zum Spalten ein/ausblenden.

    Unter anderem kann man auch einen Filter setzen.

    Man klickt auf die Zeile für das Filter, es erscheint eine Ja/Nein-Auswahl und man wählt Nein aus.

    Wenn man es ohne das Filter immer per Hand zu setzen machen will, muss man so oder anders programmieren, wie Leo es vorgeschlagen hat.

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo Leo

    Danke für den Tipp. Meinst du das so?

    Screenshot

    Dann klappt es bei mir alles zu, ich hatte 2 Zeilen mit nein. Und wenn ich auf den "Rechnung versenden" Button klicke, kommen im pdf auch alle 4 Datensätze. Irgendwo hakt es noch...

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Wenn ich es so mache, zeigt es mir zwar nur die nein-Zeilen an:

    if 'Bezahlt?‘ = true then "a" else 'Art Dienstleistung'

    Bei Filter: ="a"

    Aber wenn ich auf "Drucken" klicke, kommen immer noch alle Datensätze.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Da wird Leo sicher helfen :-), ich bin raus.

    Scheinen sich hier alle auf Leo zu verlassen.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen
    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich wollte dich nicht vergraulen, BugTrapper! Bin neu in allem und kenne mich überhaupt nicht aus, wer wo was wie macht.

    Ich habe immer noch keine Lösung, wie ich nur die Zeilen mit "nein" in die Druckansicht bekomme, das ist mein grosses Problem. Anzeigen alleine genügt eben nicht. Vielleicht geht das ja auch gar nicht, dann muss sich hier auch niemand mehr abmühen.

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo TaBi,

    die Formel solltest du IM PRINT LAYOUT anwenden und nicht im Formular. Und die Formel aus dem vom BugTrapper geposteten Link ist sogar viel einfacher:

    ---

    if  'Bezahlt?' = false then 'Art Dienstleistung' end

    ---

    und Filter auf

    ---

    !=null

    ---

     

    Leo

    • TaBi
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Jetzt ist der Groschen gefallen und es funktioniert wie gewünscht!! Danke, danke für die grosse Geduld!

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich hatte mich schon gewundert, was "Layoutansicht" sein soll, es ist das Drucklayout. 

    Nur eine Sache am Rande, wenn man eine gefilterte Ansicht hat, dann gibt es im Drucklayout glaube ich keine Möglichkeit, eine Formel einzugeben.

    • BugTrapper
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Ich will kein Monk mehr sein, wieviel muss ich denn noch posten ?

    • Leonid_Semik
    • vor 5 Jahren
    • Gemeldet - anzeigen

    Hallo BugTrapper,

    stimmt, die Ansichten lassen sich im Layout gar nicht darstelen. Und die manuellen Filter bei Untertabellen müssen im Layout nachgebaut werden. Das geht aber ganz gut. Einfach auf "Anzuzeigende Spalten festlegen" rechts klicken. 

    Leo

Content aside

  • vor 5 JahrenZuletzt aktiv
  • 26Antworten
  • 5330Ansichten