Index: trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/CreateNewAttributePanel.java	(revision 43981)
@@ -47,6 +47,8 @@
 import org.gvsig.andami.messages.NotificationManager;
 import org.gvsig.andami.ui.mdiManager.IWindow;
 import org.gvsig.andami.ui.mdiManager.WindowInfo;
+import org.gvsig.app.ApplicationLocator;
+import org.gvsig.app.ApplicationManager;
 import org.gvsig.fmap.dal.DataTypes;
 import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
 import org.gvsig.fmap.dal.feature.EditableFeatureType;
@@ -56,6 +58,7 @@
 import org.gvsig.i18n.Messages;
 import org.gvsig.tools.ToolsLocator;
 import org.gvsig.tools.dataTypes.DataTypesManager;
+import org.gvsig.tools.i18n.I18nManager;
 
 /**
  * To create new FeatureAttributeDescriptor from the interface.
@@ -331,22 +334,34 @@
                 PluginServices.getText(this, "field_already_exists"), null);
             return null;
         }
-        EditableFeatureAttributeDescriptor ead;
+        EditableFeatureAttributeDescriptor ead = null;
         if (getJRdbFieldVirtual().isSelected()) {
             String code = getJTxtExpression().getText();
-            FeatureAttributeDescriptor[] descriptors = 
-                    featureType.getAttributeDescriptors();
-            String[] fields = new String[descriptors.length];
-            for (int i = 0; i < descriptors.length; i++) {
-                FeatureAttributeDescriptor descriptor = descriptors[i];
-                fields[i] = descriptor.getName();
-            }
-            FeatureAttributeEmulator myEmulated = 
+            EmulatedFieldExpression myEmulated = 
                     new EmulatedFieldExpression(
-                            fields,
+                            featureType,
                             code);
+            if (!myEmulated.isValid()) {
+                I18nManager i18n = ToolsLocator.getI18nManager();
+                ApplicationManager application = ApplicationLocator.getManager();
+                int x = application.confirmDialog(
+                        "The expression used in this field is not valid."+
+                                "\n\n"+
+                                myEmulated.getErrorMessage()+
+                                "\n\n"+
+                                "Do you want add this field anyway?", 
+                        "Add invalid field", 
+                        JOptionPane.YES_NO_OPTION, 
+                        JOptionPane.QUESTION_MESSAGE,
+                        "_AddingInvalidField.DoYouWantAddAnyway");
+                if (x==JOptionPane.YES_OPTION) {
+                    ead = featureType.add(nameAttr, typeAttr, myEmulated)
+                    .setSize(sizeAttr);
+                }
+            } else {
             ead = featureType.add(nameAttr, typeAttr, myEmulated)
                     .setSize(sizeAttr);
+            }
         } else {
             defaultValueAttr = getJTxtDefaultValue().getText();
             if (defaultValueAttr.equals("")) {
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/EmulatedFieldExpression.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/EmulatedFieldExpression.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.app.document.table.app/org.gvsig.app.document.table.app.mainplugin/src/main/java/org/gvsig/app/project/documents/table/gui/EmulatedFieldExpression.java	(revision 43981)
@@ -5,7 +5,14 @@
  */
 package org.gvsig.app.project.documents.table.gui;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.collections.ListUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.gvsig.expressionevaluator.Code;
+import org.gvsig.expressionevaluator.Code.Identifier;
 import org.gvsig.fmap.dal.feature.EditableFeature;
 import org.gvsig.fmap.dal.feature.Feature;
 import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
@@ -13,72 +20,141 @@
 import org.gvsig.expressionevaluator.ExpressionEvaluatorManager;
 import org.gvsig.expressionevaluator.MutableSymbolTable;
 import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureType;
 import org.gvsig.tools.ToolsLocator;
 import org.gvsig.tools.dynobject.DynStruct;
+import org.gvsig.tools.exception.BaseException;
 import org.gvsig.tools.persistence.PersistenceManager;
 import org.gvsig.tools.persistence.Persistent;
 import org.gvsig.tools.persistence.PersistentState;
 import org.gvsig.tools.persistence.exception.PersistenceException;
