diff -r 5bb60b75d022 web/org.openbravo.mobile.core/source/data/ob-dal.js
--- a/web/org.openbravo.mobile.core/source/data/ob-dal.js	Mon Feb 15 18:10:33 2016 +0100
+++ b/web/org.openbravo.mobile.core/source/data/ob-dal.js	Mon Feb 15 19:55:06 2016 +0100
@@ -603,6 +603,8 @@
           firstParam = true,
           uuid, propertyName, filterVal, processError;
 
+      var updateToBeChecked = false;
+
       processError = function (txError, e) {
         executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, txError, e, callerInfo);
         if (_.isFunction(error)) {
@@ -649,6 +651,9 @@
           params.push(model.get(primaryKeyProperty));
         } else {
           // UPDATE
+          if (tableName === 'c_order') {
+            updateToBeChecked = true;
+          }
           sql = 'UPDATE ' + tableName + ' SET ';
 
           _.each(_.keys(modelProto.properties), function (attr) {
@@ -751,20 +756,95 @@
           // OB.error(e);
         }
       }
+
       if (currentTransaction) {
-        try {
-          currentTransaction.executeSql(sql, params, silentFunction(success), processError);
-        } catch (e) {
-          executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, null, e, callerInfo);
-        }
-      } else {
-        OB.Data.localDB.transaction(function (tx) {
+        if (updateToBeChecked) {
+          OB.Dal.getInTransaction(currentTransaction, modelDefinition, model.get('id'), function (result) {
+            if (result) {
+              if (result.get('hasbeenpaid') === 'Y') {
+                OB.error('[checkBlocked][transaction][hasbeenpaid_is_yes] Wrong write in c_order avoided [' + result.get('id') + '][' + result.get('documentNo') + '] - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+                if (success) {
+                  success();
+                }
+              } else {
+                try {
+                  currentTransaction.executeSql(sql, params, silentFunction(success), processError);
+                } catch (e) {
+                  executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, null, e, callerInfo);
+                }
+              }
+            } else {
+              //no results
+              OB.warn('[checkBlocked][transaction] No result after getInTransaction for [' + model.get('id') + '][' + model.get('documentNo') + ']. This update doesnt make sense - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+              if (success) {
+                success();
+              }
+            }
+          }, function () {
+            OB.error('[checkBlocked][transaction] Error for [' + model.get('id') + '][' + model.get('documentNo') + '] - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+            if (error) {
+              error();
+            }
+          }, function () {
+            //no results
+            OB.warn('[checkBlocked][transaction] No result after getInTransaction for [' + model.get('id') + '][' + model.get('documentNo') + ']. This update doesnt make sense - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+            if (success) {
+              success();
+            }
+          });
+        } else {
           try {
-            tx.executeSql(sql, params, silentFunction(success), processError);
+            currentTransaction.executeSql(sql, params, silentFunction(success), processError);
           } catch (e) {
             executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, null, e, callerInfo);
           }
-        });
+        }
+      } else {
+        if (updateToBeChecked) {
+          OB.Data.localDB.transaction(function (tx) {
+            OB.Dal.getInTransaction(tx, modelDefinition, model.get('id'), function (result) {
+              if (result) {
+                if (result.get('hasbeenpaid') === 'Y') {
+                  OB.error('[checkBlocked][no-transaction][hasbeenpaid_is_yes] Wrong write in c_order avoided [' + result.get('id') + '][' + result.get('documentNo') + '] - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+                  if (success) {
+                    success();
+                  }
+                } else {
+                  try {
+                    tx.executeSql(sql, params, silentFunction(success), processError);
+                  } catch (e) {
+                    executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, null, e, callerInfo);
+                  }
+                }
+              } else {
+                //no results
+                OB.warn('[checkBlocked][no-transaction] No result after getInTransaction for [' + model.get('id') + '][' + model.get('documentNo') + ']. This update doesnt make sense - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+                if (success) {
+                  success();
+                }
+              }
+            }, function () {
+              OB.error('[checkBlocked][no-transaction] Error for [' + model.get('id') + '][' + model.get('documentNo') + ']');
+              if (error) {
+                error();
+              }
+            }, function () {
+              //no results
+              OB.warn('[checkBlocked][no-transaction] No result after getInTransaction for [' + model.get('id') + '][' + model.get('documentNo') + ']. This update doesnt make sense - Caller: ' + caller + ' - callerInfo: ' + callerInfo);
+              if (success) {
+                success();
+              }
+            });
+          });
+        } else {
+          OB.Data.localDB.transaction(function (tx) {
+            try {
+              tx.executeSql(sql, params, silentFunction(success), processError);
+            } catch (e) {
+              executeSqlErrorHandler('error', "OB.Dal.save: table", tableName, null, e, callerInfo);
+            }
+          });
+        }
       }
     } else {
       this.missingLocalStorageLogic();
