GPAO désassemblage

bonjour,
j’ai un peu testé le nouveau module BOM et la future GPAO c’est très intéressant… mais j’aimerai une fonction à l’envers :
Dans mon activité je revend des pièces détachées provenant d’appareils en partie défectueux.
Les pièces de ces appareils sont existantes en tant que produits dans mon dolibarr actuel.
Je peux donc facilement générer les BOM correspondant aux produits complets.

Sauf que je ne veux pas les assembler, mais les « déconstruire » ou les désassembler.
Une fois désassemblés, les pièces défecteuses partent au recyclage, et je souhaiterai pouvoir « ventiler » les pièces utilisables dans mon stock comme je le fait avec les commandes.

En somme plutôt que des « ordres de fabrication », je voudrait générer des « ordre de déconstruction »

Est-ce que les développeurs actuels peuvent me dire si la structure que vous avez prévu permettrai de mettre en place cette fonctionnalité ?

Selon la quantité de code, je pourrait en faire une partie, ou un financement est possible.

Raphaël

Bonjour,

Merci de ne pas poster plusieurs fois la même question.

bon j’ai jeté un coup d’oeil au code de la classe MO https://github.com/Dolibarr/dolibarr/blob/develop/htdocs/mrp/class/mo.class.php

si je souhaite déconstruire, l’objet en lui même reste identique avec la gestion des lignes pour la BOM, seule la logique de stockage des infos remettrai en question le code actuel, qui n’est pas prévu pour gérer des quantités de fabrication négatives (j’ai essayé et ca créé des MO fantômes qu’on ne peut pas visualiser, mais ca ne fait pas planter dolibarr).

Du coup il me semblerait plus « propre » de créer une nouvelle classe « DMO » pour Demanufacturing Order, qui serait quasi similaire à MO, mais je crain que ca dépasse ma capacité à gérer cà tout seul.

donc si un développeur intéressé par ce travail passe par ici, qu’il me fasse signe

Hello il est déjà possible de réaliser ce genre de chose avec le module additionnel Factory (dans sa version gratuite et payante).
Je précise que la version gratuite sera à mise à jour compatible avec la V12 d’ici la rentrée.

bonjour @defrance peux-tu préciser ?
j’ai rapidement parcouru la doc du module Factory et j’ai simplement vu la notion de « déchets » ou de pièces non utilisées en fab qui sont remises en stock, mais pas vraiment d’ordre de dé-fabrication.
merci pour tes lumières, ca m’intéresse, et si c’est dans le core dolibarr à la rentrée c’est magique :wink:

il suffit de saisir une quantité unitaire inférieur à 1
par exemple .1 si on veux diviser par 10 un composant

@defrance en effet j’ai bien vu cette option dans la doc, mais ca ne correspond pas à ce que je souhaite faire.

imaginons le produit : Joli_Boitier_pour_sonette
composé des produits suivants dans la BOM Joli_Boitier_pour_sonette :

  • 1x face_avant
  • 1x face_arrière
  • 1x carte_électronique
  • 4x tampons_caoutchouc

Imaginon qu’un revendeur lamba me renvoi un de ces boitiers pour sonette qu’il a retrouvé sous une palette et qu’il ne peux pas le mettre en magasin, à réception chez moi je fais un diagnostic et me rend compte qu’il est quand même u peu abimé. Alors je veux déconstruire le Joli_Boitier_pour_sonette. Je ne veux pas 1/10eme de boitier, mais plutot :

  • 1x face_avant à remettre en stock (occasion avec ref correspondante dans la bom)
  • 1x face_arrière à jeter parcequ’en mauvais état
  • 1x carte_électronique à remettre en stock (occasion avec ref correspondante dans la bom)
  • 4x tampons_caoutchouc à jeter ca non réutilisable

est-ce que c’est plus explicite, ou c’est juste moi qui suis à côté de la plaque ? :crazy_face:

1 « J'aime »

Bonjour,
Je me permet de faire un petit UP car c’est une fonction qui me serais bien pratique.
@jerash, ton explication est très claire.

sujet toujours ouvert chez moi, ca m’intéresse toujours si un developpeur est prêt à s’impliquer

Bonjour,

la notion de désassemblage est prévue en V14. (je ne sais pas dans quelle mesure)

@Arre intéressant merci, est-ce que c’est spécifié sur une roadmap ou autre que je puisse y jeter un coup d’oeil ? sur le github officiel je ne vois pas de tag v14, juste v13 ou develop. Si tu as une info ca m’intéresse :slight_smile:

Non, il n’y a pas de roadmap publique car il n’y a pas d’equipe de dev dédiée « à temps plein » : ça sera selon le temps dispo des différents contributeurs. (l’info vient du lead dev @eldy sur un autre post du forum)

Mais surveiller la branche dev est une bonne idée : après… tu peux aussi manifester ton intérêt sur le github dolibarr et y contribuer :slight_smile:

1 « J'aime »

