Patch level : main 07.150

Files correlati     : nessuno
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione aga 07.150 sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9871 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2001-09-19 14:52:11 +00:00
parent 63ac8f5406
commit 37178085ef
93 changed files with 5796 additions and 634 deletions

View File

@ -25,10 +25,12 @@ bool dir_equal(const char* dir1, const char* dir2)
return d1 == d2;
}
void convert_import(TRectype& rec, const char* str)
void convert_import(TRectype& rec, const char* str, bool price)
{
if (str && *str)
{
{
const int dec = TCurrency::get_euro_dec(price);
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
{
@ -36,7 +38,7 @@ void convert_import(TRectype& rec, const char* str)
if (r != ZERO)
{
r /= EURO;
r.round(2);
r.round(dec);
rec.put(tok, r);
}
}
@ -283,7 +285,8 @@ void TEuro_app::zap_table(const char * tab, bool euro)
}
*/
void TEuro_app::convert_file(int lf, const char* cnv, const char* res, record_handler rh, void* jolly, const char* filter)
void TEuro_app::convert_file(int lf, const char* cnv, const char* res, const char* pri,
record_handler rh, void* jolly, const char* filter)
{
if (!dbf_exists(lf, FALSE, -1)) // Non esiste il file da convertire
return; // per cui...
@ -304,6 +307,7 @@ void TEuro_app::convert_file(int lf, const char* cnv, const char* res, record_ha
TToken_string conv(cnv);
TToken_string azze(res);
TToken_string pric(pri);
const long items = cur.items();
cur.freeze();
@ -312,7 +316,8 @@ void TEuro_app::convert_file(int lf, const char* cnv, const char* res, record_ha
{
pi.addstatus(1);
receur = curr;
convert_import(receur, conv);
convert_import(receur, conv, FALSE);
convert_import(receur, pric, TRUE);
zero_import(receur, azze);
bool do_write = TRUE;

View File

@ -27,7 +27,7 @@ protected:
bool goto_euro(long ditta = -1);
bool copy_dir(const char* src, const char* dst) const;
void convert_file(int lf, const char* cnv, const char* res,
void convert_file(int lf, const char* cnv, const char* res = NULL, const char* pri = NULL,
record_handler rh = NULL, void* jolly = NULL, const char* filter = NULL);
void zap_file(int lf, bool euro = TRUE, const char* filter = NULL) const;
void zap_table(const char * tab, bool euro = TRUE);
@ -89,7 +89,7 @@ public:
};
bool dir_equal(const char* dir1, const char* dir2);
void convert_import(TRectype& rec, const char* str);
void convert_import(TRectype& rec, const char* str, bool price = FALSE);
void zero_import(TRectype& rec, const char* str);
void keep_import(TRectype& rec, const char* str);
const TString& build_name(int logicnum, bool euro, long firm);

View File

@ -282,7 +282,7 @@ void TEuro00_app::convert_tabcom(const TString& lit, const TString& eur)
tipi.rewrite();
}
}
convert_file(LF_TABCOM, NULL, NULL, tabcom_handler, &data);
convert_file(LF_TABCOM, NULL, NULL, NULL, tabcom_handler, &data);
}
HIDDEN void convert_ini_val(TConfig& inilit, TConfig& inieur, const char* name, int index)
@ -329,7 +329,7 @@ void TEuro00_app::convert_ditte(const TString& eur)
{
TTabcom_data data;
data._eur = eur;
convert_file(LF_NDITTE, NULL, NULL, ditte_handler, &data);
convert_file(LF_NDITTE, NULL, NULL, NULL, ditte_handler, &data);
zap_file(LF_TAB1100A, TRUE);
zap_file(LF_TAB1100B, TRUE);

View File

@ -415,7 +415,6 @@ static bool conv_condv(TRectype& rec, void* jolly)
if (!rec.get_bool("CONTROEURO"))
{
real contro_change = EURO / rec.get_real("CAMBIO");
rec.put("CAMBIO", contro_change);
rec.put("CONTROEURO", "X");
}
@ -435,7 +434,7 @@ static bool conv_rcondv(TRectype& rec, void* jolly)
const TString16 val = cache().get(LF_CONDV, key, "CODVAL");
if (is_firm_value(val))
convert_import(rec, "PREZZO");
convert_import(rec, "PREZZO|PROMAGGIO", TRUE);
return TRUE;
}
@ -566,7 +565,7 @@ KEY TEuro01_app::convert_firm(long ditta)
// prefix().set("."); // Riapre files ditta
set_firm(ditta);
convert_file(LF_TAB, NULL, NULL, tab_handler, (void*)&data);
convert_file(LF_TAB, NULL, NULL, NULL, tab_handler, (void*)&data);
if (is_firm_file(LF_CLIFO))
{
@ -616,14 +615,14 @@ KEY TEuro01_app::convert_firm(long ditta)
zap_file(LF_DOC, TRUE);
zap_file(LF_RIGHEDOC, TRUE);
convert_file(LF_ANAMAG, "COSTSTD|ULTCOS1|ULTCOS2|VALSTATUN", "");
convert_file(LF_UMART, "PREZZO", "");
convert_file(LF_ANAMAG, NULL, NULL, "COSTSTD|ULTCOS1|ULTCOS2|VALSTATUN");
convert_file(LF_UMART, NULL, NULL, "PREZZO");
// cvrt condv codval cambio
// cvrt rcondv prezzo
convert_file(LF_RCONDV, "", "", conv_rcondv);
convert_file(LF_CONDV, "", "", conv_condv);
convert_file(LF_SVRIEP, "VALORE", "");
convert_file(LF_RCONDV, NULL, NULL, NULL, conv_rcondv);
convert_file(LF_CONDV, NULL, NULL, NULL, conv_condv);
convert_file(LF_SVRIEP, "VALORE");
}
if (do_magazzino)
@ -638,12 +637,12 @@ KEY TEuro01_app::convert_firm(long ditta)
mag._fields << "VALRIM|VALACQ|VALENT|VALVEN|VALUSC|VALORDF|VALORDC|VALSCARTI|";
mag._fields << "USERVAL1|USERVAL2|USERVAL3|USERVAL4|USERVAL5|USERVAL6";
convert_file(LF_MAG, "", "ORDC|VALORDC|ORDF|VALORDF", mag_handler, (void*)&mag);
convert_file(LF_MOVMAG, "", "", movmag_handler, (void*)&mag);
convert_file(LF_RMOVMAG, "PREZZO", "", righemovmag_handler, (void*)&mag);
convert_file(LF_MAG, "", "ORDC|VALORDC|ORDF|VALORDF", NULL, mag_handler, (void*)&mag);
convert_file(LF_MOVMAG, NULL, NULL, NULL, movmag_handler, (void*)&mag);
convert_file(LF_RMOVMAG, NULL, NULL, "PREZZO", righemovmag_handler, (void*)&mag);
convert_file(LF_STOMAG, "VALORE|ULTCOS1|COSTSTD|COSTOMEDIO|PRZLIST", "");
convert_file(LF_DIST, "PREZZO", "");
convert_file(LF_STOMAG, NULL, NULL, "VALORE|ULTCOS1|ULTCOS2|COSTSTD|COSTOMEDIO|PRZLIST");
convert_file(LF_DIST, NULL, NULL, "PREZZO");
if (dbf_exists(LF_ANAMAG) && dbf_exists(LF_STOMAG) && dbf_exists(LF_MOVMAG))
{
@ -663,14 +662,14 @@ KEY TEuro01_app::convert_firm(long ditta)
d._soloaperte = solo_aperte;
d._adozione = adozione;
_schede_passate.destroy();
convert_file(LF_PERC, "FATTBIL", NULL, perc_handler, NULL, filter);
convert_file(LF_SCPERC,"COMPENSO|SPESE|IVA|TOTALE|TOTRIT|RITSOC|RITOPE|RITVER", NULL, sch_handler, (void*)&d, filter);
convert_file(LF_RVER, "RITENUTA", NULL, to_sch_handler, NULL, filter);
convert_file(LF_PERC, "FATTBIL", NULL, NULL, perc_handler, NULL, filter);
convert_file(LF_SCPERC,"COMPENSO|SPESE|IVA|TOTALE|TOTRIT|RITSOC|RITOPE|RITVER", NULL, NULL, sch_handler, (void*)&d, filter);
convert_file(LF_RVER, "RITENUTA", NULL, NULL, to_sch_handler, NULL, filter);
TString flds;
flds << "IMPONIBILE|RITENUTA|COMPENSO|NETTO|SPESA|CTSSNPERC|CTSSNCOMP|RITLORDA|CONTROBB|DETFAMIL|DETLAVDIP|TOTDET|";
flds << "IMPCPA|SOMREGCONV|UTPAGATI|UTSPETT|RITUTPAG|RITUTSPE|SOMNSRIT|AMMLORDO|QUOTAPROV|IMPNETTO|COMNETTO";
convert_file(LF_RPAG, flds, NULL, to_sch_handler, NULL, filter);
convert_file(LF_RPAG, flds, NULL, NULL, to_sch_handler, NULL, filter);
}
if (adozione.ok()) // Dummy test
{
@ -725,7 +724,7 @@ void TEuro01_app::convert_saldi(const TDate& adozione, const TBill& arrotino)
TSaldi_data sld;
sld._annoes = esc.date2prevesc(adozione);
sld._arrot = arrotino;
convert_file(LF_SALDI, NULL, NULL, saldi_handler, &sld);
convert_file(LF_SALDI, NULL, NULL, NULL, saldi_handler, &sld);
TImporto& saldo = sld._sld;
saldo.valore().round(-2);
@ -887,9 +886,9 @@ void TEuro01_app::convert_partite()
TSaldac_data data;
convert_file(LF_PARTITE, "IMPTOTDOC|IMPORTO|IMPOSTA|SPESE|RITENUTE|DIFFCAM", PART_NREG, partite_handler, &data);
convert_file(LF_SCADENZE, "IMPORTO", NULL, scadenze_handler, &data);
convert_file(LF_PAGSCA, "IMPORTO|RITENUTE|DIFFCAM", NULL, pagamenti_handler, &data);
convert_file(LF_PARTITE, "IMPTOTDOC|IMPORTO|IMPOSTA|SPESE|RITENUTE|DIFFCAM", PART_NREG, NULL, partite_handler, &data);
convert_file(LF_SCADENZE, "IMPORTO", NULL, NULL, scadenze_handler, &data);
convert_file(LF_PAGSCA, "IMPORTO|RITENUTE|DIFFCAM", NULL, NULL, pagamenti_handler, &data);
}
///////////////////////////////////////////////////////////

View File

@ -461,7 +461,7 @@ void TEuro02_app::main_loop()
TEsercizi_contabili esc;
sd._anno = esc.date2esc(adozione);
convert_file(LF_SALDI, "", "", saldi_handler, &sd);
convert_file(LF_SALDI, NULL, NULL, NULL, saldi_handler, &sd);
TBill contro;
contro.get(msk, F20_CONTROG_C, F20_CONTROC_C, F20_CONTROS_C);

View File

@ -270,8 +270,8 @@ void TEuro04_app::copy_docs(TEuro40_mask & mask)
docs2convert.add(codnum, d);
}
}
convert_file(LF_DOC, "", "", doc_handler, &docs2convert);
convert_file(LF_RIGHEDOC, "", "", rdoc_handler, &docs2convert);
convert_file(LF_DOC, NULL, NULL, NULL, doc_handler, &docs2convert);
convert_file(LF_RIGHEDOC, NULL, NULL, NULL, rdoc_handler, &docs2convert);
}
void TEuro04_app::main_loop()

View File

@ -104,13 +104,13 @@ void TEuro05_app::convert_last_sto_eser(int eser)
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
const TString fields("VALORE|ULTCOS1|COSTSTD|COSTOMEDIO|PRZLIST");
const char* prices = "VALORE|ULTCOS1|ULTCOS2|COSTSTD|COSTOMEDIO|PRZLIST";
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, fields);
convert_import(receur, prices, TRUE);
fileur.write();
}
}

View File

@ -143,7 +143,7 @@ void TApertura_saldi_euro::convert_saldi(const TDate& adozione, const TBill& arr
TSaldi_data sld;
sld._annoes = esc.date2prevesc(adozione);
sld._arrot = arrotino;
convert_file(LF_SALDI, NULL, NULL, saldi_handler, &sld);
convert_file(LF_SALDI, NULL, NULL, NULL, saldi_handler, &sld);
TImporto& saldo = sld._sld;
saldo.valore().round(-2);

View File

@ -116,7 +116,8 @@ Item_02 = "Conversione ditte in Euro", "baeur -1"
Item_03 = "Chiusura/Apertura in Euro", "baeur -3", "F"
Item_04 = "Apertura magazzino", "baeur -5", "F"
Item_05 = "Stampe magazzino",[PRASSI_884], ""
Item_06 = "Manutenzione",[PRASSI_885], ""
Item_06 = "Conversione cespiti",[PRASSI_885], ""
Item_07 = "Manutenzione",[PRASSI_886], ""
[PRASSI_884]
Caption = "Stampe magazzino in Euro"
@ -126,6 +127,13 @@ Item_01 = "Stampa inventario", "baeur -7"
Item_02 = "Stampa storico", "baeur -8"
[PRASSI_885]
Caption = "Conversione cespiti"
Picture = <ce00.bmp>
Module = 11
Item_01 = "Conversione cespiti", "ceeur -0"
Item_02 = "Controllo arrotondamenti", "ceeur -1"
[PRASSI_886]
Caption = "Manutenzione"
Picture = <ba00.bmp>
Module = 0

View File

@ -13,21 +13,22 @@ BEGIN
PROMPT 1 1 "@bCodice Nomenclatura"
END
STRING NOC_CODICE1 4
NUMBER NOC_CODICE1 4
BEGIN
PROMPT 2 3 "Codice "
FLAGS "U"
FLAGS "Z"
USE %NOC
INPUT CODTAB[1,4] NOC_CODICE1
INPUT CODTAB[5,6] NOC_CODICE2
INPUT CODTAB[6,8] NOC_CODICE3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT NOC_CODICE1 CODTAB[1,4]
OUTPUT NOC_CODICE2 CODTAB[5,6]
OUTPUT NOC_CODICE3 CODTAB[7,8]
OUTPUT NOC_DESCR S0
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
KEY 1
@ -37,17 +38,17 @@ END
STRING NOC_CODICE2 2
BEGIN
PROMPT 21 3 ""
FLAGS "U"
FLAGS "Z"
COPY ALL NOC_CODICE1
FIELD CODTAB[5,6]
KEY 1
VALIDATE REQIF_FUNC 1 NOC_CODICE3
END
STRING NOC_CODICE3 2
NUMBER NOC_CODICE3 2
BEGIN
PROMPT 26 3 ""
FLAGS "U"
FLAGS "Z"
COPY ALL NOC_CODICE1
FIELD CODTAB[7,8]
KEY 1
@ -59,7 +60,9 @@ BEGIN
USE %NOC KEY 2
INPUT S0 NOC_DESCR
DISPLAY "Descrizione@60" S0
DISPLAY "Codice@8" CODTAB
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
COPY OUTPUT NOC_CODICE1
CHECKTYPE REQUIRED
FIELD S0

View File

@ -7,5 +7,5 @@ Item_02 = "Gestione cespiti", "cesp -t /cPRAWIN.INI", ""
Item_03 = "Gestione percipienti", <77prassi.men>
Item_04 = "Contabilita analitica", <procomm.men>
Item_05 = "Bilanci e Analisi", <abprassi.men>
Item_06 = "Elenchi INTRA comunitari", <inprassi.men>
Item_06 = "Elenchi Intracomunitari", <inprassi.men>

View File

@ -122,37 +122,72 @@ bool TCAC_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
// TCCE_mask
///////////////////////////////////////////////////////////
class TCCE_mask : public TAutomask
{
protected:
bool is_leap(int year) const;
real calc_coeff(const TDate& ies, const TDate& fes) const;
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TCCE_mask() : TAutomask("cetbcce") { }
virtual ~TCCE_mask() { }
};
bool TCCE_mask::is_leap(int year) const
{
TDate d(28,2,year);
++d;
return d.day() == 29;
}
real TCCE_mask::calc_coeff(const TDate& ies, const TDate& fes) const
{
const real tot_es = fes - ies + 1;
real max_es = 365;
const int im = ies.month();
const int iy = ies.year();
const int fm = fes.month();
const int fy = fes.year();
if ((im < 3 && (fm >= 3 || fy > iy) && is_leap(iy)) ||
(fm >= 3 && (im < 3 || iy < fy) && is_leap(fy)))
max_es += 1.0;
real coeff = tot_es / max_es;
coeff.round(9);
return coeff;
}
bool TCCE_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case DLG_ATTIV:
if (e == fe_button)
{
TString app("ce0 -0 CCB");
TMailbox mail;
TString body; body.format("%d|%d=%s|%d=%s|%d=%s", F_CODSP_CCB, F_CODESER_CCB, (const char *)get(F_CODESER),
F_DATAINI_CCB, (const char *)get(F_DATAINI),
F_DATAFINE_CCB, (const char *)get(F_DATAFINE));
case DLG_ATTIV:
if (e == fe_button)
{
TString app("ce0 -0 CCB");
TMailbox mail;
TString body; body.format("%d|%d=%s|%d=%s|%d=%s", F_CODSP_CCB, F_CODESER_CCB, (const char *)get(F_CODESER),
F_DATAINI_CCB, (const char *)get(F_DATAINI),
F_DATAFINE_CCB, (const char *)get(F_DATAFINE));
TMessage msg(app, MSG_FS, body);
mail.send(msg);
TExternal_app a(app);
a.run();
}
default:
TMessage msg(app, MSG_FS, body);
mail.send(msg);
TExternal_app a(app);
a.run();
}
break;
case F_DURATA:
if (e == fe_init && !field(F_CODESER).empty())
{
const TDate ies = get(F_DATAINI);
const TDate fes = get(F_DATAFINE);
set(F_DURATA, fes-ies+1);
set(F_COEFF_DURATA, calc_coeff(ies, fes));
}
break;
default:
break;
}
return TRUE;
}

View File

@ -1,7 +1,7 @@
// campi maschera ce0400a.msk
#define F_DATACONS 101
#define F_ANNOTUIR 102
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCORR 103
#define F_DATAINIZIO 104
#define F_DATAFINE 105
@ -9,3 +9,49 @@
#define F_SPECIECORR 107
#define F_D_GRUPPOCORR 108
#define F_D_SPECIECORR 109
#define F_DATACONS 110
#define F_ANNOTUIR 111
#define F_PLUSMINUS 201
#define F_GR1 211
#define F_CO1 212
#define F_SO1 213
#define F_DE1 214
#define F_GR2 221
#define F_CO2 222
#define F_SO2 223
#define F_DE2 224
#define F_GR3 231
#define F_CO3 232
#define F_SO3 233
#define F_DE3 234
#define F_GR4 241
#define F_CO4 242
#define F_SO4 243
#define F_DE4 244
#define F_GR5 251
#define F_CO5 252
#define F_SO5 253
#define F_DE5 254
#define F_GR6 261
#define F_CO6 262
#define F_SO6 263
#define F_DE6 264
#define F_CA1 280
#define F_DC1 281
#define F_CA2 282
#define F_DC2 283
#define F_CA3 284
#define F_DC3 285
#define F_CA4 286
#define F_DC4 287
#define F_CA5 288
#define F_DC5 289

View File

