diff --git a/ca/ca3700.cpp b/ca/ca3700.cpp
index f8f063a26..1250fe2e6 100755
--- a/ca/ca3700.cpp
+++ b/ca/ca3700.cpp
@@ -284,7 +284,7 @@ TPrint_rendiconto_ca_mask::TPrint_rendiconto_ca_mask()
 		  daconto.set_group(1);
       daconto.set_group(4);
       daconto.set_group(g);
-		  daconto.check_type(CHECK_NORMAL);
+		  daconto.check_type(CHECK_SEARCH);
       
       field(da_des+i).set_group(4);
       field(da_des+i).set_group(g);
@@ -293,7 +293,7 @@ TPrint_rendiconto_ca_mask::TPrint_rendiconto_ca_mask()
 		  aconto.set_group(2);
       aconto.set_group(4);
       aconto.set_group(g);
-		  aconto.check_type(CHECK_NORMAL);
+		  aconto.check_type(CHECK_SEARCH);
       
       field(a_des+i).set_group(4);
       field(a_des+i).set_group(g);
@@ -420,20 +420,15 @@ real TPrint_rendiconto_ca_recordset::somma_budget(const TString& codconto, const
 	//selezionato e la datacomp compresa nell'intervallo date
 	TRectype da_rmovana(LF_RMOVANA);
 	TRectype a_rmovana(LF_RMOVANA);
-	if (!_riclassificato)
-	{
-		da_rmovana.put(RMOVANA_CODCONTO, codconto);
-		a_rmovana.put(RMOVANA_CODCONTO, codconto);
-	}
-	else	//se riclassificato
-	{
-	}
+
+	da_rmovana.put(RMOVANA_CODCONTO, codconto);
+	a_rmovana.put(RMOVANA_CODCONTO, codconto);
 
 	da_rmovana.put(RMOVANA_DATACOMP, _dadata);	
 	a_rmovana.put(RMOVANA_DATACOMP, _adata);
 
 	TString filtro;
-	filtro << "(MOVANA_TIPODOC==" << tipomovana << ")";
+	filtro << "(107->TIPOMOV==\"" << tipomovana << "\")";
 
 	TCursor cur_rmovana(&rel_rmovana, filtro, 2, &da_rmovana, &a_rmovana);
 	const long rmovana_items = cur_rmovana.items();
@@ -479,13 +474,25 @@ const TVariant& TPrint_rendiconto_ca_recordset::get(const char* column_name) con
 		if (strcmp(column_name, "#PREVENTIVO") == 0)
 		{
 			TVariant& var = get_tmp_var();
-			var = rendiconto_recordset()->somma_budget(get("CONTO").as_string(), "P");
+			TString80 conto;
+			if (_riclassificato)
+				conto = TISAM_recordset::get("CONTOCG").as_string();
+			else
+				conto = TISAM_recordset::get("CONTO").as_string();
+
+			var = rendiconto_recordset()->somma_budget(conto, "P");
 			return var;
 		}
 		if (strcmp(column_name, "#VARIAZIONE") == 0)
 		{
 			TVariant& var = get_tmp_var();
-			var = rendiconto_recordset()->somma_budget(get("CONTO").as_string(), "V");
+			TString80 conto;
+			if (_riclassificato)
+				conto = TISAM_recordset::get("CONTOCG").as_string();
+			else
+				conto = TISAM_recordset::get("CONTO").as_string();
+
+			var = rendiconto_recordset()->somma_budget(conto, "V");
 			return var;
 		}
 	}
@@ -567,14 +574,16 @@ void TPrint_rendiconto_ca_recordset::salva_rmovana(const TRectype& rmovana, cons
 			//ATTENZIONE! Se era stata operata una selezione sui conti riclassificati nella maschera
 			//ed il conto riclassificato attuale non ricade nell'intervallo selezionato il programma
 			//non deve aggiungere il record al file!!
-			if (conto_riclassificato < _da_conto_riclas || conto_riclassificato > _a_conto_riclas)
+			if ((_da_conto_riclas.not_empty() && conto_riclassificato < _da_conto_riclas) || 
+					(_a_conto_riclas.not_empty() && conto_riclassificato.compare(_a_conto_riclas, _a_conto_riclas.len()) > 0))
 				return;
 
 		}
 		else	//...senn� si usa il normale piano dei conti analitico (cio� tutti tranne che il CRPA)
 			_tmp->curr().put("CONTO", rmovana.get(RMOVANA_CODCONTO));	//conto
 
