Problème de mouvement stock lorsque je ‘’repasse la facture Fournisseur en brouillant/ou je la supprime’’ avec la quantité du stock produit Zéro,

Je suis sur Dolibarr version 17.0.1

Au niveau du stock/entrepôt j’ai uniquement les options dessous actives :

  • Décrémenter les stocks physiques sur validation des factures/avoirs clients
  • Incrémenter les stocks physiques sur validation des factures/avoirs fournisseurs

El l’option dessous n’est pas activé :

Le stock peut être négatif : ‘’non activé’’

Bonjour team,

J’ai ce problème de puis plusieurs versions je pense,

Si j’ai un produit déjà sorti sur une facture client, et que le stock est en Zéro, normalement je ne dois pas avoir le droit de modifier la facture fournisseur ou de la supprimé car cela entrainera vers un stock négatif et puisque je n’autorise pas le stock négatif je dois avoir un message de warning ou quelque chose de la sorte, ou ‘’au pire des cas et pour garder un bon stock’’ de passer le produit en négatif, mais puisqu’il n’y a aucun mouvement qui se fait, alors après la modification de la facture Fournisseur, une fois je valide, le stock s’incrémente et j’ai un produit en plus sur le stock, chose qui fausse l’inventaire des produits,

Merci pour votre support,

Bonjour @driss.Benchekroun,

Vous pouvez le réparer manuellement pour l’instant en suivant les instructions ci-dessous, jusqu’à ce que nous fassions une Pull Request (PR) afin d’intégrer les modifications au code source Dolibarr pour le réparer :

1)- Repasse la facture fournisseur en brouillant :

  • Modifier le fichier /fourn/class/fournisseur.facture.class.php
  • Aller à la fonction :
public function setDraft($user, $idwarehouse = -1)
  • Ajouter le code suivant :
if($result < 0) {
	if (count($mouvP->errors)) {
		setEventMessages(null, $mouvP->errors, 'errors');
	} else {
		setEventMessages($mouvP->error, $mouvP->errors, 'errors');
	}
	$error++;
}

Après :

...
...
    $result = $mouvP->livraison($user, $this->lines[$i]->fk_product, $idwarehouse, $this->lines[$i]->qty, $this->lines[$i]->subprice, $langs->trans("InvoiceBackToDraftInDolibarr", $this->ref));
}

2) - Suppression de la facture fournisseur :

  • Modifier le fichier /fourn/facture/card.php
  • Voici le code complete de l’action « confirm_delete » :
} elseif ($action == 'confirm_delete' && $confirm == 'yes') {
	$object->fetch($id);
	$object->fetch_thirdparty();

	$isErasable = $object->is_erasable();

	if (($usercandelete && $isErasable > 0) || ($usercancreate && $isErasable == 1)) {

		$idwarehouse = GETPOST('idwarehouse');

		$qualified_for_stock_change = 0;
		if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
			$qualified_for_stock_change = $object->hasProductsOrServices(2);
		} else {
			$qualified_for_stock_change = $object->hasProductsOrServices(1);
		}

		// Check parameters
		if (isModEnabled('stock') && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change) {
			$langs->load("stocks");
			if (!$idwarehouse || $idwarehouse == -1) {
				$error++;
				setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Warehouse")), null, 'errors');
				$action = 'delete';
			}
		}

		if (!$error) {

			if($idwarehouse) {
				$result = $object->setDraft($user, $idwarehouse);
				if($result < 0) {
					$error++;
				}
			}

			if (!$error) {
				$result = $object->delete($user);
				if ($result > 0) {
					header('Location: list.php?restore_lastsearch_values=1');
					exit;
				} else {
					setEventMessages($object->error, $object->errors, 'errors');
				}
			}
		}
	}
}

Bien cordialement

1 « J'aime »

bonjour et merci beaucoup pour votre réponse rapide et professionel! la solutions marche très bien!

merci encore!

1 « J'aime »

Merci à vous Ssi Driss, n’hésitez pas à nous contacter si vous avez besoin d’aide sur Dolibarr.

1 « J'aime »

bonjour team, j’espère que vous vous portez bien,

j’ai mis a jours Dolibarr sur la version 18.0.3,

j’ai pu refaire la correction 1)- Repasse la facture fournisseur en brouillant :

mais pour la correction : 2) - Suppression de la facture fournisseur :
j’ai des problèmes lorsque je veux créer une facture fournisseur, j’ai l’erreur dessous:
Dolibarr a détecté une erreur technique.
Ces informations peuvent être utiles à des fins de diagnostic (vous pouvez définir l’option $dolibarr_main_prod sur ‹ 1 › pour masquer les informations sensibles):
Date: 20231129105153
Dolibarr: 18.0.3 - https://www.dolibarr.org
Niveau de fonctionnalités: 0
PHP: 7.4.33
Serveur: LiteSpeed
OS: Linux serveur113.heberjahiz.com 4.18.0-477.15.1.lve.2.el8.x86_64 #1 SMP Wed Aug 2 10:43:45 UTC 2023 x86_64
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36

Url sollicitée: /dolibarr/fourn/facture/card.php?leftmenu=suppliers_bills&action=create
Referer: Login @ 18.0.3
Gestionnaire de menu: eldy_menu.php

Modules/Applications: user, projet, multicurrency, propal, fckeditor, hrm, contrat, ficheinter, agenda, banque, commande, expensereport, facture, product, fournisseur, expedition, holiday, salaries, service, societe, ticket, stock, comptabilite, tax, notification
Type gestionnaire de base de données: mysqli
Requête dernier accès en base en erreur: SELECT s.rowid, s.nom as name, s.name_alias, s.tva_intra, s.client, s.fournisseur, s.code_client, s.code_fournisseur FROM llx4e_societe as s WHERE s.entity IN (1) AND (Filter syntax error - Bad syntax of the search string) ORDER BY nom ASC
Code retour dernier accès en base en erreur: DB_ERROR_SYNTAX
Information sur le dernier accès en base en erreur: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‹ syntax error - Bad syntax of the search string) ORDER BY nom ASC › at line 1

Bonjour @driss.Benchekroun,

J’espère que vous allez bien.

Ce problème est représenté par la fonction « forgeSQLFromUniversalSearchCriteria() » disponible dans le fichier :

dolibarr/core/lib/functions.lib.php

Recherchez le nom de la fonction « select_company() » dans le fichier :

/dolibarr/fourn/facture/card.php

Avez-vous la variable « $filter » définie comme ci-dessous? :

Généralement, ce problème est associé à la fonction « select_company » disponible dans le fichier :

dolibarr/core/class/html.form.class.php

Bien cordialement