Problème de récupéraiton attribut supplémentaire (Prix fournisseur) dans module "Lot/Série"

Bonjour à tous,

J’ai créé un attribut supplémentaire (Prix fournisseur) avec le code « prov » (voir ci-dessous) dans le module « Produit » que j’alimente lors d’un ajout de prix d’achat.

J’ai besoin que la valeur de cet attribut supplémentaire (« prov » du module « Produit ») soit présent dans mon module « Lot/Série ».
J’ai eu donc l’idée de créer un attribut supplémentaire avec le code « prov » (voir ci-dessous) dans le module « Lot/Série » qui récupérerait le champ « prov » du module « Produit » en utilisant le champ calculé.

)

Comme vous pouvez le constater (voir ci-dessous), la liste des numéros de lots/séries s’affichent bien mais la colonne « Provenance » reste vide.

Par contre, lorsque j’insère le code suivant dans mon champ calculé :
(($reloadedobj = new Product($db)) && ($reloadedobj->fetchNoCompute($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0)) ? var_dump($reloadedobj->array_options) : var_dump($reloadedobj->array_options)
J’obtiens le résultat suivant :

Quelqu’un pourrait-il m’aider à comprendre et à résoudre mon problème ?

Merci par avance pour votre aide.

Bonjour,

Visiblement votre attribut s’appel « kgcol » et non « prov »

1 « J'aime »

Bonjour @ksar,

Merci beaucoup pour votre retour.

L’attribut « kgcol » existe en effet mais c’est un attribut pour les produits comme le montre l’image suivante :

L’attribut supplémentaire nommé « prov » existe également, elle est rattachée aux attributs supplémentaires (prix fournisseur) du module « Produit » comme le montre l’image ci-dessous :

Est-ce normal que mes attributs supplémentaires (prix fournisseur) ne soit pas prise en compte ?

Bonjour,

Cette formule charge le produit, c’est pour ça que vous avez accès aux champs additionnels produits.

Si vous shouaitez avoir accès aux champs d’un prix fournisseur ce n’est pas la bonne formule

Bonjour @ksar,

Merci pour votre réponse.

Je ne comprends pas car sur Dolibarr, ils indiquent que les attributs supplémentaires (Prix fournisseur) sont ajoutés à « Produits » comme l’indique l’image ci-dessous :
image

J’ai beau chercher la bonne formule mais je ne la trouve pas !
Avez-vous une idée s’il vous plaît ?

Merci par avance,
Loïc.

Bonjour :slight_smile:

l’attribut supplémentaire (produit & services) concerne la table llx_product_extrafields,
l’attribut supplémentaire (prix fournisseur) concerne la table llx_product_fournisseur_price_extrafields
de ce fait le lien qui existe avec la table llx_product est contenu dans le champ fk_product de la table llx_product_fournisseur_price
c’est ce qui explique que vos formules ne fonctionnent pas…

concernant la liste des numéros de série, les tables à considérer sont llx_product_lot et llx_product_lot_extrafields…

Bonne continuation

Bonjour @pcbleu,

merci pour votre retour, je vais regarder cela et je vous tiens au courant.

Bien cordialement,
Loïc.

Sinon pour la provenance d’un produit, sur la fiche produit, vous avez la possibilité de choisir le pays et mettre le code douanier (ou code SH) afin que cela s’affiche dans les pdf

A moins que pour un produit, avec plusieurs numéros de lots, vous ayez une provenance différente ?
Est ce le cas ?

Je crois que j’ai parfois ce cas avec une multinationale qui fabrique le même produit (même réf, même EAN) en Allemagne, en Pologne, et aux USA… ça me serait utile aussi peut-être :slight_smile:

Bonjour @HubZ,

Merci pour votre retour.
Ce n’est qu’un exemple, je vais avoir d’autres données à transmettre de la même manière.

Bien cordialement,
Loïc.

Il y a des extrafields aussi, pour les numéros de lot si je ne me trompe pas, non ?

@fappels ?

Oui en effet @HubZ, il est possible d’ajouter des extrafields sur le module numéros/lot.

Bonjour @pcbleu,

Grâce à votre retour, je commence à comprendre le fonctionnement mais malheureusement cela ne fonctionne toujours pas comme je le souhaite.
Voici la formule mise en place :
(($reloadedobj = new ProductFournisseurPrice($db)) && ($reloadedobj->fetchNoCompute($object->id) > 0) && ($secondloadedobj = new Product($db)) && ($secondloadedobj->fetch($reloadedobj->fk_product) > 0)) ? $secondloadedobj->ref : 'Objet parent product non trouvé'

Par contre avec cette formule, je n’ai plus qu’une ligne dans la liste des numéros de lots/séries.

Avez-vous une idée pour résoudre ce problème ?
Merci par avance.

Bonjour,

cette formule me semble plus correcte, mais il faudrait changer le paramètre passé à la fonction fetchNoCompute, comme dans vos premiers essais…
image

Bonne continuation

Merci @pcbleu,
j’ai essayé en modifiant le paramètre passé à la fonction fetchNoCompute comme ci-dessous :

(($reloadedobj = new ProductFournisseurPrice($db)) && ($reloadedobj->fetchNoCompute($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0) && ($secondloadedobj = new Product($db)) && ($secondloadedobj->fetch($reloadedobj->fk_product) > 0)) ? var_dump($reloadedobj->array_options) : var_dump($reloadedobj->array_options)

Malheureusement le problème est toujours le même c’est-à-dire que je n’ai plus qu’une ligne dans la liste des numéros de lots/séries.

Je ne vois pas pourquoi cela pose encore problème et c’est compliqué sans l’erreur affichée !

Avez-vous une idée ?

Merci par avance.

Édit du 17/05/2022 à 18h20 :
Le problème peut-il provenir du manque de lien avec le lot/série de la ligne en question dans ma formule ?
Si oui, avez-vous une idée pour rajouter ce lien s’il vous plaît ?

Merci par avance.

Bonjour

J’avoue que je ne comprnds pas trop qe que tu veux faire mais qu’entends tu par une ligne ?
Je pense que c’est normal :
tu as un numéro de lot donc tu ne peux avoir qu’une fois « prov »
Si tu as besoin de plusieurs champs « prov » pour un numéro de lot il faut que tu crée N champs ProvN dans les extrafields du module lot/série

Bonjour @WebAuxilium,

En gros je résume les étapes :

  • J’ai un produit avec plusieurs prix fournisseur (prix d’achat) contenant chacun des attributs supplémentaires (Exemple: prov).
  • J’effectue une commande fournisseur.
  • Je réceptionne cette dernière et je saisis un numéro de série/lot.
    Jusque là tout est normal.

À ce moment-là, je souhaite que la valeur du champ prov du prix fournisseur de mon produit (celui correspondant à la commande) soit remis dans un champ attribut supplémentaire (nommé également prov) dans mon module lot/série.

J’espère avoir été plus clair sur ma demande ?

Merci par avance.

Bonjour @pcbleu et @WebAuxilium et les autres,

Petit récapitulatif de mon besoin :

  • J’ai un produit avec plusieurs prix fournisseur (prix d’achat) contenant chacun des attributs supplémentaires (Exemple: prov).
  • J’effectue une commande fournisseur.
  • Je réceptionne cette dernière et je saisis un numéro de série/lot.
    Jusque là tout est normal.

À ce moment-là, je souhaite que la valeur du champ prov du prix fournisseur de mon produit (celui correspondant à la commande) soit remis dans un champ attribut supplémentaire (nommé également prov) dans mon module lot/série.

Voici le champ calculé prov de mon module lot/série :

(($reloadedobj = new ProductFournisseurPrice($db)) && ($reloadedobj->fetchNoCompute($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0) && ($secondloadedobj = new Product($db)) && ($secondloadedobj->fetch($reloadedobj->fk_product) > 0)) ? var_dump($reloadedobj->array_options) : var_dump($reloadedobj->array_options)

Merci par avance pour votre aide !

Bonjour Loic
Il y a quelques mois j’avais commencé de travailler sur un projet similaire sur des informations complémentaires sur les lots / Série (mais je n’ai pas eu le temps d’avancer :slight_smile: )
De mémoire et de ce que je comprends de votre demmande vous cherchez a avoir le champ prov au niveau du numéro de lot. J’en avais conclu qu’il fallait créer l’attribut supplementaire au niveau du module Lot
De plus en relisant rapidement le post je comprends que vous avez défini prov dans le module produit.
Dans ce module, vous n’avez pas la possibilité de récupérer votre prix d’achat qui est dans votre commande. Je pense que vous devez récupérer cette valeur dans la table llx_commande_fournisseurdet
En résumé Creer prov comme attribut supplémentaire dans le module lot/série puis « l’alimenter » avec le prix de votre commande.
bon courage

Bonjour, est ce que ce ne serait pas plus simple et efficace pour tous de faire intégrer dans le core la mémorisation du prix d’achat dans la table des numéros de lot lors de la réception des commandes fournisseurs ?

Bonjour @WebAuxilium et @altatof
Merci pour votre réponse, je pense qu’il y a confusion sur mon besoin car vous me parlez de récupérer le prix d’achat de la commande, or ce n’est pas réellement ce que je souhaite effectuer.

Ci-dessous, voici un récapitulatif de mon besoin :

  • J’ai donc un attribut supplémentaire nommé prov dans le module « Produits » (plus précisément dans l’onglet « Attributs supplémentaires (Prix Fournisseur) ») comme vous pouvez le constater ci-dessous :

  • J’ai également un attribut supplémentaire nommé prov dans le module « Lot/Série » comme vous pouvez le constater ci-dessous :

  • Donc, j’ai un produit avec plusieurs prix fournisseur comme présenté ci-dessous (chacun des prix fournisseur possède une Provenance [=attribut supplémentaire prov du module « Produits »]) :

  • J’effectue une commande fournisseur auprès de mon fournisseur « Ferme Larrere » contenant le produit « LEG001 », comme indiqué ci-dessous :

  • Lors de la réception de cette commande fournisseur, je note un numéro de série/lot comme indiqué ci-dessous :

==> Mon besoin final : Pouvoir récupérer automatiquement la valeur du champ prov du prix fournisseur (pour le fournisseur correspondant à cette commande) de mon produit (« LEG001 ») dans mon attribut supplémentaire nommé prov de mon module « lot/série ».

Pour cela, j’ai donc ajouté le champ calculé (sur l’attribut supplémentaire prov de mon module « lot/série ») suivant :

(($reloadedobj = new ProductFournisseurPrice($db)) && ($reloadedobj->fetchNoCompute($obj->id ? $obj->id : ($obj->rowid ? $obj->rowid : $object->id)) > 0) && ($secondloadedobj = new Product($db)) && ($secondloadedobj->fetch($reloadedobj->fk_product) > 0)) ? var_dump($reloadedobj) : var_dump($reloadedobj)

Malheureusement, cela ne fonctionne pas car j’obtiens l’affichage suivant sur le listing des numéros de lots/séries :

Alors que si je retire ce champ calculé, j’obtiens l’affichage suivant :

Par conséquent, je devrais obtenir l’affichage ci-dessus avec la colonne « Provenance » rempli.

J’espère avoir été plus précis dans ma demande afin que vous puissiez m’aider à résoudre ce problème.

Merci par avance.

==>EDIT DU 09/06/2022 à 16:09 :
J’ai aussi essayé d’ajouter le champ calculé (sur l’attribut supplémentaire prov de mon module « lot/série ») suivant :

mysql_query('select prov from llxwp_product_fournisseur_price_extrafields as pfpe inner join llxwp_product_fournisseur_price as pfp on pfpe.fk_object = pfp.rowid inner join llxwp_product as p on p.rowid = pfp.fk_product inner join `llxwp_product_lot` as pl on pl.fk_product = p.rowid where batch = ($obj->batch ? $obj->batch : ($obj->batch ? $obj->batch : $object->batch)) group by batch');

Voici le résultat obtenu :

Comme vous pouvez le constater, j’ai l’erreur suivante sur chacune de mes lignes :

Bad string syntax to evaluate: mysql_query(‹ select prov from llxwp_product_fournisseur_price_extrafields as pfpe inner join llxwp_product_fournisseur_price as pfp on pfpe.fk_object = pfp.rowid inner join llxwp_product as p on p.rowid = pfp.fk_product inner join llxwp_product_lot as pl on pl.fk_product = p.rowid where batch = ($obj->batch ? $obj->batch : ($obj->batch ? $obj->batch : $object->batch)) group by batch ›);

Avez-vous une idée pour résoudre ce problème ou pour faire fonctionner ma première méthode ?

Merci par avance.