Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

Beitrag aus SmartTools Access Weekly

So definieren Sie Skonto-Bedingungen in E-Rechnungen aus Access

Access 365 2024 2021 2019 2016 2013 2010

Skonto ist ein beliebtes Mittel, um Kunden zu einer schnellen Zahlung ausstehender Rechnungen zu bewegen. Nachlässe von 2 oder 3 Prozent bei einer Zahlung innerhalb von 14 Tagen sind allgemein üblich. Selbstverständlich können Sie auch in E-Rechnungen Skonto gewähren. Problematisch daran ist nur, dass es in der maßgeblichen E-Rechnungsnorm "EN 16931" keine speziellen Felder für Skontodetails gibt – zumindest noch nicht. Das Fehlen geeigneter BT-Felder steht der maschinellen Auswertung von E-Rechnungen im Wege, denn ein simpler Skonto-Hinweis in einem Freitext-Feld kann nicht automatisch verarbeitet werden. Zu vielfältig wären die Formulierungen, als dass sich beim Einlesen einer E-Rechnung eindeutige Skonto-Bedingungen zuordnen ließen. Wir zeigen in diesem Beitrag, wie Sie mit SmartTools E-Rechnung für Access die Skonto-Bedingungen in E-Rechnungen in den Formaten ZUGFeRD, XRechnung und ZUGFeRD Extended vornehmen.

SmartTools E-Rechnung für Access ist das Komplettpaket zum Schreiben, Lesen, Validieren und Anzeigen von E-Rechnungen für alle aktuellen Access-Versionen. Nach der automatischen Installation setzen Sie in der Entwicklungsumgebung einen Verweis auf unsere Komponente und können danach mit wenigen einfachen Anweisungen, E-Rechnungen in Ihre Datenbanken integrieren. Änderungen an Ihrem Rechnungsformular sind nicht notwendig. Sie können für ZUGFeRD-Rechnungen sogar den kompletten bisherigen Vorgang zum Anlegen einer PDF-Rechnung beibehalten! Sie erhalten SmartTools E-Rechnung für Access aktuell mit 30% Aktionsrabatt als Dauerlizenz (kein Abo – keine Folgekosten)).

Skonto-Bedingungen festlegen

Etabliert hat sich eine strukturierte Angabe der Skontobedingungen im E-Rechnungsfeld BT-20. Das ist zwar auch ein Freitext-Feld, aber es ist speziell für die Beschreibung der Zahlungskonditionen gedacht. Skontoangaben lassen sich maschinell auslesen, wenn Sie in diesem BT-Feld einen Text mit folgendem Aufbau eingeben:

#SKONTO#TAGE=<Skontofrist in Tagen>
#PROZENT=<Skontosatz>#[BASISBETRAG=
<skontierbarer Teil des Rechnungsbetrags>#]

Der <Skontosatz> muss mit zwei Nachkommastellen und einem Dezimalpunkt angegeben werden (beispielsweise "2.50" für einen Skontosatz von 2,5 Prozent) und der "Basisbetrag" ist optional und nur dann erforderlich, wenn Sie Skonto nicht auf den gesamten Rechnungsbetrag, sondern nur auf einen Teil davon gewähren (zum Beispiel nur auf Material-, aber nicht auf Lohnkosten).

Beachten Sie außerdem die Großschreibung der festen Textwerte und die #-Zeichen, die als Trennzeichen vorgegeben sind. Dies gilt für E-Rechnungen, die EN 16931-konform sind, - also für XRechnungen und ZUGFeRD-Rechnungen im Profil "EN16931 (Comfort)". Anders sieht es bei ZUGFeRD-Rechnungen im Profil "Extended" aus. Das Profil bietet zusätzliche Felder für spezielle Zahlungskonditionen, so dass Sie Skontoangaben in spezifische BT-Felder der E-Rechnung schreiben können, die sich dann direkt maschinell auswerten lassen. Sie müssen aber mit Ihren Rechnungsempfängern absprechen, ob ZUGFeRD-Rechnungen im Profil "Extended" akzeptiert werden.

Mit SmartTools E-Rechnung für Access ist generell alles möglich. Egal, welchen E-Rechnungstyp Sie einsetzen: Sie können immer die gewünschten Skontoangaben hinzufügen. Im Folgenden liefern wir Ihnen Codebeispiele für die verschiedenen Szenarien.

Für die nachfolgenden Beispiele nehmen wir an, dass Ihnen folgende Variablen in der VBA-Prozedur zum Erstellen einer E-Rechnung zur Verfügung stehen:

Name der Variablen Datentyp Inhalt
datInvDate Date Rechnungsdatum
datDueDate Date Fälligkeitsdatum ohne Abzug
dblSkontoSatz Double Skontosatz
lngSkontoTage Long Tage für Skontonachlass
strZlgKond String Skonto-Hinweistext

