diff -r 4b7091085aa3 src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml	Thu Mar 08 12:43:49 2018 +0100
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml	Mon Mar 19 10:30:38 2018 +0100
@@ -22178,6 +22178,18 @@
 <!--82C113B8F4134B57A4791BAC35B03ADC-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--82C113B8F4134B57A4791BAC35B03ADC--></AD_MESSAGE>
 
+<!--8307298808204C0795FA15620B21EAF1--><AD_MESSAGE>
+<!--8307298808204C0795FA15620B21EAF1-->  <AD_MESSAGE_ID><![CDATA[8307298808204C0795FA15620B21EAF1]]></AD_MESSAGE_ID>
+<!--8307298808204C0795FA15620B21EAF1-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--8307298808204C0795FA15620B21EAF1-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--8307298808204C0795FA15620B21EAF1-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--8307298808204C0795FA15620B21EAF1-->  <VALUE><![CDATA[ServiceCannotBeModified]]></VALUE>
+<!--8307298808204C0795FA15620B21EAF1-->  <MSGTEXT><![CDATA[Service configuration can not be changed as there is at least one order line pending to be delivered. (Example Order: %0)]]></MSGTEXT>
+<!--8307298808204C0795FA15620B21EAF1-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--8307298808204C0795FA15620B21EAF1-->  <AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--8307298808204C0795FA15620B21EAF1-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--8307298808204C0795FA15620B21EAF1--></AD_MESSAGE>
+
 <!--8437C016631646ED9643B0B53E4F2AF8--><AD_MESSAGE>
 <!--8437C016631646ED9643B0B53E4F2AF8-->  <AD_MESSAGE_ID><![CDATA[8437C016631646ED9643B0B53E4F2AF8]]></AD_MESSAGE_ID>
 <!--8437C016631646ED9643B0B53E4F2AF8-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 4b7091085aa3 src/org/openbravo/event/ProductServiceConfigurationObserver.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/event/ProductServiceConfigurationObserver.java	Mon Mar 19 10:30:38 2018 +0100
@@ -0,0 +1,93 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2015 Openbravo SLU 
+ * All Rights Reserved. 
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+
+package org.openbravo.event;
+
+import javax.enterprise.event.Observes;
+
+import org.apache.log4j.Logger;
+import org.openbravo.base.exception.OBException;
+import org.openbravo.base.model.Entity;
+import org.openbravo.base.model.ModelProvider;
+import org.openbravo.base.model.Property;
+import org.openbravo.client.kernel.event.EntityPersistenceEventObserver;
+import org.openbravo.client.kernel.event.EntityUpdateEvent;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.dal.service.OBQuery;
+import org.openbravo.erpCommon.utility.OBMessageUtils;
+import org.openbravo.model.common.order.Order;
+import org.openbravo.model.common.order.OrderLine;
+import org.openbravo.model.common.plm.Product;
+
+public class ProductServiceConfigurationObserver extends EntityPersistenceEventObserver {
+
+  private static Entity[] entities = { ModelProvider.getInstance().getEntity(Product.ENTITY_NAME) };
+  protected Logger logger = Logger.getLogger(this.getClass());
+
+  @Override
+  protected Entity[] getObservedEntities() {
+    return entities;
+  }
+
+  public void onUpdate(@Observes EntityUpdateEvent event) {
+    if (!isValidEvent(event)) {
+      return;
+    }
+    checkConfiguration(event);
+  }
+
+  private void checkConfiguration(EntityUpdateEvent event) {
+    final Entity productEntity = ModelProvider.getInstance().getEntity(Product.ENTITY_NAME);
+    final Property linkedToProductProperty = productEntity
+        .getProperty(Product.PROPERTY_LINKEDTOPRODUCT);
+    final Property qtyRuleProperty = productEntity.getProperty(Product.PROPERTY_QUANTITYRULE);
+    // final Property idProperty = productEntity.getProperty(Product.PROPERTY_ID);
+    final Boolean linkedToProduct = (Boolean) event.getCurrentState(linkedToProductProperty);
+    final String qtyRule = (String) event.getCurrentState(qtyRuleProperty);
+    final Boolean linkedToProduct_Previous = (Boolean) event
+        .getPreviousState(linkedToProductProperty);
+    final String qtyRule_Previous = (String) event.getPreviousState(qtyRuleProperty);
+    final Product product = OBDal.getInstance().get(Product.class, (String) event.getId());
+    if (linkedToProduct_Previous != linkedToProduct || !qtyRule_Previous.equals(qtyRule)) {
+      checkNotDeliveredOrders(product);
+    }
+  }
+
+  private void checkNotDeliveredOrders(Product product) {
+    StringBuilder hql = new StringBuilder();
+    hql.append("as ol ");
+    hql.append("join ol." + OrderLine.PROPERTY_SALESORDER + " as o ");
+    hql.append("where o." + Order.PROPERTY_DOCUMENTSTATUS);
+    hql.append(" = 'CO' ");
+    hql.append("and ol." + OrderLine.PROPERTY_PRODUCT);
+    hql.append(" = :product ");
+    hql.append("and ol." + OrderLine.PROPERTY_DELIVEREDQUANTITY + "<> ol."
+        + OrderLine.PROPERTY_ORDEREDQUANTITY);
+    OBQuery<OrderLine> notDeliveredOrderLineQuery = OBDal.getInstance().createQuery(
+        OrderLine.class, hql.toString());
+    notDeliveredOrderLineQuery.setNamedParameter("product", product);
+    notDeliveredOrderLineQuery.setMaxResult(1);
+    OrderLine notDeliveredOrderLine = notDeliveredOrderLineQuery.uniqueResult();
+    if (notDeliveredOrderLine != null) {
+    	String [] params = {notDeliveredOrderLine.getSalesOrder().getDocumentNo()};
+      throw new OBException(OBMessageUtils.getI18NMessage("ServiceCannotBeModified", params));
+    }
+  }
+
+}