@ -16,31 +16,31 @@ ENDPAGE
PAGE "Parametri Ditta" -1 -1 78 10
DATE F_DATACONS
GROUPBOX DLG_NULL 76 6
BEGIN
PROMPT 1 1 "Data conseguimento primi ricavi "
FIELD CADTR
END
RADIOBUTTON F_ANNOTUIR 30
BEGIN
FLAGS "Z"
PROMPT 1 3 "Anno inizio applicazione TUIR"
ITEM "0|1988"
ITEM "1|1989"
FIELD CATSU
END
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 6 "Esercizio/Attivita' corrente"
PROMPT 1 1 "@bEsercizio/Attivita' corrente"
FLAGS "R"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
FLAGS "DFG"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
STRING F_RAGSOC 50
BEGIN
PROMPT 25 2 ""
FLAGS "D"
END
NUMBER F_ESERCORR 4
BEGIN
PROMPT 2 7 "Esercizio "
PROMPT 2 3 "Esercizio "
FIELD CODESCORR
FLAGS "Z"
USE CCE
@ -57,19 +57,19 @@ END
DATE F_DATAINIZIO
BEGIN
PROMPT 20 7 "Data inizio "
PROMPT 20 3 "Data inizio "
FLAGS "D"
END
DATE F_DATAFINE
BEGIN
PROMPT 45 7 "Data fine "
PROMPT 45 3 "Data fine "
FLAGS "D"
END
NUMBER F_GRUPPOCORR 2
BEGIN
PROMPT 2 8 "Gruppo "
PROMPT 2 4 "Gruppo "
FIELD GRUPPOCORR
FLAGS "Z"
USE CCB KEY 1
@ -90,22 +90,432 @@ END
STRING F_D_GRUPPOCORR 60 58
BEGIN
PROMPT 17 8 ""
FLAGS "D"
PROMPT 17 4 ""
FLAGS "D"
END
STRING F_SPECIECORR 4
BEGIN
PROMPT 2 9 "Specie "
FIELD SPECIECORR
FLAGS "_"
COPY ALL F_GRUPPOCORR
CHECKTYPE NORMAL
PROMPT 2 5 "Specie "
FIELD SPECIECORR
FLAGS "_"
COPY ALL F_GRUPPOCORR
CHECKTYPE NORMAL
END
STRING F_D_SPECIECORR 60 58
BEGIN
PROMPT 17 9 ""
FLAGS "D"
PROMPT 17 5 ""
FLAGS "D"
END
DATE F_DATACONS
BEGIN
PROMPT 1 7 "Data conseguimento primi ricavi "
FIELD CADTR
END
TEXT DLG_NULL
BEGIN
PROMPT 1 8 "Anno inizio applicazione TUIR"
END
RADIOBUTTON F_ANNOTUIR 30
BEGIN
FLAGS "Z"
PROMPT 33 7 ""
ITEM "1988|1988"
ITEM "1989|1989"
FIELD CATSU
END
ENDPAGE
PAGE "Collegamento Contabilità" -1 -1 78 10
BOOLEAN F_PLUSMINUS
BEGIN
PROMPT 1 1 "Generazione movimenti di plus/minusvalenza"
END
GROUP DLG_NULL 78 8
BEGIN
PROMPT 1 2 "@bConti di collegamento"
END
NUMBER F_GR1 3
BEGIN
PROMPT 2 3 "Eliminazione cespiti "
CHECKTYPE NORMAL
END
NUMBER F_CO1 3
BEGIN
PROMPT 30 3 ""
CHECKTYPE NORMAL
END
NUMBER F_SO1 6
BEGIN
PROMPT 35 3 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR1
INPUT CONTO F_CO1
INPUT SOTTOCONTO F_SO1
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR1 GRUPPO
OUTPUT F_CO1 CONTO
OUTPUT F_SO1 SOTTOCONTO
OUTPUT F_DE1 DESCR
CHECKTYPE NORMAL
END
STRING F_DE1 50 30
BEGIN
PROMPT 45 3 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE1
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO1
END
NUMBER F_GR2 3
BEGIN
PROMPT 2 4 "Differenze su quote "
CHECKTYPE NORMAL
END
NUMBER F_CO2 3
BEGIN
PROMPT 30 4 ""
CHECKTYPE NORMAL
END
NUMBER F_SO2 6
BEGIN
PROMPT 35 4 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR2
INPUT CONTO F_CO2
INPUT SOTTOCONTO F_SO2
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR2 GRUPPO
OUTPUT F_CO2 CONTO
OUTPUT F_SO2 SOTTOCONTO
OUTPUT F_DE2 DESCR
CHECKTYPE NORMAL
END
STRING F_DE2 50 30
BEGIN
PROMPT 45 4 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE2
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO2
END
NUMBER F_GR3 3
BEGIN
PROMPT 2 5 "Differenze su fondi "
CHECKTYPE NORMAL
END
NUMBER F_CO3 3
BEGIN
PROMPT 30 5 ""
CHECKTYPE NORMAL
END
NUMBER F_SO3 6
BEGIN
PROMPT 35 5 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR3
INPUT CONTO F_CO3
INPUT SOTTOCONTO F_SO3
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR3 GRUPPO
OUTPUT F_CO3 CONTO
OUTPUT F_SO3 SOTTOCONTO
OUTPUT F_DE3 DESCR
CHECKTYPE NORMAL
END
STRING F_DE3 50 30
BEGIN
PROMPT 45 5 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE3
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO3
END
NUMBER F_GR4 3
BEGIN
PROMPT 2 6 "Differenze su plusval. "
CHECKTYPE NORMAL
END
NUMBER F_CO4 3
BEGIN
PROMPT 30 6 ""
CHECKTYPE NORMAL
END
NUMBER F_SO4 6
BEGIN
PROMPT 35 6 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR4
INPUT CONTO F_CO4
INPUT SOTTOCONTO F_SO4
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR4 GRUPPO
OUTPUT F_CO4 CONTO
OUTPUT F_SO4 SOTTOCONTO
OUTPUT F_DE4 DESCR
CHECKTYPE NORMAL
END
STRING F_DE4 50 30
BEGIN
PROMPT 45 6 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE4
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO4
END
NUMBER F_GR5 3
BEGIN
PROMPT 2 7 "Differenze su minusval."
CHECKTYPE NORMAL
END
NUMBER F_CO5 3
BEGIN
PROMPT 30 7 ""
CHECKTYPE NORMAL
END
NUMBER F_SO5 6
BEGIN
PROMPT 35 7 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR5
INPUT CONTO F_CO5
INPUT SOTTOCONTO F_SO5
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR5 GRUPPO
OUTPUT F_CO5 CONTO
OUTPUT F_SO5 SOTTOCONTO
OUTPUT F_DE5 DESCR
CHECKTYPE NORMAL
END
STRING F_DE5 50 30
BEGIN
PROMPT 45 7 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE5
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO5
END
NUMBER F_GR6 3
BEGIN
PROMPT 2 8 "Vendita cespiti "
CHECKTYPE NORMAL
END
NUMBER F_CO6 3
BEGIN
PROMPT 30 8 ""
CHECKTYPE NORMAL
END
NUMBER F_SO6 6
BEGIN
PROMPT 35 8 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO F_GR6
INPUT CONTO F_CO6
INPUT SOTTOCONTO F_SO6
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GR6 GRUPPO
OUTPUT F_CO6 CONTO
OUTPUT F_SO6 SOTTOCONTO
OUTPUT F_DE6 DESCR
CHECKTYPE NORMAL
END
STRING F_DE6 50 30
BEGIN
PROMPT 45 8 ""
USE LF_PCON KEY 2 SELECT SOTTOCONTO!=""
INPUT DESCR F_DE6
DISPLAY "Descrizione@50" DESCR
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
COPY OUTPUT F_SO6
END
GROUP DLG_NULL 78 7
BEGIN
PROMPT 1 10 "@bCausali di collegamento"
END
STRING F_CA1 3
BEGIN
PROMPT 2 11 "Eliminazione cespiti "
USE LF_CAUSALI
INPUT CODCAUS F_CA1
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CA1 CODCAUS
OUTPUT F_DC1 DESCR
CHECKTYPE NORMAL
END
STRING F_DC1 50 30
BEGIN
PROMPT 45 11 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DC1
DISPLAY "Descrizione@60" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_CA1
CHECKTYPE NORMAL
END
STRING F_CA2 3
BEGIN
PROMPT 2 12 "Rilevazione differenze "
USE LF_CAUSALI
INPUT CODCAUS F_CA2
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CA2 CODCAUS
OUTPUT F_DC2 DESCR
CHECKTYPE NORMAL
END
STRING F_DC2 50 30
BEGIN
PROMPT 45 12 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DC2
DISPLAY "Descrizione@60" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_CA2
CHECKTYPE NORMAL
END
STRING F_CA3 3
BEGIN
PROMPT 2 13 "Rilevazione quote ammortamento "
USE LF_CAUSALI
INPUT CODCAUS F_CA3
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CA3 CODCAUS
OUTPUT F_DC3 DESCR
CHECKTYPE NORMAL
END
STRING F_DC3 50 30
BEGIN
PROMPT 45 13 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DC3
DISPLAY "Descrizione@60" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_CA3
CHECKTYPE NORMAL
END
STRING F_CA4 3
BEGIN
PROMPT 2 14 "Rilevazione quote plusvalenze "
USE LF_CAUSALI
INPUT CODCAUS F_CA4
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CA4 CODCAUS
OUTPUT F_DC4 DESCR
CHECKTYPE NORMAL
END
STRING F_DC4 50 30
BEGIN
PROMPT 45 14 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DC4
DISPLAY "Descrizione@60" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_CA4
CHECKTYPE NORMAL
END
STRING F_CA5 3
BEGIN
PROMPT 2 15 "Rilevazione quote minusvalenze "
USE LF_CAUSALI
INPUT CODCAUS F_CA5
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_CA5 CODCAUS
OUTPUT F_DC5 DESCR
CHECKTYPE NORMAL
END
STRING F_DC5 50 30
BEGIN
PROMPT 45 15 ""
USE LF_CAUSALI KEY 2
INPUT DESCR F_DC5
DISPLAY "Descrizione@60" DESCR
DISPLAY "Codice" CODCAUS
COPY OUTPUT F_CA5
CHECKTYPE NORMAL
END
ENDPAGE
ENDMASK

View File

