Fork me on GitHub
Bienvenue, Invité
Nom d'utilisateur Mot de passe: Se souvenir de moi

Stock théorique faux
(1 visualisation(s)) (1) Invité
  • Page:
  • 1

SUJET: Stock théorique faux

Stock théorique faux il y a 1 an, 11 mois #20054

  • Mx
  • Hors ligne
  • Gold Boarder
  • Message: 206
  • Karma: 1
Bonjour,

Ce sujet a déjà du être abordé.

Pour chaque produit on a la possibilité de voir son stock physique et theorique.

Ici Stock théorique produit1= stock physique produit1 - commandes en cours produit1.

Mais il y a un problème, Dolibarr ne tiens pas compte des produits déjà livrés.

En effet, une commande peut rester au statut "en cours" à cause d'un reliquat à livrer. Et dans ce cas, même si le produit qui nous intéresse à déjà été livré, il apparaît encore dans le calcul du stock théorique.

On devrait avoir:
Stock théorique produit1= stock physique produit1 - commandes en cours produit1 au statut non livré.

Donc on ne peut pas se fier au stock annoncés par Dolibarr, ce qui est génant.
Windows Vista
My SQL 5.0.22
Apache 2.0.58
PHP5
Dolibarr CVS

Re: Stock théorique faux il y a 1 an, 11 mois #20075

  • regis
  • En ligne
  • Administrateur
  • Message: 3478
  • Karma: 117
oui j'avais remarqué ceci, je vais voir pour corriger
Régis Houssin
Contributeur Dolibarr
----------------------------------------
Offre SaaS de Dolibarr
Plateforme de développement Dolibarr
----------------------------------------
Merci de nous aider en effectuant un don via le lien de la page d'accueil.
Et à défaut merci à tout ceux qui cliquent sur les pubs.

Re:Stock théorique faux il y a 1 an, 7 mois #21984

  • phantasie
  • Hors ligne
  • Senior Boarder
  • Message: 45
  • Karma: 0
Bonjour,

Ce bug me causait quelques soucis. J'ai donc fait une petite modification au niveau du fichier "product.class.php", au niveau de la fonction "load_stats_commande" :

	function load_stats_commande($socid=0,$filtrestatut='')
{
global $conf,$user;
 
$sql = "SELECT COUNT(DISTINCT c.fk_soc) as nb_customers, COUNT(DISTINCT c.rowid) as nb,";
$sql.= " COUNT(cd.rowid) as nb_rows, SUM(cd.qty) as qty";
$sql.= " FROM ".MAIN_DB_PREFIX."commandedet as cd";
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."expeditiondet as ed ON cd.rowid = ed.fk_origin_line"; // modification
$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."expedition as e ON ed.fk_expedition = e.rowid"; // modification
$sql.= ", ".MAIN_DB_PREFIX."commande as c";
$sql.= ", ".MAIN_DB_PREFIX."societe as s";
if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
$sql.= " WHERE c.rowid = cd.fk_commande";
$sql.= " AND c.fk_soc = s.rowid";
$sql.= " AND s.entity = ".$conf->entity;
$sql.= " AND (e.fk_statut IS NULL OR e.fk_statut = 0)"; // modification
$sql.= " AND cd.fk_product = ".$this->id;
if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND c.fk_soc = sc.fk_soc AND sc.fk_user = " .$user->id;
if ($socid > 0) $sql.= " AND c.fk_soc = ".$socid;
if ($filtrestatut <> '') $sql.= " AND c.fk_statut in (".$filtrestatut.")";
 
$result = $this->db->query($sql) ;
if ( $result )
{
$obj=$this->db->fetch_object($result);
$this->stats_commande['customers']=$obj->nb_customers;
$this->stats_commande['nb']=$obj->nb;
$this->stats_commande['rows']=$obj->nb_rows;
$this->stats_commande['qty']=$obj->qty?$obj->qty:0;
return 1;
}
else
{
$this->error=$this->db->error();
return -1;
}
}


J'ai modifié la requête (3 lignes à rajouter). Je pense que c'est correct.

Quels sont les avis des experts ?
  • Page:
  • 1
Temps de génération de la page: 0.12 secondes