<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://codes.maison-des-mineraux.org/spip.php?page=backend.xslt" ?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>&lt;CODES&gt;&lt;/CODES&gt;</title>
	<link>https://codes.maison-des-mineraux.org/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://codes.maison-des-mineraux.org/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Correction TVA fournisseur pour association non assujettie</title>
		<link>https://codes.maison-des-mineraux.org/spip.php?article5</link>
		<guid isPermaLink="true">https://codes.maison-des-mineraux.org/spip.php?article5</guid>
		<dc:date>2026-05-27T09:06:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;Nous sommes une association non assujettie &#224; la TVA. &lt;br class='autobr' /&gt;
Dans Dolibarr, certaines factures fournisseurs 2025 ont &#233;t&#233; saisies avec un taux de TVA sup&#233;rieur &#224; 0 %. Comptablement, la TVA ne doit pas &#234;tre ventil&#233;e dans un compte de TVA d&#233;ductible. Le montant TTC doit &#234;tre comptabilis&#233; directement en charge. &lt;br class='autobr' /&gt;
Objectif : &lt;br class='autobr' /&gt; Avant : total_ht = montant HT tva = montant TVA total_ttc = montant TTC &lt;br class='autobr' /&gt;
Apr&#232;s : total_ht = montant TTC tva = 0 total_ttc = montant TTC tva_tx = 0 (&#8230;)&lt;/p&gt;


-
&lt;a href="https://codes.maison-des-mineraux.org/spip.php?rubrique2" rel="directory"&gt;Astuces Dolibarr&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Nous sommes une association non assujettie &#224; la TVA.&lt;/p&gt;
&lt;p&gt;Dans Dolibarr, certaines factures fournisseurs 2025 ont &#233;t&#233; saisies avec un taux de TVA sup&#233;rieur &#224; 0 %. &lt;br class='autobr' /&gt;
Comptablement, la TVA ne doit pas &#234;tre ventil&#233;e dans un compte de TVA d&#233;ductible. &lt;br class='autobr' /&gt;
Le montant TTC doit &#234;tre comptabilis&#233; directement en charge.&lt;/p&gt;
&lt;p&gt;Objectif :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;Avant : total_ht = montant HT tva = montant TVA total_ttc = montant TTC Apr&#232;s : total_ht = montant TTC tva = 0 total_ttc = montant TTC tva_tx = 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Attention : faire une sauvegarde avant toute modification&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;CREATE TABLE backup_facture_fourn_2025 AS SELECT * FROM llx_facture_fourn; CREATE TABLE backup_facture_fourn_det_2025 AS SELECT * FROM llx_facture_fourn_det;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1. Identifier les lignes fournisseurs avec TVA en 2025&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;SELECT f.rowid, f.ref, fd.rowid AS ligne, fd.tva_tx, fd.total_ht, fd.tva, fd.total_ttc, fd.multicurrency_total_ht, fd.multicurrency_total_tva, fd.multicurrency_total_ttc FROM llx_facture_fourn f JOIN llx_facture_fourn_det fd ON fd.fk_facture_fourn = f.rowid WHERE fd.tva_tx &gt; 0 AND YEAR(f.datef) = 2025 ORDER BY f.ref;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Corriger les lignes de facture fournisseur&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;UPDATE llx_facture_fourn_det fd JOIN llx_facture_fourn f ON f.rowid = fd.fk_facture_fourn SET fd.tva_tx = 0, fd.vat_src_code = '', fd.total_ht = fd.total_ttc, fd.tva = 0, fd.total_localtax1 = 0, fd.total_localtax2 = 0, fd.localtax1_tx = 0, fd.localtax2_tx = 0, fd.multicurrency_total_ht = fd.multicurrency_total_ttc, fd.multicurrency_total_tva = 0 WHERE fd.tva_tx &gt; 0 AND YEAR(f.datef) = 2025;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Corriger les ent&#234;tes de factures fournisseurs&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;UPDATE llx_facture_fourn f SET f.total_ht = f.total_ttc, f.total_tva = 0, f.localtax1 = 0, f.localtax2 = 0, f.multicurrency_total_ht = f.multicurrency_total_ttc, f.multicurrency_total_tva = 0 WHERE YEAR(f.datef) = 2025 AND ( f.total_tva &lt;&gt; 0 OR f.total_ht &lt;&gt; f.total_ttc OR f.multicurrency_total_tva &lt;&gt; 0 OR f.multicurrency_total_ht &lt;&gt; f.multicurrency_total_ttc );&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;4. Contr&#244;ler les lignes restantes avec TVA&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;SELECT f.ref, fd.rowid AS ligne, fd.tva_tx, fd.total_ht, fd.tva, fd.total_ttc FROM llx_facture_fourn f JOIN llx_facture_fourn_det fd ON fd.fk_facture_fourn = f.rowid WHERE YEAR(f.datef) = 2025 AND ( fd.tva_tx &gt; 0 OR fd.tva &lt;&gt; 0 ) ORDER BY f.ref;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;5. Contr&#244;ler les ent&#234;tes restantes avec TVA&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='sql spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;SELECT ref, datef, total_ht, total_tva, total_ttc, multicurrency_total_ht, multicurrency_total_tva, multicurrency_total_ttc FROM llx_facture_fourn WHERE YEAR(datef) = 2025 AND ( total_tva &lt;&gt; 0 OR total_ht &lt;&gt; total_ttc OR multicurrency_total_tva &lt;&gt; 0 OR multicurrency_total_ht &lt;&gt; multicurrency_total_ttc );&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; La colonne de TVA dans les lignes fournisseur est [tva] et non [total_tva].&lt;/li&gt;&lt;li&gt; Le champ [fk_code_ventilation] n'a pas &#233;t&#233; modifi&#233;.&lt;/li&gt;&lt;li&gt; Si [fk_code_ventilation = 0], cela signifie g&#233;n&#233;ralement qu'aucune ventilation comptable sp&#233;cifique n'est d&#233;finie sur la ligne.&lt;/li&gt;&lt;li&gt; Apr&#232;s correction, les &#233;critures comptables peuvent &#234;tre g&#233;n&#233;r&#233;es sans ventilation sur la TVA d&#233;ductible.&lt;/li&gt;&lt;li&gt; &#192; tester imp&#233;rativement sur une copie de la base avant application en production.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Passage php 8.0 : erreur avec le filtre |moins</title>
		<link>https://codes.maison-des-mineraux.org/spip.php?article3</link>
		<guid isPermaLink="true">https://codes.maison-des-mineraux.org/spip.php?article3</guid>
		<dc:date>2025-02-27T23:14:06Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;En passant de la version php de 7.3 &#224; 8.0 j'ai rencontr&#233; un probl&#232;me avec les filtres d'op&#233;ration |plus, |moins, etc. &lt;br class='autobr' /&gt;
