Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : _riportate corrrezioni e nuove implementazioni su esportazione rendiconto dalla 5.0 _iniziata la trattazione dei documenti nel bilancio di commessa alla data (filtro alla ricerca dei documenti validi) git-svn-id: svn://10.65.10.50/trunk@18881 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
4bc9aed05e
commit
ef4a02d3f1
110
ca/ca3700.cpp
110
ca/ca3700.cpp
@ -142,14 +142,6 @@ bool TPrint_rendiconto_ca_mask::on_field_event(TOperable_field& o, TField_event
|
||||
disable(F_PANDES1_FIN + k);
|
||||
}
|
||||
break;
|
||||
case DLG_PREVIEW:
|
||||
if (e == fe_button)
|
||||
{
|
||||
_print_mode = 'A';
|
||||
stop_run(K_ENTER);
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case DLG_EXPORT:
|
||||
if (e == fe_button)
|
||||
{
|
||||
@ -280,7 +272,7 @@ protected:
|
||||
bool valid_record(const TRelation& rel) const;
|
||||
virtual void set_custom_filter(TCursor& cur) const;
|
||||
|
||||
void crea_righe_da_rmovana(TLocalisamfile& tmp, TLog_report& log);
|
||||
void crea_righe_da_rmovana(TLocalisamfile& tmp, const TPrint_rendiconto_ca_mask& msk, TLog_report& log);
|
||||
void crea_righe_da_rdoc(TLocalisamfile& tmp, const TPrint_rendiconto_ca_mask& msk, TLog_report& log);
|
||||
void crea_trr(const TFilename& trr) const;
|
||||
void scrive_riga(TLocalisamfile& tmp, const TRectype& rmovana, const TRectype& movana, const TDocumento* doc,
|
||||
@ -1162,7 +1154,8 @@ void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(TLocalisamfile& tmp, c
|
||||
|
||||
|
||||
//scanning delle righe dei movimenti di analitica
|
||||
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana(TLocalisamfile& tmp, TLog_report& log)
|
||||
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana(TLocalisamfile& tmp, const TPrint_rendiconto_ca_mask& msk,
|
||||
TLog_report& log)
|
||||
{
|
||||
TRelation rel_rmovana(LF_RMOVANA);
|
||||
rel_rmovana.add(LF_MOVANA, "NUMREG==NUMREG"); //aggiunge le testate x avere tipi mov e descr
|
||||
@ -1179,16 +1172,28 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana(TLocalisamfile& tmp,
|
||||
}
|
||||
|
||||
TString filtro;
|
||||
TDate dal, al;
|
||||
|
||||
if (_dadata.ok())
|
||||
filtro << "(ANSI(DATACOMP)>=" << _dadata.date2ansi() << ")";
|
||||
if (_adata.ok() && !_vitaintera) //se vitaintera non si può avere una data limite superiore
|
||||
{
|
||||
if (filtro.not_empty())
|
||||
filtro << "&&";
|
||||
//se siamo fortunati l'anno si può trovare così..
|
||||
int anno = msk.get_int(F_ANNO);
|
||||
if (anno > 0)
|
||||
{
|
||||
TEsercizi_contabili esc;
|
||||
esc.code2range(anno, dal, al);
|
||||
}
|
||||
if (_dadata.ok())
|
||||
dal = _dadata;
|
||||
if (!_vitaintera)
|
||||
{
|
||||
if (_adata.ok())
|
||||
al = _adata;
|
||||
}
|
||||
else
|
||||
al = TDate();
|
||||
|
||||
|
||||
filtro << "BETWEEN(DATACOMP," << dal.date2ansi() << ',' << al.date2ansi() << ')';
|
||||
|
||||
filtro << "(ANSI(DATACOMP)<=" << _adata.date2ansi() << ")";
|
||||
}
|
||||
|
||||
if (_codcosto.not_empty())
|
||||
{
|
||||
@ -1290,6 +1295,8 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(TLocalisamfile& tmp, con
|
||||
dardoc.put(RDOC_PROVV, 'D');
|
||||
ardoc.put(RDOC_PROVV, 'D');
|
||||
|
||||
TDate dal, al;
|
||||
|
||||
//se siamo fortunati l'anno si può trovare così..
|
||||
int anno = msk.get_int(F_ANNO);
|
||||
if (anno > 0)
|
||||
@ -1305,15 +1312,24 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(TLocalisamfile& tmp, con
|
||||
anno = _dadata.year();
|
||||
}
|
||||
|
||||
if (_dadata.ok())
|
||||
filtro_date << "(ANSI(33->DATADOC)>=" << _dadata.date2ansi() << ")";
|
||||
if (_adata.ok() && !_vitaintera) //se vitaintera non si può avere una data limite superiore
|
||||
{
|
||||
if (filtro_date.not_empty())
|
||||
filtro_date << "&&";
|
||||
if (anno > 0)
|
||||
{
|
||||
TEsercizi_contabili esc;
|
||||
esc.code2range(anno, dal, al);
|
||||
}
|
||||
if (_dadata.ok())
|
||||
dal = _dadata;
|
||||
if (!_vitaintera)
|
||||
{
|
||||
if (_adata.ok())
|
||||
al = _adata;
|
||||
}
|
||||
else
|
||||
al = TDate();
|
||||
|
||||
filtro_date << "(ANSI(33->DATADOC)<=" << _adata.date2ansi() << ")";
|
||||
}
|
||||
|
||||
filtro_date << "BETWEEN(33->DATADOC," << dal.date2ansi() << ',' << al.date2ansi() << ')';
|
||||
|
||||
|
||||
TContabilizzazione_analitica cont_anal; //oggetto necessario per contabilizzare il documento in osservazione
|
||||
|
||||
@ -1596,7 +1612,7 @@ void TPrint_rendiconto_ca_recordset::set_filter(const TPrint_rendiconto_ca_mask&
|
||||
|
||||
//metodi per riempire il file da cui generare il report
|
||||
//dati estratti dalle righe movimenti di contabilita' analitica
|
||||
crea_righe_da_rmovana(tmp, log);
|
||||
crea_righe_da_rmovana(tmp, msk, log);
|
||||
//dati estratti dalle righe documenti
|
||||
crea_righe_da_rdoc(tmp, msk, log);
|
||||
|
||||
@ -1676,13 +1692,24 @@ void TPrint_rendiconto_ca::incrementa(TToken_string& riga, const int col, const
|
||||
void TPrint_rendiconto_ca::esporta_csv_row(ostream& file_to_date, const int first_level, const TString& cod_cms_cdc,
|
||||
const real importi[5][4], real importi_totali[5][4])
|
||||
{
|
||||
const int posizione_importi = first_level == LF_COMMESSE ? 5 : 2;
|
||||
//crea una token string su cui mettere i valori dei record letti dal file .dbf
|
||||
TToken_string riga(512, '\t');
|
||||
|
||||
riga.add(cod_cms_cdc);
|
||||
//decodifica della commessa/cdc (non è ammessa una commessa "TOTALI" che lo incasina
|
||||
if (cod_cms_cdc != "TOTALI")
|
||||
riga.add(cache().get(first_level, cod_cms_cdc, "DESCRIZ"));
|
||||
{
|
||||
const TRectype& rec = cache().get(first_level, cod_cms_cdc);
|
||||
const TString& descrizione = rec.get("DESCRIZ");
|
||||
riga.add(descrizione);
|
||||
if (first_level == LF_COMMESSE)
|
||||
{
|
||||
riga.add(rec.get(COMMESSE_DATAINIZIO));
|
||||
riga.add(rec.get(COMMESSE_DATAFINE));
|
||||
riga.add(rec.get(COMMESSE_DATAPROR));
|
||||
}
|
||||
}
|
||||
|
||||
//in base al valore di indbil e budget i valori degli importi vengono posizionati nel record
|
||||
for (int indbil = 1; indbil <= 4; indbil++)
|
||||
@ -1690,10 +1717,10 @@ void TPrint_rendiconto_ca::esporta_csv_row(ostream& file_to_date, const int firs
|
||||
int col = 0;
|
||||
switch (indbil)
|
||||
{
|
||||
case 1: col = 16; break; //attività
|
||||
case 2: col = 23; break; //passività
|
||||
case 3: col = 2; break; //costi
|
||||
case 4: col = 9; break; //ricavi
|
||||
case 1: col = posizione_importi + 14; break; //attività
|
||||
case 2: col = posizione_importi + 21; break; //passività
|
||||
case 3: col = posizione_importi; break; //costi
|
||||
case 4: col = posizione_importi + 7; break; //ricavi
|
||||
default: break;
|
||||
}
|
||||
|
||||
@ -1715,7 +1742,7 @@ void TPrint_rendiconto_ca::esporta_csv_row(ostream& file_to_date, const int firs
|
||||
riga.add(da_fatturare.string(), col + 6);
|
||||
}
|
||||
//scrive in excel mode
|
||||
for (int i = 2; i < 30; i++)
|
||||
for (int i = posizione_importi; i < posizione_importi + 28; i++)
|
||||
{
|
||||
const real r = riga.get(i);
|
||||
if (!r.is_zero())
|
||||
@ -1882,6 +1909,8 @@ void TPrint_rendiconto_ca::main_loop()
|
||||
file_xls.add("rendiconto.xls");
|
||||
ofstream file_to_date(file_xls);
|
||||
|
||||
const int posizione_importi = first_level == LF_COMMESSE ? 5 : 2;
|
||||
|
||||
//intestazione primaria
|
||||
TToken_string intestazione_1(512, '\t');
|
||||
//l'intestazione primaria dipende anche dalla configurazione dei livelli!
|
||||
@ -1889,6 +1918,9 @@ void TPrint_rendiconto_ca::main_loop()
|
||||
{
|
||||
intestazione_1.add("Commessa");
|
||||
intestazione_1.add("Descr. commessa");
|
||||
intestazione_1.add("Data inizio");
|
||||
intestazione_1.add("Data fine");
|
||||
intestazione_1.add("Data proroga");
|
||||
recset_key = 2; //chiave del recordset per commessa
|
||||
}
|
||||
else //cdc-commessa
|
||||
@ -1917,8 +1949,7 @@ void TPrint_rendiconto_ca::main_loop()
|
||||
//intestazione secondaria
|
||||
TToken_string intestazione_2(512, '\t');
|
||||
//campi descrittivi iniziali vuoti (solo intestazione_1)
|
||||
for (int k = 0; k < 2; k++)
|
||||
intestazione_2.add("");
|
||||
intestazione_2.add(" ", posizione_importi - 1);
|
||||
|
||||
for (int l = 0; l < 4; l++)
|
||||
{
|
||||
@ -2002,13 +2033,8 @@ void TPrint_rendiconto_ca::main_loop()
|
||||
if (log.recordset()->items() > 0)
|
||||
log.preview();
|
||||
|
||||
if (key == K_ENTER) //stampa o anteprima
|
||||
{
|
||||
if (mask.print_mode() == 'A')
|
||||
book.preview();
|
||||
else
|
||||
book.print();
|
||||
}
|
||||
if (key == K_ENTER)
|
||||
book.print_or_preview(); //stampa il book dei report
|
||||
} //while(true)...
|
||||
|
||||
delete _msk;
|
||||
|
120
ca/ca3883.cpp
120
ca/ca3883.cpp
@ -1,5 +1,7 @@
|
||||
#include <progind.h>
|
||||
|
||||
#include "../ve/velib.h"
|
||||
|
||||
#include "calib01.h"
|
||||
#include "calib02.h"
|
||||
#include "ca3883.h"
|
||||
@ -1317,6 +1319,115 @@ void TPrint_saldana_recordset::parse_rmovana(TAssoc_array* cms, const TDate& dat
|
||||
}
|
||||
|
||||
|
||||
int TPrint_saldana_recordset::numerazioni_ordini(TString_array& num_ordini, TString_array& tip_ordini) const
|
||||
{
|
||||
//i documenti che vanno presi in cosiderazione sono quelli che generano un IMPEGNATO secondo le auree regole del..
|
||||
//..nostro invincibile Adolf!
|
||||
//quindi dapprima trova i TIPI ordine, poi le NUMERAZIONI che li contengono; alla fine passa entrambi gli array
|
||||
num_ordini.destroy();
|
||||
tip_ordini.destroy();
|
||||
|
||||
//cominciamo con i tipi
|
||||
TISAM_recordset tipi_recset("USE %TIP\nSELECT I1=3");
|
||||
for (bool ok = tipi_recset.move_first(); ok; ok = tipi_recset.move_next()) //giro sui vari tipi ordine
|
||||
{
|
||||
const TString4 tipo = tipi_recset.cursor()->curr().get("CODTAB");
|
||||
tip_ordini.add(tipo);
|
||||
}
|
||||
|
||||
//e adesso cerca le numerazioni che contengono tipi ordine
|
||||
TISAM_recordset num_recset("USE %NUM");
|
||||
for (bool ok = num_recset.move_first(); ok; ok = num_recset.move_next()) //giro sui vari tipi numerazione
|
||||
{
|
||||
const TString4 codtab = num_recset.get("CODTAB").as_string();
|
||||
const TCodice_numerazione& numerazione = cached_numerazione(codtab);
|
||||
for (int t = numerazione.ntipi_doc() - 1; t >= 0; t--)
|
||||
{
|
||||
const TString& tipo_doc = numerazione.tipo_doc(t);
|
||||
if (tip_ordini.find(tipo_doc) >= 0)
|
||||
{
|
||||
num_ordini.add(codtab);
|
||||
break;
|
||||
}
|
||||
} //for (int t = codnum..
|
||||
} //for (bool ok = num_recset...
|
||||
|
||||
return num_ordini.items();
|
||||
}
|
||||
|
||||
|
||||
//aggiorna l'arrayone cms con le righedoc non ancora contabilizzate
|
||||
void TPrint_saldana_recordset::parse_rdoc(TAssoc_array* cms, const TDate& datainiesc)
|
||||
{
|
||||
//solo le numerazioni con almeno un tipo documento ordine interessano
|
||||
TString_array num_ordini, tip_ordini;
|
||||
const int numerazioni_tipo_ordine = numerazioni_ordini(num_ordini, tip_ordini);
|
||||
|
||||
for (int n = 0; n < numerazioni_tipo_ordine; n++)
|
||||
{
|
||||
TString4 codnum = num_ordini.row(n);
|
||||
|
||||
//cerca tutte le righe documento che soddisfano i numerosi (fin troppo) parametri
|
||||
//joina DOC perchè abbiamo un decisivo filtro sul range di date
|
||||
TString query;
|
||||
query << "USE RDOC KEY 3\n";
|
||||
|
||||
query << "SELECT (BETWEEN(DOC.DATADOC, #DATAINIES, #DATACALCOLO))";
|
||||
|
||||
//filtro su cdc/cms/fasi (fatto come per saldi e rmovana; purtroppo non si può metodizzare perchè in tutti i files..
|
||||
//..i nomi dei campi sono diversi!
|
||||
switch (_tipostampa)
|
||||
{
|
||||
case 1:
|
||||
case 4:
|
||||
if (_fase.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")\n";
|
||||
break;
|
||||
case 2:
|
||||
case 8:
|
||||
if (_cdc.full())
|
||||
query << "&&(CODCOSTO=\"" << _cdc << "\")\n";
|
||||
break;
|
||||
case 3:
|
||||
if (_fase.full() || _cdc.full())
|
||||
{
|
||||
if (_fase.full() && _cdc.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")&&(CODCOSTO=\"" << _cdc << "\")\n";
|
||||
else
|
||||
{
|
||||
if (_fase.full())
|
||||
query << "&&(FASCMS=\"" << _fase << "\")\n";
|
||||
else
|
||||
query << "&&(CODCOSTO=\"" << _cdc << "\")\n";
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
query << "JOIN DOC INTO PROVV=='D' ANNO==ANNO CODNUM==CODNUM\nFROM PROVV='D' ANNO=#ANNO CODNUM=#CODNUM\nTO PROVV='D' ANNO=#ANNO CODNUM=#CODNUM";
|
||||
TISAM_recordset recset(query);
|
||||
recset.set_var("#ANNO", (long)_datacalcolo.year());
|
||||
recset.set_var("#CODNUM", codnum);
|
||||
recset.set_var("#DATAINIES", datainiesc);
|
||||
recset.set_var("#DATACALCOLO", _datacalcolo);
|
||||
|
||||
const TRecnotype recset_items = recset.items();
|
||||
|
||||
//simpatica progind per intrattenere l'utonto
|
||||
TProgind pi(recset_items, "Scansione documenti...", true, true);
|
||||
|
||||
for (bool ok = recset.move_first(); ok; ok = recset.move_next()) //giro sulle varie rdoc...
|
||||
{
|
||||
//aggiornamento progind intrattenitiva
|
||||
pi.addstatus(1);
|
||||
if (pi.iscancelled())
|
||||
break;
|
||||
}
|
||||
|
||||
} //for (int n = 0; n < numerazioni...
|
||||
|
||||
}
|
||||
|
||||
//metodo principale di riempimento degli array da mandare in stampa
|
||||
void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
|
||||
{
|
||||
@ -1339,15 +1450,16 @@ void TPrint_saldana_recordset::create_lines_to_print(const TString& query)
|
||||
{
|
||||
if ((_datacalcolo < datafinesc) && !_vitaintera)
|
||||
{
|
||||
// 2_a) calcolo dei saldi da righe movimenti analitici e quindi senza saldana
|
||||
parse_rmovana(cms, datainiesc, datafinesc);
|
||||
|
||||
// 2_b) calcolo dei saldi da documenti non ancora contabilizzati e quindi senza movana e saldana
|
||||
parse_rdoc(cms, datainiesc);
|
||||
} //if((_datacalcolo<datafinesc...
|
||||
} //if(_tipo==8)...
|
||||
|
||||
// 3)
|
||||
// calcolo dei saldi da documenti non ancora contabilizzati e quindi senza movana e saldana
|
||||
|
||||
|
||||
// 4)
|
||||
// 3)
|
||||
// merging dei 5 arrayini cms nell'arrayone _righe da mandare in stampa
|
||||
_righe.destroy();
|
||||
for (int i = 0; i < 5; i++)
|
||||
|
@ -95,16 +95,19 @@ protected:
|
||||
|
||||
void parse_rmovana(TAssoc_array* cms, const TDate& datainiesc, const TDate& datafinesc);
|
||||
void parse_saldana(TAssoc_array* cms, const TDate& datainiesc, const TDate& datafinesc, const TString& query);
|
||||
void parse_rdoc(TAssoc_array* cms, const TDate& datainiesc);
|
||||
|
||||
//per il solo ca3800
|
||||
void aggiorna_importo(TAssoc_array& riga_array, const TString& livello, const int indbil,
|
||||
const TRectype& saldana, const bool inverti = false, const bool cms_detraz = false) const;
|
||||
real calcola_avanzamento_tempo() const;
|
||||
void create_lines_to_print(const TString& query);
|
||||
long durata_commessa(const TRectype& rec_commesse, TDate& dataini, TDate& datafine) const;
|
||||
const TDate calcola_min_datacomp(const TDate& datainiesc, const TDate& datafinesc) const;
|
||||
int ricava_sezione_di_stampa(const TRectype& rec_commesse, const TDate& datainiesc, const TDate& datafinesc) const;
|
||||
TString ricava_chiave_cdc_fase(const TString& codcms, const TString& fase, const TString& cdc) const;
|
||||
int numerazioni_ordini(TString_array& num_ordini, TString_array& tip_ordini) const;
|
||||
|
||||
void create_lines_to_print(const TString& query);
|
||||
|
||||
//per il solo ca3900
|
||||
void aggiorna_importi(TAssoc_array& riga_array, const int indbil, const TRectype& saldana,
|
||||
|
Loading…
x
Reference in New Issue
Block a user