Riportate modifiche dalla R_97_03_01M
git-svn-id: svn://10.65.10.50/trunk@5787 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2ecd366aa3
commit
5dba0c34a0
@ -1,5 +1,19 @@
|
||||
#include "cg1500.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Stampa bilancio" -1 -1 76 16
|
||||
|
||||
NUMBER F_CODDITTA 5
|
||||
@ -173,16 +187,6 @@ BEGIN
|
||||
PROMPT 2 13 "Quadratura con Libro Giornale"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Parametri bilancio di verifica" -1 -1 74 20
|
||||
@ -239,16 +243,6 @@ BEGIN
|
||||
ITEM "2|Alfabetico"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
@ -343,7 +343,7 @@ bool TConti_array::remove_iva(bool det)
|
||||
}
|
||||
|
||||
|
||||
HIDDEN bool detraibile(const TRectype& row, const TCausale& cau)
|
||||
bool TMovimentoPN::detraibile(const TRectype& row, const TCausale& cau) const
|
||||
{
|
||||
if (cau.iva() == iva_vendite) // Vendite sempre detraibili
|
||||
return TRUE;
|
||||
@ -351,9 +351,10 @@ HIDDEN bool detraibile(const TRectype& row, const TCausale& cau)
|
||||
const int tipo_det = row.get_int(RMI_TIPODET); // Leggi tipo detraibilita
|
||||
if (tipo_det != 0)
|
||||
return FALSE;
|
||||
|
||||
const real& prorata = cau.reg().prorata();
|
||||
return prorata < 100.0; // Se prorata = 100% e' indetraibile
|
||||
|
||||
const int annodoc = curr().get_date(MOV_DATADOC).year();
|
||||
const bool prorata100 = cau.reg().prorata100(annodoc);
|
||||
return !prorata100; // Se prorata = 100% e' indetraibile
|
||||
}
|
||||
|
||||
// Aggiusta i row types se sono andati persi o non sono stati convertiti
|
||||
|
@ -21,11 +21,14 @@
|
||||
#include <rmoviva.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef __CGLIB01_H
|
||||
class TRegistro;
|
||||
#endif
|
||||
|
||||
#ifndef __CG2103_H
|
||||
class TCausale;
|
||||
#endif
|
||||
|
||||
class TMovimentoPN : public TRelation
|
||||
{
|
||||
// class TMovimentoPN : public TRelation
|
||||
@ -41,6 +44,9 @@ protected:
|
||||
|
||||
int registra(bool re, bool force);
|
||||
int read_mov_rows();
|
||||
|
||||
bool detraibile(const TRectype& row, const TCausale& cau) const;
|
||||
|
||||
// @END
|
||||
|
||||
public:
|
||||
|
@ -110,16 +110,18 @@ bool TPrimanota_application::suspended_handler(TMask_field& f, KEY k)
|
||||
// Determina se un codice detrazione e' di tipo detraibile o no
|
||||
// Certified 70%
|
||||
bool TPrimanota_application::detraibile(TToken_string& row)
|
||||
{
|
||||
if (app().iva() == iva_vendite) // Vendite sempre detraibili
|
||||
{
|
||||
const TPrimanota_application& a = app();
|
||||
if (a.iva() == iva_vendite) // Vendite sempre detraibili
|
||||
return TRUE;
|
||||
|
||||
const int tipo_det = row.get_int(2); // Leggi tipo detraibilita
|
||||
if (tipo_det != 0)
|
||||
return FALSE;
|
||||
|
||||
const real& prorata = app().causale().reg().prorata();
|
||||
return prorata < 100.0; // Se prorata = 100% e' indetraibile
|
||||
|
||||
const int annodoc = a._msk[2]->get_date(F_DATADOC).year();
|
||||
const bool prorata100 = a.causale().reg().prorata100(annodoc);
|
||||
return !prorata100; // Se prorata = 100% e' indetraibile
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
|
@ -321,8 +321,9 @@ bool TPrimanota_application::test_prorata()
|
||||
|
||||
bool ok = TRUE;
|
||||
if (esistono_righe_senza_tipo_detrazione)
|
||||
{
|
||||
const bool prorata100 = causale().reg().prorata() >= 100.0;
|
||||
{
|
||||
const int annodoc = _msk[2]->get_date(F_DATADOC).year();
|
||||
const bool prorata100 = causale().reg().prorata100(annodoc);
|
||||
const bool esiste_riga_iva_detraibile = type2pos('D') >= 0;
|
||||
if (prorata100)
|
||||
ok = !esiste_riga_iva_detraibile;
|
||||
@ -341,7 +342,8 @@ bool TPrimanota_application::aggiusta_prorata()
|
||||
return FALSE;
|
||||
|
||||
TRegistro& reg = causale().reg();
|
||||
const real prorata_attuale = reg.prorata();
|
||||
const int annodoc = _msk[2]->get_date(F_DATADOC).year();
|
||||
const real prorata_attuale = reg.prorata(annodoc);
|
||||
const real vecchio_prorata = prorata_attuale < 100.0 ? 100.0 : 0.0;
|
||||
|
||||
TSheet_field& iva_sheet = ivas();
|
||||
@ -354,12 +356,12 @@ bool TPrimanota_application::aggiusta_prorata()
|
||||
if (!r.empty_items())
|
||||
{
|
||||
oldrow = r; // Memorizza riga iva
|
||||
reg.set_prorata(vecchio_prorata);
|
||||
reg.set_prorata(annodoc, vecchio_prorata);
|
||||
iva_notify(iva_sheet, i, K_SPACE);
|
||||
r.add("", 0); r.add("", 3); // Simula l'azzeramento degli importi
|
||||
iva_notify(iva_sheet, i, K_ENTER); // Simula uscita dalla riga
|
||||
|
||||
reg.set_prorata(prorata_attuale);
|
||||
reg.set_prorata(annodoc, prorata_attuale);
|
||||
iva_notify(iva_sheet, i, K_SPACE);
|
||||
r = oldrow; // Simula riscrittura importi
|
||||
iva_notify(iva_sheet, i, K_ENTER); // Simula uscita dalla riga
|
||||
@ -393,17 +395,14 @@ bool TPrimanota_application::easydoc_installed()
|
||||
return FALSE;
|
||||
|
||||
// where is EasyDoc installed?
|
||||
TFilename szBuf;
|
||||
int entrylen = GetPrivateProfileString("Easydoc", "Path", "\\EASYDOC",
|
||||
szBuf.get_buffer(), szBuf.size(),
|
||||
"EasyDoc.ini");
|
||||
GetPrivateProfileString("Easydoc", "Path", "\\EASYDOC",
|
||||
_EasyDocPath.get_buffer(), _EasyDocPath.size(),
|
||||
"EasyDoc.ini");
|
||||
// EasyDoc there isn't
|
||||
if (!entrylen)
|
||||
if (_EasyDocPath.empty())
|
||||
return FALSE;
|
||||
|
||||
// paste EasyDoc path
|
||||
szBuf[entrylen] = '\0';
|
||||
_EasyDocPath = szBuf;
|
||||
_EasyDocPath.add("EASYDOC.EXE");
|
||||
|
||||
// is EasyDoc present?
|
||||
@ -438,11 +437,12 @@ bool TPrimanota_application::run_easydoc(const char* azione) const
|
||||
TFilename dati_dir = get_firm_dir();
|
||||
// completa path relativo,
|
||||
// ma che male c'era a registrarlo sempre assoluto??
|
||||
if (dati_dir[0] == '\\' || dati_dir[0] == '/' || dati_dir[1] != ':')
|
||||
if (dati_dir.is_relative_path())
|
||||
{
|
||||
TFilename modulename(argv(0));
|
||||
dati_dir = modulename.path();
|
||||
dati_dir.add(get_firm_dir());
|
||||
modulename = modulename.path();
|
||||
modulename.add(dati_dir);
|
||||
dati_dir = modulename;
|
||||
}
|
||||
|
||||
// rimuove barre e controbarre per dargli un aspetto decente
|
||||
|
@ -44,6 +44,27 @@ void _Iva11Array::zero(const char* fld_name)
|
||||
bi.value() = 0.0;
|
||||
}
|
||||
|
||||
// Methods of _ProrataItem
|
||||
void _ProrataItem::set(const int a, const real& c, const real& p, const bool fl)
|
||||
{
|
||||
_current_perc = c;
|
||||
_previous_ok = a < 1998 ? TRUE : fl;
|
||||
|
||||
if (a > 1997 ) // Se siamo prima del 1997 la percentuale prec vale 0
|
||||
if (!_previous_ok) // Se non ha trovato la percentuale anno precedente
|
||||
_previous_perc = c; // usa quella attuale ricordandosi la segnalazione
|
||||
else
|
||||
_previous_perc = p;
|
||||
}
|
||||
|
||||
// Calcola prorata con percentuale attuale o corrente
|
||||
real _ProrataItem::calc_prorata(const real& acq, const bool current)
|
||||
{
|
||||
real prorata = acq * ((current ? _current_perc : _previous_perc) / 100.0);
|
||||
prorata.round(ROUND_LIRA);
|
||||
return prorata;
|
||||
}
|
||||
|
||||
// Methods of application!
|
||||
real TLiquidazione_app::CENTO(100.0);
|
||||
|
||||
@ -682,7 +703,7 @@ bool TLiquidazione_app::lst_tm_handler(TMask_field& f, KEY key)
|
||||
if (change)
|
||||
{
|
||||
app().begin_wait();
|
||||
//app().reset_choices(f.mask());
|
||||
app().reset_choices(f.mask());
|
||||
app().set_month(m);
|
||||
app().build_ditte_sheet(f.mask().source_file() == "cg4300a.msk" ?
|
||||
(wht)atoi(f.mask().get(CG43_RDB_VERS)) :
|
||||
|
21
cg/cg4300.h
21
cg/cg4300.h
@ -157,7 +157,7 @@ public:
|
||||
word _f0, _f1, _f2, _f3;
|
||||
TString _s0, _s1, _s2, _s3, _s4, _s5;
|
||||
real _r0, _r1, _r2, _r3, _r4, _r5,
|
||||
_r6, _r7, _r8, _r9, _r10,_r11;
|
||||
_r6, _r7, _r8, _r9, _r10,_r11, _r12, _r13, _r14;
|
||||
TArray _arr;
|
||||
TDate _d0;
|
||||
|
||||
@ -206,6 +206,22 @@ public:
|
||||
virtual ~_Iva11Array() {}
|
||||
};
|
||||
|
||||
// _ProrataItem serve per calcolare prorata dal 1998
|
||||
class _ProrataItem : public TObject
|
||||
{
|
||||
real _current_perc; // Percentuale prorata anno in corso
|
||||
real _previous_perc; // Percentuale prorata anno precedente
|
||||
bool _previous_ok; // Flag per indicare se presente tabella anno precedente
|
||||
public:
|
||||
void set(const int a, const real& c, const real& p, const bool fl = TRUE);
|
||||
real calc_prorata(const real& acq, const bool current = TRUE);
|
||||
const real& current() { return _current_perc; }
|
||||
const real& previous() { return _previous_perc; }
|
||||
const bool flag() { return _previous_ok; }
|
||||
_ProrataItem() {}
|
||||
virtual ~_ProrataItem() {}
|
||||
};
|
||||
|
||||
// ------------------------------------------------------------------------
|
||||
// Application
|
||||
// ------------------------------------------------------------------------
|
||||
@ -274,7 +290,8 @@ class TLiquidazione_app : public TPrint_application
|
||||
|
||||
// totali vari per attivita'
|
||||
real _p8, _p8b, _p9; // totali plafond
|
||||
real _prorata; // percentuale indetraibilita' (prorata)
|
||||
_ProrataItem
|
||||
_prorata; // Mini cazzetto per calcoli prorata
|
||||
long __firm; // ditta selezionata all'inizio
|
||||
bool _is_interactive; // lanciata da menu o da altro prog
|
||||
bool _is_visliq; // lanciata da visualizzazione liquidazione
|
||||
|
102
cg/cg4300a.uml
102
cg/cg4300a.uml
@ -1,5 +1,5 @@
|
||||
#include "cg4300a.h"
|
||||
PAGE "Calcolo Liquidazioni" -1 -1 68 15
|
||||
PAGE "Calcolo Liquidazioni" -1 -1 68 16
|
||||
|
||||
RADIOBUTTON CG43_RDB_VERS 16
|
||||
BEGIN
|
||||
@ -9,48 +9,21 @@ BEGIN
|
||||
ITEM "3|Trimestrali" MESSAGE SHOW,CG43_LST_TRIM|HIDE,CG43_LST_MESE
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 40 5
|
||||
GROUPBOX DLG_NULL 38 5
|
||||
BEGIN
|
||||
PROMPT 23 1 "Scelta ditte"
|
||||
PROMPT 26 1 "Anno/Periodo"
|
||||
END
|
||||
|
||||
|
||||
NUMBER CG43_FLD_DFR 5
|
||||
NUMBER CG43_FLD_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 24 2 "Da codice "
|
||||
HELP "Codice ditta di partenza per la selezione"
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
NUMBER CG43_FLD_DTO 5
|
||||
BEGIN
|
||||
PROMPT 24 3 "A codice "
|
||||
HELP "Codice ditta di fine selezione"
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
STRING CG43_FLD_SELECTED 5
|
||||
BEGIN
|
||||
PROMPT 24 4 "Scelte n. "
|
||||
FLAGS "DR"
|
||||
END
|
||||
|
||||
BUTTON CG43_BUT_SEL 10 2
|
||||
BEGIN
|
||||
PROMPT 48 2 "~Selezione"
|
||||
PICTURE BMP_SELECT
|
||||
HELP "Selezione ditte di cui fare la liquidazione"
|
||||
END
|
||||
|
||||
BUTTON CG43_BUT_ANN 10
|
||||
BEGIN
|
||||
PROMPT 48 4 "A~zzera"
|
||||
HELP "Azzerare la selezione delle ditte da fare la liquidazione"
|
||||
PROMPT 28 2 "Anno "
|
||||
HELP "Anno per cui effettuare il calcolo"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST CG43_LST_MESE 15
|
||||
BEGIN
|
||||
PROMPT 4 7 "Periodo "
|
||||
PROMPT 28 3 "Periodo "
|
||||
HELP "Mese per cui effettuare il calcolo liquidazione"
|
||||
ITEM "13|13a liquid."
|
||||
FLAGS "AM"
|
||||
@ -58,7 +31,7 @@ END
|
||||
|
||||
LIST CG43_LST_TRIM 15
|
||||
BEGIN
|
||||
PROMPT 4 7 "Periodo "
|
||||
PROMPT 28 3 "Periodo "
|
||||
HELP "Trimestre di cui effettuare il calcolo liquidazione"
|
||||
ITEM "3|1 Trimestre "
|
||||
ITEM "6|2 Trimestre "
|
||||
@ -67,16 +40,9 @@ BEGIN
|
||||
ITEM "13|13a liquid."
|
||||
END
|
||||
|
||||
NUMBER CG43_FLD_ANNO 4
|
||||
BEGIN
|
||||
PROMPT 32 7 "Anno "
|
||||
HELP "Anno per cui effettuare il calcolo"
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
LIST CG43_LST_CALC 15
|
||||
BEGIN
|
||||
PROMPT 4 8 "Ricalcola "
|
||||
PROMPT 28 4 "Ricalcola "
|
||||
HELP "Indicare se rifare il calcolo durante la stampa"
|
||||
ITEM "2|Mese/trimestre"
|
||||
ITEM "3|Da inizio anno"
|
||||
@ -84,21 +50,59 @@ END
|
||||
|
||||
LIST CG43_LST_CALC_13A 15
|
||||
BEGIN
|
||||
PROMPT 4 8 "Ricalcola "
|
||||
PROMPT 28 4 "Ricalcola "
|
||||
HELP "Indicare se rifare il calcolo durante la stampa"
|
||||
ITEM "3|Da inizio anno"
|
||||
FLAGS "HD"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 40 5
|
||||
BEGIN
|
||||
PROMPT 4 6 "Scelta ditte"
|
||||
END
|
||||
|
||||
NUMBER CG43_FLD_DFR 5
|
||||
BEGIN
|
||||
PROMPT 5 7 "Da codice "
|
||||
HELP "Codice ditta di partenza per la selezione"
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
NUMBER CG43_FLD_DTO 5
|
||||
BEGIN
|
||||
PROMPT 5 8 "A codice "
|
||||
HELP "Codice ditta di fine selezione"
|
||||
FLAGS "B"
|
||||
END
|
||||
|
||||
STRING CG43_FLD_SELECTED 5
|
||||
BEGIN
|
||||
PROMPT 5 9 "Scelte n. "
|
||||
FLAGS "DR"
|
||||
END
|
||||
|
||||
BUTTON CG43_BUT_SEL 10 2
|
||||
BEGIN
|
||||
PROMPT 28 7 "~Selezione"
|
||||
PICTURE BMP_SELECT
|
||||
HELP "Selezione ditte di cui fare la liquidazione"
|
||||
END
|
||||
|
||||
BUTTON CG43_BUT_ANN 10
|
||||
BEGIN
|
||||
PROMPT 28 9 "A~zzera"
|
||||
HELP "Azzerare la selezione delle ditte da fare la liquidazione"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 60 3
|
||||
BEGIN
|
||||
PROMPT 4 10 "Stampa"
|
||||
PROMPT 4 11 "Stampa"
|
||||
END
|
||||
|
||||
|
||||
BOOLEAN CG43_CHK_STAMPA
|
||||
BEGIN
|
||||
PROMPT 5 11 "Esegui "
|
||||
PROMPT 5 12 "Esegui "
|
||||
MESSAGE TRUE ENABLE,CG43_FLD_DATA
|
||||
MESSAGE FALSE DISABLE,CG43_FLD_DATA
|
||||
END
|
||||
@ -106,14 +110,14 @@ END
|
||||
|
||||
DATE CG43_FLD_DATA
|
||||
BEGIN
|
||||
PROMPT 18 11 "con data "
|
||||
PROMPT 18 12 "con data "
|
||||
FLAGS "A"
|
||||
END
|
||||
|
||||
|
||||
BOOLEAN CG43_CHK_FINAL
|
||||
BEGIN
|
||||
PROMPT 45 11 "Solo stampa"
|
||||
PROMPT 45 12 "Solo stampa"
|
||||
// MESSAGE TRUE DISABLE,CG43_LST_CALC
|
||||
// MESSAGE FALSE ENABLE,CG43_LST_CALC
|
||||
END
|
||||
|
@ -235,11 +235,20 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
|
||||
_p8 = _pla->get_real("R5");
|
||||
_p8b = _pla->get_real("R6");
|
||||
_p9 = _pla->get_real("R7");
|
||||
_prorata = _pla->get_real("R8");
|
||||
_isplafond = !(_p8.is_zero() && _p8b.is_zero() &&
|
||||
_p9.is_zero());
|
||||
_isservizio = _pla->get("S7") == "S";
|
||||
_mixed = _pla->get("S7") == "M" || _pla->get("S7") == "E";
|
||||
_mixed = _pla->get("S7") == "M" || _pla->get("S7") == "E";
|
||||
|
||||
TString yr(_year);
|
||||
real pr1 = _pla->get_real("R8"); // Percentuale prorata anno attuale
|
||||
const int anno = atoi(_year);
|
||||
_year = format("%d", anno - 1);
|
||||
const bool flag = look_pla(cattiv, FALSE); // Reperisce percentuale prorata anno precedente
|
||||
real pr2 = _pla->get_real("R8");
|
||||
_year = yr; // Risetta l'anno corretto e riposiziona la tabella...
|
||||
look_pla(cattiv, FALSE);
|
||||
_prorata.set(anno, pr1, pr2, flag);
|
||||
}
|
||||
else
|
||||
_isservizio = _nditte->curr(LF_ATTIV).get("TIPOATT") == "S";
|
||||
@ -339,6 +348,9 @@ bool TLiquidazione_app::update_firm(int month, bool recalc)
|
||||
if ((is_month_ok_strict(month) && _month != 13 && _recalc != never) || _is_interactive /*month == 13*/ )
|
||||
write_liq(month, atts);
|
||||
|
||||
// occorre poterla chiamare altre volte con mesi diversi
|
||||
_nditte->restore_status();
|
||||
|
||||
// rimborso infraannuale
|
||||
_DescrItem* rimb_d = NULL;
|
||||
if (month == _month)
|
||||
@ -501,6 +513,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
real cess_amm_iva = 0.0;
|
||||
real acquisti = 0.0;
|
||||
real acquisti_iva = 0.0;
|
||||
real acquisti_iva_annoprec
|
||||
= 0.0;
|
||||
real vendite = 0.0;
|
||||
real vendite_iva = 0.0;
|
||||
real esenti_b1 = 0.0;
|
||||
@ -541,6 +555,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
real agr_imp = 0.0;
|
||||
real agr_iva = 0.0;
|
||||
|
||||
const int year_int = atoi(_year); // Mi sono rotto di fare sempre delle atoi()...
|
||||
|
||||
// Spiegazione dell'arcano segreto sulle agenzie viaggio:
|
||||
// non viene applicata la setregion() al cursore perche' e' necessario
|
||||
// tenere conto della DATA74TER se presente.
|
||||
@ -548,8 +564,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
{
|
||||
TRectype from(_cur->curr()); from.zero();
|
||||
TRectype to(from);
|
||||
TDate f(1, month == 13 ? 1 : month, atoi(_year));
|
||||
TDate t(1, month == 13 ? 12 : month, atoi(_year));
|
||||
TDate f(1, month == 13 ? 1 : month, year_int);
|
||||
TDate t(1, month == 13 ? 12 : month, year_int);
|
||||
t.set_end_month();
|
||||
from.put(MOV_DATAREG, f);
|
||||
to.put(MOV_DATAREG, t);
|
||||
@ -585,6 +601,9 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
TString16 tipodoc = _mov->get("TIPODOC");
|
||||
bool corrisp = _reg->get_bool("B0");
|
||||
tiporeg tipomov = (tiporeg)_reg->get_long("I0");
|
||||
// Controlla se la data del documento si riferisce all'anno precedente (PRORATA 1998)
|
||||
TDate datedoc(_mov->get("DATADOC"));
|
||||
const bool anno_doc_prec = ((year_int > 1997) && (!datedoc.ok() || datedoc.year() == year_int - 1));
|
||||
|
||||
if (_isviaggio && tipomov == vendita && !(_mov->get("DATA74TER").empty()))
|
||||
date = _mov->get_date("DATA74TER");
|
||||
@ -904,16 +923,14 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
const bool is_not_fs = tipodoc != "FS";
|
||||
|
||||
// Se si tratta di Fattura Fiscale o Fattura Scontrino, non scorpora
|
||||
// In particolare le FS non vengono incluse ne' nello specchietto ne' nel totale
|
||||
if (corrisp && tipodoc != "FF" && is_not_fs)
|
||||
lordo2netto(agr_imp,agr_iva,p);
|
||||
|
||||
if (tipoagr == 1) // Ora si utilizza solo il segnalino 1
|
||||
if (tipoagr == 1 && is_not_fs) // Ora si utilizza solo il segnalino 1
|
||||
{
|
||||
if (is_not_fs) // Se e' FS non aggiunge al totale vend. Ia parte tab A
|
||||
{
|
||||
agr_1 += agr_iva;
|
||||
agr_1i += agr_imp;
|
||||
}
|
||||
agr_1 += agr_iva;
|
||||
agr_1i += agr_imp;
|
||||
|
||||
// Nuovo regime agricolo dal 1998: si sommino per codice iva di compensazione (da reperire su PCON)
|
||||
if (_isagr98)
|
||||
@ -1102,6 +1119,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
// totale acquisti
|
||||
acquisti += imponibile;
|
||||
acquisti_iva += imposta;
|
||||
if (anno_doc_prec) // Se abilitato, somma l'iva acquisti relativi a documenti anno precedente
|
||||
acquisti_iva_annoprec += imposta;
|
||||
}
|
||||
|
||||
// corrispettivi
|
||||
@ -1329,12 +1348,21 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
* calcola il lercio prorata
|
||||
* solo se liq. periodica
|
||||
*/
|
||||
real prorata;
|
||||
if (!_prorata.is_zero() && month != 13)
|
||||
real prorata, prorata_precedente;
|
||||
if (month != 13)
|
||||
{
|
||||
prorata = acquisti_iva * (_prorata / CENTO);
|
||||
prorata.round(ROUND_LIRA);
|
||||
acquisti_iva -= prorata;
|
||||
const real& current = _prorata.current();
|
||||
const real& previous = _prorata.previous();
|
||||
if (previous == current && _prorata.flag()) // Se le percentuali sono uguali considera tutto sull'anno corrente
|
||||
acquisti_iva_annoprec = ZERO; // Tranne nel caso in cui non esista la tabella prec.
|
||||
if (!current.is_zero())
|
||||
prorata = _prorata.calc_prorata(acquisti_iva - acquisti_iva_annoprec);
|
||||
if (!previous.is_zero() && acquisti_iva_annoprec != ZERO)
|
||||
{
|
||||
prorata_precedente = _prorata.calc_prorata(acquisti_iva_annoprec, FALSE);
|
||||
prorata += prorata_precedente;
|
||||
}
|
||||
acquisti_iva -= prorata; // Rettifica acquisti_iva
|
||||
}
|
||||
look_plm(month, codatt, TRUE);
|
||||
|
||||
@ -1352,7 +1380,8 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
* Il prorata pagato in annuale viene scritto a 0, perche' in realta' sarebbe
|
||||
* la somma di quelli pagati nei mesi precedenti.
|
||||
*/
|
||||
_plm->put("R2", prorata);
|
||||
_plm->put("R2", prorata); // Prorata complessivo (acq. rif. anno attuale + acq. rif. anno precedente)
|
||||
_plm->put("R14", prorata_precedente); // Prorata acq. rif. anno precedente (in stampa prorata attuale sara' totale - precedente)
|
||||
|
||||
if (_isviaggio)
|
||||
{
|
||||
@ -1404,9 +1433,11 @@ void TLiquidazione_app::recalc_att(int month, const char* codatt)
|
||||
_plm->put("R0", vendite_iva);
|
||||
_plm->put("R1", acquisti_iva);
|
||||
_plm->put("R3", ult_detr);
|
||||
// probabilmente R4 serviva per il decalage e non si usera'
|
||||
_plm->put("R12", _prorata); // per comodita' in stampa
|
||||
_plm->put("R4", _prorata.previous()); // per comodita' in stampa
|
||||
_plm->put("R12", _prorata.current()); // per comodita' in stampa
|
||||
_plm->put("B0", "X"); // calcolato (invalidato dalla primanota)
|
||||
// Setta il flag di stampa errore: se siamo oltre 1997 e non esiste tabella anno prec e vi sono docs con tale riferimento
|
||||
_plm->put("B1", !_prorata.flag() && acquisti_iva_annoprec != ZERO && year_int > 1997);
|
||||
_pom->put("R9", acq_ies);
|
||||
_pom->put("R10", acq_ies_iva);
|
||||
_pum->put("R8", acq_pint);
|
||||
@ -2120,6 +2151,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
{
|
||||
TToken_string atts(codatts);
|
||||
const char* tmpatt;
|
||||
const int year_int = atoi(_year);
|
||||
|
||||
if (_ver->read(atoi(_year),_month)!=NOERR)
|
||||
warning_box("Errore %d in lettura tabella versamenti ed interessi.",_ver->status());
|
||||
@ -2199,7 +2231,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
// precedente
|
||||
differita = TRUE;
|
||||
TString yr(_year);
|
||||
_year = format("%d", atoi(_year)-1);
|
||||
_year = format("%d", year_int-1);
|
||||
if (!look_lim(12)) //controlla solamente, il vero posizionamento lo fa dopo
|
||||
{
|
||||
_year = yr;
|
||||
@ -2249,18 +2281,18 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
// pum->R11 = tot. imponibile reg agr. 2
|
||||
// L'iva acquisti viene calcolata in modo diverso se siamo dal 1998 in poi:
|
||||
// somma l'iva ammessa in detr. I parte tab. A (R13) anziche' iva vendite (R5)
|
||||
iva_acq += _plm->get_real("R7") + _plm->get_real(_isagr98 ? "R13" : "R5");
|
||||
iva_acq += _plm->get_real("R7") + _plm->get_real(year_int > 1997 ? "R13" : "R5");
|
||||
acq_noCEE += _plm->get_real("R11");
|
||||
imp_agr1 += _pum->get_real("R10");
|
||||
imp_agr2 += _pum->get_real("R11");
|
||||
}
|
||||
detrazioni+= (_plm->get_real("R3") + _plm->get_real("R4"));
|
||||
detrazioni+= (_plm->get_real("R3"));
|
||||
|
||||
// detrazioni solo non in regime agricolo
|
||||
if (!attivita_agricola)
|
||||
{
|
||||
risultato -= (_plm->get_real("R3") + _plm->get_real("R4"));
|
||||
res_cred += (_plm->get_real("R3") + _plm->get_real("R4"));
|
||||
risultato -= (_plm->get_real("R3"));
|
||||
res_cred += (_plm->get_real("R3"));
|
||||
}
|
||||
|
||||
/* totalizza importi 74 ter */
|
||||
@ -2436,11 +2468,11 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
if (!ris.is_zero())
|
||||
prorata = (es_b1/ris) * CENTO;
|
||||
real conguaglio = 0.0;
|
||||
real topay = 0.0;
|
||||
prorata.round(ROUND_LIRA);
|
||||
if (prorata != _prorata)
|
||||
if (prorata != _prorata.current())
|
||||
{
|
||||
// calcolo conguaglio -- se positivo e' a debito
|
||||
real topay;
|
||||
if (prorata > 0.0)
|
||||
{
|
||||
topay = (iaq + ppg) * (prorata / CENTO);
|
||||
@ -2454,7 +2486,13 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
if (prorata < 0.0) prorata = 0.0;
|
||||
_pla->put("R9", conguaglio);
|
||||
_pla->put("R10",prorata);
|
||||
tot_cong += conguaglio;
|
||||
|
||||
// Prorata delle mie brame...
|
||||
// Chi e' il piu' sfatto del reame?
|
||||
// Non va considerata la differenza tra topay e pro-rata pagato
|
||||
// ma semplicemente topay. (Vedi cg4304.cpp in set_annual())
|
||||
//tot_cong += conguaglio;
|
||||
tot_cong += topay;
|
||||
_pla->rewrite();
|
||||
|
||||
// scrivi nuovo prorata in tabella anno successivo
|
||||
@ -2632,6 +2670,7 @@ void TLiquidazione_app::write_liq(int month, const char* codatts)
|
||||
_lim->put("R3", deb_mens);
|
||||
_lim->put("R1", rimborsi);
|
||||
_lim->put("R5", rettifiche);
|
||||
_lim->put("R6", detrazioni);
|
||||
_lim->put("R7", tot_cong);
|
||||
_lim->put("R8", versamenti);
|
||||
_lim->put("R9", vers_int);
|
||||
|
@ -345,7 +345,7 @@ void TLiquidazione_app::describe_agricolo(int month, const char* codatt)
|
||||
for (_pia->first(); !_pia->eof(); _pia->next()) // Scorre i progressivi agricoli
|
||||
{
|
||||
if (strcmp((const char*)*_pia_codatt, codatt) == 0 &&
|
||||
(atoi(*_pia_mese) == month) && _year == *_pia_anno) // E sono gia' in ordine di codice...
|
||||
is_month_plain(atoi(*_pia_mese)) && _year == *_pia_anno) // E sono gia' in ordine di codice...
|
||||
{
|
||||
_DescrItem* p = new _DescrItem(PROGAGR);
|
||||
p->_r0 = _pia->get_real("R0"); // Imponibile
|
||||
@ -791,18 +791,24 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
t->_r8 += _pum->get_real("R0"); // cessioni beni ammort.
|
||||
t->_r9 += _pum->get_real("R1"); // IVA su cessioni ammort.
|
||||
t->_r10 += _pum->get_real("R4"); // tot. esenti IVA
|
||||
t->_r11 += _plm->get_real("R2"); // pro-rata indetraibile
|
||||
|
||||
if (!annual) // Se non siamo in annuale prende il prorata su doc. acq. anno precedente
|
||||
{
|
||||
t->_r12 += _plm->get_real("R14");
|
||||
t->_r13 = _plm->get_real("R4"); // percentuale prorata anno precedente
|
||||
}
|
||||
t->_r11 += _plm->get_real("R2") - _plm->get_real("R14"); // pro-rata indetraibile sui doc. acq. anno attuale
|
||||
// in caso di liq. annuale prende il totale (tutto R2)
|
||||
ad1 = real(ttm.get(1));
|
||||
ad2 = real(ttm.get(2));
|
||||
ad1 += _pom->get_real("R11");
|
||||
ad2 += _pom->get_real("R12");
|
||||
ttm.add(_plm->get("R12"), 0); // % pro-rata
|
||||
ttm.add(_plm->get("R12"), 0); // % pro-rata anno corrente
|
||||
ttm.add(ad1.string(),1); // imp. acq. amm. indetr.
|
||||
ttm.add(ad2.string(),2); // IVA acq. amm. indetr
|
||||
t->_s0 = ttm;
|
||||
|
||||
t->_f0 = !_prorata.is_zero() && (month != 13); // flag per segnalare l'esistenza
|
||||
t->_f0 = !_prorata.current().is_zero() && (month != 13); // flag per segnalare l'esistenza
|
||||
t->_f1 = _plm->get_bool("B1"); // flag per segnalare errore tabella prorata precedente mancante
|
||||
d->_r9 += _pom->get_real("R9"); // acq. inded. su ricavi esenti
|
||||
d->_r10 += _pom->get_real("R10"); // IVA acq. inded. su ricavi esenti
|
||||
|
||||
@ -869,7 +875,7 @@ void TLiquidazione_app::describe_pims(int month, const char* codatt)
|
||||
real co = 0.0;
|
||||
real topay = 0.0;
|
||||
pr.round(ROUND_LIRA);
|
||||
if (pr != _prorata)
|
||||
if (pr != _prorata.current())
|
||||
{
|
||||
// calcolo conguaglio -- se positivo e' a debito
|
||||
if (pr > 0.0)
|
||||
@ -1510,12 +1516,24 @@ void TLiquidazione_app::set_pumpam(_DescrItem& d)
|
||||
&spgn_iva);
|
||||
}
|
||||
if (d._f0)
|
||||
{
|
||||
{
|
||||
// Anno in corso...
|
||||
printed = TRUE;
|
||||
real prc(dp.get(0));
|
||||
|
||||
set_row(row++, "%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r",
|
||||
(const char*)prc.string(), &(d._r11));
|
||||
|
||||
if (atoi(_year) > 1997 && d._r12 != ZERO) // prorata 1998
|
||||
{ // Anno precedente
|
||||
set_row(row++, "%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r",
|
||||
(const char*)d._r13.string(), &(d._r12));
|
||||
if (d._f1) // Segnala errore per tabella anno precedente non esistente
|
||||
{
|
||||
row++;
|
||||
set_row(row++, "Impossibile reperire la %% PRO-RATA relativa all'anno precedente.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// items vari per dichiarazione annuale
|
||||
@ -1879,12 +1897,20 @@ bool TLiquidazione_app::set_annual(_DescrItem& d)
|
||||
set_row(row++,"B3 - Operazioni esenti da nr. 1 a 9 art. 10 @69g%r", &(d._r5));
|
||||
set_row(row++,"Volume d'affari - B3 @69g%r", &(d._r0));
|
||||
set_row(row++,"Indetraibilita'@69g%r%%", &(d._r2));
|
||||
if (!(d._r3.is_zero()))
|
||||
{
|
||||
const char* sss = d._r3.sign() < 0 ? "credito" : "debito";
|
||||
real ccc = abs(d._r3);
|
||||
set_row(row++,"Conguaglio a %s@69g%r", sss, &ccc);
|
||||
}
|
||||
|
||||
/* Prorata delle mie brame...
|
||||
* chi e' il piu' sfatto del reame ?
|
||||
* La seguente cosa e' ritenuta sbagliata da PRASSI
|
||||
* Viene lasciato (anch'esso) per memoria futura (vedi cg4301.cpp in write_liq())
|
||||
*
|
||||
* if (!(d._r3.is_zero()))
|
||||
* {
|
||||
* const char* sss = d._r3.sign() < 0 ? "credito" : "debito";
|
||||
* real ccc = abs(d._r3);
|
||||
* set_row(row++,"Conguaglio a %s@69g%r", sss, &ccc);
|
||||
* }
|
||||
*/
|
||||
|
||||
set_print_zero(FALSE);
|
||||
}
|
||||
return ret;
|
||||
@ -1937,7 +1963,9 @@ void TLiquidazione_app::set_ventila(_DescrItem& d)
|
||||
void TLiquidazione_app::set_regagr(_DescrItem& d)
|
||||
{
|
||||
set_print_zero(TRUE);
|
||||
|
||||
|
||||
const bool is1998 = atoi(_year) == 1998;
|
||||
|
||||
real& agr_1 = d._r0;
|
||||
real& agr_2 = d._r1;
|
||||
real& agr_3 = d._r2;
|
||||
@ -1954,7 +1982,7 @@ void TLiquidazione_app::set_regagr(_DescrItem& d)
|
||||
real ara = agr_5 + agr_6;
|
||||
real arn = agr_3 + agr_4;
|
||||
real agr_ven = agr_1 + agr_2;
|
||||
real ivadt_amm = agr_3 + ivadt + ( _isagr98 ? iva_detIA : agr_1);
|
||||
real ivadt_amm = agr_3 + ivadt + (is1998 ? iva_detIA : agr_1);
|
||||
|
||||
set_bookmark("Prospetto regime agricolo", _att_bookmark);
|
||||
int r = 1;
|
||||
@ -2018,7 +2046,7 @@ void TLiquidazione_app::set_regagr(_DescrItem& d)
|
||||
riga.format("@%dg%%s",xl - corr - dn.len()/2);
|
||||
set_row(r++, riga, (const char*)dn);
|
||||
set_row(r++, "");
|
||||
if (_isagr98)
|
||||
if (is1998)
|
||||
{
|
||||
set_row(r++, "Iva ammessa in detrazione I parte tabella A@56g%r",&iva_detIA);
|
||||
set_row(r++, "");
|
||||
|
@ -1,7 +1,20 @@
|
||||
// cg4400a.uml
|
||||
// Stampa tabella registri
|
||||
#include "cg4400a.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON DLG_PRINT 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -11 "~Stampa"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -11 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
#include "cg4400a.h"
|
||||
|
||||
PAGE "Stampa registri" -1 -1 60 18
|
||||
|
||||
@ -192,17 +205,6 @@ BEGIN
|
||||
HELP "Numero di righe per pagina del modulo di stampa. Se non specificato assume 66 righe"
|
||||
END
|
||||
|
||||
BUTTON DLG_PRINT 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 "~Stampa"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Parametri addizionali" -1 -1 56 18
|
||||
@ -246,17 +248,6 @@ BEGIN
|
||||
PROMPT 2 5 "Stampa riferimenti vidimazione"
|
||||
END
|
||||
|
||||
BUTTON DLG_PRINT 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 "~Stampa"
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
@ -158,7 +158,6 @@ TRegistro::TRegistro(const char* cod, int year) : _rec(LF_TAB), _att(LF_ATTIV)
|
||||
read(cod, year);
|
||||
}
|
||||
|
||||
|
||||
bool TRegistro::read(const char* cod, int year)
|
||||
{
|
||||
if (year <= 0)
|
||||
@ -273,17 +272,17 @@ bool TRegistro::read_att()
|
||||
chiave.format("%05ld", prefix().get_codditta());
|
||||
chiave << year(); // non fare << year() << attivita()
|
||||
chiave << attivita() << "1";
|
||||
|
||||
_prorata.destroy();
|
||||
|
||||
TTable pla("%PLA");
|
||||
attiv.setkey(1);
|
||||
pla.put("CODTAB", chiave);
|
||||
if (pla.read() == NOERR)
|
||||
{
|
||||
_prorata = pla.get_real("R8");
|
||||
chiave.format("%d", year());
|
||||
_prorata.add(chiave, pla.get_real("R8"));
|
||||
_att.put("TIPOATT", pla.get("S7")); // Aggiorna tipo attivita'
|
||||
}
|
||||
else
|
||||
_prorata = 0.0;
|
||||
|
||||
return err == NOERR;
|
||||
}
|
||||
@ -301,14 +300,49 @@ const TString& TRegistro::tipo_attivita()
|
||||
return _att.get("TIPOATT");
|
||||
}
|
||||
|
||||
const real& TRegistro::prorata()
|
||||
{
|
||||
return _prorata;
|
||||
real* TRegistro::read_prorata(int anno) const
|
||||
{
|
||||
TString16 chiave; // Ditta - Anno - Attivita' - Tipo Attivita' (fissata a 1)
|
||||
chiave.format("%05ld", prefix().get_codditta());
|
||||
chiave << anno << attivita() << "1";
|
||||
|
||||
TTable pla("%PLA");
|
||||
pla.put("CODTAB", chiave);
|
||||
|
||||
real* prorata = NULL;
|
||||
const int err = pla.read();
|
||||
if (err == NOERR)
|
||||
prorata = new real(pla.get("R8"));
|
||||
return prorata;
|
||||
}
|
||||
|
||||
void TRegistro::set_prorata(const real& pro)
|
||||
{
|
||||
_prorata = pro;
|
||||
real TRegistro::prorata(int annodoc)
|
||||
{
|
||||
const int annoiva = year();
|
||||
const int annopro = annoiva < 1998 ? annoiva : annodoc;
|
||||
|
||||
TString16 chiave; chiave << annopro;
|
||||
real* pr = (real*)_prorata.objptr(chiave);
|
||||
|
||||
if (pr == NULL)
|
||||
{
|
||||
pr = read_prorata(annopro);
|
||||
if (pr == NULL && annopro != annoiva)
|
||||
pr = read_prorata(annoiva);
|
||||
if (pr == NULL)
|
||||
pr = new real;
|
||||
_prorata.add(chiave, pr, TRUE);
|
||||
}
|
||||
|
||||
return *pr;
|
||||
}
|
||||
|
||||
void TRegistro::set_prorata(int annodoc, const real& pro)
|
||||
{
|
||||
int annoiva = year();
|
||||
int annopro = annoiva < 1998 ? annoiva : annodoc;
|
||||
TString16 chiave; chiave << annopro;
|
||||
_prorata.add(chiave, pro, TRUE);
|
||||
}
|
||||
|
||||
// Certified 99%
|
||||
@ -352,7 +386,6 @@ bool TLibro_giornale::read(int y)
|
||||
|
||||
TString16 anno; anno.format("%04d", y);
|
||||
TTable reg("REG");
|
||||
reg.setkey(1);
|
||||
reg.put("CODTAB", anno); // Cerca il primo registro dell'anno
|
||||
|
||||
for (int err = reg.read(_isgteq); err == NOERR; err = reg.next())
|
||||
|
15
cg/cglib01.h
15
cg/cglib01.h
@ -1,6 +1,10 @@
|
||||
#ifndef __CGLIB01_H
|
||||
#define __CGLIB01_H
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __ISAM_H
|
||||
#include <isam.h>
|
||||
#endif
|
||||
@ -77,7 +81,9 @@ class TRegistro : public TObject
|
||||
|
||||
protected:
|
||||
TRectype _rec, _att;
|
||||
real _prorata;
|
||||
TAssoc_array _prorata;
|
||||
|
||||
real* read_prorata(int anno) const;
|
||||
|
||||
public:
|
||||
bool read(const char* code, int year);
|
||||
@ -101,8 +107,11 @@ public:
|
||||
bool agenzia_viaggi();
|
||||
const TString& tipo_attivita();
|
||||
bool attivita_mista() { const char a = tipo_attivita()[0]; return a == 'E'; }
|
||||
const real& prorata();
|
||||
void set_prorata(const real& pro);
|
||||
|
||||
void set_prorata(int annodoc, const real& pro);
|
||||
real prorata(int annodoc);
|
||||
bool prorata100(int annodoc) { return prorata(annodoc) >= 100.0; }
|
||||
|
||||
bool update(long uprotiva, const TDate& lastreg);
|
||||
|
||||
TRegistro(const char* code = "", int year = 0);
|
||||
|
@ -9,6 +9,10 @@
|
||||
|
||||
#ifndef __CGLIB01_H
|
||||
#include "cglib01.h"
|
||||
#endif
|
||||
|
||||
#ifndef __CG2103_H
|
||||
class TCausale;
|
||||
#endif
|
||||
|
||||
class TConto : public TBill
|
||||
|
@ -72,7 +72,6 @@ int TTree_rectype::fill_array()
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
int TTree_rectype::read(TBaseisamfile& f, word op, word lockop)
|
||||
{
|
||||
int err = TRectype::read(f, op, lockop);
|
||||
@ -83,16 +82,6 @@ int TTree_rectype::read(TBaseisamfile& f, word op, word lockop)
|
||||
return err;
|
||||
}
|
||||
|
||||
int TTree_rectype::next(TBaseisamfile& f, word lockop)
|
||||
{
|
||||
int err = TRectype::next(f, lockop);
|
||||
if (err == NOERR)
|
||||
fill_array();
|
||||
else
|
||||
_recarr.destroy_rows();
|
||||
return err;
|
||||
}
|
||||
|
||||
int TTree_rectype::write(TBaseisamfile& f) const
|
||||
{
|
||||
int err = TRectype::write(f);
|
||||
|
@ -32,7 +32,6 @@ protected: // TRectype
|
||||
virtual TObject* dup() const;
|
||||
|
||||
virtual int read(TBaseisamfile& f, word op = _isequal, word lockop = _nolock);
|
||||
virtual int next(TBaseisamfile& f, word lockop = _nolock);
|
||||
virtual int write(TBaseisamfile& f) const;
|
||||
virtual int rewrite(TBaseisamfile& f) const;
|
||||
virtual int remove(TBaseisamfile& f) const;
|
||||
@ -302,7 +301,7 @@ public:
|
||||
|
||||
class TPartite_array : private TAssoc_array
|
||||
{
|
||||
TString80 _key; // Work string
|
||||
TString _key; // Work string
|
||||
long _numreg; // Last registration loaded
|
||||
|
||||
protected:
|
||||
|
813
cg/iva.txt
Executable file
813
cg/iva.txt
Executable file
@ -0,0 +1,813 @@
|
||||
IVA.TXT
|
||||
=======
|
||||
|
||||
AZIONE DATA CHI COMMENTO
|
||||
=======================================================================================================
|
||||
creato 1996/07/19 angelo descrizione dei file usati nei programmi di liquidazione
|
||||
aggiornato 1996/10/22 angelo descrizione generica del funzionamento del programma di liquidazione
|
||||
aggiornato 1996/11/13 angelo modifiche per trasferimento ad IVA 11'96
|
||||
aggiornato 1996/11/20 angelo modifiche per aggiungere codice A36 in stampa riepilogo progressivi
|
||||
aggiornato 1996/12/01 angelo modifiche per trasferimento IVA11. Corretto il trasferimento di piu' attivita'
|
||||
aggiornato 1997/10/20 angelo modifiche per implementazione progressivi (PIM) sulla 13a liquidazione
|
||||
aggiornato 1997/10/31 angelo modifiche per nuovo prospetto agricolo
|
||||
aggiornato 1997/12/01 angelo modifiche per IVA11'97
|
||||
aggiornato 1997/12/05 angelo modifiche per PRORATA dal 1998
|
||||
|
||||
|
||||
PROPOSITO
|
||||
=========
|
||||
|
||||
Il seguente file non e' niente di ufficiale e pertanto da ritenersi valido cosi com'e'.
|
||||
La documentazione che segue sono varie note sul funzionamento dei programmi IVA, descrizione
|
||||
delle tabelle utilizzate ecc. di modo che' chicchessia possa subentrare senza troppi
|
||||
problemi in questo sconfinato mondo di imposte sul valore aggiunto.
|
||||
Sarebbe cosa buona e giusta che eventuali importanti modifiche ai programmi siano qui
|
||||
dettagliatamente spiegate, onde evitare avere sempre un documento a portata di mano che
|
||||
tutti possano consultare, senza dover scorrere disperatamente 10000 linee di C++
|
||||
|
||||
|
||||
19 Luglio 1996
|
||||
|
||||
TABELLE PROGRESSIVI
|
||||
-------------------
|
||||
|
||||
Ecco qui, tanto per cominciare un elenco riassuntivo delle tabelle utilizzate dai programmi
|
||||
di calcolo liquidazione, visualizzazione e stampe varie.
|
||||
|
||||
%DEL: tabella comune per memorizzare i versamenti effettuati (deleghe IVA)
|
||||
CODTAB = CODDITTA(Z)[0-4]+ANNO[5-8]+MESE(Z)[9-10]+TIPO[11,11]
|
||||
S6 = Codice tributo
|
||||
S7 = Codice ABI banca
|
||||
S8 = Codice CAB banca
|
||||
S9 = Codice concessione
|
||||
D0 = Data delega
|
||||
R0 = Importo versamento (esclusi interessi)
|
||||
R1 = Interessi da pagare
|
||||
R2 = Importo del versamento inclusi interessi
|
||||
B0 = Stampato
|
||||
|
||||
Nota: l'ultimo carattere di CODTAB (TIPO) si riferisce al tipo di versamento:
|
||||
1 = normale
|
||||
2 = annuale
|
||||
3 = art.74
|
||||
4 = cessazione attivita'
|
||||
5 = integrativa
|
||||
7 = acconti IVA
|
||||
Il campo R2 in realta' non e' la somma di R0 + R1, poiche' R0 = ROUND(R2 - R1).
|
||||
Pertanto e' utile tenere l'importo lordo non arrotondato in un campo separato
|
||||
visto che in alcuni casi la liquidazione richiede di stampare proprio questo valore.
|
||||
|
||||
%LIA: tabella comune per memorizzare i risultati della Liquidazione IVA Annuale
|
||||
CODTAB = DITTA[0-4](Z)+ANNO[5-8]
|
||||
S1 = Credito precedente e acquisti intracomunitari separati da !
|
||||
S7 = Frequenza versamenti per anno liquidazione (M,T)
|
||||
S8 = Tipo acconto ("S"aldo oppure "A"cconto)
|
||||
R0 = Credito anno precedente
|
||||
R1 = Volume di affari lordo
|
||||
R2 = Volume di affari attivita' 1
|
||||
R3 = Volume di affari attivita' 2
|
||||
R4 = Acconto dicembre
|
||||
R5 = Credito di costo agenzie di viaggio
|
||||
R6 = Credito utilizzato
|
||||
R7 = Iva sulle vendite annotate fino al 20/12
|
||||
R8 = Iva sugli acquisti annotati fino al 20/12
|
||||
R9 = Rettifica
|
||||
R10 = Iva chiesta a rimborso
|
||||
R11 = Ulteriori detrazioni
|
||||
R12 = Pro-rata indetraibile
|
||||
R13 = Iva su operaz. fino al 20 dic., ma non fatturate
|
||||
R14 = Iva su operaz. fino al 20 dic., ma non annotate
|
||||
B1 = Liquidazione differita
|
||||
B2 = Regime agricoltore minimo
|
||||
|
||||
LAM: tabella di ditta per memorizzare i risultati Liquidazione Attivita' Mensile
|
||||
CODTAB = ANNO[0-3]+MESE(Z)[4-5]
|
||||
R0 = Totale IVA vendite in regime IVA su tutte le attivita'
|
||||
R1 = Totale IVA acquisti in regime IVA su tutte le attivita'
|
||||
R2 = Credito precedente o inizio anno
|
||||
R3 = Debito precedente da liquidazione a debito < 50.000
|
||||
|
||||
LIM: tabella di ditta per memorizzare i risultati della Liquidazione Iva Mensile
|
||||
CODTAB = ANNO[0-3]+MESE(Z)[4-5]
|
||||
S0 = Descrizione rettifica (1)
|
||||
S1 = Descrizione rettifica (2)
|
||||
S4 = Codice ABI presso cui e' effettuato il versamento
|
||||
S5 = Codice CAB presso cui e' effettuato il versamento
|
||||
S6 = Codice concessione a cui e' intestato il versamento
|
||||
S7 = D = rettifica a debito; C = rettifica a credito
|
||||
R0 = Risultato mese ( < 0 = credito): comprende tutto
|
||||
R1 = Rimborso richiesto (immesso da visualizzazione)
|
||||
R2 = Credito di costo agenzie di viaggio
|
||||
R3 = Debito mensile agenzie di viaggio
|
||||
R4 = Percentuale di ripartizione agenzie di viaggio
|
||||
R5 = Importo rettifica ( < 0 = a credito)
|
||||
R6 = Totale ulteriori detrazioni
|
||||
R7 = Totale conguaglio prorata (solo in annuale)
|
||||
R8 = Totale versamenti effettuati
|
||||
R9 = Totale versamenti integrativi effettuati
|
||||
R10 = Tasso di interesse applicato
|
||||
R11 = Acconto versato a dicembre (solo per dicembre!)
|
||||
R12 = Risultato totale a credito (segno +)
|
||||
R13 = Risultato totale a debito
|
||||
R14 = Interesse versato
|
||||
D0 = Data versamento
|
||||
B0 = Mese calcolato (invalidato da primanota)
|
||||
B1 = Stampato su registro bollato
|
||||
B2 = Diritto al rimborso infraannuale per il mese
|
||||
|
||||
PIM: Tabella di ditta per memorizzare i progressivi IVA
|
||||
CODTAB = ANNO[0-3]+ATT(Z)[4-8]+TIPATT[9,9]+REG[10,12]+MESE(Z)[13,14]+
|
||||
TIPOCR[15,15]+CODIVA[16,19]+TIPODET[20,20]
|
||||
S0 = Imponibile/IVA importi relativi art40 c.5/6/8 a.i.(separati da "!")
|
||||
S1 = Imponibile/IVA fatture in ritardo (separati da "!")
|
||||
S2 = Imponibile/IVA corrispettivi registrati al netto dell'IVA (separati da "!")
|
||||
S4 = Codice IVA a cui ventilare (corrispettivi)
|
||||
S5 = Tipo IVA (da tabella IVA)
|
||||
I0 = Tipo importi (1 = netto, 2 = lordo)
|
||||
I1 = Tipo movimento (1 = vendita, 2 = acquisto)
|
||||
R0 = Imponibile totale
|
||||
R1 = IVA totale
|
||||
R2 = Lordo corrispettivi
|
||||
R5 = Imponibile fatture con scontrino (<= R0)
|
||||
R6 = IVA fatture con scontrino (<= R1)
|
||||
R7 = Imponibile autofatture non resid. art. 17 (<= R0)
|
||||
R8 = IVA autofatture non resid. art. 17 (<= R1)
|
||||
R9 = Imponibile bolle doganali relative (compreso in R0)
|
||||
R10 = IVA bolle doganali relative (compreso in R1)
|
||||
R11 = Totale imponibile fatture sospensione imposta (indipendente da R0)
|
||||
R12 = Totale IVA fatture sospensione imposta (indipendente da R1)
|
||||
R13 = Totale imponibili falsi corrispettivi (reg corr ma doc come FS)
|
||||
R14 = Totale IVA falsi corrispettivi (reg corr ma doc come FS)
|
||||
B1 = Codice IVA corrispettivi da ventilare
|
||||
B2 = Valido per calcolo volume di affari
|
||||
B3 = Validi per calcolo rimb. infraanuuale
|
||||
B4 = Riporta il flag RicAcq dei parametri ditta
|
||||
|
||||
Dove: ANNO e' l'anno di riferimento
|
||||
ATT e' il codice attivita'(zerofilled)
|
||||
TIPOATT e' il tipo di attivita' (1 default, 2 se ci sono anche altre attivita')
|
||||
REG e' il registro (ACQ, VEN, COR)
|
||||
MESE e' il mese di riferimento
|
||||
TIPOCR e' il tipo di costo/ricavo (0,1,2,3,4,5,6,7,8,9: vedi piano dei conti)
|
||||
CODIVA e' il codice IVA relativo
|
||||
TIPODET e' il tipo di detrazione (" " = regime normale, "1" = IVA ind. su acquisti riferiti
|
||||
a ricavi esenti, "3" = IVA indicata per passaggi interni al solo fine di calcolo
|
||||
ventilazione, "9" IVA non detrabile per articolo 19)
|
||||
|
||||
PUM: Tabella di ditta per memorizzare i progressivi IVA
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]
|
||||
R0 = Totale cessioni beni ammortizzabili
|
||||
R1 = Totale IVA su cessioni ammortizzabili
|
||||
R2 = Tot. acquisti ammortizzabili detraz. 6%
|
||||
R3 = IVA su beni ammortizz. detr. 6%
|
||||
R4 = Totale vendite esenti IVA riga B1
|
||||
R5 = Totale vendite esenti IVA riga B2
|
||||
R6 = Totale vendite esenti IVA riga B3
|
||||
R7 = Totale acquisti esenti IVA riga B14
|
||||
R8 = Totale imponibile passaggi interni
|
||||
R9 = Totale IVA passaggi interni
|
||||
R10 = Totale imponibile reg. agricolo tipo 1
|
||||
R11 = Totale imponibile reg. agricolo tipo 2
|
||||
R12 = Totale imponibile vendite esenti IVA
|
||||
|
||||
PAM: Tabella di ditta per memorizzare i progressivi IVA
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE(Z)[10,11]
|
||||
R0 = Totale acquisti in regime IVA
|
||||
R1 = Totale vendite in regime IVA
|
||||
R2 = Totale lordo acquisti beni per rivendita da inizio anno
|
||||
R3 = Totale corrispettivi da ventilare
|
||||
R4 = Totale imponibile bolle doganali (acquisti)
|
||||
R5 = Totale IVA bolle doganali (acquisti)
|
||||
R6 = Totale imponibile acquisti in sosp. imposta
|
||||
R7 = Totale IVA acquisti in sosp. imposta
|
||||
R8 = Totale imponibile vendite in sosp. imposta
|
||||
R9 = Totale IVA vendite in sosp. imposta
|
||||
R10 = Totale imponibile spese generali
|
||||
R11 = Totale IVA spese generali
|
||||
|
||||
|
||||
POM: Tabella di ditta per memorizzare i progressivi IVA
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]
|
||||
R0 = Totale IVA acquisti intracomunitari (flag INTRA su rmoviva)
|
||||
R1 = Totale imponibile acquisti non detraibili art. 19
|
||||
R2 = Totale IVA acquisti non detraibili art. 19
|
||||
R3 = Totale imponibile acquisti beni ammortizzabili detraibili
|
||||
R4 = Totale IVA acquisti beni ammortizzabili detraibili
|
||||
R5 = Totale imponibile acquisti beni per rivendita (non sono tutti base per ventilazione)
|
||||
R6 = Totale IVA acquisti beni per rivendita
|
||||
R7 = Totale imponibile beni acquisiti in leasing
|
||||
R8 = Totale IVA beni acquisiti in leasing
|
||||
R9 = Totale imponibile acquisti indetraibili su ricavi esenti
|
||||
R10 = Totale IVA acquisti indetraibili su ricavi esenti
|
||||
R11 = Totale imponibile acq. beni ammortizz. non detraibili
|
||||
R12 = Totale IVA acq. beni ammortizz. non detraibili
|
||||
R13 = IVA a debito agenzie viaggio
|
||||
|
||||
PLM: Tabella di ditta per memorizzare i Progressivi Liquidazione Mensili
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]
|
||||
R0 = IVA vendite
|
||||
R1 = IVA acquisti
|
||||
R2 = Pro-rata indetraibile totale (acq. rif. anno attuale + acq. rif. anno precedente)
|
||||
R3 = Ulteriori detrazioni (6%)
|
||||
R4 = % pro-rata precedente
|
||||
R5 = se AG.VIAGGIO: Corrispettivi CEE; se AGRICOLO: tipo agr. == 1
|
||||
R6 = se AG.VIAGGIO: Corrispettivi extra CEE; se AGRICOLO: tipo agr. == 2
|
||||
R7 = se AG.VIAGGIO: Acquisti CEE; se AGRICOLO: tipo agr. == 3
|
||||
R8 = se AG.VIAGGIO: Acquisti fuori CEE; se AGRICOLO: tipo agr. == 4
|
||||
R9 = se AG.VIAGGIO: Corrispettivi misti CEE; se AGRICOLO: tipo agr. == 5
|
||||
R10 = se AG.VIAGGIO: Acquisti misti CEE; se AGRICOLO: tipo agr. == 6
|
||||
R11 = se AG.VIAGGIO: Acquisti misti fuori CEE;
|
||||
R12 = % pro-rata corrente
|
||||
R13 = se AGRICOLO: totale iva in detrazione Ia parte tabella A
|
||||
R14 = Pro-rata indetraibile acq. rif. anno precedente
|
||||
B0 = Attivita' calcolata
|
||||
B1 = TRUE se vi sono documenti con riferimento anno prec. ma manca la tabella (solo dal 1998)
|
||||
|
||||
PPA: Tabella di ditta per memorizzare i Progressivi Plafond Attivita mensili
|
||||
CODTAB = ANNO[0-3]+CODATT(Z)[4-8]+TIPOATT[9,9](sempre = 1)+MESE(Z)[10,11]TIPOESENZIONE[12,12]
|
||||
R0 = Totale acquisti Italia
|
||||
R1 = Totale acquisti estero (bolle doganali)
|
||||
R2 = Rimanenza plafond mese precedente (non conteggia il mese in corso)
|
||||
|
||||
%PLA: Tabella comune per memorizzare i dati annuali per i PLAfond
|
||||
CODTAB = DITTA[0-4]+ANNO[5-8]+CODATT(Z)[9-13]+TIPOATT(sempre = 1)[14,14]
|
||||
S1 = (real)Volume di affari attivita' 2
|
||||
S2 = (Non utilizzati)
|
||||
S3 = (Non utilizzati)
|
||||
S3 = (Non utilizzati)
|
||||
S7 = Tipo attivita' ("S"ervizio, "M", "E")
|
||||
R0 = Totale vendite in regime IVA (valido per calcolo prorata)
|
||||
R1 = Totale acquisti esenti riga B1
|
||||
R2 = Totale acquisti esenti riga B2
|
||||
R3 = Totale acquisti esenti riga B3
|
||||
R4 = Totale cessioni beni ammortizzabili
|
||||
R5 = Ammontare iniziale plafond art. 8
|
||||
R6 = Ammontare iniziale plafond art. bis
|
||||
R7 = Ammontare iniziale plafond art. 9
|
||||
R8 = % pro-rata
|
||||
R9 = conguaglio pro-rata
|
||||
R10 = % pro-rata ricalcolato (vale per l'anno successivo)
|
||||
R11 = Totale IVA acquisti attivita' (senza pro-rata pagato nell'anno)
|
||||
R12 = Totale pro-rata pagato nell'anno
|
||||
R13 = Totale lordo vendite attivita'
|
||||
R14 = Volume affari attivita' 1
|
||||
|
||||
%IVA: Tabella comune per memorizzare i dati relativi ai codici iva
|
||||
CODTAB = Codice
|
||||
S0 = Descrizione
|
||||
S1 = Tipo codice ("" = Regime normale, "VE" = ricavi da ventilare, "ES" = operazioni esenti"
|
||||
"NI" = operazioni non imponibili, "NS" = Non soggetti
|
||||
S3 = Tipo di gestione plafond ("" = gestione normale, "1" Op. art. 8, "2" op. art. 8bis,
|
||||
"3" op. art. 9)
|
||||
S4 = Tipo di gestione regime agricolo ("" = regime normale, "1" vendite regime agr.,
|
||||
"2" = vendite accessorie/acquisti non agr., "3" = acquisti ad uso promiscuo)
|
||||
S5 = Tipo di gestione per ag. viaggio ("" = regime normale, "1" = op. interno CEE,
|
||||
"2" = op. fuori CEE, "3" = vendite miste CEE, "4" = acquisti misti parte CEE,
|
||||
"5" acquisti misti parte fuori CEE)
|
||||
S6 = Codice IVA a cui ventilare
|
||||
S7 = Numero della colonna allegato clienti ("" = non in allegato, "1" = imponibili,
|
||||
"3" = non imponibili)
|
||||
S8 = Numero della colonna allegato fornitori ("" = non in allegato "1" = imponibili,
|
||||
"3" = senza app. imp., "4" = Non imponibili)
|
||||
R0 = Aliquota
|
||||
I0 = Percentuale IVA teorica
|
||||
S2 = N.ro di riga vendite IVA11 per op. esenti e non imponibili
|
||||
"" Nessuno
|
||||
"20" Operazioni non imponibili (comma 1, artt.8, 8bis e 9)
|
||||
"21" Operazioni non imponibili a seguito di dich. d'intento
|
||||
"22" Altre operazioni non imponibili
|
||||
"24" Operazioni non soggette (art. 74 comma 7)
|
||||
"25" Op. non sogg. effettuate nei confronti di terremotati
|
||||
"B1" Ammontare op. es. escluse da nr. 1 a 9 e 11 art. 10
|
||||
"B2" Ammontare op. es. di cui al nr. 11 art. 10
|
||||
"B3" Ammontare op. es. di cui ai nr. 1 a 9 art. 10
|
||||
"G7A" Cessioni intracomunitarie non imponibili
|
||||
"G7B" Prestazioni di servizi non soggette all'imposta
|
||||
S9 = N.ro di riga acquisti IVA11 per op. esenti e non imponibili
|
||||
"" Nessuno
|
||||
"10" Acquisti non imponibili (comma 2, artt8, 8bis e 9)
|
||||
"11" Altri acquisti non imponibili
|
||||
"12" Acquisti esenti
|
||||
"13" Acquisti non soggetti (art. 74 comma 7)
|
||||
"14" Acquisti non soggetti all'imposta effettuati dai terremotati
|
||||
B0 = TRUE se il codice deve comparire nel modello 101
|
||||
B1 = TRUE se il codice deve comparire nel modello 102
|
||||
B2 = Codice IVA sospeso (TRUE se vero)
|
||||
B3 = Codice escluso dal calcolo rimborso infrannuale (TRUE se vero)
|
||||
B4 = Codice escluso dal calcolo rimborso per aliquota media (TRUE se escluso)
|
||||
|
||||
ESC: tabella di ditta per memorizzare gli esercizi contabili
|
||||
CODTAB = Codice esercizio
|
||||
D0 = Data inizio esercizio
|
||||
D1 = Data fine esercizio
|
||||
D2 = Data di scarico
|
||||
|
||||
RMB: tabella di ditta per memorizzare i rimborsi (obsolete?)
|
||||
CODTAB = ANNO[0-3]+MESE(Z)[4-5]+CODIVA(Z)[6-9]+TIPOREG[10,10]
|
||||
R0 = Imponibile per rimborso
|
||||
R1 = IVA per rimborso
|
||||
R2 = Percentuale IVA relativa
|
||||
|
||||
%VER: tabella comune per memorizzare i parametri relativi agli interessi ed ai versamenti.
|
||||
CODTAB = ANNO[0,3]+MESE[4,5]
|
||||
R0 = Percentuale interesse primo trimestre
|
||||
R1 = Percentuale interesse secondo trimestre
|
||||
R2 = Percentuale interesse terzo trimestre
|
||||
R3 = Percentuale interesse quarto trimestre
|
||||
R4 = Percentuale interesse annuale
|
||||
R5 = Importo minimo versamento periodico
|
||||
R6 = Importo minimo versamento annuale
|
||||
R7 = Importo minimo versamento acconto
|
||||
R8 = Importo minimo versamento integrativo
|
||||
R9 = Importo minimo versamento cessazione
|
||||
R10 = Importo minimo versamento Art. 74
|
||||
R11 = Percentuale per calcolo acconti su liquidazione normale
|
||||
R12 = Percentuale per calcolo acconti su liquidazione differita
|
||||
|
||||
PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19]
|
||||
R0 = Totale imponibile
|
||||
R1 = Totale IVA secondo codice IVA di compensazione
|
||||
|
||||
|
||||
|
||||
22 Ottobre 1996
|
||||
|
||||
SEQUENZA DELLE CHIAMATE A FUNZIONE (FLUSSO GENERICO DEL PROGRAMMA)
|
||||
==================================================================
|
||||
|
||||
Parte I: elaborazioni e calcoli:
|
||||
-------------------------------
|
||||
|
||||
schema generico di flusso:
|
||||
|
||||
|
||||
- set_print() :
|
||||
* selezione input/ditte
|
||||
- recalc_all()
|
||||
* ciclo per ditte selezionate
|
||||
* setta ditta corrente
|
||||
* reperisce dati dalla ditta
|
||||
* controlla sulle lim(B0) dei mesi preceddenti se devono essere ricalcolate
|
||||
* ciclo da 1 al mese selezionato in input (_month)
|
||||
- update_firm() per ogni mese del ciclo
|
||||
* carica alcuni dati della ditta
|
||||
* ciclo per ogni attivita' della ditta
|
||||
* ciclo per tipo di attivita' (1 o 2)
|
||||
* reperisce dati per l'attivita' corrente,
|
||||
inizializzando tabelle per memorizzare progressivi e calcoli
|
||||
* scorre i registri per settare flag per ventilazione (_isvent)
|
||||
* se e' necessario il calcolo chiama:
|
||||
- update_att()
|
||||
* se sta calcolando la 13a chiama:
|
||||
- recalc_annual()
|
||||
* se e' richiesto il riepilogo liq ed e' l'ultimo mese
|
||||
in elaborazione chiama:
|
||||
- describe_att()
|
||||
** fine ciclo
|
||||
* se attivita' mista stampa il riepilogo:
|
||||
- describe_att()
|
||||
** fine ciclo
|
||||
* se quater stampa il riepilogo:
|
||||
- describe_att()
|
||||
* se mese compatibile con il regime frequenza IVA:
|
||||
- write_liq()
|
||||
* se e' l'ultimo mese in elaborazione del ciclo:
|
||||
- recalc_rimborso()
|
||||
* se e' l'ultimo mese in elaborazione del ciclo e deve stampare la liquidazione:
|
||||
- describe_firm()
|
||||
- describe_liq()
|
||||
* se e' stampa registri ed e' stato calcolato l'acconto
|
||||
- describe_liq_acc();
|
||||
* fine ciclo per mese
|
||||
* fine ciclo per ditte
|
||||
|
||||
|
||||
dettagli di funzioni:
|
||||
|
||||
- update_att() // aggiorna i progressivi per la ditta/mese/attivita' corrente
|
||||
- zero_att() // scorre i pim/pum/pam/plm... e azzera quelli del mese/attivita' corrente
|
||||
- recalc_att()
|
||||
- recalc_ventilation()
|
||||
- recalc_corripettivi()
|
||||
|
||||
- recalc_annual() // ricalcola progressivi annuali liq.
|
||||
* legge dalla PLA alcuni dati
|
||||
* scorre i PIM dell'anno corrente
|
||||
* esegue la sommatoria di PIM->R0 per calcolare i volumi d'affari
|
||||
* scorre i PLM della corrente attivita'
|
||||
* esegue la sommatoria di alcuni campi di PLM/PUM/PAM
|
||||
* scrive in PLA i dati calcolati
|
||||
|
||||
|
||||
- describe_att()
|
||||
// setta i vari DescrItem, che aggiunge a _descr_arr per la stampa successiva
|
||||
- describe_name()
|
||||
- describe_plafond()
|
||||
- describe_ventilation()
|
||||
- describe_agricolo()
|
||||
- describe_viaggio()
|
||||
- describe_pims()
|
||||
- describe_consistence()
|
||||
|
||||
- write_liq() // Calcolo liq. mensili e liq. annuali. Scrive le lim
|
||||
* posiziona tabella %VER
|
||||
* calcola mese di rif. per liq. differita
|
||||
* azzera variabili per totali vari
|
||||
* ciclo sulle attivita' passate come parametro
|
||||
* se differita e primo mese setta l'anno precedente
|
||||
* ciclo su tutti i mesi (1..13)
|
||||
* posiziona PLM
|
||||
* totalizza vari importi
|
||||
* fine ciclo sui mesi
|
||||
* se agenzia di viaggio e non liq. diff.
|
||||
* calcola credito costo, debito mensile, perc. ripart.
|
||||
* fine ciclo su attivita'
|
||||
* rettifica il risultato con credito prec. in base al mese corrente.
|
||||
* se e' 13a liq.
|
||||
* ciclo sulle attivita'
|
||||
* totalizza volumi d'affari e calcola nuovo prorata, riscrivi PLA e LIA
|
||||
solo se tipo di attivita' e' 1
|
||||
* fine ciclo
|
||||
* riscrive i volumi d'affari in LIA (R1,R2,R3)
|
||||
* azzera record corrente di LIM, tranne R1, R5, S1, S0, S7
|
||||
* rettifica il risultato con versamenti, acconto di dicembre...
|
||||
* schiaffa dentro LIM/LAM vari risultati di calcoli
|
||||
* mette il flag di ricalcolato sul record LIM del mese corrente(B1)
|
||||
* se 13a liq. arrotonda alle 1000 lire sup. diversi importi e li rischiaffa in LIM/LAM
|
||||
* riscrive LIM/LAM
|
||||
|
||||
- recalc_rimborso() // calcola condizioni per il diritto al rimborso infrannuale
|
||||
// chiamata soltanto per i trimestri anche se annuale
|
||||
// aggiornata a normative per anno liq. > 1994
|
||||
* ciclo sulle attivita'
|
||||
* totalizza volume d'affari ed es. non impon. (varia se usare 3 mesi oppure no)
|
||||
|
||||
// Prima condizione per il rimborso
|
||||
* se rapporto tra esenti e vol. d'affari e > minima parte esente (0.25)
|
||||
crea il _DescrItem del RIMBORSO
|
||||
|
||||
// Seconda condizione per il rimborso
|
||||
* scorre i PIM per totalizzare imponibile/imposta acquisti/vendite
|
||||
* se (iva acquisti/totale acquisti) > (iva vendite/ totale vendite),
|
||||
ovvero se l'aliquota medit adegli acquisti e' > dell'aliquota media
|
||||
delle vendite, allora...
|
||||
* se l'aliquota acquisti eccede la soglia minima (10%) allora si ha diritto al rimborso.
|
||||
* genera un _DescrItem con totale acquisti/vendite, rispettivi totali
|
||||
imposte ed aliquota media.
|
||||
* se sono state riscontrate le condizioni per il rimborso riscrive LIM.
|
||||
* ritorna il _DescrItem generato.
|
||||
|
||||
- describe_firm()
|
||||
* genera un _DescrItem con i dati della ditta:
|
||||
rag. soc., freq. iva, mese corrente.
|
||||
* aggiunge il _DescrItem generato all'array _descr_arr
|
||||
|
||||
- describe_liq()
|
||||
* genera un _DescrItem con i dati finali della liquidazione
|
||||
con eventuale satellite per il rimborso e prospettino
|
||||
per i versamenti
|
||||
* aggiunge il _DescrItem all'array _descr_arr
|
||||
|
||||
- describe_liq_acc()
|
||||
* genera un _DescrItem con i dati per la liquidazione dell'acconto
|
||||
* aggiunge il _DescrItem a _descr_arr
|
||||
|
||||
dettagli di update_att()
|
||||
************************
|
||||
// funzioni chiave per il calcolo
|
||||
|
||||
- recalc_att()
|
||||
* azzera variabili contenenti i progressivi
|
||||
* ciclo per gli elementi del cursore impostato.
|
||||
Il cursore e' cosi' fatto:
|
||||
LF_MOV
|
||||
|------->LF_RMOVIVA
|
||||
|------->LF_CAUSALI
|
||||
Quindi il ciclo sara' sui movimenti,
|
||||
controlla se il registro e' presente, la relativa
|
||||
riga di rmoviva e' presente e se la data deve essere considerata.
|
||||
|
||||
* ciclo per ogni riga IVA del movimento corrente
|
||||
* qui totalizza nei vari casi, sottocasi, casi particolari,
|
||||
tutte le imposte/imponibili, memorizzandoli nei progressivi IVA.
|
||||
* fine ciclo per righe IVA
|
||||
* fine ciclo per movimenti
|
||||
* calcolati tutti i movimenti e aggiornati i pim
|
||||
se necessario risistema le imposte acquisti beni
|
||||
per rivendita (scorre i PIM dal primo all'ultimo ricalcolando l'iva e riscrivendoli)
|
||||
* calcola il prorata solo se liq. periodica, e lo memorizza in PLM->R2
|
||||
* se e' agenzia di viaggio memorizza i relativi progressivi
|
||||
* se e' agricolo memorizza i relativi progressivi
|
||||
* memorizza sempre e comunque altri progressivi comuni
|
||||
* riscrive i record delle tabelle mensili(PLM,PAM,PUM,POM)
|
||||
|
||||
- recalc_ventilation() // ricalcolo della ventilazione
|
||||
* ricalcola i pim dei mesi dal primo al corrente se necessario:
|
||||
esegue un ciclo da 1 al mese corrente e chiama ogni volta update_att()
|
||||
(sembra una storia ricorsiva, in realta' lo e' poco)
|
||||
* ciclo da 1 al mese corrente
|
||||
// aggiunge gli acquisti del mese m operando sui pim
|
||||
* ciclo per tutti i PIM relativi. Per i codici != da NS, NI ed ES
|
||||
aggiunge all'array _vent_arr i progressivi.
|
||||
* calcola totale acquisti su tutte le aliquote (scorre tutti gli elementi di _vent_arr,
|
||||
sommando l'elemento _totale.
|
||||
* calcola totale vendite (solo se mese 13 e si sta calcolando la 13a)
|
||||
* ricalcola (solo per il mese in corso!) operando sull'array _vend_arr, ove sono
|
||||
memorizzate le vendite.
|
||||
* scorre gli elementi di _vend_arr
|
||||
* calcola la percentuale di ripartizione:
|
||||
se siamo in annuale si deve ripartire il totale vendite annuale tra i vari mesi,
|
||||
altrimenti il totale del mese.
|
||||
L'importo cosi' preparato viene affettato a seconda degli elementi di
|
||||
_vent_arr, le percentuali di ripartizione sono ottenute dal rapporto
|
||||
tra il totale acquisti del mese e il totale acquisti
|
||||
* scorre ancora gli elementi di _vent_arr e calcola l'imposta/imponibile
|
||||
da ventilar. Corregge l'iva vendite nei PLM->R0 ed il volume
|
||||
d'affari nei PAM->R1 ed aggiorna i PIM->(R0,R1)
|
||||
* se siamo in annuale, dopo aver ripartito una prima volta, esce dal ciclo
|
||||
(in pratica viene eseguito una sola volta)
|
||||
* fine ciclo
|
||||
* memorizza i totali per il prospettino di ventilazione
|
||||
* riscrive il tot. acq e vendite in PAM
|
||||
|
||||
- recalc_corrispettivi() // ricalcolo dei corrispettivi
|
||||
* viene eseguita solo se ci sono elementi in _corr_arr (modificato
|
||||
tramite add_corrisp() in recalc_att())
|
||||
* scorre tutti gli elementi di _corr_arr
|
||||
* per ogni _CorrItem estrae imponibile, imposta
|
||||
* aggiusta l'IVA vendite in PLM->R0
|
||||
* aggiusta il volume d'affari in PAM->R1
|
||||
* aggiorna i PIM->(R0,R1)
|
||||
* riscrive i records modificati
|
||||
|
||||
|
||||
|
||||
Parte II: stampa:
|
||||
-------------------------------
|
||||
|
||||
schema generico di flusso.
|
||||
|
||||
* La stampa, avviene dopo aver creato tutti gli opportuni
|
||||
_DescrItem e memorizzati in _descr_arr.
|
||||
Per far cio' si utilizza il meccanismo della TPrint_application
|
||||
pur non utilizzando nessun cursore o relazione di stampa,
|
||||
basta ridefinire preprocess_page(), postprocess_page() e la
|
||||
set_page(). Si utilizza quest'ultima come fulcro centrale della stampa
|
||||
sfruttando il parametro cnt che viene passato alla stessa, visto
|
||||
che in casi come questi esso e' sempre incrementale.
|
||||
Per farla in breve, sappiamo tutti che una TPrint_applicatione e' cosi'
|
||||
fatta:
|
||||
|
||||
* ciclo fintantoche' set_print() [vedi sopra] ritorna TRUE
|
||||
* ciclo fintantoche' si vuol ripetere la stampa.
|
||||
* ciclo per il numero di copie della stampa
|
||||
* ciclo (almeno una volta) fino a quando postprocess_print() ritorna la ripetizione
|
||||
* se preprocess_print() ritorna TRUE allora
|
||||
* ciclo (almeno una volta) fino a quando postprocess_page() ritorna la ripetizione
|
||||
* se preprocess_page() ritorna TRUE allora
|
||||
* set_page()
|
||||
* print_one()
|
||||
* fine ciclo
|
||||
* fine ciclo
|
||||
* fine ciclo
|
||||
* fine ciclo
|
||||
* fine ciclo
|
||||
|
||||
Nel nostro caso la preprocess_page() ritorna TRUE se il numero di elementi di
|
||||
_descr_arr e' != da 0.
|
||||
La postprocess_page() ritorna NEXT_PAGE solo se non ci sono elementi in
|
||||
_descr_arr o se l'elemento che tiene il conteggio (cnt) e' arrivato alla fine (_descr_arr.items()-1)
|
||||
|
||||
Ecco quindi che la set_page() assume una importanza fondamentale per settare le righe di
|
||||
stampa:
|
||||
- set_page()
|
||||
* reperisce il _DescrItem corrente grazie a cnt da _descr_arr.
|
||||
* resetta tutte le righe di stampa
|
||||
* setta il salto foglio automatico a FALSE
|
||||
* esegue una selezione multipla in base al membro _flags di
|
||||
_DescrItem:
|
||||
|
||||
CHG_PARMS
|
||||
SET_FIRM
|
||||
PIM_ROW
|
||||
PIM_HEAD
|
||||
MISC_LIQ
|
||||
TOT_ROW
|
||||
PLAFOND
|
||||
VENTILA
|
||||
REGAGR
|
||||
REGVIA
|
||||
THE_END
|
||||
LIQACC
|
||||
ACCONTO
|
||||
ACCHEAD
|
||||
DELDEB
|
||||
DELCRED
|
||||
|
||||
in base ad ognuno di questi flags viene chiamata una diversa funzione di
|
||||
set delle righe di stampa.
|
||||
|
||||
|
||||
13 Novembre 1996
|
||||
|
||||
TRASFERIMENTO IVA11
|
||||
===================
|
||||
|
||||
|
||||
Nuova feature aggiunta in occasione delle modifiche per il trasferimento IVA11:
|
||||
|
||||
- cache di lettura per i codici IVA e tabella registri.
|
||||
|
||||
Vengono semplicemente mantenuti 2 assoc array (1 per i codici iva ed uno
|
||||
per i registri) dove ogni volta che viene letto un record nuovo (quindi
|
||||
non presente nell'array) viene memorizzato. Quando viene richiesta la lettura
|
||||
di un record viene prima controllato che esso non sia gia' presente in cache.
|
||||
Le modifiche sono state effettuate nelle funzioni look_iva() e look_reg().
|
||||
|
||||
|
||||
Per il trasferimento IVA 11 sono state implementate 3 nuove funzioni:
|
||||
iva11_set_arr(), iva11_set_arr_pim(), iva11_write() ed aggiunto un assoc array: _iva11_arr.
|
||||
Il procedimento e relativamente semplice:
|
||||
viene utilizzato un assoc array dove memorizzare i valori da trasferire sui
|
||||
files tab1100a e tab1100b. La chiave per memorizzare i valori viene posta uguale
|
||||
al nome campo relativo, facilitando cosi' l'accesso e senza troppi sprechi di memoria
|
||||
essendo al massimo 125 campi.
|
||||
Il filling dei campi viene effettuato in 2 procedure (iva11_set_arr e iva11_set_arr_pim).
|
||||
La prima viene chiamata quando vengono scorse le righe di movimento IVA (recalc_att());
|
||||
la seconda viene chiamata alla fine del calcolo dell'attivita', prima dello spostamento della
|
||||
relazione sulla prossima (update_firm()).
|
||||
La scrittura dei campi avviene in iva11_write(), chiamata subito dopo la iva11_set_arr_pim().
|
||||
|
||||
Particolarita':
|
||||
|
||||
iva11_set_arr_pim():
|
||||
esegue un ciclo per tutti i PIM della ditta, scartando quelli che non servono
|
||||
e raggruppando quelli che rispondono alle condizioni di trasferimento.
|
||||
|
||||
iva11_write():
|
||||
esegue un ciclo per tutti i campi settati in _iva11_arr, facendo la put() per ognuno
|
||||
sul rispettivo campo nel file opportuno (LF_TAB1100A o LF_TAB1100B).
|
||||
Siccome i campi da trasferire sono piu' di 100 e per ora tale limite non puo' essere
|
||||
superato il trasferimento viene effettuato su 2 files, collegati tramite relazione.
|
||||
|
||||
In realta' _iva11_arr e' un _BolgArray, derivato da TAssoc_array,
|
||||
dove sono definiti i metodi add() e sub(), per aggiungere o sottrarre
|
||||
importi all'elemento indicato. Gli elementi stessi di _iva11_arr in realta'
|
||||
non sono solamente real, ma classi derivate da TObject, che contengono un real ed un
|
||||
int identificante il numero logico del file al quale appartiene il campo.
|
||||
|
||||
|
||||
20 Novembre 1996
|
||||
|
||||
AGGIUNTA STAMPA A36 NEI PROGRESSIVI
|
||||
===================================
|
||||
|
||||
Per stampare cio' si e' seguito l'esempio della stampa di AF (ex A35).
|
||||
Da rilevare, percio', la condizione di raggruppamento di tali progressivi
|
||||
e la memorizzazione in PIM, nel campo S0. Naturalmente, siccome S0 e' una stringa e
|
||||
siccome vanno memorizzati sia imponibile che imposta, il campo sara' una TToken_string
|
||||
i cui elementi (2 real) sono separati da un "!", e non da un "|" per non creare
|
||||
situazione spiacevoli in caso di scarico/carico da un file testo.
|
||||
|
||||
|
||||
01 Dicembre 1996
|
||||
|
||||
CORRETTO TRASFERIMENTO DI PIU' ATTIVITA' SUL FILE TAB1100
|
||||
=========================================================
|
||||
|
||||
La correzione riguarda lo spostamento della funzione iva11_write():
|
||||
|
||||
- iva11_write() viene ora chiamata dalla describe_liq(), per aver maggior
|
||||
controllo sull'azzeramento dei campi R1 ed R2
|
||||
|
||||
Ma la modifica principale riguarda la struttura dati utilizzata per memorizzare i dati
|
||||
trasferire.
|
||||
Ora si utilizza un assoc_array principale (_iva11_arr) la cui chiave e'
|
||||
il codice attivita' della ditta. Ogni elemento di _iva11_arr e' a sua
|
||||
volta un assoc_array, la cui chiave e' come nella versione precedente e' il
|
||||
nome del campo da trasferire. Per cui le modifiche fatte in iva11_set_arr(),
|
||||
iva11_set_arr_pim() e iva11_write() riguardano la diversa gestione per
|
||||
memorizzare e scorrere gli elementi dell'assoc_array _iva11_arr.
|
||||
|
||||
|
||||
20 Ottobre 1997
|
||||
|
||||
IMPLEMENTAZIONE PIM13
|
||||
=========================================================
|
||||
|
||||
Implementato il PIM 13, in modo tale da poter eliminare i precedenti
|
||||
errori relativi al calcolo ventilazione annuale/corrispettivi.
|
||||
Prima andava a sommare i risultati dei singoli mesi/trimestri: in
|
||||
realta' per la liquidazione annuale, i mesi vanno considerati
|
||||
come un tutt'uno. Le modifiche operate sono quindi relative al
|
||||
ciclo di scansione ed elaborazione del cursore sui movimenti IVA.
|
||||
Ora non scorre piu' un cursore prima sul mese 1 poi 2, 3, ecc.
|
||||
ma uno unico da 1 a 13, schiaffando i risultati nel relativo PIM del
|
||||
mese 13. Nella fase dei calcoli per ventilazione/scorporo scorrispettivi,
|
||||
non si dovranno piu' fare ripartizioni di importo sui vari mesi precedenti.
|
||||
Inoltre da ora in avanti per calcolare la liquidazione annuale non sara'
|
||||
piu' necessario ricalcolare anche i periodi precedenti.
|
||||
Tutto cio' velocizza un poco il calcolo liquidazione ed il trasferimento ad IVA11.
|
||||
|
||||
|
||||
31 Ottobre 1997
|
||||
|
||||
NUOVO PROSPETTO REGIME AGRICOLO
|
||||
===============================
|
||||
Queste modifiche valgono dal 1998 in poi.
|
||||
Aggiunto nuovo FLAG sulla tabella LIA (campo B2), per indicare se
|
||||
trattasi di agricoltore con volume d'affari minimo: sono stati
|
||||
quindi modificati programmi di impostazione parametri liquidazione,
|
||||
apertura anno IVA, oltre a calcolo/stampa.
|
||||
Il nuovo flag di agricoltore minimo serve per selezionare le ditte
|
||||
in calcolo liquidazione: se l'anno e' 1998 o successivi E la liquidazione
|
||||
da calcolare non e' annuale E tale flag e' settato, una determinata ditta
|
||||
non puo' essere inclusa nella lista dei calcoli da effettuare.
|
||||
Viene aggiunta una nuova tabella di progressivi (tabella PIA: Progressivi Iva compensazione
|
||||
Agricoli), il cui tracciato e' il seguente (riportato anche all'inizio)
|
||||
|
||||
PIA: Tabella di ditta per memorizzare i Progressivi IVA compensazione Agricoli
|
||||
CODTAB = ANNO[0-3]+CODATT[4,8]+TIPOATT[9,9]+MESE[10,11]+IVAORD[12,15]+IVACOM[16,19]
|
||||
R0 = Totale imponibile
|
||||
R1 = Totale IVA secondo codice IVA di compensazione
|
||||
|
||||
Memorizzazione dei progressivi:
|
||||
|
||||
tutte le vendite in regime agricolo con "segnalino" a 1 (che termine di merda che usano su
|
||||
sistema..), vanno sommate distintamente per codice IVA principale + codice IVA compensato.
|
||||
L'imposta (PIA->R1) va calcolata sul totale imponibile (PIA->R0) per ogni record della tabella,
|
||||
una volta finita la sommatoria.
|
||||
Il codice IVA di compensazione, (udite udite!), viene memorizzato sul
|
||||
PIANO DEI CONTI (nel campo IVACOMP) per ogni SOTTOCONTO di RICAVO(campo INDBIL).
|
||||
Attenzione: per effettiva congruenza il campo INDBIL e' significativo solo sul
|
||||
relativo CONTO, indi si procedera' ad una ulteriore rottura/mazzata sui coglioni, in quanto
|
||||
per ogni movimento IVA si dovranno fare 2 accessi al file del PIANO DEI CONTI:
|
||||
uno per leggere il codice IVA di compensazione (campo IVACOMP)
|
||||
uno per leggere se il conto e' di ricavo (campo INDBIL).
|
||||
|
||||
Una volta completata la tabella (fatta in recalc_att()), si procedera'
|
||||
alla descrizione di tali progressivi (describe_agricolo()). Il nuovo prospetto
|
||||
viene messo poco prima del prospetto agricolo, ma comunque nella stessa pagina.
|
||||
Nel prospetto agricolo viene aggiunta una riga in piu':
|
||||
|
||||
IVA ammessa in detrazione I parte tabella A, il cui importo riguarda il totale
|
||||
dell'iva vendite compensata. Tale importo (PLM->R13) viene sommato al vecchio totale IVA ammessa
|
||||
in detrazione, per avere l'importo corretto.
|
||||
Attenzione, il nuovo calcolo viene applicato solo dal 1998 in poi!!
|
||||
|
||||
|
||||
01 Dicembre 1997
|
||||
|
||||
IVA11 '97
|
||||
=========
|
||||
- cambiato A13 in VA7
|
||||
- aggiunte aliquote 7,5% e 20%
|
||||
|
||||
Variazioni ai campi di trasferimento
|
||||
rimossi : EC206, FBC* e FC117
|
||||
aggiunti FC115 FC116 FC209 FC210
|
||||
SBI07 SBI08 SBF12 SBF13
|
||||
XC101...XC111 XC201...XC208 (al posto di FBC*)
|
||||
AGVE05 AGVE06 ABVE05 ABVE06
|
||||
AGME05 AGME06 ABME05 ABME06
|
||||
AGME*, AGVE*, ABME* ABVE* sono stati spostati su TAB1100B
|
||||
L2, L2BIS sono stati spostati su TAB1100B
|
||||
|
||||
|
||||
05 Dicembre 1997
|
||||
|
||||
PRORATA dal 1998
|
||||
================
|
||||
Dal 1998 sara' possibile registrare fatture in ritardo con anno data documento
|
||||
precedente all'anno di registrazione stesso.
|
||||
In questo caso ll'importo PRORATA del PERIODO (non annuale) deve essere calcolato
|
||||
applicando la percentuale corrispondente all'anno del documento.
|
||||
Tutti gli acquisti soggetti a pro-rata devono essere distinti in base all'anno della
|
||||
data documento e di conseguenza la detraibilita' deve essere evidenziata e
|
||||
calcolata con due possibili percentuali: una dell'anno attuale e una dell'anno
|
||||
precedente. Se in fase di liquidazione la tabella dell'anno precedente non esiste
|
||||
ma esistono acquisti con anno documento relativo all'anno precedente si calcola il
|
||||
pro-rata con la percentuale corrente, segnalando tuttavia la mancata presenza
|
||||
di tale tabella per l'anno precedente.
|
||||
Per far questo e' stato implementato un oggettino: _ProrataItem, cui vengono
|
||||
settate la percentuale attuale e la percentuale precedente. E' stato implementato
|
||||
anche un metodo calc_prorata() cui si passa il valore degli acquisti ed un flag
|
||||
per calcolare con percentuale attuale o precedente. Nella tabella PLM
|
||||
e' stato recuperato R4 per memorizzare la percentuale pro-rata precedente, inoltre
|
||||
viene memorizzato in R14 il prorata relativo agli acquisti con riferimento anno
|
||||
precedente. In B1, infine, viene settato il flag a TRUE se in stampa
|
||||
esistono documenti dell'anno precedente man non esiste la percentuale
|
||||
pro-rata ad essa relativi.
|
||||
Casistiche: (vedi _ProrataItem::set())
|
||||
- il calcolo vale solo a partire dal 1998
|
||||
- se le % sono uguali oppure non siamo ancora nel 1998 considera
|
||||
tutto sull'anno corrente
|
||||
- se non ha trovato la percentuale anno prec usa quella corrente,
|
||||
segnalando pero' l'errore.
|
||||
|
||||
|
||||
Ecco quindi svelati i piu' reconditi misteri del programma di liquidazione.
|
||||
Auguro a chiunque buon divertimento.
|
||||
|
||||
|
@ -93,8 +93,9 @@ bool TMovimentoPN_VE::detraibile(TRectype& rec) const
|
||||
if (rec.get_int(RMI_TIPODET) != 0)
|
||||
return FALSE;
|
||||
|
||||
const real & p = _caus->reg().prorata();
|
||||
return p < 100.0;
|
||||
const int annodoc = curr().get_date(MOV_DATADOC).year();
|
||||
const bool prorata100 = _caus->reg().prorata100(annodoc);
|
||||
return !prorata100; // Se prorata = 100% e' indetraibile
|
||||
}
|
||||
|
||||
int TMovimentoPN_VE::bill2pos(const TBill& conto, char tipo)
|
||||
|
Loading…
x
Reference in New Issue
Block a user