So könnten Sie die Variable für das Rechnungsdatum zum Beispiel aus dem Feld eines Recordsets auslesen. Für die folgenden Beispiele verwenden wir der Einfachheit halber feste Werte:

datInvDate = DateSerial(2026, 7, 27)
datDueDate = DateSerial(2026, 8, 26)
dblSkontoSatz = 2.5
lngSkontoTage = 7
strZlgKond = "2,5% Skonto bei Zahlung innerhalb 7 Tagen, " & _
        "ohne Abzug innerhalb 30 Tagen"

Damit wird das Rechnungsdatum auf den 27.07.2026 und das Netto-Zahlungsziel des Rechnungsbetrags auf den 26.08.2026 festgelegt. Gleichzeitig wird ein Skontonachlass von 2,5 Prozent bei einer Zahlung innerhalb von 7 Tagen gewährt.

Die folgenden Beispiele zeigen, wie Sie die Skontoangaben in Ihren VBA-Code einbauen.

Skonto-Bedingungen in einer XRechnung

Wenn Sie XRechnungen erstellen, fügen Sie strukturierten Text in das E-Rechnungsfeld BT-20 ein, mit dem Sie die Skontofrist und den Skontosatz festlegen. Als Fälligkeitsdatum (Feld BT-9) tragen Sie das Zahlungsziel für den vollständigen Rechnungsbetrag ohne Abzüge ein. Außerdem empfiehlt es sich, in einem Freitext-Feld (BT-22) die menschenlesbare Zahlungsbedingung einzufügen.

Den entsprechenden VBA-Code fügen Sie am besten an der Stelle ein, an der Sie zuvor schon das Fälligkeitsdatum zugeordnet hatten. Ein Skontonachlass in XRechnungen lässt sich mit SmartTools E-Rechnung für Access dann wie folgt integrieren:

'Fälligkeitsdatum zuweisen
objInvoice.PaymentTerms.DueDate = datDueDate

'Skontosätze verarbeiten
If dblSkontoSatz > 0 Then
  'formatierter Skontosatz (mit Dezimalpunkt und 2 Nachkommastellen)
  strSkontoFormatiert = Replace(Format(dblSkontoSatz, "0.00"), ",", ".")
  'Strukturierte Skontoangabe in Feld BT-20
  objInvoice.PaymentTerms.Description = _
    "#SKONTO#TAGE=" & CStr(lngSkontoTage) & _
    "#PROZENT=" & strSkontoFormatiert & "#" & vbCrLf
End If
'zusätzliche Freitextinformation für die Zahlungskonditionen
If strZlgKond <> "" Then
  Set objNote = _
    New SmartTools_Invoicing_EN16931_XRechnung_Standard_InvoiceNote

  objNote.Content = strZlgKond
  objNote.SubjectCode = TextSubjectQualifierCode_AAB   'payment term

  objInvoice.AddNote objNote
  Set objNote = Nothing
End If

Ausgehend von Beispielwerten steht im Feld BT-20 dann:

#SKONTO#TAGE=7#PROZENT=2.50#

Damit der Skontosatz korrekt eingefügt wird, ist eine passende Formatierung erforderlich. Insbesondere auf einem System mit deutschen Ländereinstellungen könnte es sonst passieren, dass anstelle des Dezimalpunkts ein Dezimalkomma erscheint. Das verhindern Sie mit der Codezeile

strSkontoFormatiert = Replace(Format(dblSkontoSatz, "0.00"), ",", ".")

Die "Format"-Funktion gibt den Skontosatz mit den vorgeschriebenen zwei Nachkommastellen zurück. Und die "Replace"-Funktion ersetzt ein Dezimalkomma gegebenenfalls durch den Dezimalpunkt.

Die menschenlesbaren Zahlungskonditionen schreibt der Code in ein Freitext-Feld (BT-22), wobei dem Text der Qualifizierungscode "AAB" (= "payment term" / "Zahlungsbedingung") zugewiesen wird. Bei XRechnungen fügen Sie die Notiz mit Hilfe eines "SmartTools_Invoicing_EN16931_XRechnung_Standard_InvoiceNote"-Objekts hinzu.

Skonto-Bedingungen in einer ZUGFeRD-Rechnung im Profil "EN 16931"

Für ZUGFeRD-Rechnungen mit dem Profil "EN 16931" gilt prinzipiell dasselbe wie für XRechnungen. Sie schreiben strukturierte Skontoinformationen in das Feld BT-20, setzen das Fälligkeitsdatum (BT-9) auf das späteste Zahlungsdatum des vollständigen Rechnungsbetrags und fügen ein Freitext-Feld mit den menschenlesbaren Zahlungskonditionen hinzu.

