Das ging jetzt recht schnell zu implementieren, aber eine Sache konnte ich nicht herausfinden: Es ist verpflichtend eine nicht-leere Leitweg-ID eingezugeben, aber wenn ich eine Rechnung an ein Privatunternehmen oder einen Privatverbraucher schicke, habe ich die nicht. Was trägt man da ein? Man kann da natürlich 'nen lustigen Spruch oder so eintragen, aber das ist ja nicht Sinn der Sache.
Ich meine, einen Bug in der Bibliothek gefunden zu haben: Es gibt einige optionale Felder, die leer ausgegeben werden, wenn sie leer sind. Das Ausgeben leerer Felder führt
immer immer zu einem ungültigen Dokument als Ergebnis. Das ist besonders dann ärgerlich, wenn das Feld optional ist, also gar nicht bereitgestellt werden muss. Das sind zum Beispiel
<cac:AccountingCustomerParty><cac:Party><cac:Contact>
und alle drei möglichen Kinder – das Motto ist offiziell: alles kann, nichts muss.
Falsch:
Delphi-Quellcode:
with AddChild('cac:Contact') do
begin
AddChild('cbc:Name').Text := _Invoice.AccountingCustomerParty.ContactName;
AddChild('cbc:Telephone').Text := _Invoice.AccountingCustomerParty.ContactTelephone;
AddChild('cbc:ElectronicMail').Text := _Invoice.AccountingCustomerParty.ContactElectronicMail;
end;
Richtig:
Delphi-Quellcode:
if (_Invoice.AccountingCustomerParty.ContactName <> '') or (_Invoice.AccountingCustomerParty.ContactTelephone <> '') or (_Invoice.AccountingCustomerParty.ContactElectronicMail <> '') then
with AddChild('cac:Contact') do
begin
if _Invoice.AccountingCustomerParty.ContactName <> '' then
AddChild('cbc:Name').Text := _Invoice.AccountingCustomerParty.ContactName;
if _Invoice.AccountingCustomerParty.ContactTelephone <> '' then
AddChild('cbc:Telephone').Text := _Invoice.AccountingCustomerParty.ContactTelephone;
if _Invoice.AccountingCustomerParty.ContactElectronicMail <> '' then
AddChild('cbc:ElectronicMail').Text := _Invoice.AccountingCustomerParty.ContactElectronicMail;
end;
Achtung: Betrifft nur AccountingCustomerParty – bei AccountingSupplierParty sind alle drei Knoten und der Elternknoten verpflichtend!