<?xml 
version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="https://www.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>## Partager, documenter, transmettre
La Maison des Min&#233;raux soutient et utilise depuis de nombreuses ann&#233;es des logiciels libres et des technologies Open Source : SPIP, Dolibarr, Linux, MariaDB, PHP, Python, Shell et bien d'autres.
Au fil des projets, de nombreux scripts, requ&#234;tes SQL, configurations, proc&#233;dures d'administration et d&#233;veloppements sp&#233;cifiques ont &#233;t&#233; cr&#233;&#233;s pour r&#233;pondre &#224; des besoins concrets.
Ce site a pour vocation de partager ces ressources avec le plus grand nombre.
Vous y trouverez notamment :
* des extraits de code ;
* des scripts complets ;
* des requ&#234;tes SQL ;
* des proc&#233;dures d'administration syst&#232;me ;
* des tutoriels ;
* des retours d'exp&#233;rience ;
* des astuces li&#233;es &#224; Dolibarr, SPIP, Linux, PHP, Python, Shell et &#224; l'&#233;cosyst&#232;me du logiciel libre.
L'objectif n'est pas seulement de publier du code, mais &#233;galement d'expliquer les probl&#232;mes rencontr&#233;s, les solutions mises en &#339;uvre et les enseignements tir&#233;s de l'exp&#233;rience.
Parce qu'un bon code est un code qui se partage.
## Pourquoi l'Open Source ?
La Maison des Min&#233;raux d&#233;fend les valeurs du logiciel libre :
* la libert&#233; d'utiliser ;
* la libert&#233; d'&#233;tudier ;
* la libert&#233; de modifier ;
* la libert&#233; de partager.
Ces valeurs favorisent la transmission des connaissances, la coop&#233;ration et l'autonomie num&#233;rique des associations, des collectivit&#233;s, des entreprises et des citoyens.
## Licence et r&#233;utilisation
Sauf mention contraire, les contenus publi&#233;s sur ce site peuvent &#234;tre librement consult&#233;s, adapt&#233;s et r&#233;utilis&#233;s dans le respect de leur licence respective.
Si un article ou un script vous a &#233;t&#233; utile, n'h&#233;sitez pas &#224; le partager &#224; votre tour ou &#224; contribuer &#224; son am&#233;lioration.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.codes.maison-des-mineraux.org/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Cloner une instance dolibarr sur son h&#233;bergement</title>
		<link>https://www.codes.maison-des-mineraux.org/spip.php?article7</link>
		<guid isPermaLink="true">https://www.codes.maison-des-mineraux.org/spip.php?article7</guid>
		<dc:date>2026-06-10T09:54:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;Copier les dossiers et fichiers / via SSH cp -a dossier_dolibarr_source/. dossier_dolibarr_copie/ &lt;br class='autobr' /&gt;
