Index: src/libchcore/TSubTaskArray.cpp
===================================================================
diff -u -N -r081055369d6b332ef1651877756657973b1b2d9c -rfc67a825635691930b3ac00dc95b16e59f3d2fae
--- src/libchcore/TSubTaskArray.cpp	(.../TSubTaskArray.cpp)	(revision 081055369d6b332ef1651877756657973b1b2d9c)
+++ src/libchcore/TSubTaskArray.cpp	(.../TSubTaskArray.cpp)	(revision fc67a825635691930b3ac00dc95b16e59f3d2fae)
@@ -181,6 +181,8 @@
 	///////////////////////////////////////////////////////////////////////
 	{
 		ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks_info"));
+		InitSubtasksInfoColumns(spContainer);
+
 		ISerializerRowDataPtr spRow;
 
 		if(bAdded)
@@ -195,6 +197,9 @@
 	///////////////////////////////////////////////////////////////////////
 	{
 		ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks"));
+
+		InitSubtasksColumns(spContainer);
+
 		ISerializerRowDataPtr spRow;
 
 		// base data
@@ -255,12 +260,10 @@
 	///////////////////////////////////////////////////////////////////////
 	{
 		ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks_info"));
-		ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader();
 
-		IColumnsDefinition& rColumns = spRowReader->GetColumnsDefinitions();
-		if(rColumns.IsEmpty())
-			rColumns % _T("id") % _T("operation");
+		InitSubtasksInfoColumns(spContainer);
 
+		ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader();
 		if(spRowReader->Next())
 			spRowReader->GetValue(_T("operation"), *(int*)&m_eOperationType.Modify());
 	}
@@ -272,9 +275,7 @@
 		ISerializerContainerPtr spContainer = spSerializer->GetContainer(_T("subtasks"));
 		ISerializerRowReaderPtr spRowReader = spContainer->GetRowReader();
 
-		IColumnsDefinition& rColumns = spRowReader->GetColumnsDefinitions();
-		if(rColumns.IsEmpty())
-			rColumns % _T("id") % _T("type") % _T("is_current") % _T("is_estimation");
+		InitSubtasksColumns(spContainer);
 
 		while(spRowReader->Next())
 		{
@@ -335,4 +336,30 @@
 	}
 }
 
+IColumnsDefinition& TSubTasksArray::InitSubtasksColumns(const ISerializerContainerPtr& spContainer) const
+{
+	IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition();
+	if(rColumns.IsEmpty())
+	{
+		rColumns.AddColumn(_T("id"), IColumnsDefinition::eType_long);
+		rColumns.AddColumn(_T("type"), IColumnsDefinition::eType_int);
+		rColumns.AddColumn(_T("is_current"), IColumnsDefinition::eType_bool);
+		rColumns.AddColumn(_T("is_estimation"), IColumnsDefinition::eType_bool);
+	}
+
+	return rColumns;
+}
+
+IColumnsDefinition& TSubTasksArray::InitSubtasksInfoColumns(const ISerializerContainerPtr& spContainer) const
+{
+	IColumnsDefinition& rColumns = spContainer->GetColumnsDefinition();
+	if(rColumns.IsEmpty())
+	{
+		rColumns.AddColumn(_T("id"), IColumnsDefinition::eType_long);
+		rColumns.AddColumn(_T("operation"), IColumnsDefinition::eType_int);
+	}
+
+	return rColumns;
+}
+
 END_CHCORE_NAMESPACE