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:
luca 2006-07-21 12:55:46 +00:00
parent 8751f7fa59
commit e71873b18c
7 changed files with 366 additions and 134 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -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