@ -59,10 +59,18 @@ void TQuery_mask::on_search_event(TOperable_field& o)
TRelation rel(LF_CESPI);
TString filter;
const TEdit_field& imp = efield(F_IMPIANTO);
if (imp.active() && !imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
TString filter;
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TString& imp = get(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp << '"';
}
else // Filtro per attività
{
filter << "STR(" << CESPI_CODCGRA << "=" << get(F_GRUPPO) << ')';
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
TSorted_cursor cur(&rel, order, filter);
TCursor_sheet sht(&cur, fields, "Cespiti", header, 0, 1);
@ -114,13 +122,13 @@ void TQuery_mask::set_cespi_filter()
TString filter;
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TEdit_field& imp = efield(F_IMPIANTO);
const TString& imp = get(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
filter << CESPI_CODIMP << "=\"" << imp << '"';
}
else // Filtro per attività
{
filter << '(' << CESPI_CODCGRA << "=\"" << get(F_GRUPPO) << "\")";
filter << "STR(" << CESPI_CODCGRA << "=" << get(F_GRUPPO) << ')';
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
efield(F_IDCESPITE).browse()->set_filter(filter);
@ -167,7 +175,7 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (fine_validita > 0 && fine_validita < get_int(F_ESERCIZIO))
return error_box("Categoria scaduta nell'esercizio %d", fine_validita);
}
if (e == fe_init || e == fe_modify)
if (e == fe_init || e == fe_modify || e == fe_button)
{
const bool bollati = stato_attivita() == 3;
enable(DLG_NEWREC, !bollati && !o.empty() && !field(F_SPECIE).empty());
@ -238,7 +246,7 @@ bool TEdit_mask::one_compiled(const short* f) const
if (!field(f[i]).empty())
break;
}
return i >= 0;
return f[i] > 0;
}
TCurrency TEdit_mask::sum_fields(const short* f) const
@ -324,10 +332,10 @@ bool TEdit_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
const TRectype& cac = dc.categoria(0, NULL, get_int(F_CATEGORIA));
const TDate iniz = cac.get("D0");
if (iniz.ok() && dtfunz < iniz)
return error_box("La data è precedente all'inizio della validità della categoria");
return error_box("La data è precedente all'inizio validità della categoria");
const TDate fine = cac.get("D1");
if (fine.ok() && dtfunz > fine)
return error_box("La data è succesiva alla fine della validità della categoria");
return error_box("La data è successiva alla fine validità della categoria");
if (dtfunz.year() >= dc.anno_tuir())
{
set(F_TUIR, "X");
@ -831,7 +839,7 @@ int TAnacespi::write(const TMask& m)
switch (_emask->tipo_cespite())
{
case tc_immateriale:
if (cac.get_int("I0") == 2) // Percentuali
if (cac.get_int("I1") == 2) // Percentuali
{
curr.put(CESPI_PIMM, cac.get("R13"));
curr.put(CESPI_VINCOLO, 1);
@ -853,25 +861,24 @@ int TAnacespi::write(const TMask& m)
{
TDate dt = m.get(F_DTFUNZ);
if (!dt.ok())
dt = m.get_date(F_INIZIO_ES);
if (dt.year() < 1989)
curr.put(CESPI_PMAT, cac.get("R12")); // % beni mat D.M. 29/10/74
else
curr.put(CESPI_PMAT, cac.get("R11")); // % beni mat D.M. 31/12/88
dt = m.get_date(F_INIZIO_ES);
// % beni mat D.M. 29/10/74 oppure D.M. 31/12/88
const TString& pmat = cac.get(dt.year() < 1989 ? "R12" : "R11");
curr.put(CESPI_PMAT, pmat);
}
break;
}
const int cat = m.get_int(F_CATEGORIA);
if (cat >= 41)
if (cat > 40)
{
curr.zero(CESPI_CODCGR);
curr.zero(CESPI_CODSP);
}
else
{
curr.put(CESPI_CODCGR, curr.get(CESPI_CODCGRA));
curr.put(CESPI_CODSP, curr.get(CESPI_CODSPA));
curr.put(CESPI_CODCGR, m.get(F_GRUPPO));
curr.put(CESPI_CODSP, m.get(F_SPECIE));
}
int err = TRelation_application::write(m);
@ -894,7 +901,7 @@ bool TAnacespi::remove()
{
const int staat = _qmask->stato_attivita();
bool yes = FALSE;
if (staat != 1)
if (staat == 3)
yes = yesno_box("ATTENZIONE: il cespite è già stato stampato su bollato.\n"
"Si desidera confermare l'elimininazione?");
else
@ -916,7 +923,7 @@ bool TAnacespi::remove()
bool TAnacespi::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, LF_MOVCE, LF_AMMMV, 0);
open_files(LF_TABCOM, LF_TAB, LF_CESPI, LF_SALCE, LF_AMMCE, LF_MOVCE, LF_MOVAM, LF_AMMMV, 0);
_cespiti = NULL;
_rel_year = 0;

View File

@ -24,6 +24,7 @@ class TConversione_ce_mask : public TAutomask
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool already_converted(long ditta);
public:
TCursor_sheet& sheet() {return *_sheet;}
@ -70,6 +71,26 @@ bool TConversione_ce_mask::on_field_event(TOperable_field& o, TField_event e, lo
return TRUE;
}
bool TConversione_ce_mask::already_converted(long ditta)
{
prefix().set_codditta(ditta);
TTable cce("CCE");
int err = cce.first();
if (err != NOERR)
return FALSE;
TFilename ditce = prefix().get_studio();
ditce.add("cesp/ditce");
TExternisamfile oldfile(ditce, FALSE, FALSE);
for (err = oldfile.first(); err == NOERR; err = oldfile.next())
{
long d = oldfile.get_long("CACDD");
if (d == ditta)
return TRUE;
}
return FALSE;
}
void TConversione_ce_mask::lista_ditte(TAssoc_array& ditte)
{
ditte.destroy();
@ -77,8 +98,14 @@ void TConversione_ce_mask::lista_ditte(TAssoc_array& ditte)
{
if (sheet().checked(i))
{
const char* codditta = sheet().row(i).get(1);
ditte.add(codditta);
const TString16 codditta = sheet().row(i).get(1);
bool add = TRUE;
if (already_converted(atol(codditta)))
add = yesno_box("La ditta %s potrebbe già essere stata converita:\n"
"Si desidera continuare ugualmente, azzerando gli archivi attuali?",
(const char*)codditta);
if (add)
ditte.add(codditta);
}
}
}
@ -387,35 +414,35 @@ void TConversione_cespiti::zap_table(const char* tab) const
int TConversione_cespiti::conv_tab(const TFilename& ofname, const char* tab)
{
long oldditta = -1;
long ditta;
long oldditta = -1, ditta = -1;
TExternisamfile oldfile(ofname, FALSE, FALSE);
TTable* newfile = NULL;
TConfig config("ce0900.ini", tab);
TAssoc_array& fieldlist = config.list_variables();
TString16 campoditta = (TString&) config.get(CAMPODITTA);
const TString16 campoditta = config.get(CAMPODITTA);
TString fieldname, fieldvalue;
TAssoc_array converted;
const bool tabella_comune = (tab[0] == '%');
TString80 message;
message.format("Conversione tabella %s", (const char*) ofname);
TProgind pi(oldfile.eod(),message, FALSE, TRUE);
message.format("Conversione tabella %s", (const char*)ofname);
TProgind pi(oldfile.eod(), message, FALSE, TRUE);
bool to_convert = TRUE;
for (int err = oldfile.first(); err == NOERR; err = oldfile.next())
{
pi.addstatus(1);
if (tabella_comune)
ditta = -1;
else
if (!tabella_comune)
ditta = oldfile.get_long(campoditta);
// mi posiziono sulla ditta indicata
// i record sono ordinati per ditta!
if (oldditta != ditta)
{
oldditta = ditta;
if (daconvertire(ditta))
to_convert = daconvertire(ditta);
if (to_convert)
{
if (newfile)
delete newfile;
@ -437,7 +464,10 @@ int TConversione_cespiti::conv_tab(const TFilename& ofname, const char* tab)
continue;
}
}
// creo nuovo record
if (!to_convert)
continue;
// creo nuovo record (Serve per tabelle comuni!)
if (newfile == NULL)
newfile = new TTable(tab);
TRectype newrec = newfile->curr();

View File

@ -9,6 +9,7 @@ int main(int argc,char** argv)
{
case 1 : ce1200(argc,argv); break; // Forzatura ammortamento su movimenti
case 2 : ce1300(argc,argv); break; // Scelta ammortamento per cespite
case 3 : ce1400(argc,argv); break; // Scelta ammortamento per categoria
case 4 : ce1500(argc,argv); break; // Gestione movimenti
default: ce1100(argc,argv); break; // Forzatura ammortamento su cespiti
}

View File

@ -4,6 +4,7 @@
int ce1100(int argc, char* argv[]);
int ce1200(int argc, char* argv[]);
int ce1300(int argc, char* argv[]);
int ce1400(int argc, char* argv[]);
int ce1500(int argc, char* argv[]);
#endif // __CE1_H

View File

@ -67,8 +67,17 @@ void TQuery_mask::on_search_event(TOperable_field& o)
TRelation rel(LF_CESPI);
TString filter;
if (!field(F_IMPIANTO).empty())
filter << CESPI_CODIMP << "==" << get(F_IMPIANTO);
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TString& imp = get(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp << '"';
}
else // Filtro per attività
{
filter << "STR(" << CESPI_CODCGRA << "=" << get(F_GRUPPO) << ')';
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
TSorted_cursor cur(&rel, order, filter);
TCursor_sheet sht(&cur, fields, "Cespiti", header, 0, 1);
@ -113,7 +122,7 @@ void TQuery_mask::calc_res(bool prec)
TCespite ces (get(F_IDCESPITE));
// calcolo ammortamento sul cespite (per sit. fiscale(1) e civilistica(2))
TDate fine_es = get(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
ces.calc_amm(1, fine_es);
const TRectype& salce2=ces.sal_pro(); //rectype giá di "tipo fiscale"
const TRectype& ammce2=ces.amm_pro();
// determinazione del residuo fiscale
@ -123,7 +132,7 @@ void TQuery_mask::calc_res(bool prec)
if (!prec)
_residuof -= ammce2.get_real(AMMCE_QNOR)+ammce2.get_real(AMMCE_QACC)+ammce2.get_real(AMMCE_QANT)+ammce2.get_real(AMMCE_QPERSE)+ammce2.get_real(AMMCE_FPRIVATO)+ammce2.get_real(AMMCE_QPPRIVATE);
ces.calc_amm(2, FALSE, fine_es);
ces.calc_amm(2, fine_es);
//rectype giá di "tipo civilistico"
// determinazione del residuo civilistico
_residuoc = ZERO;
@ -138,13 +147,13 @@ void TQuery_mask::set_cespi_filter() //metodo per il filtraggio corretto sulla
TString filter;
if (get(F_SELECT)[0] == 'I') // Filtro per impianto
{
const TEdit_field& imp = efield(F_IMPIANTO);
const TString& imp = get(F_IMPIANTO);
if (!imp.empty())
filter << CESPI_CODIMP << "=\"" << imp.get() << '"';
filter << CESPI_CODIMP << "=\"" << imp << '"';
}
else // Filtro per attività
{
filter << '(' << CESPI_CODCGRA << "=\"" << get(F_GRUPPO) << "\")";
filter << "STR(" << CESPI_CODCGRA << "=" << get(F_GRUPPO) << ')';
filter << "&&(" << CESPI_CODSPA << "=\"" << get(F_SPECIE) << "\")";
}
efield(F_IDCESPITE).browse()->set_filter(filter);
@ -454,8 +463,8 @@ void TForza_amm_cespi::update_amm(const TMask& m)
{
TCespite ces(m.get(F_IDCESPITE));
TDate fine_es = m.get_date(F_FINE_ES);
ces.calc_amm(1, FALSE, fine_es);
ces.calc_amm(2, FALSE, fine_es);
ces.calc_amm(1, fine_es);
ces.calc_amm(2, fine_es);
}

View File

@ -287,7 +287,7 @@ BEGIN
GROUP 5
END
NUMBER F_QUOTE_PERSE 15
CURRENCY F_QUOTE_PERSE 15
BEGIN
PROMPT 1 18 "Quote perse "
FIELD QPERSE
@ -295,7 +295,7 @@ BEGIN
GROUP 3
END
NUMBER F_PRIVATO 15
CURRENCY F_PRIVATO 15
BEGIN
PROMPT 1 19 "Privato "
FIELD FPRIVATO
@ -303,7 +303,7 @@ BEGIN
GROUP 3
END
NUMBER F_QUOTE_PRIV 15
CURRENCY F_QUOTE_PRIV 15
BEGIN
PROMPT 1 20 "Quote per priv. "
FIELD QPPRIVATE

407
ce/ce1301b.uml Executable file
View File

@ -0,0 +1,407 @@
#include "ce1301a.h"
TOOLBAR "Toolbar" 0 -2 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -1 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 10 ""
FLAGS "D"
END
ENDPAGE
PAGE "Scelte ammortamenti su cespiti Materiali" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 0 0 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 1 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 1 ""
FLAGS "D"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 2 "Esercizio "
FLAGS "DGZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 2 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 2 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 3 "Gruppo "
FLAGS "DZ"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 3 "Specie "
FLAGS "_D"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 3 ""
FLAGS "D"
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 4 "Cespite "
FLAGS "DGZ"
FIELD IDCESPITE
KEY 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 4 ""
FLAGS "D"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "DZG"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
FIELD LF_CESPI->CODCAT
END
STRING F_DESC_CAT 60 58
BEGIN
PROMPT 16 5 ""
FLAGS "D"
END
DATA F_DTFUNZ
BEGIN
PROMPT 1 7 "Data entrata in funzione "
FLAGS "DG"
FIELD LF_CESPI->DTFUNZ
END
NUMBER F_NUMESERAMM 3
BEGIN
PROMPT 1 8 "Numero esercizi ammortizzati "
FLAGS "DG"
FIELD LF_SALCE->ANNIAMM
END
TEXT DLG_NULL
BEGIN
PROMPT 56 7 " Normale Anticipato"
END
TEXT DLG_NULL
BEGIN
PROMPT 45 8 "Minimo"
END
NUMBER F_NORMIN 6 2
BEGIN
PROMPT 56 8 ""
FLAGS "DG"
END
NUMBER F_ANTMIN 6 2
BEGIN
PROMPT 69 8 ""
FLAGS "DG"
END
TEXT DLG_NULL
BEGIN
PROMPT 45 9 "Massimo"
END
NUMBER F_NORMAX 6 2
BEGIN
PROMPT 56 9 ""
FLAGS "DG"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 10 "Tipo Scelta"
END
RADIOBUTTON F_SCELTA 1 72
BEGIN
FLAGS "Z"
PROMPT 15 9 ""
ITEM "0|Tab. Ministeriale"
MESSAGE DISABLE,1@
ITEM "1|Cespite"
MESSAGE ENABLE,1@
ITEM "2|Categoria"
MESSAGE DISABLE,1@
FIELD SCELTE
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 11 "@bScelta su categoria"
END
TEXT DLG_NULL
BEGIN
PROMPT 40 11 " Normale Accelerato Anticipato"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 12 "Ammortamento fiscale"
END
NUMBER F_AMMFISC_NOR_CT 6 2
BEGIN
PROMPT 41 12 ""
FLAGS "DG"
END
NUMBER F_AMMFISC_ACC_CT 6 2
BEGIN
PROMPT 54 12 ""
FLAGS "DG"
END
NUMBER F_AMMFISC_ANT_CT 6 2
BEGIN
PROMPT 67 12 ""
FLAGS "DG"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Ammortamento civilistico"
END
NUMBER F_AMMCIV_NOR_CT 6 2
BEGIN
PROMPT 41 13 ""
FLAGS "DG"
END
NUMBER F_AMMCIV_ACC_CT 6 2
BEGIN
PROMPT 54 13 ""
FLAGS "DG"
END
NUMBER F_AMMCIV_ANT_CT 6 2
BEGIN
FLAGS "D"
PROMPT 67 13 ""
FLAGS "DG"
END
BOOLEAN F_AMMRIT_CT
BEGIN
FLAGS "DG"
PROMPT 1 14 "Ammortamento ritardato"
END
BOOLEAN F_AMM100_CT
BEGIN
FLAGS "DG"
PROMPT 1 15 "Amm.to al 100% per beni di valore unitario inferiore a 516.46 Euro"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 17 "@bScelta su cespite"
END
TEXT DLG_NULL
BEGIN
PROMPT 40 17 " Normale Accelerato Anticipato"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 18 "Ammortamento fiscale"
END
NUMBER F_AMMFISC_NOR_CE 6 2
BEGIN
PROMPT 41 18 ""
FLAGS "U"
FIELD PNOR
NUM_EXPR (#THIS_FIELD<=#F_NORMAX)&&(#THIS_FIELD<=100)
WARNING "L'ammortamento fiscale normale scelto supera il limite della tabella ministeriale"
GROUP 1
END
NUMBER F_AMMFISC_ACC_CE 6 2
BEGIN
PROMPT 54 18 ""
FLAGS "U"
FIELD PACC
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale massima di ammortamento é 100"
GROUP 1
END
NUMBER F_AMMFISC_ANT_CE 6 2
BEGIN
PROMPT 67 18 ""
FLAGS "U"
FIELD PANT
NUM_EXPR (#THIS_FIELD>=#F_ANTMIN)&&(#THIS_FIELD<=100)
WARNING "L'ammortamento fiscale anticipato scelto supera il limite ministeriale"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 19 "Ammortamento civilistico"
END
NUMBER F_AMMCIV_NOR_CE 6 2
BEGIN
PROMPT 41 19 ""
FLAGS "U"
FIELD 69@->PNOR
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale massima di ammortamento é 100"
GROUP 1
END
NUMBER F_AMMCIV_ACC_CE 6 2
BEGIN
PROMPT 54 19 ""
FLAGS "U"
FIELD 69@->PACC
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale massima di ammortamento é 100"
GROUP 1
END
NUMBER F_AMMCIV_ANT_CE 6 2
BEGIN
PROMPT 67 19 ""
FLAGS "U"
FIELD 69@->PANT
NUM_EXPR (#THIS_FIELD>=#F_ANTMIN)&&(#THIS_FIELD<=100)
WARNING "L'ammortamento civilistico anticipato scelto supera il limite ministeriale"
GROUP 1
END
BOOLEAN F_AMMRIT_CE
BEGIN
PROMPT 1 20 "Ammortamento ritardato"
FLAGS "G"
FIELD AMMRIT
MESSAGE FALSE COPY,F_AMMRIT_CE2|COPY,F_AMMRIT_CE3
MESSAGE TRUE COPY,F_AMMRIT_CE2|COPY,F_AMMRIT_CE3
GROUP 1
END
BOOLEAN F_AMMRIT_CE2
BEGIN
PROMPT 111 20 ""
FLAGS "D"
FIELD 69@->AMMRIT
GROUP 1
END
BOOLEAN F_AMMRIT_CE3
BEGIN
PROMPT 113 20 ""
FLAGS "D"
FIELD 77@->AMMRIT
GROUP 1
END
BOOLEAN F_AMM100_CE
BEGIN
PROMPT 1 21 "Amm.to al 100% per beni di valore unitario inferiore a 516.46 Euro"
FLAGS "G"
FIELD CSCEN
MESSAGE FALSE COPY,F_AMM1002_CE|COPY,F_AMM1003_CE
MESSAGE TRUE COPY,F_AMM1002_CE|COPY,F_AMM1003_CE
GROUP 1
END
BOOLEAN F_AMM1002_CE
BEGIN
PROMPT 111 21 ""
FLAGS "D"
FIELD 69@->CSCEN
GROUP 1
END
BOOLEAN F_AMM1003_CE
BEGIN
PROMPT 113 21 ""
FLAGS "D"
FIELD 77@->CSCEN
GROUP 1
END
ENDPAGE
ENDMASK

255
ce/ce1301c.uml Executable file
View File

@ -0,0 +1,255 @@
#include "ce1301a.h"
TOOLBAR "Toolbar" 0 -2 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -1 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 10 ""
FLAGS "D"
END
ENDPAGE
PAGE "Scelte ammortamenti su cespiti: Beni Immateriali" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
FLAGS "D"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DGZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_D"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 5 "Cespite "
FLAGS "DGZ"
FIELD IDCESPITE
KEY 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 5 ""
FLAGS "D"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 6 "Categoria "
FLAGS "DZG"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
FIELD LF_CESPI->CODCAT
END
STRING F_DESC_CAT 60 58
BEGIN
PROMPT 16 6 ""
FLAGS "D"
END
DATA F_DTFUNZ
BEGIN
PROMPT 1 8 "Data entrata in funzione "
FLAGS "DG"
FIELD LF_CESPI->DTFUNZ
END
NUMBER F_NUMESERAMM 3
BEGIN
PROMPT 1 9 "Numero esercizi ammortizzati "
FLAGS "DG"
FIELD LF_SALCE->ANNIAMM
END
TEXT DLG_NULL
BEGIN
PROMPT 1 11 "Tipo Scelta"
END
RADIOBUTTON F_SCELTA 1 72
BEGIN
FLAGS "Z"
PROMPT 15 10 ""
ITEM "0|Tab. Ministeriale"
MESSAGE DISABLE,1@
ITEM "1|Cespite"
MESSAGE ENABLE,1@
ITEM "2|Categoria"
MESSAGE DISABLE,1@
FIELD SCELTE
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 0 13 "@bTabelle ministeriali"
END
NUMBER F_ALIQMAX 6 2
BEGIN
PROMPT 1 14 "Aliquota massima "
FLAGS "D"
FIELD LF_CESPI->PIMM
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 17 "@bScelta ammortamenti"
END
TEXT DLG_NULL
BEGIN
PROMPT 30 17 "Scelta su categoria Scelta su cespite"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 18 "Ammortamento fiscale"
END
NUMBER F_AMMFISC_CT 6 2
BEGIN
PROMPT 40 18 ""
FLAGS "DG"
END
NUMBER F_AMMFISC_CE 6 2
BEGIN
PROMPT 65 18 ""
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale di ammortamento deve essere <= 100"
FIELD PNOR
GROUP 1
END
TEXT DLG_NULL
BEGIN
PROMPT 1 19 "Ammortamento civilistico"
END
NUMBER F_AMMCIV_CT 6 2
BEGIN
PROMPT 40 19 ""
FLAGS "DG"
END
NUMBER F_AMMCIV_CE 6 2
BEGIN
PROMPT 65 19 ""
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale di ammortamento deve essere <= 100"
FIELD 69@->PNOR
GROUP 1
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Anni ammortamento richiesti"
END
NUMBER F_ANNIAMMOREQ 8
BEGIN
PROMPT 65 20 ""
FIELD ANNIRIC
GROUP 1
END
NUMBER F_ANNIAMMOREQ2 8
BEGIN
PROMPT 65 20 ""
FIELD 69@->ANNIRIC
GROUP 1
END
ENDPAGE
ENDMASK

268
ce/ce1301d.uml Executable file
View File

@ -0,0 +1,268 @@
#include "ce1301a.h"
TOOLBAR "Toolbar" 0 -2 0 2
BUTTON DLG_SAVEREC 10 2
BEGIN
PROMPT -13 -1 "~Registra"
MESSAGE EXIT,K_SAVE
PICTURE BMP_SAVEREC
PICTURE BMP_SAVERECDN
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -33 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 10 ""
FLAGS "D"
END
ENDPAGE
PAGE "Scelte ammortamenti su cespiti: Costi Pluriennali" -1 -1 78 18
GROUPBOX DLG_NULL 78 7
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
FLAGS "D"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DGZ"
USE CCE
JOIN ESC ALIAS 104 INTO CODTAB==CODTAB
INPUT CODTAB F_ESERCIZIO
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES 104@->D0
OUTPUT F_FINE_ES 104@->D1
CHECKTYPE REQUIRED
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_D"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE NORMAL
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_IDCESPITE 10
BEGIN
PROMPT 1 5 "Cespite "
FLAGS "DGZ"
FIELD IDCESPITE
KEY 1
END
STRING F_DESC 50
BEGIN
PROMPT 24 5 ""
FLAGS "D"
USE LF_CESPI
INPUT IDCESPITE F_IDCESPITE
OUTPUT F_DESC DESC
CHECKTYPE REQUIRED
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 6 "Categoria "
FLAGS "DZG"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
FIELD LF_CESPI->CODCAT
END
STRING F_DESC_CAT 60 58
BEGIN
PROMPT 16 6 ""
FLAGS "D"
END
DATA F_DTFUNZ
BEGIN
PROMPT 1 8 "Data entrata in funzione "
FLAGS "DG"
FIELD LF_CESPI->DTFUNZ
END
NUMBER F_NUMESERAMM 3
BEGIN
PROMPT 1 9 "Numero esercizi ammortizzati "
FLAGS "DG"
FIELD LF_SALCE->ANNIAMM
END
TEXT DLG_NULL
BEGIN
PROMPT 1 11 "Tipo Scelta"
END
RADIOBUTTON F_SCELTA 1 72
BEGIN
FLAGS "Z"
PROMPT 15 10 ""
ITEM "0|Tab. Ministeriale"
MESSAGE DISABLE,1@
ITEM "1|Cespite"
MESSAGE ENABLE,1@
ITEM "2|Categoria"
MESSAGE DISABLE,1@
FIELD SCELTE
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 12 "@bTabelle ministeriali"
END
NUMBER F_ALIQMAX 6 2
BEGIN
PROMPT 1 14 "Aliquota massima "
FLAGS "D"
FIELD LF_CESPI->PMAXP
END
NUMBER F_ALIQMIN 6 2
BEGIN
PROMPT 1 13 "Aliquota minima "
FLAGS "D"
FIELD LF_CESPI->PMINP
END
NUMBER F_ENTROANNI 8
BEGIN
PROMPT 1 15 "Entro numero anni "
FLAGS "DG"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 17 "@bScelta ammortamenti"
END
TEXT DLG_NULL
BEGIN
PROMPT 30 17 "Scelta su categoria Scelta su cespite"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 18 "Ammortamento fiscale"
END
NUMBER F_AMMFISC_CT 6 2
BEGIN
PROMPT 40 18 ""
FLAGS "DG"
END
NUMBER F_AMMFISC_CE 6 2
BEGIN
PROMPT 65 18 ""
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale di ammortamento deve essere <= 100"
FIELD PNOR
GROUP 1
END
TEXT DLG_NULL
BEGIN
PROMPT 1 19 "Ammortamento civilistico"
END
NUMBER F_AMMCIV_CT 6 2
BEGIN
PROMPT 40 19 ""
FLAGS "DG"
END
NUMBER F_AMMCIV_CE 6 2
BEGIN
PROMPT 65 19 ""
NUM_EXPR #THIS_FIELD<=100
WARNING "La percentuale di ammortamento deve essere <= 100"
FIELD 69@->PNOR
GROUP 1
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Anni ammortamento richiesti"
END
NUMBER F_ANNIAMMOREQ 8
BEGIN
PROMPT 65 20 ""
FIELD AMMRIC
GROUP 1
END
NUMBER F_ANNIAMMOREQ2 8
BEGIN
PROMPT 65 20 ""
FIELD 69@->AMMRIC
GROUP 1
END
ENDPAGE
ENDMASK

466
ce/ce1400.cpp Executable file
View File

@ -0,0 +1,466 @@
#include <automask.h>
#include <recarray.h>
#include <relapp.h>
#include <defmask.h>
#include "celib.h"
#include "ce1400a.h"
#include "catdi.h"
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
class TScelta_amm_cat : public TRelation_application
{
TRelation* _rel;
TAutomask* _msk[4];
int _tipo;
protected:
virtual bool user_create();
virtual bool user_destroy();
virtual TRelation* get_relation() const { return _rel; }
virtual bool changing_mask(int) { return TRUE; }
virtual TMask* get_mask(int mode);
virtual bool protected_record(TRelation& rel);
void init_mask(TMask& m);
virtual void init_query_mode(TMask& m);
virtual void init_query_insert_mode(TMask& m);
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
public:
void set_tipo_beni(int t) { _tipo = t; }
};
inline TScelta_amm_cat& app() { return (TScelta_amm_cat&)main_app(); }
///////////////////////////////////////////////////////////
// Maschera di query
///////////////////////////////////////////////////////////
class TSac_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TSac_mask() : TAutomask("ce1400a") { }
};
bool TSac_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_ESERCIZIO:
case F_GRUPPO:
case F_SPECIE:
if (e == fe_init || e == fe_modify)
{
const int ese = get_int(F_ESERCIZIO);
const int gru = get_int(F_GRUPPO);
const char* spe = get(F_SPECIE);
TString16 str;
str.format("%04d%02d%-4s", ese, gru, spe);
const TRectype& curr_ccb = cache().get("CCB", str);
const bool can_create = !curr_ccb.get_bool("B1"); // Bollato stampato
enable(DLG_NEWREC, can_create);
enable(DLG_DELREC, can_create);
}
break;
case F_CATEGORIA:
case F_DESC_CAT:
{
TDitta_cespiti& dc = ditta_cespiti();
bool ok = dc.on_category_event(o, e, jolly);
if (!ok)
return FALSE;
}
case F_CATEGORIA2:
case F_DESC_CAT2:
if (e == fe_modify || e == fe_close)
{
TDitta_cespiti& dc = ditta_cespiti();
const int gr = get_int(F_GRUPPO);
const char* sp = get(F_SPECIE);
const int ca = get_int(F_CATEGORIA);
const TRectype& cac = dc.categoria(gr, sp, ca);
bool ok = !cac.empty();
if (ok && (o.dlg() == F_CATEGORIA || o.dlg() == F_CATEGORIA2))
{
set(o.dlg() == F_CATEGORIA ? F_DESC_CAT : F_DESC_CAT2, cac.get("S0"));
if (cac.get_bool("B0"))
return error_box("Categoria non ammortizzabile");
const int tb = cac.get_int("I0");
app().set_tipo_beni(tb);
switch (tb)
{
case 1: // Beni immateriali
{
const bool amm_per_anni = cac.get_int("I1") <= 1;
if (amm_per_anni)
return error_box("La categoria prevede un ammortamento per anni:\n"
"Effettuare le scelte sul cespite");
}
break;
case 2: // Costi pluriennali
{
const int vincolo = cac.get_int("I2");
if (vincolo == 3) // Quote
return error_box("La categoria prevede un ammortamento per quote costanti:\n"
"Effettuare le scelte sul cespite");
}
break;
default:
break;
}
}
if (!ok && o.dlg() == F_CATEGORIA2)
return error_box("E' neccessario specificare una categoria valida");
if (ok && e == fe_button && o.dlg() == F_CATEGORIA)
send_key(K_ENTER, 0);
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Maschera di beni materiali
///////////////////////////////////////////////////////////
class TMat_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
bool test_min(short quota, short minimo) const;
bool test_max(short nor, short ant, short acc) const;
bool test_rit(short quota, short minimo) const;
bool is_max(short quota, short massimo) const;
public:
TMat_mask() : TAutomask("ce1400b") { }
};
bool TMat_mask::test_min(short quota, short minimo) const
{
bool warning = FALSE;
const bool ammrit = get_bool(F_AMMRIT);
if (!ammrit)
{
const real perq = get(quota);
const real minq = get(minimo);
warning = perq < minq;
}
return warning;
}
bool TMat_mask::test_rit(short quota, short minimo) const
{
bool warning = FALSE;
const bool ammrit = get_bool(F_AMMRIT);
if (ammrit)
{
const real perq = get(quota);
const real minq = get(minimo);
warning = perq >= minq;
}
return warning;
}
bool TMat_mask::test_max(short nor, short ant, short acc) const
{
real tot;
tot += get_real(nor);
tot += get_real(ant);
tot += get_real(acc);
return tot > 100.0;
}
bool TMat_mask::is_max(short quota, short massima) const
{
const real perq = get(quota);
const real maxq = get(massima);
return perq >= maxq;
}
bool TMat_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CATEGORIA:
{
TDitta_cespiti& dc = ditta_cespiti();
dc.on_category_event(o, e, jolly);
}
break;
case F_NORFIS_87:
if (e == fe_modify || e == fe_close)
{
if (test_min(F_NORFIS_87, F_MIN_87))
warning_box("L'ammortamento normale è inferiore al minimo della tabella ministeriale:\n"
"Se non si seleziona l'ammortamento ritardato verrano generate delle quote perse");
if (test_max(F_NORFIS_87, F_ANTFIS_87, F_ACCFIS))
return error_box("Il totale delle percentuali di ammortamento supera il 100%");
if (test_rit(F_NORFIS_87, F_MIN_87))
return error_box("In caso di ammortamento ritardato si deve specificare una quota inferiore al minimo ministeriale");
}
break;
case F_NORFIS_88:
if (e == fe_modify || e == fe_close)
{
if (test_min(F_NORFIS_88, F_MIN_88))
warning_box("L'ammortamento normale è inferiore al minimo della tabella ministeriale:\n"
"Se non si seleziona l'ammortamento ritardato verrano generate delle quote perse");
if (test_max(F_NORFIS_88, F_ANTFIS_88, F_ACCFIS))
return error_box("Il totale delle percentuali di ammortamento supera il 100%");
if (test_rit(F_NORFIS_88, F_MIN_88))
return error_box("In caso di ammortamento ritardato si deve specificare una quota inferiore al minimo ministeriale");
}
break;
case F_NORFIS_89:
if (e == fe_modify || e == fe_close)
{
if (test_min(F_NORFIS_89, F_MIN_89))
warning_box("L'ammortamento normale è inferiore al minimo della tabella ministeriale:\n"
"Se non si seleziona l'ammortamento ritardato verrano generate delle quote perse");
if (test_max(F_NORFIS_89, F_ANTFIS_89, F_ACCFIS))
return error_box("Il totale delle percentuali di ammortamento supera il 100%");
if (test_rit(F_NORFIS_89, F_MIN_89))
return error_box("In caso di ammortamento ritardato si deve specificare una quota inferiore al minimo ministeriale");
}
break;
case F_ANTFIS_87:
if (e == fe_modify || e == fe_close)
{
if (!o.empty() && !is_max(F_NORFIS_87, F_MAX_87))
return error_box("E' necessario completare l'ammortamento normale prima di calcolare quello anticipato");
}
break;
case F_ANTFIS_88:
if (e == fe_modify || e == fe_close)
{
if (!o.empty() && !is_max(F_NORFIS_88, F_MAX_88))
return error_box("E' necessario completare l'ammortamento normale prima di calcolare quello anticipato");
}
break;
case F_ANTFIS_89:
if (e == fe_modify || e == fe_close)
{
if (!o.empty() && !is_max(F_NORFIS_89, F_MAX_89))
return error_box("E' necessario completare l'ammortamento normale prima di calcolare quello anticipato");
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Maschera di beni immateriali
///////////////////////////////////////////////////////////
class TImm_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImm_mask() : TAutomask("ce1400c") { }
};
bool TImm_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CATEGORIA:
{
TDitta_cespiti& dc = ditta_cespiti();
return dc.on_category_event(o, e, jolly);
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Maschera di costi pluriennali
///////////////////////////////////////////////////////////
class TPlu_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TPlu_mask() : TAutomask("ce1400d") { }
};
bool TPlu_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_CATEGORIA:
{
TDitta_cespiti& dc = ditta_cespiti();
return dc.on_category_event(o, e, jolly);
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
TMask* TScelta_amm_cat::get_mask(int mode)
{
TMask* m = NULL;
if (mode == MODE_QUERY || mode == MODE_QUERYINS)
{
if (_msk[0] == NULL)
_msk[0] = new TSac_mask;
m = _msk[0];
}
else
{
switch(_tipo)
{
case 1:
if (_msk[2] == NULL)
_msk[2] = new TImm_mask;
break;
case 2:
if (_msk[3] == NULL)
_msk[3] = new TPlu_mask;
break;
default:
if (_msk[1] == NULL)
_msk[1] = new TMat_mask;
break;
}
m = _msk[_tipo+1];
}
return m;
}
bool TScelta_amm_cat::user_create()
{
open_files(LF_TABCOM, LF_CATDI, 0);
_rel = new TRelation(LF_CATDI);
memset(_msk, 0, sizeof(_msk));
return TRUE;
}
bool TScelta_amm_cat::user_destroy()
{
for (int m = 3; m >= 0; m--)
if (_msk[m]) delete _msk[m];
delete _rel;
return TRUE;
}
bool TScelta_amm_cat::protected_record(TRelation& rel)
{
const TRectype& curr = rel.curr();
const int annoes = curr.get_int(CATDI_CODES);
int gruppo = curr.get_int(CATDI_CODCGRA);
if (gruppo <= 0) gruppo = curr.get_int(CATDI_CODCGR);
TString4 specie = curr.get(CATDI_CODSPA);
if (specie.blank())
specie = curr.get(CATDI_CODSP);
TString16 str;
str.format("%04d%02d%-4s", annoes, gruppo, (const char*)specie);
const TRectype& curr_ccb = cache().get("CCB", str);
const bool protect = curr_ccb.get_bool("B1"); // Bollato stampato
return protect;
}
void TScelta_amm_cat::init_query_mode(TMask& m)
{
ditta_cespiti().init_mask(m);
set_search_field(F_CATEGORIA2);
m.show(F_CATEGORIA2); m.show(F_DESC_CAT2);
m.hide(F_CATEGORIA); m.hide(F_DESC_CAT);
}
void TScelta_amm_cat::init_query_insert_mode(TMask& m)
{
ditta_cespiti().init_mask(m);
set_search_field(F_CATEGORIA);
m.show(F_CATEGORIA); m.show(F_DESC_CAT);
m.hide(F_CATEGORIA2); m.hide(F_DESC_CAT2);
}
void TScelta_amm_cat::init_mask(TMask& m)
{
TDitta_cespiti& dc = ditta_cespiti();
const int ese = _msk[0]->get_int(F_ESERCIZIO);
const int gru = _msk[0]->get_int(F_GRUPPO);
const char* spe = _msk[0]->get(F_SPECIE);
const int cat = _msk[0]->get_int(F_CATEGORIA);
dc.set_attivita(ese, gru, spe);
dc.init_mask(m);
const TRectype& cac = dc.categoria(gru, spe, cat);
switch (_tipo)
{
case 1:
m.set(F_TIPOAMM, cac.get("I1"));
m.set(F_MAX_AMM, cac.get("R13"));
m.set(F_ANNI, cac.get("I3"));
break;
case 2:
m.set(F_TIPOVINC, cac.get("I2"));
m.set(F_MIN_AMM, cac.get("R14"));
m.set(F_MAX_AMM, cac.get("R15"));
m.set(F_ANNI, cac.get("I3"));
break;
default:
{
const real r11 = cac.get("R11");
const real r12 = cac.get("R12");
m.set(F_MIN_87, real(r12/2.0));
m.set(F_MIN_88, real(r12/2.0));
m.set(F_MIN_89, real(r11/2.0));
m.set(F_MAX_87, r12);
m.set(F_MAX_88, r12);
m.set(F_MAX_89, r11);
}
break;
}
}
void TScelta_amm_cat::init_insert_mode(TMask& m)
{
init_mask(m);
}
void TScelta_amm_cat::init_modify_mode(TMask& m)
{
init_mask(m);
}
int ce1400(int argc, char* argv[])
{
TScelta_amm_cat sac;
sac.run(argc, argv, "Scelta ammortamento per categoria");
return 0;
}

47
ce/ce1400a.h Executable file
View File

@ -0,0 +1,47 @@
#define F_DITTA 101
#define F_RAGSOC 102
#define F_ESERCIZIO 103
#define F_INIZIO_ES 104
#define F_FINE_ES 105
#define F_GRUPPO 106
#define F_SPECIE 107
#define F_DESC_GRSP 108
#define F_CATEGORIA 109
#define F_DESC_CAT 110
#define F_CATEGORIA2 111
#define F_DESC_CAT2 112
#define F_MIN_87 201
#define F_MIN_88 202
#define F_MIN_89 203
#define F_MAX_87 204
#define F_MAX_88 205
#define F_MAX_89 206
#define F_NORFIS_87 210
#define F_NORCIV_87 211
#define F_NORFIS_88 212
#define F_NORCIV_88 213
#define F_NORFIS_89 214
#define F_NORCIV_89 215
#define F_ANTFIS_87 216
#define F_ANTCIV_87 217
#define F_ANTFIS_88 218
#define F_ANTCIV_88 219
#define F_ANTFIS_89 220
#define F_ANTCIV_89 221
#define F_ACCFIS 222
#define F_ACCCIV 223
#define F_AMMRIT 230
#define F_AMM100 231
#define F_TIPOAMM 300
#define F_TIPOVINC 301
#define F_MIN_AMM 302
#define F_MAX_AMM 303
#define F_ANNI 304
#define F_NORFIS 305
#define F_NORCIV 306

148
ce/ce1400a.uml Executable file
View File

@ -0,0 +1,148 @@
#include "ce1400a.h"
TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Ammortamento per categorie" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZ"
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES D0
OUTPUT F_FINE_ES D1
CHECKTYPE REQUIRED
FIELD CODES
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "Z"
FIELD CODCGRA
CHECKTYPE REQUIRED
KEY 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
FIELD CODSPA
KEY 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_CATEGORIA2 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "Z"
USE LF_CATDI
INPUT CODES F_ESERCIZIO SELECT
INPUT CODCGRA F_GRUPPO
INPUT CODSPA F_SPECIE
INPUT CODCAT F_CATEGORIA2
DISPLAY "Esercizio" CODES
DISPLAY "Gruppo" CODCGRA
DISPLAY "Specie" CODSPA
DISPLAY "Categoria" CODCAT
OUTPUT F_GRUPPO CODCGRA
OUTPUT F_SPECIE CODSPA
OUTPUT F_CATEGORIA CODCAT
OUTPUT F_CATEGORIA2 CODCAT
CHECKTYPE REQUIRED
WARNING "E' necessario specificare una categoria valida"
FIELD CODCAT
KEY 1
END
STRING F_DESC_CAT2 60 58
BEGIN
PROMPT 16 5 ""
FLAGS "D"
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "BHZ"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
WARNING "E' necessario specificare una categoria valida"
FIELD CODCAT
KEY 1
CHECKTYPE REQUIRED
END
STRING F_DESC_CAT 60 58
BEGIN
PROMPT 16 5 ""
FLAGS "BH"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
END
ENDPAGE
ENDMASK

363
ce/ce1400b.uml Executable file
View File

@ -0,0 +1,363 @@
#include "ce1400a.h"
TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Beni materiali" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "AZD"
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES D0
OUTPUT F_FINE_ES D1
CHECKTYPE REQUIRED
FIELD CODES
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
FIELD CODCGRA
KEY 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "_D"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
FIELD CODSPA
KEY 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "DGZ"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
WARNING "E' necessario specificare una categoria valida"
FIELD CODCAT
KEY 1
END
STRING F_DESC_CAT 60
BEGIN
PROMPT 16 5 ""
FLAGS "D"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 7 "@bLimiti ammortamento"
END
TEXT DLG_NULL
BEGIN
PROMPT 24 8 "31-12-1987"
END
TEXT DLG_NULL
BEGIN
PROMPT 44 8 "31-12-1988"
END
TEXT DLG_NULL
BEGIN
PROMPT 64 8 "31-12-1989"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 9 "Minimo da tabella"
END
NUMBER F_MIN_87 6 2
BEGIN
PROMPT 26 9 ""
FLAGS "D"
END
NUMBER F_MIN_88 6 2
BEGIN
PROMPT 46 9 ""
FLAGS "D"
END
NUMBER F_MIN_89 6 2
BEGIN
PROMPT 66 9 ""
FLAGS "D"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 10 "Massimo da tabella"
END
NUMBER F_MAX_87 6 2
BEGIN
PROMPT 26 10 ""
FLAGS "D"
END
NUMBER F_MAX_88 6 2
BEGIN
PROMPT 46 10 ""
FLAGS "D"
END
NUMBER F_MAX_89 6 2
BEGIN
PROMPT 66 10 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 12 "@bScelte"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Ammortamento"
END
TEXT DLG_NULL
BEGIN
PROMPT 22 13 "%Fisc. %Civil."
END
TEXT DLG_NULL
BEGIN
PROMPT 42 13 "%Fisc. %Civil."
END
TEXT DLG_NULL
BEGIN
PROMPT 62 13 "%Fisc. %Civil."
END
TEXT DLG_NULL
BEGIN
PROMPT 1 14 "Normale"
END
NUMBER F_NORFIS_87 6 2
BEGIN
PROMPT 22 14 ""
FLAGS "U"
FIELD PFNORVN
NUM_EXPR #THIS_FIELD<=#F_MAX_87
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_NORCIV_87 6 2
BEGIN
PROMPT 30 14 ""
FLAGS "U"
FIELD PCNORVN
NUM_EXPR #THIS_FIELD<=#F_MAX_87
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_NORFIS_88 6 2
BEGIN
PROMPT 42 14 ""
FLAGS "U"
FIELD PFNORVT
NUM_EXPR #THIS_FIELD<=#F_MAX_88
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_NORCIV_88 6 2
BEGIN
PROMPT 50 14 ""
FLAGS "U"
FIELD PCNORVT
NUM_EXPR #THIS_FIELD<=#F_MAX_88
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_NORFIS_89 6 2
BEGIN
PROMPT 62 14 ""
FLAGS "U"
FIELD PFNORNT
NUM_EXPR #THIS_FIELD<=#F_MAX_89
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_NORCIV_89 6 2
BEGIN
PROMPT 70 14 ""
FLAGS "U"
FIELD PCNORNT
NUM_EXPR #THIS_FIELD<=#F_MAX_89
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 15 "Anticipato"
END
NUMBER F_ANTFIS_87 6 2
BEGIN
PROMPT 22 15 ""
FLAGS "U"
FIELD PFANTVN
NUM_EXPR #THIS_FIELD<=15
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ANTCIV_87 6 2
BEGIN
PROMPT 30 15 ""
FLAGS "U"
FIELD PCANTVN
NUM_EXPR #THIS_FIELD<=#F_MAX_87
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ANTFIS_88 6 2
BEGIN
PROMPT 42 15 ""
FLAGS "U"
FIELD PFANTVT
NUM_EXPR #THIS_FIELD<=#F_MAX_88
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ANTCIV_88 6 2
BEGIN
PROMPT 50 15 ""
FLAGS "U"
FIELD PCANTVT
NUM_EXPR #THIS_FIELD<=#F_MAX_88
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ANTFIS_89 6 2
BEGIN
PROMPT 62 15 ""
FLAGS "U"
FIELD PFANTNT
NUM_EXPR #THIS_FIELD<=#F_MAX_89
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ANTCIV_89 6 2
BEGIN
PROMPT 70 15 ""
FLAGS "U"
FIELD PCANTNT
NUM_EXPR #THIS_FIELD<=#F_MAX_89
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 16 "Accelerato"
END
NUMBER F_ACCFIS 6 2
BEGIN
PROMPT 22 16 ""
FLAGS "U"
FIELD PFACC
NUM_EXPR #THIS_FIELD<=#F_MAX_87
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
NUMBER F_ACCCIV 6 2
BEGIN
PROMPT 30 16 ""
FLAGS "U"
FIELD PCACC
NUM_EXPR #THIS_FIELD<=#F_MAX_87
WARNING "L'ammortamento non puo` superare il limite della tabella ministeriale"
END
BOOLEAN F_AMMRIT
BEGIN
PROMPT 1 18 "Scelta ammortamento ritardato "
FIELD AMMRIT
MESSAGE FALSE ENABLE,F_ACCFIS
MESSAGE TRUE CLEAR,F_ACCFIS
END
BOOLEAN F_AMM100
BEGIN
PROMPT 1 19 "Scelta ammortamento al 100% per beni inferiori a 516.46 Euro "
FIELD CSCEN
END
ENDPAGE
ENDMASK

175
ce/ce1400c.uml Executable file
View File

@ -0,0 +1,175 @@
#include "ce1400a.h"
TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Beni immateriali" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DZ"
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES D0
OUTPUT F_FINE_ES D1
CHECKTYPE REQUIRED
FIELD CODES
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
FIELD CODCGRA
KEY 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "D_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
FIELD CODSPA
KEY 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "DGZ"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
WARNING "E' necessario specificare una categoria valida"
FIELD CODCAT
KEY 1
END
STRING F_DESC_CAT 60
BEGIN
PROMPT 16 5 ""
FLAGS "D"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 0 7 "@bParametri categoria"
END
LIST F_TIPOAMM 1 12
BEGIN
PROMPT 1 8 "Tipo ammortamento beni immateriali "
ITEM "1|Anni"
ITEM "2|Percentuali"
FLAGS "D"
END
NUMBER F_MAX_AMM 6 2
BEGIN
PROMPT 1 9 "Limite massimo di ammortamento "
FLAGS "D"
END
NUMBER F_ANNI 6
BEGIN
PROMPT 1 10 "Entro numero anni "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 12 "@bScelta ammortamento"
END
TEXT DLG_NULL
BEGIN
PROMPT 31 13 "% Fiscale"
END
TEXT DLG_NULL
BEGIN
PROMPT 51 13 "% Civilisitico"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 14 "Ammortamento normale"
END
NUMBER F_NORFIS 6 2
BEGIN
PROMPT 32 14 ""
NUM_EXPR #THIS_FIELD<=#F_MAX_AMM
WARNING "La quota di ammortamento supera il limite della tabella ministeriale"
END
NUMBER F_NORCIV 6 2
BEGIN
PROMPT 56 14 ""
FLAGS "U"
NUM_EXPR #THIS_FIELD<=100
END
ENDPAGE
ENDMASK

182
ce/ce1400d.uml Executable file
View File

@ -0,0 +1,182 @@
#include "ce1400a.h"
TOOLBAR "Toolbar" 0 -3 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Costi pluriennali" -1 -1 78 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 1 "@bParametri ditta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "DF"
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
USE LF_NDITTE
INPUT CODDITTA F_DITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "D"
END
NUMBER F_ESERCIZIO 4
BEGIN
PROMPT 1 3 "Esercizio "
FLAGS "DZ"
USE ESC
INPUT CODTAB F_ESERCIZIO
DISPLAY "Codice esercizio" CODTAB
DISPLAY "Inizio esercizio" D0
DISPLAY "Fine esercizio" D1
OUTPUT F_ESERCIZIO CODTAB
OUTPUT F_INIZIO_ES D0
OUTPUT F_FINE_ES D1
CHECKTYPE REQUIRED
FIELD CODES
KEY 1
END
DATE F_INIZIO_ES
BEGIN
PROMPT 26 3 "Inizio "
FLAGS "D"
END
DATE F_FINE_ES
BEGIN
PROMPT 50 3 "Fine "
FLAGS "D"
END
NUMBER F_GRUPPO 2
BEGIN
PROMPT 1 4 "Gruppo "
FLAGS "DZ"
FIELD CODCGRA
KEY 1
END
STRING F_SPECIE 4
BEGIN
PROMPT 16 4 "Specie "
FLAGS "D_"
USE CCB
JOIN %CAT ALIAS 400 INTO CODTAB=CODTAB[5,10]
INPUT CODTAB[1,4] F_ESERCIZIO SELECT
INPUT CODTAB[5,6] F_GRUPPO
INPUT CODTAB[7,10] F_SPECIE
DISPLAY "Gruppo" CODTAB[5,6]
DISPLAY "Specie" CODTAB[7,10]
DISPLAY "Descrizione@50" 400@->S0
OUTPUT F_GRUPPO CODTAB[5,6]
OUTPUT F_SPECIE CODTAB[7,10]
OUTPUT F_DESC_GRSP 400@->S0
CHECKTYPE REQUIRED
FIELD CODSPA
KEY 1
END
STRING F_DESC_GRSP 60 45
BEGIN
PROMPT 31 4 ""
FLAGS "D"
END
NUMBER F_CATEGORIA 2
BEGIN
PROMPT 1 5 "Categoria "
FLAGS "DGZ"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
WARNING "E' necessario specificare una categoria valida"
FIELD CODCAT
KEY 1
END
STRING F_DESC_CAT 60
BEGIN
PROMPT 16 5 ""
FLAGS "D"
DRIVENBY F_GRUPPO
DRIVENBY F_SPECIE
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 0 7 "@bParametri categoria"
END
LIST F_TIPOVINC 1 8
BEGIN
PROMPT 1 8 "Tipo vincolo costi pluriennali "
ITEM "1|Nessuno"
ITEM "2|Anni"
ITEM "3|Quote"
FLAGS "D"
END
NUMBER F_MIN_AMM 6 2
BEGIN
PROMPT 1 9 "Limite minimo di ammortamento "
FLAGS "D"
END
NUMBER F_MAX_AMM 6 2
BEGIN
PROMPT 1 10 "Limite massimo di ammortamento "
FLAGS "D"
END
NUMBER F_ANNI 6
BEGIN
PROMPT 1 11 "Entro numero anni "
FLAGS "D"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 0 13 "@bScelta ammortamento"
END
TEXT DLG_NULL
BEGIN
PROMPT 31 14 "% Fiscale"
END
TEXT DLG_NULL
BEGIN
PROMPT 51 14 "% Civilisitico"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 15 "Ammortamento normale"
END
NUMBER F_NORFIS 6 2
BEGIN
PROMPT 32 15 ""
NUM_EXPR (#THIS_FIELD>=#F_MIN_AMM)&&(#THIS_FIELD<=#F_MAX_AMM)
WARNING "La quota di ammortamento deve essere compresa tra i limiti della tabella ministeriale"
END
NUMBER F_NORCIV 6 2
BEGIN
PROMPT 56 15 ""
FLAGS "U"
NUM_EXPR #THIS_FIELD<=100
END
ENDPAGE
ENDMASK

View File

@ -8,8 +8,9 @@ int main(int argc,char** argv)
switch(n)
{
case 1: ce2200(argc, argv); break;
default: ce2100(argc, argv); break;
case 1: ce2200(argc, argv); break; // Apertura nuovo esercizio
case 2: ce2300(argc, argv); break; // Generazione movimenti contabili
default: ce2100(argc, argv); break; // Calcolo ammortamenti
}
exit(0);
return 0;

View File

@ -1,3 +1,3 @@
int ce2100(int argc, char* argv[]);
int ce2200(int argc, char* argv[]);
int ce2300(int argc, char* argv[]);

View File

@ -102,7 +102,7 @@ bool TCalcamm::calcola_ammortamenti()
TCespite cespite(cur.curr());
for (int tipo_sit = 1; tipo_sit <= 3; tipo_sit++)
cespite.calc_amm(tipo_sit, TRUE, data_limite);
cespite.calc_amm(tipo_sit, data_limite, TRUE);
}
// Aggiorna maschera

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,7 @@ enum TTipo_cespite { tc_materiale, tc_immateriale, tc_pluriennale };
class TCespite : public TRectype
{
int _tipo_sit;
TRectype _salini, _salpro;
TRectype _ammini, _ammpro;
@ -19,45 +20,55 @@ protected:
void read_sal(int esercizio);
void save_sal() const;
void fill_amm_key(TRectype& ammce, int esercizio, int tpsal, int tpamm) const;
void read_amm(int esercizio, int tipo);
void fill_amm_key(TRectype& ammce, int esercizio, int tpsal) const;
void read_amm(int esercizio);
void save_amm() const;
void set_msg05(const char* msg);
bool valido(int tipo_sit);
bool valido();
real get_limit() const;
void prepara_saldi(int tipo_sit, bool is_valid);
void prepara_saldi(bool is_valid);
real val_amm(int tiposit) const;
real res_amm(int tiposit) const;
real val_amm() const;
real res_amm() const;
real mov_val_amm(const TRectype& tmv) const;
real mov_res_amm(const TRectype& tmv, const TRectype& tmvam) const;
real calcola_spese_manutenzione(const real& valamm);
void rip_jolly(TRelation& rel, TRectype& tmv, TRectype& tmvam, const real& num, const real& den);
void rip_elem(TRelation& rel, TRectype& tmv, TRectype& tmvam);
void rip_costo(TRelation& rel, TRectype& tmv, TRectype& tmvam);
void rip_jolly(TRelation& rel, const real& num, const real& den, int mode);
void rip_elem(TRelation& rel, int mode);
void rip_costo(TRelation& rel, int mode);
int test_rip(TRelation& rel);
TString& ammini_get(const char* pstar) const;
bool ammini_get_bool(const char* pstar) const;
real ammini_get_real(const char* pstar) const;
void calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tmvam, int tipo_sit);
void calc_perc(TRelation& rel, const TRectype& tmv, const TRectype& tmvam);
void calc_anni(TRectype& ammmv, const TRectype& tmv, const TRectype& tmvam);
void amm_mov_ven(TRelation& rel, const TRectype& tmv, const TRectype& tmvam, int tipo_sit);
void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam, int tipo_sit, bool is_valid);
void amm_mov_ven(TRelation& rel, const TRectype& tmv, const TRectype& tmvam);
real mov_r90_escl_ven(const TRectype& tmv);
real mov_r91_escl_ven(const TRectype& tmv);
real mov_val_ven(const TRectype& tmv);
void cal_valenza(const TRectype& tmv, const TRectype& tmvam, TRectype& ammmv);
void elabora_mov_neg(TRelation& rel, TRectype& tmv, TRectype& tmvam);
real calc_quota(const real& valamm, const real& perric, const real& residuo,
real& pereff, TRelation* mov = NULL);
real calc_quote_perse(const real& valamm, const real& peric, const real& residuo,
const real& quotamm, bool mov_vend, const TDate& dtmov);
void agg_quota(int tipo_sit, const real& valamm, TRectype& rec, const char* field, bool calcq);
void agg_quota(const real& valamm, TRectype& rec, const char* field, bool calcq);
void incr_field(TRectype& dst, const char* fdst, const TRectype& src, const char* fsrc, char segno) const;
void applica_rettifiche(TRectype& tmv, TRectype& tmvam, int tipo_sit);
void applica_rettifiche(TRectype& tmv, TRectype& tmvam);
void aggiorna_salpro(const TRectype& tmv, const TRectype& tmvam, char segno);
void scansione_movimenti(int tipo_sit, const TDate& data_limite, bool is_valid);
void calc_amm_residui(int tipo_sit, bool is_valid);
void agg_spe_man(int tipo_sit, bool is_valid);
void scansione_movimenti(const TDate& data_limite, bool is_valid);
void calc_amm_residui(bool is_valid);
void agg_spe_man(bool is_valid);
public:
bool calc_amm(int tipo_sit, bool calc_spe_man, const TDate& data_limite);
bool calc_amm(int tipo_sit, const TDate& data_limite, bool calc_spe_man = FALSE);
const TRectype& categoria() const;
TTipo_cespite tipo() const;

35
ce/ce2300.cpp Executable file
View File

@ -0,0 +1,35 @@
#include <applicat.h>
#include <automask.h>
class TCesp2cg_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TCesp2cg_mask() : TAutomask("ce2300a") { }
};
bool TCesp2cg_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
class TCesp2cg : public TSkeleton_application
{
protected:
virtual void main_loop();
};
void TCesp2cg::main_loop()
{
TCesp2cg_mask m;
m.run();
}
int ce2300(int argc, char* argv[])
{
TCesp2cg a;
a.run(argc, argv, "Trasferimento movimenti contabili");
return 0;
}

1
ce/ce2300a.h Executable file
View File

@ -0,0 +1 @@
#define F_DITTA 101

21
ce/ce2300a.uml Executable file
View File

@ -0,0 +1,21 @@
#include "ce2300a.h"
TOOLBAR "Toolbar" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
PAGE "Trasferimento a contabilità" -1 -1 78 18
ENDPAGE
ENDMASK

View File

@ -573,7 +573,7 @@ SECTION BODY FIRST 9
BEGIN
KEY "Quote non + ammortizzabili"
PROMPT 126 3 ""
MESSAGE _NUMEXPR, 106@->QPERSE+106@->FPRIVATO+106@->QPPRIVATE
MESSAGE _NUMEXPR, (106@->QPERSE+106@->FPRIVATO+106@->QPPRIVATE)*#FR_MV_SEGNO
MESSAGE ADD,BO->FR_MV_QNONAMM
END

View File

@ -352,12 +352,12 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
if (tipo == 1)
{
real rivgf = recsalce.get(MOVCE_RIVGF);
real rivgf = recsalce.get(SALCE_RIVGF);
_cat._tot_riv += riv75 + riv83 + riv90 + riv91 + rivgf;
}
else
{
real rivgc = recsalce.get(MOVCE_RIVGC);
real rivgc = recsalce.get(SALCE_RIVGC);
_cat._tot_riv += riv75 + riv83 + riv90 + riv91 + rivgc;
}
@ -392,8 +392,9 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
const TDate dtmov = mov.get(MOVCE_DTMOV);
if (dtmov >= _dataini && dtmov <= _datafine)
{
const TString& tmc = cache().get("TMC", mov.get(MOVCE_CODMOV), "S6"); //prende il valore del campo S6 nella tabella tipi movimento
const real segno = mov.get_char(MOVCE_SEGNO) == '-' ? -1 : +1 ;
const TString8 codmov = mov.get(MOVCE_CODMOV);
const char tmc = cache().get("%TMC", codmov, "S6")[0]; //prende il valore del campo S6 nella tabella tipi movimento
const char segno = mov.get_char(MOVCE_SEGNO);
riv75 = mov.get_real(MOVCE_RIV75);
riv83 = mov.get_real(MOVCE_RIV83);
riv90 = mov.get_real(MOVCE_RIV90);
@ -406,16 +407,20 @@ void TStampa_prospetto::aggiorna_totali(TCursor& cur, const int tipo, TTipo_cesp
real qacc = amm.get_real(MOVAM_QACC);
real qant = amm.get_real(MOVAM_QANT);
if (tmc == "3")
if (tmc == 'R')
_cat._tot_riveser += riv75 + riv83 + riv90 + riv91 + rivg;
if (tmc == "1" || (tmc == "" && segno == '+'))
if (tmc == 'I' || (tmc <= ' ' && segno == '+'))
{
_cat._tot_acqincr += csto - vnonamm2 + riv75 + riv83 + riv90 + riv91 + rivg;
_cat._tot_incr += qnor + qacc + qant;
if (tmc == "2" || (tmc == "" && segno == '-'))
}
if (tmc == 'E' || (tmc <= ' ' && segno == '-'))
{
_cat._tot_cesselim2 += csto - vnonamm2 + riv75 + riv83 + riv90 + riv91 + rivg;
_cat._tot_cesselim3 += qnor + qant + qacc;
_cat._tot_reinplus += mov.get_real(MOVCE_PLUSREIN);
}
if (tmc == 'P')
_cat._tot_reinplus += mov.get_real(MOVCE_PLUSREIN);
// solo nei casi con tipo =2 e/o 3 viene preso l'ammortamento da ammmv (che verrá poi sommato nella riga 4, piú sotto, a quello
// preso da ammce); l'ammortamento viene preso qui in quanto é relativo ai movimenti che vengono qui scanditi

379
ce/ceeur.cpp Executable file
View File

@ -0,0 +1,379 @@
#include <applicat.h>
#include <config.h>
#include <currency.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <utility.h>
#include <tabutil.h>
#include "../cg/cglib01.h"
#include "ceeur.h"
inline TEuro_app& app() { return (TEuro_app&)main_app(); }
///////////////////////////////////////////////////////////
// Utilities
///////////////////////////////////////////////////////////
// Confronta due nomi di directory
bool dir_equal(const char* dir1, const char* dir2)
{
TFilename d1 = dir1; d1.strip("\\/");
TFilename d2 = dir2; d2.strip("\\/");
return d1 == d2;
}
void convert_import(TRectype& rec, const char* str)
{
if (str && *str)
{
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
{
real r = rec.get(tok);
if (r != ZERO)
{
r /= EURO;
r.round(2);
rec.put(tok, r);
}
}
}
}
void zero_import(TRectype& rec, const char* str)
{
if (str && *str)
{
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
rec.zero(tok);
}
}
void keep_import(TRectype& rec, const char* str)
{
if (str && *str)
{
TAssoc_array old;
TToken_string list = str;
FOR_EACH_TOKEN(list, tok)
old.add(tok, rec.get(tok));
rec.zero();
FOR_EACH_ASSOC_STRING(old, obj, key, val)
rec.put(key, val);
}
}
const TString& build_name(int logicnum, bool euro, long firm)
{
TFilename dati, datie;
app().get_aree_dati(dati, datie);
TDir d; d.get(logicnum, _nolock, _nordir, _sysdirop);
TString8 ditta = "com";
TFilename name = d.filename();
TFilename n = name.name();
if (!d.is_com())
{
if (firm < 0)
firm = app().get_firm();
if (firm > 0)
ditta.format("%05ldA", firm);
}
else
{
const TFilename n1 = d.name();
if (n1[0] != '%')
{
ditta.cut(0);
n = n1;
n.ext("dbf");
}
}
static TFilename _filename;
_filename = euro ? datie : dati;
_filename.add(ditta);
_filename.add(n);
_filename.insert("%", 0);
return _filename;
}
bool dbf_exists(int logicnum, bool euro, long firm)
{
TFilename n = build_name(logicnum, euro, firm);
if (n[0] == '%') n.ltrim(1);
return fexist(n);
}
///////////////////////////////////////////////////////////
// Base app
///////////////////////////////////////////////////////////
bool TEuro_app::get_aree_dati(TFilename& lit, TFilename& eur) const
{
TConfig prassis(CONFIG_STUDIO, "Euro");
lit = prassis.get("DatiLire");
eur = prassis.get("DatiEuro");
if (lit.blank())
{
lit = prefix().get_studio();
lit.rtrim(1);
}
bool ok = eur.exist();
return ok;
}
bool TEuro_app::goto_euro(long ditta)
{
TFilename lit, eur;
bool ok = get_aree_dati(lit, eur);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, eur))
ok = prefix().set_studio(eur, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in euro '%s'", (const char*)eur);
return ok;
}
bool TEuro_app::goto_lire(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
bool ok = !lit.blank() && fexist(lit);
if (ok)
{
TFilename cur = prefix().get_studio(); cur.rtrim(1);
if (ditta < 0)
ditta = get_firm();
if (!dir_equal(cur, lit))
ok = prefix().set_studio(lit, ditta);
else
prefix().set_codditta(ditta);
}
if (!ok)
error_box("Impossibile utilizzare lo studio in lire '%s'", (const char*)lit);
return ok;
}
bool TEuro_app::save_round_bill(const TBill& b) const
{
bool ok = b.ok();
if (ok)
{
TFilename lit, eur;
ok = get_aree_dati(lit, eur);
if (ok)
{
eur.add("config/prassis.ini");
TConfig prassis(eur, "Euro");
TString16 str;
str.format("%d,%d,%ld", b.gruppo(), b.conto(), b.sottoconto());
prassis.set("RoundBill", str);
}
}
return ok;
}
bool TEuro_app::load_round_bill(TBill& b) const
{
TFilename lit, eur;
bool ok = get_aree_dati(lit, eur);
if (ok)
{
eur.add("config/prassis.ini");
TConfig prassis(eur, "Euro");
TToken_string str(prassis.get("RoundBill"), ',');
const int g = str.get_int();
const int c = str.get_int();
const long s = str.get_long();
b.set(g, c, s);
ok = b.find();
}
return ok;
}
bool TEuro_app::copy_dir(const char* src, const char* dst) const
{
bool ok = TRUE;
if (!fexist(dst))
make_dir(dst);
TString_array files;
TFilename file1, file2;
file1 = src; file1.add("*.*");
list_files(file1, files);
TString str;
str << "Copia da " << src << " a " << dst << "...";
TProgind pi(files.items(), str, FALSE, TRUE);
FOR_EACH_ARRAY_ROW(files, i, file)
{
pi.addstatus(1);
file1 = *file;
file2 = dst; file2.add(file1.name());
ok &= fcopy(file1, file2);
}
return ok;
}
bool TEuro_app::is_com_file(int lf) const
{
TDir d;
d.get(lf, _nolock, _nordir, _sysdirop);
return d.is_com();
}
void TEuro_app::zap_file(int lf, bool euro, const char* filter) const
{
TFilename name = build_name(lf, euro, -1);
if (name[0] == '%') name.ltrim(1);
if (name.exist())
{
if (filter && *filter)
{
TRelation rel(lf);
rel.replace(new TEuroisamfile(lf, euro));
TCursor cur(&rel, filter);
const long items = cur.items();
cur.freeze();
for (cur = 0L; cur.pos() < items; ++cur)
rel.remove();
}
else
{
TExternisamfile f(name);
f.zap();
}
}
}
void TEuro_app::convert_file(int lf, const char* cnv, const char* res, record_handler rh, void* jolly, const char* filter)
{
if (!dbf_exists(lf, FALSE, -1)) // Non esiste il file da convertire
return; // per cui...
// Cursore su file in lire
TRelation rel(lf);
TCursor cur(&rel, filter);
TRectype& curr = rel.curr();
zap_file(lf, TRUE, filter); // Azzera file in euro
// File destinazione in euro
TEuroisamfile fileur(lf, TRUE);
TRectype& receur = fileur.curr();
TString str;
str << "Conversione " << rel.lfile().description() << " ...";
TToken_string conv(cnv);
TToken_string azze(res);
const long items = cur.items();
cur.freeze();
TProgind pi(items, str, FALSE, TRUE);
for (cur = 0L; cur.pos() < items; ++cur)
{
pi.addstatus(1);
receur = curr;
convert_import(receur, conv);
zero_import(receur, azze);
bool do_write = TRUE;
if (rh != NULL)
do_write = rh(receur, jolly);
if (do_write)
fileur.write();
}
}
bool TEuro_app::data_adozione_euro(long firm, TDate& adozione, bool& inizio) const
{
TFilename dati, datie;
get_aree_dati(dati, datie);
TString8 ditta;
ditta.format("%05ldA", firm <= 0 ? get_firm() : firm);
TFilename inie = datie;
inie.add(ditta);
inie.add("prassid.ini");
inizio = TRUE; // Supponiamo che adotti l'euro ad inizio esercizio
bool adotta = inie.exist();
if (adotta)
{
TConfig prassid(inie, "Euro");
adozione = prassid.get("DataAdozione");
adotta = adozione.ok();
if (adotta)
{
TEsercizi_contabili esc;
const int anno = esc.date2esc(adozione);
if (anno > 0)
inizio = adozione == esc[anno].inizio();
}
}
return adotta;
}
bool TEuro_app::create()
{
old_study = prefix().get_studio();
return TSkeleton_application::create();
}
bool TEuro_app::destroy()
{
if (old_study != prefix().get_studio())
{
TConfig ini(CONFIG_INSTALL, "Main");
ini.set("Study", old_study);
}
return TSkeleton_application::destroy();
}
///////////////////////////////////////////////////////////
// TEuroisamfile
///////////////////////////////////////////////////////////
TEuroisamfile::TEuroisamfile(int logicnum, bool euro, long firm)
: TIsamtempfile(logicnum, build_name(logicnum, euro, firm), FALSE, FALSE)
{
}
///////////////////////////////////////////////////////////
// main
///////////////////////////////////////////////////////////
int main(int argc, char** argv)
{
TApplication::check_parameters(argc, argv);
int a = argc > 1 ? argv[1][1]-'0' : 0;
switch (a)
{
case 1: ceeur02(argc, argv); break; // Controllo arrotondamenti
default: ceeur01(argc, argv); break; // Conversione ditte cespiti
}
return 0;
}

104
ce/ceeur.h Executable file
View File

@ -0,0 +1,104 @@
#ifndef __BAEUR_H
#define __BAEUR_H
#ifndef __APPLICAT_H
#include <applicat.h>
#endif
#ifndef __ISAM_H
#include <isam.h>
#endif
#ifndef __CGLIB01_H
class TBill;
#endif
// Handler personalizzato. Se ritorna true rewrite, altrimenti remove
typedef bool (*record_handler)(TRectype& rec, void* jolly);
typedef void (*zap_function)(int lf, bool euro, void * jolly);
class TEuro_app : public TSkeleton_application
{
TFilename old_study;
protected:
bool goto_lire(long ditta = -1);
bool goto_euro(long ditta = -1);
bool copy_dir(const char* src, const char* dst) const;
void convert_file(int lf, const char* cnv, const char* res,
record_handler rh = NULL, void* jolly = NULL, const char* filter = NULL);
void zap_file(int lf, bool euro = TRUE, const char* filter = NULL) const;
void zap_table(const char * tab, bool euro = TRUE);
bool is_com_file(int lf) const;
bool is_firm_file(int lf) const { return !is_com_file(lf); }
virtual bool create();
virtual bool destroy();
public:
bool get_aree_dati(TFilename& lit, TFilename& eur) const;
bool data_adozione_euro(long firm, TDate& adozione, bool& inizio) const;
bool save_round_bill(const TBill& b) const;
bool load_round_bill(TBill& b) const;
};
class TEuroisamfile : public TIsamtempfile
{
public:
TEuroisamfile(int logicnum, bool euro = FALSE, long firm = -1);
virtual ~TEuroisamfile() { }
};
struct TCG_rmov : public TObject
{
int _gruppo, _conto;
long _sottoconto;
TImporto _importo;
};
class TCG_mov : public TArray
{
enum { MAX_CG_ROWS = 98};
protected:
const TCG_rmov& row(int i) const { return (const TCG_rmov&)*objptr(i); }
void crea_testata(TLocalisamfile& mov, const TString& caus,
const TDate& datareg, const TString& desc) const;
void crea_riga(const TRectype& mov, TRectype& rmov, int r) const;
void update_saldo(const TRectype& mov, const TRectype& rmov, TLocalisamfile& saldi);
public:
void add(int g, int c, long s, char sez, const real& imp);
void add(const TBill& bill, const TImporto& imp);
TImporto save(const TDate& datareg, const TString& caus, const TString& desc,
const TBill& contro, bool adeuro, bool convert, bool invert);
TImporto calc_bil(bool convert, bool invert); // Sommatoria delle righe
};
class TCG_movs : public TArray
{
public:
int indbil(int g, int c) const;
TCG_mov& mov(int ib);
int add(int g, int c, long s, char sez, const real& imp);
TImporto save(const TDate& datareg, const TString& caus, const TString& desc, const TBill& contro,
bool adeuro, bool convert, bool invert);
};
bool dir_equal(const char* dir1, const char* dir2);
void convert_import(TRectype& rec, const char* str);
void zero_import(TRectype& rec, const char* str);
void keep_import(TRectype& rec, const char* str);
const TString& build_name(int logicnum, bool euro, long firm);
bool dbf_exists(int logicnum, bool euro = FALSE, long firm = -1);
const real EURO(1936.27);
int ceeur01(int argc, char* argv[]);
int ceeur02(int argc, char* argv[]);
#endif

3
ce/ceeur.url Executable file
View File

@ -0,0 +1,3 @@
#include <default.url>
#include <mainmenu.url>

441
ce/ceeur01.cpp Executable file
View File

@ -0,0 +1,441 @@
#include <applicat.h>
#include <automask.h>
#include <browfile.h>
#include <dongle.h>
#include <execp.h>
#include <modaut.h>
#include <prefix.h>
#include <progind.h>
#include <relation.h>
#include <nditte.h>
#include <partite.h>
#include <scadenze.h>
#include <pagsca.h>
#include <saldi.h>
#include "ceeur.h"
#include "ceeur10.h"
#include "ceeur11.h"
#include "movce.h"
#include "../cg/cglib01.h"
#include "../mg/mag.h"
#include "../mg/movmag.h"
#include "../mg/rmovmag.h"
#include "../mg/mglib.h"
///////////////////////////////////////////////////////////
// Main app
///////////////////////////////////////////////////////////
class TEuro01_app : public TEuro_app
{
TEsercizi_contabili _esc;
protected:
virtual bool create();
virtual void main_loop();
public:
TEsercizi_contabili& esc() { return _esc; }
void copy_cespi();
void convert_saldi(int codes);
void convert_saldi_file(int lf, int codes);
void convert_mov(int codes, bool infra);
void convert_mov_file(int lf, int codes);
KEY convert_firm(long ditta);
};
inline TEuro01_app& app() { return (TEuro01_app&)main_app(); }
///////////////////////////////////////////////////////////
// Step 1
///////////////////////////////////////////////////////////
class TEuro03_mask : public TAutomask
{
void fill_ditte();
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro03_mask() : TAutomask("ceeur10") { }
};
void TEuro03_mask::fill_ditte()
{
TFilename lit, eur;
app().get_aree_dati(lit, eur);
TRelation rel(LF_NDITTE);
TCursor cur(&rel);
const TRectype& curr = rel.curr();
const long items = cur.items();
cur.freeze();
TSheet_field& ditte = sfield(F10_DITTE);
ditte.destroy();
for (cur = 0L; cur.pos() < items; ++cur)
{
const long ditta = curr.get_long(NDT_CODDITTA);
if (prefix().exist(ditta))
{
TToken_string& row = ditte.row(-1);
row.add(ditta);
row.add(curr.get(NDT_RAGSOC));
TFilename firm;
firm.format("%s/%05ldA", (const char*)eur, ditta);
if (firm.exist())
{
row.add("X");
firm.add("prassid.ini");
TConfig ini(firm, "Euro");
TString16 dde = ini.get("DataAdozione");
if (dde.empty()) dde = "01-01-2002";
row.add(dde);
if (ini.get_bool("Cespiti"))
row.add("X");
if (field(F10_DITTA).empty())
{
set(F10_DITTA, ditta);
set(F10_RAGSOC, row.get(1));
}
}
else
{
ditte.disable_row(ditte.items()-1);
}
}
}
ditte.force_update();
}
bool TEuro03_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F10_DITTA:
if (e == fe_modify || e == fe_close)
{
TSheet_field& s = sfield(F10_DITTE);
TEdit_field& f = efield(F10_DITTA);
const long ditta = atol(o.get());
for (int r = s.items()-1; r >= 0; r--)
{
TToken_string& row = s.row(r);
const long d = row.get_long(0);
if (d == ditta)
{
set(F10_RAGSOC, row.get());
break;
}
}
if (r < 0)
return error_box(f.get_warning());
}
break;
case F10_DITTE:
if (e == fe_init)
fill_ditte();
if (e == se_query_add || e == se_query_del)
return FALSE;
if (e == se_enter)
{
TSheet_field& s = sfield(F10_DITTE);
TToken_string& r = s.row((int)jolly);
set(F10_DITTA, r.get(0));
set(F10_RAGSOC, r.get());
}
break;
default:
break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Step 2 - Conversione ditta
///////////////////////////////////////////////////////////
class TEuro11_mask : public TAutomask
{
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TEuro11_mask();
};
TEuro11_mask::TEuro11_mask() : TAutomask("ceeur11")
{
disable(F11_ADOZIONE);
}
bool TEuro11_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
///////////////////////////////////////////////////////////
// Conversione ditta
///////////////////////////////////////////////////////////
KEY TEuro01_app::convert_firm(long ditta)
{
TFilename lit, eur;
get_aree_dati(lit, eur);
prefix().set_studio(lit, ditta);
TString16 firm; firm.format("%05ldA", ditta);
TFilename litf = lit; litf.add(firm);
TFilename eurf = eur; eurf.add(firm);
TFilename europrassid;
europrassid = eurf; europrassid.add("prassid.ini");
TDate adozione;
bool already_present = FALSE;
if (!adozione.ok())
{
TConfig prassid(europrassid, "Euro");
already_present = prassid.get_bool("Cespiti");
adozione = prassid.get("DataAdozione");
}
bool do_copy = TRUE;
bool do_saldi = TRUE;
bool do_movim = TRUE;
TEuro11_mask m;
m.set(F11_DITTA, ditta, TRUE);
m.set(F11_DATI, lit);
m.set(F11_DATIE, eur);
m.set(F11_ADOZIONE, adozione);
m.enable(F11_COPY, already_present);
m.set(F11_COPY, do_copy ? "X" : "");
m.enable(F11_SALDI, already_present);
m.set(F11_SALDI, do_saldi ? "X" : "");
m.enable(F11_MOVIM, already_present);
m.set(F11_MOVIM, do_movim ? "X" : "");
KEY k = m.run();
if (k == K_ENTER)
{
if (already_present && !yesno_box("Si conferma la sovrascrittura dei cespiti della ditta %ld in Euro?", ditta))
return K_ESC;
do_copy = m.get_bool(F11_COPY);
do_saldi = m.get_bool(F11_SALDI);
do_movim = m.get_bool(F11_MOVIM);
const bool infra = adozione.day() != 1 || adozione.month() != 1;
const int codes = infra ? _esc.date2esc(adozione) : _esc.date2prevesc(adozione);
if (do_copy)
copy_cespi();
if (do_saldi)
convert_saldi(codes);
if (do_movim)
convert_mov(codes, infra);
if (!already_present)
{
TConfig prassid(europrassid, "Euro");
prassid.set("Cespiti", "X");
}
}
return k;
}
///////////////////////////////////////////////////////////
// Copia cespiti
///////////////////////////////////////////////////////////
struct TCespi_data
{
int _codes;
TEsercizi_contabili _esc;
TLocalisamfile* _movcelit;
TEuroisamfile* _movce;
public:
TCespi_data(int codes, bool movce = FALSE);
~TCespi_data();
};
TCespi_data::TCespi_data(int codes, bool movce)
: _codes(codes), _movce(NULL)
{
if (movce)
{
_movcelit = new TLocalisamfile(LF_MOVCE);
_movce = new TEuroisamfile(LF_MOVCE, TRUE);
}
}
TCespi_data::~TCespi_data()
{
if (_movce)
{
delete _movce;
delete _movcelit;
}
}
void TEuro01_app::copy_cespi()
{
convert_file(LF_CESPI, NULL, NULL);
}
///////////////////////////////////////////////////////////
// Conversione saldi
///////////////////////////////////////////////////////////
HIDDEN bool codes_filter(TRectype& rec, void* jolly)
{
const TCespi_data* data = (const TCespi_data*)jolly;
const int codrec = rec.get_int("CODES");
return data->_codes == codrec;
}
void TEuro01_app::convert_saldi_file(int lf, int codes)
{
TToken_string fields;
TString desc;
if (lf > LF_TAB)
{
TLocalisamfile file(lf);
const TRectype& rec = file.curr();
for (int i = rec.items()-1; i >= 0; i--)
{
const char* name = rec.fieldname(i);
const int length = rec.length(name);
const int ndec = rec.ndec(name);
if (length >= 9 && ndec >= 2)
fields.add(name);
}
desc << "Conversione " << file.description();
}
TCespi_data data(codes);
convert_file(lf, fields, NULL, codes_filter, (void*)&data);
}
void TEuro01_app::convert_saldi(int codes)
{
convert_saldi_file(LF_SALCE, codes);
convert_saldi_file(LF_AMMCE, codes);
}
///////////////////////////////////////////////////////////
// Conversione movimenti cespiti
///////////////////////////////////////////////////////////
HIDDEN bool mov_filter(TRectype& rec, void* jolly)
{
TCespi_data* data = (TCespi_data*)jolly;
TDate dtmov;
switch (rec.num())
{
case LF_MOVCE:
dtmov = rec.get(MOVCE_DTMOV);
break;
default:
{
CHECK(data->_movce, "Bad TCespi_data");
const TString16 idmov = rec.get(MOVCE_IDMOV);
TRectype& head = data->_movce->curr();
head.zero();
head.put(MOVCE_IDMOV, idmov);
if (data->_movce->read(_isgteq) == NOERR)
{
if (head.get(MOVCE_IDMOV) == idmov)
dtmov = head.get(MOVCE_DTMOV);
}
}
break;
}
const int codrec = data->_esc.date2esc(dtmov);
return data->_codes == codrec;
}
void TEuro01_app::convert_mov_file(int lf, int codes)
{
TToken_string fields;
if (lf > LF_TAB)
{
TLocalisamfile file(lf);
const TRectype& rec = file.curr();
for (int i = rec.items()-1; i >= 0; i--)
{
const char* name = rec.fieldname(i);
const int length = rec.length(name);
const int ndec = rec.ndec(name);
if (length >= 9 && ndec >= 2)
fields.add(name);
}
}
TCespi_data data(codes, lf != LF_MOVCE);
convert_file(lf, fields, NULL, mov_filter, (void*)&data);
}
void TEuro01_app::convert_mov(int codes, bool infra)
{
if (infra)
{
convert_mov_file(LF_MOVCE, codes);
convert_mov_file(LF_MOVAM, codes);
convert_mov_file(LF_AMMMV, codes);
}
else
{
zap_file(LF_MOVCE);
zap_file(LF_MOVAM);
zap_file(LF_AMMMV);
}
}
///////////////////////////////////////////////////////////
// Main
///////////////////////////////////////////////////////////
bool TEuro01_app::create()
{
TFilename lit, eur;
if (!app().get_aree_dati(lit, eur))
return error_box("Non esiste lo studio in Euro di destinazione");
return TEuro_app::create();
}
void TEuro01_app::main_loop()
{
long ditta = 0L;
if (goto_lire())
{
TEuro03_mask m;
if (m.run() == K_ENTER)
ditta = m.get_long(F10_DITTA);
}
if (ditta > 0L)
convert_firm(ditta);
}
int ceeur01(int argc, char* argv[])
{
TEuro01_app ma;
ma.run(argc, argv, "Conversione Cespiti Euro");
return 0;
}

4
ce/ceeur01.h Executable file
View File

@ -0,0 +1,4 @@
#define F01_DATI 101
#define F01_DATIE 102

218
ce/ceeur02.cpp Executable file
View File

@ -0,0 +1,218 @@
#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <relation.h>
#include <viswin.h>
#include "ceeur.h"
#include "ceeur20.h"
#include "ammce.h"
#include "cespi.h"
#include "salce.h"
class TEuro02_app : public TEuro_app
{
protected:
virtual void main_loop();
public:
real valore_ammortizzabile(const TRelation& rel, int tipo_sit) const;
real fondo(const TRelation& rel, int tipo_sit) const;
real confronta_valori(const real& val_lit, const real& val_eur) const;
void print_arr(int tipo_sit) const;
};
///////////////////////////////////////////////////////////
// Maschera di selezione
///////////////////////////////////////////////////////////
class TEuro02_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TEuro02_mask() : TAutomask("ceeur20") { }
};
bool TEuro02_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_DITTA:
if (e == fe_close)
{
const long ditta = atol(o.get());
main_app().set_firm(ditta);
}
break;
default: break;
}
return TRUE;
}
///////////////////////////////////////////////////////////
// Applicazione principale
///////////////////////////////////////////////////////////
real TEuro02_app::confronta_valori(const real& val_lit, const real& val_eur) const
{
real expected_val_eur = val_lit / EURO; expected_val_eur.round(2);
real error = expected_val_eur - val_eur;
return error;
}
real TEuro02_app::valore_ammortizzabile(const TRelation& rel, int tipo_sit) const
{
const TRectype& salpro = rel.curr();
real val = salpro.get_real(SALCE_CSTO) - salpro.get_real(SALCE_PLUSREIN) +
salpro.get_real(SALCE_RIV75) + salpro.get_real(SALCE_RIV83);
if (tipo_sit == 1)
{
val -= salpro.get_real(SALCE_VNONAMM);
val += salpro.get_real(SALCE_RIVGF);
}
if (tipo_sit == 2)
{
val += salpro.get_real(SALCE_RIVGC);
}
const real riv90 = salpro.get(SALCE_RIV90);
const real riv91 = salpro.get(SALCE_RIV91);
if (riv90 != ZERO || riv91 != ZERO)
{
const int annipost90 = salpro.get_int(SALCE_ANNIPOST90);
if (riv91 != ZERO || annipost90 >= 3)
val += riv90;
}
val += riv91;
return val;
}
real TEuro02_app::fondo(const TRelation& rel, int tipo_sit) const
{
const TString16 idcesp = rel.curr().get(SALCE_IDCESPITE);
const TRectype& ammpro = rel.curr(LF_AMMCE);
real fondo; // Fondo ammortamento
if (ammpro.get(AMMCE_IDCESPITE) == idcesp)
{
if (ammpro.get_int(AMMCE_TPAMM) == tipo_sit)
{
fondo += ammpro.get_real(AMMCE_QNORP);
fondo += ammpro.get_real(AMMCE_QANTP);
fondo += ammpro.get_real(AMMCE_QACCP);
fondo += ammpro.get_real(AMMCE_QPERSEP);
fondo += ammpro.get_real(AMMCE_QPPRIVATEP);
fondo += ammpro.get_real(AMMCE_FPRIVATOP);
fondo += ammpro.get_real(AMMCE_QNOR);
fondo += ammpro.get_real(AMMCE_QANT);
fondo += ammpro.get_real(AMMCE_QACC);
fondo += ammpro.get_real(AMMCE_QPERSE);
fondo += ammpro.get_real(AMMCE_QPPRIVATE);
fondo += ammpro.get_real(AMMCE_FPRIVATO);
}
}
else
{
fondo = ZERO;
}
return fondo;
}
void TEuro02_app::print_arr(int tipo_sit) const
{
TViswin vw(NULL, "Controllo arrotondamenti", FALSE, TRUE, FALSE, 0, 0, 0, 0, FALSE);
vw.maximize();
vw.open_modal();
TString expr;
expr << "CODES==CODES|IDCESPITE==IDCESPITE|TPSALDO==2|TPAMM==" << tipo_sit;
TRelation rel_lit(LF_SALCE);
rel_lit.add(LF_AMMCE, expr);
TEuroisamfile* salce_eur = new TEuroisamfile(LF_SALCE, TRUE);
TEuroisamfile* ammce_eur = new TEuroisamfile(LF_AMMCE, TRUE);
TRelation rel_eur(salce_eur);
rel_eur.add(LF_AMMCE, expr);
rel_eur.replacef(ammce_eur, LF_AMMCE, expr);
rel_eur.add(LF_CESPI, "IDCESPITE==IDCESPITE");
TCursor cur_eur(&rel_eur, "(CODES==2001)&&(TPSALDO==2)");
const long items = cur_eur.items();
cur_eur.freeze();
const TRectype& salce = cur_eur.curr();
const TRectype& cespi = cur_eur.curr(LF_CESPI);
for (cur_eur = 0L; cur_eur.pos() < items; ++cur_eur)
{
rel_lit.curr() = cur_eur.curr();
if (rel_lit.read() == NOERR)
{
const TString16 idcespite = salce.get(SALCE_IDCESPITE);
const real val_amm_lit = valore_ammortizzabile(rel_lit, tipo_sit);
const real val_amm_eur = valore_ammortizzabile(rel_eur, tipo_sit);
const real fondo_lit = fondo(rel_lit, tipo_sit);
const real fondo_eur = fondo(rel_eur, tipo_sit);
const real residuo_lit = val_amm_lit - fondo_lit;
const real residuo_eur = val_amm_eur - fondo_eur;
const real err = confronta_valori(residuo_lit, residuo_eur);
if (err <= -0.01 || err >= 0.01)
{
TString str;
str << "Cespite " << idcespite << " - " << cespi.get(CESPI_DESC);
str << " - Situazione ";
switch (tipo_sit)
{
case 2: str << "Civilistica"; break;
case 3: str << "Gestionale"; break;
default: str << "Fiscale"; break;
}
vw.add_line(str); str.cut(0);
str << "Residuo in Lire " << residuo_lit.string(".");
str << " - Residuo in Euro " << residuo_eur.string(".2");
vw.add_line(str); str.cut(0);
str << "Errore di arrotondamento in Euro " << err.string(".2");
vw.add_line(str); str.cut(0);
vw.add_line(str);
}
}
}
vw.close_print();
vw.run();
vw.close_modal();
}
void TEuro02_app::main_loop()
{
goto_lire();
TEuro02_mask m;
while (m.run() == K_ENTER)
{
const int tipo_sit = m.get_int(F_TIPO);
print_arr(tipo_sit);
}
}
int ceeur02(int argc, char* argv[])
{
TEuro02_app aa;
aa.run(argc, argv, "Controllo arrotondamenti");
return 0;
}

12
ce/ceeur10.h Executable file
View File

@ -0,0 +1,12 @@
#define F10_DITTA 201
#define F10_RAGSOC 202
#define F10_DITTE 203
#define S10_DITTA 101
#define S10_RAGSOC 102
#define S10_ESISTE 103
#define S10_ADOZIONE 104
#define S10_CESPITI 105

91
ce/ceeur10.uml Executable file
View File

@ -0,0 +1,91 @@
#include "ceeur10.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Selezione Ditte" 0 0 80 018
NUMBER F10_DITTA 5
BEGIN
PROMPT 1 1 "Ditta da convertire "
CHECKTYPE REQUIRED
WARNING "Specificare una ditta tra quelle elencate di seguito"
END
STRING F10_RAGSOC 50
BEGIN
PROMPT 28 1 ""
FLAGS "D"
END
SPREADSHEET F10_DITTE
BEGIN
PROMPT 0 2 ""
ITEM "Ditta"
ITEM "Ragione Sociale@50"
ITEM "Esiste in Euro"
ITEM "Data adozione"
ITEM "Cespiti convertiti"
END
ENDPAGE
ENDMASK
PAGE "Ditta" -1 -1 64 8
NUMBER S10_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "D"
END
STRINGA S10_RAGSOC 50
BEGIN
PROMPT 1 3 "Rag. Soc. "
END
BOOLEAN S10_ESISTE
BEGIN
PROMPT 1 4 "Esiste in Euro"
FLAGS "D"
END
BOOLEAN S10_CESPITI
BEGIN
PROMPT 31 4 "Cespiti convertiti"
FLAGS "D"
END
DATE S10_ADOZIONE
BEGIN
PROMPT 1 5 "Data adozione Euro "
FLAGS "D"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

12
ce/ceeur11.h Executable file
View File

@ -0,0 +1,12 @@
#define F11_DITTA 101
#define F11_RAGSOC 102
#define F11_DATI 103
#define F11_DATIE 104
#define F11_ADOZIONE 105
#define F11_COPY 200
#define F11_SALDI 201
#define F11_MOVIM 202
#define F11_LOG 301

88
ce/ceeur11.uml Executable file
View File

@ -0,0 +1,88 @@
#include "ceeur11.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Conversione ditta" 0 0 80 18
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 1 "@bDitta da convertire"
END
NUMBER F11_DITTA 5
BEGIN
PROMPT 2 2 "Ditta "
USE LF_NDITTE
INPUT CODDITTA F11_DITTA
OUTPUT F11_RAGSOC RAGSOC
CHECKTYPE NORMAL
FLAGS "DF"
END
STRING F11_RAGSOC 50
BEGIN
PROMPT 21 2 ""
FLAGS "D"
END
STRING F11_DATI 50
BEGIN
PROMPT 2 3 "Area dati in Lire "
FLAGS "D"
END
STRING F11_DATIE 50
BEGIN
PROMPT 2 4 "Area dati in Euro "
FLAGS "D"
END
DATE F11_ADOZIONE
BEGIN
PROMPT 2 5 "Data adozione Euro "
USE ESC
INPUT D0 F11_ADOZIONE
DISPLAY "Codice Esercizio" CODTAB
DISPLAY "Inizio Esercizio" D0
DISPLAY "Fine Esercizio" D1
OUTPUT F11_ADOZIONE D0
CHECKTYPE SEARCH
ADD NONE
FLAGS "D"
END
GROUPBOX DLG_NULL 78 5
BEGIN
PROMPT 1 10 "@bOperazioni"
END
BOOLEAN F11_COPY
BEGIN
PROMPT 2 11 "Copia cespiti"
END
BOOLEAN F11_SALDI
BEGIN
PROMPT 2 12 "Conversione saldi e categorie 2001"
END
BOOLEAN F11_MOVIM
BEGIN
PROMPT 2 13 "Conversione movimenti 2001"
END
ENDPAGE
ENDMASK

3
ce/ceeur20.h Executable file
View File

@ -0,0 +1,3 @@
#define F_DITTA 101
#define F_RAGSOC 102
#define F_TIPO 103

53
ce/ceeur20.uml Executable file
View File

@ -0,0 +1,53 @@
#include "ceeur20.h"
TOOLBAR "" 0 -3 0 3
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 ""
END
ENDPAGE
PAGE "Controllo arrotondamenti" -1 -1 0 -3
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 0 1 "@bDitta"
END
NUMBER F_DITTA 5
BEGIN
PROMPT 1 2 "Ditta "
FLAGS "F"
USE LF_NDITTE
INPUT CODDITTA F_DITTA
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_DITTA CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 26 2 ""
FLAGS "D"
END
RADIOBUTTON F_TIPO 1 40
BEGIN
PROMPT 1 6 "@bSituazione da controllare"
ITEM "1|Situazione Fiscale"
ITEM "2|Situazione Civilistica"
ITEM "3|Situazione Gestionale"
END
ENDPAGE
ENDMASK

View File

@ -30,7 +30,9 @@ void TDitta_cespiti::load_default()
_specie = str;
_data_primi_ricavi = dit.get("CADTR");
_anno_tuir = dit.get_int("CATSU");
_anno_tuir = dit.get_int("CATSU");
if (_anno_tuir == 0 || _anno_tuir == 1) // Demenzialmente può essere memorizzato come 0 o 1
_anno_tuir += 1988;
load_records();
}
@ -74,6 +76,9 @@ void TDitta_cespiti::set_attivita(int esercizio, int gruppo, const char* specie)
_data_primi_ricavi = dit.get("CADTR");
_anno_tuir = dit.get_int("CATSU");
if (_anno_tuir == 0 || _anno_tuir == 1) // Demenzialmente può essere memorizzato come 0 o 1
_anno_tuir += 1988;
_ditta = prefix().get_codditta();
load_records();
@ -257,8 +262,8 @@ bool TDitta_cespiti::on_category_event(TOperable_field& o, TField_event e, long
if (e == fe_button)
{
const char* fields = by_code ? "CODTAB[7,8]|S0" : "S0|CODTAB[7,8]";
const char* header = by_code ? "Categoria|Descrizione@60" : "Descrizione@60|Categoria";
const char* fields = by_code ? "CODTAB[7,8]|S0|I0" : "S0|CODTAB[7,8]|I0";
const char* header = by_code ? "Categoria|Descrizione@60|Tipo beni" : "Descrizione@60|Categoria|Tipo beni";
const char* sorter = by_code ? "CODTAB[7,8]" : "S0";
TRelation rel("%CAC");

View File

@ -93,8 +93,8 @@ Module = 11
Flags = ""
Item_01 = "Anagrafica cespiti", "ce0 -4", "F"
Item_02 = "Movimenti", "ce1 -4", "F"
Item_03 = "Scelte ammortamento per categoria", "", ""
Item_04 = "Scelta ammortamento per cespite", "", ""
Item_03 = "Scelte ammortamento per categoria", "ce1 -3", "F"
Item_04 = "Scelta ammortamento per cespite", "ce1 -2", "F"
Item_05 = "Forzatura ammortamento su cespiti", "ce1 -0", "F"
Item_06 = "Forzatura ammortamento su movimenti", "ce1 -1", "F"
Item_07 = "Esecuzione calcolo ammortamenti", "ce2 -0", "F"

View File

@ -172,14 +172,6 @@ BEGIN
WARNING "Percentuale massimo ammortamento fiscale obbligatoria"
END
NUMBER F_NUMANNI 3
BEGIN
PROMPT 2 14 "Numero anni per ammortamento costi "
FIELD I3
GROUP GR_IMMAT GR_PLURI
WARNING "Numero di anni per ammortamento costi obbligatorio"
END
LIST F_TIPOAMMO 1 12
BEGIN
PROMPT 2 15 "Tipo ammortamento beni immateriali "
@ -191,6 +183,15 @@ BEGIN
GROUP GR_IMMAT
END
NUMBER F_NUMANNI 3
BEGIN
PROMPT 2 14 "Numero anni per ammortamento costi "
FIELD I3
GROUP GR_IMMAT GR_PLURI
WARNING "Numero di anni per ammortamento costi obbligatorio"
END
//Campi per gruppo Costi pluriennali//
LIST F_TIPOVINC 1 8
BEGIN
@ -235,3 +236,8 @@ BEGIN
PROMPT 2 20 "Sospeso"
FIELD B4
END
ENDPAGE
ENDMASK

View File

@ -109,6 +109,7 @@ END
BOOLEAN F_BOLLATO
BEGIN
PROMPT 2 6 "Bollato stampato"
FLAGS "D"
FIELD B1
END
@ -122,5 +123,6 @@ END
BOOLEAN F_CHIUSO
BEGIN
PROMPT 2 8 "Esercizio chiuso"
FLAGS "D"
FIELD B2
END

View File

@ -15,4 +15,7 @@
#define F_TIPO_RIP 121
#define F_AMM_VEND 122
#define F_RAGGUAGLIO 123
#define F_ESPOSIZIONE 124
#define F_ESPOSIZIONE 124
#define F_DURATA 125
#define F_COEFF_DURATA 126

View File

@ -108,7 +108,7 @@ BEGIN
FIELD B7
END
GROUPBOX DLG_NULL 76 6
GROUPBOX DLG_NULL 76 7
BEGIN
PROMPT 1 10 "@BParametri di calcolo"
FLAGS "R"
@ -148,3 +148,17 @@ BEGIN
PROMPT 2 14 "Esposizione fondi per ammortamenti diretti su LIBRO CESPITI"
FIELD B5
END
NUMBER F_DURATA 3
BEGIN
PROMPT 2 15 "Giorni di durata esercizio "
FLAGS "DG"
FIELD I3
END
NUMBER F_COEFF_DURATA 11 9
BEGIN
PROMPT 41 15 "Coefficiente di durata "
FLAGS "DG"
FIELD S5
END

View File

@ -27,8 +27,8 @@ BEGIN
DISPLAY "Giorno" CODTAB[7,8]
DISPLAY "Mese" CODTAB[5,6]
DISPLAY "Anno" CODTAB[1,4]
DISPLAY "Limite autovetture@20 " R1
DISPLAY "Limite autocaravan@20 " R2
DISPLAY "Limite autovetture 1@20 " R1
DISPLAY "Limite autovetture 2@20 " R2
DISPLAY "Limite motocicli@20 " R3
DISPLAY "Limite ciclomotori@20 " R4
OUTPUT F_ANNO CODTAB[1,4]
@ -60,13 +60,13 @@ END
CURRENCY F_AUTO1 15
BEGIN
PROMPT 2 6 "Limite autovetture "
PROMPT 2 6 "Limite autovetture 1 "
FIELD R0
END
CURRENCY F_AUTO2 15
BEGIN
PROMPT 2 7 "Limite autocaravan "
PROMPT 2 7 "Limite autovetture 2 "
FIELD R1
END

View File

@ -25,4 +25,4 @@ CSCEN|8|1|0|Scelta ammortamento 100%
DATE|5|8|0|Data operazione
TPOP|2|1|0|Tipo operazione (<M>odifica, <C>reazione, <A>nnullo)
1
CODES+CODCGRA+CODCGR+CODCAT|
CODES+CODCGRA+CODSPA+CODCAT|

View File

@ -498,7 +498,7 @@ bool TCaus_app::ss_notify(TSheet_field& s, int r, KEY k)
}
break;
case K_ENTER:
if (s.row(r).get_int(3) == 0) // riga azzerata
if (s.row(r).get_int(3) == 0 && s.row(r).get_char(1) <= ' ') // riga azzerata
app().clear(r); // pulisco la riga anche nell'array
break;
default:
@ -519,8 +519,8 @@ bool TCaus_app::sezione_hndl(TMask_field& f, KEY k)
if (sez != 'A' && sez != 'D')
return f.error_box("E' necessario specificare la sezione D/A");
}
else
f.reset();
// else
// f.reset();
}
return TRUE;
@ -768,7 +768,8 @@ int TCaus_app::re_write(const TMask& m, bool re)
{
TToken_string &riga = ss().row(i);
const int g = riga.get_int(3);
if (g > 0)
const char sezione = riga.get_char(1);
if (g > 0 || sezione > ' ')
{
TRectype & r = _rcaus_rec->row(i+1, TRUE);
const char sezione = riga.get_char(1);

View File

@ -31,6 +31,7 @@
#define F_DES_DOC 128
#define F_DES_REG 129
#define F_MOVIND 130
#define F_SOLAIVA 131
#define SS_SEZIONE 102
#define SS_TIPOCF 103

View File

@ -1720,7 +1720,17 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
intrini.tempdir();
intrini.add("ActIntra.ini");
TConfig intro(intrini, "Transaction");
TConfig intro(intrini, "Transaction");
if (action == "Modify")
{
TString16 key;
key << m.get(F_NUMREG);
const TRectype & intra = cache().get(LF_INTRA, key);
if (intra.empty())
action = "Insert";
}
intro.set("Action", action);
TString str; // Stringa jolly di lavoro
@ -1739,10 +1749,14 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
intro.set("TIPOMOV", "A");
intro.set("TIPOCF", "F");
intro.set("CODCF", m.get(F_FORNITORE));
}
intro.set("TOTDOC", m.get(F_CORRLIRE));
}
intro.set("TOTDOC", m.get(F_TOTALE));
intro.set("CODVAL", m.get(F_VALUTAINTRA));
intro.set("CAMBIO", m.get(F_CAMBIOINTRA));
intro.set("DATAREG", m.get(F_DATAREG));
intro.set("NUMDOC", m.get(F_NUMDOC));
intro.set_paragraph(""); // Flush

View File

@ -1391,7 +1391,8 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
if (oldpos >= 0) // Se il conto esisteva anche prima ...
{ // sottrai il vecchio imponibile
TImporto i(a.get_cgs_imp(oldpos));
i -= oldimp;
i -= oldimp;
i.normalize();
a.set_cgs_imp(oldpos, i);
if (i.is_zero()) delimp = oldpos;
}
@ -1399,6 +1400,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
{ // sottrai la vecchia imposta
TImporto i(a.get_cgs_imp(oldposiva));
i -= oldiva;
i.normalize();
a.set_cgs_imp(oldposiva, i);
if (i.is_zero()) deliva = oldposiva;
}
@ -1428,8 +1430,9 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
imposta = 0.0;
}
const TImporto newimp = a.real2imp(imponibile, 'I');
TImporto newimp = a.real2imp(imponibile, 'I');
newimp.normalize();
// Aggiorna conto sulla riga contabile
if (newpos < 0)
{
@ -1465,7 +1468,9 @@ bool TPrimanota_application::iva_notify(TSheet_field& iva, int r, KEY k)
if (deliva >= 0 && newposiva != deliva) // E' cambiato il tipo d'imposta
a.reset_cgs_row(deliva); // Azzera il vecchio tipo se necessario
const TImporto newiva = a.real2imp(imposta, 'I');
TImporto newiva = a.real2imp(imposta, 'I');
newiva.normalize();
if (newposiva < 0)
{
if (!imposta.is_zero()) // Se c'e' imposta ...
@ -1659,7 +1664,7 @@ bool TPrimanota_application::sheet_clifo_handler(TMask_field& f, KEY k)
m.set(gid-1, c.tipo() == 'C' ? "C" : "F");
m.set(gid, c.gruppo());
m.set(cid, c.conto());
}
}
}
}
}
@ -2214,6 +2219,12 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
cp.on_hit(); // lo ricopia eventualmente a pag.3
}
}
if (cf == 'F')
{
const TString16 valintra(clifo.get("VALINTRA"));
if (!valintra.empty())
m.set(F_VALUTAINTRA, valintra, TRUE);
}
}
if (f.focusdirty() && a.is_saldaconto())

