API Facture - Erreur fatale PHP

Bonjour,

Je viens solliciter votre aide car pour mon entreprise j’utilise dolibarr en progiciel et, j’ai une partie en facturation récurrente où j’utilise la partie contrat, tiers et factures.
Or, depuis deux mois, la partie facture bug et je dois la partie récurrente manuellement. Je n’arrive pas à comprendre ni pourquoi, ni comment. Pour la partie facture récurrente, j’utilise l’API REST livrée avec dolibarr, afin d’éviter de développer un script, supposant que c’est supporté avec l’évolution des versions.

Je bloque car une partie des tiers (clients) fonctionne, et j’ai bien les factures générées, et une autre partie j’ai une erreur 500…

Voici l’erreur PHP :

[Thu Nov 12 19:28:32.510518 2020] [php7:error] [pid 19308] [client 51.178.26.231:56706] PHP Fatal error:  Uncaught Error: __clone method called on non-object in /var/www/h/htdocs/core/class/commonobject.class.php:4721\nStack trace:
#0 /var/www/h/htdocs/core/lib/functions.lib.php(830): CommonObject->__clone()
#1 /var/www/h/htdocs/core/triggers/interface_90_modSociete_ContactRoles.class.php(87): dol_clone(Object(Facture), 1)
#2 /var/www/h/htdocs/core/class/interfaces.class.php(189): InterfaceContactRoles->runTrigger('BILL_CREATE', Object(Facture), Object(User), Object(Translate), Object(Conf))
#3 /var/www/h/htdocs/core/class/commonobject.class.php(5096): Interfaces->run_triggers('BILL_CREATE', Object(Facture), Object(User), Object(Translate), Object(Conf))
#4 /var/www/h/htdocs/compta/facture/class/facture.class.php(981): CommonObject->call_trigger('BILL_CREATE', Object(User))
#5 /var/www/h/htdocs/compta/facture/class/api_invoices.class.php(286): Facture->create(Object(User), 0, 1605205712)\n#6 [inter in /var/www/h/htdocs/core/class/commonobject.class.php on line 4721

Versions :
System : Linux vps7-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64
Server API : Apache 2.0 Handler
Version PHP : 7.1.33-24+0~20201103
Dolibarr V : 12.0.3
Merci par avance de votre aide,

Pour mieux comprendre, il faudrait savoir la nature de $object qui est passé à dol_clone (fichier interface_90_modSociete_ContactRoles.class.php, ligne 87) : vérifiez si c’est bien une instance de Facture ou si, quelque part, la variable $object a été réaffectée ou dénaturée.

Et si vous ne voyez rien de suspect, comme dol_clone est appelée avec le paramètre « native » à 1, essayez aussi de le passer à 0 pour voir si ça fait une différence (ça ne devrait pas, mais il faut essayer).

Bonjour,

Merci pour votre réponse. Effectivement, j’ai fais le test et c’est bien une instance de facture.

Ensuite, en passant le paramètre à 0, j’ai bien mes factures qui se créer. Cependant, pas le fichier PDF (en soit si ce n’est que ça, c’est pas grave car je peux les créer manuellement, en groupé).

Voici le retour d’erreur en passant à 0 :
Dolibarr a détecté une erreur technique.
Voici les informations qui pourront aider au diagnostic (Vous pouvez fixer l’option $dolibarr_main_prod sur ‹ 1 › pour supprimer quelques notifications):
Date: 20201123150507
Dolibarr: 12.0.3 - https://www.dolibarr.org
Niveau de fonctionnalités: 0
PHP: 7.1.33-24+0~20201103.44+debian9~1.gbp50e805
Server: Apache/2.4.25 (Debian)
OS: Linux v*1-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64
UserAgent: PostmanRuntime/7.26.5

Url sollicitée: /api/index.php/invoices
Referer:
Gestionnaire de menu:

Modules/Applications: user, api, export, prelevement, accounting, agenda, cron, expensereport, facture, fournisseur, societe, service, ecm, propal, fckeditor, contrat, ficheinter, mrp, stock, tax, bom, projet, variants, productbatch, expedition, commande, banque, product, notification, ticket
Type gestionnaire de base de données: mysqli
Requête dernier accès en base en erreur: SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact, t.fk_soc as socid, t.statut as statuscontact, t.civility as civility, t.lastname as lastname, t.firstname, t.email, tc.source, tc.element, tc.code, tc.libelle FROM llxd4_c_type_contact tc, llxd4_element_contact ec LEFT JOIN llxd4_socpeople t on ec.fk_socpeople = t.rowid WHERE ec.element_id =304 AND ec.fk_c_type_contact=tc.rowid AND tc.element=’’ AND tc.source = ‹ external › AND tc.active=1 ORDER BY t.lastname ASC
Code retour dernier accès en base en erreur: Aucune requête en erreur
Information sur le dernier accès en base en erreur: Aucune requête en erreur

Dolibarr a détecté une erreur technique.
Voici les informations qui pourront aider au diagnostic (Vous pouvez fixer l’option $dolibarr_main_prod sur ‹ 1 › pour supprimer quelques notifications):
Date: 20201123150507
Dolibarr: 12.0.3 - https://www.dolibarr.org
Niveau de fonctionnalités: 0
PHP: 7.1.33-24+0~20201103.44+debian9~1.gbp50e805
Server: Apache/2.4.25 (Debian)
OS: Linux v*-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64
UserAgent: PostmanRuntime/7.26.5

Url sollicitée: /api/index.php/invoices
Referer:
Gestionnaire de menu:

Modules/Applications: user, api, export, prelevement, accounting, agenda, cron, expensereport, facture, fournisseur, societe, service, ecm, propal, fckeditor, contrat, ficheinter, mrp, stock, tax, bom, projet, variants, productbatch, expedition, commande, banque, product, notification, ticket
Type gestionnaire de base de données: mysqli
Requête dernier accès en base en erreur: SELECT ec.rowid, ec.statut as statuslink, ec.fk_socpeople as id, ec.fk_c_type_contact, ‹ -1 › as socid, t.statut as statuscontact, t.login, t.photo, t.civility as civility, t.lastname as lastname, t.firstname, t.email, tc.source, tc.element, tc.code, tc.libelle FROM llxd4_c_type_contact tc, llxd4_element_contact ec LEFT JOIN llxd4_user t on ec.fk_socpeople = t.rowid WHERE ec.element_id =304 AND ec.fk_c_type_contact=tc.rowid AND tc.element=’’ AND tc.source = ‹ internal › AND tc.active=1 ORDER BY t.lastname ASC
Code retour dernier accès en base en erreur: Aucune requête en erreur
Information sur le dernier accès en base en erreur: Aucune requête en erreur

Bonjour,

Malheureusement, ce message d’erreur me semble trop maigre pour comprendre ce qui se passe (il faudrait pouvoir remonter la pile d’appels) car la requête semble bonne (à part certains caractères bizarres comme et , mais je pense que ça ne joue aucun rôle car s’ils avaient vraiment été passés tels quels à mysql, on aurait eu une erreur de syntaxe).

Sinon, effectivement, pour le dol_clone avec le paramètre $native, on dirait qu’une des lignes de la facture n’est pas un objet clonable. Ce serait intéressant de voir pourquoi, mais ça ne résoudrait pas forcément le problème. C’est juste une piste possible.

Cordialement