Exemple de lecture d'un PDF factur-x
Voici un exemple qui reprend les modules expliqués précédemment, illustrant la lecture d’un PDF au format factur-x
LectureErreur : boucle sur les dernières erreurs FacturX et les affiche
AfficheDictionary : parcours toutes les listes et affiche à l'écran
DecodeFichierFacturxXML : ouvre le fichier XML pour en lire les propriétés globales,notes, les lignes, les documents,…et les mettre en listes
DecodeFichierXML :
Création d’un fichier xml vide pour reçevoir les données
Extraction des métadonnées dans le fichier xml temporaire
Etapes:
DecodeFichierXML =>on a un fichier XML qui contient les données issues du PDF
DecodeFichierFacturxXML =>transforme le fichier XML en listes+sous-listes de couples clé-valeur
AfficheDictionary => exploite les données à partir des listes
procedure LectureErreur
1 txterreur S
beginp
do
txterreur = FacturXGetErreur
while txterreur <> " "
display left(txterreur)
wend
endp
public procedure AfficheDictionary(wdictionary,decalage,ficjoint,nivficjoint)
1 wdictionary L
1 decalage 2,0
1 ficjoint x
1 nivficjoint x
1 wmot 256
1 wcle 256 = " "
1 wtxt 256
1 wdictionaryliste L
1 wsousdictionary L
1 titre 256
1 wtxt1car 1 = " "
1 countelement 6,0
1 iddir 6,0
1 AttachmentBinaryFile 256 = " "
1 AttachmentBinaryName 256 = " "
1 fic 256 = " "
beginp
if wdictionary = 0
preturn
endif
display " "
;on parcoure la liste des prorpiétés du dictionnary, le titre
;du dictionnary indique si c'est un tableau ou pas
titre = DictionaryGetName(wdictionary)
wtxt = [ *decalage "DictionaryGetName(" left(titre) ")"]
display left(wtxt)
;on lit la liste clés/valeurs du dictionnary
DictionaryBegin(wdictionary)
AttachmentBinaryFile = " "
AttachmentBinaryName = " "
fic = " "
;boucle principale
loop DictionaryNext(wdictionary,wcle,wmot)
;display clé (donc le nom de la propriété) et la valeur ou alors le nomdre d'élément du tableau
if mid(wcle,1,1) = "$"
iddir = val(wmot)
countelement = DictionaryCount(iddir)
wtxt = [ *decalage left(wcle) " count " & tostring(countelement)]
else
wtxt = [ *decalage left(wcle) "=" left(wmot)]
endif
display left(wtxt)
;ficjoint: c'est un flag juste pour dire de voir si la props
;est un fichier joints
if mid(wcle,1,1) <> "$" ;sauf si wcle est un tableau
if ficjoint
if nivficjoint = 1
if string(".AttachmentBinaryFile",wcle) <> 0
AttachmentBinaryFile = wmot ;c'est le chemin et le nom temp
fic = "c:\divalto\" & left(AttachmentBinaryName)
wincopyfile(left(AttachmentBinaryFile),fic,FALSE)
AttachmentBinaryFile = " "
AttachmentBinaryName = " "
fic = " "
elsif string(".Filename",wcle) <> 0
AttachmentBinaryName = wmot ;ca c'est le vrai nom du fichier à l'origine
endif
endif
endif
endif
;si c'est un tableau, alors on décode le tableau et
if mid(wcle,1,1) = "$"
decalage += 2 ;c'est juste pour faire joli a l'écran !
wdictionaryliste = val(wmot)
titre = DictionaryGetName(wdictionaryliste)
wtxt = [ *decalage "liste DictionaryGetName(" left(titre) ")"]
display left(wtxt)
DictionaryBegin(wdictionaryliste )
loop DictionaryNext(wdictionaryliste,wcle,wmot)
wsousdictionary = val(wmot)
AfficheDictionary(wsousdictionary,decalage,ficjoint,nivficjoint+1)
endloop
decalage -= 2
endif
endloop
endp
procedure DecodeFichierFacturxXML(fic)
1 fic A
1 ii x = 1
1 iimax x = 1
1 titre 256
1 decalage 2,0
1 dictionary L = 0
1 retour S
beginp
retour = FacturXReadOpen(left(fic)) ;open du fichier
if retour <> " " | display "erreur " & retour | LectureErreur |else | display "ok" | endif
dictionary = 0
retour = FacturXGetGlobalProps(dictionary) ;read entete taxe etc SAUF lignes detail
if retour = "1" and dictionary <> 0
decalage = 1
AfficheDictionary(dictionary,decalage,0,0)
endif
FacturXDictionaryDestroy ;supression des dictionnay crées par la fc FacturXGetGlobalProps
;optionnel, c'est si on veut traiter les notes de la facture
dictionary = 0
retour = FacturXGetGlobalNotes(dictionary) ;read notes
if retour = "1" and dictionary <> 0
decalage = 1
AfficheDictionary(dictionary,decalage,0,0)
endif
FacturXDictionaryDestroy
;optionnel, c'est si on veut traiter les documents joints de la facture
dictionary = 0
retour = FacturXGetGlobalDocumentsInFiles(dictionary) ;read document
if retour = "1" and dictionary <> 0
decalage = 1
AfficheDictionary(dictionary,decalage,1,0)
endif
FacturXDictionaryDestroy
;et on supprime les fichiers crées par la fc FacturXGetGlobalDocumentsInFiles et FacturXGetGlobalNotes
FacturXDeleteTmpFiles
do
retour = FacturXGetLineProps(dictionary) ;lecture des lignes detail
while retour = "1" and dictionary <> 0
decalage = 1
AfficheDictionary(dictionary,decalage,0,0)
FacturXDictionaryDestroy
;optionnel, c'est si on veut traiter les notes sur les ligne
retour = FacturXGetLineNotes(dictionary) ;lecture des notes de la ligne en cours
if retour = "1" and dictionary <> 0
decalage = 2
AfficheDictionary(dictionary,decalage,0,0)
FacturXDictionaryDestroy
endif
;optionnel, c'est si on veut traiter les documents joints sur les ligne
retour = FacturXGetLineDocumentsInFiles(dictionary) ;lecture des documents de la ligne en cours
if retour = "1" and dictionary <> 0
decalage = 2
AfficheDictionary(dictionary,decalage,0,0)
FacturXDictionaryDestroy
endif
;et on supprime les fichiers crées par la fc FacturXGetLinesDocumentsInFiles et FacturXGetLignesNotes
FacturXDeleteTmpFiles
wend
retour = FacturXReadClose() ;fermeture du fichier xml
if retour <> " " | display "erreur " & retour | endif
endp
procedure DecodeFichierXML
record * htdf tdfficeml
record * htdf tdf
1 fichierxml 260 = " "
1 fichierxmltxt 260 = " "
1 fichiercopiepdf 260 = " "
1 txterr 4096
1 fic 260
1 fd L
1 listxml L
1 numerofic 1,0
1 st x
1 err x
beginp
;on prend le fichier pdf qu'il faut mettre en mode local pour avoir un chemin widnows
;le mieux est de faire une copie du pdf vers un fichier temp
tdf.name = "aaafacture_nebout_125e_du_09_12_2020.pdf"
st = fopen(tdf,"P")
if st <> 0
preturn
endif
fic = tdf.name
fclose(tdf)
Tmpfcreate (tdfficeml, 2, 0)
fichiercopiepdf = GetSystemFileName(tdfficeml)
fclose(tdfficeml)
st = hcopyfile(left(fic),left(fichiercopiepdf),false,"P",false,numerofic)
if st <> 0
if fichiercopiepdf <> " " si erreur alors delete du pdf de copie
windeletefile(left(fichiercopiepdf))
endif
preturn
endif
;1- faturx il faut creer un fichier temporaire pour recevoir le fichier xml de la description de la facture
Tmpfcreate (tdfficeml, 2, 0)
fichierxml = GetSystemFileName(tdfficeml)
fclose(tdfficeml)
;2- appeler la fc d'extraction du fichier factu-x.xml qui sera ecris dans le fichier temporaire
;le fichier temporaire est effacé dans la fonction , attention il peut etre vide au final si le pdf n'a pas de metadata factur-x
;c'est le cas si un fichier pdf a été mis dans la liste des pdf a traité par erreur
err = MetaDataExtractFacturxToFile(left(fichiercopiepdf),left(fichierxml),txterr,"")
if err <> 0
display left(txterr)
else
DecodeFichierFacturxXML(fichierxml) ;on peut lire le xml
endif
if fichierxml <> " "
windeletefile(left(fichierxml))
endif
if fichiercopiepdf <> " "
windeletefile(left(fichiercopiepdf))
endif
endp
module "yPDFMetaData.dhop"
main
MetaDataOpen
;extraction factrux-x
DecodeFichierXML
MetaDataClose
programexit
cela donne un résultat de de ce type
DictionaryGetName(FACTURX_GLOBAL_PROPS)
Version=Version21
InvoiceNo=InvoiceNo
InvoiceDate=20230301
Currency=EUR
IsTest=False
Profile=Extended
Type=Invoice
PaymentReference=PaymentReference
Buyer.OrderReferenceDocument.OrderNo=Buyer.OrderReferenceDocument.OrderNo
Buyer.OrderReferenceDocument.OrderDate=20230309
ActualDeliveryDate=20230308
ReferenceOrderNo=ReferenceOrderNo
LineTotalAmount=123,00
ChargeTotalAmount=126,00
AllowanceTotalAmount=127,00
TaxBasisAmount=124,00
TaxTotalAmount=125,00
GrandTotalAmount=128,00
TotalPrepaidAmount=129,00
RoundingAmount=130,00
DuePayableAmount=131,00
BillingPeriodStart=20230306
BillingPeriodEnd=20230307
Invoicee.Party.GlobalID.ID=Invoicee.Party.GlobalID.ID
Invoicee.Party.GlobalID.SchemeID=Invoicee.Party.GlobalID.SchemeID
Invoicee.Party.Id=Invoicee.Party.Id
Invoicee.Party.Name=Invoicee.Party.Name
Invoicee.Party.Street=Invoicee.Party.Street
Invoicee.Party.Postcode=Invoicee.Party.Postcode
Invoicee.Party.City=Invoicee.Party.City
Invoicee.Party.Contry=DE
Invoicee.Party.ContactName=Invoicee.Party.ContactName
Invoicee.Party.AddressLine3=Invoicee.Party.AddressLine3
Invoicee.Party.CountrySubdivisionName=Invoicee.Party.CountrySubdivisionName
ShipTo.Party.GlobalID.ID=ShipTo.Party.GlobalID.ID
ShipTo.Party.GlobalID.SchemeID=ShipTo.Party.GlobalID.SchemeID
ShipTo.Party.Id=ShipTo.Party.Id
ShipTo.Party.Name=ShipTo.Party.Name
ShipTo.Party.Street=ShipTo.Party.Street
ShipTo.Party.Postcode=ShipTo.Party.Postcode
ShipTo.Party.City=ShipTo.Party.City
ShipTo.Party.Contry=DE
ShipTo.Party.ContactName=ShipTo.Party.ContactName
ShipTo.Party.AddressLine3=ShipTo.Party.AddressLine3
ShipTo.Party.CountrySubdivisionName=ShipTo.Party.CountrySubdivisionName
Payee.Party.GlobalID.ID=Payee.Party.GlobalID.ID
Payee.Party.GlobalID.SchemeID=Payee.Party.GlobalID.SchemeID
Payee.Party.Id=Payee.Party.Id
Payee.Party.Name=Payee.Party.Name
Payee.Party.Street=Payee.Party.Street
Payee.Party.Postcode=Payee.Party.Postcode
Payee.Party.City=Payee.Party.City
Payee.Party.Contry=ES
Payee.Party.ContactName=Payee.Party.ContactName
Payee.Party.AddressLine3=Payee.Party.AddressLine3
Payee.Party.CountrySubdivisionName=Payee.Party.CountrySubdivisionName
ShipFrom.Party.GlobalID.ID=ShipFrom.Party.GlobalID.ID
ShipFrom.Party.GlobalID.SchemeID=ShipFrom.Party.GlobalID.SchemeID
ShipFrom.Party.Id=ShipFrom.Party.Id
ShipFrom.Party.Name=ShipFrom.Party.Name
ShipFrom.Party.Street=ShipFrom.Party.Street
ShipFrom.Party.Postcode=ShipFrom.Party.Postcode
ShipFrom.Party.City=ShipFrom.Party.City
ShipFrom.Party.Contry=GB
ShipFrom.Party.ContactName=ShipFrom.Party.ContactName
ShipFrom.Party.AddressLine3=ShipFrom.Party.AddressLine3
ShipFrom.Party.CountrySubdivisionName=ShipFrom.Party.CountrySubdivisionName
Buyer.Party.GlobalID.ID=Buyer.Party.GlobalID.ID
Buyer.Party.GlobalID.SchemeID=Buyer.Party.GlobalID.SchemeID
Buyer.Party.Id=Buyer.Party.Id
Buyer.Party.Name=Buyer.Party.Name
Buyer.Party.Street=Buyer.Party.Street
Buyer.Party.Postcode=Buyer.Party.Postcode
Buyer.Party.City=Buyer.Party.City
Buyer.Party.Contry=ET
Buyer.Party.ContactName=Buyer.Party.ContactName
Buyer.Party.AddressLine3=Buyer.Party.AddressLine3
Buyer.Party.CountrySubdivisionName=Buyer.Party.CountrySubdivisionName
Buyer.Contact.Name=Buyer.Contact.Name
Buyer.Contact.Orgunit=Buyer.Contact.Orgunit
Buyer.Contact.Emailaddress=Buyer.Contact.Emailaddress
Buyer.Contact.PhonNo=Buyer.Contact.PhonNo
Buyer.Contact.FaxNo=Buyer.Contact.FaxNo
Seller.Party.GlobalID.ID=Seller.Party.GlobalID.ID
Seller.Party.GlobalID.SchemeID=Seller.Party.GlobalID.SchemeID
Seller.Party.Id=Seller.Party.Id
Seller.Party.Name=Seller.Party.Name
Seller.Party.Street=Seller.Party.Street
Seller.Party.Postcode=Seller.Party.Postcode
Seller.Party.City=Seller.Party.City
Seller.Party.Contry=FI
Seller.Party.AddressLine3=Seller.Party.AddressLine3
Seller.Party.CountrySubdivisionName=Seller.Party.CountrySubdivisionName
Seller.Contact.Name=Seller.Contact.Name
Seller.Contact.Orgunit=Seller.Contact.OrgUnit
Seller.Contact.Emailaddress=Seller.Contact.Emailaddress
Seller.Contact.PhonNo=Seller.Contact.PhonNo
Seller.Contact.FaxNo=Seller.Contact.FaxNo
PaymentTerms.Description=PaymentTerms.Description
PaymentTerms.DueDate=20230310
PaymentMeans.TypeCode=Cheque
PaymentMeans.Information=PaymentMeans.Information
PaymentMeans.SEPACreditorIdentifier=PaymentMeans.IdentifikationsNummer
PaymentMeans.SEPAMandateReference=PaymentMeans.MandatsNummer
DeliveryNoteReferencedDocument.ID=DeliveryNoteReferenceDocumentdeliveryNote.No
DeliveryNoteReferencedDocumentdt.IssueDateTime=20230304
ContractReferencedDocument.ID=ContractReferencedDocument.ID
ContractReferencedDocumentdt.IssueDateTime=20230302
InvoiceReferencedDocument.ID=InvoiceReferencedDocumentID
InvoiceReferencedDocument.IssueDateTime=20230305
SpecifiedProcuringProject.ID=SpecifiedProcuringProject.ID
SpecifiedProcuringProject.Name=SpecifiedProcuringProject.Name
SellerOrderReferencedDocument.ID=SellerOrderReferencedDocument.ID
SellerOrderReferencedDocument.IssueDateTime=20230303
$Taxes count 2
liste DictionaryGetName(FACTURX_$TAXES)
DictionaryGetName(FACTURX_TAXE_1)
Taxe.AllowanceChargeBasisAmount=0
Taxe.BasisAmount=500,00
Taxe.CategoryCode=AD
Taxe.ExemptionReason=ExemptionReason
Taxe.ExemptionReasonCode=vatex_eu_132_1k
Taxe.Percent=19,00
Taxe.TaxAmount=95,000000
Taxe.TypeCode=VAT
DictionaryGetName(FACTURX_TAXE_2)
Taxe.AllowanceChargeBasisAmount=0
Taxe.BasisAmount=400,00
Taxe.CategoryCode=AD
Taxe.ExemptionReason=
Taxe.Percent=33,00
Taxe.TaxAmount=132,000000
Taxe.TypeCode=VAT
$LogisticsServiceCharges count 1
liste DictionaryGetName(FACTURX_$LOGISTICSSERVICECHARGES)
DictionaryGetName(FACTURX_LOGISTICSSERVICECHARGE_1)
Charge.Amount=0,00
Charge.Description=Description
$Taxes count 1
liste DictionaryGetName(FACTURX_$TAXES)
DictionaryGetName(FACTURX_TAXE_1)
Taxe.AllowanceChargeBasisAmount=0
Taxe.BasisAmount=0
Taxe.CategoryCode=AD
Taxe.Percent=0,00
Taxe.TaxAmount=0,0000
Taxe.TypeCode=AAD
$Creditor.BankAccounts count 2
liste DictionaryGetName(FACTURX_$CREDITOR.BANKACCOUNTS)
DictionaryGetName(FACTURX_CREDITOR.BANKACCOUNT_1)
BankAccount.Bankleitzahl=
BankAccount.BankName=
BankAccount.BIC=BIC21
BankAccount.IBAN=IBAN21
BankAccount.ID=ID21
BankAccount.Name=Name21
DictionaryGetName(FACTURX_CREDITOR.BANKACCOUNT_2)
BankAccount.Bankleitzahl=
BankAccount.BankName=
BankAccount.BIC=BIC22
BankAccount.IBAN=IBAN22
BankAccount.ID=ID22
BankAccount.Name=Name22
$Debitor.BankAccounts count 1
liste DictionaryGetName(FACTURX_$DEBITOR.BANKACCOUNTS)
DictionaryGetName(FACTURX_DEBITOR.BANKACCOUNT_1)
BankAccount.Bankleitzahl=
BankAccount.BankName=
BankAccount.BIC=BIC23
BankAccount.IBAN=IBAN23
BankAccount.ID=ID23
$Buyer.TaxRegistrations count 3
liste DictionaryGetName(FACTURX_$BUYER.TAXREGISTRATIONS)
DictionaryGetName(FACTURX_BUYER.TAXREGISTRATION_1)
TaxRegistration.No=No1
TaxRegistration.SchemeID=VA
DictionaryGetName(FACTURX_BUYER.TAXREGISTRATION_2)
TaxRegistration.No=No2
TaxRegistration.SchemeID=VA
DictionaryGetName(FACTURX_BUYER.TAXREGISTRATION_3)
TaxRegistration.No=No3
TaxRegistration.SchemeID=FC
$Seller.TaxRegistrations count 3
liste DictionaryGetName(FACTURX_$SELLER.TAXREGISTRATIONS)
DictionaryGetName(FACTURX_SELLER.TAXREGISTRATION_1)
TaxRegistration.No=No11
TaxRegistration.SchemeID=VA
DictionaryGetName(FACTURX_SELLER.TAXREGISTRATION_2)
TaxRegistration.No=No12
TaxRegistration.SchemeID=FC
DictionaryGetName(FACTURX_SELLER.TAXREGISTRATION_3)
TaxRegistration.No=No13
TaxRegistration.SchemeID=VA
DictionaryGetName(FACTURX_GLOBAL_NOTES)
$Notes count 2
liste DictionaryGetName(FACTURX_$NOTES)
DictionaryGetName(FACTURX_NOTE_1)
Note.Content=note1 < >
Note.ContentCode=ST3
Note.SubjectCode=AAK
DictionaryGetName(FACTURX_NOTE_2)
Note.Content=note2 < >
Note.ContentCode=EEV
Note.SubjectCode=AAJ
DictionaryGetName(FACTURX_GLOBAL_DOCUMENTS)
$AdditionalReferencedDocuments count 1
liste DictionaryGetName(FACTURX_$ADDITIONALREFERENCEDDOCUMENTS)
DictionaryGetName(FACTURX_ADDITIONALREFERENCEDDOCUMENT_1)
AdditionalReferencedDocument.Filename=testzero.xlsx
AdditionalReferencedDocument.ID=A123
AdditionalReferencedDocument.IssueDateTime=20230317
AdditionalReferencedDocument.Name=testzero
AdditionalReferencedDocument.ReferenceTypeCode=AAB
AdditionalReferencedDocument.TypeCode=PriceSalesCatalogueResponse
AdditionalReferencedDocument.AttachmentBinaryFile=C:\Users\jpthorrignac\AppData\Local\Temp\tmpD012.tmp
DictionaryGetName(FACTURX_LINE)
Line.LineID=1
Line.GlobalID.ID=4123456000021
Line.GlobalID.SchemeID=SchemeID_GLN
Line.SellerAssigned.ID=GZ250
Line.BuyerAssigned.ID=20232202-3
Line.Name=Gelierzucker Extra 250g
Line.Description=testDescription
Line.UnitQuantity=1
Line.BilledQuantity=50,0000
Line.LineTotalAmount=72,50
Line.BillingPeriodEnd=20230225
Line.BillingPeriodStart=20230202
Line.TaxCategoryCode=S
Line.TaxPercent=7,00
Line.TaxType=VAT
Line.GrossUnitPrice=0,0000
Line.NetUnitPrice=1,4500
Line.UnitCode=C62
Line.ActualDeliveryDate=20230312
Line.BuyerOrderReferencedDocument.ID=20232202-4
Line.BuyerOrderReferencedDocument.IssueDateTime=20230311
Line.DeliveryNoteReferencedDocument.ID=20232202-4
Line.DeliveryNoteReferencedDocument.IssueDateTime=20230310
$Line.TradeAllowanceCharges count 2
liste DictionaryGetName(FACTURX_$LINE.TRADEALLOWANCECHARGES)
DictionaryGetName(FACTURX_LINE.TRADEALLOWANCECHARGE_1)
TradeAllowanceCharge.ActualAmount=0,03
TradeAllowanceCharge.Amount=0
TradeAllowanceCharge.BasisAmount=1,50
TradeAllowanceCharge.ChargeIndicator=False
TradeAllowanceCharge.Currency=Unknown
TradeAllowanceCharge.Reason=Artikelrabatt 1
TradeAllowanceCharge.ReasonCode=ReasonCode_1
$Taxes count 1
liste DictionaryGetName(FACTURX_$TAXES)
DictionaryGetName(FACTURX_TAXE_1)
Taxe.AllowanceChargeBasisAmount=0
Taxe.BasisAmount=1,50
Taxe.CategoryCode=AD
Taxe.ExemptionReason=Taxe.ExemptionReason
Taxe.ExemptionReasonCode=vatex_eu_132_1k
Taxe.Percent=0,00
Taxe.TaxAmount=0,000000
Taxe.TypeCode=VAT
DictionaryGetName(FACTURX_TAXE_2)
TradeAllowanceCharge.ActualAmount=2,03
TradeAllowanceCharge.Amount=0
TradeAllowanceCharge.BasisAmount=2,50
TradeAllowanceCharge.ChargeIndicator=False
TradeAllowanceCharge.Currency=Unknown
TradeAllowanceCharge.Reason=Artikelrabatt 1
TradeAllowanceCharge.ReasonCode=ReasonCode_2
$Line.ReceivableSpecifiedTradeAccountingAccounts count 2
liste DictionaryGetName(FACTURX_$LINE.RECEIVABLESPECIFIEDTRADEACCOUNTINGACCOUNTS)
DictionaryGetName(FACTURX_LINE.RECEIVABLESPECIFIEDTRADEACCOUNTINGACCOUNT_1)
ReceivableSpecifiedTradeAccountingAccount.ID=987654321
ReceivableSpecifiedTradeAccountingAccount.TypeCode=Financial
DictionaryGetName(FACTURX_LINE.RECEIVABLESPECIFIEDTRADEACCOUNTINGACCOUNT_2)
ReceivableSpecifiedTradeAccountingAccount.ID=10000000
ReceivableSpecifiedTradeAccountingAccount.TypeCode=Financial
DictionaryGetName(FACTURX_LINE)
Line.AssociatedDocumentLine.ID=1
$Line.Notes count 3
liste DictionaryGetName(FACTURX_$LINE.NOTES)
DictionaryGetName(FACTURX_LINE.NOTE_1)
Note.Content=ligne comment
Note.ContentCode=Unknown
Note.SubjectCode=Unknown
DictionaryGetName(FACTURX_LINE.NOTE_2)
Note.Content=note3 < >
Note.ContentCode=ST3
Note.SubjectCode=AAK
DictionaryGetName(FACTURX_LINE.NOTE_3)
Note.Content=note4 < >
Note.ContentCode=EEV
Note.SubjectCode=AAJ
DictionaryGetName(FACTURX_LINE)
$Line.AdditionalReferencedDocuments count 1
liste DictionaryGetName(FACTURX_$LINE.ADDITIONALREFERENCEDDOCUMENTS)
DictionaryGetName(FACTURX_LINE.ADDITIONALREFERENCEDDOCUMENT_1)
AdditionalReferencedDocument.Filename=
AdditionalReferencedDocument.ID=A123
AdditionalReferencedDocument.IssueDateTime=20230313
AdditionalReferencedDocument.Name=
AdditionalReferencedDocument.ReferenceTypeCode=AAA
AdditionalReferencedDocument.TypeCode=ReferenceDocument
DictionaryGetName(FACTURX_LINE)
Line.LineID=2
Line.GlobalID.ID=4123456000021
Line.GlobalID.SchemeID=SchemeID_GLN
Line.SellerAssigned.ID=GZ250
Line.BuyerAssigned.ID=
Line.Name=bis Extra 250g
Line.Description=Description bis Extra 250g
Line.UnitQuantity=1
Line.BilledQuantity=50,0000
Line.LineTotalAmount=72,50
Line.BillingPeriodEnd=20230321
Line.BillingPeriodStart=20230320
Line.TaxCategoryCode=S
Line.TaxPercent=19,00
Line.TaxType=VAT
Line.GrossUnitPrice=0,0000
Line.NetUnitPrice=1,4500
Line.UnitCode=C62
Line.ActualDeliveryDate=20230316
Line.BuyerOrderReferencedDocument.ID=20231801-30
Line.BuyerOrderReferencedDocument.IssueDateTime=20230302
Line.ContractReferencedDocument.ID=20231801-1
Line.ContractReferencedDocument.IssueDateTime=20230302
$Line.TradeAllowanceCharges count 2
liste DictionaryGetName(FACTURX_$LINE.TRADEALLOWANCECHARGES)
DictionaryGetName(FACTURX_LINE.TRADEALLOWANCECHARGE_1)
TradeAllowanceCharge.ActualAmount=0,03
TradeAllowanceCharge.Amount=0
TradeAllowanceCharge.BasisAmount=102,00
TradeAllowanceCharge.ChargeIndicator=False
TradeAllowanceCharge.Currency=Unknown
TradeAllowanceCharge.Reason=Artikelrabatt 1
TradeAllowanceCharge.ReasonCode=ReasonCode_3
$Taxes count 1
liste DictionaryGetName(FACTURX_$TAXES)
DictionaryGetName(FACTURX_TAXE_1)
Taxe.AllowanceChargeBasisAmount=0
Taxe.BasisAmount=102,00
Taxe.CategoryCode=AD
Taxe.ExemptionReason=Taxe.ExemptionReason
Taxe.ExemptionReasonCode=vatex_eu_132_1k
Taxe.Percent=0,00
Taxe.TaxAmount=0,000000
Taxe.TypeCode=VAT
DictionaryGetName(FACTURX_TAXE_2)
TradeAllowanceCharge.ActualAmount=2,03
TradeAllowanceCharge.Amount=0
TradeAllowanceCharge.BasisAmount=101,00
TradeAllowanceCharge.ChargeIndicator=False
TradeAllowanceCharge.Currency=Unknown
TradeAllowanceCharge.Reason=Artikelrabatt 1
TradeAllowanceCharge.ReasonCode=ReasonCode_4
$Line.ApplicableProductCharacteristics count 1
liste DictionaryGetName(FACTURX_$LINE.APPLICABLEPRODUCTCHARACTERISTICS)
DictionaryGetName(FACTURX_LINE.APPLICABLEPRODUCTCHARACTERISTIC_1)
ApplicableProductCharacteristic.Description=Description
ApplicableProductCharacteristic.Value=Value
DictionaryGetName(FACTURX_LINE)
Line.AssociatedDocumentLine.ID=2
$Line.Notes count 1
liste DictionaryGetName(FACTURX_$LINE.NOTES)
DictionaryGetName(FACTURX_LINE.NOTE_1)
Note.Content=note5 < >
Note.ContentCode=ST3
Note.SubjectCode=AAK