63
in/bastird.uml Executable file
View File

@ -0,0 +1,63 @@
#include "../ba/ba3200.h"
PAGE "Stampa Dati Riassuntivi" -1 -1 60 8
NUMBER F_INIZIO1 4
BEGIN
PROMPT 4 1 "Da anno "
USE IRD
INPUT CODTAB[1,4] F_INIZIO1
INPUT CODTAB[5,6] F_INIZIO2
DISPLAY "Anno@15" CODTAB[1,4]
DISPLAY "Mese@10" CODTAB[5,6]
DISPLAY "N.dischetto@10" I0
DISPLAY "Pagine@10" I1
DISPLAY "Righe@10" I2
DISPLAY "Ammontare compl.@18" R0
OUTPUT F_INIZIO1 CODTAB[1,4]
OUTPUT F_INIZIO2 CODTAB[5,6]
FIELD CODTAB[1,4]
GROUP 1
END
LIST F_INIZIO2 20
BEGIN
PROMPT 21 1 "Da mese "
FIELD CODTAB[5,6]
FLAGS "MZ"
GROUP 1
END
NUMBER F_FINE1 4
BEGIN
PROMPT 4 3 "A anno "
COPY USE F_INIZIO1
INPUT CODTAB[1,4] F_FINE1
INPUT CODTAB[5,6] F_FINE2
COPY DISPLAY F_INIZIO1
OUTPUT F_FINE1 CODTAB[1,4]
OUTPUT F_FINE2 CODTAB[5,6]
FIELD CODTAB[1,4]
GROUP 2
END
LIST F_FINE2 20
BEGIN
PROMPT 21 3 "A mese "
FIELD CODTAB[5,6]
FLAGS "MZ"
GROUP 2
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK

