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
-
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.
-
Muss wohl
"if i.'Bezahlt ?' then"
heissen (ohne 1. und letztes Anführungszeichen natürlich)
-
oder, falls nicht bezahlt:
if i.Bezahlt?=false then
-
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?
-
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.
-
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.
-
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!
-
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.
-
let a:=select Themen;
-
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.
-
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.
-
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.
-
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
-
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.
-
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.
-
Hallo Leo
Danke für den Tipp. Meinst du das so?
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...
-
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.
-
Da wird Leo sicher helfen :-), ich bin raus.
Scheinen sich hier alle auf Leo zu verlassen.
-
Übrigens steht die Antwort im Forum, man muss nur suchen:
-
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.
-
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
-
Jetzt ist der Groschen gefallen und es funktioniert wie gewünscht!! Danke, danke für die grosse Geduld!
-
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.
-
Ich will kein Monk mehr sein, wieviel muss ich denn noch posten ?
-
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