diff --git a/src-db/database/sourcedata/AD_MESSAGE.xml b/src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml
@@ -8706,6 +8706,18 @@
 <!--E876BD8105FA4907A02D0316C55C878B-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--E876BD8105FA4907A02D0316C55C878B--></AD_MESSAGE>
 
+<!--E891942187E4472193A70D0401924F7A--><AD_MESSAGE>
+<!--E891942187E4472193A70D0401924F7A-->  <AD_MESSAGE_ID><![CDATA[E891942187E4472193A70D0401924F7A]]></AD_MESSAGE_ID>
+<!--E891942187E4472193A70D0401924F7A-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--E891942187E4472193A70D0401924F7A-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--E891942187E4472193A70D0401924F7A-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--E891942187E4472193A70D0401924F7A-->  <VALUE><![CDATA[OBPOS_productWithoutPriceInPriceList]]></VALUE>
+<!--E891942187E4472193A70D0401924F7A-->  <MSGTEXT><![CDATA[Product %0 will not be added to the ticket because it has not price defined in the current Pricelist]]></MSGTEXT>
+<!--E891942187E4472193A70D0401924F7A-->  <MSGTYPE><![CDATA[W]]></MSGTYPE>
+<!--E891942187E4472193A70D0401924F7A-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--E891942187E4472193A70D0401924F7A-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--E891942187E4472193A70D0401924F7A--></AD_MESSAGE>
+
 <!--E89F8B2B103743498772724EC50CB7FC--><AD_MESSAGE>
 <!--E89F8B2B103743498772724EC50CB7FC-->  <AD_MESSAGE_ID><![CDATA[E89F8B2B103743498772724EC50CB7FC]]></AD_MESSAGE_ID>
 <!--E89F8B2B103743498772724EC50CB7FC-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src-db/database/sourcedata/AD_PREFERENCE.xml b/src-db/database/sourcedata/AD_PREFERENCE.xml
--- a/src-db/database/sourcedata/AD_PREFERENCE.xml
+++ b/src-db/database/sourcedata/AD_PREFERENCE.xml
@@ -363,6 +363,17 @@
 <!--376946B697A54678BC4E1000BB7E8FE5-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
 <!--376946B697A54678BC4E1000BB7E8FE5--></AD_PREFERENCE>
 
+<!--3EE3E9E33100422E8191CAB4495AD769--><AD_PREFERENCE>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <AD_PREFERENCE_ID><![CDATA[3EE3E9E33100422E8191CAB4495AD769]]></AD_PREFERENCE_ID>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <VALUE><![CDATA[N]]></VALUE>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <PROPERTY><![CDATA[OBPOS_allowProductsNoPriceInMainPricelist]]></PROPERTY>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <ISPROPERTYLIST><![CDATA[Y]]></ISPROPERTYLIST>
+<!--3EE3E9E33100422E8191CAB4495AD769-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--3EE3E9E33100422E8191CAB4495AD769--></AD_PREFERENCE>
+
 <!--436BA45212D5481EABF91FA3B5D597DE--><AD_PREFERENCE>
 <!--436BA45212D5481EABF91FA3B5D597DE-->  <AD_PREFERENCE_ID><![CDATA[436BA45212D5481EABF91FA3B5D597DE]]></AD_PREFERENCE_ID>
 <!--436BA45212D5481EABF91FA3B5D597DE-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src-db/database/sourcedata/AD_REF_LIST.xml b/src-db/database/sourcedata/AD_REF_LIST.xml
--- a/src-db/database/sourcedata/AD_REF_LIST.xml
+++ b/src-db/database/sourcedata/AD_REF_LIST.xml
@@ -1696,6 +1696,17 @@
 <!--D5E9BE9E259F4E47BCEA88BBAA16ADAB-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
 <!--D5E9BE9E259F4E47BCEA88BBAA16ADAB--></AD_REF_LIST>
 