Auch der VBA-Code ist identisch, außer dass Sie in diesem Fall "ZUGFeRD_EN16931"-Objekte verwenden:

'Fälligkeitsdatum zuweisen
objInvoice.PaymentTerms.DueDate = datDueDate

'Skontosätze verarbeiten
If dblSkontoSatz > 0 Then
  'formatierter Skontosatz (mit Dezimalpunkt und 2 Nachkommastellen)
  strSkontoFormatiert = Replace(Format(dblSkontoSatz, "0.00"), ",", ".")
  'Strukturierte Skontoangabe in Feld BT-20
  objInvoice.PaymentTerms.Description = _
    "#SKONTO#TAGE=" & CStr(lngSkontoTage) & _
    "#PROZENT=" & strSkontoFormatiert & "#" & vbCrLf
End If
'zusätzliche Freitextinformation für die Zahlungskonditionen
If strZlgKond <> "" Then
  Set objNote = _
    New SmartTools_Invoicing_EN16931_ZUGFeRD_EN16931_InvoiceNote

  objNote.Content = strZlgKond
  objNote.SubjectCode = TextSubjectQualifierCode_AAB   'payment term

  objInvoice.AddNote objNote
  Set objNote = Nothing
End If

Skonto-Bedingungen in einer ZUGFeRD-Rechnung im Profil "Extended"

Das ZUGFeRD-Profil "Extended" besitzt zusätzliche BT-Felder, mit denen Sie Skontoangaben detailliert beschreiben können. Allerdings gehen sie über die EN 16931-Norm hinaus, weshalb ZUGFeRD "Extended"-Rechnungen unter Umständen nicht von allen Rechnungsempfängern akzeptiert werden.

Innerhalb der E-Rechnung finden Sie die Skontofelder im Zweig "ApplicableTradePaymentDiscountTerms". Folgende Zusatzfelder stehen zur Verfügung:

Feldname BT-Nummer Beschreibung
BasisDateTime BT-X-282 Referenzdatum der Fälligkeit
BasisPeriodMeasure BT-X-283 Fälligkeitszeitraum
… → unitCode BT-X-284 Einheit des Fälligkeitszeitraums
BasisAmount BT-X-285 Basisbetrag des Skonto-Nachlasses
CalculationPercent BT-X-286 Skontosatz
ActualDiscountAmount BT-X-287 Konkreter Skontobetrag

Das folgende Codebeispiel, mit dem Sie Skontoangaben in eine ZUGFeRD-Rechnung mit dem Profil "Extended" integrieren, geht wieder von den weiter oben genannten Variablenzuweisungen aus. Es soll also ein Skontosatz von 2,5 Prozent bei einer Zahlung innerhalb von 7 Tagen ab Rechnungsdatum gelten.

Das Besondere am "Extended"-Profil ist, dass Sie mehrere Zahlungsbedingungen innerhalb einer E-Rechnung definieren können. Das setzen Sie in diesem Fall so ein, dass Sie zunächst eine Zahlungsbedingung für die normale Zahlungsfrist für den Rechnungsbetrag ohne Abzüge festlegen. Anschließend fügen Sie eine zweite Zahlungsbedingung für den Skonto-Fall hinzu.

Hier der VBA-Code, den Sie wie bei den anderen Rechnungstypen am besten an der Stelle einfügen, an der Sie bislang schon die Zahlungsfälligkeit bestimmt haben.

'Zahlungsbedingung 1: Fälligkeit der Rechnung (ohne Abzug)
Set objPmtTerm = New _
     SmartTools_Invoicing_EN16931_ZUGFeRD_Extended_PaymentTerm
objPmtTerm.DueDate = datDueDate
objPmtTerm.Description = "Ohne Abzug fällig am " & _
     Format(datDueDate, "dd.mm.yyyy")
objInvoice.AddPaymentTerm objPmtTerm
Set objPmtTerm = Nothing

'Zahlungsbedingung 2: Skonto
If dblSkontoSatz > 0 Then
  Set objPmtTerm = New _
      SmartTools_Invoicing_EN16931_ZUGFeRD_Extended_PaymentTerm

  'Skontosatz
  objPmtTerm.Discount.Percentage = dblSkontoSatz
  'Referenzdatum der Fälligkeit
  objPmtTerm.Discount.ReferenceDate = datInvDate
  'Fälligkeitszeitraum (hier: Anzahl der Tage)
  objPmtTerm.Discount.MaturityPeriod = lngSkontoTage
  'Einheit des Fälligkeitszeitraums (hier: Tage)
  objPmtTerm.Discount.MaturityPeriodUnitCode = UnitCode_DAY
  'spätestes Zahlungsdatum für Skonto-Inanspruchnahme
  objPmtTerm.DueDate = datInvDate + lngSkontoTage
  'Beschreibender Skonto-Text
  objPmtTerm.Description = strZlgKond

  objInvoice.AddPaymentTerm objPmtTerm
  Set objPmtTerm = Nothing
