Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/trunk@16747 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-06-13 08:50:39 +00:00
parent 3ba205c2bd
commit 66a1950abb
3 changed files with 254 additions and 251 deletions

View File

@ -568,7 +568,8 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
{
#ifdef DBG
//cazzone
if (rmovana.get_long(RMOVANA_NUMREG) == 7968)
const long cazzo_numreg = rmovana.get_long(RMOVANA_NUMREG);
if (cazzo_numreg == 6481 || cazzo_numreg == 7654)
int cazzone = 1;
#endif
@ -625,147 +626,146 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
//---- DOC D'ORIGINE DELL' ANALMOV ----//
//tipo movimento CONSUNTIVO (o TEMPORANEO); per i movimenti di budget (P o V) vedi l'else
const char tipomov = movana.get_char(MOVANA_TIPOMOV);
if (tipomov <= ' ' || tipomov == 'T')
//serve un documento da cui ricavare i parametri di stampa
TDocumento* newdoc = (TDocumento*)doc;
bool should_delete = false;
if (newdoc == NULL && movana.get_long(MOVANA_DNDOC) > 0)
{
//serve un documento da cui ricavare i parametri di stampa
TDocumento* newdoc = (TDocumento*)doc;
bool should_delete = false;
if (newdoc == NULL && movana.get_long(MOVANA_DNDOC) > 0)
const TString4 dacodnum = movana.get(MOVANA_DCODNUM);
newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
should_delete = true; //settato true per cancellare il doc al termine del metodo(sennò addio memoria!)
}
const bool dadoc = newdoc != NULL;
//i movimenti possono essere normali o generati da documento...
if (dadoc) //movimento generato da documento
{
codnum_desc = movana.get(MOVANA_DCODNUM); //serve anche in fondo al metodo
tmpcurr.put("CODNUM", codnum_desc); //codnum del documento che origina il movana
tmpcurr.put("ANNO", movana.get(MOVANA_DANNO)); //anno del doc di origine
tmpcurr.put("NUMRD", movana.get(MOVANA_DNDOC)); //numero del doc che origina movana
tmpcurr.put("DATA", newdoc->get(DOC_DATADOC)); //data del documento che genera movana..
} //..non esiste il campo in movana
else //movimento normale (senza documento)
{
tmpcurr.put("CODNUM", movana.get(MOVANA_CODCAUS)); //mette la causale del movimento
tmpcurr.put("ANNO", movana.get(MOVANA_ANNOES)); //anno del movimento
tmpcurr.put("NUMRD", movana.get(MOVANA_NUMREGCG)); //numregcg del movana
tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana
}
int selettore = 0;
const int anno_caus = movana.get_date(MOVANA_DATAREG).year();
const TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); //la causale serve un po' ovunque...
//ricerca del mitico documento padre della riga documento attuale!
if (newdoc != NULL)
{
tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
tmpcurr.put("DATADOCRIF", newdoc->get(DOC_DATADOCRIF)); //datadocrif del documento originante il movana
//procedura per ottenere i campi del documento
//deve tener conto del vero tipo del documento,nel caso sia classificato come _altro;in questo
//..caso si deve accorgere se e' in realta' una bolla o una fattura (utilizza la tipo_riclassificato())
const int tipo_documento = newdoc->tipo_riclassificato();
int tipo_babbo = TTipo_documento::_altro;
TToken_string riferimento(20, '\n'); //tokenstring su cui scrivere gli estremi dei docs padri (se li trova!)
TString80 rif; //stringa di lavoro su cui viene scritto un doc originale
const int rows = newdoc->physical_rows(); //righe del doc attuale
for (int i = 1; i <= rows; i++) //scandisce tutte le righe del doc..
{
const TString4 dacodnum = movana.get(MOVANA_DCODNUM);
newdoc = new TDocumento('D', movana.get_int(MOVANA_DANNO), dacodnum, movana.get_long(MOVANA_DNDOC));
should_delete = true; //settato true per cancellare il doc al termine del metodo(sennò addio memoria!)
}
const TRiga_documento& riga = (*newdoc)[i];
//commessa e fase della riga documento
const TString codcms_rigadoc = riga.codice_commessa();
const TString codfase_rigadoc = riga.fase_commessa();
const TString codcdc_rigadoc = riga.codice_costo();
//per evitare di scrivere per ogni riga documento tutte le righe del doc babbo (in pratica..
//..per evitare di avere n righe ordine ogni riga fattura) confronta commessa e fase e cdc..
//..della riga movimento analitico con quelli la riga movimento e procede solo nel..
//..caso coincidano (richiesta Adolfica! heil Magnavakken!)
const bool dadoc = newdoc != NULL;
//i movimenti possono essere normali o generati da documento...
if (dadoc) //movimento generato da documento
{
codnum_desc = movana.get(MOVANA_DCODNUM); //serve anche in fondo al metodo
tmpcurr.put("CODNUM", codnum_desc); //codnum del documento che origina il movana
tmpcurr.put("ANNO", movana.get(MOVANA_DANNO)); //anno del doc di origine
tmpcurr.put("NUMRD", movana.get(MOVANA_DNDOC)); //numero del doc che origina movana
tmpcurr.put("DATA", newdoc->get(DOC_DATADOC)); //data del documento che genera movana..
} //..non esiste il campo in movana
else //movimento normale (senza documento)
{
tmpcurr.put("CODNUM", movana.get(MOVANA_CODCAUS)); //mette la causale del movimento
tmpcurr.put("ANNO", movana.get(MOVANA_ANNOES)); //anno del movimento
tmpcurr.put("NUMRD", movana.get(MOVANA_NUMREGCG)); //numregcg del movana
tmpcurr.put("DATA", movana.get(MOVANA_DATACOMP)); //data del movana
}
int selettore = 0;
const int anno_caus = movana.get_date(MOVANA_DATAREG).year();
const TCausale caus(movana.get(MOVANA_CODCAUS), anno_caus); //la causale serve un po' ovunque...
//Altra richiesta Adolfica: nel caso di ripartizioni, per non perdere la connessione tra..
//..commessa/fase/cdc originale della riga analitica non ripartita e cms/fase/cdc della riga doc,..
//..e' necessario controllare l'esistenza dei campi ori che segnalano una ripartizione avvenuta.
//Se i campi ori sono compilati vanno usati!!! In caso contrario verrebbe perso il legame tra riga anal..
//..e riga doc e doc_babbo, perdendo la giusta configurazione del SELETTORE
//ricerca del mitico documento padre della riga documento attuale!
if (newdoc != NULL)
{
tmpcurr.put("NUMDOCRIF", newdoc->get(DOC_NUMDOCRIF)); //docrif del documento originante il movana
tmpcurr.put("DATADOCRIF", newdoc->get(DOC_DATADOCRIF)); //datadocrif del documento originante il movana
TString codcms_rmovana = rmovana.get(RMOVANA_CODCMSORI);
if (!codcms_rmovana.full())
codcms_rmovana = rmovana.get(RMOVANA_CODCMS);
TString codfase_rmovana = rmovana.get(RMOVANA_CODFASEORI);
if (!codfase_rmovana.full())
codfase_rmovana = rmovana.get(RMOVANA_CODFASE);
TString codcdc_rmovana = rmovana.get(RMOVANA_CODCCORI);
if (!codcdc_rmovana.full())
codcdc_rmovana = rmovana.get(RMOVANA_CODCCOSTO);
//procedura per ottenere i campi del documento
//deve tener conto del vero tipo del documento,nel caso sia classificato come _altro;in questo
//..caso si deve accorgere se e' in realta' una bolla o una fattura (utilizza la tipo_riclassificato())
const int tipo_documento = newdoc->tipo_riclassificato();
int tipo_babbo = TTipo_documento::_altro;
TToken_string riferimento(20, '\n'); //tokenstring su cui scrivere gli estremi dei docs padri (se li trova!)
TString80 rif; //stringa di lavoro su cui viene scritto un doc originale
const int rows = newdoc->physical_rows(); //righe del doc attuale
for (int i = 1; i <= rows; i++) //scandisce tutte le righe del doc..
if (codcms_rigadoc == codcms_rmovana && codfase_rigadoc == codfase_rmovana && codcdc_rigadoc == codcdc_rmovana)
{
const TRiga_documento& riga = (*newdoc)[i];
//commessa e fase della riga documento
const TString& codcms_rigadoc = riga.codice_commessa();
const TString& codfase_rigadoc = riga.fase_commessa();
const TString& codcdc_rigadoc = riga.codice_costo();
//per evitare di scrivere per ogni riga documento tutte le righe del doc babbo (in pratica..
//..per evitare di avere n righe ordine ogni riga fattura) confronta commessa e fase e cdc..
//..della riga movimento analitico con quelli la riga movimento e procede solo nel..
//..caso coincidano (richiesta Adolfica! heil Magnavakken!)
//Altra richiesta Adolfica: nel caso di ripartizioni, per non perdere la connessione tra..
//..commessa/fase/cdc originale della riga analitica non ripartita e cms/fase/cdc della riga doc,..
//..e' necessario controllare l'esistenza dei campi ori che segnalano una ripartizione avvenuta.
//Se i campi ori sono compilati vanno usati!!! In caso contrario verrebbe perso il legame tra riga anal..
//..e riga doc e doc_babbo, perdendo la giusta configurazione del SELETTORE
TString codcms_rmovana = rmovana.get(RMOVANA_CODCMSORI);
if (!codcms_rmovana.full())
codcms_rmovana = rmovana.get(RMOVANA_CODCMS);
TString codfase_rmovana = rmovana.get(RMOVANA_CODFASEORI);
if (!codfase_rmovana.full())
codfase_rmovana = rmovana.get(RMOVANA_CODFASE);
TString codcdc_rmovana = rmovana.get(RMOVANA_CODCCORI);
if (!codcdc_rmovana.full())
codcdc_rmovana = rmovana.get(RMOVANA_CODCCOSTO);
if (codcms_rigadoc == codcms_rmovana && codfase_rigadoc == codfase_rmovana && codcdc_rigadoc == codcdc_rmovana)
const TRectype* babbo = riga.find_original_rdoc(); //cerca il doc padre della riga doc attuale
if (babbo != NULL) //se trova il doc padre..
{
const TRectype* babbo = riga.find_original_rdoc(); //cerca il doc padre della riga doc attuale
if (babbo != NULL) //se trova il doc padre..
{
const TString4 babbo_codnum = babbo->get(RDOC_CODNUM);
const int anno = babbo->get_int(RDOC_ANNO);
const long ndoc = babbo->get_long(RDOC_NDOC);
rif.cut(0) << babbo_codnum << '-' << anno << '-' << ndoc;
const TString4 babbo_codnum = babbo->get(RDOC_CODNUM);
const int anno = babbo->get_int(RDOC_ANNO);
const long ndoc = babbo->get_long(RDOC_NDOC);
rif.cut(0) << babbo_codnum << '-' << anno << '-' << ndoc;
//caso particolare dei conti del CRPA. Se il conto non e' riclassificato (ma siamo in presenza..
//.di un piano dei conti riclassificato)...
if (conto_non_riclass)
//caso particolare dei conti del CRPA. Se il conto non e' riclassificato (ma siamo in presenza..
//.di un piano dei conti riclassificato)...
if (conto_non_riclass)
{
//Controlla se il documento di origine (padre del documento da cui deriva l'attuale riga..
//..di analitica) era una FDR/FDE...
const TCodice_numerazione& kodice_num = TDocumento::codice_numerazione(babbo_codnum);
//Se lo era...
if (kodice_num.fattura_emettere_ricevere())
{
//Controlla se il documento di origine (padre del documento da cui deriva l'attuale riga..
//..di analitica) era una FDR/FDE...
const TCodice_numerazione& kodice_num = TDocumento::codice_numerazione(babbo_codnum);
//Se lo era...
if (kodice_num.fattura_emettere_ricevere())
//Ricrea il documento origine
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc);
//elaborazione analitica del documento originale
TContabilizzazione_analitica cont_anal;
TAnal_mov mov_babbo;
//se riesce a contabilizzare il documento origine (si spera, senno' so' cazzi!)..
cont_anal.elabora(doc_babbo, 0, NULL, false, mov_babbo);
if (mov_babbo.rows() > 0)
{
//Ricrea il documento origine
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc);
//elaborazione analitica del documento originale
TContabilizzazione_analitica cont_anal;
TAnal_mov mov_babbo;
//se riesce a contabilizzare il documento origine (si spera, senno' so' cazzi!)..
cont_anal.elabora(doc_babbo, 0, NULL, false, mov_babbo);
if (mov_babbo.rows() > 0)
const int anal_rows = mov_babbo.rows();
for (int k = 1; k <= anal_rows; k++)
{
const int anal_rows = mov_babbo.rows();
for (int k = 1; k <= anal_rows; k++)
//cerca la riga con il conto che gli serve e lo assegna a codconto, attualmente vuoto..
//..in quanto non e' stato riclassificato
const TRectype& mov_babbo_riga = mov_babbo.body()[k];
const TString& conto_babbo = mov_babbo_riga.get(RMOVANA_CODCONTO);
if (conto_babbo != codcontocg)
{
//cerca la riga con il conto che gli serve e lo assegna a codconto, attualmente vuoto..
//..in quanto non e' stato riclassificato
const TRectype& mov_babbo_riga = mov_babbo.body()[k];
const TString& conto_babbo = mov_babbo_riga.get(RMOVANA_CODCONTO);
if (conto_babbo != codcontocg)
{
//ovviamente deve riclassificare il conto_babbo!
codconto = riclassifica(conto_babbo, tmpcurr);
indbil = bill2indbil(codconto, true);
break;
}
//ovviamente deve riclassificare il conto_babbo!
codconto = riclassifica(conto_babbo, tmpcurr);
indbil = bill2indbil(codconto, true);
break;
}
} //if (mov_babbo.rows() > 0)
}
else
continue;
}
} //if (mov_babbo.rows() > 0)
}
else
continue;
}
if (riferimento.get_pos(rif) < 0) //il doc originale va aggiunto solo se non esiste gia'!
{
riferimento.add(rif);
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc); //crea una copia del doc padre per prendere..
tipo_babbo = doc_babbo.tipo_riclassificato(); //..il tipo documento..
}
} //if (babbo != NULL)..
} //if (codcms_rigadoc == codcms_rmovana..
} //for (int i..
if (riferimento.get_pos(rif) < 0) //il doc originale va aggiunto solo se non esiste gia'!
{
riferimento.add(rif);
TDocumento doc_babbo('D', anno, babbo_codnum, ndoc); //crea una copia del doc padre per prendere..
tipo_babbo = doc_babbo.tipo_riclassificato(); //..il tipo documento..
}
} //if (babbo != NULL)..
} //if (codcms_rigadoc == codcms_rmovana..
} //for (int i..
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
tmpcurr.put("DOCORIG", riferimento); //documento di riferimento (mitologico documento originale)
//---- FINE DOC ORIG DELL'ANALMOV ----//
//---- FINE DOC ORIG DELL'ANALMOV ----//
/*[Tipo documento] //schema divino per destinare gli importi nei campi corretti
O=I**
B=IM*
@ -773,140 +773,141 @@ BO=*M*
FB=**F
FO=*MF
F=IMF*/
//---- IMPEGNATO,MATURATO O FATTURATO? QUESTO E' IL PROBLEMA.. ----//
switch (tipo_documento)
{
case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M
selettore = MATURATO;
if (tipo_babbo != TTipo_documento::_ordine)
selettore |= IMPEGNATO;
break;
case TTipo_documento::_fattura:
selettore = FATTURATO; //fattura da bolla FB -> F
if (tipo_babbo == TTipo_documento::_ordine) //fattura da ordine FO -> MF
{
selettore |= MATURATO;
} else
if (tipo_babbo == TTipo_documento::_altro) //fattura senza padri F -> IMF
selettore |= (IMPEGNATO | MATURATO);
break;
case TTipo_documento::_ordine:
selettore = IMPEGNATO;
break;
case TTipo_documento::_altro:
CHECK(false, "Ma dove cavolo stai passando Willis?");
break;
default:
break;
}
} //if(newdoc != NULL)
else //movimenti puri di analitica (no documento di origine!)
//---- IMPEGNATO,MATURATO O FATTURATO? QUESTO E' IL PROBLEMA.. ----//
switch (tipo_documento)
{
if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto"
case TTipo_documento::_bolla: //bolla B -> IM a meno che non sia bolla da ordine BO -> M
selettore = MATURATO;
if (tipo_babbo != TTipo_documento::_ordine)
selettore |= IMPEGNATO;
break;
case TTipo_documento::_fattura:
selettore = FATTURATO; //fattura da bolla FB -> F
if (tipo_babbo == TTipo_documento::_ordine) //fattura da ordine FO -> MF
{
selettore = MATURATO;
}
else //movimenti con causali "normali"
{
selettore = FATTURATO;
selettore |= MATURATO;
selettore |= IMPEGNATO;
}
} //if(newdoc != NULL)
} else
if (tipo_babbo == TTipo_documento::_altro) //fattura senza padri F -> IMF
selettore |= (IMPEGNATO | MATURATO);
break;
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
char sezione = rmovana.get_char(RMOVANA_SEZIONE);
TImporto imp(sezione, rmovana.get_real(RMOVANA_IMPORTO));
case TTipo_documento::_ordine:
selettore = IMPEGNATO;
break;
TipoIVA tipoiva = caus.iva(); //tipo iva legato alla causale (codcaus e' letto ad inizio procedura)
char sezione_normale = sezione; //inizializza la sezione normale a sezione per evitare vuoti
case TTipo_documento::_altro:
CHECK(false, "Ma dove cavolo stai passando Willis?");
break;
if (tipoiva == iva_vendite)
sezione_normale = 'A';
else
if (tipoiva == iva_acquisti)
sezione_normale = 'D';
else
if (tipoiva == nessuna_iva)
{
if (caus.tipomov() > 0 && caus.tipomov() < 3) //solo causali Fattura e Nota di Credito!
{
if (caus.sezione_clifo() == 'D')
sezione_normale = 'A';
else
sezione_normale = 'D';
}
else
{
if (indbil == 1 || indbil == 3) //attivita' e costi sono in DARE
sezione_normale = 'D';
else //passivita' e ricavi sono in AVERE
sezione_normale = 'A';
}
}
else
{ //iva errata -> non ha causali -> cerca di capire se cliente o fornitore
if (newdoc != NULL)
{
if (newdoc->get_char(DOC_TIPOCF) == 'C')
sezione_normale = 'A';
else
sezione_normale = 'D';
}
}
imp.normalize(sezione_normale);
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
if (selettore & FATTURATO)
tmpcurr.put("FATTURATO", imp.valore());
if (selettore & MATURATO)
tmpcurr.put("MATURATO", imp.valore());
if (selettore & IMPEGNATO)
tmpcurr.put("IMPEGNATO", imp.valore());
//campi comuni a rmovana e rdoc senza particolari operazioni
TString descr = movana.get(MOVANA_DESCR);
int pos = descr.find('$'); //solo per il CRPA!
if (pos > 0)
{
descr.ltrim(pos+1);
descr.trim();
default:
break;
}
//----Scrittura Conti sul file----//
//Scrittura dei conti (i valori delle variabili sono stati settati nella parte iniziale del metodo)
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
tmpcurr.put("CONTO", codconto); //conto
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
const int ordcont = sort_indbil(indbil);
tmpcurr.put("ORDCONT", ordcont);
//----Scrittura dati riga movimento----//
tmpcurr.put("NUMREG", rmovana.get(RMOVANA_NUMREG));
tmpcurr.put("NUMREGCG", movana.get(MOVANA_NUMREGCG)); //numero di registrazione contabile
tmpcurr.put("DESC", descr); //descrizione movana
tmpcurr.put("NRIGA", rmovana.get(RMOVANA_NUMRIG)); //numero riga
tmpcurr.put("DESCRIGA", rmovana.get(RMOVANA_DESCR)); //descrizione rmovana
if (should_delete)
delete newdoc;
} //if (tipomov == ..)
else
} //if(newdoc != NULL)
else //movimenti puri di analitica (no documento di origine!)
{
tmpcurr.put("HIDDEN", "X");
if (is_causale_rateo_risconto(caus.codice())) //movimenti con causali "rateo/risconto"
{
selettore = MATURATO;
}
else //movimenti con causali "normali"
{
selettore = FATTURATO;
selettore |= MATURATO;
selettore |= IMPEGNATO;
}
} //if(newdoc != NULL)
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
char sezione = rmovana.get_char(RMOVANA_SEZIONE);
TImporto imp(sezione, rmovana.get_real(RMOVANA_IMPORTO));
TipoIVA tipoiva = caus.iva(); //tipo iva legato alla causale (codcaus e' letto ad inizio procedura)
char sezione_normale = sezione; //inizializza la sezione normale a sezione per evitare vuoti
if (tipoiva == iva_vendite)
sezione_normale = 'A';
else
if (tipoiva == iva_acquisti)
sezione_normale = 'D';
else
if (tipoiva == nessuna_iva)
{
if (caus.tipomov() > 0 && caus.tipomov() < 3) //solo causali Fattura e Nota di Credito!
{
if (caus.sezione_clifo() == 'D')
sezione_normale = 'A';
else
sezione_normale = 'D';
}
else
{
if (indbil == 1 || indbil == 3) //attivita' e costi sono in DARE
sezione_normale = 'D';
else //passivita' e ricavi sono in AVERE
sezione_normale = 'A';
}
}
else
{ //iva errata -> non ha causali -> cerca di capire se cliente o fornitore
if (newdoc != NULL)
{
if (newdoc->get_char(DOC_TIPOCF) == 'C')
sezione_normale = 'A';
else
sezione_normale = 'D';
}
}
imp.normalize(sezione_normale);
//riempie i record del file temporaneo nel caso di rmovana con documento di origine
if (selettore & FATTURATO)
tmpcurr.put("FATTURATO", imp.valore());
if (selettore & MATURATO)
tmpcurr.put("MATURATO", imp.valore());
if (selettore & IMPEGNATO)
tmpcurr.put("IMPEGNATO", imp.valore());
//campi comuni a rmovana e rdoc senza particolari operazioni
TString descr = movana.get(MOVANA_DESCR);
int pos = descr.find('$'); //solo per il CRPA!
if (pos > 0)
{
descr.ltrim(pos+1);
descr.trim();
}
//----Scrittura Conti sul file----//
//Scrittura dei conti (i valori delle variabili sono stati settati nella parte iniziale del metodo)
//mette i conti nel file (se piano dei conti puramente contabile i valori coincidono)
tmpcurr.put("CONTO", codconto); //conto
tmpcurr.put("CONTOCG", codcontocg); //conto_cg
//fa il sort l'indicatore di bilancio del conto e lo utilizza per ordinare i record nel file..
//..di appoggio;se sei del CRPA/CSA vuoi i costi dopo i ricavi!
const int ordcont = sort_indbil(indbil);
tmpcurr.put("ORDCONT", ordcont);
//----Scrittura dati riga movimento----//
tmpcurr.put("NUMREG", rmovana.get(RMOVANA_NUMREG));
tmpcurr.put("NUMREGCG", movana.get(MOVANA_NUMREGCG)); //numero di registrazione contabile
tmpcurr.put("DESC", descr); //descrizione movana
tmpcurr.put("NRIGA", rmovana.get(RMOVANA_NUMRIG)); //numero riga
tmpcurr.put("DESCRIGA", rmovana.get(RMOVANA_DESCR)); //descrizione rmovana
if (should_delete)
delete newdoc;
//I movimenti di budget (preventivi e variazioni) vanno nascosti nei body!!! Devono essere considerati in..
//..quanto servono per sapere quali conti sono stati movimentati per i budget, in modo che per ogni conto..
//..il report si crei la testata e faccia il relativo calcolo del saldo del conto! (cerca #PREVENTIVO)
if (tipomov == 'P' || tipomov == 'V')
tmpcurr.put("HIDDEN", "X");
//scrive sul file di appoggio il record appena riempito
int err = _tmp->write();

View File

@ -141,7 +141,7 @@
<prescript description="H1.102 PRESCRIPT">MESSAGE ISAMREAD,CLIFO,TIPOCF=C!CODCF=#101,RAGSOC</prescript>
</field>
</section>
<section repeat="1" type="Head" level="2" height="2">
<section type="Head" level="2" height="2">
<groupby>ORDCONT+CONTO</groupby>
<font italic="1" face="Courier New" size="8" />
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2.400

View File

@ -1300,7 +1300,9 @@ void TAnal_mov::saldo_set_reset(const TRectype& row, bool reset)
const TDate datacomp = get_date(MOVANA_DATACOMP);
const TDate datafcomp = get_date(MOVANA_DATAFCOMP);
giorni_annies.add(esc[esc_iniziale].fine() - datacomp + 1); //primo esercizio
TDate inizio_esc_iniziale, fine_esc_iniziale;
esc.code2range(esc_iniziale, inizio_esc_iniziale, fine_esc_iniziale);
giorni_annies.add(fine_esc_iniziale - datacomp + 1); //primo esercizio
TDate inizio_esc_finale, fine_esc_finale;
for (int a = 1; a < annies.items() - 1; a++)