L'option -a : conserve les droits ; conserve les propri&#233;taires ; conserve les liens symboliques ; conserve les dates ; copie r&#233;cursivement.Copier la base de donn&#233;es &lt;br class='autobr' /&gt;
via interface de l'h&#233;bergeur, ssh... Adapter le fichier conf &lt;br class='autobr' /&gt;
htdocs/conf/conf.php ; &lt;br class='autobr' /&gt;
Pointer sur le nouveau r&#233;pertoire et sur la nouvelle base de donn&#233;es (copie), modifier ces variables : $dolibarr_main_url_root (&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Copier les dossiers et fichiers / via SSH &lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='bash spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cp -a dossier_dolibarr_source/. dossier_dolibarr_copie/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'option -a :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; conserve les droits ;&lt;/li&gt;&lt;li&gt; conserve les propri&#233;taires ;&lt;/li&gt;&lt;li&gt; conserve les liens symboliques ;&lt;/li&gt;&lt;li&gt; conserve les dates ;&lt;/li&gt;&lt;li&gt; copie r&#233;cursivement.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Copier la base de donn&#233;es&lt;/h2&gt;
&lt;p&gt;via interface de l'h&#233;bergeur, ssh...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Adapter le fichier conf&lt;/h2&gt;
&lt;p&gt;htdocs/conf/conf.php ;&lt;/p&gt;
&lt;p&gt;Pointer sur le nouveau r&#233;pertoire et sur la nouvelle base de donn&#233;es (copie), modifier ces variables :&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;$dolibarr_main_url_root $dolibarr_main_document_root $dolibarr_main_data_root $dolibarr_main_db_name $dolibarr_main_document_root_alt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ne pas changer : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$dolibarr_main_authentication&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mise &#224; jour en masse des comptes auxiliaires fournisseurs</title>
		<link>https://www.codes.maison-des-mineraux.org/spip.php?article8</link>
		<guid isPermaLink="true">https://www.codes.maison-des-mineraux.org/spip.php?article8</guid>
		<dc:date>2026-06-10T09:29:14Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;Le contexte : les fiches fournisseurs avaient d&#233;j&#224; &#233;t&#233; corrig&#233;es ; code_compta_fournisseur contenait bien des valeurs du type 401SU250700177 ; pourtant le FEC continuait &#224; sortir des auxiliaires incorrects ; le probl&#232;me provenait des &#233;critures d&#233;j&#224; g&#233;n&#233;r&#233;es dans llx_accounting_bookkeeping &lt;br class='autobr' /&gt;
