Registernummer und globale Kennungen lesen (BT-30, BT-47, BT-71)

Thema
VB.NET
SDK-Mitglieder
AddShipToTradePartyGlobalID() FillZUGFeRD_Structure() GetShipToTradeParty() GlobalID2String() GlobalIDFromString() ReadBuyerLegalID() ReadSellerLegalID() WriteShipToTradeParty()
Business Terms
BT-30 Kennung der rechtlichen Registrierung des Verkäufers BT-47 Kennung der rechtlichen Registrierung des Käufers BT-71 Kennung des Lieferorts BT-29 Kennung des Verkäufers BG-4 Verkäufer BG-7 Käufer BG-13 Lieferinformationen BT-46 Kennung des Käufers
Codebeispiele
VB.NET, XML
Veröffentlicht

E-Rechnungen identifizieren Unternehmen und Orte auf mehreren Wegen: über die Registernummer (Handelsregister o. Ä.) von Verkäufer (BT-30) und Käufer (BT-47) und über globale Kennungen wie GLN oder DUNS, etwa beim Verkäufer (BT-29) oder beim Lieferort (BT-71). Zu jeder Kennung kann ein Schema nach ISO/IEC 6523 gehören, z. B. 0088 für die GLN. Dieser Artikel zeigt, wie Sie Registernummern samt Schema auslesen, Schemacodes umwandeln und dem Lieferort eine globale Kennung geben.

Übersicht

FeldBedeutungSDK
BT-30, BT-30-1Kennung der rechtlichen Registrierung des Verkäufers und ihr SchemaReadSellerLegalID(LegalID, Schema)
BT-47, BT-47-1Kennung der rechtlichen Registrierung des Käufers und ihr SchemaReadBuyerLegalID(LegalID, Schema)
BT-71, BT-71-1Kennung des Lieferorts als globale Kennung mit SchemaAddShipToTradePartyGlobalID(IDVal, IDType)
BT-29-1, BT-46-1, BT-71-1, BT-157-1Schema einer globalen Kennung (ISO 6523)GlobalIDFromString(s)

Registernummer mit Schema lesen

Geschrieben werden die Registernummern über die Eigenschaften SellerLegalID und BuyerLegalID; das zeigt der Artikel Handelsname und Registernummer in der E-Rechnung. Beim Lesen geben diese Eigenschaften nur die Nummer zurück, nicht das Schema. ReadSellerLegalID und ReadBuyerLegalID liefern beides über Referenzparameter:

Dim alo As New Aloaha_ZUGFeRD.XML(Aloaha_ZUGFeRD.iXML.ZUGFeRDProfile.comfort, False, "IHR-LIZENZSCHLUESSEL")
If alo.FillZUGFeRD_Structure("C:\Rechnungen\eingang.xml", "IHR-LIZENZSCHLUESSEL") Then
    Dim vNummer As String = "", vSchema As String = ""
    alo.ReadSellerLegalID(vNummer, vSchema)      ' BT-30 / BT-30-1

    Dim kNummer As String = "", kSchema As String = ""
    alo.ReadBuyerLegalID(kNummer, kSchema)       ' BT-47 / BT-47-1

    Console.WriteLine("Verkäufer: " & vNummer & If(vSchema <> "", " (Schema " & vSchema & ")", ""))
    Console.WriteLine("Käufer:    " & kNummer & If(kSchema <> "", " (Schema " & kSchema & ")", ""))
End If

VBA / VB6 (COM) – deklarieren Sie die Variablen als String, sonst kann VBA sie nicht als Referenz übergeben:

Dim Nummer As String, Schema As String
alo.ReadSellerLegalID Nummer, Schema

Ist keine Registernummer vorhanden, erhalten Sie leere Zeichenketten. Für eine deutsche Handelsregisternummer wie „HRB 12345“ ist das Schema meist leer; ein Schema steht z. B. bei französischen SIREN-Nummern (0002). Das gilt für CII- und UBL-Rechnungen gleichermaßen: Bei UBL übernimmt das SDK das Schema aus dem Attribut schemeID von cac:PartyLegalEntity/cbc:CompanyID. In älteren Versionen des SDK blieb das Schema beim Einlesen einer UBL-Rechnung leer.