+<!--D74F4CDDFE3F4CA58386CEF429FA496C--><AD_REF_LIST>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <AD_REF_LIST_ID><![CDATA[D74F4CDDFE3F4CA58386CEF429FA496C]]></AD_REF_LIST_ID>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <VALUE><![CDATA[OBPOS_allowProductsNoPriceInMainPricelist]]></VALUE>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <NAME><![CDATA[Web POS Allow products not to have a price in main pricelist]]></NAME>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <AD_REFERENCE_ID><![CDATA[A26BA480E2014707B47257024C3CBFF7]]></AD_REFERENCE_ID>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--D74F4CDDFE3F4CA58386CEF429FA496C--></AD_REF_LIST>
+
 <!--D7E5D22E0D33475C95E2AB7A54ED4BE1--><AD_REF_LIST>
 <!--D7E5D22E0D33475C95E2AB7A54ED4BE1-->  <AD_REF_LIST_ID><![CDATA[D7E5D22E0D33475C95E2AB7A54ED4BE1]]></AD_REF_LIST_ID>
 <!--D7E5D22E0D33475C95E2AB7A54ED4BE1-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src/org/openbravo/retail/posterminal/master/Product.java b/src/org/openbravo/retail/posterminal/master/Product.java
--- a/src/org/openbravo/retail/posterminal/master/Product.java
+++ b/src/org/openbravo/retail/posterminal/master/Product.java
@@ -191,6 +191,13 @@
 
   @Override
   protected List<String> getQuery(JSONObject jsonsent) throws JSONException {
+
+    return prepareQuery(jsonsent);
+
+  }
+
+  protected List<String> prepareQuery(JSONObject jsonsent) throws JSONException {
+
     String orgId = OBContext.getOBContext().getCurrentOrganization().getId();
     final OBRETCOProductList productList = POSUtils.getProductListByOrgId(orgId);
 
@@ -248,6 +255,19 @@
     } finally {
       OBContext.restorePreviousMode();
     }
