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_destroy( );
|
||||
|
||||
void config_loader(TSheet_field& sf, TConfig& config);
|
||||
void config_setter(TSheet_field& sf, TConfig& config);
|
||||
void config_loader(TSheet_field& sf, TConfig& config, TString4 tipo);
|
||||
void config_setter(TSheet_field& sf, TConfig& config, TString4 tipo);
|
||||
|
||||
TConf_Analitica() : TConfig_application(CONFIG_DITTA), _cm(NULL) { }
|
||||
virtual ~TConf_Analitica() { }
|
||||
@ -104,54 +104,62 @@ TMask* TConf_Analitica::create_mask(const TFilename& f)
|
||||
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++)
|
||||
{
|
||||
TToken_string num_doc(config.get("ND", NULL, i));
|
||||
TToken_string num_doc(config.get(tipo, NULL, i));
|
||||
if (num_doc.blank())
|
||||
break;
|
||||
TToken_string& row = sf.row(i);
|
||||
row.add(num_doc.get(0));
|
||||
row.add("");
|
||||
row.add(num_doc.get(1));
|
||||
row.add(num_doc.get(2));
|
||||
row.add(num_doc.get(3));
|
||||
if (tipo == "ND")
|
||||
{
|
||||
row.add(num_doc.get(2));
|
||||
row.add(num_doc.get(3));
|
||||
}
|
||||
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();
|
||||
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())
|
||||
break;
|
||||
config.remove("ND", i);
|
||||
config.remove(tipo, i);
|
||||
}
|
||||
|
||||
FOR_EACH_SHEET_ROW (sf, j, row)
|
||||
{
|
||||
TToken_string num_doc;
|
||||
num_doc.add(row->get(0));
|
||||
num_doc.add(row->get(2));
|
||||
num_doc.add(row->get(3));
|
||||
num_doc.add(row->get(4));
|
||||
config.set("ND", num_doc, NULL, true, j); //setta i valori nel config
|
||||
if (tipo == "ND")
|
||||
{
|
||||
num_doc.add(row->get(2));
|
||||
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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -49,11 +49,15 @@
|
||||
#define F_PDCREQ 143
|
||||
|
||||
#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_DESCR 102
|
||||
#define SN_EXCLUDE 103
|
||||
#define SN_DASTATO 104
|
||||
#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
|
||||
|
||||
SPREADSHEET F_RIGHE_NUM
|
||||
TEXT -1
|
||||
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 "Descrizione@50"
|
||||
ITEM "Da escludere"
|
||||
@ -418,13 +423,25 @@ BEGIN
|
||||
ITEM "A stato"
|
||||
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
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Riga Numerazione" -1 -1 78 8
|
||||
PAGE "Riga numerazione da escludere" -1 -1 78 8
|
||||
|
||||
STRING SN_CODNUM 4
|
||||
BEGIN
|
||||
@ -492,3 +509,48 @@ ENDPAGE
|
||||
|
||||
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
|
||||
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
|
||||
config_loader(sfield(F_PDCC), "Pdcc");
|
||||
// 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_trr(const TFilename& trr) const;
|
||||
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;
|
||||
|
||||
|
||||
@ -412,7 +414,66 @@ const TVariant& TPrint_rendiconto_ca_recordset::get(const char* column_name) con
|
||||
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)
|
||||
{
|
||||
|
||||
@ -423,64 +484,19 @@ void TPrint_rendiconto_ca_recordset::scrive_riga(const TRectype& rmovana, const
|
||||
|
||||
// il conto puo' essere analitico o contabile...
|
||||
//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)
|
||||
{
|
||||
TString conto_riclassificato; //stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||
|
||||
//prende il gruppo dalla riga rmovana in esame
|
||||
//prende il gr/co/so dalla riga rmovana in esame
|
||||
const int gruppo = atoi(rmovana.get(RMOVANA_CODCONTO).left(3));
|
||||
const int conto = atoi(rmovana.get(RMOVANA_CODCONTO).mid(3,3));
|
||||
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;
|
||||
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!!
|
||||
if ((_daconto.not_empty() && conto_riclassificato < _daconto) ||
|
||||
(_aconto.not_empty() && conto_riclassificato.compare(_aconto, _aconto.len()) > 0))
|
||||
//stringa che conterrà il conto riclassificato (se sara' trovato)
|
||||
TString conto_riclassificato = riclassifica(gruppo, conto, sottoconto, tmpcurr);
|
||||
//se il conto viene ritornato vuoto significa che non ricade nell'intervallo dei conti..
|
||||
//..riclassificati selezionato dall'utente
|
||||
if (conto_riclassificato == EMPTY_STRING)
|
||||
return;
|
||||
|
||||
} //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
|
||||
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
|
||||
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)
|
||||
//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
|
||||
TConfig& config = ca_config();
|
||||
|
||||
bool update = false;
|
||||
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
|
||||
//dei movimenti di analitica
|
||||
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();
|
||||
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);
|
||||
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
|
||||
//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++)
|
||||
if (numregca == 0)
|
||||
{
|
||||
//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];
|
||||
cont_anal.elabora(doc, 0, NULL, false, mov);
|
||||
|
||||
//estrae il tipo ed il codice clifo dal documento per metterlo nel movana che ha generato
|
||||
//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()
|
||||
//Ha trovato una riga senza testata! non puo' considerarla ma avverte l'utente del problema
|
||||
else
|
||||
|
@ -304,7 +304,7 @@ void TPrint_bilancio_cms_recordset::aggiorna_importo(TAssoc_array* riga_array,
|
||||
const char sezione = indbil == 3 ? 'D' : 'A';
|
||||
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],
|
||||
saldana.get(SALDANA_SALDOP).as_real());
|
||||
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_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],
|
||||
saldana.get(SALDANA_SALDO).as_real());
|
||||
imp += imp_saldo;
|
||||
|
||||
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
|
||||
const real saldop = saldana.get(SALDANA_SALDOP).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& fase = saldana.get(SALDANA_FASE).as_string();
|
||||
|
@ -42,15 +42,14 @@ NUMBER F_ESERCIZIO 4
|
||||
BEGIN
|
||||
PROMPT 1 3 "Esercizio "
|
||||
FLAGS "AZ"
|
||||
USE CCE
|
||||
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
|
||||
USE ESC
|
||||
INPUT CODTAB F_ESERCIZIO
|
||||
DISPLAY "Codice esercizio" CODTAB
|
||||
DISPLAY "Inizio esercizio" 104@->D0
|
||||
DISPLAY "Fine esercizio" 104@->D1
|
||||
DISPLAY "Inizio esercizio" D0
|
||||
DISPLAY "Fine esercizio" D1
|
||||
OUTPUT F_ESERCIZIO CODTAB
|
||||
OUTPUT F_INIZIO_ES 104@->D0
|
||||
OUTPUT F_FINE_ES 104@->D1
|
||||
OUTPUT F_INIZIO_ES D0
|
||||
OUTPUT F_FINE_ES D1
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user