Extra fields ligne

ci joint le pdf

Bonjour je fais un petit up.

Ksar vous auriez une idée de quel pourrait être le problème?

Bonjour :happy:

une piste dans ce post : pour retrouver les extrafields

Bonne continuation

1 « J'aime »

BOnjour,

Encore une fois je n’ai pas de boules de cristale, pour vous aider j’ai besoin du fichier php complet ainsi qu’une copie d’écran de la configuration des extrafields.

1 « J'aime »

j’ai joint le fichier php

require_once DOL_DOCUMENT_ROOT.'/core/modules/expedition/modules_expedition.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
require_once DOL_DOCUMENT_ROOT.'/core/class/extrafields.class.php'; ---------------------------------------------------------------------------------


/**
 *	Classe permettant de generer les borderaux envoi au modele Rouget
 */
class pdf_rouget_specif extends ModelePdfExpedition
{
	var $emetteur;	// Objet societe qui emet


	/**
	 *	Constructor
	 *
	 *	@param	DoliDB	$db		Database handler
	 */
	function __construct($db=0)
	{
		global $conf,$langs,$mysoc;

		$this->db = $db;
		$this->name = "rouget specif";
		$this->description = $langs->trans("DocumentModelStandardPDF");

		$this->type = 'pdf';
		$formatarray=pdf_getFormat();
		$this->page_largeur = $formatarray['width'];
		$this->page_hauteur = $formatarray['height'];
		$this->format = array($this->page_largeur,$this->page_hauteur);
		$this->marge_gauche=isset($conf->global->MAIN_PDF_MARGIN_LEFT)?$conf->global->MAIN_PDF_MARGIN_LEFT:10;
		$this->marge_droite=isset($conf->global->MAIN_PDF_MARGIN_RIGHT)?$conf->global->MAIN_PDF_MARGIN_RIGHT:10;
		$this->marge_haute =isset($conf->global->MAIN_PDF_MARGIN_TOP)?$conf->global->MAIN_PDF_MARGIN_TOP:10;
		$this->marge_basse =isset($conf->global->MAIN_PDF_MARGIN_BOTTOM)?$conf->global->MAIN_PDF_MARGIN_BOTTOM:10;

		$this->option_logo = 1;

		// Get source company
		$this->emetteur=$mysoc;
		if (! $this->emetteur->country_code) $this->emetteur->country_code=substr($langs->defaultlang,-2);    // By default if not defined

		// Define position of columns
		$this->posxdesc=$this->marge_gauche+1;
		$this->posxweightvol=$this->page_largeur - $this->marge_droite - 78;
		$this->posxqtyordered=$this->page_largeur - $this->marge_droite - 56;
		$this->posxqtytoship=$this->page_largeur - $this->marge_droite - 28;
		$this->posxpuht=$this->page_largeur - $this->marge_droite;

		if (!empty($conf->global->MAIN_PDF_SHIPPING_DISPLAY_AMOUNT_HT)) {

			$this->posxweightvol=$this->page_largeur - $this->marge_droite - 118;
			$this->posxqtyordered=$this->page_largeur - $this->marge_droite - 96;
			$this->posxqtytoship=$this->page_largeur - $this->marge_droite - 68;
			$this->posxpuht=$this->page_largeur - $this->marge_droite - 40;
			$this->posxtotalht=$this->page_largeur - $this->marge_droite - 20;
		}

		$this->posxpicture=$this->posxweightvol - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH);	// width of images

		if ($this->page_largeur < 210) // To work with US executive format
		{
		    $this->posxweightvol-=20;
		    $this->posxpicture-=20;
		    $this->posxqtyordered-=20;
		    $this->posxqtytoship-=20;
		}