End If
'weitere Freitexte für die Zahlungskonditionen sind hier nicht nötig

Sonderfall: Abweichender Basisbetrag

Mitunter soll der Skontonachlass nicht auf den gesamten Rechnungsbetrag, sondern nur auf einen Teil davon gewährt werden. In einer Rechnung mit Material- und Lohnkosten sollen die Skontoangaben zum Beispiel nur für die Materialkosten gelten. Auch dieser Fall lässt sich in E-Rechnungen abbilden. Die genaue Vorgehensweise richtet sich wieder nach dem eingesetzten Rechnungstyp.

Bei XRechnung und dem ZUGFeRD-Profil "EN 16931" müssen Sie den strukturierten Text im Feld BT-20 um das Element "BASISBETRAG" erweitern. In den obigen Beispielen waren wir von 2,5 Prozent Skonto bei einer Zahlung innerhalb von 7 Tagen ausgegangen. Das E-Rechnungsfeld BT-20 wurde dazu mit folgendem Text befüllt:

#SKONTO#TAGE=7#PROZENT=2.50#

Wenn der Skontonachlass bei einer Rechnung über beispielsweise 3.500,00 Euro jetzt nur für 2.500,00 Euro gelten soll, müsste der strukturierte Text in BT-20 wie folgt lauten:

#SKONTO#TAGE=7#PROZENT=2.50#BASISBETRAG=2500.00#

Das obige Codebeispiel könnten Sie dafür folgendermaßen erweitern:

'Neue Variable für Skonto-Basisbetrag
dblSkontoBasis = 2500
'formatierter Basisbetrag (mit Dezimalpunkt und 2 Nachkommastellen)
strBasisFormatiert = Replace(Format(dblSkontoBasis, "0.00"), ",", ".")

'formatierter Skontosatz (mit Dezimalpunkt und 2 Nachkommastellen)
strSkontoFormatiert = Replace(Format(dblSkontoSatz, "0.00"), ",", ".")

'Strukturierte Skontoangabe in Feld BT-20
objInvoice.PaymentTerms.Description = _
  "#SKONTO#TAGE=" & CStr(lngSkontoTage) & _
  "#PROZENT=" & strSkontoFormatiert & _
  "#BASISBETRAG=" & strBasisFormatiert & "#" & vbCrLf

Das ZUGFeRD-Profil "Extended" bietet ein eigenes Feld für einen abweichenden Basisbetrag, das Feld BT-X-285. Im VBA-Code für Ihre E-Rechnung müssen Sie dem Feld folglich nur einen Wert zuweisen, um die Skontoangaben entsprechend zu ändern.

Hier die Erweiterung des ZUGFeRD "Extended"-Beispiels:

'Neue Variable für Skonto-Basisbetrag
dblSkontoBasis = 2500

Set objPmtTerm = New _
    SmartTools_Invoicing_EN16931_ZUGFeRD_Extended_PaymentTerm

'abweichender Basisbetrag
objPmtTerm.Discount.BaseAmount = dblSkontoBasis
'Skontosatz
objPmtTerm.Discount.Percentage = dblSkontoSatz
'Referenzdatum der Fälligkeit
objPmtTerm.Discount.ReferenceDate = datInvDate
'Fälligkeitszeitraum (hier: Anzahl der Tage)
objPmtTerm.Discount.MaturityPeriod = lngSkontoTage
'Einheit des Fälligkeitszeitraums (hier: Tage)
objPmtTerm.Discount.MaturityPeriodUnitCode = UnitCode_DAY
'spätestes Zahlungsdatum für Skonto-Inanspruchnahme
objPmtTerm.DueDate = datInvDate + lngSkontoTage
'Beschreibender Skonto-Text
objPmtTerm.Description = strZlgKond

objInvoice.AddPaymentTerm objPmtTerm
Set objPmtTerm = Nothing

SmartTools E-Rechnung für Access zum Aktionspreis

Alle Beispiele in diesem Beitrag beziehen sich auf SmartTools E-Rechnung für Access, dem Rundum-Sorglos-Paket, das Sie brauchen, um mit E-Rechnungen in Access arbeiten. Mit wenigen Zeilen VBA-Code können Sie E-Rechnungen nicht nur erstellen und einlesen, sondern sogar validieren und anzeigen. Unterstützt werden alle Formate (ZUGFeRD / XRechnung) und Profile des E-Rechnungsstandards inklusive des komplexen Extended-Profils. Sie erwerben eine Dauerlizenz und müssen kein Abo abschließen. Die Erweiterung kann derzeit mit 30% Aktionsrabatt bestellt werden:

Klicken Sie hier, um die News & Downloads zu bewerten