Correzione di valanghe di errori

git-svn-id: svn://10.65.10.50/trunk@425 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-10-19 15:00:30 +00:00
parent 57dc5f4f18
commit 41ce0a9012
17 changed files with 2714 additions and 2427 deletions

View File

@ -141,7 +141,7 @@ END
SPREADSHEET F_SHEET_GCS SPREADSHEET F_SHEET_GCS
BEGIN BEGIN
PROMPT 0 7 "" PROMPT 0 7 ""
ITEM "Tipo conto@21" ITEM "Tipo conto@21F"
ITEM "C/F" ITEM "C/F"
ITEM "Gr.@3" ITEM "Gr.@3"
ITEM "Co.@3" ITEM "Co.@3"

View File

@ -128,10 +128,10 @@ END
LISTBOX 106 5 LISTBOX 106 5
BEGIN BEGIN
PROMPT 51 3 "Sezione " PROMPT 51 3 "Sezione "
ITEM " | "
ITEM "D|Dare" ITEM "D|Dare"
ITEM "A|Avere" ITEM "A|Avere"
FIELD LF_RCAUSALI->SEZIONE FIELD LF_RCAUSALI->SEZIONE
CHECKTYPE REQUIRED
FLAGS "U" FLAGS "U"
END END

View File

@ -76,8 +76,8 @@ TMask* TPrimanota_application::load_mask(int n)
ism.set_handler(102, codiva_handler); ism.set_handler(102, codiva_handler);
ism.set_handler(104, imposta_handler); ism.set_handler(104, imposta_handler);
ism.set_handler(109, suspended_handler); ism.set_handler(109, suspended_handler);
ism.set_handler(209, suspended_handler); ism.set_handler(209, sheet_clifo_handler);
ism.set_handler(309, suspended_handler); ism.set_handler(309, sheet_clifo_handler);
} }
break; break;
case 3: case 3:
@ -99,14 +99,14 @@ if (n == 1 || n == 2)
TMask& cgm = cg.sheet_mask(); TMask& cgm = cg.sheet_mask();
cgm.set_handler(101, dareavere_handler); cgm.set_handler(101, dareavere_handler);
cgm.set_handler(102, dareavere_handler); cgm.set_handler(102, dareavere_handler);
cgm.set_handler(106, suspended_handler);
cgm.set_handler(105, cg_conto_handler); cgm.set_handler(105, cg_conto_handler);
cgm.set_handler(206, cg_clifo_handler); cgm.set_handler(106, suspended_handler);
cgm.set_handler(306, cg_clifo_handler); cgm.set_handler(206, sheet_clifo_handler);
cgm.set_handler(306, sheet_clifo_handler);
cgm.set_handler(112, suspended_handler); cgm.set_handler(112, suspended_handler);
cgm.set_handler(113, suspended_handler); cgm.set_handler(113, suspended_handler);
cgm.set_handler(213, cg_clifo_handler); cgm.set_handler(213, sheet_clifo_handler);
cgm.set_handler(313, cg_clifo_handler); cgm.set_handler(313, sheet_clifo_handler);
} }
return _msk[n] = m; return _msk[n] = m;
@ -165,7 +165,10 @@ bool TPrimanota_application::user_destroy()
// Certified 99% // Certified 99%
bool TPrimanota_application::read_caus(const char* cod, int year) bool TPrimanota_application::read_caus(const char* cod, int year)
{ {
const bool ok = _causale.read(cod, year); bool ok = TRUE;
if (cod != NULL)
ok = _causale.read(cod, year);
bool nob = FALSE, dob = FALSE, sal = FALSE; bool nob = FALSE, dob = FALSE, sal = FALSE;
TipoIVA iva = nessuna_iva; TipoIVA iva = nessuna_iva;
@ -178,24 +181,27 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
iva = _causale.iva(); iva = _causale.iva();
} }
TMask& m = *_msk[iva == nessuna_iva ? 1: 2]; TMask* m = _msk[iva == nessuna_iva ? 1 : 2];
m.efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio if (m == NULL) return TRUE;
m.efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
m->efield(F_NUMDOC).check_type(nob ? CHECK_REQUIRED : CHECK_NORMAL); // Num. doc. obbligatorio
m->efield(F_DATADOC).check_type(dob ? CHECK_REQUIRED : CHECK_NORMAL); // Data doc. obbligatoria
if (iva != nessuna_iva) if (iva != nessuna_iva)
{ {
const CheckType ct = sal ? CHECK_REQUIRED : CHECK_NORMAL; const CheckType ct = sal ? CHECK_REQUIRED : CHECK_NORMAL;
m.efield(F_CODPAG).check_type(ct); // Cod. pag. obbligatorio m->efield(F_CODPAG).check_type(ct); // Cod. pag. obbligatorio
m.show(F_ANNORIF, sal); m->show(F_ANNORIF, sal);
m.show(F_NUMRIF, sal); m->show(F_NUMRIF, sal);
if (sal) if (sal)
{ {
TString80 val; TString80 val;
if (riferimento_partita()) if (riferimento_partita())
val = m.get(F_NUMDOC); val = m->get(F_NUMDOC);
else else
val.format("%ld", _causale.reg().protocol()); val.format("%ld", _causale.reg().protocol());
m.set(F_NUMRIF, val); m->set(F_NUMRIF, val);
} }
} }
return ok; return ok;
@ -253,13 +259,11 @@ TMask* TPrimanota_application::get_mask(int mode)
return load_mask(0); return load_mask(0);
} }
TCausale c(caus, annoiva); giornale().read(annoes);
causale().read(caus, annoiva);
_iva = causale().iva(); _iva = causale().iva();
TMask* m = load_mask(_iva == nessuna_iva ? 1 : 2); return load_mask(_iva == nessuna_iva ? 1 : 2);
giornale().read(annoes);
read_caus(caus, annoiva);
return m;
} }
@ -275,6 +279,7 @@ void TPrimanota_application::init_mask(TMask& m)
{ {
disable_menu_item(M_FILE_PRINT); disable_menu_item(M_FILE_PRINT);
read_caus(NULL, 0); // Setta campi obbligatori
fill_sheet(m); fill_sheet(m);
if (_iva != nessuna_iva) if (_iva != nessuna_iva)
@ -413,22 +418,21 @@ void TPrimanota_application::init_insert_mode(TMask& m)
} }
else else
{ {
if (nriga >= 3 && nriga <= 9) if (nriga >= 2 && nriga <= 9)
continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali continue; // Conti per IVA detraibile e non, ritenute sociali e fiscali
const bool rigaiva = rcaus->get_bool(RCA_RIGAIVA); const bool rigaiva = rcaus->get_bool(RCA_RIGAIVA);
if (nriga == 2 || rigaiva) if (rigaiva)
{ {
const TString16 codiva(rcaus->get(RCA_CODIVA)); const TString16 codiva(rcaus->get(RCA_CODIVA));
set_ivas_row(-1,codiva,tc,desc); set_ivas_row(-1,codiva,tc,desc);
} }
else else
{ {
const char tipo = nriga < 2 ? 'T' : ' '; const char tipo = nriga == 1 ? 'T' : ' ';
set_cgs_row(-1,zero,tc,desc,tipo); if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() != 0)
if (nriga == 1 && tc.tipo() > ' ' && tc.sottoconto() > 0)
m.set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto()); m.set(tc.tipo() == 'C' ? F_CLIENTE : F_FORNITORE, tc.sottoconto());
set_cgs_row(-1,zero,tc,desc,tipo);
} }
} }
} }
@ -438,6 +442,8 @@ void TPrimanota_application::init_insert_mode(TMask& m)
void TPrimanota_application::init_modify_mode(TMask& m) void TPrimanota_application::init_modify_mode(TMask& m)
{ {
init_mask(m); init_mask(m);
if (iva() != nessuna_iva)
m.hide(F_CODIVA);
} }
@ -556,7 +562,16 @@ int TPrimanota_application::read(TMask& m)
riga.add(r.get("CODIVA")); // IVA 102 riga.add(r.get("CODIVA")); // IVA 102
riga.add(r.get("TIPODET")); // Detrazione 103 riga.add(r.get("TIPODET")); // Detrazione 103
riga.add(r.get("IMPOSTA")); // Imposta 104
real imposta(r.get("IMPOSTA"));
if (to_swap) imposta = -imposta;
if (imponibile.sign() != imposta.sign())
{
warning_box("Registrazione con imponibile e imposta discordi: correzione effettuata");
imposta = -imposta;
}
riga.add(imposta.string()); // Imposta 104
TBill c; get_conto(r, c); TBill c; get_conto(r, c);
if (c.ok()) if (c.ok())
@ -694,7 +709,16 @@ void TPrimanota_application::mask2rel(const TMask& m)
r.put("CODIVA", row.get()); r.put("CODIVA", row.get());
r.put("TIPODET", row.get()); r.put("TIPODET", row.get());
r.put("IMPOSTA", row.get());
real imposta(row.get());
if (to_swap) imposta = -imposta;
if (imponibile.sign() != imposta.sign())
{
yesnofatal_box("Registrazione di imponibile e imposta discordi");
imposta = -imposta;
}
r.put("IMPOSTA", imposta);
r.put("TIPOCR", row.get()); r.put("TIPOCR", row.get());
const TBill c(row, -1, 0x1); const TBill c(row, -1, 0x1);
@ -718,7 +742,7 @@ int TPrimanota_application::write(const TMask& m)
{ {
_saldi.registra(); _saldi.registra();
if (iva() == iva_vendite && !gestione_saldaconto()) if (iva() != nessuna_iva && !gestione_saldaconto())
{ {
const TString16 causimm(_causale.causale_inc_imm()); const TString16 causimm(_causale.causale_inc_imm());
if (causimm.not_empty()) if (causimm.not_empty())
@ -753,55 +777,112 @@ bool TPrimanota_application::remove()
} }
HIDDEN bool incasso_handler(TMask_field& f, KEY k)
{
if (k == K_ENTER)
{
TMask& m = f.mask();
TImporto tot(m.get(I_SEZIONE1)[0], (real)m.get(F_TOTALE));
for (int i = 2; i < 5; i++)
{
const int sid = i == 2 ? I_SEZIONE2 : (i == 3 ? I_SEZIONE3 : I_SEZIONE4);
const real val(m.get(sid+1));
const TImporto imp(m.get(sid)[0], val);
tot += imp;
}
if (tot.valore() != ZERO)
return f.error_box("Il movimento e' sbilaciato di %s", tot.valore().string("."));
}
return TRUE;
}
void TPrimanota_application::genera_incasso(const char* causimm) void TPrimanota_application::genera_incasso(const char* causimm)
{ {
TMask m("cg2100i"); TMask m("cg2100i");
if (iva() == iva_acquisti) m.set_caption("Movimento di pagamento immediato");
m.set_handler(F_DATAREG, datareg_handler); m.set_handler(F_DATAREG, datareg_handler);
m.set_handler(F_DATACOMP, datacomp_handler); m.set_handler(F_DATACOMP, datacomp_handler);
m.set_handler(F_TOTALE, incasso_handler);
TFilename tmp; tmp.temp(); // File temporaneo di scambio TCausale caus(causimm); // Causale da usare
_msk[2]->set_workfile(tmp);
_msk[2]->save(); // Copia la maschera principale ...
m.set_workfile(tmp);
m.load(); // ... nella maschera di incasso
::remove(tmp); // Cancella file temporaneo
const TCausale caus(causimm); // Causale da usare if (caus.data_doc()) m.efield(F_DATADOC).check_type(CHECK_REQUIRED);
TBill conto; caus.bill(2, conto); // Conto della seconda riga della causale if (caus.num_doc()) m.efield(F_NUMDOC).check_type(CHECK_REQUIRED);
TBill conto; caus.bill(1, conto); // Conto della seconda riga della causale
m.set(F_DATAREG, curr_mask().get(F_DATAREG));
m.set(F_DATACOMP, curr_mask().get(F_DATACOMP));
m.set(F_DATADOC, curr_mask().get(F_DATADOC));
m.set(F_NUMREG, ++_lastreg); // Incrementa numero di registrazione m.set(F_NUMREG, ++_lastreg); // Incrementa numero di registrazione
m.set(F_CODCAUS, causimm); // Cambia causale e ... m.set(F_DESCR, caus.desc_agg(1)); // Descrizione
m.set(F_TIPODOC, caus.tipo_doc()); // relativo tipo documento m.set(F_CODCAUS, causimm); // Cambia causale
m.set(F_DESCRCAUS, caus.descrizione());
m.set(I_SEZIONE1, caus.sezione_clifo() == 'D' ? "D" : "A");
m.set(F_TOTALE, curr_mask().get(F_TOTALE));
m.set(F_CLIFO, clifo() == 'C' ? "C" : "F");
m.set(F_GRUPPOCLIFO, conto.gruppo()); m.set(F_GRUPPOCLIFO, conto.gruppo());
m.set(F_CONTOCLIFO, conto.conto()); m.set(F_CONTOCLIFO, conto.conto());
const short clifo_id = clifo() == 'C' ? F_CLIENTE : F_FORNITORE;
m.set(clifo_id, curr_mask().get(clifo_id));
caus.bill(2, conto);
m.set(I_SEZIONE2, caus.sezione_clifo() == 'D' ? "A" : "D");
m.set(I_IMPORTO2, curr_mask().get(F_TOTALE));
m.set(I_GRUPPO2, conto.gruppo());
m.set(I_CONTO2, conto.conto());
m.set(I_SOTTOCONTO2, conto.sottoconto());
if (m.run() == K_SAVE) if (m.run() == K_SAVE)
{ {
TMovimentoPN inc; // Nuovo movimento di incasso immediato TMovimentoPN inc; // Nuovo movimento di incasso immediato
TRectype r(_rel->cg(0)); // Copia la prima riga contabile
m.autosave(&inc); m.autosave(&inc);
inc.lfile().put("TIPODOC", caus.tipo_doc()); // Tipo documento
inc.lfile().put("REG", caus.reg().name()); // Registro
inc.lfile().put("REG", ""); // Annulla eventuale registro IVA TRectype& r = inc.cg(0);
r.zero();
const real imp(m.get(F_TOTALE));
const char sez = r.get_char("SEZIONE");
r.put("NUMREG", _lastreg); r.put("NUMREG", _lastreg);
r.put("NUMRIG", 1); r.put("NUMRIG", 1);
r.put("IMPORTO", imp); r.put("SEZIONE", m.get(I_SEZIONE1));
r.put("SEZIONE", sez == 'A' ? 'D' : 'A'); r.put("IMPORTO", m.get(F_TOTALE));
r.put("TIPOC", m.get(F_CLIFO)); r.put("TIPOC", m.get(F_CLIFO));
r.put("GRUPPO", m.get_int(F_GRUPPOCLIFO)); r.put("GRUPPO", m.get(F_GRUPPOCLIFO));
r.put("CONTO", m.get_int(F_CONTOCLIFO)); r.put("CONTO", m.get(F_CONTOCLIFO));
r.put("SOTTOCONTO", m.get_long(F_CLIENTE)); r.put("SOTTOCONTO", m.get(clifo_id));
r.put("ROWTYPE", ' '); r.put("DESCR", m.get(F_DESCR));
r.put("RCONTR", 2);
r.put("ROWTYPE", " ");
inc.cg(0) = r; for (int i = 2; i < 5; i++)
{
const int sid = i == 2 ? I_SEZIONE2 : (i == 3 ? I_SEZIONE3 : I_SEZIONE4);
const char* imp = m.get(sid+1);
if (*imp == '\0') break;
r.put("NUMRIG", 2); TRectype& r = inc.cg(i-1);
r.put("SEZIONE", sez); r.zero();
inc.cg(1) = r; r.put("IMPORTO", imp);
r.put("NUMREG", _lastreg);
r.put("NUMRIG", i);
r.put("SEZIONE", m.get(sid));
r.put("TIPOC", ' ');
r.put("GRUPPO", m.get(sid+2));
r.put("CONTO", m.get(sid+3));
r.put("SOTTOCONTO", m.get(sid+4));
r.put("ROWTYPE", " ");
if (i == 2)
{
r.put("DESCR", caus.desc_agg(2));
r.put("RCONTR", 1);
}
}
while (inc.write() == _isreinsert) // In caso di riscrittura while (inc.write() == _isreinsert) // In caso di riscrittura
inc.lfile().put("NUMREG", ++_lastreg); // Incrementa numero registrazione inc.lfile().put("NUMREG", ++_lastreg); // Incrementa numero registrazione

View File

@ -78,4 +78,26 @@
#define O_COMUNENAS 113 #define O_COMUNENAS 113
#define O_DENCOMNAS 114 #define O_DENCOMNAS 114
// Maschera incasso/pagamento immediato
#define I_SEZIONE1 201
#define I_IMPORTO1 202
#define I_SEZIONE2 203
#define I_IMPORTO2 204
#define I_GRUPPO2 205
#define I_CONTO2 206
#define I_SOTTOCONTO2 207
#define I_SEZIONE3 208
#define I_IMPORTO3 209
#define I_GRUPPO3 210
#define I_CONTO3 211
#define I_SOTTOCONTO3 212
#define I_SEZIONE4 213
#define I_IMPORTO4 214
#define I_GRUPPO4 215
#define I_CONTO4 216
#define I_SOTTOCONTO4 217
#endif #endif

View File

@ -156,12 +156,12 @@ BEGIN
PROMPT 1 8 "Causale " PROMPT 1 8 "Causale "
FLAGS "U" FLAGS "U"
FIELD LF_MOV->CODCAUS FIELD LF_MOV->CODCAUS
USE LF_CAUSALI KEY 1 USE LF_CAUSALI SELECT REG!=""
INPUT CODCAUS F_CODCAUS INPUT CODCAUS F_CODCAUS
DISPLAY "Codice" CODCAUS DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
DISPLAY "Registro" REG
DISPLAY "Tipo" TIPODOC DISPLAY "Tipo" TIPODOC
DISPLAY "Registro" REG
OUTPUT F_CODCAUS CODCAUS OUTPUT F_CODCAUS CODCAUS
OUTPUT F_DESCRCAUS DESCR OUTPUT F_DESCRCAUS DESCR
OUTPUT F_CODREG REG OUTPUT F_CODREG REG
@ -174,10 +174,12 @@ END
STRING F_DESCRCAUS 50 STRING F_DESCRCAUS 50
BEGIN BEGIN
PROMPT 25 8 "" PROMPT 25 8 ""
USE LF_CAUSALI KEY 2 USE LF_CAUSALI KEY 2 SELECT REG!=""
INPUT DESCR F_DESCRCAUS INPUT DESCR F_DESCRCAUS
DISPLAY "Descrizione@50" DESCR DISPLAY "Descrizione@50" DESCR
DISPLAY "Codice" CODCAUS DISPLAY "Codice" CODCAUS
DISPLAY "Tipo" TIPODOC
DISPLAY "Registro" REG
COPY OUTPUT F_CODCAUS COPY OUTPUT F_CODCAUS
MESSAGE COPY,H_DESCRCAUS MESSAGE COPY,H_DESCRCAUS
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
@ -201,7 +203,7 @@ NUMBER F_RIEPILOGO 5
BEGIN BEGIN
PROMPT 51 9 "Riepilogo fino al n. " PROMPT 51 9 "Riepilogo fino al n. "
FIELD LF_MOV->UPROTIVA FIELD LF_MOV->UPROTIVA
NUM_EXPR ((#F_RIEPILOGO==0)||(#F_RIEPILOGO>=#F_PROTIVA)) NUM_EXPR {(#F_RIEPILOGO==0)||(#F_RIEPILOGO>=#F_PROTIVA)}
WARNING "Inserire un riepilogo non inferiore al protocollo IVA (Obbigatorio se il cliete/fornitore ha codice inserimento in allegati uguale a 3)" WARNING "Inserire un riepilogo non inferiore al protocollo IVA (Obbigatorio se il cliete/fornitore ha codice inserimento in allegati uguale a 3)"
END END
@ -239,7 +241,7 @@ BEGIN
MESSAGE COPY,F_FORNITORE MESSAGE COPY,F_FORNITORE
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Cliente assente" WARNING "Cliente assente"
ADD RUN cg0 -1 ADD RUN cg0 -1 C
END END
NUMBER F_FORNITORE 6 NUMBER F_FORNITORE 6
@ -269,7 +271,7 @@ BEGIN
MESSAGE COPY,F_CLIENTE MESSAGE COPY,F_CLIENTE
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
WARNING "Fornitore assente" WARNING "Fornitore assente"
ADD RUN cg0 -1 ADD RUN cg0 -1 F
END END
STRING F_RAGSOCFORNITORE 50 STRING F_RAGSOCFORNITORE 50
@ -284,7 +286,7 @@ BEGIN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
COPY OUTPUT F_FORNITORE COPY OUTPUT F_FORNITORE
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
ADD RUN cg0 -1 ADD RUN cg0 -1 F
END END
STRING F_RAGSOCCLIENTE 50 STRING F_RAGSOCCLIENTE 50
@ -299,7 +301,7 @@ BEGIN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
COPY OUTPUT F_CLIENTE COPY OUTPUT F_CLIENTE
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
ADD RUN cg0 -1 ADD RUN cg0 -1 C
END END
STRING F_PIVACLIENTE 14 STRING F_PIVACLIENTE 14
@ -315,7 +317,7 @@ BEGIN
DISPLAY "Codice" CODCF DISPLAY "Codice" CODCF
COPY OUTPUT F_CLIENTE COPY OUTPUT F_CLIENTE
CHECKTYPE NORMAL CHECKTYPE NORMAL
ADD RUN cg0 -1 ADD RUN cg0 -1 C
END END
STRING F_PIVAFORNITORE 14 STRING F_PIVAFORNITORE 14
@ -329,7 +331,7 @@ BEGIN
COPY DISPLAY F_PIVACLIENTE COPY DISPLAY F_PIVACLIENTE
COPY OUTPUT F_FORNITORE COPY OUTPUT F_FORNITORE
CHECKTYPE NORMAL CHECKTYPE NORMAL
ADD RUN cg0 -1 ADD RUN cg0 -1 F
END END
LIST F_STATOPAIV 18 LIST F_STATOPAIV 18

View File

@ -1,59 +1,59 @@
#include "cg2100.h" #include "cg2100.h"
PAGE "Movimento di incasso immediato" -1 -1 78 12 PAGE "Movimento di incasso immediato" -1 -1 75 13
DATE F_DATAREG
BEGIN
PROMPT 1 1 "Data di registrazione "
FIELD LF_MOV->DATAREG
CHECKTYPE REQUIRED
MESSAGE COPY,F_ANNOIVA,7,10
END
NUMBER F_ANNOIVA 4
BEGIN
FLAGS "H"
FIELD LF_MOV->ANNOIVA
END
NUMBER F_NUMREG 6 NUMBER F_NUMREG 6
BEGIN BEGIN
PROMPT 1 1 "Operazione n. " PROMPT 52 1 "Operazione n. "
FIELD LF_MOV->NUMREG FIELD LF_MOV->NUMREG
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
FLAGS "D" FLAGS "D"
KEY 1 KEY 1
END END
DATE F_DATAREG
BEGIN
PROMPT 43 1 "Data di registrazione "
FIELD LF_MOV->DATAREG
CHECKTYPE REQUIRED
END
NUMBER F_NUMDOC 6
BEGIN
PROMPT 1 2 "Documento n. "
FIELD LF_MOV->NUMDOC
END
DATE F_DATACOMP DATE F_DATACOMP
BEGIN BEGIN
PROMPT 43 2 "Data di competenza " PROMPT 1 2 "Data di competenza "
FIELD LF_MOV->DATACOMP FIELD LF_MOV->DATACOMP
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
NUMBER F_ANNOES 4 NUMBER F_ANNOES 4
BEGIN BEGIN
PROMPT 1 3 "Esercizio " PROMPT 52 2 "Esercizio "
FIELD LF_MOV->ANNOES FIELD LF_MOV->ANNOES
FLAGS "D" FLAGS "D"
END END
STRING F_TIPODOC 2
BEGIN
PROMPT 24 3 "Tipo documento "
FIELD LF_MOV->TIPODOC
FLAGS "D"
END
DATE F_DATADOC DATE F_DATADOC
BEGIN BEGIN
PROMPT 43 3 "Data del documento " PROMPT 1 3 "Data del documento "
FIELD LF_MOV->DATADOC FIELD LF_MOV->DATADOC
CHECKTYPE REQUIRED
WARNING "Specificare la data del documento" WARNING "Specificare la data del documento"
END END
STRING F_DESCR 50 50 STRING F_NUMDOC 7
BEGIN
PROMPT 52 3 "Documento n. "
FIELD LF_MOV->NUMDOC
WARNING "Specificare il numero documento"
END
STRING F_DESCR 50
BEGIN BEGIN
PROMPT 1 4 "Descrizione documento " PROMPT 1 4 "Descrizione documento "
FIELD LF_MOV->DESCR FIELD LF_MOV->DESCR
@ -76,100 +76,226 @@ END
STRING F_DESCRCAUS 50 STRING F_DESCRCAUS 50
BEGIN BEGIN
PROMPT 25 5 "" PROMPT 23 5 ""
FLAGS "D" FLAGS "D"
END END
LIST F_CLIFO 1 LIST I_SEZIONE1 1 8
BEGIN BEGIN
PROMPT 0 7 "" PROMPT 1 7 "Riga 1 "
ITEM "C|Cliente" MESSAGE HIDE,2@|SHOW,1@ ITEM "D|Dare"
ITEM "F|Fornitore" MESSAGE HIDE,1@|SHOW,2@ ITEM "A|Avere"
FIELD LF_MOV->TIPO
FLAGS "GH"
END
NUMBER F_CLIENTE 5
BEGIN
PROMPT 1 7 "Cliente "
FIELD LF_MOV->CODCF
GROUP 1
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_CLIENTE CODCF
OUTPUT F_RAGSOCCLIENTE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_FORNITORE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
NUMBER F_FORNITORE 5
BEGIN
PROMPT 1 7 "Fornitore "
FIELD LF_MOV->CODCF
GROUP 2
USE LF_CLIFO KEY 1
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT F_CLIFO TIPOCF
OUTPUT F_FORNITORE CODCF
OUTPUT F_RAGSOCFORNITORE RAGSOC
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
MESSAGE COPY,F_CLIENTE
CHECKTYPE REQUIRED
ADD RUN cg0 -1
END
STRING F_RAGSOCFORNITORE 50
BEGIN
PROMPT 25 7 ""
GROUP 2
USE LF_CLIFO KEY 2
INPUT TIPOCF "F"
INPUT RAGSOC F_RAGSOCFORNITORE
COPY DISPLAY F_FORNITORE
COPY OUTPUT F_FORNITORE
END
STRING F_RAGSOCCLIENTE 50
BEGIN
PROMPT 25 7 ""
GROUP 1
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLIENTE
COPY DISPLAY F_CLIENTE
COPY OUTPUT F_CLIENTE
ADD RUN cg0 -1
END
NUMBER F_GRUPPOCLIFO 3
BEGIN
PROMPT 1 8 "Gruppo "
END
NUMBER F_CONTOCLIFO 3
BEGIN
PROMPT 16 8 "Conto "
END END
NUMBER F_TOTALE 15 NUMBER F_TOTALE 15
BEGIN BEGIN
PROMPT 1 9 "Totale documento " PROMPT 18 7 ""
FIELD LF_MOV->TOTDOC FIELD LF_MOV->TOTDOC
FLAGS "R"
PICTURE "." PICTURE "."
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
MESSAGE COPY,I_IMPORTO2
END END
LIST F_CLIFO 1 12
BEGIN
PROMPT 37 7 ""
ITEM "C|Cliente" MESSAGE HIDE,F_FORNITORE|SHOW,F_CLIENTE
ITEM "F|Fornitore" MESSAGE HIDE,F_CLIENTE|SHOW,F_FORNITORE
FIELD LF_MOV->TIPO
FLAGS "GD"
END
NUMBER F_GRUPPOCLIFO 3
BEGIN
PROMPT 51 7 ""
CHECKTYPE REQUIRED
WARNING "Gruppo assente"
END
NUMBER F_CONTOCLIFO 3
BEGIN
PROMPT 57 7 ""
USE LF_PCON SELECT TMCF==#F_CLIFO
INPUT GRUPPO F_GRUPPOCLIFO
INPUT CONTO F_CONTOCLIFO
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT F_GRUPPOCLIFO GRUPPO
OUTPUT F_CONTOCLIFO CONTO
CHECKTYPE REQUIRED
WARNING "Conto assente"
END
NUMBER F_CLIENTE 6
BEGIN
PROMPT 65 7 ""
FIELD LF_MOV->CODCF
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_CLIENTE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Cliente@50" RAGSOC
OUTPUT F_CLIENTE CODCF
CHECKTYPE REQUIRED
END
NUMBER F_FORNITORE 6
BEGIN
PROMPT 65 7 ""
FIELD LF_MOV->CODCF
USE LF_CLIFO
INPUT TIPOCF "F"
INPUT CODCF F_FORNITORE
DISPLAY "Codice" CODCF
DISPLAY "Ragione Sociale Fornitore@50" RAGSOC
OUTPUT F_FORNITORE CODCF
CHECKTYPE REQUIRED
END
LIST I_SEZIONE2 1 8
BEGIN
PROMPT 1 8 "Riga 2 "
ITEM "D|Dare"
ITEM "A|Avere"
END
NUMBER I_IMPORTO2 15
BEGIN
PROMPT 18 8 ""
PICTURE "."
FLAGS "R"
END
LIST DLG_NULL 1 12
BEGIN
PROMPT 37 8 ""
ITEM " |Conto"
FLAGS "D"
END
NUMBER I_GRUPPO2 3
BEGIN
PROMPT 51 8 ""
END
NUMBER I_CONTO2 3
BEGIN
PROMPT 57 8 ""
END
NUMBER I_SOTTOCONTO2 6
BEGIN
PROMPT 65 8 ""
USE LF_PCON SELECT SOTTOCONTO!=""
INPUT GRUPPO I_GRUPPO2
INPUT CONTO I_CONTO2
INPUT SOTTOCONTO I_SOTTOCONTO2
DISPLAY "Gruppo" GRUPPO
DISPLAY "Conto" CONTO
DISPLAY "Sottoconto" SOTTOCONTO
DISPLAY "Descrizione@50" DESCR
OUTPUT I_GRUPPO2 GRUPPO
OUTPUT I_CONTO2 CONTO
OUTPUT I_SOTTOCONTO2 SOTTOCONTO
CHECKTYPE REQUIRED
END
LIST I_SEZIONE3 1 8
BEGIN
PROMPT 1 9 "Riga 2 "
ITEM "D|Dare"
ITEM "A|Avere"
END
NUMBER I_IMPORTO3 15
BEGIN
PROMPT 18 9 ""
PICTURE "."
FLAGS "R"
END
LIST DLG_NULL 1 12
BEGIN
PROMPT 37 9 ""
ITEM " |Conto"
FLAGS "D"
END
NUMBER I_GRUPPO3 3
BEGIN
PROMPT 51 9 ""
END
NUMBER I_CONTO3 3
BEGIN
PROMPT 57 9 ""
END
NUMBER I_SOTTOCONTO3 6
BEGIN
PROMPT 65 9 ""
COPY USE I_SOTTOCONTO2
INPUT GRUPPO I_GRUPPO3
INPUT CONTO I_CONTO3
INPUT SOTTOCONTO I_SOTTOCONTO3
COPY DISPLAY I_SOTTOCONTO2
OUTPUT I_GRUPPO3 GRUPPO
OUTPUT I_CONTO3 CONTO
OUTPUT I_SOTTOCONTO3 SOTTOCONTO
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 I_IMPORTO3
END
LIST I_SEZIONE4 1 8
BEGIN
PROMPT 1 10 "Riga 4 "
ITEM "D|Dare"
ITEM "A|Avere"
END
NUMBER I_IMPORTO4 15
BEGIN
PROMPT 18 10 ""
PICTURE "."
FLAGS "R"
END
LIST DLG_NULL 1 12
BEGIN
PROMPT 37 10 ""
ITEM " |Conto"
FLAGS "D"
END
NUMBER I_GRUPPO4 3
BEGIN
PROMPT 51 10 ""
END
NUMBER I_CONTO4 3
BEGIN
PROMPT 57 10 ""
END
NUMBER I_SOTTOCONTO4 6
BEGIN
PROMPT 65 10 ""
COPY USE I_SOTTOCONTO2
INPUT GRUPPO I_GRUPPO4
INPUT CONTO I_CONTO4
INPUT SOTTOCONTO I_SOTTOCONTO4
COPY DISPLAY I_SOTTOCONTO2
OUTPUT I_GRUPPO4 GRUPPO
OUTPUT I_CONTO4 CONTO
OUTPUT I_SOTTOCONTO4 SOTTOCONTO
CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 1 I_IMPORTO4
END
BUTTON DLG_SAVEREC 9 2 BUTTON DLG_SAVEREC 9 2
BEGIN BEGIN
PROMPT -12 -1 "~Registra" PROMPT -12 -1 "~Registra"

View File

@ -465,7 +465,6 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
{ {
if ((k == K_TAB && !f.mask().is_running()) || k == K_ENTER) if ((k == K_TAB && !f.mask().is_running()) || k == K_ENTER)
{ {
TSheet_field& cg = app().cgs();
const real saldo = app().calcola_saldo(); const real saldo = app().calcola_saldo();
if (k == K_ENTER) if (k == K_ENTER)
@ -476,6 +475,7 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
return f.error_box("Il movimento e' sbilanciato di %s lire.", ss); return f.error_box("Il movimento e' sbilanciato di %s lire.", ss);
} }
TSheet_field& cg = app().cgs();
bool empty = TRUE; bool empty = TRUE;
const int max = cg.items(); const int max = cg.items();
for (int i = 0; i < max; i++) for (int i = 0; i < max; i++)
@ -484,11 +484,11 @@ bool TPrimanota_application::cg_handler(TMask_field& f, KEY k)
if (!im.valore().is_zero()) if (!im.valore().is_zero())
{ {
const TBill c(cg.row(i), 3, 0x0); const TBill c(cg.row(i), 3, 0x0);
if (!c.empty() && !c.ok()) if (!c.ok())
return error_box("Il conto della riga %d non e' completo", i+1); return f.error_box("Il conto della riga %d non e' completo", i+1);
const TBill co(cg.row(i), 10, 0x0); const TBill co(cg.row(i), 10, 0x0);
if (!co.empty() && !co.ok()) if (!c.empty() && !co.ok())
return error_box("La contropartita della riga %d non e' completa", i+1); return f.error_box("La contropartita della riga %d non e' completa", i+1);
empty = FALSE; empty = FALSE;
} }
} }
@ -616,7 +616,19 @@ bool TPrimanota_application::codiva_handler(TMask_field& f, KEY key)
{ {
if (key == K_TAB && f.dirty()) if (key == K_TAB && f.dirty())
{ {
TMask_field& i = f.mask().field(101); TMask& m = f.mask();
TCodiceIVA iva(f.get());
TBill b; app().IVA2bill(iva, b);
const char tipo[2] = { b.tipo(), '\0' };
m.set(106, tipo);
m.set(107, b.gruppo());
m.set(108, b.conto());
const short id = b.tipo() == 'C' ? 209 : (b.tipo() == 'F' ? 309 : 109);
m.set(id, b.sottoconto());
m.set(id+1, b.descrizione());
TMask_field& i = m.field(101);
i.set_dirty(); i.set_dirty();
return imponibile_handler(i, key); return imponibile_handler(i, key);
} else } else
@ -844,6 +856,19 @@ bool TPrimanota_application::iva_handler(TMask_field& f, KEY k)
return error_box("La somma del totale documento e delle ritenute (%s) e' diverso dalla " return error_box("La somma del totale documento e delle ritenute (%s) e' diverso dalla "
"somma degli imponibili e delle imposte (%s)", (const char*)t, (const char*)i); "somma degli imponibili e delle imposte (%s)", (const char*)t, (const char*)i);
} }
TSheet_field& iva = app().ivas();
for (int i = 0; i < iva.items(); i++)
{
TToken_string& row = iva.row(i);
const real im(row.get(0));
if (!im.is_zero())
{
const TBill c(row, 6, 0x0);
if (!c.ok())
return f.error_box("Il conto della riga iva %d non e' completo", i+1);
}
}
} }
} }
return TRUE; return TRUE;
@ -869,12 +894,12 @@ bool TPrimanota_application::cg_conto_handler(TMask_field& f, KEY key)
return TRUE; return TRUE;
} }
bool TPrimanota_application::cg_clifo_handler(TMask_field& f, KEY k) bool TPrimanota_application::sheet_clifo_handler(TMask_field& f, KEY k)
{ {
if (!suspended_handler(f, k)) if (!suspended_handler(f, k))
return FALSE; return FALSE;
if (k == K_TAB) if (k == K_TAB || k == K_ENTER)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
const short cid = 100 + (f.dlg() % 100) -1; const short cid = 100 + (f.dlg() % 100) -1;
@ -1203,44 +1228,59 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
} }
bool TPrimanota_application::IVA2bill(const TCodiceIVA& iva, TBill& bill)
{
const TCausale& cau = causale();
const TString& tipo = iva.tipo();
if (tipo.not_empty())
{
if (tipo == "ES") cau.bill(5, bill); else
if (tipo == "NI") cau.bill(6, bill); else
if (tipo == "NS") cau.bill(7, bill);
}
if (!bill.ok() && !cau.corrispettivi())
{
const TMask& m = curr_mask();
bill.set(m.get_int(F_GRUPPORIC), m.get_int(F_CONTORIC), m.get_long(F_SOTTOCONTORIC));
}
if (!bill.ok())
cau.bill(2, bill);
return bill.ok();
}
// Handler of the F_CODIVA // Handler of the F_CODIVA
// Certified 99% // Certified 99%
bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key) bool TPrimanota_application::main_codiva_handler(TMask_field& f, KEY key)
{ {
if (key == K_TAB && f.focusdirty() && f.get().not_empty()) if (key == K_TAB && f.get().not_empty())
{ {
TToken_string& row = app().ivas().row(0); const real imp(app().ivas().row(1).get(0)); // Se il totale non e' stato spezzato
const real imp(row.get(0));
if (imp == ZERO) if (imp == ZERO)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
iva_notify(0, K_SPACE); iva_notify(0, K_SPACE);
const bool corr = app().causale().corrispettivi();
const TCodiceIVA iva(f.get()); const TCodiceIVA iva(f.get());
const bool corr = app().causale().corrispettivi();
real tot = app().totale_documento(); real tot = app().totale_documento();
real imposta; real imposta;
if (!corr) if (!corr)
imposta = app().scorpora(tot, iva.percentuale()); imposta = app().scorpora(tot, iva.percentuale());
TToken_string& row = app().ivas().row(0);
row.add(tot.string(), 0); // imponibile row.add(tot.string(), 0); // imponibile
row.add(iva.codice(), 1); // codice IVA
row.add(imposta.string(), 3); // imposta row.add(imposta.string(), 3); // imposta
TBill bill; // Conto della prima riga IVA if (iva.codice() != row.get(1))
const TString& tipo = iva.tipo();
if (tipo.not_empty())
{ {
if (tipo == "ES") app().causale().bill(5, bill); else row.add(iva.codice(), 1); // Aggiorna codice IVA
if (tipo == "NI") app().causale().bill(6, bill); else TBill bill; // Aggiorna conto della prima riga IVA
if (tipo == "NS") app().causale().bill(7, bill); app().IVA2bill(iva, bill);
}
if (!bill.ok() && !corr)
bill.set(m.get_int(F_GRUPPORIC), m.get_int(F_CONTORIC), m.get_long(F_SOTTOCONTORIC));
if (!bill.ok())
app().causale().bill(2, bill);
bill.add_to(row, 4, 0x7); bill.add_to(row, 4, 0x7);
}
app().ivas().force_update(0); app().ivas().force_update(0);
iva_notify(0, K_ENTER); iva_notify(0, K_ENTER);
@ -1255,7 +1295,10 @@ bool TPrimanota_application::totale_handler(TMask_field& f, KEY key)
{ {
bool ok = TRUE; bool ok = TRUE;
if (key == K_TAB && f.focusdirty()) if (key == K_TAB && f.focusdirty())
{
app().add_cgs_tot(f.mask()); app().add_cgs_tot(f.mask());
f.mask().field(F_CODIVA).on_hit();
}
if (key == K_ENTER && f.get().empty()) if (key == K_ENTER && f.get().empty())
ok = f.yesno_box("Totale documento nullo: continuare ugualmente?"); ok = f.yesno_box("Totale documento nullo: continuare ugualmente?");

View File

@ -70,12 +70,12 @@ class TPrimanota_application : public TRelation_application
static bool solaiva_handler(TMask_field& f, KEY key); static bool solaiva_handler(TMask_field& f, KEY key);
static bool descr_handler(TMask_field& f, KEY k); static bool descr_handler(TMask_field& f, KEY k);
static bool sheet_clifo_handler(TMask_field& f, KEY k);
static bool imponibile_handler(TMask_field& f, KEY key); static bool imponibile_handler(TMask_field& f, KEY key);
static bool codiva_handler(TMask_field& f, KEY key); static bool codiva_handler(TMask_field& f, KEY key);
static bool imposta_handler(TMask_field& f, KEY key); static bool imposta_handler(TMask_field& f, KEY key);
static bool dareavere_handler(TMask_field& f, KEY k); static bool dareavere_handler(TMask_field& f, KEY k);
static bool cg_conto_handler(TMask_field& f, KEY key); static bool cg_conto_handler(TMask_field& f, KEY key);
static bool cg_clifo_handler(TMask_field& f, KEY k);
static bool iva_notify(int r, KEY key); static bool iva_notify(int r, KEY key);
static bool iva_handler(TMask_field& f, KEY key); static bool iva_handler(TMask_field& f, KEY key);
@ -83,7 +83,6 @@ class TPrimanota_application : public TRelation_application
static bool cg_handler(TMask_field& f, KEY key); static bool cg_handler(TMask_field& f, KEY key);
static bool pag_notify(int r, KEY key); static bool pag_notify(int r, KEY key);
protected: protected:
virtual bool user_create(); virtual bool user_create();
virtual bool user_destroy(); virtual bool user_destroy();
@ -132,6 +131,7 @@ protected:
static real scorpora(real& imponibile, const real& percentuale); static real scorpora(real& imponibile, const real& percentuale);
static bool detraibile(TToken_string& row); static bool detraibile(TToken_string& row);
bool IVA2bill(const TCodiceIVA& iva, TBill& bill);
int bill2contr(const TBill& c, char sezione) const; int bill2contr(const TBill& c, char sezione) const;
int bill_used(const TBill& conto) const; int bill_used(const TBill& conto) const;
int det_used(char detraib) const; int det_used(char detraib) const;

View File

@ -342,6 +342,12 @@ const char* TCausale::desc_agg(int num) const
return da.get("S0"); return da.get("S0");
} }
const char* TCausale::descrizione() const
{ return _rec.ok() ? _rec.get(CAU_DESCR) : ""; }
const char* TCausale::codice() const
{ return _rec.ok() ? _rec.get(CAU_CODCAUS) : ""; }
bool TCausale::data_doc() const bool TCausale::data_doc() const
{ return _rec.ok() ? _rec.get_bool("DATADOC") : FALSE; } { return _rec.ok() ? _rec.get_bool("DATADOC") : FALSE; }

View File

@ -80,6 +80,9 @@ protected:
public: public:
TBill& bill(int num, TBill& c) const; TBill& bill(int num, TBill& c) const;
const char* codice() const;
const char* descrizione() const;
const char* desc_agg(int num) const; const char* desc_agg(int num) const;
bool data_doc() const; bool data_doc() const;

View File

@ -72,7 +72,6 @@ BEGIN
OUTPUT 107 DESCR OUTPUT 107 DESCR
ADD RUN CG0 -0 ADD RUN CG0 -0
CHECKTYPE NORMAL CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 101 102
MESSAGE DIRTY,106|DIRTY,206|DIRTY,306 MESSAGE DIRTY,106|DIRTY,206|DIRTY,306
WARNING "Conto inesistente o mancante sulla riga contabile" WARNING "Conto inesistente o mancante sulla riga contabile"
END END
@ -95,7 +94,6 @@ BEGIN
OUTPUT 107 DESCR OUTPUT 107 DESCR
ADD RUN cg0 -0 ADD RUN cg0 -0
CHECKTYPE NORMAL CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 101 102
WARNING "Sottoconto inesistente sulla riga contabile" WARNING "Sottoconto inesistente sulla riga contabile"
END END
@ -115,7 +113,6 @@ BEGIN
MESSAGE COPY,106 MESSAGE COPY,106
ADD RUN cg0 -1 ADD RUN cg0 -1
CHECKTYPE NORMAL CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 101 102
WARNING "Cliente inesistente sulla riga contabile" WARNING "Cliente inesistente sulla riga contabile"
END END
@ -136,7 +133,6 @@ BEGIN
ADD RUN cg0 -1 ADD RUN cg0 -1
MESSAGE COPY,106 MESSAGE COPY,106
CHECKTYPE NORMAL CHECKTYPE NORMAL
VALIDATE REQIF_FUNC 2 101 102
WARNING "Fornitore inesistente sulla riga contabile" WARNING "Fornitore inesistente sulla riga contabile"
END END
@ -340,6 +336,7 @@ END
BUTTON DLG_DELREC 9 2 BUTTON DLG_DELREC 9 2
BEGIN BEGIN
PROMPT -33 -1 "Elimina" PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END END
ENDPAGE ENDPAGE

View File

@ -42,7 +42,6 @@ BEGIN
OUTPUT 105 TIPOSPRIC OUTPUT 105 TIPOSPRIC
ADD RUN cg0 -0 ADD RUN cg0 -0
MESSAGE DIRTY,109|DIRTY,209|DIRTY,309 MESSAGE DIRTY,109|DIRTY,209|DIRTY,309
VALIDATE REQIF_FUNC 1 101
CHECKTYPE NORMAL CHECKTYPE NORMAL
WARNING "Conto inesistente nella riga IVA" WARNING "Conto inesistente nella riga IVA"
END END
@ -249,6 +248,7 @@ END
BUTTON DLG_DELREC 9 2 BUTTON DLG_DELREC 9 2
BEGIN BEGIN
PROMPT -33 -1 "Elimina" PROMPT -33 -1 "Elimina"
MESSAGE EXIT,K_DEL
END END
ENDPAGE ENDPAGE

View File

@ -426,7 +426,7 @@ void TApplication::about() const
{ {
#include <prassi.ver> #include <prassi.ver>
const TFilename n(__argv[0]); const TFilename n(__argv[0]);
message_box("PRASSI Versione Beta %3.1f\nProgramma %s\nLibreria del %s", message_box("PRASSI Versione Beta %4.2f\nProgramma %s\nLibreria del %s",
VERSION, (const char*)n.name(), __DATE__); VERSION, (const char*)n.name(), __DATE__);
} }

View File

@ -1,4 +1,4 @@
// $Id: maskfld.cpp,v 1.32 1994-10-19 13:56:40 alex Exp $ // $Id: maskfld.cpp,v 1.33 1994-10-19 15:00:23 guy Exp $
#include <xvt.h> #include <xvt.h>
#include <applicat.h> #include <applicat.h>
@ -1558,7 +1558,7 @@ const TBrowse* TEdit_field::get_browse(TScanner& scanner) const
const TBrowse* b = (const TBrowse*)f.browse(); const TBrowse* b = (const TBrowse*)f.browse();
#ifdef DBG #ifdef DBG
if (b == NULL) if (b == NULL)
error_box("La USE del campo %d non puo' essere copiata nel campo %d", id, dlg()); error_box("La USE del campo %d e' nulla e non puo' essere copiata nel campo %d", id, dlg());
#endif #endif
return b; return b;
} }

View File

@ -118,6 +118,7 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
const int NUMBER_WIDTH = 3; const int NUMBER_WIDTH = 3;
const int MAX_COL = 32; const int MAX_COL = 32;
int m_width[MAX_COL], v_width[MAX_COL]; int m_width[MAX_COL], v_width[MAX_COL];
int fixed_columns = 1; // Number of fixed columns
init(); init();
@ -139,7 +140,10 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
int m, v; int m, v;
if (at >= 0) if (at >= 0)
{ {
m = atoi(testa.mid(at+1)); const TString& wi = testa.mid(at+1);
if (wi[wi.len()-1] == 'F')
fixed_columns++;
m = atoi(wi);
testa.cut(at); testa.cut(at);
v = max(at, m+(f->has_query() ? 1 : 0)); v = max(at, m+(f->has_query() ? 1 : 0));
} }
@ -186,7 +190,7 @@ TSpreadsheet::TSpreadsheet(short x, short y, short dx, short dy,
listdef->v.list->movable_columns = TRUE; listdef->v.list->movable_columns = TRUE;
listdef->v.list->scroll_bar = TRUE; listdef->v.list->scroll_bar = TRUE;
listdef->v.list->scroll_bar_button = TRUE; listdef->v.list->scroll_bar_button = TRUE;
listdef->v.list->fixed_columns = 1; listdef->v.list->fixed_columns = fixed_columns;
listdef->v.list->width = rct.right-rct.left; listdef->v.list->width = rct.right-rct.left;
listdef->v.list->min_cell_height = CHARY; listdef->v.list->min_cell_height = CHARY;
listdef->v.list->min_heading_height = CHARY; listdef->v.list->min_heading_height = CHARY;

View File

@ -1 +1 @@
#define VERSION 1.10 #define VERSION 1.11

View File

@ -441,15 +441,18 @@ HIDDEN bool _mtcheck_val(TEdit_field& f, KEY)
} }
HIDDEN bool _reqif_val(TEdit_field& f, KEY) HIDDEN bool _reqif_val(TEdit_field& f, KEY k)
{
if (k == K_ENTER)
{ {
if (f.get().not_empty()) return TRUE; if (f.get().not_empty()) return TRUE;
const int nparms = get_val_param_num(); const int nparms = get_val_param_num();
for (int i = 0 ; i < nparms; i++) for (int i = 0 ; i < nparms; i++)
{ {
const char* s = get_val_param(i); const short id = atoi(get_val_param(i));
if (*s == '\0') break; if (id > 0 && f.mask().get(id).not_empty())
if (f.mask().get(atoi(s)).not_empty()) return FALSE; return FALSE;
}
} }
return TRUE; return TRUE;
} }