Patch level : 12.0 890

Files correlati     : f90.exe
Commento            : Corretto caricamento moviementi utilizzando un recordset invece che leggere dal file direttamente: non tutti i moviementi venivano letti
This commit is contained in:
Simone Palacino 2019-10-16 14:23:36 +02:00
parent 2ebfb34210
commit 06c561dc28
2 changed files with 54 additions and 30 deletions

View File

@ -11,6 +11,7 @@
#include "f901tab.h"
#include "f90100c.h"
#include "f90100b.h"
#include "sqlset.h"
/*
* - Per aggiornare le tabelle f9 aggiungere nella cartella "sql\f9\" il file sql cosi' fatto:
@ -719,53 +720,46 @@ void TF9_app::load()
const TDate dataend = get_dataend();
const char tipodoc = get_tipodoc();
const bool flagpro = is_provviso();
TLocalisamfile mov(LF_MOV);
mov.setkey(2);
mov.put(MOV_DATAREG, dataini);
int items = 0;
TDate datareg;
for (bool ok = mov.read(); ok && (datareg = mov.get_date(MOV_DATAREG)) >= dataini && datareg <= dataend; ok = mov.next() == NOERR)
items++;
TString query; query << "SELECT * FROM MOV WHERE DATAREG>=" << dataini.date2ansi() << " AND DATAREG<=" << dataend.date2ansi() << ";";
TSQL_recordset mov(query);
int items = mov.items();
TProgress_monitor progr(items, "Acquisizione movimenti");
int i = 0;
mov.zero();
mov.setkey(2);
mov.put(MOV_DATAREG, dataini);
const TipoIVA tipo = tipodoc == 'A' ? iva_acquisti : iva_vendite;
TLocalisamfile clifo(LF_CLIFO);
// Prendo tutti i movimenti a partire da una data e li carico tutti fino alla data finale
_movs.clear();
for (bool ok = mov.read(); ok && (datareg = mov.get_date(MOV_DATAREG)) >= dataini && datareg <= dataend; ok = mov.next() == NOERR)
for (bool ok = mov.move_first(); ok; ok = mov.move_next())
{
if (!progr.add_status())
break;
TToken_string elab_f9(mov.get(MOV_ELABF9), ';');
// Se definitivo controllo il flag di stampato REGST
TCausale caus(mov.get(MOV_CODCAUS));
if ((flagpro || mov.get_bool(MOV_REGST)) && mov.get(MOV_NUMDOC).full() && caus.reg().iva() == tipo
TToken_string elab_f9(recset_get_string(mov, MOV_ELABF9), ';');
TCausale caus(recset_get_string(mov, MOV_CODCAUS, 3));
// Se definitivo controllo il flag di stampato REGST
if ((flagpro || recset_get_bool(mov, MOV_REGST)) && recset_get_string(mov, MOV_NUMDOC).full() && caus.reg().iva() == tipo
&& (elab_f9.items() == 3 && elab_f9.get(2)[0] != 'X' || elab_f9.empty())) // Controllo che non sia escluso
{
TToken_string t("", '|');
t.add("");
t.add(mov.get(MOV_NUMREG));
t.add(mov.get(MOV_DATAREG));
t.add(mov.get(MOV_DATADOC));
t.add(mov.get(MOV_CODCAUS));
t.add(mov.get(MOV_MESELIQ));
t.add(mov.get(MOV_NUMDOC));
const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC);
t.add(recset_get_string(mov, MOV_NUMREG));
t.add(recset_get_string(mov, MOV_DATAREG));
t.add(recset_get_string(mov, MOV_DATADOC));
t.add(recset_get_string(mov, MOV_CODCAUS));
t.add(recset_get_string(mov, MOV_MESELIQ));
t.add(recset_get_string(mov, MOV_NUMDOC));
const real tot = recset_get_real(mov, MOV_TOTDOC) + recset_get_real(mov, MOV_RITFIS) + recset_get_real(mov, MOV_RITSOC);
t.add(tot);
t.add(mov.get(MOV_CODCF));
t.add(recset_get_string(mov, MOV_CODCF));
clifo.zero();
clifo.put(CLI_TIPOCF, "F");
clifo.put(CLI_CODCF, mov.get(MOV_CODCF));
clifo.put(CLI_TIPOCF, tipo == iva_acquisti ? "F" : "C");
clifo.put(CLI_CODCF, recset_get_string(mov, MOV_CODCF));
t.add(clifo.read() == NOERR ? clifo.get(CLI_RAGSOC) : " ");
t.add(TString(mov.get(MOV_REG)) << "/" << mov.get(MOV_PROTIVA));
t.add(mov.get(MOV_DESCR));
t.add(TString(recset_get_string(mov, MOV_REG)) << "/" << recset_get_string(mov, MOV_PROTIVA));
t.add(recset_get_string(mov, MOV_DESCR));
_movs.insert(_movs.end(), t);
i++;
}
@ -1707,4 +1701,28 @@ TControllo_mask::TControllo_mask(const char* id_estr, bool esclusi) : TAutomask(
// Fill controllo sheet
fill();
}
const TString& recset_get_string(const TRecordset& rec, const char* field, const int zero_filled)
{
const TString& str = rec.get(rec.find_column(field)).as_string();
if (zero_filled == -1)
return str;
static TString c;
c.cut(0);
const int len = str.len();
for (int i = len; i < zero_filled; i++) // Sistemo il codcaus per via del TVariant che non restituisce la stringa esattamente come l'originale
c << "0";
c << str;
return c;
}
bool recset_get_bool(const TRecordset& rec, const char* field)
{
return rec.get(rec.find_column(field)).as_bool();
}
real recset_get_real(const TRecordset& rec, const char* field)
{
return rec.get(rec.find_column(field)).as_real();
}

View File

@ -244,4 +244,10 @@ inline bool open_mov(const TRectype& mov)
}
xvt_fsys_remove_file(ininame);
return ok;
}
}
// Getters per semplificare i get dai TRecorset
const TString& recset_get_string(const TRecordset& rec, const char* field, int zero_filled = -1);
bool recset_get_bool(const TRecordset& rec, const char* field);
real recset_get_real(const TRecordset& rec, const char* field);