Restock : Genérateur de commandes fournisseurs

il y a plusieurs choses dans votre demandes
- la détermination de ‹ sous-OF ›, correspondant à la fabrication de composants eux-même composé
- la détermination de quantité de produit par rapport à une composition à plusieurs niveau
pour le premier point c’est un sujet à l’étude (comme la création d’of à partir de plusieurs commande client, actuellement c’est unitaire). Pour le moment je verrai bien la création des of de premier sous-niveau à partir de l’of de base mais pas des autres sous niveau (pour être claire si je puis dire …pas de récursivité sur la création des sous-of)
La manip sera on crée un of puis à partir de celui-ci les sous-of de ses composants et on va sur ses of pour créer leur sous-of…
pour le second point, restock est effectivement capable de déterminer les quantité mais effectivement à partir des achats ou alors de la fiche du produit composé initiale (et dans ce cas il redescend toute la chaine…

1 « J'aime »

Effectivement, il y a plusieurs points mais tout est lié. Merci pour les infos, j’attends donc cette évolution avec impatience

Bonjour,
Comment conseillez-vous de fonctionner pour la décrémentation du stock des OF ?
Si je crée mon OF final, le stock se décrémente de suite pour tous les composants et sous-ensembles de premier niveau. Or, nous avons des délais de construction plutôt longs (> 1 mois) donc mon stock réel est faux tant que je n’ai pas livré.
En revanche, cela me permet, sur plusieurs commandes, de comptabiliser mes sous-ensembles de premier niveau, et ainsi prévoir la production avec les OF des autres sous-ensembles.
Si l’OF final reste en brouillon, le stock ne se décrémente pas mais je ne peux pas comptabiliser mes sous-ensembles.
Qu’en est-il des OF de sous-ensembles pour les autres niveaux, faut-il les valider tous dès la commande ou les valider au fur et à mesure de l’avancement de la production ? Sachant que la validation des OF est descendante dans la nomenclature alors que la production est montante.
Je débute avec ce mode de gestion de la production, auparavant, j’utilisais un tableau Excel qui, après avoir rentré mes commandes, me donnait la quantité de chaque composant et sous-ensemble à réaliser. Mais cette méthode est trop lourde à gérer et implique un nombre important de multi saisies, d’où une des raisons de mon passage sur Dolibarr qui est plus adapté.
Ma décrémentation des stocks est réglée sur la validation des factures et avoirs clients et sur la validation des expéditions, dois-je modifier ce paramétrage ?
Version de dolibarr 4.0.4 + module Factory + Restock
Merci pour vos conseils.

Si vous avez des fabrication étalé sur le temps je présume qu’il s’agit de pièce quasi unique
Dans ce cas il faut regarder la partie projet/chantier du module Factory
L’autre possibilité c’est de passer par un entrepot dédié à la fabrication, lorsque vous faite votre fabrication son stock devient négatif mais cela ne perturbe pas votre entrepot/stock réel
Sans doute dans votre cas, la création d’entrepot à chaque grosse fabrication aurai du sens quelque-chose à creuser avec l’arrivé de la notion de sous-entrepot dans dolibarr…

1 « J'aime »

Il s’agit de productions de petites séries mais de gros assemblages qui prennent du temps à produire car nous sommes une TPE et nos moyens de productions sont encore trop limités.
Je n’avais pas pensé à la solution d’un autre entrepôt, je vais creuser dans ce sens.
Pour les projets uniques ou autres prototypes, j’utilise déjà la gestion de projet, associée à Factory, et cela me permet un suivi précis. (Je suis d’ailleurs en train de regarder pour votre module Management). Il ne me manque que la remontée des coûts de produit consommé dans la vue d’ensemble pour obtenir une vision instantané de la rentabilité.

Bonjour
Une nouvelle mise à jour de reStock (2.2.1) est disponible sur le dolistore, celle-ci apporte un nouvel onglet au niveau des fournisseurs
qui liste les produits que distribue celui-ci et permet de créer rapidement une commande à celui-ci des produits en alerte.
Bonus il est possible de filtrer par la catégorie de produit pour le fournisseurs

restock_fournisseur.png

Chouette :happy:

Bonjour :happy:

Dolibarr 6.0.0 / Restock 5.0.+2.1.2

Depuis toujours nous réceptionnons Tous les produits reçus les commandes fournisseurs et Restock affiche très bien les pièces à commander.
Depuis peu nous réceptionnons Reçue partiellement les commandes fournisseurs afin d’avoir un stock au plus juste au jour le jour. Depuis Restock calcule mal (ou il y a une étape que j’ai loupé :whistle: ) les pièces à commander, j’ai l’impression qu’il ne prends pas en compte les produits recues de CF partielles.

ps : RESTOCK_REASSORT_MODE = 0

Merci

Voici ce que j’ai fait afin de prendre en compte les CF partielles :
Dans restock/class/restock.class.php ligne 481
J’ai remplacé

	// on regarde si il n'y pas de commande fournisseur en cours
			$sql = 'SELECT DISTINCT sum(cofd.qty) as nbCmdFourn';
			$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cofd";
			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."commande_fournisseur as cof ON cof.rowid = cofd.fk_commande";
			$sql.= " WHERE cof.entity = ".$conf->entity;
			$sql.= " AND cof.fk_statut = 3";
			$sql.= " and cofd.fk_product=".$tblRestock[$i]->id;
			dol_syslog(get_class($this)."::enrichir_product::cmde_fourn sql=".$sql);
			//print $sql;
			$resql = $this->db->query($sql);
			if ($resql)
			{
				$objp = $this->db->fetch_object($resql);
				$tblRestock[$i]->nbCmdFourn= $objp->nbCmdFourn;
			}

Par

	// on regarde si il n'y pas de commande fournisseur en cours
			$sql = 'SELECT DISTINCT sum(cofd.qty) as nbCmdFourn';
			$sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseurdet as cofd";
			$sql.= " LEFT JOIN ".MAIN_DB_PREFIX."commande_fournisseur as cof ON cof.rowid = cofd.fk_commande";
			$sql.= " WHERE cof.entity = ".$conf->entity;
			$sql.= " AND (cof.fk_statut = 3 OR cof.fk_statut = 4)";
			$sql.= " and cofd.fk_product=".$tblRestock[$i]->id;
			dol_syslog(get_class($this)."::enrichir_product::cmde_fourn sql=".$sql);
			//print $sql;
			$resql = $this->db->query($sql);
			if ($resql)
			{
				$objp = $this->db->fetch_object($resql);
				$tblRestock[$i]->nbCmdFourn= $objp->nbCmdFourn;
						
				//recues partiellements
				$sql = "SELECT SUM(qty) AS nbCmdFournRecues";
				$sql .= " FROM ".MAIN_DB_PREFIX."commande_fournisseur AS c, ".MAIN_DB_PREFIX."commande_fournisseur_dispatch AS cd";
				$sql .= " WHERE c.fk_statut = 4";
				$sql.= " AND c.rowid = cd.fk_commande ";;
				$sql.= " and cd.fk_product=".$tblRestock[$i]->id;
				$resql = $this->db->query($sql);
				if ($resql)
				{
					$objp = $this->db->fetch_object($resql);
					$tblRestock[$i]->nbCmdFourn -= $objp->nbCmdFournRecues;
					
				}
			}

Ps : cette modification n’est pas une modif officielle à vos risques et périls :tongue:

1 « J'aime »

Bonjour Defrance,
Je suis sous Dolibarr 8.0.3. Dans les réappros la colonne « déjà en cde fournisseur » est vide alors que j’ai bien des pièces en cde fournisseur. Y-a t’il un paramétrage particulier ou est-ce un bug?
Merci d’avance

I think there is still a recursion error in the class:

lines 692 should read:

	if ($NotInOF) {
		$components[$nbcomponent][0]=$fk_parent;
		$components[$nbcomponent][1]=$qty;
		$nbcomponent++;

otherwise the restock of virtual products is not complete.

Bonjour,
J’utilise la v10.0.6 de Dolibarr, Factory 10.0.+2.1.0, et j’ai récemment installé reStock 10.0.+2.1.0 (2019-07)

Je crée une commande incluant un produit composé (réf. KIT0000128) pour une qte de 101 unités

  • Si je vais sur l’onglet reStock de la fiche commande : les propositions de commandes fournisseurs sont cohérentes avec mes niveaux de stock pour l’ensemble des composants (cf partie gauche de la capture ci-jointe). Et notamment je dois recommander des composants avec la réf. SKFC0000170 et SKCE000119.
  • Si je me rends sur la fiche produit de la réf. KIT0000128, aucune proposition de commande fournisseur --> j’en déduis que depuis la fiche produit, on ne prend pas en compte les commandes en cours, on peut faire de la recommande par rapport au niveau de stock et limite affiché, mais aucun calcul de « A commander » n’y est fait / ok.
  • En revanche, si je me rends sur l’onglet ReStock du menu secondaire et que je filtre sur le tag attribué à ma réf KIT0000128, j’obtiens une liste incomplète de composants (partie droite de la capture d’écran) : il me manque les réf SKFC0000170 et SKCE000119.
    e8f4182c1a876f98cd581c35791f1081216fc9d9_2_690x295

Je ne comprends pas pourquoi ? Qqn a-t-il une idée ?
Merci pour votre aide.

Bonjour EML,
Avez-vous eu une réponse/solution à votre question ? J’ai exactement le même problème et je ne parviens pas à comprendre pourquoi certains éléments d’un produit virtuel sont systématiquement écartés lors des ReStock…
J’envisage l’achat de Factory pour résoudre ce problème mais j’aimerais bien être certain du résultat.
Bonne journée
Vincent

Bonjour,

Malheureusement non, je n’ai pas eu de retour ni trouvé de solution à ce problème bloquant en ce qui me concerne.
J’ai multiplié les tests sans trouver aucune piste de résolution jusque-là.
Désolée de ne pas pouvoir vous apporter plus d’aide.
Bonne journée.

Merci. De mon côté, j’observe une chose. C’est systématiquement le premier produit inséré dans la liste des produits composant le produit virtuel qui est écarté ! Donc si on ajoute systématiquement un « non produit » (=référence nulle) en tête de liste, cela devrait fonctionner.
Je teste et reviens…
Cordialement,

C’est bien cela. Et je vois que le message de @fbosman a l’air de proposer une solution, non ?
@EML, l’avez-vous testée ?
Bien à vous

En ce qui me concerne ce n’est pas systématiquement le premier produit qui manque.
Je n’ai pas pu tester la solution de @fbosman car je ne suis pas « habilitée » à modifier les classes… :wink:

Bonjour
désolée d’avoir tant tardé pour répondre, pas mal de choses à préparer avec la GPAO dans dolibarr…
la correction se fait dans la classe ligne 692,
il faut écrire
if ($components == array()) {
à la place de
if ($NotInOf) {

Bonjour et merci. Nous allons tester cette modification avec hâte.

Bonjour et un grand merci également. Je vais m’empresser de faire tester cette solution à ma DSI !