Avant correction, dans le FEC : &lt;br class='autobr' /&gt;
AC	Purchase journal	5919	20250320	40100000	Fournisseurs	40100000	trucmuche.com	SI2503-0523	20260422	trucmuche.com - receipt - Compte auxiliaire	0,00	247,94 &lt;br class='autobr' /&gt;
alors que la (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.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;Le contexte :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; les fiches fournisseurs avaient d&#233;j&#224; &#233;t&#233; corrig&#233;es ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;code_compta_fournisseur&lt;/code&gt; contenait bien des valeurs du type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;401SU250700177&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; pourtant le FEC continuait &#224; sortir des auxiliaires incorrects ;&lt;/li&gt;&lt;li&gt; le probl&#232;me provenait des &#233;critures d&#233;j&#224; g&#233;n&#233;r&#233;es dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;llx_accounting_bookkeeping&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Avant correction, dans le FEC :&lt;/p&gt;
&lt;p&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;AC Purchase journal 5919 20250320 40100000 Fournisseurs 40100000 trucmuche.com SI2503-0523 20260422 trucmuche.com - receipt - Compte auxiliaire 0,00 247,94&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;alors que la fiche fournisseur contenait :&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;code_fournisseur = SU2507-00177 code_compta_fournisseur = 401SU250700177&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le FEC aurait d&#251; produire :&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;AC	Purchase journal	5919	20250320	40100000	Fournisseurs	401SU250700177	trucmuche.com	SI2503-0523	20260422	trucmuche.com - receipt - Compte auxiliaire	0,00	247,94&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le constat &#233;tait donc :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; certaines &#233;critures comptables utilisaient le bon auxiliaire ;&lt;/li&gt;&lt;li&gt; d'autres continuaient &#224; utiliser 40100000 ;&lt;/li&gt;&lt;li&gt; le probl&#232;me ne venait plus des fiches fournisseurs ;&lt;/li&gt;&lt;li&gt; il venait des &#233;critures comptables d&#233;j&#224; g&#233;n&#233;r&#233;es.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si le FEC a d&#233;j&#224; &#233;t&#233; g&#233;n&#233;r&#233; depuis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;llx_accounting_bookkeeping&lt;/code&gt;, corriger &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;llx_societe&lt;/code&gt; ne modifiera pas automatiquement les &#233;critures d&#233;j&#224; g&#233;n&#233;r&#233;es.&lt;/p&gt;
&lt;p&gt;Il faudra soit :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; supprimer/r&#233;g&#233;n&#233;rer les &#233;critures comptables fournisseurs ;&lt;/li&gt;&lt;li&gt; soit corriger directement &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;llx_accounting_bookkeeping&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Contr&#244;le dans les &#233;critures :&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;SELECT doc_ref, numero_compte, label_compte, subledger_account, subledger_label FROM llx_accounting_bookkeeping WHERE doc_ref = 'SI2503-0523';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faut mettre &#224; jour &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;subledger_account&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Pour corriger les &#233;critures fournisseurs d&#233;j&#224; g&#233;n&#233;r&#233;es :&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_accounting_bookkeeping ab JOIN llx_facture_fourn f ON f.ref = ab.doc_ref JOIN llx_societe s ON s.rowid = f.fk_soc SET ab.subledger_account = s.code_compta_fournisseur, ab.subledger_label = s.nom WHERE ab.numero_compte LIKE '401%' AND ab.doc_type = 'supplier_invoice' AND YEAR(ab.doc_date) = 2025 AND s.code_compta_fournisseur IS NOT NULL AND s.code_compta_fournisseur &lt;&gt; '';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Contr&#244;le apr&#232;s correction :&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 ab.doc_ref, ab.numero_compte, ab.label_compte, ab.subledger_account, ab.subledger_label, s.nom, s.code_compta_fournisseur FROM llx_accounting_bookkeeping ab JOIN llx_facture_fourn f ON f.ref = ab.doc_ref JOIN llx_societe s ON s.rowid = f.fk_soc WHERE ab.numero_compte LIKE '401%' AND ab.doc_type = 'supplier_invoice' AND YEAR(ab.doc_date) = 2025 AND ab.subledger_account &lt;&gt; s.code_compta_fournisseur ORDER BY ab.doc_ref;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si cette derni&#232;re requ&#234;te ne retourne rien, ton prochain export FEC devrait bien sortir les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;401SU....&lt;/code&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Modifier en masse les notes de frais avec comptes auxilliaires des utilisateurs</title>
		<link>https://www.codes.maison-des-mineraux.org/spip.php?article9</link>
		<guid isPermaLink="true">https://www.codes.maison-des-mineraux.org/spip.php?article9</guid>
		<dc:date>2026-06-10T09:28:36Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;Identifier les &#233;critures de notes de frais &lt;br class='autobr' /&gt; SELECT ab.rowid, ab.doc_ref, ab.doc_date, ab.numero_compte, ab.label_compte, ab.subledger_account, ab.subledger_label, ab.debit, ab.credit FROM llx_accounting_bookkeeping ab WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 ORDER BY ab.doc_ref, ab.rowid ; &lt;br class='autobr' /&gt;
Comparer les &#233;critures avec les utilisateurs &lt;br class='autobr' /&gt; SELECT ab.rowid, ab.doc_ref, ab.doc_date, CONCAT(u.firstname, ' ', (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.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;h2 class=&#034;spip&#034;&gt;Identifier les &#233;critures de notes de frais&lt;/h2&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 ab.rowid, ab.doc_ref, ab.doc_date, ab.numero_compte, ab.label_compte, ab.subledger_account, ab.subledger_label, ab.debit, ab.credit FROM llx_accounting_bookkeeping ab WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 ORDER BY ab.doc_ref, ab.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Comparer les &#233;critures avec les utilisateurs&lt;/h2&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 ab.rowid, ab.doc_ref, ab.doc_date, CONCAT(u.firstname, ' ', u.lastname) AS utilisateur, ab.numero_compte, ab.subledger_account AS auxiliaire_ecriture, u.accountancy_code AS auxiliaire_utilisateur, ab.subledger_label AS libelle_auxiliaire_ecriture FROM llx_accounting_bookkeeping ab JOIN llx_expensereport er ON er.ref = ab.doc_ref JOIN llx_user u ON u.rowid = er.fk_user_author WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 ORDER BY ab.doc_ref, ab.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Identifier les &#233;critures incoh&#233;rentes&lt;/h2&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 ab.rowid, ab.doc_ref, ab.doc_date, CONCAT(u.firstname, ' ', u.lastname) AS utilisateur, ab.numero_compte, ab.subledger_account AS auxiliaire_ecriture, u.accountancy_code AS auxiliaire_utilisateur, ab.subledger_label AS libelle_auxiliaire_ecriture FROM llx_accounting_bookkeeping ab JOIN llx_expensereport er ON er.ref = ab.doc_ref JOIN llx_user u ON u.rowid = er.fk_user_author WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 AND u.accountancy_code IS NOT NULL AND u.accountancy_code &lt;&gt; '' AND ( ab.subledger_account IS NULL OR ab.subledger_account = '' OR ab.subledger_account &lt;&gt; u.accountancy_code ) ORDER BY ab.doc_ref, ab.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Mettre &#224; jour les &#233;critures de notes de frais&lt;/h2&gt;
&lt;p&gt;Cette requ&#234;te met &#224; jour :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; [subledger_account] avec le compte auxiliaire de l'utilisateur ;&lt;/li&gt;&lt;/ul&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_accounting_bookkeeping ab JOIN llx_expensereport er ON er.ref = ab.doc_ref JOIN llx_user u ON u.rowid = er.fk_user_author SET ab.subledger_account = u.accountancy_code WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 AND u.accountancy_code IS NOT NULL AND u.accountancy_code &lt;&gt; '';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Contr&#244;ler apr&#232;s modification&lt;/h2&gt;
&lt;p&gt;Cette requ&#234;te ne doit retourner aucune ligne.&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 ab.rowid, ab.doc_ref, ab.doc_date, CONCAT(u.firstname, ' ', u.lastname) AS utilisateur, ab.numero_compte, ab.subledger_account AS auxiliaire_ecriture, u.accountancy_code AS auxiliaire_utilisateur, ab.subledger_label AS libelle_auxiliaire_ecriture FROM llx_accounting_bookkeeping ab JOIN llx_expensereport er ON er.ref = ab.doc_ref JOIN llx_user u ON u.rowid = er.fk_user_author WHERE ab.doc_type = 'expense_report' AND YEAR(ab.doc_date) = 2025 AND u.accountancy_code IS NOT NULL AND u.accountancy_code &lt;&gt; '' AND ( ab.subledger_account IS NULL OR ab.subledger_account = '' OR ab.subledger_account &lt;&gt; u.accountancy_code ) ORDER BY ab.doc_ref, ab.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;sultat attendu dans le FEC&lt;/h2&gt;
&lt;p&gt;Avant correction :&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;CompteNum : 42100000 CompAuxNum : CompAuxLib :&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s correction :&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;CompteNum : 42100000 CompAuxNum : 421MMARTIN CompAuxLib : Michel Martin&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Notes&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Le code auxiliaire utilisateur est stock&#233; dans [llx_user.accountancy_code].&lt;/li&gt;&lt;li&gt; Les &#233;critures d&#233;j&#224; g&#233;n&#233;r&#233;es sont stock&#233;es dans [llx_accounting_bookkeeping].&lt;/li&gt;&lt;li&gt; Modifier [llx_user.accountancy_code] ne modifie pas automatiquement les &#233;critures d&#233;j&#224; g&#233;n&#233;r&#233;es.&lt;/li&gt;&lt;li&gt; Apr&#232;s correction, il faut r&#233;exporter le FEC.&lt;/li&gt;&lt;li&gt; Cette proc&#233;dure concerne principalement les notes de frais, dont le [doc_type] est [expense_report].&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Mise &#224; jour en masse des comptes comptables clients dans Dolibarr</title>
		<link>https://www.codes.maison-des-mineraux.org/spip.php?article6</link>
		<guid isPermaLink="true">https://www.codes.maison-des-mineraux.org/spip.php?article6</guid>
		<dc:date>2026-05-27T13:34:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Zarmel</dc:creator>



		<description>
&lt;p&gt;Contexte &lt;br class='autobr' /&gt;
Dans le cadre de l'export FEC vers un logiciel comptable (Inexcompta par exemple), il peut &#234;tre n&#233;cessaire de disposer d'un compte auxiliaire client plus pr&#233;cis. &lt;br class='autobr' /&gt;
Exemple : Code client : CU2405-00304 Compte comptable : 411CU240500304 &lt;br class='autobr' /&gt;
L'objectif est donc de g&#233;n&#233;rer automatiquement le compte comptable client ([code_compta]) &#224; partir du code client ([code_client]) en : ajoutant le pr&#233;fixe [411] supprimant le tiret [-] &lt;br class='autobr' /&gt;
R&#233;sultat attendu : CU2405-00304 -&gt; (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.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;&lt;strong&gt;Contexte&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans le cadre de l'export FEC vers un logiciel comptable (Inexcompta par exemple), il peut &#234;tre n&#233;cessaire de disposer d'un compte auxiliaire client plus pr&#233;cis.&lt;/p&gt;
&lt;p&gt;Exemple :&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;Code client : CU2405-00304 Compte comptable : 411CU240500304&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'objectif est donc de g&#233;n&#233;rer automatiquement le compte comptable client ([code_compta]) &#224; partir du code client ([code_client]) en :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ajoutant le pr&#233;fixe [411]&lt;/li&gt;&lt;li&gt; supprimant le tiret [-]&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;R&#233;sultat attendu :&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;CU2405-00304 -&gt; 411CU240500304&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_societe_code_compta AS SELECT * FROM llx_societe;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;1. V&#233;rifier les clients concern&#233;s&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 rowid, nom, code_client, code_compta FROM llx_societe WHERE client &gt; 0 ORDER BY code_client;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Pr&#233;visualiser les nouveaux comptes comptables&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette requ&#234;te permet de v&#233;rifier le r&#233;sultat avant mise &#224; jour.&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 rowid, nom, code_client, code_compta AS ancien_code_compta, CONCAT('411', REPLACE(code_client, '-', '')) AS nouveau_code_compta FROM llx_societe WHERE client &gt; 0 AND code_client IS NOT NULL AND code_client &lt;&gt; '' ORDER BY code_client;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Mettre &#224; jour les comptes comptables clients&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_societe SET code_compta = CONCAT('411', REPLACE(code_client, '-', '')) WHERE client &gt; 0 AND code_client IS NOT NULL AND code_client &lt;&gt; '';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;4. V&#233;rifier le r&#233;sultat&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 rowid, nom, code_client, code_compta FROM llx_societe WHERE client &gt; 0 ORDER BY code_client LIMIT 100;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Exemple de r&#233;sultat&lt;/strong&gt;&lt;/p&gt;
&lt;table class=&#034;table spip&#034;&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id223a_c0'&gt;Code client&lt;/th&gt;&lt;th id='id223a_c1'&gt;Compte comptable g&#233;n&#233;r&#233;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id223a_c0'&gt;CU2405-00304&lt;/td&gt;
&lt;td headers='id223a_c1'&gt;411CU240500304&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id223a_c0'&gt;CU2501-00012&lt;/td&gt;
&lt;td headers='id223a_c1'&gt;411CU250100012&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id223a_c0'&gt;CU2503-00187&lt;/td&gt;
&lt;td headers='id223a_c1'&gt;411CU250300187&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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; Le champ modifi&#233; est [llx_societe.code_compta].&lt;/li&gt;&lt;li&gt; Cette op&#233;ration ne modifie pas les &#233;critures comptables d&#233;j&#224; g&#233;n&#233;r&#233;es.&lt;/li&gt;&lt;li&gt; Apr&#232;s modification, il peut &#234;tre n&#233;cessaire de :
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; supprimer les &#233;critures comptables g&#233;n&#233;r&#233;es ;&lt;/li&gt;&lt;li&gt; r&#233;g&#233;n&#233;rer les &#233;critures ;&lt;/li&gt;&lt;li&gt; r&#233;exporter le FEC.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt; Cette m&#233;thode permet d'obtenir un auxiliaire client unique et compatible avec la plupart des logiciels comptables.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Correction TVA fournisseur pour association non assujettie</title>
		<link>https://www.codes.maison-des-mineraux.org/spip.php?article5</link>
		<guid isPermaLink="true">https://www.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;Contexte &lt;br class='autobr' /&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 : pu_ht = prix unitaire HT pu_ttc = prix unitaire TTC total_ht = montant HT tva = montant TVA total_ttc = montant TTC &lt;br class='autobr' /&gt;
Apr&#232;s : pu_ht = (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.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;&lt;strong&gt;Contexte&lt;/strong&gt;&lt;/p&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 : pu_ht = prix unitaire HT pu_ttc = prix unitaire TTC total_ht = montant HT tva = montant TVA total_ttc = montant TTC Apr&#232;s : pu_ht = prix unitaire TTC pu_ttc = prix unitaire TTC 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.description, fd.pu_ht, fd.pu_ttc, fd.tva_tx, fd.total_ht, fd.tva, fd.total_ttc, fd.multicurrency_subprice, fd.multicurrency_subprice_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, fd.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. V&#233;rifier les ventilations comptables explicites&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, f.datef, fd.rowid AS ligne, fd.description, fd.fk_code_ventilation, fd.total_ht, 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 AND fd.fk_code_ventilation &gt; 0 ORDER BY f.ref, fd.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Corriger les lignes de facture fournisseur&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette requ&#234;te :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; met le taux de TVA &#224; 0 ;&lt;/li&gt;&lt;li&gt; met le montant de TVA &#224; 0 ;&lt;/li&gt;&lt;li&gt; transforme le HT en TTC ;&lt;/li&gt;&lt;li&gt; aligne le prix unitaire HT sur le prix unitaire TTC ;&lt;/li&gt;&lt;li&gt; corrige aussi les champs multi-devise.&lt;/li&gt;&lt;/ul&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.pu_ht = fd.pu_ttc, 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_subprice = fd.multicurrency_subprice_ttc, 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;4. 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;5. 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.description, fd.tva_tx, fd.pu_ht, fd.pu_ttc, 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, fd.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;6. Contr&#244;ler les prix unitaires incoh&#233;rents&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.description, fd.pu_ht, fd.pu_ttc, fd.multicurrency_subprice, fd.multicurrency_subprice_ttc, fd.total_ht, 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 = 0 AND fd.tva = 0 AND ( fd.pu_ht &lt;&gt; fd.pu_ttc OR fd.multicurrency_subprice &lt;&gt; fd.multicurrency_subprice_ttc OR fd.total_ht &lt;&gt; fd.total_ttc ) ORDER BY f.ref, fd.rowid;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;7. 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; Les prix unitaires doivent aussi &#234;tre corrig&#233;s : [pu_ht = pu_ttc].&lt;/li&gt;&lt;li&gt; En multi-devise, il faut aussi aligner [multicurrency_subprice] sur [multicurrency_subprice_ttc].&lt;/li&gt;&lt;li&gt; Le champ [fk_code_ventilation] n'est pas 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://www.codes.maison-des-mineraux.org/spip.php?article3</link>
		<guid isPermaLink="true">https://www.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://www.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://www.codes.maison-des-mineraux.org/spip.php?article2</link>
		<guid isPermaLink="true">https://www.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://www.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://www.codes.maison-des-mineraux.org/spip.php?article1</link>
		<guid isPermaLink="true">https://www.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://www.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>
