0

Skript für alle Kunden als Schleife ?

Hallo zusammen,

ich möchte gern die offenen Rechnungen über das Dashboard anmahnen. (für alle Kunden in einem Durchgang)

Bisher erstelle ich die Mahnung aus dem entsprechenden Vertragspartner heraus. Tabelle Kunden. / Bildfeld 

 

Um das ganze aber einfacher zu gestalten, wollte ich im Dashboard (nicht verknüpft mit Kunden oder Rechnungsstellung) das Script über einen Button für alle Vertragspartner auslösen und gleichzeitig die dabei generierten pdf mit printRecord aufrufen. Ist das möglich?

Bisher für den einzelnen Kunden:

der untere teil ist nur für die Status Ausgabe.

'PDF Ausgabe 1.Mahnung' := null;
let myFileName := "Zahlungserinnerung" + " " + Firma + " " + 'Nachname oder Zusatz für Empfänger in PDF' + " " + "vom" + " " + format(today(), "DD-MM-YYYY") + ".pdf";
importFile(this, printAndSaveRecord(this, "1.Mahnung"), myFileName);
'PDF Ausgabe 1.Mahnung' := myFileName;
printRecord(this, "1.Mahnung");
let me := this;
for i in select Rechnungsstellung where Rechnungsstatus = 4 and Kunde.text('Kunden-Nr.') = me.text('Kunden-Nr.') do
    let aa := i.Nr;
    let bb := (select Rechnungsstellung);
    bb[Nr = aa].('1.Mahnung erzeugt' := true)