L'erreur &#034;Unsupported operand types : string - string&#034; se produit dans SPIP lorsque des op&#233;rations math&#233;matiques sont effectu&#233;es sur des valeurs non num&#233;riques. &lt;br class='autobr' /&gt;
&#9888;&#65039; PHP 8 est plus strict que PHP 7 sur les op&#233;rations math&#233;matiques. &lt;br class='autobr' /&gt;
Pourquoi cette erreur ? &lt;br class='autobr' /&gt;
Elle est souvent caus&#233;e par une variable qui contient une cha&#238;ne vide (&#034;&#034;) ou un texte non num&#233;rique au lieu d'un (&#8230;)&lt;/p&gt;


-
&lt;a href="https://codes.maison-des-mineraux.org/spip.php?rubrique1" rel="directory"&gt;Astuces / spip&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;En passant de la version php de 7.3 &#224; 8.0 j'ai rencontr&#233; un probl&#232;me avec les filtres d'op&#233;ration &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|plus&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|moins&lt;/code&gt;, etc.&lt;/p&gt;
&lt;p&gt;L'erreur &#034;Unsupported operand types : string - string&#034; se produit dans SPIP lorsque des op&#233;rations math&#233;matiques sont effectu&#233;es sur des valeurs non num&#233;riques.&lt;/p&gt;
&lt;p&gt;&#9888;&#65039; PHP 8 est plus strict que PHP 7 sur les op&#233;rations math&#233;matiques.&lt;/p&gt;
&lt;p&gt;Pourquoi cette erreur ?&lt;/p&gt;
&lt;p&gt;Elle est souvent caus&#233;e par une variable qui contient une cha&#238;ne vide (&#034;&#034;) ou un texte non num&#233;rique au lieu d'un nombre.&lt;/p&gt;
&lt;p&gt;Dans SPIP, cette erreur peut venir d'une op&#233;ration comme :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#VALEUR|moins{#AUTRE_VALEUR})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#SET{resultat, #VALEUR|moins{#AUTRE_VALEUR}})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si #VALEUR ou #AUTRE_VALEUR n'est pas un nombre, PHP 8 plante.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mon probl&#232;me initial&lt;/h2&gt;
&lt;p&gt;Dans mon cas, voici la portion de code identifi&#233;e comme probl&#233;matique :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{delta2,#GET{ca_jour_cette_annee}|moins{#GET{ca_jour_annee_moins_2}}} #GET{delta2} &#8364; #SET{pourcentage,#GET{delta2}|div{#GET{ca_jour_annee_moins_2}}|mult{100}|round{2}} &lt;/br&gt;#GET{pourcentage} % &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Solution : rajouter le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|floatval&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;floatval transforme &#034;&#034; (cha&#238;ne vide) ou NULL en 0.0, &#233;vitant ainsi l'erreur.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{delta2,#GET{ca_jour_cette_annee}|floatval|moins{#GET{ca_jour_annee_moins_2}|floatval}} #GET{delta2} &#8364; #SET{pourcentage,#GET{delta2}|div{#GET{ca_jour_annee_moins_2}|floatval}|mult{100}|round{2}} &lt;/br&gt;#GET{pourcentage} % &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Cas tr&#232;s simple &lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{v1,'toto'} #SET{v2,'3.0'} #GET{v1} + #GET{v2} = [(#GET{v1}|plus{#GET{v2}})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;renvoi une erreur : erreur d'ex&#233;cution squelettes/test.html | File [&#8230;]/ecrire/inc/filtres.php Line 2225 : Unsupported operand types : string + float&lt;/p&gt;
&lt;p&gt;Il faut donc appliquer le filtre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;|floatval&lt;/code&gt; sur les variables comme ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{v1,'toto'} #SET{v2,'3.0'} #GET{v1} + #GET{v2} = [(#GET{v1}|floatval|plus{#GET{v2}|floatval})] &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;affiche en retour : toto+ 3.0= 3&lt;/p&gt;
&lt;p&gt;La variable v1 est une cha&#238;ne de caract&#232;re, elle vaut 0.0&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>je ne sais pas encore... </title>
		<link>https://codes.maison-des-mineraux.org/spip.php?article2</link>
		<guid isPermaLink="true">https://codes.maison-des-mineraux.org/spip.php?article2</guid>
		<dc:date>2025-02-27T19:13:34Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;&lt;B_affichage_tableau&gt; &lt;table class=&#034;table table-bordered&#034;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Pr&#233;nom&lt;/th&gt; &lt;th&gt;Heures&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;BOUCLE_affichage_tableau(DATA)source table, #GETtableau_temps&gt; &lt;tr&gt; &lt;td&gt;[(#VALEURprenom)]&lt;/td&gt; &lt;td&gt;[(#VALEURheures)] heures&lt;/td&gt; &lt;/tr&gt; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://codes.maison-des-mineraux.org/spip.php?rubrique1" rel="directory"&gt;Astuces / spip&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;B_affichage_tableau&gt; &lt;table class=&#034;table table-bordered&#034;&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Pr&#233;nom&lt;/th&gt; &lt;th&gt;Heures&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;BOUCLE_affichage_tableau(DATA){source table, #GET{tableau_temps}}&gt; &lt;tr&gt; &lt;td&gt;[(#VALEUR{prenom})]&lt;/td&gt; &lt;td&gt;[(#VALEUR{heures})] heures&lt;/td&gt; &lt;/tr&gt; &lt;/BOUCLE_affichage_tableau&gt; &lt;/tbody&gt; &lt;tfoot&gt; &lt;tr class=&#034;table-dark text-white&#034;&gt; &lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;&lt;strong&gt;#GET{total_heures} heures&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tfoot&gt; &lt;/table&gt; &lt;/B_affichage_tableau&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La ```markdown ``` &#224; laquelle on applique la...</title>
		<link>https://codes.maison-des-mineraux.org/spip.php?article1</link>
		<guid isPermaLink="true">https://codes.maison-des-mineraux.org/spip.php?article1</guid>
		<dc:date>2025-02-27T18:55:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;La &lt;div&gt; &#224; laquelle on applique la class collapse show transition et &#224; laquelle on attribue l'id (collapseColonne) &lt;div class=&#034;col-2 collapse show transition&#034; id=&#034;collapseColonne&#034; style=&#034;background-color :#eee&#034;&gt; [(#INCLUREfond=inclure/tdb_colonne_gauche,env)] &lt;/div&gt; &lt;br class='autobr' /&gt;
