diff --git a/ChangeLog b/ChangeLog
index f62facbdc3686143a6987f2896f53c8ba254f3ff..cf99ec9012f3f20471e347e7a55eb80dcf9e28cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -21,6 +21,7 @@ FIX: Not showing task extrafields when creating from left menu
 FIX [ bug #3288 ] Tasks box is not properly drawn
 FIX [ bug #3211 ] Outstading bill amount of a client showed wrong amounts
 FIX [ bug #3321 ] Users with certain permissions were shown a "forbidden access" page even if they had the rights
+FIX [ bug #3426 ] Unable to create an invoice from a contract with extrafields
 
 NEW: Created new ContratLigne::insert function
 
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index fc740b5215aec1f37fe8b0a23f6b092f3cae0948..f9eeffbb0184f032d97d08f21da5c29a2bc15680 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -3375,6 +3375,11 @@ abstract class CommonObject
     {
     	if (empty($rowid)) $rowid=$this->id;
 
+        //To avoid SQL errors. Probably not the better solution though
+        if (!$this->table_element) {
+            return 0;
+        }
+
         if (! is_array($optionsArray))
         {
             // optionsArray not already loaded, so we load it