La fonction de décomposition est bien présente dans le module factory (y compris la version gratuite).
pour ce qui est du second besoin (la mise au rebut de certains composant) il est possible soit :

  • de ne pas les inclures dans la nomenclature de décomposition
  • de les inclure mais ensuite de les sortir du stock en rebut dans les meme proportions

Pour l’avoir testé : la solution de @defrance est adaptée et performante pour cette problématique.

Pour la discussion à la quelle je faisais référence (en devenir…) plus haut dans ce post, un peu de lecture :

merci pour vos réponses.
Ca reste flou pour moi … dans la documentation du module factory il n’est toujours mention que de gérer la déconstruction par 1/10e par sur la base d’une BOM par « Ordre de déconstruction », et la version gratuite en v10 que je peux tester n’est pas compatible avec ma v12 actuelle.
Le module payant (à prix tout à fait attractif) fait peut être le job, mais sans documentation claire je ne suis même pas sûr, vous comprenez ma position ?

il y a un environnement de démo pour tester mes modules ici :
http://dlbdemo.patas-monkey.com

Voici une requete SQL que j’utilise pour démonter une nomenclature jusqu’ a 3 niveaux :

	$sql_nomenclature = 'SELECT ';
	$sql_nomenclature.= 'CASE ';
	$sql_nomenclature.= 'WHEN ndetfor.fk_product   IS NOT NULL THEN ndetfor.fk_product '; 
	$sql_nomenclature.= 'WHEN ndetter.fk_product  IS NOT NULL THEN ndetter.fk_product ';
	$sql_nomenclature.= 'WHEN ndetbis.fk_product   IS NOT NULL THEN ndetbis.fk_product '; 
	$sql_nomenclature.= 'WHEN ndet.fk_product   IS NOT NULL THEN ndet.fk_product '; 
	$sql_nomenclature.= 'END ';
	$sql_nomenclature.= 'AS id_composant, ';
	$sql_nomenclature.= 'CASE ';
	$sql_nomenclature.= 'WHEN pfive.ref IS NOT NULL THEN pfive.ref ';
	$sql_nomenclature.= 'WHEN pfor.ref IS NOT NULL THEN pfor.ref ';
	$sql_nomenclature.= 'WHEN pter.ref IS NOT NULL THEN pter.ref ';
	$sql_nomenclature.= 'WHEN pbis.ref IS NOT NULL THEN pbis.ref ';
	$sql_nomenclature.= 'END AS REFERENCE, ';
	$sql_nomenclature.= 'CASE ';
	$sql_nomenclature.= 'WHEN pfive.label IS NOT NULL THEN pfive.label ';
	$sql_nomenclature.= 'WHEN pfor.label IS NOT NULL THEN pfor.label ';
	$sql_nomenclature.= 'WHEN pter.label IS NOT NULL THEN pter.label ';
	$sql_nomenclature.= 'WHEN pbis.label IS NOT NULL THEN pbis.label ';
	$sql_nomenclature.= 'END AS DESIGNATION, ';	
	$sql_nomenclature.= 'CASE ';
	$sql_nomenclature.= 'WHEN ndetfor.qty  IS NOT NULL THEN ndetfor.qty * ndetter.qty * ndetbis.qty *ndet.qty ';
	$sql_nomenclature.= 'WHEN ndetter.qty  IS NOT NULL THEN  ndetter.qty * ndetbis.qty *ndet.qty ';
	$sql_nomenclature.= 'WHEN ndetbis.qty  IS NOT NULL THEN  ndetbis.qty *ndet.qty ';
	$sql_nomenclature.= 'WHEN ndet.qty  IS NOT NULL THEN  ndet.qty ';
	$sql_nomenclature.= 'END ';
	$sql_nomenclature.= 'AS quantite ';	
	$sql_nomenclature.= 'FROM '.MAIN_DB_PREFIX.'nomenclaturedet AS ndet ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclature AS n ON ( n.rowid = ndet.fk_nomenclature) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'product AS p ON (p.rowid = n.fk_object ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'product AS pbis ON (pbis.rowid = ndet.fk_product ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclature AS nbis ON ( nbis.fk_object = pbis.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclaturedet AS ndetbis ON ( ndetbis.fk_nomenclature = nbis.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'product AS pter ON (pter.rowid = ndetbis.fk_product ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclature AS nter ON ( nter.fk_object = pter.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclaturedet AS ndetter ON ( ndetter.fk_nomenclature = nter.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'product AS pfor ON (pfor.rowid = ndetter.fk_product ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclature AS nfor ON ( nfor.fk_object = pfor.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'nomenclaturedet AS ndetfor ON ( ndetfor.fk_nomenclature = nfor.rowid ) ';
	$sql_nomenclature.= 'LEFT JOIN '.MAIN_DB_PREFIX.'product AS pfive ON (pfive.rowid = ndetfor.fk_product ) ';
	$sql_nomenclature.= 'WHERE n.rowid ='.$idchoixNOM;// id de la nomenclature

@Maurice63200 merci pour ta contribution, on peut en effet toujours gérer cà directement en base sans interface dans dolibarr… mais du ocup il faudrait aussi gérer les mouvements de stocks à la mano