Extra fields ligne

Bonjour
j’ai ajouté l’extra fields ligne suivant « lots » dans ma fiche expedition
Il apparait à l’écran sous mon article
Je saisi l’information nécessaire
Mais quand je génére le pdf il n’y est pas

j’ai ajouté $extrafields_expedition_llx_c_lots au code ci dessous dans le fichier pdf_rouget.module.php /core/modules/expedition/doc

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

				$pdf-\>startTransaction();
				pdf_writelinedesc($pdf,$object,$i,$outputlangs,$this-\>posxpicture-$curX,3,$curX,$curY,$hideref,0,$extrafields_expedition_llx_c_lots);
				
				$pageposafter=$pdf-\>getPage();
				if ($pageposafter \> $pageposbefore)	// There is a pagebreak
				{

Merci de votre aide
Christophe

Bonjour,

que contient la variable
$extrafields_expedition_llx_c_lots ?

avez-vous regardé le wiki sur les extrafields ?


https://wiki.dolibarr.org/index.php/Extrafields

1 « J'aime »

Bonjour
il contient « Texte long »
C’est un Attribut sup Type ligne

Position Libellé Code de l’attribut Type Taille
1 Numéros de lots : lots Texte long 150

Ensuite j’ai 2 attributs sup (pas type ligne) à ajouter
Position Libellé Code de l’attribut Type
1 Disponible chez : frigo Liste de sélection
5 Date prévue d’enlèvement dpt Date

Merci de votre intérêt pour mon problème
J’ai effectivement regardé sur le wiki mais je tourne en rond
La génération en Pdf me provoque une erreur

J’avais trouvé un tuto sympa pour éditer le pdf et même avec ça , ça plante
Ca vient de moi je sais mais je ne trouve pas l’erreur
Si je retrouve le tuto je partagerais

Merci encore

bonjour,
désolé pour ma réponse tardive
là, vu comme ça je ne vois pas trop ce qui coince …
quel est le message d’erreur qui est généré ?
puis-je avoir la totalité du code modifié sur votre modèle ?

Merci Aurélien
Je vais envoyer ça ASAP
En attendant voici le tuto dont je me suis inspiré

TutoAjoutextrafieldssurunelignedepdf_2016-04-13_2017-10-02-2.pdf (611 KB)
Cordialement / Christophe

Pièces jointes :

J’ai parcouru ce tuto, qui me paraît très correct, mais je n’ai pas testé la récupération d’un extrafield sur les lignes pour une facture

mais je l’avais fait pour les propositions de prix, et à mon avis c’est exactement le même mécanisme

voici mon code (qui fonctionne), après avoir créé un extrafield appelé « unit »

tout d’abord faire l’include de la classe puis mettre au début de la function write_file :

   [code]

$extrafields = new ExtraFields($this->db);
$extralabels=$extrafields->fetch_name_optionals_label($object->unit);
$object->fetch($this->rowid);
$object->fetch_optionals($this->rowid,$extralabels);[/code]

ensuite à l’endroit exact ou je veux afficher mon nouveau champ sur le modele (dans la boucle comme expliqué dans le tuto) :

$unit_custom = $object->lines[$i]->array_options['options_unit']; // je recupere la valeur
$pdf->MultiCell ($this->posxqty-$this->posxup-0.8, 3, $outputlangs->convToOutputCharset($unit_custom),0,'C'); // je l'affiche dans le pdf

tu peux peut-être réessayer en te calquant sur ce code

Bonne chance

1 « J'aime »

Bonjour,
je me permets de faire un petit up du sujet après avoir suivi le tuto à plusieurs reprises sans succès j’ai essayé de calqué ce que vous avez fait mais ça ne récupère rien aucune valeur n’est affichée sur mon pdf

Bonjour,

Normalement ça marche,

VOus pouvez décrire pas à pas ce que vous avez fait avec copie d’écran/code ?

Merci.

Bonjour,

Merci de votre réponse.
j’ai rajouter ses 4 lignes dans la fonction write_ (cf pièce jointe rajout_extrafield)
ensuite à l’endroit à afficher j’ai rajouter la ceci en paramètre.( $outputlangs->convToOutputCharset($object->lignes[$i]->array_options[‹ options_unit ›])

Rien ne s’ffiche

Pièces jointes :

Bonjour,

Le code $outputlangs->convToOutputCharset($object->lignes[$i]->array_options n’est pas complet il manque des choses pour que ça marche.

Si vous voulez vraiment que l’on vous aide, merci d’envoyer le fichier php complet ainsi qu’une copie d’écran de la configuration des extrafields.

ci joint le pdf complet
Merci pour votre disponibilité
(je n’arrive pas à joindre le fichier je ne sais pas pourquoi)

Pièces jointes :

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