diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index 5e24417f61851ebb9e115190221129c04e715072..892ee14e0f8609db64398f840cc893ea51604ca1 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -266,7 +266,7 @@ class FactureFournisseur extends CommonInvoice
 				{
 	            	if (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) // For avoid conflicts if trigger used
 					{
-						$result=$this->insertExtraFields();
+						$result=$this->insertExtraFields();               // This also set $this->error or $this->errors if errors are found
 						if ($result < 0)
 						{
 							$error++;
@@ -274,11 +274,15 @@ class FactureFournisseur extends CommonInvoice
 					}
 				}
 				else if ($reshook < 0) $error++;
-                // Call trigger
-                $result=$this->call_trigger('BILL_SUPPLIER_CREATE',$user);
-                if ($result < 0) $error++;
-                // End call triggers
-
+				
+				if (! $error)
+				{
+                    // Call trigger
+                    $result=$this->call_trigger('BILL_SUPPLIER_CREATE',$user);
+                    if ($result < 0) $error++;
+                    // End call triggers
+				}
+				
                 if (! $error)
                 {
                     $this->db->commit();
@@ -307,7 +311,7 @@ class FactureFournisseur extends CommonInvoice
             }
             else
             {
-                $this->error=$this->db->error();
+                $this->error=$this->db->lasterror();
                 $this->db->rollback();
                 return -2;
             }
diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php
index 6032a7a5036ba6b59b952b524aca1d13c8ba16d5..c39128218d560de00d5daf53fe159adf2090efcb 100644
--- a/htdocs/fourn/facture/card.php
+++ b/htdocs/fourn/facture/card.php
@@ -364,7 +364,7 @@ if (empty($reshook))
 			if(empty($object->date_echeance)) $object->date_echeance = $object->calculate_date_lim_reglement();
 
 	        // If creation from another object of another module
-	        if ($_POST['origin'] && $_POST['originid'])
+	        if (! $error && $_POST['origin'] && $_POST['originid'])
 	        {
 	            // Parse element/subelement (ex: project_task)
 	            $element = $subelement = $_POST['origin'];
@@ -468,17 +468,17 @@ if (empty($reshook))
 	                $error++;
 	            }
 	        }
-	        // If some invoice's lines already known
-	        else
+	        else if (! $error)
 	        {
 	            $id = $object->create($user);
 	            if ($id < 0)
 	            {
 	                $error++;
 	            }
-
+	            
 	            if (! $error)
 	            {
+        	        // If some invoice's lines already known
 	                for ($i = 1 ; $i < 9 ; $i++)
 	                {
 	                    $label = $_POST['label'.$i];
@@ -513,7 +513,8 @@ if (empty($reshook))
 	        {
 	            $langs->load("errors");
 	            $db->rollback();
-		        setEventMessage($langs->trans($object->error), 'errors');
+	            
+		        setEventMessages($object->error, $object->errors, 'errors');
 	            $action='create';
 	            $_GET['socid']=$_POST['socid'];
 	        }