6
in/batbird.h Executable file
View File

@ -0,0 +1,6 @@
#define F_ANNO 101
#define F_MESE 102
#define F_NDKT 103
#define F_PAGINE 104
#define F_RIGHE 105
#define F_AMM_COMP 106

17
in/batbird.rpt Executable file
View File

@ -0,0 +1,17 @@
[Headers]
80
Tabella Dati Riassuntivi
1|@3g%s|Anno
1|@10g%s|Mese
1|@15g%s|N.ro Disc.
1|@28g%s|Pagine
1|@38g%s|Righe
1|@45g%s|Ammontare complessivo
[Rows]
1|CODTAB[1,4]|@3g@4,rs
1|CODTAB[5,]|@10@2,rs
1|I0|@21g@4,rn
1|I1|@27g@7,rn
1|I2|@36g@7,rn
1|R0|@48g@18,rpn|###############,@@

69
in/batbird.uml Executable file
View File

@ -0,0 +1,69 @@
#include "batbird.h"
TOOLBAR "Toolbar" 0 19 0 3
#include <toolbar.h>
ENDPAGE
PAGE "Dati riassuntivi" -1 -1 78 18
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 1 "@bDati Riassuntivi"
END
LIST F_MESE 20
BEGIN
PROMPT 2 2 "Mese "
FLAGS "MZ"
FIELD CODTAB[5,6]
KEY 1
END
NUMBER F_ANNO 4
BEGIN
PROMPT 46 2 "Anno "
USE IRD
INPUT CODTAB[1,4] F_ANNO
INPUT CODTAB[5,6] F_MESE
DISPLAY "Anno@15" CODTAB[1,4]
DISPLAY "Mese@10" CODTAB[5,6]
DISPLAY "N.dischetto@10" I0
DISPLAY "Pagine@10" I1
DISPLAY "Righe@10" I2
DISPLAY "Ammontare compl.@18" R0
OUTPUT F_ANNO CODTAB[1,4]
OUTPUT F_MESE CODTAB[5,6]
CHECKTYPE REQUIRED
FIELD CODTAB[1,4]
KEY 1
END
NUMBER F_NDKT 4
BEGIN
PROMPT 2 4 "Numero Dischetto "
FIELD I0
END
NUMBER F_PAGINE 7
BEGIN
PROMPT 2 6 "Pagine "
FIELD I1
END
NUMBER F_RIGHE 7
BEGIN
PROMPT 2 8 "Righe "
FIELD I2
END
CURRENCY F_AMM_COMP 18
BEGIN
PROMPT 2 10 "Ammontare Compl. "
FIELD R0
END
ENDPAGE
ENDMASK

