PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV (earlier versions) → Boucle dans un fichier xml
Boucle dans un fichier xml
Started by Alain G., Sep., 02 2024 12:14 PM - 3 replies
Registered member
10 messages
Posted on September, 02 2024 - 12:14 PM
Bonjour,

Je dois coder une boucle dans un fichier xml afin de lister les différents taux de tva dans une facture. Pour ce faire j'ai créé un fichier avec les lignes de la facture totalisées par pourcentage de tva. J'ai donc procédé à la lecture du fichier.
Voici le résultat de ma programmation

<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">9.92</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">47.23</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">9.92</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID/>
<cbc:Percent>21</cbc:Percent>
<cbc:TaxExemptionReasonCode/>
<cbc:TaxExemptionReason/>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>


Voici le bout de code créé

HLitPremier(TEMPTAUXLIGNEFAC,TAUXTVAFACTURE)
TANTQUE PAS HEnDehors(TEMPTAUXLIGNEFAC)
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cbc:TaxableAmount' = TEMPTAUXLIGNEFAC.BASETVAFACTURE //MONTANT BASE TVA POUR CE TAUX
xAttribut.Nom = "currencyID"
xAttribut..Valeur = "EUR"
Ajoute(el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cbc:TaxableAmount'..Attribut,xAttribut)
gmoCalcpartauxtva = Arrondi(TEMPTAUXLIGNEFAC.BASETVAFACTURE * (TEMPTAUXLIGNEFAC.TAUXTVAFACTURE / 100),2)
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cbc:TaxAmount'= gmoCalcpartauxtva // MONTANT TVA POUR CE TAUX
xAttribut.Nom = "currencyID"
xAttribut..Valeur = "EUR"
Ajoute(el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cbc:TaxAmount'..Attribut,xAttribut)
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cac:TaxCategory'.'cbc:ID' = "" //CODE DE LA TVA POUR CE TAUX
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cac:TaxCategory'.'cbc:Percent' = TEMPTAUXLIGNEFAC.TAUXTVAFACTURE //POURCENTAGE DE TVA POUR CE TAUX
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cac:TaxCategory'.'cbc:TaxExemptionReasonCode' = "" //CODE POUR EXEMPTION POUR CE TAUX
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cac:TaxCategory'.'cbc:TaxExemptionReason' = "" //MOTIF POUR EXEMPTION POUR CE TAUX
el_invoice.'cac:TaxTotal'.'cac:TaxSubtotal'.'cac:TaxCategory'.'cac:TaxScheme'.'cbc:ID' = "VAT"
HLitSuivant(TEMPTAUXLIGNEFAC,TAUXTVAFACTURE)
FIN


Voici le message d'erreur que j'obtiens

L'attribut 'currencyID' existe déjà dans le noeud.
Deux attributs portant le même nom et le même namespace ne peuvent exister au sein d'un même noeud.

Pile des appels :
Procédure locale Facture_électronique (FEN_TEST_FACTURATION_ELECTRONIQUE.PROCEDURE.Facture_électronique), ligne 243
Clic sur BTN_TEST (FEN_TEST_FACTURATION_ELECTRONIQUE.BTN_TEST), ligne 1

Date : 02/09/2024 11:01:28
Projet : facture2 (26.011)

Informations supplémentaires :
Code erreur : 40034
Module : wd260xml.dll (01F260101d - 26.0.276.2)

Informations de débogage :
Fonction (0,191)
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <458752>


Pouvez-vous m'aider à créer cette boucle ?
Merci d'avance.

Alain
Registered member
4,065 messages
Popularité : +227 (347 votes)
Posted on September, 02 2024 - 10:02 PM
Bonjour,
As-tu pensé à la sérialisation pour obtenir ton XML ?

--
Il y a peut être plus simple, mais, ça tourne
Registered member
10 messages
Posted on September, 03 2024 - 10:33 AM
Bonjour et merci pour la réponse.

Je n'ai jamais utilisé la sérialisation.
J'ai un peu regardé la fonction mais je ne vois pas comment l'appliquer dans ce cas.
J'ai déjà presque pu résoudre mes problèmes de fichier xml avec l'aide d'un membre du groupe et je ne désire pas tout recommencer à zéro sauf si c'est très facile (ce dont je doute).

Je suis donc à la recherche d'une solution s'intégrant dans mon code actuel.

Bonne journée,

Alain
Registered member
10 messages
Posted on September, 04 2024 - 1:00 PM
Bonjour à tous,

Mon problème est réglé. Merci de m'avoir répondu.

Alain