Ce script est &#224; ins&#233;rer juste avant la balise &lt; !&#8212; Script pour ajuster dynamiquement la largeur &#8212;&gt;
&lt;br class='autobr' /&gt;
&lt;script&gt; document.addEventListener(&#034;DOMContentLoaded&#034;, (&#8230;)&lt;/p&gt;


-
&lt;a href="https://codes.maison-des-mineraux.org/spip.php?rubrique1" rel="directory"&gt;Astuces / spip&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;La &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;div&gt;&lt;/code&gt; &#224; laquelle on applique la class &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;collapse show transition&lt;/code&gt; et &#224; laquelle on attribue l'id (collapseColonne)&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div class=&#034;col-2 collapse show transition&#034; id=&#034;collapseColonne&#034; style=&#034;background-color:#eee&#034;&gt; [(#INCLURE{fond=inclure/tdb_colonne_gauche,env})] &lt;/div&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce script est &#224; ins&#233;rer juste avant la balise &lt;/body&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;!-- Script pour ajuster dynamiquement la largeur --&gt; &lt;script&gt; document.addEventListener(&#034;DOMContentLoaded&#034;, function() { var mainCol = document.getElementById(&#034;mainCol&#034;); var collapseCol = document.getElementById(&#034;collapseColonne&#034;); var toggleButton = document.getElementById(&#034;toggleButton&#034;); collapseCol.addEventListener(&#034;shown.bs.collapse&#034;, function() { mainCol.classList.remove(&#034;col-md-12&#034;); mainCol.classList.add(&#034;col-md-8&#034;); }); collapseCol.addEventListener(&#034;hidden.bs.collapse&#034;, function() { mainCol.classList.remove(&#034;col-md-8&#034;); mainCol.classList.add(&#034;col-md-12&#034;); }); }); &lt;/script&gt; &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