View File

@ -1,3 +1,3 @@
135
0
$rieprett|0|0|156|0|Riepiloghi e rettifiche INTRA|||
$rieprett|9|10|157|0|Riepiloghi e rettifiche INTRA|||

View File

@ -1,5 +1,5 @@
135
23
24
TIPO|7|1|0|Acquisti o Cessioni [A,C]
ANNO|2|4|0|Anno
PERIODO|9|2|0|Periodo (Mese[1,12] / Trimestre[1,4] / Anno [1.,1])
@ -7,7 +7,7 @@ NUMRIG|3|7|0|Numero riga
STATO|1|2|0|Codice ISO dello Stato CEE
PIVA|1|13|0|Partita IVA Cliente/Fornitore
NATURA|7|1|0|Natura della transazione
NOMENCL|3|8|0|Nomenclatura combinata
NOMENCL|1|8|0|Nomenclatura combinata
CONSEGNA|1|3|0|Condizioni di consegna
TRASPORTO|2|1|0|Tipo di trasporto [1,9]
PAESE|1|2|0|Paese di destinazione/provenienza
@ -23,5 +23,6 @@ ANNORETT|6|4|0|Anno rettificato
PERETT|9|2|0|Periodo rettificato
NUMRETT|3|7|0|Riga rettificata
SEGNORETT|1|1|0|Segno della rettifica
FREQUENZA|1|1|0|Frequenza (<M>ensile, <T>rimestrale, <A>nnuale)
1
TIPO+ANNO+PERIODO+NUMRIG|

