diff --git a/base/src/org/compiere/impexp/ImpFormat.java b/base/src/org/compiere/impexp/ImpFormat.java
index 6f8371c427..1a32f2b4c0 100644
--- a/base/src/org/compiere/impexp/ImpFormat.java
+++ b/base/src/org/compiere/impexp/ImpFormat.java
@@ -23,6 +23,8 @@ import java.util.ArrayList;
import java.util.Properties;
import java.util.logging.Level;
+import org.compiere.model.I_AD_ImpFormat;
+import org.compiere.model.X_AD_ImpFormat;
import org.compiere.model.X_I_GLJournal;
import org.compiere.util.CLogger;
import org.compiere.util.DB;
@@ -32,6 +34,9 @@ import org.compiere.util.Env;
* Import Format a Row
*
* @author Jorg Janke
+ * @author Trifon Trifonov, Catura AG (www.catura.de)
+ *
FR [ 3010957 ] Custom Separator Character, http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+
* @version $Id: ImpFormat.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
*/
public final class ImpFormat
@@ -66,7 +71,9 @@ public final class ImpFormat
//
private String m_BPartner;
private ArrayList m_rows = new ArrayList();
-
+ //
+ private String separatorChar;
+
/**
* Set Name
* @param newName new name
@@ -87,7 +94,17 @@ public final class ImpFormat
{
return m_name;
} // getName
-
+
+ public void setSeparatorChar(String newChar) {
+ if (newChar == null || newChar.length() == 0) {
+ throw new IllegalArgumentException("Separator Character must be 1 char");
+ } else {
+ separatorChar = newChar;
+ }
+ }
+ public String getSeparatorChar() {
+ return separatorChar;
+ }
/**
* Import Table
* @param AD_Table_ID table
@@ -166,26 +183,19 @@ public final class ImpFormat
return m_AD_Table_ID;
} // getAD_Table_ID
- /** Format Type - Fixed Length F */
- public static final String FORMATTYPE_FIXED = "F";
- /** Format Type - Comma Separated C */
- public static final String FORMATTYPE_COMMA = "C";
- /** Format Type - Tab Separated T */
- public static final String FORMATTYPE_TAB = "T";
- /** Format Type - XML X */
- public static final String FORMATTYPE_XML = "X";
-
/**
* Set Format Type
* @param newFormatType - F/C/T/X
*/
public void setFormatType(String newFormatType)
{
- if (newFormatType.equals(FORMATTYPE_FIXED) || newFormatType.equals(FORMATTYPE_COMMA)
- || newFormatType.equals(FORMATTYPE_TAB) || newFormatType.equals(FORMATTYPE_XML))
+ if (newFormatType.equals(X_AD_ImpFormat.FORMATTYPE_FixedPosition) || newFormatType.equals(X_AD_ImpFormat.FORMATTYPE_CommaSeparated)
+ || newFormatType.equals(X_AD_ImpFormat.FORMATTYPE_TabSeparated) || newFormatType.equals(X_AD_ImpFormat.FORMATTYPE_XML)
+ || newFormatType.equals(X_AD_ImpFormat.FORMATTYPE_CustomSeparatorChar)
+ )
m_formatType = newFormatType;
else
- throw new IllegalArgumentException("FormatType must be F/C/T/X");
+ throw new IllegalArgumentException("FormatType must be F/C/T/X/U");
} // setFormatType
/**
@@ -200,6 +210,7 @@ public final class ImpFormat
/**
* Set Business Partner
* @param newBPartner (value)
+ * @deprecated
*/
public void setBPartner(String newBPartner)
{
@@ -209,6 +220,7 @@ public final class ImpFormat
/**
* Get Business Partner
* @return BPartner (value)
+ * @deprecated
*/
public String getBPartner()
{
@@ -265,6 +277,7 @@ public final class ImpFormat
{
retValue = new ImpFormat (name, rs.getInt("AD_Table_ID"), rs.getString("FormatType"));
ID = rs.getInt ("AD_ImpFormat_ID");
+ retValue.setSeparatorChar(rs.getString(I_AD_ImpFormat.COLUMNNAME_SeparatorChar));
}
rs.close();
pstmt.close();
@@ -350,7 +363,7 @@ public final class ImpFormat
String info = null;
if (row.isConstant())
info = "Constant";
- else if (m_formatType.equals(FORMATTYPE_FIXED))
+ else if (m_formatType.equals(X_AD_ImpFormat.FORMATTYPE_FixedPosition))
{
// check length
if (row.getStartNo() > 0 && row.getEndNo() <= line.length())
@@ -396,19 +409,22 @@ public final class ImpFormat
* @param formatType Comma or Tab
* @param fieldNo number of field to be returned
* @return field in lime or ""
- @throws IllegalArgumentException if format unknows
+ @throws IllegalArgumentException if format unknowns
* */
private String parseFlexFormat (String line, String formatType, int fieldNo)
{
final char QUOTE = '"';
// check input
char delimiter = ' ';
- if (formatType.equals(FORMATTYPE_COMMA))
+ if (formatType.equals(X_AD_ImpFormat.FORMATTYPE_CommaSeparated)) {
delimiter = ',';
- else if (formatType.equals(FORMATTYPE_TAB))
+ } else if (formatType.equals(X_AD_ImpFormat.FORMATTYPE_TabSeparated)) {
delimiter = '\t';
- else
+ } else if (formatType.equals(X_AD_ImpFormat.FORMATTYPE_CustomSeparatorChar)) {
+ delimiter = getSeparatorChar().charAt(0);
+ } else {
throw new IllegalArgumentException ("ImpFormat.parseFlexFormat - unknown format: " + formatType);
+ }
if (line == null || line.length() == 0 || fieldNo < 0)
return "";
diff --git a/base/src/org/compiere/impexp/ImpFormatRow.java b/base/src/org/compiere/impexp/ImpFormatRow.java
index 5ab6e2f021..428894f2ea 100644
--- a/base/src/org/compiere/impexp/ImpFormatRow.java
+++ b/base/src/org/compiere/impexp/ImpFormatRow.java
@@ -25,22 +25,26 @@ import java.text.SimpleDateFormat;
import java.util.logging.Level;
import org.compiere.model.Callout;
+import org.compiere.model.X_AD_ImpFormat_Row;
import org.compiere.util.CLogger;
/**
- * Import Format Row with pasing capability
+ * Import Format Row with parsing capability
*
* @author Jorg Janke
+ * @author Trifon Trifonov, Catura AG (www.catura.de)
+ * FR [ 3010957 ] Custom Separator Character, http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
* @version $Id: ImpFormatRow.java,v 1.2 2006/07/30 00:51:05 jjanke Exp $
*
* globalqss: integrate Teo Sarca bug fix [ 1623817 ] Minor bug on importing calendar date
+
*/
public final class ImpFormatRow
{
/**
* Constructor for fixed format
* @param seqNo sequence
- * @param columnName db dolumn name
+ * @param columnName db column name
* @param startNo start no
* @param endNo and no
* @param dataType data type - see constants DATATYPE_
@@ -172,21 +176,13 @@ public final class ImpFormatRow
*/
public void setDataType (String dataType)
{
- if (dataType.equals(DATATYPE_String) || dataType.equals(DATATYPE_Date)
- || dataType.equals(DATATYPE_Number) || dataType.equals(DATATYPE_Constant))
+ if (dataType.equals(X_AD_ImpFormat_Row.DATATYPE_String) || dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Date)
+ || dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Number) || dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Constant))
m_dataType = dataType;
else
throw new IllegalArgumentException("DataType must be S/D/N/C");
} // setDataType
- /** String Data type */
- public static final String DATATYPE_String = "S";
- /** Data Data type */
- public static final String DATATYPE_Date = "D";
- /** Numeric Data type */
- public static final String DATATYPE_Number = "N";
- /** Constant Data type */
- public static final String DATATYPE_Constant = "C";
/**
* Data Type
@@ -203,9 +199,9 @@ public final class ImpFormatRow
*/
public boolean isString()
{
- if (m_dataType.equals(DATATYPE_Constant))
+ if (m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Constant))
return m_constantIsString;
- return m_dataType.equals(DATATYPE_String);
+ return m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_String);
} // isString
/**
@@ -214,7 +210,7 @@ public final class ImpFormatRow
*/
public boolean isNumber()
{
- return m_dataType.equals(DATATYPE_Number);
+ return m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Number);
}
/**
@@ -223,7 +219,7 @@ public final class ImpFormatRow
*/
public boolean isDate()
{
- return m_dataType.equals(DATATYPE_Date);
+ return m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Date);
}
/**
@@ -232,7 +228,7 @@ public final class ImpFormatRow
*/
public boolean isConstant()
{
- return m_dataType.equals(DATATYPE_Constant);
+ return m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Constant);
}
/**
@@ -258,7 +254,7 @@ public final class ImpFormatRow
m_decimalPoint = ",";
m_divideBy100 = divideBy100;
// constant
- if (constantValue == null || constantValue.length() == 0 || !m_dataType.equals(DATATYPE_Constant))
+ if (constantValue == null || constantValue.length() == 0 || !m_dataType.equals(X_AD_ImpFormat_Row.DATATYPE_Constant))
{
m_constantValue = "";
m_constantIsString = true;
@@ -353,7 +349,7 @@ public final class ImpFormatRow
* Parse value.
* Field content in [] are treated as comments
* @param info data item
- * @return pased info
+ * @return parsed info
*/
public String parse (String info)
{
diff --git a/base/src/org/compiere/model/I_AD_ImpFormat.java b/base/src/org/compiere/model/I_AD_ImpFormat.java
index 1f7e8b5331..e254e23bf6 100644
--- a/base/src/org/compiere/model/I_AD_ImpFormat.java
+++ b/base/src/org/compiere/model/I_AD_ImpFormat.java
@@ -163,6 +163,15 @@ public interface I_AD_ImpFormat
/** Get Process Now */
public boolean isProcessing();
+ /** Column name SeparatorChar */
+ public static final String COLUMNNAME_SeparatorChar = "SeparatorChar";
+
+ /** Set Separator Character */
+ public void setSeparatorChar (String SeparatorChar);
+
+ /** Get Separator Character */
+ public String getSeparatorChar();
+
/** Column name Updated */
public static final String COLUMNNAME_Updated = "Updated";
diff --git a/base/src/org/compiere/model/X_AD_ImpFormat.java b/base/src/org/compiere/model/X_AD_ImpFormat.java
index 7c536eb492..477d57d70f 100644
--- a/base/src/org/compiere/model/X_AD_ImpFormat.java
+++ b/base/src/org/compiere/model/X_AD_ImpFormat.java
@@ -30,7 +30,7 @@ public class X_AD_ImpFormat extends PO implements I_AD_ImpFormat, I_Persistent
/**
*
*/
- private static final long serialVersionUID = 20090915L;
+ private static final long serialVersionUID = 20100603L;
/** Standard Constructor */
public X_AD_ImpFormat (Properties ctx, int AD_ImpFormat_ID, String trxName)
@@ -149,6 +149,8 @@ public class X_AD_ImpFormat extends PO implements I_AD_ImpFormat, I_Persistent
public static final String FORMATTYPE_TabSeparated = "T";
/** XML = X */
public static final String FORMATTYPE_XML = "X";
+ /** Custom Separator Char = U */
+ public static final String FORMATTYPE_CustomSeparatorChar = "U";
/** Set Format.
@param FormatType
Format of the data
@@ -212,4 +214,18 @@ public class X_AD_ImpFormat extends PO implements I_AD_ImpFormat, I_Persistent
}
return false;
}
+
+ /** Set Separator Character.
+ @param SeparatorChar Separator Character */
+ public void setSeparatorChar (String SeparatorChar)
+ {
+ set_Value (COLUMNNAME_SeparatorChar, SeparatorChar);
+ }
+
+ /** Get Separator Character.
+ @return Separator Character */
+ public String getSeparatorChar ()
+ {
+ return (String)get_Value(COLUMNNAME_SeparatorChar);
+ }
}
\ No newline at end of file
diff --git a/migration/354a-trunk/oracle/731_FR3010957.sql b/migration/354a-trunk/oracle/731_FR3010957.sql
new file mode 100644
index 0000000000..88078fded5
--- /dev/null
+++ b/migration/354a-trunk/oracle/731_FR3010957.sql
@@ -0,0 +1,114 @@
+-- Jun 3, 2010 9:40:58 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Ref_List (AD_Client_ID,AD_Org_ID,AD_Reference_ID,AD_Ref_List_ID,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,209,53583,TO_DATE('2010-06-03 09:40:57','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','Custom Separator Char',TO_DATE('2010-06-03 09:40:57','YYYY-MM-DD HH24:MI:SS'),100,'U')
+;
+
+-- Jun 3, 2010 9:40:58 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Ref_List_Trl (AD_Language,AD_Ref_List_ID, Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Ref_List_ID, t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Ref_List t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Ref_List_ID=53583 AND NOT EXISTS (SELECT * FROM AD_Ref_List_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Ref_List_ID=t.AD_Ref_List_ID)
+;
+
+-- Jun 3, 2010 10:06:57 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Element (AD_Client_ID,AD_Element_ID,AD_Org_ID,ColumnName,Created,CreatedBy,EntityType,IsActive,Name,PrintName,Updated,UpdatedBy) VALUES (0,54158,0,'SeparatorChar',TO_DATE('2010-06-03 10:06:56','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','Separator Character','Separator Character',TO_DATE('2010-06-03 10:06:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Jun 3, 2010 10:06:57 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Description,Help,Name,PO_Description,PO_Help,PO_Name,PO_PrintName,PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Element_ID, t.Description,t.Help,t.Name,t.PO_Description,t.PO_Help,t.PO_Name,t.PO_PrintName,t.PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=54158 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Jun 3, 2010 10:08:18 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Column (AD_Client_ID,AD_Column_ID,AD_Element_ID,AD_Org_ID,AD_Reference_ID,AD_Table_ID,ColumnName,Created,CreatedBy,EntityType,FieldLength,IsActive,IsAllowLogging,IsAlwaysUpdateable,IsAutocomplete,IsEncrypted,IsIdentifier,IsKey,IsMandatory,IsParent,IsSelectionColumn,IsSyncDatabase,IsTranslated,IsUpdateable,Name,SeqNo,Updated,UpdatedBy,Version) VALUES (0,59193,54158,0,10,381,'SeparatorChar',TO_DATE('2010-06-03 10:08:17','YYYY-MM-DD HH24:MI:SS'),100,'U',1,'Y','Y','N','N','N','N','N','N','N','N','N','N','Y','Separator Character',0,TO_DATE('2010-06-03 10:08:17','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Jun 3, 2010 10:08:18 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=59193 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Jun 3, 2010 11:26:37 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Field (AD_Client_ID,AD_Column_ID,AD_Field_ID,AD_Org_ID,AD_Tab_ID,Created,CreatedBy,DisplayLength,DisplayLogic,EntityType,IsActive,IsCentrallyMaintained,IsDisplayed,IsEncrypted,IsFieldOnly,IsHeading,IsReadOnly,IsSameLine,Name,SeqNo,SortNo,Updated,UpdatedBy) VALUES (0,59193,58882,0,315,TO_DATE('2010-06-03 11:26:36','YYYY-MM-DD HH24:MI:SS'),100,0,'@FormatType@=''U''','D','Y','Y','Y','N','N','N','N','N','Separator Character',100,0,TO_DATE('2010-06-03 11:26:36','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Jun 3, 2010 11:26:37 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=58882 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Jun 3, 2010 11:27:45 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+ALTER TABLE AD_ImpFormat ADD SeparatorChar NVARCHAR2(1) DEFAULT NULL
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=0,IsDisplayed='N' WHERE AD_Field_ID=3713
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=10,IsDisplayed='Y' WHERE AD_Field_ID=3714
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=20,IsDisplayed='Y' WHERE AD_Field_ID=3715
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=30,IsDisplayed='Y' WHERE AD_Field_ID=3717
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=40,IsDisplayed='Y' WHERE AD_Field_ID=3718
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=50,IsDisplayed='Y' WHERE AD_Field_ID=3716
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=60,IsDisplayed='Y' WHERE AD_Field_ID=3737
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y' WHERE AD_Field_ID=3720
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=80,IsDisplayed='Y' WHERE AD_Field_ID=58882
+;
+
+-- Jun 3, 2010 11:31:16 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET IsSameLine='Y',Updated=TO_DATE('2010-06-03 11:31:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=58882
+;
+
diff --git a/migration/354a-trunk/postgresql/731_FR3010957.sql b/migration/354a-trunk/postgresql/731_FR3010957.sql
new file mode 100644
index 0000000000..da194eea8c
--- /dev/null
+++ b/migration/354a-trunk/postgresql/731_FR3010957.sql
@@ -0,0 +1,114 @@
+-- Jun 3, 2010 9:40:58 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Ref_List (AD_Client_ID,AD_Org_ID,AD_Reference_ID,AD_Ref_List_ID,Created,CreatedBy,EntityType,IsActive,Name,Updated,UpdatedBy,Value) VALUES (0,0,209,53583,TO_TIMESTAMP('2010-06-03 09:40:57','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','Custom Separator Char',TO_TIMESTAMP('2010-06-03 09:40:57','YYYY-MM-DD HH24:MI:SS'),100,'U')
+;
+
+-- Jun 3, 2010 9:40:58 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Ref_List_Trl (AD_Language,AD_Ref_List_ID, Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Ref_List_ID, t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Ref_List t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Ref_List_ID=53583 AND NOT EXISTS (SELECT * FROM AD_Ref_List_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Ref_List_ID=t.AD_Ref_List_ID)
+;
+
+-- Jun 3, 2010 10:06:57 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Element (AD_Client_ID,AD_Element_ID,AD_Org_ID,ColumnName,Created,CreatedBy,EntityType,IsActive,Name,PrintName,Updated,UpdatedBy) VALUES (0,54158,0,'SeparatorChar',TO_TIMESTAMP('2010-06-03 10:06:56','YYYY-MM-DD HH24:MI:SS'),100,'D','Y','Separator Character','Separator Character',TO_TIMESTAMP('2010-06-03 10:06:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Jun 3, 2010 10:06:57 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Description,Help,Name,PO_Description,PO_Help,PO_Name,PO_PrintName,PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Element_ID, t.Description,t.Help,t.Name,t.PO_Description,t.PO_Help,t.PO_Name,t.PO_PrintName,t.PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=54158 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Jun 3, 2010 10:08:18 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Column (AD_Client_ID,AD_Column_ID,AD_Element_ID,AD_Org_ID,AD_Reference_ID,AD_Table_ID,ColumnName,Created,CreatedBy,EntityType,FieldLength,IsActive,IsAllowLogging,IsAlwaysUpdateable,IsAutocomplete,IsEncrypted,IsIdentifier,IsKey,IsMandatory,IsParent,IsSelectionColumn,IsSyncDatabase,IsTranslated,IsUpdateable,Name,SeqNo,Updated,UpdatedBy,Version) VALUES (0,59193,54158,0,10,381,'SeparatorChar',TO_TIMESTAMP('2010-06-03 10:08:17','YYYY-MM-DD HH24:MI:SS'),100,'U',1,'Y','Y','N','N','N','N','N','N','N','N','N','N','Y','Separator Character',0,TO_TIMESTAMP('2010-06-03 10:08:17','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Jun 3, 2010 10:08:18 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=59193 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Jun 3, 2010 11:26:37 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Field (AD_Client_ID,AD_Column_ID,AD_Field_ID,AD_Org_ID,AD_Tab_ID,Created,CreatedBy,DisplayLength,DisplayLogic,EntityType,IsActive,IsCentrallyMaintained,IsDisplayed,IsEncrypted,IsFieldOnly,IsHeading,IsReadOnly,IsSameLine,Name,SeqNo,SortNo,Updated,UpdatedBy) VALUES (0,59193,58882,0,315,TO_TIMESTAMP('2010-06-03 11:26:36','YYYY-MM-DD HH24:MI:SS'),100,0,'@FormatType@=''U''','D','Y','Y','Y','N','N','N','N','N','Separator Character',100,0,TO_TIMESTAMP('2010-06-03 11:26:36','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Jun 3, 2010 11:26:37 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Description,Help,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Description,t.Help,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=58882 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Jun 3, 2010 11:27:45 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+ALTER TABLE AD_ImpFormat ADD COLUMN SeparatorChar VARCHAR(1) DEFAULT NULL
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=0,IsDisplayed='N' WHERE AD_Field_ID=3713
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=10,IsDisplayed='Y' WHERE AD_Field_ID=3714
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=20,IsDisplayed='Y' WHERE AD_Field_ID=3715
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=30,IsDisplayed='Y' WHERE AD_Field_ID=3717
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=40,IsDisplayed='Y' WHERE AD_Field_ID=3718
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=50,IsDisplayed='Y' WHERE AD_Field_ID=3716
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=60,IsDisplayed='Y' WHERE AD_Field_ID=3737
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=70,IsDisplayed='Y' WHERE AD_Field_ID=3720
+;
+
+-- Jun 3, 2010 11:31:04 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET SeqNo=80,IsDisplayed='Y' WHERE AD_Field_ID=58882
+;
+
+-- Jun 3, 2010 11:31:16 AM CEST
+-- FR [3010957] - Custom Separator Character
+-- http://sourceforge.net/tracker/?func=detail&aid=3010957&group_id=176962&atid=879335
+UPDATE AD_Field SET IsSameLine='Y',Updated=TO_TIMESTAMP('2010-06-03 11:31:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=58882
+;
+