Der Chatbot hilft Ihnen bei Fragen rund um das Produkt und die Anpassbarkeit der Software. Wie bei allen AI-generierten Daten sollten die Antworten bei kritischen Informationen verifiziert werden. Nehmen Sie dafür gerne Kontakt mit uns auf. Weitere Informationen zur Verarbeitung der Chat-Daten bieten wir auf der Datenschutzseite.
Die besten Antworten liefert der Chatbot, wenn Ihr Input möglichst viele Informationen enthält. Zum Beispiel:
«Welche Apps stehen im Vertec Cloud Abo zur Verfügung?»
Es gibt eine Beispiel-Debitoren-Schnittstelle, welche zeigt, was man implementieren muss, um eine lauffähige cloudfähige Fibu-Schnittstelle zu erstellen. Sie kann als Basis für neue Schnittstellen verwendet werden.
Um die Beispiel-Schnittstelle zu implementieren bzw. den Code einzusehen, erstellen Sie in Vertec im Ordner Einstellungen > Schnittstellen > Extensions eine neue Extension.
Als Extension-ID geben Sie eine der folgenden Referenzen an:
Online-Schnittstelle: FibuExampleExtension.ExampleOnlineDebiExtension. Dies ist das Beispiel einer Schnittstelle, welche online und mit requests arbeitet. Ein Beispiel dafür ist die Run my Accounts Debitoren Schnittstelle.
Offline-Schnittstelle: FibuExampleExtension.ExampleOfflineDebiExtension. Dies ist das Beispiel einer Schnittstelle, welche beim Buchen oder Stornieren jeweils eine Textdatei erstellt und diese zum Download liefert. Diese Textfiles werden dann in den Buchhaltungssystemen eingelesen. Beispiele dafür sind die Datev Debitoren Schnittstelle und die BMD Debitoren Schnittstelle.
Sobald Sie die Extension-ID eingegeben haben, können Sie über den Button mit den drei Punkten den Code öffnen:
Der Code für beide Schnittstellen befindet sich im selben File, es kann jedoch pro Extension jeweils nur die eine oder die andere registriert werden.
Online-Schnittstelle
Die Klasse für Online Debitor Schnittstellen heisst ExampleOnlineDebiExtension und enthält folgende Einstiegspunkte:
TryPostInvoiceBookings(self, invoiceList)
Diese Methode wird direkt von Vertec aufgerufen und dient dazu, die Rechnungen in der Buchhaltung zu buchen. Bei diesem Vorgang wird auch die Debitoradresse geschrieben.
Ihr Argument ist eine Liste von Vertec Rechnungsobjekten. Die Liste enthält nur gültige Rechnungen. Die Konsistenzprüfung wird vor dem Aufruf dieser Methode durchgeführt.
defTryPostInvoiceBookings(self, invoiceList):
response = [""] * len(invoiceList)
for i inrange(len(invoiceList)):
try:
self.CreateOrUpdateDebitor(invoiceList[i])
self.BookInvoice(invoiceList[i])
except Exception as e :
errortext = translate('The invoice with the number %s reports:') % str(invoiceList[i].nummer)
errortext += '\n'
errortext += str(e)
response[i] = errortext.replace('\n', "\n \t")
return response
Es muss eine Liste von Strings zurückgegeben werden, mit der gleichen Länge wie die Liste der Rechnungen.
Jeder String ist mit der Rechnung auf dem gleichen Index verknüpft.
Ist die Zeichenkette leer, wird die Rechnung von Vertec als gebucht betrachtet.
In jedem anderen Fall muss die Fehlermeldung in den String geschrieben werden.
Beispiel
invoicelist[0] - response[0] = ""
invoicelist[1] - response[1] = ""
invoicelist[2] - response[2] = "Ein erster Fehler ist aufgetreten"
invoicelist[3] - response[3] = "Es ist ein zweiter Fehler aufgetreten"
invoicelist[4] - response[4] = ""
Die Rechnungen mit dem Index 0,1 und 4 werden in Vertec verbucht. Die anderen Rechnungen werden nicht verbucht.
Zusätzlich wird dem Benutzer der erste Fehler als Fehlermeldung angezeigt: "Ein erster Fehler ist aufgetreten". Es wird jeweils nur der erste Fehler angezeigt.
TryCancelInvoiceBookings(self, invoiceList)
Diese Methode wird direkt von Vertec aufgerufen und dient dazu, Rechnungen in der Buchhaltung zu stornieren.
Ihr Argument ist eine Liste von Vertec Rechnungsobjekten. Die Liste enthält nur gültige Rechnungen. Die Konsistenzprüfung wird vor dem Aufruf dieser Methode durchgeführt.
defTryCancelInvoiceBookings(self, invoiceList):
response = [""] * len(invoiceList)
for i inrange(len(invoiceList)):
try:
self.CancelInvoice(invoiceList[i])
except Exception as e :
errortext = translate('The invoice with the number %s reports:') % str(invoiceList[i].nummer)
errortext += '\n'
errortext += str(e)
response[i] = errortext.replace('\n', "\n \t")
return response
Es muss eine Liste von Strings zurückgegeben werden, mit der gleichen Länge wie die Liste der Rechnungen.
Jeder String ist mit der Rechnung auf dem gleichen Index verknüpft.
Ist die Zeichenkette leer, wird die Rechnung von Vertec als gebucht betrachtet.
In jedem anderen Fall muss die Fehlermeldung in den String geschrieben werden.
Beispiel
invoicelist[0] - response[0] = ""
invoicelist[1] - response[1] = ""
invoicelist[2] - response[2] = "Ein erster Fehler ist aufgetreten"
invoicelist[3] - response[3] = "Es ist ein zweiter Fehler aufgetreten"
invoicelist[4] - response[4] = ""
Die Rechnungen mit dem Index 0,1 und 4 werden in Vertec storniert. Die anderen Rechnungen werden nicht storniert.
Zusätzlich wird dem Benutzer der erste Fehler als Fehlermeldung angezeigt: "Ein erster Fehler ist aufgetreten". Es wird jeweils nur der erste Fehler angezeigt.
ImportPayments(self, invoiceList)
Diese Methode wird direkt von Vertec aufgerufen und dient dazu, Zahlungen aus der Buchhaltung ins Vertec zu importieren.
Ihr Argument ist eine Liste von Vertec Rechnungsobjekten. Die Liste enthält nur gültige Rechnungen. Die Konsistenzprüfung wird vor dem Aufruf dieser Methode durchgeführt.
defImportPayments(self, invoiceList):
for invoice in invoiceList:
# get payments from fibu
amount = 9.95
date = datetime.date.today()
# get paymenttyp from vertec
zahltyp = vtcapp.evalocl("zahlungstyp->select(code='AUTO')->first")
ifnot zahltyp:
self.Log('No Paymenttyp with code "AUTO" found, will be created.')
zahltyp = vtcapp.createobject('Zahlungstyp')
zahltyp.Code = "AUTO"
zahltyp.Bezeichnung = translate("automatically created through synchronization of payment")
zahltyp.Aktiv = True# create vertec payment
zahlobj = vtcapp.createobject('Zahlung')
zahlobj.rechnung = invoice
zahlobj.typ = zahltyp
zahlobj.betrag = amount
zahlobj.datum = date
zahlobj.text = "This payment was done by the example fibu extension"# Mark invoice as payed, if no open fees left.if invoice.betragoffen == 0:
invoice.bezahlt = Trueprint("Imported payments for invoice with number "+str(invoice.nummer))
Es gibt drei Fälle:
Zahlungsimport auf einer einzelnen Rechnung ausgeführt: Die Liste enthält nur eine Rechnung.
Zahlungsimport auf einer Liste von Rechnungen ausgeführt: Die Liste enthält alle Rechnungen der Liste.
Zahlungsimport global aufgerufen: Die Liste enthält alle Rechnungen, die nicht bezahlt sind.
Es müssen in Vertec Zahlungen erstellt und der Rechnung zugeordnet werden.
Wenn in Vertec kein Zahlungstyp mit dem Code AUTO vorhanden ist, wird einer erstellt.
Ausserdem muss die Rechnung als bezahlt markiert werden, wenn sie vollständig bezahlt wurde.
In der Beispiel-Extension wird der Rechnung eine Zahlung von 9.95 hinzugefügt. Ausserdem wird beim Buchen die Personenkontonummer auf Adressen auf 1 gesetzt. Diese Nummer muss von der Fibu kommen, bitte Kommentar im Code beachten.
Offline-Schnittstelle
Die Klasse für Offline Debitor Schnittstellen heisst ExampleOnlineDebiExtension und enthält folgende Einstiegspunkte:
PostInvoiceBookings(self, invoiceList)
Die Methode wird von Vertec direkt aufgerufen und dient dazu, Rechnungen in der Buchhaltung zu verbuchen. Als Argument wird eine Liste von Rechnungen übergeben. Die Liste enthält nur gültige Rechnungen, da die Konsistenzprüfung vor dem Aufruf dieser Methode durchgeführt wird.
Dabei wird auch die Debitoradresse in der Buchhaltung geschrieben bzw. upgedatet.
Rückgabewert ist ein Tupel (filname, fileAsByteArray), welches von Vertec gespeichert wird.
Was passiert, wenn der Buchungsvorgang fehlschlägt
Wirft die Schnittstelle eine Exception, dann gilt in Vertec der gesamte Buchungsprozess als gescheitert. In diesem Fall wird keine der Rechnungen in der Liste auf gebucht gesetzt. Das impliziert, dass alle Rechnungen in der Liste gleichzeitig in die Fibu gebucht werden müssen, da sonst Abweichungen zwischen Vertec und der Fibu entstehen können.
CancelInvoiceBookings(self, invoiceList)
Die Methode wird von Vertec direkt aufgerufen und dient dazu, Rechnungen in der Buchhaltung zu stornieren. Als Argument wird eine Liste von Rechnungen übergeben. Die Liste enthält nur gültige Rechnungen, da die Konsistenzprüfung vor dem Aufruf dieser Methode durchgeführt wird.
defCancelInvoiceBookings(self, invoiceList):
zipContentList = []
for invoice in invoiceList:
content = self.CancelInvoice(invoice)
zipContentList.append(content)
zipFileAsBytes = ziputils.createzip(zipContentList)
return ("FileNameForCanceledInvoices.zip", zipFileAsBytes)
Rückgabewert ist ein Tupel (filname, fileAsByteArray), welches von Vertec gespeichert wird.
ImportPayments(self, invoiceList)
Diese Methode wird direkt von Vertec aufgerufen und dient dazu, Zahlungen aus der Buchhaltung ins Vertec zu importieren.
Ihr Argument ist eine Liste von Vertec Rechnungsobjekten. Die Liste enthält nur gültige Rechnungen. Die Konsistenzprüfung wird vor dem Aufruf dieser Methode durchgeführt.
Die Implementierung sollte dem Benutzer die Möglichkeit geben, eine Zahlungsdatei zum Importieren und Verarbeiten auszuwählen.
defImportPayments(self, invoiceList):
# show file selection dialog
filename, content = vtcapp.requestfilefromclient("Import payments file", '', '*.txt')
# here we would process the payments file content....# as an example, we just add a payment to all the invoicesfor invoice in invoiceList:
# get payments from fibu
amount = 9.95
date = datetime.date.today()
# get paymenttyp from vertec
zahltyp = vtcapp.evalocl("zahlungstyp->select(code='AUTO')->first")
ifnot zahltyp:
self.Log('No Paymenttyp with code "AUTO" found, will be created.')
zahltyp = vtcapp.createobject('Zahlungstyp')
zahltyp.Code = "AUTO"
zahltyp.Bezeichnung = translate("automatically created through synchronization of payment")
zahltyp.Aktiv = True# create vertec payment
zahlobj = vtcapp.createobject('Zahlung')
zahlobj.rechnung = invoice
zahlobj.typ = zahltyp
zahlobj.betrag = amount
zahlobj.datum = date
zahlobj.text = "This payment was done by the example fibu extension"# Mark invoice as payed, if no open fees left.if invoice.betragoffen == 0:
invoice.bezahlt = Trueprint("Imported payments for invoice with number "+str(invoice.nummer))
Es gibt drei Fälle:
Zahlungsimport auf einer einzelnen Rechnung ausgeführt: Die Liste enthält nur eine Rechnung.
Zahlungsimport auf einer Liste von Rechnungen ausgeführt: Die Liste enthält alle Rechnungen der Liste.
Zahlungsimport global aufgerufen: Die Liste enthält alle Rechnungen, die nicht bezahlt sind.
Es müssen in Vertec Zahlungen erstellt und der Rechnung zugeordnet werden.
Wenn in Vertec kein Zahlungstyp mit dem Code AUTO vorhanden ist, wird einer erstellt.
Ausserdem muss die Rechnung als bezahlt markiert werden, wenn sie vollständig bezahlt wurde.
In der Beispiel-Extension wird der Rechnung eine Zahlung von 9.95 hinzugefügt. Ausserdem wird beim Buchen die Personenkontonummer gesetzt auf Adressen, welche noch keine solche Nummer haben. Die entsprechenden Zahlen kommen von der Systemeinstellung Nächste Debitornummer.
Implementierungsdetails
Folgende Hinweise sollten beachtet werden beim Implementieren einer neuen Schnittstelle:
Folgendes darf von der Schnittstelle NICHT geschrieben werden:
Der Zustand gebucht auf der Rechnung wird von der Vertec Business-Logik gesetzt und darf nicht separat von der Extension gesetzt werden.
Dasselbe gilt für die persistenten Buchhaltungs-Attribute auf der Rechnung (die Werte mit bhXX), welche ebenfalls von Vertec automatisch beschrieben werden.
Folgendes MUSS von der Schnittstelle geschrieben werden:
Die Belegnummer (rechnung.belegnr) muss von der Extension gesetzt werden, denn ohne eine Belegnummer kann nicht storniert werden. Bei Buchhaltungen, welche ohne Belegnummern arbeiten, kann einfach 0 hineingeschrieben werden.
Ausgabe
Es werden Prints in die Python Konsole geschrieben beim Buchen und Stornieren.