View File

@ -50,9 +50,19 @@ bool TStampaIntra_form::validate(TForm_item& fld, TToken_string& val)
const int ndec = TCurrency::get_firm_dec() > 0 ? 0 : -3;
num.round(ndec);
fld.set(val);
fld.set(num.string());
return TRUE;
}
else
if (code== "_ROUND")
{
real num(fld.get());
const int ndec = val.get_int();
num.round(ndec);
fld.set(num.string());
return TRUE;
}
return TForm::validate(fld, val);
}
@ -291,6 +301,7 @@ class TStampaIntra_mask : public TIntra_mask
protected:
virtual short type_field() const { return R_TIPO; }
virtual short period_field() const { return R_PERIODO_M; }
virtual int anno() const { return get_int(R_ANNO); }
public:
void print();
@ -304,7 +315,8 @@ TStampaIntra_mask::TStampaIntra_mask()
void TStampaIntra_mask::print()
{
TStampaIntra_form form(tipo() == 'A' ? "in0100a" : "in0100b", tipo(), frequenza(), periodo(), get_int(R_ANNO));
const int anno_s = anno();
TStampaIntra_form form(tipo() == 'A' ? "in0100a" : "in0100b", tipo(), frequenza(anno_s), periodo(), anno_s);
form.print();
}
@ -320,6 +332,7 @@ protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
public:
TStampa_intra() {};
virtual ~TStampa_intra() {};

View File