		if (! empty($conf->global->SHIPPING_PDF_HIDE_ORDERED))
		{
		    $this->posxweightvol += ($this->posxqtytoship - $this->posxqtyordered);
		    $this->posxpicture += ($this->posxqtytoship - $this->posxqtyordered);
		    $this->posxqtyordered = $this->posxqtytoship;
		}
	}

	/**
	 *	Function to build pdf onto disk
	 *
	 *	@param		Object		$object			Object expedition to generate (or id if old method)
	 *	@param		Translate	$outputlangs		Lang output object
     *  @param		string		$srctemplatepath	Full path of source filename for generator using a template file
     *  @param		int			$hidedetails		Do not show line details
     *  @param		int			$hidedesc			Do not show desc
     *  @param		int			$hideref			Do not show ref
     *  @return     int         	    			1=OK, 0=KO
	 */
	function write_file($object,$outputlangs,$srctemplatepath='',$hidedetails=0,$hidedesc=0,$hideref=0)
	{
		global $user,$conf,$langs,$hookmanager;

		$object->fetch_thirdparty();
		$extrafieldsline=new ExtraFields($this->db);   -----------------------------------------------------------------------------------------------------------
		$extralabels=$extrafieldsline->fetch_name_optionals_label($object->table_element,true);
	


		if (! is_object($outputlangs)) $outputlangs=$langs;
		// For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO
		if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1';

		$outputlangs->load("main");
		$outputlangs->load("dict");
		$outputlangs->load("companies");
		$outputlangs->load("bills");
		$outputlangs->load("products");
		$outputlangs->load("propal");
		$outputlangs->load("deliveries");
        $outputlangs->load("sendings");
		$outputlangs->load("productbatch");

		$nblignes = count($object->lines);

        // Loop on each lines to detect if there is at least one image to show
        $realpatharray=array();
        if (! empty($conf->global->MAIN_GENERATE_SHIPMENT_WITH_PICTURE))
        {
            $objphoto = new Product($this->db);

            for ($i = 0 ; $i < $nblignes ; $i++)
            {
                if (empty($object->lines[$i]->fk_product)) continue;

				$objphoto = new Product($this->db);
				$objphoto->fetch($object->lines[$i]->fk_product);

				$pdir = get_exdir($object->lines[$i]->fk_product,2,0,0,$objphoto,'product') . $object->lines[$i]->fk_product ."/photos/";
				$dir = $conf->product->dir_output.'/'.$pdir;

				$realpath='';

                foreach ($objphoto->liste_photos($dir,1) as $key => $obj)
                        {
                            if (empty($conf->global->CAT_HIGH_QUALITY_IMAGES))		// If CAT_HIGH_QUALITY_IMAGES not defined, we use thumb if defined and then original photo
                            {
                                if ($obj['photo_vignette'])
                                {
                                    $filename= $obj['photo_vignette'];
                                }
                                else
                                {
                                    $filename=$obj['photo'];
                                }
                            }
                            else
                            {
                                $filename=$obj['photo'];
                            }

                            $realpath = $dir.$filename;
                            break;
                }

                if ($realpath) $realpatharray[$i]=$realpath;
            }
        }

        if (count($realpatharray) == 0) $this->posxpicture=$this->posxweightvol;

		if ($conf->expedition->dir_output)
		{
			// Definition de $dir et $file
			if ($object->specimen)
			{
				$dir = $conf->expedition->dir_output."/sending";
				$file = $dir . "/SPECIMEN.pdf";
			}
			else
			{
				$expref = dol_sanitizeFileName($object->ref);
				$dir = $conf->expedition->dir_output."/sending/" . $expref;
				$file = $dir . "/" . $expref . ".pdf";
			}

			if (! file_exists($dir))
			{
				if (dol_mkdir($dir) < 0)
				{
					$this->error=$langs->transnoentities("ErrorCanNotCreateDir",$dir);
					return 0;
				}
			}

			if (file_exists($dir))
			{
				// Add pdfgeneration hook
				if (! is_object($hookmanager))
				{
					include_once DOL_DOCUMENT_ROOT.'/core/class/hookmanager.class.php';
					$hookmanager=new HookManager($this->db);
				}
				$hookmanager->initHooks(array('pdfgeneration'));
				$parameters=array('file'=>$file,'object'=>$object,'outputlangs'=>$outputlangs);
				global $action;
				$reshook=$hookmanager->executeHooks('beforePDFCreation',$parameters,$object,$action);    // Note that $action and $object may have been modified by some hooks

				// Set nblignes with the new facture lines content after hook
				$nblignes = count($object->lines);

				$pdf=pdf_getInstance($this->format);
				$default_font_size = pdf_getPDFFontSize($outputlangs);
				$heightforinfotot = 8;	// Height reserved to output the info and total part
		        $heightforfreetext= (isset($conf->global->MAIN_PDF_FREETEXT_HEIGHT)?$conf->global->MAIN_PDF_FREETEXT_HEIGHT:5);	// Height reserved to output the free text on last page
	            $heightforfooter = $this->marge_basse + 8;	// Height reserved to output the footer (value include bottom margin)
                $pdf->SetAutoPageBreak(1,0);

                if (class_exists('TCPDF'))
                {
                    $pdf->setPrintHeader(false);
                    $pdf->setPrintFooter(false);
                }
                $pdf->SetFont(pdf_getPDFFont($outputlangs));
                // Set path to the background PDF File
                if (empty($conf->global->MAIN_DISABLE_FPDI) && ! empty($conf->global->MAIN_ADD_PDF_BACKGROUND))
                {
                    $pagecount = $pdf->setSourceFile($conf->mycompany->dir_output.'/'.$conf->global->MAIN_ADD_PDF_BACKGROUND);
                    $tplidx = $pdf->importPage(1);
                }

				$pdf->Open();
				$pagenb=0;
				$pdf->SetDrawColor(128,128,128);

				if (method_exists($pdf,'AliasNbPages')) $pdf->AliasNbPages();

				$pdf->SetTitle($outputlangs->convToOutputCharset($object->ref));
				$pdf->SetSubject($outputlangs->transnoentities("Shipment"));
				$pdf->SetCreator("Dolibarr ".DOL_VERSION);
				$pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs)));
				$pdf->SetKeyWords($outputlangs->convToOutputCharset($object->ref)." ".$outputlangs->transnoentities("Shipment"));
				if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false);

				$pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite);   // Left, Top, Right

				// New page
				$pdf->AddPage();
				if (! empty($tplidx)) $pdf->useTemplate($tplidx);
				$pagenb++;
				$this->_pagehead($pdf, $object, 1, $outputlangs);
				$pdf->SetFont('','', $default_font_size - 1);
				$pdf->MultiCell(0, 3, '');		// Set interline to 3
				$pdf->SetTextColor(0,0,0);

				$tab_top = 90;
				$tab_top_newpage = (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)?42:10);
				$tab_height = 130;
				$tab_height_newpage = 150;

				// Incoterm
				$height_incoterms = 0;
				if ($conf->incoterm->enabled)
				{
					$desc_incoterms = $object->getIncotermsForPDF();
					if ($desc_incoterms)
					{
						$tab_top = 88;

						$pdf->SetFont('','', $default_font_size - 1);
						$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top-1, dol_htmlentitiesbr($desc_incoterms), 0, 1);
						$nexY = $pdf->GetY();
						$height_incoterms=$nexY-$tab_top;

						// Rect prend une longueur en 3eme param
						$pdf->SetDrawColor(192,192,192);
						$pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_incoterms+1);

						$tab_top = $nexY+6;
						$height_incoterms += 4;
					}
				}

				if (! empty($object->note_public) || ! empty($object->tracking_number))
				{
					$tab_top = 88 + $height_incoterms;
					$tab_top_alt = $tab_top;

					$pdf->SetFont('','B', $default_font_size - 2);
					$pdf->writeHTMLCell(60, 4, $this->posxdesc-1, $tab_top-1, $outputlangs->transnoentities("TrackingNumber")." : " . $object->tracking_number, 0, 1, false, true, 'L');

					$tab_top_alt = $pdf->GetY();
					//$tab_top_alt += 1;

					// Tracking number
					if (! empty($object->tracking_number))
					{
						$object->GetUrlTrackingStatus($object->tracking_number);
						if (! empty($object->tracking_url))
						{
							if ($object->shipping_method_id > 0)
							{
								// Get code using getLabelFromKey
								$code=$outputlangs->getLabelFromKey($this->db,$object->shipping_method_id,'c_shipment_mode','rowid','code');
								$label='';
								if ($object->tracking_url != $object->tracking_number) $label.=$outputlangs->trans("LinkToTrackYourPackage")."<br>";
								$label.=$outputlangs->trans("SendingMethod").": ".$outputlangs->trans("SendingMethod".strtoupper($code));
								//var_dump($object->tracking_url != $object->tracking_number);exit;
								if ($object->tracking_url != $object->tracking_number)
								{
									$label.=" : ";
									$label.=$object->tracking_url;
								}
								$pdf->SetFont('','B', $default_font_size - 2);
								$pdf->writeHTMLCell(60, 4, $this->posxdesc-1, $tab_top_alt, $label, 0, 1, false, true, 'L');

								$tab_top_alt = $pdf->GetY();
							}
						}
					}

					// Notes
					if (! empty($object->note_public))
					{
						$pdf->SetFont('','', $default_font_size - 1);   // Dans boucle pour gerer multi-page
						$pdf->writeHTMLCell(190, 3, $this->posxdesc-1, $tab_top_alt, dol_htmlentitiesbr($object->note_public), 0, 1);
					}

					$nexY = $pdf->GetY();
					$height_note=$nexY-$tab_top;

					// Rect prend une longueur en 3eme param
					$pdf->SetDrawColor(192,192,192);
					$pdf->Rect($this->marge_gauche, $tab_top-1, $this->page_largeur-$this->marge_gauche-$this->marge_droite, $height_note+1);

					$tab_height = $tab_height - $height_note;
					$tab_top = $nexY+6;
				}
				else
				{
					$height_note=0;
				}

				$iniY = $tab_top + 7;
				$curY = $tab_top + 7;
				$nexY = $tab_top + 7;

				// Loop on each lines
				for ($i = 0; $i < $nblignes; $i++)
				{
					$object->lines[$i]->fetch_optionals($object->lines[$i]->rowid); --------------------------------------------------------------
					$optionkeyname="unit";
					$unityvalue = $extrafieldsline->showOutputField($optionkeyname, $object->lines[$i]->array_options['options_'.$optionkeyname]);
					
					$curY = $nexY;
					$pdf->SetFont('','', $default_font_size - 1);   // Into loop to work with multipage
					$pdf->SetTextColor(0,0,0);

					// Define size of image if we need it
					$imglinesize=array();
					if (! empty($realpatharray[$i])) $imglinesize=pdf_getSizeForImage($realpatharray[$i]);

					$pdf->setTopMargin($tab_top_newpage);
					$pdf->setPageOrientation('', 1, $heightforfooter+$heightforfreetext+$heightforinfotot);	// The only function to edit the bottom margin of current page to set it.
					$pageposbefore=$pdf->getPage();

					$showpricebeforepagebreak=1;
					$posYAfterImage=0;
					$posYAfterDescription=0;

					// We start with Photo of product line
					if (isset($imglinesize['width']) && isset($imglinesize['height']) && ($curY + $imglinesize['height']) > ($this->page_hauteur-($heightforfooter+$heightforfreetext+$heightforinfotot)))	// If photo too high, we moved completely on new page
					{
						$pdf->AddPage('','',true);
						if (! empty($tplidx)) $pdf->useTemplate($tplidx);
						if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
						$pdf->setPage($pageposbefore+1);

						$curY = $tab_top_newpage;
						$showpricebeforepagebreak=0;
					}

					if (isset($imglinesize['width']) && isset($imglinesize['height']))
					{
						$curX = $this->posxpicture-1;
						$pdf->Image($realpatharray[$i], $curX + (($this->posxweightvol-$this->posxpicture-$imglinesize['width'])/2), $curY, $imglinesize['width'], $imglinesize['height'], '', '', '', 2, 300);	// Use 300 dpi
						// $pdf->Image does not increase value return by getY, so we save it manually
						$posYAfterImage=$curY+$imglinesize['height'];
					}

					// Description of product line
					$curX = $this->posxdesc-1;

					$pdf->startTransaction();
					pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->posxpicture-$curX,3,$curX,$curY,$hideref,$hidedesc);

					$pageposafter=$pdf->getPage();
					if ($pageposafter > $pageposbefore)	// There is a pagebreak
					{
						$pdf->rollbackTransaction(true);
						$pageposafter=$pageposbefore;
						//print $pageposafter.'-'.$pageposbefore;exit;
						$pdf->setPageOrientation('', 1, $heightforfooter);	// The only function to edit the bottom margin of current page to set it.
						pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this->posxpicture-$curX,3,$curX,$curY,$hideref,$hidedesc);

						$pageposafter=$pdf->getPage();
						$posyafter=$pdf->GetY();
						//var_dump($posyafter); var_dump(($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot))); exit;
						if ($posyafter > ($this->page_hauteur - ($heightforfooter+$heightforfreetext+$heightforinfotot)))	// There is no space left for total+free text
						{
							if ($i == ($nblignes-1))	// No more lines, and no space left to show total, so we create a new page
							{
								$pdf->AddPage('','',true);
								if (! empty($tplidx)) $pdf->useTemplate($tplidx);
								if (empty($conf->global->MAIN_PDF_DONOTREPEAT_HEAD)) $this->_pagehead($pdf, $object, 0, $outputlangs);
								$pdf->setPage($pageposafter+1);
							}
						}
						else
						{
							// We found a page break
							$showpricebeforepagebreak=0;
						}
					}
					else	// No pagebreak
					{
						$pdf->commitTransaction();
					}
					$posYAfterDescription=$pdf->GetY();

					$nexY = $pdf->GetY();
					$pageposafter=$pdf->getPage();

					$pdf->setPage($pageposbefore);
					$pdf->setTopMargin($this->marge_haute);
					$pdf->setPageOrientation('', 1, 0);	// The only function to edit the bottom margin of current page to set it.

					// We suppose that a too long description or photo were moved completely on next page
					if ($pageposafter > $pageposbefore && empty($showpricebeforepagebreak)) {
						$pdf->setPage($pageposafter); $curY = $tab_top_newpage;
					}

					// We suppose that a too long description is moved completely on next page
					if ($pageposafter > $pageposbefore) {
						$pdf->setPage($pageposafter); $curY = $tab_top_newpage;
					}

					$pdf->SetFont('','', $default_font_size - 1);   // On repositionne la police par defaut

					$pdf->SetXY($this->posxweightvol, $curY);
					$weighttxt='';
					if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->weight)
					{
					    $weighttxt=round($object->lines[$i]->weight * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->weight_units,"weight");
					}
					$voltxt='';
					if ($object->lines[$i]->fk_product_type == 0 && $object->lines[$i]->volume)
					{
					    $voltxt=round($object->lines[$i]->volume * $object->lines[$i]->qty_shipped, 5).' '.measuring_units_string($object->lines[$i]->volume_units?$object->lines[$i]->volume_units:0,"volume");
					}

					//$pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt, 0, 0, false, true, 'C');
					//$pdf->MultiCell(($this->posxqtyordered - $this->posxweightvol), 3, $weighttxt.(($weighttxt && $voltxt)?'<br>':'').$voltxt,'','C');
					$pdf->writeHTMLCell($this->posxqtyordered - $this->posxweightvol + 2, 3, $this->posxweightvol - 1, $curY, $unityvalue, 0, 0, false, true, 'C');
					if (empty($conf->global->SHIPPING_PDF_HIDE_ORDERED))
					{
					   $pdf->SetXY($this->posxqtyordered, $curY);
					  // $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $object->lines[$i]->qty_asked,'','C');
					   $pdf->MultiCell(($this->posxqtytoship - $this->posxqtyordered), 3, $unityvalue,'','C');
					}

