Patch level : 2.0 666
Files correlati : ve0.exe ve6.exe Ricompilazione Demo : [ ] Commento : GF20114 Il paragrafo [DEFAULTS] dei profili dei documenti contiene la lista dei valori di default da assegnare a certi campi della maschera di immissione. Tale paragrafo nella versione a 32 bit viene completamente ignorato, mentre nella precedente versione funzionava "quasi" sempre. GF20115 Se si cerca di contabilizzare una fattura di vendita con calcolo al lordo e con sconti "di testa", la procedura tenta di generare un movimento sbilanciato e quindi fallisce. Il problema sembra essere nel fatto che il totale documento e' corretto, mentre imponibile e iva non tengono conto dello sconto. Se si utilizzano gli sconti "di riga" o si toglie il calcolo al lordo, tutto funziona bene. GF20116 Nell'eventualità avessimo una causale contabile definita sull'anagrafica di un nostro cliente/fornit bisogna fare in modo che se stiamo contabilizzando una nota di credito la causale utilizzata non sia quella prevista in anagrafica, ma bensì quella prevista nella tipologia del documento sul quale naturalmente ci sarà la spunta di nota di credito/debito (questa appunto può essere la discriminante) git-svn-id: svn://10.65.10.50/trunk@11704 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
2a9f280e2e
commit
9ecc861e7b
@ -34,18 +34,19 @@ void TMotore_application::init_query_mode( TMask& m )
|
||||
|
||||
void TMotore_application::init_insert_mode( TMask& m )
|
||||
{
|
||||
const TString16 codnum(m.get(F_CODNUM));
|
||||
const TString4 codnum(m.get(F_CODNUM));
|
||||
const int anno = m.get_int(F_ANNO);
|
||||
const char provv = m.get(F_PROVV)[0];
|
||||
const long numdoc = m.get_long(F_NDOC);
|
||||
|
||||
TDocumento_mask& dm = (TDocumento_mask&)m;
|
||||
TDocumento& curdo = dm.doc();
|
||||
const TTipo_documento& tp = (const TTipo_documento&)curdo.tipo();
|
||||
|
||||
curdo.read(provv, anno, codnum, numdoc);
|
||||
curdo.set_tipo(m.get(F_TIPODOC));
|
||||
|
||||
const char stato = curdo.tipo().stato_finale_inserimento();
|
||||
const char stato = tp.stato_finale_inserimento();
|
||||
curdo.stato(stato);
|
||||
|
||||
_codnum = codnum;
|
||||
@ -79,16 +80,14 @@ void TMotore_application::init_insert_mode( TMask& m )
|
||||
m.fld(pos).dirty();
|
||||
}
|
||||
m.disable(DLG_PRINT);
|
||||
|
||||
|
||||
pos = m.id2pos(F_CAUSMAG);
|
||||
|
||||
if (pos >= 0)
|
||||
{
|
||||
m.fld(pos).set(curdo.tipo().caus_mov());
|
||||
m.fld(pos).set(tp.caus_mov());
|
||||
m.fld(pos).dirty();
|
||||
}
|
||||
|
||||
TTipo_documento& tp = (TTipo_documento&) curdo.tipo();
|
||||
tp.set_defaults(m);
|
||||
|
||||
m.disable(DLG_ELABORA);
|
||||
@ -171,7 +170,7 @@ TMask* TMotore_application::get_mask( int mode )
|
||||
case MODE_INS:
|
||||
case MODE_MOD:
|
||||
{
|
||||
const TString16 tipodoc(_msk->get(F_TIPODOC));
|
||||
const TString4 tipodoc(_msk->get(F_TIPODOC));
|
||||
_docmsk = (TDocumento_mask*)_doc_masks.objptr(tipodoc);
|
||||
|
||||
if (_docmsk == NULL)
|
||||
|
@ -261,7 +261,7 @@ public:
|
||||
|
||||
// Funzioni che effettuano la cache di importanti valori contenuti nel profilo
|
||||
const char tipocf();
|
||||
void set_defaults(TMask& m);
|
||||
void set_defaults(TMask& m) const;
|
||||
const TString_array& keys_descrs();
|
||||
const TString_array& sheet_columns();
|
||||
const TString_array& handlers();
|
||||
@ -549,8 +549,11 @@ public:
|
||||
real & iva() { return _iva;};
|
||||
real & iva_spese() { return _iva_spese;};
|
||||
real & iva_sconto() { return _iva_sconto;};
|
||||
const real & iva_sconto() const { return _iva_sconto;};
|
||||
real & sconto_perc() { return _sconto_perc; }
|
||||
const real& sconto_perc() const { return _sconto_perc; }
|
||||
real & sconto_imp () { return _sconto_imp; }
|
||||
const real & sconto_imp () const { return _sconto_imp; }
|
||||
const TCodiceIVA & cod_iva() const { return _codiva;}
|
||||
byte tipo(){ return _tipo;}// Tipo (Vedi opzioni per la selzione di filtro nella validate())
|
||||
TRiepilogo_iva& operator = (const TRiepilogo_iva & a) {return copy(a);}
|
||||
|
@ -1137,10 +1137,10 @@ int TDocumento::remove(TBaseisamfile& f) const
|
||||
}
|
||||
if (_has_provv && tipo().provvigioni())
|
||||
{
|
||||
TString agente(get(DOC_CODAG));
|
||||
const int anno = TDocumento::anno();
|
||||
TString codnum(numerazione());
|
||||
const long ndoc = numero();
|
||||
const TString8 agente(get(DOC_CODAG));
|
||||
const int anno = TDocumento::anno();
|
||||
const TString4 codnum(numerazione());
|
||||
const long ndoc = numero();
|
||||
|
||||
// Legge le provvigioni per questo documento
|
||||
_provv_agente->read(agente, anno,codnum,ndoc);
|
||||
@ -1152,12 +1152,9 @@ int TDocumento::remove(TBaseisamfile& f) const
|
||||
|
||||
int TDocumento::decimals(bool price) const
|
||||
{
|
||||
const TString16 codval = get(DOC_CODVAL);
|
||||
int ndec;
|
||||
if (price)
|
||||
ndec = TPrice(ZERO, codval).decimals();
|
||||
else
|
||||
ndec = TCurrency(ZERO, codval).decimals();
|
||||
const TString& codval = get(DOC_CODVAL);
|
||||
const TExchange exc(codval);
|
||||
const int ndec = exc.decimals(price);
|
||||
return ndec;
|
||||
}
|
||||
|
||||
@ -1726,8 +1723,14 @@ void TDocumento::update_tabella_iva()
|
||||
{
|
||||
const real imposta(ci.imposta(i, ndec));
|
||||
|
||||
TGeneric_distrib iva(imposta, ndec);
|
||||
iva.add(tot_sconti_imp);
|
||||
iva.add(tot_sconti_perc);
|
||||
|
||||
imponibile += imposta;
|
||||
ri->sconto_imp() += imposta;
|
||||
ri->sconto_imp() += iva.get();
|
||||
ri->sconto_perc() += iva.get();
|
||||
|
||||
tot_doc += imposta;
|
||||
}
|
||||
else
|
||||
@ -1793,19 +1796,16 @@ void TDocumento::update_tabella_iva()
|
||||
if (doc_al_lordo)
|
||||
{
|
||||
table.restart();
|
||||
for (TRiepilogo_iva* ri = (TRiepilogo_iva *) table.get(); ri != NULL;
|
||||
ri = (TRiepilogo_iva *) table.get())
|
||||
for (TRiepilogo_iva* ri = (TRiepilogo_iva*)table.get(); ri != NULL; ri = (TRiepilogo_iva*)table.get())
|
||||
{
|
||||
const TCodiceIVA & iva = ri->cod_iva();
|
||||
const TCodiceIVA& iva = ri->cod_iva();
|
||||
|
||||
ri->iva() = iva.scorpora(ri->imp(), ndec);
|
||||
ri->iva_spese() = iva.scorpora(ri->imp_spese(), ndec);
|
||||
iva.scorpora(ri->imp_spese_row(), ndec);
|
||||
|
||||
real i = ri->sconto_perc() + ri->sconto_imp();
|
||||
|
||||
ri->iva_sconto() = iva.scorpora(i, ndec);
|
||||
ri->sconto_imp() -= ri->iva_sconto();
|
||||
ri->iva_sconto() = iva.scorpora(ri->sconto_imp(), ndec);
|
||||
ri->iva_sconto() += iva.scorpora(ri->sconto_perc(), ndec);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -171,28 +171,26 @@ const TString_array& TTipo_documento::handlers()
|
||||
return _handlers;
|
||||
}
|
||||
|
||||
void TTipo_documento::set_defaults(TMask& m)
|
||||
void TTipo_documento::set_defaults(TMask& m) const
|
||||
{
|
||||
const int items = _defaults.items();
|
||||
|
||||
if (items == 0) // Carica lo string_array con i defaults
|
||||
if (_defaults.items() == 0) // Carica lo string_array con i defaults
|
||||
{
|
||||
TString16 chiave;
|
||||
TString4 chiave;
|
||||
TFilename pn; profile_name(pn);
|
||||
TConfig prof(pn, "DEFAULT");
|
||||
const int ndefaults = prof.get_int("NDEFAULTS");
|
||||
for(int i = 1; i <= ndefaults; i++)
|
||||
{
|
||||
chiave.format("%d", i);
|
||||
_defaults.add(prof.get(chiave));
|
||||
((TTipo_documento*)this)->_defaults.add(prof.get(chiave));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < items; i++) // Setta i campi della maschera
|
||||
// Setta i campi della maschera
|
||||
FOR_EACH_ARRAY_ROW(_defaults, i, tt)
|
||||
{
|
||||
TToken_string& tt = (TToken_string&)_defaults[i];
|
||||
const int ncampo = tt.get_int(0);
|
||||
m.set(ncampo, tt.get(1), TRUE );
|
||||
const short ncampo = tt->get_int(0);
|
||||
if (m.id2pos(ncampo) >= 0)
|
||||
m.set(ncampo, tt->get(), TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -786,13 +786,13 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const
|
||||
if (rec.get("S7") == "NR")
|
||||
{
|
||||
detr = 9;
|
||||
pind = 100.0;
|
||||
pind = CENTO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
real impres = (impon * pind) / 100.0;
|
||||
real ivares = (imposta * pind) / 100.0;
|
||||
real impres = (impon * pind) / CENTO;
|
||||
real ivares = (imposta * pind) / CENTO;
|
||||
|
||||
impres.round(ndec);
|
||||
ivares.round(ndec);
|
||||
@ -804,7 +804,7 @@ error_type TIVA_array::add(const TRiga_documento & r, const TBill& conto, const
|
||||
// una riga IVA con lo stesso imponibile ma di segno opposto, con un cod. IVA
|
||||
// speciale per lo storno, proveniente da configurazione
|
||||
|
||||
if (pind < 100.0)
|
||||
if (pind < CENTO)
|
||||
{
|
||||
key.format("%d|%-4s|%c|%3d|%3d|%6ld|%s|%s|%d",ord,(const char*)cod,tipo,gr,co,so, (const char *)codcms, (const char *)fascms, 0);
|
||||
TRectype * iva = (TRectype *) objptr(key);
|
||||
@ -1199,17 +1199,18 @@ error_type TContabilizzazione::compile_head_mov(TDocumento& doc)
|
||||
|
||||
// Istanzia la causale del documento corrente...
|
||||
const TTipo_documento& tipo = doc.tipo();
|
||||
TString16 codcaus(tipo.causale());
|
||||
TString4 codcaus = tipo.causale();
|
||||
|
||||
TToken_string key;
|
||||
key.add(doc.get(DOC_TIPOCF));
|
||||
key.add(doc.get(DOC_CODCF));
|
||||
|
||||
const TRectype & cfven = cache().get(LF_CFVEN, key);
|
||||
const TString16 caus_cli(cfven.get(CFV_CODCAUS));
|
||||
|
||||
if (caus_cli.not_empty())
|
||||
codcaus = caus_cli;
|
||||
if (!doc.is_nota_credito()) // Non usare la causale del cliente per le NC!
|
||||
{
|
||||
TToken_string key;
|
||||
key.add(doc.get(DOC_TIPOCF));
|
||||
key.add(doc.get(DOC_CODCF));
|
||||
const TRectype& cfven = cache().get(LF_CFVEN, key);
|
||||
const TString& caus_cli = cfven.get(CFV_CODCAUS);
|
||||
if (caus_cli.not_empty())
|
||||
codcaus = caus_cli; // La causale del cliente prevale su quella del tipo documento
|
||||
}
|
||||
|
||||
_caus = new TCausale(codcaus,data_reg.year());
|
||||
_righe_iva->set_caus(_caus);
|
||||
@ -1536,7 +1537,7 @@ error_type TContabilizzazione::compile_head_mov_re(TDocumento& doc)
|
||||
// Istanzia la causale del documento corrente...
|
||||
|
||||
const TTipo_documento& tipo = doc.tipo();
|
||||
const TString16 codcaus(tipo.causale());
|
||||
const TString4 codcaus(tipo.causale());
|
||||
|
||||
_caus = new TCausale(codcaus, data_reg.year());
|
||||
_righe_iva->set_caus(_caus);
|
||||
@ -1852,8 +1853,8 @@ error_type TContabilizzazione::add_spese_inbo(TDocumento& doc, const int ndec)
|
||||
// Aggiorna le righe di sconto (importo o a percentuale)
|
||||
error_type TContabilizzazione::adjust_sconto_rows(TDocumento& doc)
|
||||
{
|
||||
TAssoc_array aa(doc.tabella_iva()); // no reference
|
||||
TRiepilogo_iva * riep;
|
||||
TAssoc_array aa = doc.tabella_iva(); // no reference
|
||||
const TRiepilogo_iva* riep;
|
||||
TString16 cod; // Codice IVA corrente
|
||||
real sconto;
|
||||
const int ndec = doc.decimals();
|
||||
@ -1876,11 +1877,11 @@ error_type TContabilizzazione::adjust_sconto_rows(TDocumento& doc)
|
||||
//I conti per aggiustare l'iva vengono fatti in adjust_iva_rows()
|
||||
const bool perc = i == 0;
|
||||
TBill& conto = perc ? _sco_perc_bill : _sco_imp_bill;
|
||||
sconto = perc ? -riep->sconto_perc() : -riep->sconto_imp();
|
||||
sconto = perc ? -riep->sconto_perc() : -riep->sconto_imp();
|
||||
if (sconto != ZERO)
|
||||
{
|
||||
TRiga_documento r(&doc, "07"); // il tipo riga 02 spese a valore
|
||||
r.put(RDOC_QTA, "1.00");
|
||||
TRiga_documento r(&doc, "07"); // il tipo riga 07 sconti
|
||||
r.put(RDOC_QTA, UNO);
|
||||
r.put(RDOC_PREZZO, sconto);
|
||||
r.put(RDOC_CODIVA, cod);
|
||||
_righe_iva->add(r, conto, ndec);
|
||||
@ -1890,9 +1891,8 @@ error_type TContabilizzazione::adjust_sconto_rows(TDocumento& doc)
|
||||
if (!_totali_lordi.is_key(cod))
|
||||
_totali_lordi.add(cod, new real);
|
||||
real& rl = (real&) _totali_lordi[cod];
|
||||
real iva = r.imposta(FALSE);
|
||||
iva.round(ndec);
|
||||
rl += sconto + iva;
|
||||
rl -= sconto;
|
||||
rl -= -riep->iva_sconto(); // Giochi strani sui segni :-)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1919,14 +1919,14 @@ error_type TContabilizzazione::adjust_iva_rows(TDocumento& doc)
|
||||
const bool calcolo_lordo = doc.tipo().calcolo_lordo();
|
||||
real imponibile;
|
||||
const int ndec = TCurrency::get_firm_dec(); // Numero di decimali della valuta di ditta
|
||||
const TString16 codval(doc.get(DOC_CODVAL));
|
||||
const TString4 codval(doc.get(DOC_CODVAL));
|
||||
const real cambio = doc.cambio();
|
||||
const exchange_type et = doc.get_bool(DOC_CONTROEURO) ? _exchange_contro : _exchange_base;
|
||||
// Scorre tutti gli elementi della tabella IVA del documento (elementi per codice iva)
|
||||
for (riep = (TRiepilogo_iva*) aa.first_item(); riep != NULL; riep = (TRiepilogo_iva*) aa.succ_item())
|
||||
{
|
||||
const TCodiceIVA & cod = riep->cod_iva(); // Codice IVA
|
||||
const TString8 codiva(cod.codice());
|
||||
const TString4 codiva(cod.codice());
|
||||
real iva_g;
|
||||
if (calcolo_lordo)
|
||||
{
|
||||
@ -2212,7 +2212,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
const char tipo = r.tipo().tipo();
|
||||
// Le righe omaggio senza addebito IVA vanno saltate
|
||||
const bool riga_omaggio = r.get_bool(RDOC_ADDIVA) && tipo == 'O';
|
||||
if ((tipo != 'D' && tipo != 'C') || riga_omaggio)
|
||||
if ((tipo != RIGA_DESCRIZIONI && tipo != RIGA_SCONTI) || riga_omaggio)
|
||||
{
|
||||
search_costo_ricavo(conto,r); // l'errore eventuale viene settato qui dentro
|
||||
if (good())
|
||||
@ -2222,9 +2222,7 @@ error_type TContabilizzazione::compile_rows_mov(TDocumento& doc)
|
||||
codiva2 = r.get(RDOC_CODIVA); // Save...
|
||||
for (int j=0; j < MAX_IVA_SLICES; j++)
|
||||
{
|
||||
real perc = tabella_ripartizione.row(j).get(0);
|
||||
|
||||
perc /= 100.0;
|
||||
const real perc = real(tabella_ripartizione.row(j).get(0)) / CENTO;
|
||||
codiva1 = tabella_ripartizione.row(j).get(1);
|
||||
if (perc == ZERO || codiva1.trim().empty())
|
||||
continue;
|
||||
@ -2860,7 +2858,7 @@ error_type TContabilizzazione::write_all_re(TDocumento& doc, TMovimentoPN_VE & m
|
||||
error_type TContabilizzazione::compile_head_anticipo(TDocumento& doc)
|
||||
{
|
||||
TString descr;
|
||||
TString16 codcaus = doc.tipo().caus_anticipo();
|
||||
const TString4 codcaus = doc.tipo().caus_anticipo();
|
||||
TDate datareg(_movimento->lfile().get_date(MOV_DATAREG));
|
||||
|
||||
if (!_caus->read(codcaus,datareg.year()))
|
||||
|
Loading…
x
Reference in New Issue
Block a user