Einzelnen Beitrag anzeigen

Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.051 Beiträge
 
Delphi 2009 Professional
 
#69

AW: Wie sieht die Zukunft mit XRechnung, ZUGFerD, Peppol und Co. aus ?

  Alt 30. Mai 2024, 18:44
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!
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat