...
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
Bloc de code | ||||
---|---|---|---|---|
| ||||
procedure LectureErreur 1 txterreur S beginp do txterreur = FacturXGetErreur while txterreur <> " " display left(txterreur) wend endp public procedure DecodeFichierFacturxXML(ficAfficheDictionary(wdictionary,decalage,ficjoint,nivficjoint) 1 fic A 1 ii x =wdictionary L 1 1 iimax decalage x =2,0 1 1 ficjoint titre 256x 1 decalagenivficjoint x 2,0 1 dictionarywmot L256 = 0 1 retour S beginp1 wcle retour256 = 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 " " 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
Bloc de code | ||
---|---|---|
| ||
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 |