Désolé de l’avoir envoyé de la sorte mais je n’arrivais pas à joindre de fichier. je vous ai envoyé le code jusqu’où j’ai effectué ma dernière modification.
Pour ce qui est de mon attribut supplémentaire voici une capture d’écran.

Merci encore pour votre temps.

Pièces jointes :

est cette fonction qui permet de récupérer la clé et le nom des éléments des extrafields?

Bonjour,

En l’état votre fichier ne peut pas marcher, il ya des « --------------------------------------------------------------------------------- » a supprimer en six endroits.
Il manque aussi au minimum un [code]

<?php [/code] au début du fichier Concernant les extra fields, il y a une erreur dans la ligne suivante [code] $extralabels=$extrafieldsline->fetch_name_optionals_label($object->table_element,true);[/code] a remplacer par [code] $extralabelsline = $extrafieldsline ->fetch_name_optionals_label($object->table_element_line);[/code] @+

merci pour votre réponse.
le <>php était inséré plus haut,
J’ai effectué la modification du table_element_line mais rien ne s’affiche sur le pdf. est ce qu’il y’aurait moyen de faire un test sur la récupération de la clé de l’extrafields?

Bonjour,

Vous pouvez toujours faire un

print_r ($object->lines[$i]->array_options);
ou un

[code]
file_put_contents("./test.txt",$object->lines[$i]->array_options);[/code

Bonjour,
Je suis désolé de revenir encore sur ce sujet :unhappy: mais j’ai eu beau suivre le tutoriel des patas-monkey et les différentes aides(dont je tiens encore à remercier tout ceux qui m’ont aider jusque là) mais je n’arrive toujours pas à afficher les valeurs d’un extrafields sur mon pdf. Si quelqu’un sait quel peut etre le soucis ou à déjà réussi en utilisant le tutoriel serait possible de joindre le fichier qui modifié pour que je puisse en bénéficier.

Merci d’avance

Bonjour,

J’en ai fait plusieurs et ça marche à chaque fois.
Pouvez-vous envoyer votre dernière version du php ici https://pastebin.com/

1 « J'aime »

c’est fait.
ci joint le lien
https://pastebin.com/9sLXu8rB

petit up :happy: :whistle:

Bonjour,

Toujours une erreur dans le php

$extralabels=$extrafields->fetch_name_optionals_label($object->table_element_line);

a remplacer par

[code]
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);[/code

Merci pour la réponse ,
jusque là rien en s’affiche et maintenant(lien code modifié extrafield - Pastebin.com)
j’ai une erreur qui s’affichait avant

Pièces jointes :

Bonjour ,
Je voudrais énormément vous remercier ksar pour votre aide j’ai finalement réussi à récupérer mon attribut mon problème était au niveau de la création de mon attribut je ne choisissait pas la bonne colonne.

J’aimerais savoir si c’est possible d’afficher un attribut supplémentaire d’un produit sur une fiche d’expédition? j’ai des caractéristiques d’un produit que j’aimerais associer à ma fiche d’expédition mais j’ai remarqué que les tables d’extrafields étaient reparti par type d’objet

est ce possible de le faire ?

Bonjour,

Oui c’est possible, mais je n’ai jamais fait le code.
L’idée serrait de :

  1. tester que la ligne est bien un produit
  2. recuperer l’objet produit
  3. charger les extrafields du produit.
if ($object->lines[$i]->fk_product)
{
	require_once (DOL_DOCUMENT_ROOT."/product/class/product.class.php");		
	$product = new Product($this->db);
	$product->fetch($object->lines[$i]->fk_product);

	$extrafields_product = new ExtraFields($this->db)
	$extralabels_product = $extrafields_product->fetch_name_optionals_label($product->table_element);
	$product->fetch_optionals($product->rowid, $extralabels_product);

	//On devrait pouvoir utiliser les extrafields produit comme cela 
	$product->array_options['options_xxxxxxxxx'];
}

A inserer dans la partie ou l’on boucle sur les lignes // Loop on each lines for ($i = 0; $i < $nblignes; $i++)
C’est non tester donc à voir si ça marche.

Merci de votre réponse je me permets juste de poser une autre question. Est ce normal que les valeurs des attributs supplémentaires définis caculés automatiquement ne s’affichent pas en base de données?

pdf_xxxxx.modules.zip (8.43 KB)

Bonjour à tous
Sur le principe de ce même tuto

Je cherche à insérer mes extrafields sur la fiche produit
Si la génération se passe très bien, aucun extrafield n’est inséré dans mon pdf
J’ai joint mon fichier si quelqu’un avait une idée, une piste

D’avance merci
Christophe
Dolibarr 10.0.1

Bonjour

Pouvez-vous m’aider à limiter le nombre de lignes qui doivent apparaître dans le fichier PDF de l’inventaire ?

Il y a trop de lignes sous les titres,
Je vous remercie de votre aide.