DunningRun (LC.WpfInterfaces, Automatischer Mahnlauf)
Dient zur automatischen Ausführung eines Mahnlaufs.
Es kann zu fest bestimmten Tagen (am 10./20./30. oder jeden Montag, ...) ein Mahnlauf gestartet werden. Die Mahnungen werden in einem vordefinierten Ordner abgelegt oder auf Wunsch auch an die vorgesehene EMail-Adresse gesendet.
Zusatzmodul erforderlich
Es wird das Zusatzmodul "Offene Posten Verwaltung" benötigt!
Inhalt
Anforderungen
- LC.WpfInterfaces ab Version 1.2020.0528.0
- TaskCenter ab Version 4.70.0.0
- Zusatzmodul "Offene Posten Verwaltung" - wird über TaskCenter-Lizenzschlüssel bereitgestellt
Schnellstart
- LC.WpfInterfaces installieren (wenn nicht vorhanden) bzw. aktualisieren
- Eigenes Layout für die Druckvorlage DunningTextSheet1.rpx erstellen (zB. XDunningTextSheet1.rpx) und im company\Reports-Ordner bereitstellen
- Einmalig eine Mahnung manuell, mit die gewünschten Druckeinstellungen, drucken, damit diese für den Benutzer in der User-Ini gespeichert werden
- Prüfen Sie, ob Sie bereits Mahntexte festgelegt haben - ohne Mahntexte kann die Mahnstufe nicht berechnet werden
- XML-Konfigurationsdatei erstellen bzw. Vorlage kopieren und anpassen
- Batch-Datei erstellen, die diese XML-Konfigurationsdatei als Parameter ausführt
- Windows-Aufgabenplanung einrichten (zB. alle 7 Tage - oder 1x im Monat - je nach Bedarf)
Einrichtung
Konfigurationsdatei
Aufbau
<?xml version="1.0" encoding="utf-8"?>
<DunningRun>
<DB>POLLEX</DB>
<USER>SYSADM</USER>
<PASSWORD>SYSADM</PASSWORD>
<LogLevel>Full</LogLevel>
<DunningLetterPrintLayout>X</DunningLetterPrintLayout>
<TargetPdfFolder>c:\POLLEX\Mahnungen</TargetPdfFolder>
<TargetPdfFilenamePattern>MAHNUNG_{CustomerNumber}.pdf</TargetPdfFilenamePattern>
<SendDunningMail>True</SendDunningMail>
<MailSuccessPdfFolder>c:\POLLEX\Mahnungen\Sent</MailSuccessPdfFolder>
<MailFailedPdfFolder>c:\POLLEX\Mahnungen\Failed</MailFailedPdfFolder>
<DunningMailBody>@GetTextModule("MAHN_MAILBODY")</DunningMailBody>
<DunningMailSubject>Mahnung vom {Today}</DunningMailSubject>
<CustomerNumberFrom></CustomerNumberFrom>
<CustomerNumberTo></CustomerNumberTo>
<AccountNumberFrom></AccountNumberFrom>
<AccountNumberTo></AccountNumberTo>
<OrgUnits></OrgUnits>
<TotalAmountGrossIncFrom></TotalAmountGrossIncFrom>
<TotalAmountGrossIncTo></TotalAmountGrossIncTo>
<IsTransferredToAccount></IsTransferredToAccount>
<IsInvoiceFinished></IsInvoiceFinished>
<SqlWhere></SqlWhere>
<Test>False</Test>
<SmtpServer>mail.mustermann.com</SmtpServer>
<SmtpUser>Benutzername</SmtpUser>
<SmtpPassword>Passwort</SmtpPassword>
<SmtpPortNumber></SmtpPortNumber>
<SmtpUseSSL>True</SmtpUseSSL>
<SenderEMail>dunning@mustermann.com</SenderEMail>
<BccEMail></BccEMail>
<ProtocolEMail>max@mustermann.com</ProtocolEMail>
<MailLevel>All</MailLevel>
<MailSubject></MailSubject>
<MailBody></MailBody>
<IsBodyHtml></IsBodyHtml>
</DunningRun>]] ></ac:plain-text-body></ac:structured-macro><h3>Feldbeschreibung</h3><table class="wrapped"><colgroup><col /><col /><col /></colgroup><tbody><tr><th>Feld</th><th>Mögliche Werte</th><th>Beschreibung</th></tr><tr><td>DB</td><td><br /></td><td><span style="color: rgb(23,43,77);">Datenbankname für die Verbindung zur Datenbank</span></td></tr><tr><td colspan="1"><span style="color: rgb(23,43,77);">USER</span></td><td colspan="1"><br /></td><td colspan="1"><span style="color: rgb(23,43,77);">Benutzername für die Verbindung zur Datenbank</span></td></tr><tr><td colspan="1"><span style="color: rgb(23,43,77);">PASSWORD</span></td><td colspan="1"><br /></td><td colspan="1"><span style="color: rgb(23,43,77);">Passwort für die Verbindung zur Datenbank</span></td></tr><tr><td colspan="1"><span style="color: rgb(23,43,77);">LogLevel</span></td><td colspan="1"><span style="color: rgb(23,43,77);">Full, Detail, Info, Warning, Error</span></td><td colspan="1"><span style="color: rgb(23,43,77);">Detailgrad für die Protokollierung in der Log-Datei</span></td></tr><tr><td colspan="1"><br /></td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">DunningLetterPrintLayout</td><td colspan="1"><br /></td><td colspan="1"><div class="content-wrapper"><p>Layout-Buchstabe für das Drucklayout (DunningTextSheet1.rpx)</p><ac:structured-macro ac:name="warning" ac:schema-version="1" ac:macro-id="ed741824-f360-4bb9-bf95-912e8cd992ae"><ac:parameter ac:name="title">Wichtig!!</ac:parameter><ac:rich-text-body><p>Es muss immer ein eigenes Drucklayout angegeben und im company\Reports-Ordner bereitgestellt werden!!</p><p><br /></p><p>Die Druckeinstellungen werden über die USER-INI eingelesen. Das heißt, es muss einmalig eine Mahnung manuell gedruckt werden, mit den gewünschten Einstellungen für den DB-Benutzer, welcher dann für den Mahnlauf angemeldet wird.</p></ac:rich-text-body></ac:structured-macro><p class="auto-cursor-target"><br /></p></div></td></tr><tr><td colspan="1">TargetPdfFolder</td><td colspan="1"><br /></td><td colspan="1">Ziel-Ordner, in dem die erstellten PDFs abgelegt werden</td></tr><tr><td colspan="1">TargetPdfFilenamePattern</td><td colspan="1"><br /></td><td colspan="1"><p>Vorlage, wie der Pdf-Dateiname auszusehen hat.</p><p>Es können diverse Platzhalter sowie StringFunctions verwendet werden - <ac:link ac:anchor="TargetPdfFilenamePattern"><ac:plain-text-link-body><![CDATA[Details siehe hier]] ></ac:plain-text-link-body></ac:link>.</p></td></tr><tr><td colspan="1">SendDunningMail</td><td colspan="1"><span style="color: rgb(23,43,77);">True, False</span></td><td colspan="1"><p>True = Zusätzlich zur Erstellung der PDFs wird eine EMail an den Fibu-EMail-Kontakt des Kunden bzw. an die eInvoice-Adresse geschickt</p><p>False (Standard) = Es werden keine EMails gesendet</p></td></tr><tr><td>MailSuccessPdfFolder</td><td><br /></td><td>Pfad, wo die generierten PDF-Dateien verschoben werden, wenn die Mail erfolgreich versendet wurde</td></tr><tr><td colspan="1">MailFailedPdfFolder</td><td colspan="1"><br /></td><td colspan="1">Pfad, wo die generierten PDF-Dateien verschoben werden, wenn die Mail nicht versendet werden konnte</td></tr><tr><td colspan="1">DunningMailBody</td><td colspan="1">Mahnung vom {Today}</td><td colspan="1"><p>Text, der im EMail-Body an den Kunden gesendet wird.</p><p>Es können diverse Platzhalter sowie StringFunctions verwendet werden - <ac:link ac:anchor="TargetPdfFilenamePattern"><ac:plain-text-link-body><![CDATA[Details siehe hier]] ></ac:plain-text-link-body></ac:link>.</p></td></tr><tr><td colspan="1">DunningMailSubject</td><td colspan="1">@GetTextModule("MAHN_MAILBODY")</td><td colspan="1"><p>Betreff für die Kunden-EMail.</p><p>Es können diverse Platzhalter sowie StringFunctions verwendet werden - <ac:link ac:anchor="TargetPdfFilenamePattern"><ac:plain-text-link-body><![CDATA[Details siehe hier]] ></ac:plain-text-link-body></ac:link>.</p></td></tr><tr><td colspan="1"><br /></td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">CustomerNumberFrom</td><td colspan="1">Zahl (Kundennummer)</td><td colspan="1">VON-Kundennummer - wenn angegeben, werden nur Rechnungen dieser Kundennummer selektiert</td></tr><tr><td colspan="1">CustomerNumberTo</td><td colspan="1">Zahl (Kundennummer)</td><td colspan="1">BIS-Kundennummer - wenn eine VON- sowie eine BIS-Kundennummer angegeben wurde, werden nur Rechnungen mit Kundennummern in diesem Bereich selektiert</td></tr><tr><td colspan="1">AccountNumberFrom</td><td colspan="1">Zahl (Kundennummer)</td><td colspan="1">VON-FIBU-Nummer - wenn angegeben, werden nur Rechnungen dieser FIBU-Nummer selektiert</td></tr><tr><td colspan="1">AccountNumberTo</td><td colspan="1">Zahl (Kundennummer)</td><td colspan="1">BIS-Kundennummer - wenn eine VON- sowie eine BIS-Kundennummer angegeben wurde, werden nur Rechnungen mit Kundennummern in diesem Bereich selektiert</td></tr><tr><td colspan="1">OrgUnits</td><td colspan="1"><p>10</p><p>10;20;30</p></td><td colspan="1">Liste mit Nummern der organisatorischen Einheiten - wenn angegeben, werden nur Rechnungen dieser OEs selektiert</td></tr><tr><td colspan="1">TotalAmountGrossIncFrom</td><td colspan="1">Zahl (Gesamt-Brutto-VK-Inkl)</td><td colspan="1">VON-Betrag - wenn angegeben, werden nur Rechnungen mit dem Betrag größer/gleich selektiert</td></tr><tr><td colspan="1">TotalAmountGrossIncTo</td><td colspan="1">Zahl (Gesamt-Brutto-VK-Inkl)</td><td colspan="1">BIS-Betrag - wenn angegeben, werden nur Rechnungen mit dem Betrag kleiner/gleich selektiert</td></tr><tr><td colspan="1">InvoiceDateFrom</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">InvoiceDateTo</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">PaymentDateFrom</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">PaymentDateTo</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">DueDateFrom</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">DueDateTo</td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td colspan="1">IsTransferredToAccount</td><td colspan="1">True, False</td><td colspan="1"><p>True = Es werden nur Rechnungen selektiert, die bereits in die FIBU übergeleitet sind</p><p>False = Es werden nur Rechnungen selektiert, die noch nicht in die FIBU übergeleitet sind</p><p>leer = keine Einschränkung</p></td></tr><tr><td colspan="1">IsInvoiceFinished</td><td colspan="1">True, False</td><td colspan="1"><p>True = Es werden nur Rechnungen selektiert, die bereits erledigt sind</p><p>False = Es werden nur Rechnungen selektiert, die noch nicht erledigt sind</p><p>leer = keine Einschränkung</p></td></tr><tr><td colspan="1"><span style="color: rgb(23,43,77);">SqlWhere</span></td><td colspan="1">r.vertreternummer=15</td><td colspan="1"><p style="text-align: left;">zusätzliche SQL-Einschränkung für die Abfrage der Rechnungen, welche gemahnt werden. Folgende Alias'se können verwendet werden:</p><p style="text-align: left;">r. = RECHNUNGEN</p><p style="text-align: left;">k. = KUNDEN</p><p style="text-align: left;">z. = ZBEDINGUNGEN</p></td></tr><tr><td colspan="1">Test</td><td colspan="1"><span style="color: rgb(23,43,77);">True, False</span></td><td colspan="1"><p style="text-align: left;">True = Es werden nur die potentiellen Rechnungen selektiert und ausgegeben - es werden keine Mahnungen erstellt oder gesendet (für Test-Zwecke)</p><p style="text-align: left;">False (Standard) = Mahnungen werden regulär erstellt und auf Wunsch per Mail versendet</p></td></tr><tr><td colspan="1"><br /></td><td colspan="1"><br /></td><td colspan="1"><br /></td></tr><tr><td>ProtocolEMail</td><td><a class="external-link" style="text-decoration: none;" href="mailto:max@mustermann.com" rel="nofollow">max@mustermann.com</a>;</td><td>EMail-Adresse für Protokoll - mehrere Adressen können semikolon-getrennt angegeben werden</td></tr><tr><td>BccEMail</td><td><a class="external-link" href="mailto:min@mustermann.com" style="text-decoration: none;" rel="nofollow">min@mustermann.com</a></td><td>Unsichtbare Ziel-EMail-Adresse(n) - Wenn angegeben, werden alle Mails, die an Kunden gesendet werden, auch an diese Mail-Adresse(n) zusätzlich gesendet.</td></tr><tr><td>SenderEMail</td><td><a href="mailto:ordrsp@mustermann.com" class="external-link" style="text-decoration: none;" rel="nofollow">dunning@mustermann.com</a></td><td>EMail-Adresse die als Absender angezeigt wird</td></tr><tr><td>SmtpServer</td><td><a style="text-decoration: none;" class="external-link" href="http://mail.mustermann.com/" rel="nofollow">mail.mustermann.com</a></td><td>SMTP-Server für EMail-Versand</td></tr><tr><td>SmtpUser</td><td>mustermann\admin</td><td>SMTP-Benutzername für EMail-Versand</td></tr><tr><td>SmtpPassword</td><td>admmus</td><td>SMTP-Passwort für EMail-Versand</td></tr><tr><td>SmtpUseSSL</td><td>True, False</td><td>SSL für SMTP-Email-Versand verwenden</td></tr><tr><td>SmtpPortNumber</td><td><br /></td><td>Port-Nummer für Mail-Versand (Standard=25)</td></tr><tr><td>MailLevel</td><td>All, ErrorsOnly, NoMail</td><td>Beinhaltet das Level, welche Mails versendet werden sollen.</td></tr><tr><td>MailSubject</td><td><br /></td><td>EMail-Betreff. Wenn angegeben, wird dieser Betreff angezeigt.</td></tr><tr><td>MailBody</td><td><br /></td><td>EMail-Body. Wenn angegeben, wird dieser Body angezeigt.</td></tr><tr><td>IsBodyHtml</td><td>True, False</td><td>Gibt an, ob der Body ein HTML-Body ist, oder ein normaler Text. Wenn nicht angegeben, wird standardmäßig HTML gesendet.</td></tr></tbody></table><h4><ac:structured-macro ac:name="anchor" ac:schema-version="1" ac:macro-id="8e503e64-ffc8-4d41-a272-9f57d81f2466"><ac:parameter ac:name="">TargetPdfFilenamePattern</ac:parameter></ac:structured-macro>TargetPdfFilenamePattern</h4><h5>Platzhalter</h5><table class="wrapped"><colgroup><col /><col /></colgroup><tbody><tr><th>Platzhalter</th><th>Beschreibung</th></tr><tr><td><span>{CustomerNumber}</span></td><td>Wird durch die Kundennummer ersetzt</td></tr><tr><td>{Today}</td><td>Wird durch das aktuelle Datum ersetzt ( Format dd.MM.yyyy )</td></tr><tr><td colspan="1">{Today:FORMAT}</td><td colspan="1"><p>Wird durch das aktuelle Datum im angegebenen Format ersetzt.</p><p>Bsp: {Today:yyyyMMdd}</p></td></tr></tbody></table><h5>StringFunctions</h5><p>Zusätzlich zu den <a href="https://help.pollex-lc.com/x/NIBU">Standard-StringFunctions</a> sind folgende Funktionen möglich:</p><table class="wrapped"><colgroup><col /><col /></colgroup><tbody><tr><th>StringFunction</th><th>Beschreibung</th></tr><tr><td>GetProcessingItem()</td><td><p>Liefert das DTO für die aktuell verarbeitete Mahnung. Ein ProcessingItem enthält folgende Felder:</p><p>CustomerNumber (long?)</p><p>SearchKey (string)</p><p>Invoices (Liste mit Invoice-Elementen)</p><p>FileContent (Dateiinhalt der Pdf-Datei)</p><p>IsPdfCreated (bool - Kennzeichen ob die Pdf-Datei erfolgreich im Dateisystem abgelegt wurde)</p><p>IsMailSent (bool - Kennzeichen ob eine Mail versendet wurde)</p><p>MailAddress (string - Ziel-EMail-Adresse)</p><p>ErrorMessage ( Element mit ev. Fehlermeldung )</p></td></tr><tr><td>GetCustomerNumber()</td><td>Liefert die Kundennummer für die aktuell verarbeitete Mahnung</td></tr><tr><td>GetCustomerSearchKey()</td><td>Liefert die Kunden-Suchbezeichnung für die aktuell verarbeitete Mahnung</td></tr><tr><td colspan="1">GetInvoiceNumbers()</td><td colspan="1">Liefert eine Liste mit den Rechnungsnummern für die aktuell verarbeitete Mahnung</td></tr><tr><td colspan="1">GetInvoice()</td><td colspan="1">Liefert ein Invoice-Element der aktuell verarbeiteten Rechnung bzw. das erste Invoice-Element für den aktuellen Kunden</td></tr><tr><td colspan="1">GetInvoiceNumber()</td><td colspan="1">Liefert die Rechnungsnummer der aktuell verarbeiteten Rechnung bzw. die erste Rechnungsnummer für den aktuellen Kunden</td></tr><tr><td colspan="1">GetInvoiceInx()</td><td colspan="1">Liefert den Datensatz-Index der aktuell verarbeiteten Rechnung bzw. den ersten Rechnungs-Index für den aktuellen Kunden</td></tr></tbody></table><h1>Kriterien für Abfrage</h1><ul><li>Es darf keine Barverkaufsrechnung sein (TYP < 100)</li><li>Die Rechnung darf nicht bezahlt sein (BEZAHLT=0)</li><li>Zusätzliche Einschränkungen über die Konfigurationsdatei</li></ul><h1>Automatisierte Aufgaben</h1><p>Speziell für den Mahnlauf gibt es folgende automatisierten Aufgaben, auf die reagiert werden können:</p><table class="wrapped"><colgroup><col /><col /></colgroup><tbody><tr><th>Trigger</th><th>Beschreibung</th></tr><tr><td>Invoice.DunningRunDunningBlock</td><td>Wird ausgelöst, wenn ein Mahnlauf durchgeführt wird, die Rechnung nicht bezahlt ist und mit einer Mahnsperre gekennzeichnet ist</td></tr><tr><td>Invoice.DunningRun</td><td>Wird ausgelöst, wenn ein automatischer Mahnlauf durchgeführt wird und die Rechnung per Mail versendet wurde</td></tr></tbody></table><p><br /></p><p><strong>Beispiel: Es soll an die Buchhaltung eine EMail gesendet werden, wenn eine Rechnung nicht gemahnt wird, weil eine Mahnsperre vorliegt</strong></p><p><ac:structured-macro ac:name="view-file" ac:schema-version="1" ac:macro-id="de30c0a9-4e6f-4c7a-bd5b-f6bc58fac147"><ac:parameter ac:name="name"><ri:attachment ri:filename="Invoice.DunningRunDunningBlock.xml" /></ac:parameter><ac:parameter ac:name="height">250</ac:parameter></ac:structured-macro></p><h1>Automatischer Start</h1><p><span style="color: rgb(23,43,77);">Im Unterordner \Interfaces\POLLEX-LC\DunningRun\Templates werden Beispieldaten für die automatische Ausführung der Schnittstelle mit ausgeliefert. Wollen Sie diese Dateien verwenden, kopieren Sie diese bitte in einen eigenen Script-Ordner oder in den Ordner der LC.WpfInterfaces.exe. Die mitgelieferten Templates werden beim Update überschrieben.</span></p><h2>Beispiel</h2><h3>XML-Konfigurationsdatei</h3><ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="23cf4222-a71b-4ed7-b104-c7e0fa809e88"><ac:parameter ac:name="language">xml</ac:parameter><ac:parameter ac:name="title">DunningRun.xml</ac:parameter><ac:plain-text-body><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DunningRun>
<DB>LC</DB>
<USER>SYSADM</USER>
<PASSWORD>SYSADM</PASSWORD>
<LogLevel>Full</LogLevel>
<DunningLetterPrintLayout>X</DunningLetterPrintLayout>
<TargetPdfFolder>c:\POLLEX\Mahnungen</TargetPdfFolder>
<TargetPdfFilenamePattern>MAHNUNG_{CustomerNumber}.pdf</TargetPdfFilenamePattern>
<SendDunningMail>True</SendDunningMail>
<MailSuccessPdfFolder>c:\POLLEX\Mahnungen\Sent</MailSuccessPdfFolder>
<MailFailedPdfFolder>c:\POLLEX\Mahnungen\Failed</MailFailedPdfFolder>
<DunningMailBody>@GetTextModule("MAHN_MAILBODY")</DunningMailBody>
<DunningMailSubject>Mahnung vom {Today}</DunningMailSubject>
<OrgUnits>10</OrgUnits>
<SmtpServer>mail.mustermann.com</SmtpServer>
<SmtpUser>max</SmtpUser>
<SmtpPassword>nnamretsum</SmtpPassword>
<SmtpPortNumber></SmtpPortNumber>
<SmtpUseSSL>True</SmtpUseSSL>
<SenderEMail>noreply@mustermann.com</SenderEMail>
<BccEMail>buchhaltung@mustermann.com</BccEMail>
<ProtocolEMail>admin@mustermann.com</ProtocolEMail>
<MailLevel>All</MailLevel>
</DunningRun>]] ></ac:plain-text-body></ac:structured-macro><h3>Batch-Datei</h3><ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="84f7f224-d43a-494c-b0d6-10c5e8e1ee83"><ac:plain-text-body><![CDATA[LC.WpfInterfaces.exe /C=DunningRun.xml]] ></ac:plain-text-body></ac:structured-macro><h3>Commandline-Aufruf für Test</h3><ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="f5010921-06f7-48c9-8b62-36dbe036bb97"><ac:plain-text-body><![CDATA[LC.WpfInterfaces.exe /C=DunningRun.xml /Test]] ></ac:plain-text-body></ac:structured-macro><h3>Commandline-Aufruf andere Datenbank</h3><ac:structured-macro ac:name="code" ac:schema-version="1" ac:macro-id="7e60ba7b-3cc2-4f1d-abc4-db3ff4f92dff"><ac:plain-text-body><![CDATA[LC.WpfInterfaces.exe /C=DunningRun.xml /DB=DEMO /USER=DEMO /PASSWORD=TEST]] ></ac:plain-text-body></ac:structured-macro><p class="auto-cursor-target"><br /></p>