Patch level : 12.0 1096

Files correlati     : cg4.exe
Commento        :

Corretta la stampa dei progressivi sui registri nel caso di provressivi precedenti
This commit is contained in:
Alessandro Bonazzi 2021-11-24 11:49:53 +01:00
parent 1a2184724d
commit 4fbb00fdb5
7 changed files with 153 additions and 149 deletions

View File

@ -1,6 +1,7 @@
#include "cg0800a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_PRINT 2 2
BEGIN
PROMPT 1 1 "Stampa"

View File

@ -956,8 +956,6 @@ bool TStampa_registri_app::user_destroy()
// del periodo precedente.
void TStampa_registri_app::calcola_progressivi()
{
TString80 chiave, codtab;
int num=0;
if (_tipo_stampa == libro_unico)
num = _fino_a_mese; else
@ -965,83 +963,144 @@ void TStampa_registri_app::calcola_progressivi()
num = _datareg.month();
// Chiave per selezione records progressivi
chiave << _annoIVA << _codatt;
//calcolo i totali del periodo; calcola anche i totali da Periodo Precedente (se _annoIVA > 1997)
//calcolo i totali del periodo; calcola anche i totali da Periodo Precedente (se _annoIVA > 1997)
//_codatt e' gia' Z perche' lo leggo dal registro
//calcolo i totali progressivi e del periodo (tra questi anche quelli di cui periodo precedente)
for (int i=1; i<=num; i++)
{
const int start = 0, stop = (i == num) ? 1 : 0;
TRelation * rel = new TRelation(_tabname);
TRectype from(rel->curr());
TRectype to(rel->curr());
TString keyf;
TString keyt;
TString select("(CODTAB[11,15]==\"");
for (int j = start; j <= stop; j++)
select << _codreg << format("%02d", i) << "\")";
keyf <<_annoIVA << _codatt << 1 << _codreg << format("%02d", i);
keyt << _annoIVA << _codatt << 2 << _codreg << format("%02d", i);
from.put("CODTAB", keyf);
to.put("CODTAB", keyt);
TCursor c(rel, select, 1, &from, &to, 0x2);
TRectype & r = c.curr();
const int items = c.items();
for (c = 0L; c.pos() < items; ++c)
{
const bool calc_prp = j == 1; // Calcola progressivi precedenti
TTable tab(calc_prp ? "PRP" : _tabname);
tab.zero();
tab.put("CODTAB", chiave);
const TRectype r(tab.curr());
const TString & codtab = r.get("CODTAB");
const int mese = atoi(codtab.mid(13, 2));
const TString4 codiva = codtab.mid(16,4);
const int tipodet = atoi(codtab.mid(20,1));
real impo = r.get_real("R0");
real impos = r.get_real("R1");
real implo = r.get_real("R2");
tab.read(_isgteq);
for (; !tab.eof() && tab.curr() == r; tab.next())
//se il registro e' corrispettivi l'imponibile e l'iva li trovo in S2
if (_corrispettivi)
{
codtab = tab.get("CODTAB");
TString4 codreg = codtab.mid(10,3); codreg.trim();
const int mese = atoi(codtab.mid(13,2));
if (_codreg == codreg && mese == i)
TToken_string cs (r.get("S2"),'!');
impo = cs.get(0);
impos = cs.get(1);
}
//se in sospensione d'imposta l'imponibile e l'iva li trovo in R11 e R12
if (_sosp_imposta)
{
impo = r.get_real("R11");
impos = r.get_real("R12");
}
TToken_string fatt_rit (r.get("S1"),'!');
real im (fatt_rit.get(0));
real is (fatt_rit.get(1));
impo += im;
impos += is;
implo += im+is;
if (impo != ZERO || impos != ZERO || implo != ZERO)
{
if (_tipo_stampa != prova)
_tot_iva_array.add_riga(ZERO,ZERO,ZERO,impo,impos,implo,codiva); // progressivi
if (mese == num)
_tot_iva_array.add_riga(impo,impos,implo,ZERO,ZERO,ZERO,codiva); // periodo
}
if (_tipo_reg == acquisto) //registro acquisti
{
if (impo != ZERO || impos != ZERO)
{
const TString4 codiva = codtab.mid(16,4);
const int tipodet = atoi(codtab.mid(20,1));
real impo = tab.get_real("R0");
real impos = tab.get_real("R1");
real implo = tab.get_real("R2");
//se il registro e' corrispettivi l'imponibile e l'iva li trovo in S2
if (_corrispettivi)
{
TToken_string cs (tab.get("S2"),'!');
impo = cs.get(0);
impos = cs.get(1);
}
//se in sospensione d'imposta l'imponibile e l'iva li trovo in R11 e R12
if (_sosp_imposta)
{
impo = tab.get_real("R11");
impos = tab.get_real("R12");
}
TToken_string fatt_rit (tab.get("S1"),'!');
real im (fatt_rit.get(0));
real is (fatt_rit.get(1));
impo += im;
impos += is;
implo += im+is;
if (impo != ZERO || impos != ZERO || implo != ZERO)
{
if (!calc_prp && _tipo_stampa != prova)
_tot_iva_array.add_riga(ZERO,ZERO,ZERO,impo,impos,implo,codiva); // progressivi
if (mese == num)
{
if (calc_prp)
_tot_prec_iva_array.add_riga(impo,impos,implo,ZERO,ZERO,ZERO,codiva); // periodo prec
else
_tot_iva_array.add_riga(impo,impos,implo,ZERO,ZERO,ZERO,codiva); // periodo
}
}
if (!calc_prp && _tipo_reg == acquisto) //registro acquisti
{
if (impo != ZERO || impos != ZERO)
{
if (_tipo_stampa != prova)
_iva_array.add_riga(ZERO,ZERO,impo,impos,codiva,tipodet,0,true, 0); //progressivi
if (mese == num)
_iva_array.add_riga(impo,impos,ZERO,ZERO,codiva,tipodet,0,true, 0); // periodo
}
}
}
} // for table
} // for start to stop
if (_tipo_stampa != prova)
_iva_array.add_riga(ZERO,ZERO,impo,impos,codiva,tipodet,0,true, 0); //progressivi
if (mese == num)
_iva_array.add_riga(impo,impos,ZERO,ZERO,codiva,tipodet,0,true, 0); // periodo
}
}
} // for cursor
TRelation * relp = new TRelation("PRP");
TRectype fromp(relp->curr());
TRectype top(relp->curr());
keyf.trim();
keyt.trim();
fromp.put("CODTAB", keyf);
top.put("CODTAB", keyt);
TCursor cp(relp, select, 1, &fromp, &top, 0x2);
TRectype & rp = cp.curr();
const int itemsp = cp.items();
for (cp = 0L; cp.pos() < itemsp; ++cp)
{
const TString & codtab = rp.get("CODTAB");
const int mese = atoi(codtab.mid(13, 2));
const TString4 codiva = codtab.mid(16, 4);
const int tipodet = atoi(codtab.mid(20, 1));
real impo = rp.get_real("R0");
real impos = rp.get_real("R1");
real implo = rp.get_real("R2");
//se il registro e' corrispettivi l'imponibile e l'iva li trovo in S2
if (_corrispettivi)
{
TToken_string cs(rp.get("S2"), '!');
impo = cs.get(0);
impos = cs.get(1);
}
//se in sospensione d'imposta l'imponibile e l'iva li trovo in R11 e R12
if (_sosp_imposta)
{
impo = rp.get_real("R11");
impos = rp.get_real("R12");
}
TToken_string fatt_rit(rp.get("S1"), '!');
real im(fatt_rit.get(0));
real is(fatt_rit.get(1));
impo += im;
impos += is;
implo += im + is;
if (impo != ZERO || impos != ZERO || implo != ZERO)
{
if (mese == num - 1)
{
_tot_prec_iva_array.add_riga(impo, impos, implo, ZERO, ZERO, ZERO, codiva); // periodo prec
_tot_iva_array.add_riga(impo, impos, implo, ZERO, ZERO, ZERO, codiva);
}
else
{
if (mese == num)
_tot_iva_array.add_riga(-impo, -impos, -implo, ZERO, ZERO, ZERO, codiva); // periodo prec
if (_tipo_stampa != prova)
{
_tot_iva_array.add_riga(ZERO, ZERO, ZERO, -impo, -impos, -implo, codiva); // progressivi
if (_tipo_reg == acquisto && (impo != ZERO || impos != ZERO))
_iva_array.add_riga(ZERO, ZERO, -impo, -impos, codiva, tipodet, 0, true, 0); //progressivi
}
}
}
} // for cursor
} // for i to num
}
@ -4072,7 +4131,7 @@ bool TStampa_registri_app::stampa_riepilogo(int m)
TString80 chiave; chiave << _annoIVA << _tabreg->get("S8");
// Calcolo riepilogo del periodo e progressivi in caso di stampa su bollato
for (int i=1; i<=m; i++)
/* for (int i=1; i<=m; i++)
{
int start = 0, stop = i==m ? 1 : 0; // Per il mese attuale si calcolano anche i progressivi precedenti a questo periodo (PRP)
for (int j = start; j <= stop; j++)
@ -4136,8 +4195,8 @@ bool TStampa_registri_app::stampa_riepilogo(int m)
}
} // for table
} // for start to stop
} // for i to m
} // for i to m */
calcola_progressivi();
if (vect.items() > 0)
{
stampato = true;

View File

@ -450,7 +450,7 @@ int TParaliq_app::read(TMask& m)
TCursor cur(&relpla, "", 1, &pla, &pla);
const TRecnotype items = cur.items();
sf.destroy();
sf.reset();
if (items == 0)
init_array(sf); // Carica tutti i codici attività
else

View File

@ -112,30 +112,9 @@ class TProgind;
static const char * __date_field_name[] = { MOV_DATAREG, MOV_DATACOMP, MOV_DATACOMPCR };
enum TipoIVA
{
iva_errata = -1,
nessuna_iva = 0,
iva_vendite = 1,
iva_acquisti = 2,
libro_giornale = 5,
iva_generica = 9
};
enum tipo_movimento
{
tm_nessuno = 0,
tm_fattura = 1,
tm_nota_credito = 2,
tm_pagamento = 3,
tm_insoluto = 5,
tm_pagamento_insoluto = 6
};
enum cgrowtypes
{
typedef enum { iva_errata = -1, nessuna_iva = 0, iva_vendite = 1, iva_acquisti = 2, libro_giornale = 5, iva_generica = 9 } TipoIVA;
typedef enum { tm_nessuno = 0, tm_fattura = 1, tm_nota_credito = 2, tm_pagamento = 3, tm_insoluto = 5, tm_pagamento_insoluto = 6 } tipo_movimento;
typedef enum {
cgrowtype_contabile = ' ', // riga contabile
cgrowtype_totale = 'T', // Totale documento
cgrowtype_abbattivo = 'A', // Abbuoni attivi
@ -153,47 +132,12 @@ enum cgrowtypes
cgrowtype_imponibile = 'I', // Imponibile/contropartita saldaconto
cgrowtype_clisplit = '1', // Cliente per scissione pagamenti art.17-ter DPR 633/72
cgrowtype_spese = 'G' // Spese del saladaconto
};
enum tipo_sospensione
{
nessuna_sospensione,
sospensione_normale,
vol_affari,
liquidazione
};
enum tipobil
{
DataLimite = 1,
UltimaImmissione
};
enum tiposal
{
saldo_normale,
saldo_apertura,
saldo_chiusura
};
enum TTipo_data
{
Registrazione,
Competenza,
CostiRicavi
};
enum tiporeg
{
vendita = 1,
acquisto = 2,
riepilogativo = 3,
incassi = 4,
giornale = 5,
sociale = 6,
cespiti = 7,
giornale_magazzino = 9
};
} cgrowtypes;
typedef enum { nessuna_sospensione, sospensione_normale, vol_affari, liquidazione } tipo_sospensione;
typedef enum { DataLimite = 1, UltimaImmissione} tipobil;
typedef enum { saldo_normale, saldo_apertura, saldo_chiusura} tiposal;
typedef enum { Registrazione, Competenza, CostiRicavi } TTipo_data;
typedef enum { vendita = 1, acquisto = 2, riepilogativo = 3, incassi = 4, giornale = 5, sociale = 6, cespiti = 7, giornale_magazzino = 9 } tiporeg;
inline bool check_mov(const int tipomovprovv, const TString & provvis)
{

View File

@ -172,6 +172,7 @@ public: // TObject
real imposta(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imposta sull'imponibile l'imposta e la ritorna
real scorpora(real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Scorpora dall'imponibile l'imposta e la ritorna
real lordo(const real& imponibile, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola il lordo dell'imponibile l'imposta e la ritorna
real imponibile(const real& imposta, int ndec = AUTO_DECIMALS, const char * codval = "") const; // Calcola l'imponibile dell'imposta e lo ritorna
// bool reverse_charge() const;
// bool reverse_charge_pubb() const;

View File

@ -403,26 +403,25 @@ bool TRiga_array::add_riga(const real& imponibile, const real& imposta, const
const char* codiva)
{
bool found = false;
for (int i = 0; i < items(); i++)
for (int i = 0; !found && i < items(); i++)
{
TRiga& r = riga(i);
if (r._codiva==codiva)
found = r._codiva == codiva;
if (found)
{
found = true;
r._imponibile += imponibile;
r._imposta += imposta;
r._implordo += implordo;
r._imponibilep += imponibilep;
r._impostap += impostap;
r._implordop += implordop;
break;
}
}
if (!found)
{
TRiga* r = new TRiga(imponibile,imposta,implordo,imponibilep,impostap,implordop,codiva);
add(r);
}
add(new TRiga(imponibile, imposta, implordo, imponibilep, impostap, implordop, codiva));
return found;
}

View File

@ -31,11 +31,11 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
switch(tocheck)
{
case acq_norm:
case acq_norm:
//found = tipomov == 2 && tipoiva != "NS";
found = tipomov == 2;
found &= (tipodet == 0 /* || tipodet == 1 || tipodet == 3 ||
tipodet == 5 || tipodet == 9 */);
tipodet == 5 || tipodet == 9 */);
if (found)
{
if (tipost) //stampa
@ -57,7 +57,7 @@ bool classify_pim(const TRectype& pimr, real& imp, real& iva, tiporec& t, bool t
break;
case vend_norm:
//found = tipomov == 1 /* && corrisp == 1 */ && tipoiva != "NS";
found = tipomov == 1 /* && corrisp == 1 */;
found = tipomov == 1 /* && corrisp == 1 */;
if (found)
{
imp = pimr.get_real("R0");