Patch level :4.0 464
Files correlati : Ricompilazione Demo : [ ] Commento :stampa rendiconto: aggiunto trattamento special docs (tipo FDR/FDE del CRPA) stampa bilancio annuale commessa: prima versione non ancora completa (aspettare next commit) stampa pagato:tolte 20 righe commentate inutili e perniciose configurazione analitica: aggiunto sheet dei documenti speciali da trattare con i guanti nel rendiconto git-svn-id: svn://10.65.10.50/trunk@14206 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
8751f7fa59
commit
e71873b18c
@ -85,8 +85,8 @@ public:
|
|||||||
virtual bool user_create( );
|
virtual bool user_create( );
|
||||||
virtual bool user_destroy( );
|
virtual bool user_destroy( );
|
||||||
|
|
||||||
void config_loader(TSheet_field& sf, TConfig& config);
|
void config_loader(TSheet_field& sf, TConfig& config, TString4 tipo);
|
||||||
void config_setter(TSheet_field& sf, TConfig& config);
|
void config_setter(TSheet_field& sf, TConfig& config, TString4 tipo);
|
||||||
|
|
||||||
TConf_Analitica() : TConfig_application(CONFIG_DITTA), _cm(NULL) { }
|
TConf_Analitica() : TConfig_application(CONFIG_DITTA), _cm(NULL) { }
|
||||||
virtual ~TConf_Analitica() { }
|
virtual ~TConf_Analitica() { }
|
||||||
@ -104,54 +104,62 @@ TMask* TConf_Analitica::create_mask(const TFilename& f)
|
|||||||
return _cm;
|
return _cm;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TConf_Analitica::config_loader(TSheet_field& sf, TConfig& config)
|
void TConf_Analitica::config_loader(TSheet_field& sf, TConfig& config, TString4 tipo)
|
||||||
{
|
{
|
||||||
for (int i = 0;;i++)
|
for (int i = 0;;i++)
|
||||||
{
|
{
|
||||||
TToken_string num_doc(config.get("ND", NULL, i));
|
TToken_string num_doc(config.get(tipo, NULL, i));
|
||||||
if (num_doc.blank())
|
if (num_doc.blank())
|
||||||
break;
|
break;
|
||||||
TToken_string& row = sf.row(i);
|
TToken_string& row = sf.row(i);
|
||||||
row.add(num_doc.get(0));
|
row.add(num_doc.get(0));
|
||||||
row.add("");
|
row.add("");
|
||||||
row.add(num_doc.get(1));
|
row.add(num_doc.get(1));
|
||||||
row.add(num_doc.get(2));
|
if (tipo == "ND")
|
||||||
row.add(num_doc.get(3));
|
{
|
||||||
|
row.add(num_doc.get(2));
|
||||||
|
row.add(num_doc.get(3));
|
||||||
|
}
|
||||||
sf.check_row(i);
|
sf.check_row(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TConf_Analitica::config_setter(TSheet_field& sf, TConfig& config)
|
void TConf_Analitica::config_setter(TSheet_field& sf, TConfig& config, TString4 tipo)
|
||||||
{
|
{
|
||||||
const int items = sf.items();
|
const int items = sf.items();
|
||||||
for (int i = items; ;i++)
|
for (int i = items; ;i++)
|
||||||
{
|
{
|
||||||
TToken_string num_doc(config.get("ND", NULL, i));
|
TToken_string num_doc(config.get(tipo, NULL, i));
|
||||||
if (num_doc.blank())
|
if (num_doc.blank())
|
||||||
break;
|
break;
|
||||||
config.remove("ND", i);
|
config.remove(tipo, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
FOR_EACH_SHEET_ROW (sf, j, row)
|
FOR_EACH_SHEET_ROW (sf, j, row)
|
||||||
{
|
{
|
||||||
TToken_string num_doc;
|
TToken_string num_doc;
|
||||||
num_doc.add(row->get(0));
|
num_doc.add(row->get(0));
|
||||||
num_doc.add(row->get(2));
|
if (tipo == "ND")
|
||||||
num_doc.add(row->get(3));
|
{
|
||||||
num_doc.add(row->get(4));
|
num_doc.add(row->get(2));
|
||||||
config.set("ND", num_doc, NULL, true, j); //setta i valori nel config
|
num_doc.add(row->get(3));
|
||||||
|
num_doc.add(row->get(4));
|
||||||
|
}
|
||||||
|
config.set(tipo, num_doc, NULL, true, j); //setta i valori nel config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TConf_Analitica::preprocess_config (TMask& mask, TConfig& config)
|
bool TConf_Analitica::preprocess_config (TMask& mask, TConfig& config)
|
||||||
{
|
{
|
||||||
config_loader(mask.sfield(F_RIGHE_NUM), config);
|
config_loader(mask.sfield(F_RIGHE_NUM), config, "ND");
|
||||||
|
config_loader(mask.sfield(F_RIGHE_FDR), config, "NF");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TConf_Analitica::postprocess_config (TMask& mask, TConfig& config)
|
bool TConf_Analitica::postprocess_config (TMask& mask, TConfig& config)
|
||||||
{
|
{
|
||||||
config_setter(mask.sfield(F_RIGHE_NUM), config);
|
config_setter(mask.sfield(F_RIGHE_NUM), config, "ND");
|
||||||
|
config_setter(mask.sfield(F_RIGHE_FDR), config, "NF");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,11 +49,15 @@
|
|||||||
#define F_PDCREQ 143
|
#define F_PDCREQ 143
|
||||||
|
|
||||||
#define F_RIGHE_NUM 170
|
#define F_RIGHE_NUM 170
|
||||||
#define F_RIGHE_CMS 171
|
#define F_RIGHE_FDR 171
|
||||||
|
|
||||||
//elementi dello sheet dei documenti
|
//elementi dello sheet dei documenti da escludere dal rendiconto
|
||||||
#define SN_CODNUM 101
|
#define SN_CODNUM 101
|
||||||
#define SN_DESCR 102
|
#define SN_DESCR 102
|
||||||
#define SN_EXCLUDE 103
|
#define SN_EXCLUDE 103
|
||||||
#define SN_DASTATO 104
|
#define SN_DASTATO 104
|
||||||
#define SN_ASTATO 105
|
#define SN_ASTATO 105
|
||||||
|
|
||||||
|
//elementi dello sheet dei documenti da considerare fatture da ricevere
|
||||||
|
#define SF_CODNUM 101
|
||||||
|
#define SF_DESCR 102
|
||||||
|
@ -408,9 +408,14 @@ ENDPAGE
|
|||||||
|
|
||||||
PAGE "Regole" -1 -1 78 20
|
PAGE "Regole" -1 -1 78 20
|
||||||
|
|
||||||
SPREADSHEET F_RIGHE_NUM
|
TEXT -1
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 1 ""
|
PROMPT 1 1 "@bNumerazioni documenti da escludere nel rendiconto"
|
||||||
|
END
|
||||||
|
|
||||||
|
SPREADSHEET F_RIGHE_NUM -1 -12
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 2 ""
|
||||||
ITEM "Numerazione"
|
ITEM "Numerazione"
|
||||||
ITEM "Descrizione@50"
|
ITEM "Descrizione@50"
|
||||||
ITEM "Da escludere"
|
ITEM "Da escludere"
|
||||||
@ -418,13 +423,25 @@ BEGIN
|
|||||||
ITEM "A stato"
|
ITEM "A stato"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
TEXT -1
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 13 "@bNumerazioni documenti per le fatture da ricevere nel rendiconto"
|
||||||
|
END
|
||||||
|
|
||||||
|
SPREADSHEET F_RIGHE_FDR -1 -1
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 14 ""
|
||||||
|
ITEM "Numerazione"
|
||||||
|
ITEM "Descrizione@50"
|
||||||
|
END
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
PAGE "Riga Numerazione" -1 -1 78 8
|
PAGE "Riga numerazione da escludere" -1 -1 78 8
|
||||||
|
|
||||||
STRING SN_CODNUM 4
|
STRING SN_CODNUM 4
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -492,3 +509,48 @@ ENDPAGE
|
|||||||
|
|
||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
|
PAGE "Riga numerazione per fatture da ricevere" -1 -1 78 8
|
||||||
|
|
||||||
|
STRING SF_CODNUM 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 1 "Codice numerazione "
|
||||||
|
USE %NUM
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
INPUT CODTAB SF_CODNUM
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
OUTPUT SF_CODNUM CODTAB
|
||||||
|
OUTPUT SF_DESCR S0
|
||||||
|
KEY 1
|
||||||
|
FLAGS "UZ"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING SF_DESCR 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 3 "Descrizione "
|
||||||
|
USE %NUM KEY 2
|
||||||
|
INPUT S0 SF_DESCR
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT SF_CODNUM
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_OK 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -13 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_DELREC 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -23 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
BUTTON DLG_CANCEL 10 2
|
||||||
|
BEGIN
|
||||||
|
PROMPT -33 -1 ""
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
||||||
|
|
||||||
|
@ -121,31 +121,6 @@ TPag_per_cms_mask::TPag_per_cms_mask()
|
|||||||
// creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi
|
// creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi
|
||||||
create_sheet(F_RIGHE);
|
create_sheet(F_RIGHE);
|
||||||
|
|
||||||
//Seconda pagina (sheets dei conti) ***per ora solo Pdcc***
|
|
||||||
//Controllo sul tipo di piano dei conti da utilizzare (Analitico/Contabile)
|
|
||||||
/* TConfig& cfg = ca_config();
|
|
||||||
const bool use_pdcc = cfg.get_bool("UsePdcc");
|
|
||||||
|
|
||||||
set(F_PIANO, use_pdcc ? "Contabile" : "Analitico");
|
|
||||||
|
|
||||||
// creazione dei campi della pagina della maschera con lo sheet dei conti
|
|
||||||
if (use_pdcc) //usa conti contabili
|
|
||||||
{
|
|
||||||
hide(-6); //nasconde i campi analitici e mostra quelli contabili
|
|
||||||
show(-5);
|
|
||||||
config_loader(sfield(F_PDCC), "Pdcc");
|
|
||||||
}
|
|
||||||
else //usa conti analitici
|
|
||||||
{
|
|
||||||
hide(-5);
|
|
||||||
show(-6);
|
|
||||||
short dlg = S_CDC2 + 100; // id del primo campo da generare (maschera di riga dello sheet)
|
|
||||||
int y = 2;
|
|
||||||
const int nfields = create_sheet_fields(F_PDCA, LF_PCONANA, y, dlg);
|
|
||||||
sfield(F_PDCA).sheet_mask().hide(-1);
|
|
||||||
|
|
||||||
config_loader(sfield(F_PDCA), "Pdca");
|
|
||||||
}*/
|
|
||||||
//carica i parametri dei conti per lo sheet dei conti contabili
|
//carica i parametri dei conti per lo sheet dei conti contabili
|
||||||
config_loader(sfield(F_PDCC), "Pdcc");
|
config_loader(sfield(F_PDCC), "Pdcc");
|
||||||
// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
|
// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
|
||||||
|
339
ca/ca3700.cpp
339
ca/ca3700.cpp
@ -255,6 +255,8 @@ protected:
|
|||||||
void crea_righe_da_rdoc(const TPrint_rendiconto_ca_mask& msk);
|
void crea_righe_da_rdoc(const TPrint_rendiconto_ca_mask& msk);
|
||||||
void crea_trr(const TFilename& trr) const;
|
void crea_trr(const TFilename& trr) const;
|
||||||
void scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc);
|
void scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc);
|
||||||
|
void scrive_riga_speciale(const TDocumento* doc, const TString_array& special_docs);
|
||||||
|
TString riclassifica(const int gruppo, const int conto, const long sottoconto, TRectype& tmpcurr);
|
||||||
real get_budget(const TString& conto, char tipo) const;
|
real get_budget(const TString& conto, char tipo) const;
|
||||||
|
|
||||||
|
|
||||||
@ -412,7 +414,66 @@ const TVariant& TPrint_rendiconto_ca_recordset::get(const char* column_name) con
|
|||||||
return TISAM_recordset::get(column_name);
|
return TISAM_recordset::get(column_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
//compila i campi del file temporaneo che sra' poi stampato
|
TString TPrint_rendiconto_ca_recordset::riclassifica(const int gruppo, const int conto,
|
||||||
|
const long sottoconto, TRectype& tmpcurr)
|
||||||
|
{
|
||||||
|
TString conto_riclassificato;
|
||||||
|
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
|
||||||
|
//alla triade gr/co/sottoc di rmovana
|
||||||
|
TRelation rel_panapdc(LF_PANAPDC);
|
||||||
|
//servono solamente i record con il gruppo = al gruppo di rmovana
|
||||||
|
TRectype da_panapdc(LF_PANAPDC);
|
||||||
|
da_panapdc.put(PANAPDC_GRUPPO, gruppo);
|
||||||
|
|
||||||
|
TString filtro;
|
||||||
|
if (_prefix.not_empty())
|
||||||
|
filtro << "(CODCONTO[1," << _prefix.len() << "]=='" << _prefix << "')";
|
||||||
|
|
||||||
|
TCursor cur_panapdc(&rel_panapdc, filtro, 2, &da_panapdc, &da_panapdc);
|
||||||
|
const long panapdc_items = cur_panapdc.items();
|
||||||
|
cur_panapdc.freeze();
|
||||||
|
if (panapdc_items > 0) //se non ci sono record con il gruppo=rmovana.gruppo ed il prefisso voluto->salta l'rmovana
|
||||||
|
{
|
||||||
|
TRectype& rec_panapdc = cur_panapdc.curr();
|
||||||
|
for (cur_panapdc = 0; cur_panapdc.pos() < panapdc_items; ++cur_panapdc)
|
||||||
|
{
|
||||||
|
int current_conto = rec_panapdc.get_int(PANAPDC_CONTO);
|
||||||
|
long current_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO);
|
||||||
|
|
||||||
|
if (current_conto == 0 && current_sottoconto == 0)
|
||||||
|
{
|
||||||
|
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||||
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
|
break; //esce dal casino e passa ai campi successivi
|
||||||
|
}
|
||||||
|
else if (conto == current_conto && current_sottoconto == 0)
|
||||||
|
{
|
||||||
|
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||||
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
|
break; //esce dal casino e passa ai campi successivi
|
||||||
|
}
|
||||||
|
else if (conto == current_conto && sottoconto == current_sottoconto)
|
||||||
|
{
|
||||||
|
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
||||||
|
tmpcurr.put("CONTO", conto_riclassificato);
|
||||||
|
break; //esce dal casino e passa ai campi successivi
|
||||||
|
}
|
||||||
|
} //for sugli elementi del cursore
|
||||||
|
} //if panapdc_items > 0
|
||||||
|
|
||||||
|
//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!!Quindi ritorna una stringa vuota che sara' il segnale..
|
||||||
|
//..per interrompere l'analisi del record corrente
|
||||||
|
if ((_daconto.not_empty() && conto_riclassificato < _daconto) ||
|
||||||
|
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
||||||
|
return EMPTY_STRING;
|
||||||
|
|
||||||
|
return conto_riclassificato;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//compila i campi del file temporaneo che sara' poi stampato
|
||||||
void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc)
|
void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const TRectype& movana, const TDocumento* doc)
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -423,64 +484,19 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
|||||||
|
|
||||||
// il conto puo' essere analitico o contabile...
|
// il conto puo' essere analitico o contabile...
|
||||||
//se è compilato l'archivio di collegamento PANAPDC
|
//se è compilato l'archivio di collegamento PANAPDC
|
||||||
//si deve usare come conto il campo codconto del panapdc!!!...
|
//si deve usare come conto il campo codconto del panapdc!!!...
|
||||||
if (_riclassificato)
|
if (_riclassificato)
|
||||||
{
|
{
|
||||||
TString conto_riclassificato; //stringa che conterrà il conto riclassificato (se sara' trovato)
|
//prende il gr/co/so dalla riga rmovana in esame
|
||||||
|
|
||||||
//prende il gruppo dalla riga rmovana in esame
|
|
||||||
const int gruppo = atoi(rmovana.get(RMOVANA_CODCONTO).left(3));
|
const int gruppo = atoi(rmovana.get(RMOVANA_CODCONTO).left(3));
|
||||||
const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3));
|
const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3));
|
||||||
const long sottoconto = atol(rmovana.get(RMOVANA_CODCONTO).mid(6,6));
|
const long sottoconto = atol(rmovana.get(RMOVANA_CODCONTO).mid(6,6));
|
||||||
|
|
||||||
//relazione e cursore su panapdc alla ricerca del conto riclassificato corrispondente
|
|
||||||
//alla triade gr/co/sottoc di rmovana
|
|
||||||
TRelation rel_panapdc(LF_PANAPDC);
|
|
||||||
//servono solamente i record con il gruppo = al gruppo di rmovana
|
|
||||||
TRectype da_panapdc(LF_PANAPDC);
|
|
||||||
da_panapdc.put(PANAPDC_GRUPPO, gruppo);
|
|
||||||
|
|
||||||
TString filtro;
|
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||||
if (_prefix.not_empty())
|
TString conto_riclassificato = riclassifica(gruppo, conto, sottoconto, tmpcurr);
|
||||||
filtro << "(CODCONTO[1," << _prefix.len() << "]=='" << _prefix << "')";
|
//se il conto viene ritornato vuoto significa che non ricade nell'intervallo dei conti..
|
||||||
|
//..riclassificati selezionato dall'utente
|
||||||
TCursor cur_panapdc(&rel_panapdc, filtro, 2, &da_panapdc, &da_panapdc);
|
if (conto_riclassificato == EMPTY_STRING)
|
||||||
const long panapdc_items = cur_panapdc.items();
|
|
||||||
cur_panapdc.freeze();
|
|
||||||
if (panapdc_items > 0) //se non ci sono record con il gruppo=rmovana.gruppo ed il prefisso voluto->salta l'rmovana
|
|
||||||
{
|
|
||||||
TRectype& rec_panapdc = cur_panapdc.curr();
|
|
||||||
for (cur_panapdc = 0; cur_panapdc.pos() < panapdc_items; ++cur_panapdc)
|
|
||||||
{
|
|
||||||
int current_conto = rec_panapdc.get_int(PANAPDC_CONTO);
|
|
||||||
long current_sottoconto = rec_panapdc.get_long(PANAPDC_SOTTOCONTO);
|
|
||||||
|
|
||||||
if (current_conto == 0 && current_sottoconto == 0)
|
|
||||||
{
|
|
||||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
|
||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
|
||||||
break; //esce dal casino e passa ai campi successivi
|
|
||||||
}
|
|
||||||
else if (conto == current_conto && current_sottoconto == 0)
|
|
||||||
{
|
|
||||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
|
||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
|
||||||
break; //esce dal casino e passa ai campi successivi
|
|
||||||
}
|
|
||||||
else if (conto == current_conto && sottoconto == current_sottoconto)
|
|
||||||
{
|
|
||||||
conto_riclassificato = rec_panapdc.get(PANAPDC_CODCONTO);
|
|
||||||
tmpcurr.put("CONTO", conto_riclassificato);
|
|
||||||
break; //esce dal casino e passa ai campi successivi
|
|
||||||
}
|
|
||||||
} //for sugli elementi del cursore
|
|
||||||
} //if panapdc_items > 0
|
|
||||||
|
|
||||||
//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 ((_daconto.not_empty() && conto_riclassificato < _daconto) ||
|
|
||||||
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} //if(_riclassificato)
|
} //if(_riclassificato)
|
||||||
@ -681,6 +697,145 @@ F=IMF*/
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//compila i campi del file temporaneo che sara' poi stampato per i documenti speciali..
|
||||||
|
//..quali le fatture da emettere e ricevere, la cui lista e' nel ca_config
|
||||||
|
void TPrint_rendiconto_ca_recordset::scrive_riga_speciale(const TDocumento* doc, const TString_array& special_docs)
|
||||||
|
{
|
||||||
|
const int rows = doc->physical_rows();
|
||||||
|
|
||||||
|
for (int i = 1; i <= rows; i++)
|
||||||
|
{
|
||||||
|
const TRiga_documento& rigadoc = (*doc)[i];
|
||||||
|
|
||||||
|
if (special_docs.find(rigadoc.get(RDOC_DACODNUM)) > 0)
|
||||||
|
{
|
||||||
|
TRectype& tmpcurr = _tmp->curr();
|
||||||
|
tmpcurr.zero();
|
||||||
|
TString8 codnum_desc;
|
||||||
|
codnum_desc.cut(0);
|
||||||
|
|
||||||
|
//prende il tipocf che gli serve un po' ovunque in seguito..
|
||||||
|
const char tipocf = doc->get_char(DOC_TIPOCF);
|
||||||
|
|
||||||
|
//se usa il piano dei conti contabile -> _piano = C..
|
||||||
|
if (_piano == "C")
|
||||||
|
{
|
||||||
|
//trova il conto senza movana e rmovana!!!
|
||||||
|
TContabilizzazione_analitica contab;
|
||||||
|
TBill conto;
|
||||||
|
if (contab.search_costo_ricavo(rigadoc, conto))
|
||||||
|
{
|
||||||
|
const int gr = conto.gruppo();
|
||||||
|
const int co = conto.conto();
|
||||||
|
const long so = conto.sottoconto();
|
||||||
|
|
||||||
|
if (_riclassificato)
|
||||||
|
{
|
||||||
|
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||||
|
TString conto_riclassificato = riclassifica(gr, co, so, tmpcurr);
|
||||||
|
if (conto_riclassificato == EMPTY_STRING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
} //if(_riclassificato)
|
||||||
|
else //...sennò si usa il conto
|
||||||
|
tmpcurr.put("CONTO", conto.string(0x8));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else //se ivece usa il piano dei conti analitico -> _piano = A...
|
||||||
|
{
|
||||||
|
TString80 conto_anal;
|
||||||
|
if (rigadoc.is_articolo())
|
||||||
|
{
|
||||||
|
const TRectype& anamag = cache().get(LF_ANAMAG, rigadoc.get(RDOC_CODARTMAG));
|
||||||
|
conto_anal = anamag.get(tipocf == 'F' ? ANAMAG_CONTOINDA : ANAMAG_CONTOINDV);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (rigadoc.is_spese() || rigadoc.is_prestazione() ||
|
||||||
|
rigadoc.is_risorsa() || rigadoc.is_attrezzatura())
|
||||||
|
{
|
||||||
|
const char tipo = rigadoc.tipo().tipo();
|
||||||
|
const TSpesa_prest spp(rigadoc.get(RDOC_CODART), tipo);
|
||||||
|
conto_anal = tipocf == 'F' ? spp.conto_analitico_acquisti() : spp.conto_analitico_vendite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tmpcurr.put("CONTO", conto_anal);
|
||||||
|
}
|
||||||
|
|
||||||
|
//comincia a riempire i record
|
||||||
|
//prima i campi che prende direttamente dal doc speciale
|
||||||
|
tmpcurr.put("CODNUM", doc->get(DOC_CODNUM));
|
||||||
|
tmpcurr.put("ANNO", doc->get(DOC_ANNO));
|
||||||
|
tmpcurr.put("NUMRD", doc->get(DOC_NDOC));
|
||||||
|
tmpcurr.put("DATA", doc->get(DOC_DATADOC));
|
||||||
|
tmpcurr.put("NUMDOCRIF", doc->get(DOC_NUMDOCRIF)); //docrif del documento
|
||||||
|
tmpcurr.put("DATADOCRIF", doc->get(DOC_DATADOCRIF)); //datadocrif del documento
|
||||||
|
tmpcurr.put("NUMREG", doc->get(DOC_NUMREGCA));
|
||||||
|
tmpcurr.put("NUMREGCG", doc->get(DOC_NUMREG)); //numero di registrazione contabile
|
||||||
|
tmpcurr.put("NRIGA", rigadoc.get(RDOC_NRIGA)); //numero riga
|
||||||
|
|
||||||
|
//procedura per ottenere i campi del documento origine di quello in esame
|
||||||
|
const int tipo_documento = doc->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 = doc->physical_rows(); //righe del doc attuale
|
||||||
|
|
||||||
|
const TRectype* babbo = rigadoc.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;
|
||||||
|
tmpcurr.put("DOCORIG", rif); //documento di riferimento (mitologico documento originale)
|
||||||
|
} //if (babbo != NULL)..
|
||||||
|
|
||||||
|
const real importo = rigadoc.imponibile();
|
||||||
|
const TTipo_documento& tipodoc = doc->tipo();
|
||||||
|
const TString& codcaus = tipodoc.causale();
|
||||||
|
if (codcaus.full())
|
||||||
|
{
|
||||||
|
TImporto imp(tipocf == 'F' ? 'D' : 'A', importo);
|
||||||
|
const int anno_caus = doc->get_int(DOC_ANNO);
|
||||||
|
TCausale caus(codcaus, anno_caus);
|
||||||
|
TipoIVA tipoiva = caus.iva();
|
||||||
|
char sezione_normale;
|
||||||
|
|
||||||
|
if (tipoiva == iva_vendite)
|
||||||
|
sezione_normale = 'A';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tipoiva == iva_acquisti)
|
||||||
|
sezione_normale = 'D';
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (caus.sezione_clifo() == 'D')
|
||||||
|
sezione_normale = 'A';
|
||||||
|
else
|
||||||
|
sezione_normale = 'D';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
imp.normalize(sezione_normale);
|
||||||
|
//i documenti speciali vanno SOLO in FATTURATO
|
||||||
|
tmpcurr.put("FATTURATO", imp.valore());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//i documenti speciali vanno SOLO in FATTURATO
|
||||||
|
tmpcurr.put("FATTURATO", importo);
|
||||||
|
}
|
||||||
|
|
||||||
|
_tmp->write();
|
||||||
|
|
||||||
|
} //if(special_docs...
|
||||||
|
} // for (inti=1;i<=rows...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//scanning delle righe dei movimenti di analitica
|
//scanning delle righe dei movimenti di analitica
|
||||||
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana()
|
void TPrint_rendiconto_ca_recordset::crea_righe_da_rmovana()
|
||||||
{
|
{
|
||||||
@ -792,11 +947,23 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
//inizialmente il filtro di scansione delle righedoc coincide con quello sulle date
|
//inizialmente il filtro di scansione delle righedoc coincide con quello sulle date
|
||||||
TString filtro = filtro_date;
|
TString filtro = filtro_date;
|
||||||
|
|
||||||
|
//Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono numerazioni relative
|
||||||
|
//..alle fatture da ricevere che devono essere trattate in modo particolare
|
||||||
|
TConfig& config = ca_config();
|
||||||
|
|
||||||
|
//TString_array contenente le numerazioni delle fatture da ricevere
|
||||||
|
TString_array num_fdr;
|
||||||
|
for (int j = 0;;j++)
|
||||||
|
{
|
||||||
|
TString codfdr(config.get("NF", NULL, j)); //scansione delle righe NF(i)=.. sul paragrafo di configurazione CA
|
||||||
|
if (codfdr.blank())
|
||||||
|
break;
|
||||||
|
num_fdr.add(codfdr);
|
||||||
|
}
|
||||||
|
|
||||||
//Filtro sulle righe documento (e testate collegate)
|
//Filtro sulle righe documento (e testate collegate)
|
||||||
//Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono numerazioni da escludere..
|
//Controlla sul file di configurazione di CA (ditta.ini,[ca]) se esistono numerazioni da escludere..
|
||||||
//..e se, per alcune numerazioni, deve tener conto dello stato del documento
|
//..e se, per alcune numerazioni, deve tener conto dello stato del documento
|
||||||
TConfig& config = ca_config();
|
|
||||||
|
|
||||||
bool update = false;
|
bool update = false;
|
||||||
for (int i = 0;;i++) //scansione delle righe ND(i)=.. sul paragrafo di configurazione CA
|
for (int i = 0;;i++) //scansione delle righe ND(i)=.. sul paragrafo di configurazione CA
|
||||||
{
|
{
|
||||||
@ -872,7 +1039,15 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
//se e' stato contabilizzato lo salta in quanto la riga documento apparira' attraverso le righe
|
//se e' stato contabilizzato lo salta in quanto la riga documento apparira' attraverso le righe
|
||||||
//dei movimenti di analitica
|
//dei movimenti di analitica
|
||||||
const long numregca = curr_doc.get_long(DOC_NUMREGCA);
|
const long numregca = curr_doc.get_long(DOC_NUMREGCA);
|
||||||
if (numregca == 0)
|
|
||||||
|
//**Modifca richiesta dal CRPA!Le righe documento che hanno DACODNUM di tipo fattura da..
|
||||||
|
//..ricevere/emettere, vanno ri-contabilizzate lo stesso anche se lo sono gia' state. Il loro..
|
||||||
|
//..importo verra' poi messo nel fatturato.
|
||||||
|
const TRectype& curr_rdoc = cur_rdoc.curr();
|
||||||
|
const TString& rdoc_dacodnum = curr_rdoc.get(RDOC_DACODNUM);
|
||||||
|
const bool is_special_doc = num_fdr.find(rdoc_dacodnum) > 0;
|
||||||
|
//documento non contabilizzato o fattura da ricevere con numerazione configurata speciale
|
||||||
|
if (numregca == 0 || is_special_doc)
|
||||||
{
|
{
|
||||||
const TString curr_key = curr_doc.build_key();
|
const TString curr_key = curr_doc.build_key();
|
||||||
if (curr_key == old_key)
|
if (curr_key == old_key)
|
||||||
@ -882,31 +1057,39 @@ void TPrint_rendiconto_ca_recordset::crea_righe_da_rdoc(const TPrint_rendiconto_
|
|||||||
|
|
||||||
TDocumento doc(curr_doc);
|
TDocumento doc(curr_doc);
|
||||||
TAnal_mov mov;
|
TAnal_mov mov;
|
||||||
cont_anal.elabora(doc, 0, NULL, false, mov);
|
|
||||||
|
|
||||||
//estrae il tipo ed il codice clifo dal documento per metterlo nel movana che ha generato
|
if (numregca == 0)
|
||||||
//con la elabora (richiesta puramente adolfica!)
|
|
||||||
TString16 key;
|
|
||||||
key << doc.get(DOC_TIPOCF) << '|' << doc.get(DOC_CODCF);
|
|
||||||
const TString clifo = cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
|
||||||
mov.put(MOVANA_DESCR, clifo);
|
|
||||||
|
|
||||||
for (int j = 1; j <= mov.rows(); j++)
|
|
||||||
{
|
{
|
||||||
//controlla che la riga in esame abbia realmente la cms/cdc/fas indicata nel filtro;
|
cont_anal.elabora(doc, 0, NULL, false, mov);
|
||||||
//procedimento necessario per evitare la stampa di righe appartenenti a docs elaborati
|
|
||||||
//perchè contenenti 1 riga con cms corretta ed altre righe con cms sbagliate
|
//estrae il tipo ed il codice clifo dal documento per metterlo nel movana che ha generato
|
||||||
const TRectype& rmov = mov.body()[j];
|
//con la elabora (richiesta puramente adolfica!)
|
||||||
|
TString16 key;
|
||||||
|
key << doc.get(DOC_TIPOCF) << '|' << doc.get(DOC_CODCF);
|
||||||
|
const TString clifo = cache().get(LF_CLIFO, key, CLI_RAGSOC);
|
||||||
|
mov.put(MOVANA_DESCR, clifo);
|
||||||
|
|
||||||
|
for (int j = 1; j <= mov.rows(); j++)
|
||||||
|
{
|
||||||
|
//controlla che la riga in esame abbia realmente la cms/cdc/fas indicata nel filtro;
|
||||||
|
//procedimento necessario per evitare la stampa di righe appartenenti a docs elaborati
|
||||||
|
//perchè contenenti 1 riga con cms corretta ed altre righe con cms sbagliate
|
||||||
|
const TRectype& rmov = mov.body()[j];
|
||||||
|
|
||||||
|
if (_codcms.not_empty() && rmov.get(RMOVANA_CODCMS) != _codcms)
|
||||||
|
continue;
|
||||||
|
if (_codcosto.not_empty() && rmov.get(RMOVANA_CODCCOSTO) != _codcosto)
|
||||||
|
continue;
|
||||||
|
if (_codfas.not_empty() && rmov.get(RMOVANA_CODFASE) != _codfas)
|
||||||
|
continue;
|
||||||
|
scrive_riga(rmov, mov, &doc); //documenti "normali"
|
||||||
|
} //for int j...
|
||||||
|
}
|
||||||
|
//righe di documento configurate come da emettere/ricevere
|
||||||
|
if (is_special_doc)
|
||||||
|
scrive_riga_speciale(&doc, num_fdr);
|
||||||
|
} //if (numregca==0...
|
||||||
|
|
||||||
if (_codcms.not_empty() && rmov.get(RMOVANA_CODCMS) != _codcms)
|
|
||||||
continue;
|
|
||||||
if (_codcosto.not_empty() && rmov.get(RMOVANA_CODCCOSTO) != _codcosto)
|
|
||||||
continue;
|
|
||||||
if (_codfas.not_empty() && rmov.get(RMOVANA_CODFASE) != _codfas)
|
|
||||||
continue;
|
|
||||||
scrive_riga(rmov, mov, &doc);
|
|
||||||
} //for int j...
|
|
||||||
} //if numregca
|
|
||||||
} //if !curr_doc.empty()
|
} //if !curr_doc.empty()
|
||||||
//Ha trovato una riga senza testata! non puo' considerarla ma avverte l'utente del problema
|
//Ha trovato una riga senza testata! non puo' considerarla ma avverte l'utente del problema
|
||||||
else
|
else
|
||||||
|
@ -304,7 +304,7 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array* riga_array,
|
|||||||
const char sezione = indbil == 3 ? 'D' : 'A';
|
const char sezione = indbil == 3 ? 'D' : 'A';
|
||||||
TImporto imp(sezione, real(*str_imp));
|
TImporto imp(sezione, real(*str_imp));
|
||||||
|
|
||||||
/****questo e' il pezzo corretto
|
//****questo e' il pezzo corretto
|
||||||
const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0],
|
const TImporto imp_saldop(saldana.get(SALDANA_SEZIONEP).as_string()[0],
|
||||||
saldana.get(SALDANA_SALDOP).as_real());
|
saldana.get(SALDANA_SALDOP).as_real());
|
||||||
const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0],
|
const TImporto imp_saldov(saldana.get(SALDANA_SEZIONEV).as_string()[0],
|
||||||
@ -312,14 +312,15 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array* riga_array,
|
|||||||
|
|
||||||
imp += imp_saldop;
|
imp += imp_saldop;
|
||||||
imp += imp_saldov;
|
imp += imp_saldov;
|
||||||
*/
|
|
||||||
//***questo serve per stampare qualcosa quando non ci sono saldop e saldov
|
/*questo serve per stampare qualcosa quando non ci sono saldop e saldov
|
||||||
|
//ricordarsi anche l'if saldop!=0 nella requery
|
||||||
const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
|
const TImporto imp_saldo(saldana.get(SALDANA_SEZIONE).as_string()[0],
|
||||||
saldana.get(SALDANA_SALDO).as_real());
|
saldana.get(SALDANA_SALDO).as_real());
|
||||||
imp += imp_saldo;
|
imp += imp_saldo;
|
||||||
|
|
||||||
imp.normalize(sezione);
|
imp.normalize(sezione);
|
||||||
*str_imp = imp.valore().string();
|
*str_imp = imp.valore().string();*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -353,7 +354,7 @@ void TPrint_bilancio_cms_recordset::requery()
|
|||||||
//solo i record di tipo Preventivo(P) o Variazione(V) devono essere considerati
|
//solo i record di tipo Preventivo(P) o Variazione(V) devono essere considerati
|
||||||
const real saldop = saldana.get(SALDANA_SALDOP).as_real();
|
const real saldop = saldana.get(SALDANA_SALDOP).as_real();
|
||||||
const real saldov = saldana.get(SALDANA_SALDOV).as_real();
|
const real saldov = saldana.get(SALDANA_SALDOV).as_real();
|
||||||
//if (saldop != ZERO || saldov != ZERO)
|
if (saldop != ZERO || saldov != ZERO)
|
||||||
{
|
{
|
||||||
const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string();
|
const TString& codcms = saldana.get(SALDANA_COMMESSA).as_string();
|
||||||
const TString& fase = saldana.get(SALDANA_FASE).as_string();
|
const TString& fase = saldana.get(SALDANA_FASE).as_string();
|
||||||
|
@ -42,15 +42,14 @@ NUMBER F_ESERCIZIO 4
|
|||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 1 3 "Esercizio "
|
PROMPT 1 3 "Esercizio "
|
||||||
FLAGS "AZ"
|
FLAGS "AZ"
|
||||||
USE CCE
|
USE ESC
|
||||||
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
|
|
||||||
INPUT CODTAB F_ESERCIZIO
|
INPUT CODTAB F_ESERCIZIO
|
||||||
DISPLAY "Codice esercizio" CODTAB
|
DISPLAY "Codice esercizio" CODTAB
|
||||||
DISPLAY "Inizio esercizio" 104@->D0
|
DISPLAY "Inizio esercizio" D0
|
||||||
DISPLAY "Fine esercizio" 104@->D1
|
DISPLAY "Fine esercizio" D1
|
||||||
OUTPUT F_ESERCIZIO CODTAB
|
OUTPUT F_ESERCIZIO CODTAB
|
||||||
OUTPUT F_INIZIO_ES 104@->D0
|
OUTPUT F_INIZIO_ES D0
|
||||||
OUTPUT F_FINE_ES 104@->D1
|
OUTPUT F_FINE_ES D1
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user