Schemacodes umwandeln

GlobalIDFromString wandelt einen vierstelligen ISO-6523-Code in einen Wert der Aufzählung GlobalIDSchemas um. Das ist praktisch, wenn Sie Kennungen in Ihrer Software nach Typ verarbeiten wollen:

Dim art As Aloaha_ZUGFeRD.iXML.GlobalIDSchemas = alo.GlobalIDFromString("0088")
If art = Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.GLN Then
    Console.WriteLine("Kennung ist eine GLN")
End If
' Gegenrichtung: Aufzählung -> Code
Dim code As String = alo.GlobalID2String(Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.DUNS)   ' "0060"
CodeGlobalIDSchemasBedeutung
0002SireneSIRENE (Frankreich)
0009SiretCodeSIRET (Frankreich)
0021SwiftSWIFT
0060DUNSD-U-N-S-Nummer
0088GLNGlobal Location Number (GS1)
0160EANGTIN/EAN (GS1)
0177ODETTEODETTE
0208CompanyNumberUnternehmensnummer (Belgien)

Jeder andere Text – auch ein Code ohne führende Nullen wie "88" – ergibt GlobalIDSchemas.Unknown. GlobalID2String liefert für Unknown den Text "0000".

Globale Kennung des Lieferorts (BT-71)

Hat der Lieferort eine GLN, setzen Sie sie mit AddShipToTradePartyGlobalID. Ist der zweite Parameter leer, verwendet das SDK das Schema 0088 (GLN). Ein erneuter Aufruf ersetzt den vorherigen Wert; ist die Kennung leer, passiert nichts.

alo.WriteShipToTradeParty("Musterfirma GmbH – Lager Süd", "80331", "München", "Lagerstraße 7", "", "DE")
alo.AddShipToTradePartyGlobalID("4000001123452", "0088")   ' BT-71 / BT-71-1

Ergebnis in der XML:

<ram:ShipToTradeParty>
  <ram:GlobalID schemeID="0088">4000001123452</ram:GlobalID>
  <ram:Name>Musterfirma GmbH – Lager Süd</ram:Name>
  ...
</ram:ShipToTradeParty>

Dieselbe Kennung können Sie auch über die letzten beiden Parameter von WriteShipToTradeParty (GlobalID, GlobalIDSchemeID) übergeben. Gelesen wird sie mit GetShipToTradeParty:

Dim name As String = "", plz As String = "", ort As String = "", zeile1 As String = "", zeile2 As String = ""
Dim land As String = "", ortID As String = "", ustid As String = "", leitweg As String = "", zeile3 As String = ""
Dim gid As String = "", gidSchema As String = ""
alo.GetShipToTradeParty(name, plz, ort, zeile1, zeile2, land, ortID, ustid, leitweg, zeile3, gid, gidSchema)
If alo.GlobalIDFromString(gidSchema) = Aloaha_ZUGFeRD.iXML.GlobalIDSchemas.GLN Then Console.WriteLine("GLN Lieferort: " & gid)

Die vollständige Lieferanschrift beschreibt der Artikel Lieferanschrift in der E-Rechnung.

Hinweise zu Profilen

  • BT-30 und BT-47 sind schon im Profil MINIMUM erlaubt.
  • BT-71 gibt es ab BASIC WL. Eine Lieferanschrift, die nur aus der globalen Kennung besteht, schreibt das SDK nur, wenn Kennung und Schema vorhanden sind.
  • Die globale Kennung des Verkäufers (BT-29) setzen Sie mit AddSellerGlobalID, die des Käufers (BT-46) mit AddBuyerGlobalID – siehe Kreditorennummer (BT-29).

Business Terms in diesem Artikel: BT-30 BT-47 BT-71 BT-29 BG-4 BG-7 BG-13 BT-46 BT-157 BT-70