end;
do as server
    let myR := (select Rechnungsstellung);
    myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = false].(Rechnungsstatus := 9);
    myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = true].(Rechnungsstatus := 11);
    myR['1.Mahnung erzeugt' = true].(Rechnungsstatus := 10);
    myR['2.Mahnung erzeugt' = true].(Rechnungsstatus := 12);
    myR['Offener Rechnungsbetrag' < 1].(Rechnungsstatus := 5);
    myR['Offener Rechnungsbetrag' > 1 and 'Offener Rechnungsbetrag' < 'Brutto-Gesamt:'].(Rechnungsstatus := 8);
    myR[Rechnungstyp > 1 and 'erwarteter Zahlungseingang' > today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:'].(Rechnungsstatus := 2);
    myR['Versandart wählen' = 7].(Rechnungsstatus := 6);
    myR[Rechnungstyp = 4 or 'in Gutschrift wandeln' = true].(Rechnungsstatus := 7);
    myR[Rechnungstyp = 2 and 'erwarteter Zahlungseingang' < today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' and 'in Gutschrift wandeln' = false and '1.Mahnung erzeugt' = false and '2.Mahnung erzeugt' = false].(Rechnungsstatus := 4)
end

10 Antworten

null
    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Woran erkennst du denn, daß eine 1.Mahnung erzeugt werden muss?
    Laut gezeigtem Script, weißt du irgendwoher, das du den Button zum Erzeugen der 1.Mahnung drücken musst. Diese Erkenntnis musst du im Dashboard in ein Script umsetzen.
    Da ich mich mit dem Ninox-Druckeditor nicht auskenne, aber mitbekommen habe, dass die Drucktemplates an den jeweiligen Tabellen hängen, musst du wohl dem Dashboard auch ein entsprechendes Druck-Template zuordnen und dieses in einer Schleife mit den zugehörigen Daten füttern. (Das sind meine laienhaften Überlegungen dazu)

    Mit Carbone wüsste ich, wie man einen Massendruck aus einer Schleife heraus initiieren könnte und die Druckergebnisse den Records zuordnet. 
     

    Hast du mal darüber nachgedacht, eine zentrale Fileverwaltung (pdf, Bilder, Dateien) statt dem wilden speichern der Dateien bei jedem Record vorzuziehen?

    Damit hättest du alle Files zentral an einem Ort und über Funktionsfelder kannst du mittels Verknüpfungen jeden Record auch damit verbinden. 

    Ich füge mal eine Bsp-DB, die dieses Prinzip veranschaulicht, bei.
    Dort kann man auch ohne großen Aufwand, wenn es angebracht ist, die Dateien auslagern und über ShareLinks Platzsparend wieder in Ninox einbinden.

    Ich habe sowas schon mit Baserow gebaut, es wird aber auch mit anderen Anbietern wie DropBox, FileCloud etc. funktionieren, sofern man über einen von dort erstellten ShareLink ohne weiteres auf das dort abgelegte Bild zugreifen kann.
     

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

      UweG ach Uwe, wenn ich dürfte wie ich wöllte würde ich dich schon längst kontaktiert haben, um dich zu bitten mir zu helfen. Ich will die Firma ins 23. Jahrhundert bringen. Was für mich persönlich digitalisierung bedeutet. Doch für alles was 3 Geld 50 bedeutet muss ich Rechenschaft ablegen. Ich würde zu gern die App für unsere Monteure weiter voran bringen, das bereitstellen der Daten, das handling ist alles fertig, doch der Rückweg kostet einfach Geld. Hier müßte mit n8n die Dateigröße der Bilder automatisch gesenkt werden. Fa ja die heutigen Handys ect. Die Auflösung nicht mehr nach unten bringen kannst. Heißt ein Bild,  selbst bei großer Kompression ist immer noch 2 MB groß, geht weder bei 10 Bildern im mailversandt noch für den Platzbedarf. Deine Lösungen sind sehr inspirierend. 

      Zurück zu den Rechnungen. Beim Öffnen der DB wird der Status ermittelt. Dauert zwar immer ein bißchen, doch ist automatisch so. Auch Leo wußte da keine Möglichkeit das ganze zu beschleunigen. Der Status wird vom Skript vorgegeben und ist nicht änderbar. So hab ich immer den Überblick wie es um einzelne Rechnungen bestellt ist.  War im übrigen ein großer Kampf das hin zu bekommen, da man ja alle Fälle abdecken muss.

      Daraus ergibt sich der Status zb.4 Was glaub überfällig heißt. 

      Hier wollte ich nun im dashboard ein butten haben welcher mir alle Mahnungen raus schickt zu jedem Kunden, wobei die offenen Rechnungen natürlich pro Kunden aufgelistet sind. Also nur 1 pdf pro Kunde. Im Anschluss kommt der untere Teil zum Tragen welcher das Skript für den Status erneuert. 

      Das druck template ist in der Tabelle Kunden hierfür.

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

      Kann man das eventuell über einen Button in der Tabelle Kunden mache ? Da ist das template ja sowieso. Halt nur für alle auf einmal?

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi Das sollte auch gehen. Aber dann machst Du das immer bei irgendeinem Kunden und somit würdest Du die Statusabfrage aber auch in diesen Bereich verschieben.

      Ich glaube ich habe auch mal vor einiger Zeit damit hantiert und versucht Drucklayouts in andere Tabellen zu bekommen. Das hat auch mit Copy & Paste funktioniert. Ich glaube ich habe alles mit der Maus markiert (gedrückt halten und ziehen), STRG + C und in der anderen Tabelle, z.B. im Dashboard ein neues leeres Layout erstellt und STRG + V gedrückt. Nur Logos / statische Bilder und die Verknüpfungen zu den Feldern muss man dann anpassen. Aber das Layout an sich ist unverändert. Wäre vielleicht eine Idee.

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

      Patrick W. Wie gesagt könnte ich das auch in der tabelle Kunden einsetzen. Hier ist die direkte Verknüpfung gegeben. Jedoch müste es für alle kunden aufzurufen sein. Für den einzelkunden geht es ja.

      Es soll nur weniger Arbeit werden

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi ich habe gerade mal ganz kurz was bei mir getestet, was ich nicht auf dem Schirm hatte.  Bei importFile und printAndSaveRecord wird anfangs eine ID erwartet, welche man gewöhnlich einfach mit "this" deklariert hat. Aber die ID lässt sich ja ändern...

      Versuch mal folgendes Prinzip:

      for i in select Rechnungsstellung where Rechnungsstatus = 4 do
          let aa := i.Nr;
          let myFileName := "Zahlungserinnerung" + " " + i.Firma + " " + i.'Nachname oder Zusatz für Empfänger in PDF' + " " + "vom" + " " + format(today(), "DD-MM-YYYY") + ".pdf";
          ket Datei := printAndSaveRecord(aa, "1.Mahnung");
          i.'PDF Ausgabe 1.Mahnung' := importFile(aa, Datei, myFileName);
          let bb := (select Rechnungsstellung);
          bb[Nr = aa].('1.Mahnung erzeugt' := true);
      end;
      • Michi.1
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Patrick W. hatte es von Kunden aus bis jetzt so gelöst 

      (select Kunden).(Testbild := null);
      for i in select Rechnungsstellung where Rechnungsstatus = 4 do
          (select Kunden where text('Kunden-Nr.') = i.text(Kunde.'Kunden-Nr.')).(
              let myFileName := "Offene Rechnungen" + " " + Firma + " " + 'Nachname oder Zusatz für Empfänger in PDF' + " " + "vom" + " " + format(today(), "DD-MM-YYYY") + ".pdf";
              importFile(this, printAndSaveRecord(this, "Überblick"), myFileName);
              Testbild := myFileName
          )
      end;
      (select Kunden where Testbild).printRecord(this, "Überblick")
      
      

      die pdf Erstellung klappt so für alle. printRecord will so nicht.

      Aber Uwe hat recht, ich brauch eine Übersicht der Kunden welche offene Beträge haben. Das ist gezielter. Dafür würde ich im Dashboard eine Ansicht erstellen, welche mir die Kunden auflistet, so das man direkt zu den Record springen kann. 

      Ich bekomm das nur nicht so recht hin. skript für Ansicht im Dashboard liefert mir eine Auflistung der Kunden, möchte aber eigentlich den Kunden nur einmal drinnen haben.

      for i in select Rechnungsstellung where Rechnungsstatus = 4 do
          (select Kunden)[text('Kunden-Nr.') = i.text(Kunde.'Kunden-Nr.')]
      end
      
      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Michi was soll die for Schleife denn bewirken?

      Ich kenne jetzt dein Datenmodell nicht. Aber so in etwa würde ich es machen:

      Tabelle Kunden + verknüpfte Tabelle Rechnungen

      In der Tabelle Rechnungen gibt es vermutlich ein Datumsfeld für "Zahlungsziel" und ein Feld "Zahlung eingegangen". Dann gibt es noch jeweils ein Bildfeld für 1. Mahnung und 2. Mahnung.

      Mit einem Funktionsfeld (Name: fMahnung1) frage ich folgendes ab:

      if Zahlungsziel != null and Zahlungsziel < today() and 'Zahlung eingegangen' = null and '1.Mahnung' = null then
          true
      else
          false
      end
      
      

      Wenn gewünscht, dasselbe nochmal für die 2. Mahnung mit dem Funktionsfeld fMahnung2.

      Tabelle Dashboard:

      Ansicht:

      (select Rechnungen)[fMahnung1 or fMahnung2]

      Das sollte dir im Dashboard dann entsprechend die offenen Rechnungen anzeigen, die über dem Zahlungsziel sind und wo noch keine Mahnung erstellt wurde.

    • Developer by Smartplanung
    • smartplanung
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Hallo Michi,

    ich kann völlig falsch liegen. Aber meines Wissens nach kann der Druckeditor nur auf direkt verknüpfte Tabellen zugreifen - nicht auf selbst erstellte Ansichten, was bei einem Dashboard eher der Fall sein sollte. Demnach müsstest Du für jedes Kundenspezifische Feld wie Name, Adresse, Rechnungsinformationen als Feld darstellen, wo der Druckeditor drauf zugreifen kann. Es sollte auch gehen, wenn das Feld nicht sichtbar ist. Also pro Schleife in die entsprechenden Felder schreiben und dann in eine separate Tabelle die PDF ablegen.

    • Michi.1
    • vor 1 Jahr
    • Gemeldet - anzeigen
    Patrick W. said:
    Michi was soll die for Schleife denn bewirken?

     Blödsinn 😂

    hab jetzt eine Ansicht im Dashboard die mir alles anschaulich darstellt über: (select Kunden)['gesamt offen' > 1]

     

    'gesamt offen' hab ich mir über:

     let aa := this;
    sum((select Rechnungsstellung)[text(Kunde.'Kunden-Nr.') = aa.text('Kunden-Nr.') and Rechnungsstatus = 4].'Brutto-Gesamt:')

    in die Tabelle Kunden geholt.

     

    In der Tabelle Rechnungsstellung wird alles über den Rechnungsstatus geregelt. Entweder wird diese beim öffnen der DB aktualisiert oder bei relevanten Änderungen. Oder einfach manuell über einen Button. Das gibt immer den richtigen Status welcher nur über eingaben veränderbar ist.

    do as server
        let myR := (select Rechnungsstellung);
        myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = false].(Rechnungsstatus := 9);
        myR[Rechnungstyp = 1 and 'in Rechnung wandeln' = true].(Rechnungsstatus := 11);
        myR['1.Mahnung erzeugt' = true].(Rechnungsstatus := 10);
        myR['2.Mahnung erzeugt' = true].(Rechnungsstatus := 12);
        myR['Offener Rechnungsbetrag' < 1].(Rechnungsstatus := 5);
        myR['Offener Rechnungsbetrag' > 1 and 'Offener Rechnungsbetrag' < 'Brutto-Gesamt:'].(Rechnungsstatus := 8);
        myR[Rechnungstyp > 1 and 'erwarteter Zahlungseingang' > today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:'].(Rechnungsstatus := 2);
        myR['Versandart wählen' = 7].(Rechnungsstatus := 6);
        myR[Rechnungstyp = 4 or 'in Gutschrift wandeln' = true].(Rechnungsstatus := 7);
        myR[Rechnungstyp = 2 and 'erwarteter Zahlungseingang' < today() and 'Offener Rechnungsbetrag' = 'Brutto-Gesamt:' and 'in Gutschrift wandeln' = false and '1.Mahnung erzeugt' = false and '2.Mahnung erzeugt' = false].(Rechnungsstatus := 4)
    end

Content aside

  • Status Answered
  • vor 1 JahrZuletzt aktiv
  • 10Antworten
  • 108Ansichten
  • 4 Folge bereits