Patch level : 10.0 718

Files correlati     : cg2.exe
Ricompilazione Demo : [ ]
Commento            :
0001605: 002416 - Pharmatex righe di sola contabilita in pagamento con saldaconto
inserisco un pagamento di fattura fornitore in valuta, cui aggiungo delle righe di sola contabilità, in imputazione del fornitore mi viene calcolato un residuo, tentando di chiudere la registrazione da la mancata quadratura con la testata. Noto che sulle righe di sola contabilità non viene indicato il tipo riga e neppure le contropartite.
Passaggi per riprodurre l'anomalia


git-svn-id: svn://10.65.10.50/trunk@20392 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2010-04-29 09:20:11 +00:00
parent 1046956d4a
commit 5d886904cb
3 changed files with 65 additions and 68 deletions

View File

@ -332,7 +332,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
ivasheet.sheet_mask().enable(IVA_NOTAVARECF, show_notevar);
}
if (ins && !ci_sono_importi())
if (ins && !ci_sono_importi(cgsheet))
{
cgsheet.reset();
for (int i = 1; i < causale().size(); i++)
@ -1867,33 +1867,32 @@ void TPrimanota_application::dump_rec(TConfig & ini, const TRectype & rec, int r
void TPrimanota_application::dump_fatt(TConfig& ini, TPartita & game, int rigafatt)
{
if (rigafatt > 0)
CHECKD(rigafatt > 0 && rigafatt < 9999, "Riga fattura errata ", rigafatt);
const TRiga_partite& riga = game.riga(rigafatt);
int r;
for (r = 1; r <= riga.rate(); r++)
{
const TRiga_partite& riga = game.riga(rigafatt);
int r;
TRiga_scadenze& rec = riga.rata(r);
for (r = 1; r <= riga.rate(); r++)
{
TRiga_scadenze& rec = riga.rata(r);
rec.fill_array();
const int lastrow = rec.last();
rec.fill_array();
const int lastrow = rec.last();
dump_rec(ini, rec, r);
for (int rp = rec.first(); rp <= lastrow; rp = rec.succ(rp))
{
const TRectype & recpag = rec.row(rp);
dump_rec(ini, rec, r);
for (int rp = rec.first(); rp <= lastrow; rp = rec.succ(rp))
{
const TRectype & recpag = rec.row(rp);
dump_rec(ini, recpag, rp);
}
}
for ( ; ; r++)
{
if (ini.set_paragraph(format("%d,%d", LF_SCADENZE, r+1)))
ini.remove_all();
else
break;
}
dump_rec(ini, recpag, rp);
}
}
for ( ; ; r++)
{
if (ini.set_paragraph(format("%d,%d", LF_SCADENZE, r+1)))
ini.remove_all();
else
break;
}
}
@ -1905,7 +1904,6 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
for (i = 0; i < _rel->cg_items(); i++)
{
const TRectype& rec = _rel->cg(i);
dump_rec(ini, rec, i + 1);
}
for ( ; ini.set_paragraph(format("%d,%d", LF_RMOV, i+1)); i++)
@ -1914,7 +1912,6 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
for (i = 0; i < _rel->iva_items(); i++)
{
const TRectype& rec = _rel->iva(i);
dump_rec(ini, rec, i + 1);
}
for ( ; ini.set_paragraph(format("%d,%d", LF_RMOVIVA, i+1)); i++)
@ -1927,46 +1924,41 @@ void TPrimanota_application::mask2ini(const TMask& msk, TConfig& ini)
if (is_fattura())
{
TPartita* game = p.first();
if (game)
{
const int rigafatt = game->prima_fattura(numreg);
dump_fatt(ini, *game, rigafatt);
if (rigafatt > 0 && rigafatt < 9999)
dump_fatt(ini, *game, rigafatt);
}
}
else
{
TBit_array dumped;
for (TPartita* game = p.first(); game != NULL; game = p.next())
{
TBit_array dumped;
const int rigapag = game->primo_pagamento(numreg);
if (rigapag > 0)
{
TRiga_partite & riga = game->riga(rigapag);
TCursor pag(new TRelation(LF_PAGSCA));
TRectype filter(pag.curr());
// Ricava la lista dei pagamenti dal database invece di leggerli dalla struttura in memoria :-(
const TRiga_partite& riga = game->riga(rigapag);
TRelation rel(LF_PAGSCA);
TCursor pag(&rel);
TRectype& recpag = pag.curr();
filter.put(PAGSCA_TIPOC, riga.get(PART_TIPOCF));
filter.put(PAGSCA_GRUPPO, riga.get(PART_GRUPPO));
filter.put(PAGSCA_CONTO, riga.get(PART_CONTO));
filter.put(PAGSCA_SOTTOCONTO, riga.get(PART_SOTTOCONTO));
filter.put(PAGSCA_ANNO, riga.get(PART_ANNO));
filter.put(PAGSCA_NUMPART, riga.get(PART_NUMPART));
pag.setregion(filter, filter);
recpag.put(PAGSCA_TIPOC, riga.get(PART_TIPOCF));
recpag.put(PAGSCA_GRUPPO, riga.get(PART_GRUPPO));
recpag.put(PAGSCA_CONTO, riga.get(PART_CONTO));
recpag.put(PAGSCA_SOTTOCONTO, riga.get(PART_SOTTOCONTO));
recpag.put(PAGSCA_ANNO, riga.get(PART_ANNO));
recpag.put(PAGSCA_NUMPART, riga.get(PART_NUMPART));
pag.setregion(recpag, recpag);
const int items = pag.items();
for (pag = 0L; pag.pos() < items; ++pag)
{
const TRectype & recpag = pag.curr();
if (rigapag == recpag.get_int(PAGSCA_NRIGP))
{
const int rigafatt = recpag.get_int(PAGSCA_NRIGA);
if (rigafatt >= 0 && !dumped[rigafatt])
if (rigafatt > 0 && rigafatt < 9999 && !dumped[rigafatt])
{
dump_fatt(ini, *game, rigafatt);
dumped.set(rigafatt);

View File

@ -17,8 +17,6 @@
#include <doc.h>
#include <occas.h>
///////////////////////////////////////////////////////////
// Funzioni di decodifica/calcolo
///////////////////////////////////////////////////////////
@ -26,8 +24,14 @@
// Determina il tipo di una riga contabile in formato TToken_string
char TPrimanota_application::row_type(const TToken_string& s)
{
const int l = s.len()-1;
return l > 0 ? s[l] : ' ';
char t = ' ';
if (s.full())
{
t = s[s.len()-1];
if (t < 'A' || t > 'Z')
t = ' ';
}
return t;
}
// Determina il tipo IVA da causale+anno
@ -211,8 +215,7 @@ TSheet_field& TPrimanota_application::cgs() const
{
const TMask* m = _msk[_iva == nessuna_iva ? 1 : 2];
CHECK(m, "Null cgs() mask");
TSheet_field& s = m->sfield(F_SHEETCG);
return s;
return m->sfield(F_SHEETCG);
}
@ -459,33 +462,35 @@ void TPrimanota_application::cgs_pack()
}
bool TPrimanota_application::ci_sono_importi() const
bool TPrimanota_application::ci_sono_importi(const TSheet_field& s) const
{
const int rows = cgs().items();
for (int i = 0; i < rows; i++)
if (s.items() > 0)
{
const TImporto imp = get_cgs_imp(i);
if (!imp.is_zero())
return true;
}
TImporto imp;
FOR_EACH_SHEET_ROW(s, r, riga);
{
imp = *riga;
if (!imp.is_zero())
return true;
}
}
return false;
}
real TPrimanota_application::calcola_saldo() const
{
TImporto importo, bilancio, saldaconto;
const bool pag = is_pagamento() && !_as400;
TImporto importo, bilancio, saldaconto;
TString_array& rows = cgs().rows_array();
for (int i = rows.last(); i >= 0; i--)
TSheet_field& cgrows = cgs();
FOR_EACH_SHEET_ROW_BACK(cgrows, i, r)
{
TToken_string& r = rows.row(i);
importo = r;
importo = *r;
bilancio += importo;
if (pag)
{
const char tipo = row_type(r);
if (strchr("ACGKP", tipo) != NULL) // Abbuoni attivi, differenze cambio,
const char tipo = row_type(*r);
if (strchr("ACGKP", tipo) != NULL) // Abbuoni attivi, differenze cambio, spese, ...
saldaconto += importo;
}
}

View File

@ -245,7 +245,7 @@ protected:
void ivas_pack();
void cgs_pack();
bool ci_sono_importi() const;
bool ci_sono_importi(const TSheet_field& cgs) const;
real calcola_saldo() const;
real calcola_imp() const;