+import org.gvsig.tools.visitor.VisitCanceledException;
+import org.gvsig.tools.visitor.Visitor;
 
 /**
  *
  * @author osc
  */
 public class EmulatedFieldExpression implements FeatureAttributeEmulator, Persistent {
-            
-    String[] fields = null;
+
+    String[] requiredFields = null;
     String code = "";
-    private static final String EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME = 
-            "EmulatedFieldExpression";
+    Code codeCompiled = null;
+    MutableSymbolTable symbolTable = null;
+    ExpressionEvaluatorManager expressionManager = null;
+    private static final String EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME
+            = "EmulatedFieldExpression";
+    private boolean valid;
+    private String errorMessage;
 
     public EmulatedFieldExpression() {
     }
 
-    
-    EmulatedFieldExpression(String[] fields, String code){
-        this.fields = fields;
+    EmulatedFieldExpression(FeatureType featureType, String code) {
         this.setCode(code);
+        this.checkVars(featureType);
+
     }
-    
+
+    public boolean isValid() {
+        return this.valid;
+    }
+
+    private void checkVars(final FeatureType featureType) {
+        this.valid = true;
+        final List<String> theUsedFields = new ArrayList<>();
+        final List<String> undefinedFields = new ArrayList<>();
+        
+        try {
+            Code theCodeCompiled = this.getCodeCompiled();
+            theCodeCompiled.accept(new Visitor() {
+                @Override
+                public void visit(Object obj) throws VisitCanceledException, BaseException {
+                    Code code = (Code) obj;
+                    if (code instanceof Identifier) {
+                        String name = ((Identifier) code).name();
+                        if (featureType.get(name) == null) {
+                            undefinedFields.add(name);
+                            valid = false;
+                        } else {
+                            theUsedFields.add(name);
+                        }
+                    }
+                }
+            });
+            if(!undefinedFields.isEmpty()){
+                this.errorMessage = "undefined fields " + StringUtils.join(undefinedFields,", ");
+            }
+        } catch (BaseException ex) {
+            valid = false;
+            this.errorMessage = ex.getMessage();
+        }
+        this.requiredFields = theUsedFields.toArray(new String[theUsedFields.size()]);
+    }
+
     public static void registerPersistenceDefinition() {
         PersistenceManager manager = ToolsLocator.getPersistenceManager();
-    
-        if (manager.getDefinition(EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME) == 
-                null) {
+
+        if (manager.getDefinition(EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME)
+                == null) {
             DynStruct definition = manager.addDefinition(
-                EmulatedFieldExpression.class,
-                EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME, 
-                EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME +       
-                        " Persistent definition", 
-                null, 
-                null
+                    EmulatedFieldExpression.class,
+                    EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME,
+                    EMULEFIELDEXP_PERSISTENCE_DEFINITION_NAME
+                    + " Persistent definition",
+                    null,
+                    null
             );
             definition.addDynFieldString("code")
-                .setMandatory(true)
-                .setPersistent(true);
+                    .setMandatory(true)
+                    .setPersistent(true);
             definition.addDynFieldArray("fields")
-                .setClassOfItems(String.class)
-                .setMandatory(true)
-                .setPersistent(true);
+                    .setClassOfItems(String.class)
+                    .setMandatory(true)
+                    .setPersistent(true);
+            definition.addDynFieldBoolean("valid")
+                    .setMandatory(true)
+                    .setPersistent(true);
         }
     }
-        
+
+    private Code getCodeCompiled() {
+        if (this.codeCompiled == null) {
+            this.codeCompiled = this.getExpressionManager().compile(code);
+        }
+        return this.codeCompiled;
+    }
+
+    private MutableSymbolTable getSymbolTable() {
+        if (this.symbolTable == null) {
+            this.symbolTable = this.getExpressionManager().createSymbolTable();
+        }
+        return this.symbolTable;
+    }
+
+    private ExpressionEvaluatorManager getExpressionManager() {
+        if (this.expressionManager == null) {
+            this.expressionManager
+                    = ExpressionEvaluatorLocator.getManager();
+        }
+        return this.expressionManager;
+    }
+
     @Override
     public Object get(Feature feature) {
-        ExpressionEvaluatorManager expManager = 
-                ExpressionEvaluatorLocator.getManager();
-        MutableSymbolTable symbol = expManager.createSymbolTable();
-        FeatureAttributeDescriptor[] descriptors = 
-                feature.getType().getAttributeDescriptors();
-        for (FeatureAttributeDescriptor descriptor : descriptors) {
-            String fieldName = descriptor.getName();
+        if (!this.valid) {
+            return null;
+        }
+        MutableSymbolTable symbol = this.getSymbolTable();
+        for (FeatureAttributeDescriptor descriptor : feature.getType()) {
             if (!descriptor.isComputed()) { // si eres tu mismo 
+                String fieldName = descriptor.getName();
                 Object value = feature.get(fieldName);
                 symbol.setVar(fieldName, value);
             }
         }
-        Code codeCompilation = expManager.compile(code);
-        Object result = expManager.evaluate(symbol, codeCompilation);
+        Code codeCompilation = this.getCodeCompiled();
+        Object result = this.getExpressionManager().evaluate(symbol, codeCompilation);
         return result;
     }
 
@@ -94,36 +170,39 @@
 
     @Override
     public String[] getRequiredFieldNames() {
-        return this.fields;
+        return this.requiredFields;
     }
-    
+
     public String getCode() {
         return this.code;
     }
 
     @Override
     public void saveToState(PersistentState state) throws PersistenceException {
-        state.set("fields", this.getFields());
+        state.set("fields", this.getRequiredFieldNames());
         state.set("code", this.getCode());
-        
+        state.set("valid", this.isValid());
+
     }
 
     @Override
     public void loadFromState(PersistentState state) throws PersistenceException {
         String stateCode = state.getString("code");
         String[] stateFields = state.getStringArray("fields");
+        this.valid = state.getBoolean("valid");
         this.setCode(stateCode);
         this.setFields(stateFields);
     }
 
-    public String[] getFields() {
-        return this.fields;
-    }
     private void setCode(String code) {
         this.code = code;
     }
 
     private void setFields(String[] fields) {
-        this.fields = fields;
+        this.requiredFields = fields;
     }
-}
\ No newline at end of file
+
+    public String getErrorMessage() {
+        return this.errorMessage;
+    }
+}
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.fmap.control/src/main/java/org/gvsig/fmap/mapcontrol/dal/feature/swing/table/ConfigurableFeatureTableModel.java	(revision 43981)
@@ -107,8 +107,12 @@
 
     @Override
     public String getColumnName(int column) {
+        try {
         int originalIndex = getOriginalColumnIndex(column);
         return getAliasForColumn(getOriginalColumnName(originalIndex));
+        } catch (Exception ex) {
+            return "C" + column;
+        }
     }
 
     @Override
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureStore.java	(revision 43981)
@@ -41,6 +41,7 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.logging.Level;
+import org.apache.commons.collections4.ListUtils;
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -70,6 +71,7 @@
 import org.gvsig.fmap.dal.feature.EditableFeatureType;
 import org.gvsig.fmap.dal.feature.Feature;
 import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
+import org.gvsig.fmap.dal.feature.FeatureAttributeEmulator;
 import org.gvsig.fmap.dal.feature.FeatureCache;
 import org.gvsig.fmap.dal.feature.FeatureIndex;
 import org.gvsig.fmap.dal.feature.FeatureIndexes;
@@ -1186,20 +1188,30 @@
     synchronized public void update(EditableFeatureType type)
         throws DataException {
         try {
-            checkInEditingMode();
             if (type == null) {
                 throw new NullFeatureTypeException(getName());
             }
+            boolean typehasStrongChanges = ((DefaultEditableFeatureType) type).hasStrongChanges();
+            if (typehasStrongChanges) {
+                checkInEditingMode();
+            }  else if(!this.isAppending()) {
+                throw new NeedEditingModeException(this.getName());
+            }
             // FIXME: Comprobar que es un featureType aceptable.
             notifyChange(FeatureStoreNotification.BEFORE_UPDATE_TYPE, type);
             newVersionOfUpdate();
-
-            FeatureType oldt = type.getSource().getCopy();
-            FeatureType newt = type.getCopy();
-            commands.update(newt, oldt);
-
-            if (((DefaultEditableFeatureType) type).hasStrongChanges()) {
+            
+            if (typehasStrongChanges) { 
+                FeatureType oldt = type.getSource().getCopy();
+                FeatureType newt = type.getCopy();
+                commands.update(newt, oldt);
                 hasStrongChanges = true;
+            } else {
+                boolean ok = this.featureTypes.remove(this.defaultFeatureType);
+                this.defaultFeatureType = type.getCopy();
+                if (ok) {
+                    this.featureTypes.add(this.defaultFeatureType);
+                }
             }
             notifyChange(FeatureStoreNotification.AFTER_UPDATE_TYPE, type);
         } catch (Exception e) {
@@ -1433,7 +1445,7 @@
              * editing mode.
              */
 //            ((FeatureSelection) this.getSelection()).deselectAll();
-
+            Map<String,List<FeatureAttributeDescriptor>> computedFields = this.getComputedFields();
             switch (mode) {
             case MODE_QUERY:
                 throw new NeedEditingModeException(this.getName());
@@ -1445,6 +1457,8 @@
                 notifyChange(FeatureStoreNotification.BEFORE_FINISHEDITING);
                 provider.endAppend();
                 exitEditingMode();
+                this.updateComputedFields(computedFields);
+                saveDALFile();
                 updateIndexes();
                 notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
                 break;
@@ -1468,9 +1482,11 @@
                         featureManager.getInserted(),
                         featureManager.getUpdated(),
                         removeCalculatedAttributes(featureTypeManager.getFeatureTypesChanged()).iterator());
+                    
                 }  
+                exitEditingMode();
+                this.updateComputedFields(computedFields);
                 saveDALFile();
-                exitEditingMode();
                 updateIndexes();
                 notifyChange(FeatureStoreNotification.AFTER_FINISHEDITING);
                 break;
@@ -1481,7 +1497,46 @@
             throw new FinishEditingException(e);
         }
     }
-    
+    private Map<String,List<FeatureAttributeDescriptor>> getComputedFields() throws DataException {
+        Map<String,List<FeatureAttributeDescriptor>> r = new HashMap<>();
+        
+        List<FeatureType> theTypes = new ArrayList<>();
+        theTypes.addAll(this.getFeatureTypes());
+        theTypes.add(this.getDefaultFeatureType());
+        for( int n=0; n<theTypes.size(); n++ ) {
+            FeatureType type = theTypes.get(n);
+                for (FeatureAttributeDescriptor attrdesc : type) {
+                    FeatureAttributeEmulator emulator = attrdesc.getFeatureAttributeEmulator();
+                    if( emulator!= null) {
+                        List<FeatureAttributeDescriptor> l = r.get(type.getId());
+                        if (l==null) {
+                            l = new ArrayList<>();
+                            r.put(type.getId(), l);
+                        }
+                        l.add(attrdesc);
+                    }
+            }
+        }
+        return r;
+    }
+    private void updateComputedFields(Map<String,List<FeatureAttributeDescriptor>> computedFields) throws DataException {
+
+        List<FeatureType> theTypes = new ArrayList<>();
+        theTypes.addAll(this.getFeatureTypes());
+        theTypes.add(this.getDefaultFeatureType());
+        for( int n=0; n<theTypes.size(); n++ ) {
+            DefaultFeatureType type = (DefaultFeatureType) theTypes.get(n);
+            List<FeatureAttributeDescriptor> x = computedFields.get(type.getId());
+            if(x!=null && !x.isEmpty()) {
+                for (FeatureAttributeDescriptor attrdesc : x) {
+                    if (type.get(attrdesc.getName())==null) {
+                        type.add(attrdesc);
+                    }
+                }
+            }
+        }
+        
+    }
     private List<FeatureStoreProvider.FeatureTypeChanged> removeCalculatedAttributes(List<FeatureStoreProvider.FeatureTypeChanged> ftypes) {
         // FIXME: Falta por implementar
 //        for (FeatureStoreProvider.FeatureTypeChanged ftype : ftypes) {
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/featureset/DefaultFeatureSet.java	(revision 43981)
@@ -524,7 +524,7 @@
 
         // TODO Tener en cuenta las transformaciones ???
 
-        if (store.isEditing() && store.getFeatureManager().hasChanges()) {
+        if (store.isEditing() && (store.getFeatureTypeManager().hasChanges() || store.getFeatureManager().hasChanges())) {
             if (this.query.hasOrder()) { // En edicion siempre ordeno yo.
                 if (this.query.hasFilter()) {
                     return ORDERED_EDITED_FILTER;
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultEditableFeatureType.java	(revision 43981)
@@ -85,6 +85,9 @@
         DefaultEditableFeatureAttributeDescriptor attr;
         while (iter.hasNext()) {
             attr = (DefaultEditableFeatureAttributeDescriptor) iter.next();
+            if (attr.isComputed()) {
+                continue;
+            }
             if (attr.hasStrongChanges()) {
                 return true;
             }
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureType.java	(revision 43981)
@@ -27,8 +27,10 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.zip.CRC32;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -294,11 +296,11 @@
                     super(parent, false);
                     DefaultFeatureAttributeDescriptor attrcopy;
                     DefaultFeatureAttributeDescriptor attr;
-                    List attrnames = null;
+                    Set attrnames = null;
 
                     // Copy attributes
                     if ( names != null && names.length > 0 ) {
-                        attrnames = new ArrayList();
+                        attrnames = new HashSet();
                         attrnames.addAll(Arrays.asList(names));
                         if ( parent.hasEmulators ) {
                             for ( int i = 0; i < parent.size(); i++ ) {
Index: trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java
===================================================================
--- trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java	(revision 43980)
+++ trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/editing/memory/FeatureTypeManager.java	(revision 43981)
@@ -220,7 +220,7 @@
             EditableFeatureAttributeDescriptor eatd;
             while (iter.hasNext()) {
                 tAttr = (FeatureAttributeDescriptor) iter.next();
-                if (!tAttr.isComputed()) {
+                if (tAttr.isComputed()) {
                     continue;
                 }
                 if (ftTarget_editable != null) {