-
+		//in ogni caso riempio il campo conto_cg
+		_tmp->curr().put("CONTOCG", rmovana.get(RMOVANA_CODCONTO));	//conto_cg
 
 		//i movimenti possono essere normali o generati da documento...
 		if (dadoc)	//movimento generato da documento
@@ -758,15 +767,15 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rmovana()
 
 void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_mask& msk)
 {
-	TRelation rel_doc(LF_DOC);
-//	rel_doc.add(LF_RIGHEDOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");	//aggiunge le testate
+	TRelation rel_rdoc(LF_RIGHEDOC);
+	rel_rdoc.add(LF_DOC, "CODNUM==CODNUM|ANNO==ANNO|PROVV==PROVV|NDOC==NDOC");	//aggiunge le testate
 	
-	TRectype dadoc(LF_DOC);
-	TRectype adoc(LF_DOC);
+	TRectype dardoc(LF_RIGHEDOC);
+	TRectype ardoc(LF_RIGHEDOC);
 	TString filtro_date;
 
-	dadoc.put(DOC_PROVV, 'D');
-	adoc.put(DOC_PROVV, 'D');
+	dardoc.put(RDOC_PROVV, 'D');
+	ardoc.put(RDOC_PROVV, 'D');
 
 	//se siamo fortunati l'anno si pu� trovare cos�..
 	int anno = msk.get_int(F_ANNO);
@@ -775,18 +784,18 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_
 
 	if (anno > 0)
 	{
-		dadoc.put(DOC_ANNO, anno);
-		adoc.put(DOC_ANNO, anno);
+		dardoc.put(RDOC_ANNO, anno);
+		ardoc.put(RDOC_ANNO, anno);
 	}
 
 	if (_dadata.ok())
-		filtro_date << "(ANSI(DATADOC)>=" << _dadata.date2ansi() << ")";
+		filtro_date << "(ANSI(33->DATADOC)>=" << _dadata.date2ansi() << ")";
 	if (_adata.ok())
 	{
 		if (filtro_date.not_empty())
 			filtro_date << "&&";
 
-		filtro_date << "(ANSI(DATADOC)<=" << _adata.date2ansi() << ")";
+		filtro_date << "(ANSI(33->DATADOC)<=" << _adata.date2ansi() << ")";
 	}
 
 	TContabilizzazione_analitica cont_anal;	//oggetto necessario per contabilizzare il documento in osservazione
@@ -799,33 +808,33 @@ void TPrint_rendiconto_ca_recordset::crea_righe_rdoc(const TPrint_rendiconto_ca_
 		const TString4 codnum(row->get(0)); //prende il codice numerazione sulla riga
 		if (anno > 0)
 		{
-			dadoc.put(DOC_CODNUM, codnum);
-			adoc.put(DOC_CODNUM, codnum);
+			dardoc.put(RDOC_CODNUM, codnum);
+			ardoc.put(RDOC_CODNUM, codnum);
 		}
 
 		TString filtro = filtro_date;
 		if (filtro.not_empty())
 			filtro << "&&";
 		filtro << "(CODNUM==\"" << codnum << "\")";
-		filtro << "&&(PROVV==\"" << "D" << "\")";
+		filtro << "&&(33->STATO>=\"" << row->get(2) << "\")";
+		filtro << "&&(33->STATO<=\"" << row->get(3) << "\")";
 
+		TCursor cur_rdoc(&rel_rdoc, filtro, 1, &dardoc, &ardoc);
+		const long rdoc_items = cur_rdoc.items();
+		cur_rdoc.freeze();
 
-		TCursor cur_doc(&rel_doc, filtro, 1, &dadoc, &adoc);
-		const long doc_items = cur_doc.items();
-		cur_doc.freeze();
-
-		if (doc_items > 0)
+		if (rdoc_items > 0)
 		{
 			TString commento_progind;
-			commento_progind << "Scansione documenti " << codnum << "..."; 
-			TProgind pi(doc_items, commento_progind);
+			commento_progind << "Scansione righe documenti " << codnum << "..."; 
+			TProgind pi(rdoc_items, commento_progind);
 
 			//scanning del file dei documenti alla ricerca di quelli che hanno la data ed il CODNUM 
 			//validi nei filtri impostati dall'utente 
-			for (cur_doc = 0; cur_doc.pos() < doc_items; ++cur_doc)
+			for (cur_rdoc = 0; cur_rdoc.pos() < rdoc_items; ++cur_rdoc)
 			{
 				pi.addstatus(1);
-				TDocumento doc(cur_doc.curr());
+				TDocumento doc(cur_rdoc.curr(LF_DOC));
 				TAnal_mov mov;
 				cont_anal.elabora(doc, 0, NULL, false, mov);
 				for (int j = 1; j <= mov.rows(); j++)
@@ -843,23 +852,24 @@ void TPrint_rendiconto_ca_recordset::crea_trr(const TFilename& trr) const
 {
 	ofstream of(trr);
 	of << 1000 << endl;
-	of << 14 << endl;
+	of << 15 << endl;
 	of << "CONTO|1|20|0|Conto analitico" << endl;
 	of << "CODNUM|1|4|0|Numerazione documento" << endl;
-	of << "ANNO|9|4|0|Anno" << endl;
 	of << "DATA|5|8|0|Data movimento o documento" << endl;
 	of << "NUMRD|3|7|0|Numero registrazione o documento" << endl;
+	of << "NRIGA|2|3|0|Riga movimento o documento" << endl;
+	of << "ANNO|9|4|0|Anno" << endl;
 	of << "NUMDOCRIF|1|7|0|Numero documento riferimento" << endl;
 	of << "DATADOCRIF|5|8|0|Data documento riferimento" << endl;
 	of << "DESC|1|50|0|Descrizione movimento o documento" << endl;
-	of << "NRIGA|2|3|0|Riga movimento o documento" << endl;
 	of << "DESCRIGA|1|50|0|Descrizione riga movimento o documento" << endl;
 	of << "DOCORIG|1|20|0|Riferimento ordine/bolla" << endl;
 	of << "FATTURATO|4|18|5|Fatturato" << endl;
 	of << "MATURATO|4|18|5|Maturato" << endl;
 	of << "IMPEGNATO|4|18|5|Impegnato" << endl;
+	of << "CONTOCG|1|12|0|Conto contabile" << endl;
 	of << 1 << endl;
-	of << "CONTO+CODNUM+DATA+NUMRD" << endl;
+	of << "CONTO+CODNUM+DATA+NUMRD+NRIGA" << endl;
 }
 
 void TPrint_rendiconto_ca_recordset::set_filter(const TPrint_rendiconto_ca_mask& msk, int cms_row)
diff --git a/ca/ca3700.uml b/ca/ca3700.uml
index ba000f55e..cbbe94080 100755
--- a/ca/ca3700.uml
+++ b/ca/ca3700.uml
@@ -293,7 +293,7 @@ STRING SN_DASTATO 1
 BEGIN
   PROMPT 1 3 "Da stato          "
   USE %STD
-  CHECKTYPE NORMAL
+  CHECKTYPE REQUIRED
   INPUT CODTAB SN_DASTATO
   DISPLAY "Codice" CODTAB
   DISPLAY "Descrizione@50" S0
@@ -305,7 +305,7 @@ STRING SN_ASTATO 1
 BEGIN
   PROMPT 1 4 "A stato           "
   USE %STD
-  CHECKTYPE NORMAL
+  CHECKTYPE REQUIRED
   INPUT CODTAB SN_ASTATO
   DISPLAY "Codice" CODTAB
   DISPLAY "Descrizione@50" S0