+    boolean allowNoPriceInMainPriceList = false;
+    try {
+      OBContext.setAdminMode(false);
+      allowNoPriceInMainPriceList = "Y".equals(Preferences.getPreferenceValue(
+          "OBPOS_allowProductsNoPriceInMainPricelist", true, OBContext.getOBContext()
+              .getCurrentClient(), OBContext.getOBContext().getCurrentOrganization(), OBContext
+              .getOBContext().getUser(), OBContext.getOBContext().getRole(), null));
+    } catch (PropertyException e) {
+      log.error(
+          "Error getting preference OBPOS_allowProductsNoPriceInMainPricelist " + e.getMessage(), e);
+    } finally {
+      OBContext.restorePreviousMode();
+    }
     Map<String, Object> args = new HashMap<String, Object>();
     args.put("posPrecision", posPrecision);
     try {
@@ -277,22 +297,10 @@
         && !jsonsent.get("lastUpdated").equals("null") ? jsonsent.getLong("lastUpdated") : null;
 
     // regular products
-    String hql = "select" + regularProductsHQLProperties.getHqlSelect()
-        + "FROM OBRETCO_Prol_Product as pli ";
-    if (!useGetForProductImages) {
-      hql += "left outer join pli.product.image img ";
-    }
-    hql += "inner join pli.product as product, PricingProductPrice ppp ";
-    if (isRemote && isMultipricelist && jsonsent.has("remoteParams")) {
-      hql += ", PricingProductPrice pp WHERE pp.product=pli.product and pp.priceListVersion.id= :multipriceListVersionId ";
-    } else {
-      hql += " WHERE 1=1";
-    }
+    String hql = "select" + regularProductsHQLProperties.getHqlSelect();
 
-    hql += " AND $filtersCriteria AND $hqlCriteria AND (pli.obretcoProductlist.id = :productListId) "
-        + "AND (ppp.priceListVersion.id= :priceListVersionId ) "
-        + " AND ("
-        + "pli.product.id = ppp.product.id" + ") ";
+    hql += getRegularProductHql(isRemote, isMultipricelist, jsonsent, useGetForProductImages,
+        allowNoPriceInMainPriceList);
 
     if (lastUpdated != null) {
       hql += "AND ((pli.product.$incrementalUpdateCriteria) OR (pli.$incrementalUpdateCriteria) OR (ppp.$incrementalUpdateCriteria) OR (product.uOM.$incrementalUpdateCriteria))";
@@ -369,6 +377,45 @@
     return products;
   }
 
+  protected String getRegularProductHql(boolean isRemote, boolean isMultipricelist,
+      JSONObject jsonsent, boolean useGetForProductImages) {
+    return getRegularProductHql(isRemote, isMultipricelist, jsonsent, useGetForProductImages, false);
+  }
+
+  protected String getRegularProductHql(boolean isRemote, boolean isMultipricelist,
+      JSONObject jsonsent, boolean useGetForProductImages, boolean allowNoPriceInMainPriceList) {
+
+    String hql = "FROM OBRETCO_Prol_Product as pli ";
+    if (!useGetForProductImages) {
+      hql += "left outer join pli.product.image img ";
+    }
+    hql += "inner join pli.product as product ";
+    if (isMultipricelist && allowNoPriceInMainPriceList
+        && (!isRemote || jsonsent.has("remoteParams"))) {
+      hql += "left outer join product.pricingProductPriceList ppp with (ppp.priceListVersion.id = :priceListVersionId) ";
+    } else {
+      hql += "inner join product.pricingProductPriceList ppp ";
+    }
+
+    if (isRemote && isMultipricelist && jsonsent.has("remoteParams")) {
+      hql += ", PricingProductPrice pp WHERE pp.product=pli.product and pp.priceListVersion.id= :multipriceListVersionId ";
+    } else {
+      hql += " WHERE 1=1";
+    }
+
+    hql += " AND $filtersCriteria AND $hqlCriteria ";
+    if (isMultipricelist && allowNoPriceInMainPriceList
+        && (!isRemote || jsonsent.has("remoteParams"))) {
+      hql += "AND (pli.obretcoProductlist.id = :productListId) ";
+    } else {
+      hql += "AND (pli.obretcoProductlist.id = :productListId) ";
+      hql += "AND (ppp.priceListVersion.id= :priceListVersionId) ";
+
+    }
+
+    return hql;
+  }
+
   @Override
   protected boolean bypassPreferenceCheck() {
     return true;
diff --git a/web/org.openbravo.retail.posterminal/js/model/order.js b/web/org.openbravo.retail.posterminal/js/model/order.js
--- a/web/org.openbravo.retail.posterminal/js/model/order.js
+++ b/web/org.openbravo.retail.posterminal/js/model/order.js
@@ -1938,11 +1938,18 @@
           modelsAffectedByCache: ['ProductPrice']
         });
       } else {
-        me.addProductToOrder(p, qty, options, attrs, function (success, orderline) {
-          if (callback) {
-            callback(success, orderline);
-          }
-        });
+        // With the preference OBPOS_allowProductsNoPriceInMainPricelist
+        // it is possible to add product without price in the terminal's main list
+        if (OB.UTIL.isNullOrUndefined(p.get('listPrice')) && !p.get('ispack')) {
+          OB.UTIL.showWarning(OB.I18N.getLabel('OBPOS_productWithoutPriceInPriceList', [p.get('_identifier')]));
+          callback(false, null);
+        } else {
+          me.addProductToOrder(p, qty, options, attrs, function (success, orderline) {
+            if (callback) {
+              callback(success, orderline);
+            }
+          });
+        }
       }
     },
 
@@ -2702,6 +2709,11 @@
               addProductsOfLines(receipt, lines, index, callback, promotionLines);
             }
           });
+        }, null, function () {
+          // Product doesn't exists, execute the same code as it was not included in pricelist
+          promotionLines.splice(index, 1);
+          lines.splice(index, 1);
+          addProductsOfLines(receipt, lines, index, callback, promotionLines);
         });
       };
       _.each(me.get('lines').models, function (line) {