@ -3,6 +3,7 @@
#include <progind.h>
#include <recarray.h>
#include <relation.h>
#include <tabutil.h>
#include "in0.h"
#include "in0200a.h"
@ -311,6 +312,7 @@ protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual short type_field() const { return F_TIPO; }
virtual short period_field() const { return F_PERIODO_M; }
virtual int anno() const { return get_int(F_ANNO); }
long calcola_totale(TCursor& cur, real& tot) const;
bool write_record(ofstream& out, const TRecord_intra& rec, TIntra_context& ic);
@ -327,7 +329,7 @@ bool TDischetto_mask::on_field_event(TOperable_field& o, TField_event e, long jo
{
case F_RIEPILOGHI:
if (e == fe_button)
::genera_riepiloghi(tipo(), get_int(F_ANNO), periodo());
::genera_riepiloghi(tipo(), anno(), periodo());
break;
default:break;
}
@ -386,13 +388,21 @@ bool TDischetto_mask::write_record(ofstream& out, const TRecord_intra& rec, TInt
void TDischetto_mask::genera_dischetto()
{
TTable ird("IRD");
TIntra_context ic;
ic._tipo = tipo();
ic._freq = frequenza();
ic._anno = get_int(F_ANNO);
ic._anno = anno();
ic._freq = frequenza(ic._anno);
ic._periodo = periodo();
ic._progr = get_long(F_NUMERO);
TString16 codtab; codtab.format("%04d%02d", ic._anno, ic._periodo);
ird.put("CODTAB", codtab);
const bool exist = ird.read() == NOERR;
if (exist && !yesno_box("il periodo indicato e' gia' stato generato,\n devo proseguire"))
return;
TRelation rel(LF_RIEPRETT);
TRectype filter(LF_RIEPRETT);
filter.put("TIPO", ic._tipo);
@ -452,6 +462,18 @@ void TDischetto_mask::genera_dischetto()
if (!write_record(out, rec, ic))
return;
}
codtab.format("%04d%02d", ic._anno, ic._periodo);
ird.put("CODTAB", codtab);
ird.put("I0", ic._progr);
// ird.put("I1", ??? );
ird.put("I2", total);
ird.put("R0", ic._totale_riep + ic._totale_rett);
if (exist)
ird.rewrite();
else
ird.write();
}
TDischetto_mask::TDischetto_mask()

View File

@ -7,6 +7,7 @@
#include "in0.h"
#include "in0500a.h"
#include "inlib01.h"
#include "../cg/cg2103.h"
#include <mov.h>
@ -18,6 +19,7 @@ class TImmissione_mask : public TIntra_mask
{
protected:
virtual short type_field() const { return F_TIPO_MOV; }
virtual int anno() const { return get_date(F_DATA_REG).year(); }
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -35,33 +37,59 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
switch (id)
{
case F_NUM_REG:
if (e == fe_modify)
if (e == fe_modify || e == fe_init)
{
if (main_app().has_module(CGAUT))
{
const TString& numreg = o.get();
const TRectype& mov = cache().get(LF_MOV, numreg);
set(F_NUM_DOC, mov.get(MOV_NUMDOC));
set(F_DATA_DOC, mov.get(MOV_DATADOC));
if (numreg.not_empty())
{
const TRectype& mov = cache().get(LF_MOV, numreg);
if (mov.empty())
return error_box("Il movimento contabile %s non esiste", (const char *) numreg);
else
{
const TString16 caus(mov.get(MOV_CODCAUS));
TCausale c(caus);
if (c.intra())
{
set(F_NUM_DOC, mov.get(MOV_NUMDOC));
set(F_DATA_DOC, mov.get(MOV_DATADOC));
}
else
return error_box("La causale del movimento contabile %s non e' intracomunitaria", (const char *) numreg);
}
}
}
}
break;
case F_TIPO_MOV:
if (e == fe_init || e == fe_modify)
{
TMask& m = sfield(F_RIGHE).sheet_mask();
TSheet_field& s = sfield(F_RIGHE);
TMask& m = s.sheet_mask();
const bool acq = tipo() == 'A';
m.show(-GR_ACQUISTI, acq); // Mostra i gruppi di campi
m.show(-GR_CESSIONI, !acq); // consoni al tipo movimento
s.enable_column(F_PAESE_ORIG, acq);
s.set_column_header(F_PAESE, acq ? "Paese\nProv." : "Paese\nDest.") ;
s.set_column_header(F_PROV, acq ? "Provincia\nDest." : "Provincia\nOrig.") ;
const CheckType chk1 = acq ? CHECK_REQUIRED : CHECK_NORMAL;
field(F_VALUTA).check_type(chk1);
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
m.field(F_CONSEGNA).check_type(chk);
m.field(F_TRASPORTO).check_type(chk);
}
s.force_update();
}
break;
case F_CLIFO:
if (e == fe_modify)
@ -72,7 +100,7 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
if (codval.empty())
codval = curr.get("CODVAL");
set(F_VALUTA, codval);
set(F_VALUTA, codval, TRUE);
}
break;
@ -80,18 +108,32 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
if (e == fe_modify)
{
TEdit_field& cambio = efield(F_CAMBIO);
if (cambio.empty())
if (o.empty())
cambio.reset();
else
{
const TRectype& curr = efield(F_VALUTA).browse()->cursor()->curr();
const TRectype& curr = cache().get("%VAL", o.get());
const TString& s = curr.get("S4");
if (s.not_empty())
cambio.set(s);
else
{
const TString& r = curr.get("R0");
cambio.set(r);
}
cambio.set(s);
}
TSheet_field& s = sfield(F_RIGHE);
const bool enable_val = is_true_value(get(F_VALUTA));
const int rows = s.items();
for (int i = 0; i < rows; i++)
{
const int col = s.cid2index(F_AMM_VALUTA);
s.enable_cell(i, col, enable_val);
TToken_string & r = s.row(i);
if (!enable_val)
r.add("", col);
}
s.force_update();
}
break;
case F_TOT_DOC:
@ -110,14 +152,21 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
case F_AMM_LIRE:
if (e == fe_modify)
{
TMask& m = o.mask();
if (m.get_real(F_AMM_VALUTA).is_zero())
{
TMask& m = o.mask();
TSheet_field& s = sfield(F_RIGHE);
TCurrency curr(real(o.get()));
curr.change_value(get(F_VALUTA), get_real(F_CAMBIO));
m.set(F_AMM_VALUTA, curr, TRUE);
}
const bool enable_val = is_true_value(get(F_VALUTA));
m.enable(F_AMM_VALUTA, enable_val);
if (!enable_val)
m.reset(F_AMM_VALUTA);
else
if (m.get_real(F_AMM_VALUTA).is_zero())
{
curr.change_value(get(F_VALUTA), get_real(F_CAMBIO));
m.set(F_AMM_VALUTA, curr, TRUE);
}
s.force_update();
}
break;
case F_AMM_VALUTA:
@ -135,8 +184,8 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
case F_RIGHE:
return on_sheet_event((TSheet_field&)o, e, int(jolly));
case R_RIEPILOGHI:
if (e == fe_button)
::genera_riepiloghi(tipo());
if (e == fe_button)
::genera_riepiloghi(tipo(), anno(), date2periodo(get_date(F_DATA_REG)));
break;
default:
if (id < F_DITTA && jolly == 1)
@ -148,20 +197,29 @@ bool TImmissione_mask::on_field_event(TOperable_field& o, TField_event e, long j
bool TImmissione_mask::on_sheet_event(TSheet_field& s, TField_event e, int row)
{
if (e == se_notify_modify)
if (e == se_notify_add)
{
real amm_lire;
int rows = s.items();
const bool enable_val = is_true_value(get(F_VALUTA));
const int col = s.cid2index(F_AMM_VALUTA);
for (int i = 0; i < rows; i++)
{
TToken_string & r = s.row(i);
const real val = r.get(s.cid2index(F_AMM_LIRE));
amm_lire += val;
}
s.mask().set(F_TOT_IMM, amm_lire);
s.enable_cell(s.selected(), col, enable_val);
s.force_update();
}
else
if (e == se_notify_modify)
{
real amm_lire;
int rows = s.items();
for (int i = 0; i < rows; i++)
{
TToken_string & r = s.row(i);
const real val = r.get(s.cid2index(F_AMM_LIRE));
amm_lire += val;
}
s.mask().set(F_TOT_IMM, amm_lire);
}
return TRUE;
}
@ -169,30 +227,42 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e,
{
switch (o.dlg())
{
case F_NOMENCLATURA1:
case F_NOMENCLATURA2:
case F_NOMENCLATURA3:
if (e == fe_modify)
if (e == fe_close)
{
TMask& m = o.mask();
if (!o.empty())
{
const TRectype& nom = ((TEdit_field&)o).browse()->cursor()->curr();
if (m.get(F_UMS).empty())
m.set(F_UMS, nom.get("S5"), TRUE);
bool req = frequenza() == 'M';
if (req) // Solo la frequenza mensile puo' obbligare
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
}
else
if (e == fe_modify)
{
TMask& m = o.mask();
if (!o.empty())
{
const char obb = nom.get_char("S4");
req = obb == 'E' || obb == tipo();
TString16 key; key << m.get(F_NOMENCLATURA1) << m.get(F_NOMENCLATURA2) << m.get(F_NOMENCLATURA3);
const TRectype& nom = cache().get("%NOC", key);
m.set(F_UMS, nom.get("S5"), TRUE);
bool req = frequenza(anno()) == 'M';
if (req) // Solo la frequenza mensile puo' obbligare
{
const char obb = nom.get_char("S4");
req = obb == 'E' || obb == tipo();
}
m.field(F_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
m.field(F_MASSA_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
}
else
{
m.set(F_UMS, "", TRUE);
}
m.field(F_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
m.field(F_MASSA_UMS).check_type(req ? CHECK_REQUIRED : CHECK_NORMAL);
}
else
{
m.set(F_UMS, "", TRUE);
}
}
break;
default:
break;
@ -220,10 +290,23 @@ protected:
virtual TMask* get_mask(int) { return _msk; }
virtual bool changing_mask(int mode) { return FALSE; }
virtual bool user_destroy();
virtual bool protected_record(TRectype & rec);
public:
};
bool TImmissione_intra::protected_record(TRectype & rec)
{
const char tipo = rec.get_char("TIPOMOV");
const TDate d(rec.get("DATAREG"));
const int periodo = _msk->date2periodo(d);
bool prot = is_riepilogo(tipo, d.year(), periodo) &&
!yesno_box("Attenzione il movimento appartiene ad un riepilogo\nesistente, vuoi poterlo modificare ugualmente");
_msk->enable(DLG_SAVEREC, !prot);
return prot;
}
bool TImmissione_intra::user_create()
{
open_files(LF_TABCOM, LF_TAB, LF_CLIFO, LF_MOV,

View File

@ -37,9 +37,10 @@
#define F_VALORE_STAT 110
#define F_CONSEGNA 111
#define F_TRASPORTO 112
#define F_PAESE_ORIG 113
#define F_PAESE_DUMMY 213
#define F_PROV 114
#define F_PAESE 113
#define F_PAESE_ORIG 114
#define F_PAESE_DUMMY 214
#define F_PROV 115
#define GR_CESSIONI 1
#define GR_ACQUISTI 2

View File

@ -38,7 +38,7 @@ NUMBER F_NUM_REG 5
BEGIN
PROMPT 1 3 "Numero registrazione "
USE LF_INTRA
JOIN LF_CLIFO INTO TIPOCF=TIPOCF CODCF=CODCF
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
INPUT NUMREG F_NUM_REG
DISPLAY "Numero" NUMREG
DISPLAY "Data@10" DATAREG
@ -46,6 +46,7 @@ BEGIN
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NUM_REG NUMREG
CHECKTYPE REQUIRED
FLAGS "G"
KEY 1
FIELD NUMREG
END
@ -167,7 +168,9 @@ BEGIN
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_VALUTA CODTAB
CHECKTYPE REQUIRED
CHECKTYPE REQUIRED
MESSAGE EMPTY CLEAR,F_CAMBIO
MESSAGE ENABLE,F_CAMBIO
FIELD CODVAL
END
@ -194,6 +197,7 @@ BEGIN
ITEM "Condiz.\nCons.@6"
ITEM "Modo\nTrasp.@5"
ITEM "Paese\nDest.@6"
ITEM "Paese\nOrig.@6"
ITEM "Provincia\nOrig."
FLAGS "A"
USE LF_RINTRA KEY NUMRIG
@ -232,7 +236,7 @@ BEGIN
FIELD NATURA
END
STRING F_NOMENCLATURA1 4
NUMBER F_NOMENCLATURA1 4
BEGIN
PROMPT 36 3 "Nomenclatura combinata "
FLAGS "U"
@ -241,32 +245,37 @@ BEGIN
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
MESSAGE DIRTY,F_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA2
FIELD NOMENCL[1,4]
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA2 2
NUMBER F_NOMENCLATURA2 2
BEGIN
PROMPT 67 3 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
MESSAGE DIRTY,F_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA3
FIELD NOMENCL[5,6]
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA3 2
NUMBER F_NOMENCLATURA3 2
BEGIN
PROMPT 72 3 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
FIELD NOMENCL[7,8]
WARNING "Nomenclatura combinata assente"
END
NUMBER F_MASSA_KG 13 5
@ -306,6 +315,7 @@ STRING F_CONSEGNA 3
BEGIN
PROMPT 43 5 "Condizioni consegna "
USE %ICC
FLAGS "U"
INPUT CODTAB F_CONSEGNA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
@ -330,16 +340,41 @@ BEGIN
GROUP GR_ACQUISTI
END
STRING F_PAESE_ORIG 2
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Paese provenienza "
GROUP GR_ACQUISTI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 7 "Paese destinazione "
GROUP GR_CESSIONI
END
STRING F_PAESE 2
BEGIN
PROMPT 20 7 ""
FLAGS "U"
USE %SCE
INPUT CODTAB F_PAESE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE CODTAB
CHECKTYPE REQUIRED
FIELD PAESE
END
STRING F_PAESE_ORIG 2
BEGIN
PROMPT 1 8 "Paese di origine "
FLAGS "U"
USE %SCE
INPUT CODTAB F_PAESE_ORIG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE_ORIG CODTAB
CHECKTYPE NORMAL
CHECKTYPE REQUIRED
FIELD PAESEORIG
GROUP GR_ACQUISTI
END

View File

@ -10,6 +10,7 @@ class TRiepiloghi_mask : public TIntra_mask
protected:
virtual short type_field() const;
virtual short period_field() const;
virtual int anno() const { return get_int(F_ANNO); }
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
@ -29,12 +30,32 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
{
switch (o.dlg())
{
case F_NOMENCLATURA1:
case F_NOMENCLATURA2:
case F_NOMENCLATURA3:
if (e == fe_close && !query_mode())
{
TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3);
if (key.empty())
return error_box("La nomenclatura combinata e' obbligatoria");
}
else
if (e == fe_init || e == fe_modify)
{
TString16 key; key << get(F_NOMENCLATURA1) << get(F_NOMENCLATURA2) << get(F_NOMENCLATURA3);
const TRectype& nom = cache().get("%NOC", key);
key = nom.get("S5");
set(F_UMS, key);
}
break;
case F_VALORE_STAT:
if (e == fe_init)
{
TMask& m = o.mask();
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);
@ -60,7 +81,7 @@ bool TRiepiloghi_mask::on_field_event(TOperable_field& o, TField_event e, long j
break;
case F_RIEPILOGHI:
if (e == fe_button)
::genera_riepiloghi(tipo(), get_int(F_ANNO));
::genera_riepiloghi(tipo(), anno());
break;
default:
break;
@ -87,6 +108,7 @@ protected:
virtual bool user_create();
virtual TRelation* get_relation() const { return _rel; }
virtual TMask* get_mask(int) { return _msk; }
virtual int write(const TMask& m);
virtual bool changing_mask(int mode) { return FALSE; }
virtual bool user_destroy();
virtual bool get_next_key(TToken_string& k);
@ -140,6 +162,11 @@ void TRiepiloghi_intra::init_insert_mode(TMask& m)
m.enable(F_VALUTA);
}
int TRiepiloghi_intra::write(const TMask& m)
{
_rel->curr().put("FREQUENZA", ((TRiepiloghi_mask &) m).frequenza(m.get_int(F_ANNO)));
return TRelation_application::write(m);
}
void TRiepiloghi_intra::init_query_mode(TMask& m)
{
TEdit_field& numrig = m.efield(F_NUM_RIG);
@ -148,9 +175,15 @@ void TRiepiloghi_intra::init_query_mode(TMask& m)
cur.last_item();
const TRectype& curr = cur.curr();
m.set(F_ANNO, curr.get("ANNO"));
m.set(F_TIPO, curr.get("TIPO"), TRUE);
m.set(F_PERIODO_M, curr.get("PERIODO"));
m.set(F_PERIODO_T, curr.get("PERIODO"));
m.set(F_TIPO, curr.get("TIPO"), TRUE);
if (m.field(F_PERIODO_M).shown())
m.set(F_PERIODO_M, curr.get("PERIODO"));
else
if (m.field(F_PERIODO_T).shown())
m.set(F_PERIODO_T, curr.get("PERIODO"));
else
if (m.field(F_PERIODO_A).shown())
m.set(F_PERIODO_A, curr.get("PERIODO"));
m.disable(F_VALUTA);
}

View File

@ -32,6 +32,8 @@
#define F_NOMENCLATURA2 356
#define F_NOMENCLATURA3 357
#define F_TRASPORTO_DESC 358
#define F_PERIODO_H 359
#define F_UMS 360
#define GR_CESSIONI 1
#define GR_ACQUISTI 2

View File

@ -32,7 +32,31 @@ END
LIST F_PERIODO_M 2 16
BEGIN
PROMPT 1 3 "Periodo "
FLAGS "AM"
ITEM "01|Gennaio"
MESSAGE COPY,F_PERIODO_H
ITEM "02|Febbraio"
MESSAGE COPY,F_PERIODO_H
ITEM "03|Marzo"
MESSAGE COPY,F_PERIODO_H
ITEM "04|Aprile"
MESSAGE COPY,F_PERIODO_H
ITEM "05|Maggio"
MESSAGE COPY,F_PERIODO_H
ITEM "06|Giugno"
MESSAGE COPY,F_PERIODO_H
ITEM "07|Luglio"
MESSAGE COPY,F_PERIODO_H
ITEM "08|Agosto"
MESSAGE COPY,F_PERIODO_H
ITEM "09|Settembre"
MESSAGE COPY,F_PERIODO_H
ITEM "10|Ottobre"
MESSAGE COPY,F_PERIODO_H
ITEM "11|Novembre"
MESSAGE COPY,F_PERIODO_H
ITEM "12|Dicembre"
MESSAGE COPY,F_PERIODO_H
FLAGS "A"
FIELD PERIODO
KEY 1
END
@ -41,13 +65,13 @@ LIST F_PERIODO_T 2 16
BEGIN
PROMPT 1 3 "Periodo "
ITEM "01|Gennaio-Marzo"
MESSAGE COPY,F_PERIODO_M
MESSAGE COPY,F_PERIODO_H
ITEM "02|Aprile-Giugno"
MESSAGE COPY,F_PERIODO_M
MESSAGE COPY,F_PERIODO_H
ITEM "03|Luglio-Settembre"
MESSAGE COPY,F_PERIODO_M
MESSAGE COPY,F_PERIODO_H
ITEM "04|Ottobre-Dicembre"
MESSAGE COPY,F_PERIODO_M
MESSAGE COPY,F_PERIODO_H
FIELD PERIODO
KEY 1
END
@ -56,11 +80,18 @@ LIST F_PERIODO_A 2 16
BEGIN
PROMPT 1 3 "Periodo "
ITEM "01|Annuale"
MESSAGE COPY,F_PERIODO_M
MESSAGE COPY,F_PERIODO_H
FIELD PERIODO
KEY 1
END
NUMBER F_PERIODO_H 2
BEGIN
PROMPT 80 80 ""
FLAGS "HZ"
FIELD PERIODO
END
NUMBER F_ANNO 4
BEGIN
PROMPT 33 3 "Anno "
@ -86,13 +117,9 @@ BEGIN
USE LF_RIEPRETT
INPUT TIPO F_TIPO SELECT
INPUT ANNO F_ANNO SELECT
INPUT PERIODO F_PERIODO_M SELECT
INPUT PERIODO F_PERIODO_H SELECT
INPUT NUMRIG F_NUM_RIG
// DISPLAY "Tipo" TIPO
// DISPLAY "Anno" ANNO
// DISPLAY "Periodo" PERIODO
DISPLAY "Numero" NUMRIG
// DISPLAY "Stato" STATO
DISPLAY "Partita IVA" PIVA
DISPLAY "Natura" NATURA
DISPLAY "Nomenclatura" NOMENCL
@ -100,7 +127,6 @@ BEGIN
DISPLAY "Trasporto" TRASPORTO
DISPLAY "Paese" PAESE
OUTPUT F_PERIODO_M PERIODO
OUTPUT F_PERIODO_T PERIODO
OUTPUT F_NUM_RIG NUMRIG
CHECKTYPE REQUIRED
FIELD NUMRIG
@ -146,7 +172,7 @@ BEGIN
CHECKTYPE REQUIRED
// WARNING "Lunghezza partita IVA errata"
FIELD PIVA
ADD RUN CG0 -1 /uPRASSI
ADD RUN CG0 -1 #F_TIPO_CF
END
STRING F_PARTITA_DESC 50
@ -180,7 +206,7 @@ BEGIN
PROMPT 1 9 "Nomenclatura"
END
STRING F_NOMENCLATURA1 4
NUMBER F_NOMENCLATURA1 4
BEGIN
PROMPT 1 10 "combinata "
FLAGS "U"
@ -189,32 +215,34 @@ BEGIN
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
OUTPUT F_NOMENCL_DESC S0
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA2
MESSAGE DIRTY,F_NOMENCLATURA3
FIELD NOMENCL[1,4]
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA2 2
NUMBER F_NOMENCLATURA2 2
BEGIN
PROMPT 22 10 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
FIELD NOMENCL[5,6]
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA3
MESSAGE DIRTY,F_NOMENCLATURA3
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA3 2
NUMBER F_NOMENCLATURA3 2
BEGIN
PROMPT 28 10 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
FIELD NOMENCL[7,8]
@ -231,13 +259,15 @@ STRING F_CONSEGNA 3
BEGIN
PROMPT 1 11 "Condiz. consegna "
USE %ICC
FLAGS "U"
INPUT CODTAB F_CONSEGNA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CONSEGNA CODTAB
OUTPUT F_CONSEGNA_DESC S0
CHECKTYPE REQUIRED
FIELD CONSEGNA
FIELD CONSEGNA
WARNING "Condizione di consegna assente"
END
STRING F_CONSEGNA_DESC 50
@ -257,6 +287,7 @@ BEGIN
OUTPUT F_TRASPORTO_DESC S0
CHECKTYPE REQUIRED
FIELD TRASPORTO
WARNING "Modo di trasporto assente"
END
STRING F_TRASPORTO_DESC 50
@ -288,8 +319,8 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT F_PAESE CODTAB
CHECKTYPE REQUIRED
CHECKTYPE NORMAL
FIELD PAESE
WARNING "Paese assente"
END
STRING F_PAESE_ORIG 2
@ -299,6 +330,7 @@ BEGIN
CHECKTYPE REQUIRED
FLAGS "U"
FIELD PAESEORIG
WARNING "Paese di origine assente"
END
TEXT DLG_NULL
@ -318,11 +350,13 @@ BEGIN
PROMPT 66 13 ""
FLAGS "U"
FIELD PROV
CHECTYPE REQUIRED
WARNING "Provincia assente"
END
CURRENCY F_AMM_LIRE 18
BEGIN
PROMPT 1 15 "Ammontare in lire "
PROMPT 1 15 "Ammontare "
FIELD AMMLIRE
END
@ -333,6 +367,7 @@ BEGIN
INPUT CODTAB F_VALUTA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
CHECKTYPE NORMAL
OUTPUT F_VALUTA CODTAB
FIELD CODVAL
FLAGS "UZ"
@ -358,14 +393,19 @@ BEGIN
FIELD MASSAKG
END
STRING F_UMS 2
BEGIN
PROMPT 41 17 "In unita'supp."
FLAGS "DU"
END
NUMBER F_MASSA_UMS 18 5
BEGIN
PROMPT 41 17 "in unita' supp. "
PROMPT 59 17 ""
PICTURE ".5"
FIELD MASSAUMS
END
ENDPAGE
ENDMASK

View File

@ -15,6 +15,7 @@ protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual short type_field() const { return F_TIPO; }
virtual short period_field() const { return F_PERIODO_M; }
virtual int anno() const { return get_int(O_ANNO); }
public:
@ -41,7 +42,7 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
{
TMask& m = o.mask();
TString key ; key << main_app().get_firm();
const bool req = frequenza() == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const bool req = frequenza(anno()) == 'M' && !cache().get(LF_NDITTE, key).get_bool("NONOBBSTAT");
const CheckType chk = req ? CHECK_REQUIRED : CHECK_NORMAL;
m.field(F_VALORE_STAT).check_type(chk);

View File

@ -181,41 +181,46 @@ BEGIN
GROUP GR_ORIGINAL
END
STRING O_NOMENCLATURA1 4
NUMBER O_NOMENCLATURA1 4
BEGIN
PROMPT 28 7 "Nomenclatura combinata "
FLAGS "U"
FLAGS "Z"
USE %NOC
INPUT CODTAB[1,4] O_NOMENCLATURA1
INPUT CODTAB[5,6] O_NOMENCLATURA2
INPUT CODTAB[7,8] O_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT O_NOMENCLATURA1 CODTAB[1,4]
OUTPUT O_NOMENCLATURA2 CODTAB[5,6]
OUTPUT O_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
MESSAGE DIRTY,O_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 O_NOMENCLATURA2
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
END
STRING O_NOMENCLATURA2 2
NUMBER O_NOMENCLATURA2 2
BEGIN
PROMPT 58 7 ""
FLAGS "U"
FLAGS "Z"
COPY ALL O_NOMENCLATURA1
CHECKTYPE NORMAL
MESSAGE DIRTY,O_NOMENCLATURA3
VALIDATE REQIF_FUNC 1 O_NOMENCLATURA3
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
END
STRING O_NOMENCLATURA3 2
NUMBER O_NOMENCLATURA3 2
BEGIN
PROMPT 63 7 ""
FLAGS "U"
FLAGS "Z"
COPY ALL O_NOMENCLATURA1
CHECKTYPE NORMAL
GROUP GR_ORIGINAL
WARNING "Nomenclatura combinata assente"
END
CURRENCY O_AMM_LIRE 18
@ -381,39 +386,44 @@ BEGIN
FIELD NATURA
END
STRING F_NOMENCLATURA1 4
NUMBER F_NOMENCLATURA1 4
BEGIN
PROMPT 28 15 "Nomenclatura combinata "
FLAGS "U"
FLAGS "Z"
USE %NOC
INPUT CODTAB[1,4] F_NOMENCLATURA1
INPUT CODTAB[5,6] F_NOMENCLATURA2
INPUT CODTAB[7,8] F_NOMENCLATURA3
DISPLAY "Codice" CODTAB[1,4]
DISPLAY "" CODTAB[5,6]
DISPLAY "" CODTAB[7,8]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA1 CODTAB[1,4]
OUTPUT F_NOMENCLATURA2 CODTAB[5,6]
OUTPUT F_NOMENCLATURA3 CODTAB[7,8]
CHECKTYPE REQUIRED
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA2
MESSAGE DIRTY,F_NOMENCLATURA3
FIELD NOMENCL
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA2 2
NUMBER F_NOMENCLATURA2 2
BEGIN
PROMPT 58 15 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA3
MESSAGE DIRTY,F_NOMENCLATURA3
WARNING "Nomenclatura combinata assente"
END
STRING F_NOMENCLATURA3 2
NUMBER F_NOMENCLATURA3 2
BEGIN
PROMPT 63 15 ""
FLAGS "U"
FLAGS "Z"
COPY ALL F_NOMENCLATURA1
CHECKTYPE NORMAL
WARNING "Nomenclatura combinata assente"
END
LIST F_SEGNO 1

View File

@ -41,19 +41,52 @@ char TIntra_mask::tipo() const
return t;
}
char TIntra_mask::frequenza() const
char TIntra_mask::frequenza(const int anno) const
{
const char t = tipo();
TDate d(TODAY);
if (anno < d.year())
{
TLocalisamfile riep(LF_RIEPRETT);
riep.put("TIPO", (char)t);
riep.put("ANNO", anno);
if (riep.read(_isgteq) == NOERR)
{
if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == anno)
{
const char freq = riep.get_char("FREQUENZA");
if (freq != '\0')
return freq;
}
}
}
return (t == 'A' || t == 'B') ? _freq_acq : _freq_ces;
}
int TIntra_mask::date2periodo(const TDate & d)
{
const char freq = frequenza(d.year());
if (freq == 'A')
return 1;
const int month = d.month();
if (freq == 'T')
return (month / 3) + 1;
return month;
}
const char* TIntra_mask::periodo_str() const
{
const short id = period_field();
const char* pe = "01";
if (id != DLG_NULL)
{
switch(frequenza())
// const int anno = get_int(R_ANNO);
switch(frequenza(anno()))
{
case 'M': pe = get(id); break;
case 'T': pe = get(id+1); break;
@ -77,9 +110,10 @@ bool TIntra_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
if (e == fe_modify || e == fe_init)
{
const short id = period_field();
if (id != DLG_NULL)
{
const char freq = frequenza();
const char freq = frequenza(anno());
show(id+0, freq == 'M');
show(id+1, freq == 'T');
show(id+2, freq == 'A');
@ -248,6 +282,7 @@ class TGenerazione_mask : public TIntra_mask
protected:
virtual short type_field() const { return R_TIPO; }
virtual short period_field() const { return R_PERIODO_M; }
virtual int anno() const { return get_int(R_ANNO); }
public:
bool genera_riepiloghi();
@ -259,10 +294,15 @@ public:
bool TGenerazione_mask::genera_riepiloghi()
{
const char tipo = get(R_TIPO)[0];
const int anno = get_int(R_ANNO);
const int anno_r = anno();
const int peri = periodo();
int da_mese, a_mese;
switch (frequenza())
const char freq = frequenza(anno_r);
if (is_riepilogo(tipo, anno_r, peri) && !yesno_box("Attenzione esiste gia' il riepilogo\nper il periodo indicato, devo continuare"))
return FALSE;
switch (freq)
{
case 'T':
da_mese = (peri-1) * 3 + 1;
@ -276,8 +316,8 @@ bool TGenerazione_mask::genera_riepiloghi()
break;
}
const TDate da_data(1, da_mese, anno);
const TDate a_data(TDate::last_day(a_mese, anno), a_mese, anno);
const TDate da_data(1, da_mese, anno_r);
const TDate a_data(TDate::last_day(a_mese, anno_r), a_mese, anno_r);
TRectype filter_da(LF_INTRA), filter_a(LF_INTRA);
filter_da.put("DATAREG", da_data);
@ -315,7 +355,7 @@ bool TGenerazione_mask::genera_riepiloghi()
TProgind pi(riepiloghi, "Scrittura riepiloghi intra...", FALSE, TRUE);
TLocalisamfile riep(LF_RIEPRETT);
riep.put("TIPO", tipo);
riep.put("ANNO", anno);
riep.put("ANNO", anno_r);
riep.put("PERIODO", peri);
riep.put("NUMRIG", 1);
int err = riep.read();
@ -323,11 +363,12 @@ bool TGenerazione_mask::genera_riepiloghi()
{
pi.addstatus(1);
riep.put("TIPO", tipo);
riep.put("ANNO", anno);
riep.put("ANNO", anno_r);
riep.put("PERIODO", peri);
riep.put("NUMRIG", r+1);
_riep[r].write(riep.curr());
riep.put("FREQUENZA", freq);
const int werr = err == NOERR ? riep.rewrite() : riep.write();
if (werr != NOERR)
return error_box("Errore %d durante la scrittura dei riepiloghi", werr);
@ -385,3 +426,16 @@ void genera_riepiloghi(char tipo, int anno, int periodo)
if (num_fields == 3 || m.run() == K_ENTER)
m.genera_riepiloghi();
}
bool is_riepilogo(char tipo, int anno, int periodo)
{
TLocalisamfile riep(LF_RIEPRETT);
riep.put("TIPO", tipo);
riep.put("ANNO", anno);
riep.put("PERIODO", periodo);
riep.put("NUMRIG", 1);
int err = riep.read();
return err == NOERR;
}

View File

@ -15,10 +15,12 @@ protected:
virtual short type_field() const;
virtual short period_field() const;
virtual int anno() const pure;
public:
int date2periodo(const TDate & d);
char tipo() const;
char frequenza() const;
char frequenza(const int anno) const;
int periodo() const;
const char* periodo_str() const;
@ -27,5 +29,6 @@ public:
};
void genera_riepiloghi(char tipo = ' ', int anno = 0, int periodo = 0);
bool is_riepilogo(char tipo, int anno, int periodo);
#endif

View File

@ -1,15 +1,11 @@
[PRASSIEF_001]
Caption = "Elenchi INTRA comunitari"
[PRASSIIN_001]
Caption = "Elenchi Intracomunitari"
Picture = <ba00.bmp>
Module = 18
Flags = "F"
Item_01 = "Stampa riepiloghi", "in0 -0", "F"
Item_02 = "Generazione dischetti", "in0 -1", "F"
Item_03 = "Gestione movimenti", "in0 -4", "F"
Item_04 = "Gestione riepiloghi", "in0 -5", "F"
Item_05 = "Gestione rettifiche", "in0 -6", "F"
Item_06 = "Tabelle", [PRASSIIN_002]
Item_07 = "Stampa Tabelle", [PRASSIIN_003]
Flags = ""
Item_01 = "Tabelle", [PRASSIIN_002]
Item_02 = "Stampa Tabelle", [PRASSIIN_003]
Item_03 = "Gestione movimenti", [PRASSIIN_004]
[PRASSIIN_002]
Caption = "Tabelle"
@ -33,3 +29,16 @@ Item_03 = "Natura Transazione", "ba3 -1 %int", ""
Item_04 = "Condizioni di consegna", "ba3 -1 %icc", ""
Item_05 = "Modalita' di trasporto", "ba3 -1 %imt", ""
[PRASSIIN_004]
Caption = "Gestione movmenti"
Picture = <ba00.bmp>
Module = 18
Flags = "F"
Item_01 = "Gestione movimenti", "in0 -4", "F"
Item_02 = "Gestione riepiloghi", "in0 -5", "F"
Item_03 = "Stampa riepiloghi", "in0 -0", "F"
Item_04 = "Gestione rettifiche", "in0 -6", "F"
Item_05 = "Generazione dischetti", "in0 -1", "F"
Item_06 = "Dati riassuntivi", "ba3 -0 IRD", "F"
Item_06 = "Stampa dati riassuntivi", "ba3 -1 IRD", "F"

View File

@ -312,3 +312,4 @@ TSelect_color_mask::~TSelect_color_mask()
{
delete _sheet_mask;
}

View File

@ -580,16 +580,17 @@ int TMask::id2pos(
// (es. il campo 120 e' il quarto della maschera)
{
int pos = -1;
if (id > 0 && id < 512)
if (id > 0)
{
pos = int(_position.get_long(id)-1);
CHECKD(pos < 0 || fld(pos).dlg() == id, "Bad position for field: ", id);
}
else
{
for (pos = fields()-1; pos >= 0; pos--)
if (fld(pos).dlg() == id) break;
}
if (id < 512)
pos = int(long(_position.objptr(id))-1);
else
{
for (pos = fields()-1; pos >= 0; pos--)
if (fld(pos).dlg() == id)
break;
}
}
return pos;
}

View File

@ -1025,13 +1025,11 @@ bool TPrefix::set_codditta(long codditta, bool force)
{
TString16 s("com");
if (codditta > 0L)
{
s.format("%05lda", codditta);
if (_firm)
_firm->read(codditta);
}
s.format("%05lda", codditta);
set(s, force);
CPutPref(_prefix);
if (_firm)
_firm->read(codditta);
return TRUE;
}
return FALSE;

View File

@ -84,8 +84,6 @@ private:
// @cmember:(INTERNAL) UNUSED
void set_toolbar(bool all);
// @cmember:(INTERNAL) Seleziona il nuovo modo e ritorna il vecchio
int set_mode(int mode);
// @Setta i filtri di lettura
void set_key_filter();
// @cmember:(INTERNAL) Setta i limiti
@ -129,6 +127,8 @@ protected:
// @cmember Ritorna il nome del programma chiamante
const TString& autoins_caller() const
{ return _autoins_caller;}
// @cmember:(INTERNAL) Seleziona il nuovo modo e ritorna il vecchio
int set_mode(int mode);
// @cmember Ciclo principale
virtual void main_loop();

View File

@ -113,8 +113,8 @@ bool pi_check(
else
{
const char* stpi[] = { "BE09", "DE09", "DK08", "EL08", "ES09",
"FR11", "GB09", "GB12", "IE08", "IT11",
"LU08", "NL12", "PT09", NULL };
"FI08", "FR11", "GB09", "GB12", "IE08",
"IT11", "LU08", "NL12", "PT09", NULL };
TString16 test;
test.format("%s%02d", (const char*)stato, pi.len());
@ -479,7 +479,8 @@ HIDDEN bool _mtcheck_val(TMask_field& f, KEY)
{
const int month = atoi(f.get());
if (month < 1 || month > 13) return FALSE;
TLocalisamfile d(LF_NDITTE);
d.zero();
d.put(NDT_CODDITTA, prefix().get_codditta());

View File

@ -594,7 +594,7 @@ void xvt_statbar_refresh()
// @xref <f xvt_create_statbar> <f xvt_statbar_set>
{
if (_statbar);
if (_statbar)
statbar_set_title(_statbar, NULL);
}

View File

@ -111,6 +111,7 @@ bool TCondizioni_vendita::user_create()
{
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_condven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc() > 2)
{
TFilename trans = argv(2);

View File

@ -84,7 +84,7 @@ bool TRighe_condizioni_vendita::user_create()
bool gotcha= FALSE; // booleano di avvenuta inizializzazione
_rcondven= "*"; // inizializzazione dell'indicatore del tipo di archivio
if (argc() > 2)
{
TFilename trans = argv(2);

View File

@ -803,70 +803,47 @@ BEGIN
ITEM "F|Fornitore"
END
LISTBOX F_COLLTYPE 25
NUMBER F_CLASSDOG1 4
BEGIN
PROMPT 1 7 "Mag.per movim.con distinta "
FIELD LF_ANAMAG->COLLTYPE
ITEM " |da movimento" MESSAGE CLEAR,F_CODMAGAN
ITEM "M|da riga prod.fin/semilav." MESSAGE CLEAR,F_CODMAGAN
ITEM "F|da fornitore" MESSAGE CLEAR,F_CODMAGAN
ITEM "A|da articolo" MESSAGE ENABLE,F_CODMAGAN
END
STRING F_CODMAGAN 5
BEGIN
PROMPT 59 7 "Codice mag. "
FIELD LF_ANAMAG->CODMAG
FLAG "U"
USE MAG
INPUT CODTAB F_CODMAGAN
DISPLAY "Codice@10" CODTAB
PROMPT 1 8 "Nomenclatura combin. "
FIELD CLASSDOG[1,4]
FLAG "Z"
USE %NOC
INPUT CODTAB[1,4] F_CLASSDOG1
INPUT CODTAB[5,6] F_CLASSDOG2
INPUT CODTAB[7,8] F_CLASSDOG3
DISPLAY "Codice 1" CODTAB[1,4]
DISPLAY "@3" CODTAB[5,6]
DISPLAY "@3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_CODMAGAN CODTAB
OUTPUT F_CLASSDOG1 CODTAB[1,4]
OUTPUT F_CLASSDOG2 CODTAB[5,6]
OUTPUT F_CLASSDOG3 CODTAB[7,8]
OUTPUT F_CLASSDOGD S0
VALIDATE REQIF_FUNC 1 F_CLASSDOG2
MESSAGE DIRTY,F_CLASSDOG3
WARNING "Nomenclatura combinata assente"
END
NUMBER F_CLASSDOG2 2
BEGIN
PROMPT 30 8 ""
FIELD CLASSDOG[5,6]
FLAG "Z"
COPY ALL F_CLASSDOG1
VALIDATE REQIF_FUNC 1 F_CLASSDOG2
MESSAGE DIRTY,F_CLASSDOG3
WARNING "Nomenclatura combinata assente"
END
NUMBER F_CLASSDOG3 2
BEGIN
PROMPT 35 8 ""
FIELD CLASSDOG[7,8]
FLAG "Z"
COPY ALL F_CLASSDOG1
CHECKTYPE NORMAL
END
STRING F_CLASSDOG1 4
BEGIN
PROMPT 1 8 "Nomenclatura combin. "
FIELD CLASSDOG[1,4]
FLAG "UZ"
USE %NOC
INPUT CODTAB[1,4] F_CLASSDOG1
INPUT CODTAB[5,6] F_CLASSDOG2
INPUT CODTAB[7,8] F_CLASSDOG3
DISPLAY "Codice 1" CODTAB[1,4]
DISPLAY "Codice 2" CODTAB[5,6]
DISPLAY "Codice 3" CODTAB[7,8]
DISPLAY "Descrizione@50" S0
OUTPUT F_CLASSDOG1 CODTAB[1,4]
OUTPUT F_CLASSDOG2 CODTAB[5,6]
OUTPUT F_CLASSDOG3 CODTAB[7,8]
OUTPUT F_CLASSDOGD S0
CHECKTYPE NORMAL
WARNING "Il codice della Nom.combinata deve essere presente e completo"
END
STRING F_CLASSDOG2 2
BEGIN
PROMPT 30 8 ""
FIELD CLASSDOG[5,6]
FLAG "U"
COPY ALL F_CLASSDOG1
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_CLASSDOG1
WARNING "Il codice della Nom.combinata deve essere presente e completo"
END
STRING F_CLASSDOG3 2
BEGIN
PROMPT 35 8 ""
FIELD CLASSDOG[7,8]
FLAG "U"
COPY ALL F_CLASSDOG1
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 F_CLASSDOG2
WARNING "Il codice della Nom.combinata deve essere presente e completo"
WARNING "Nomenclatura combinata assente"
END
STRING F_CLASSDOGD 37

View File

@ -7,6 +7,17 @@
#include <doc.h>
class TLista_cf : public TLista_clifo
{
char _tipo;
protected:
virtual char tipo() const { return _tipo; }
public:
TLista_cf(char tipo) { _tipo = tipo;}
};
class TFatturazione_bolle_app : public TSkeleton_application
{
TString4 _default_selection;
@ -90,7 +101,9 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
eld.tipi_validi(tipidoc);
eld.stati_validi(statidoc);
TLista_clienti clienti;
TTipo_documento t(eld.tipo_iniziale(0));
char tipocf(t.tipocf());
TLista_cf clienti(tipocf);
const int tot_cli = clienti.leggi(dc, ac, da, aa, dz, az);
TString msg(80);
@ -103,7 +116,7 @@ void TFatturazione_bolle_app::process_by_cli(const TMask& m)
do_events(); // Attende visualizzazione
TLista_documenti din; // Legge tutti i documenti di input
din.read('D', 'C', codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
if (din.items() > 0 && !iw.iscancelled())
{
bool ok = process(iw, eld, din, data_elab);
@ -140,7 +153,9 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
eld.tipi_validi(tipidoc);
eld.stati_validi(statidoc);
TLista_clienti clienti;
TTipo_documento t(eld.tipo_iniziale(0));
char tipocf(t.tipocf());
TLista_cf clienti(tipocf);
const int tot_cli = clienti.leggi(dc, ac);
TString msg(80);
@ -153,7 +168,7 @@ void TFatturazione_bolle_app::process_by_doc(const TMask& m)
do_events(); // Attende visualizzazione
TLista_documenti din, dout; // Legge tutti i documenti di input
din.read('D', 'C', codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
din.read('D', tipocf, codcli, anno, tipidoc, statidoc, dd, ad, codnum, dn, an);
for (int i = din.items()-1; i >= 0; i--)
{

View File

@ -2144,7 +2144,7 @@ error_type TContabilizzazione::write_all(TDocumento& doc)
const real totdocval = -head.get_real(MOV_TOTDOCVAL);
head.put(MOV_TOTDOC, totdoc);
head.put(MOV_TOTDOCVAL, totdocval);
// head.put(MOV_TOTDOCVAL, totdocval); // Non cambio segno! :-( LL700285
const int items = _movimento->iva_items();