Migliorata stampa codici articolo contenenti spazi :-(

git-svn-id: svn://10.65.10.50/branches/R_10_00@22744 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-10-26 08:36:23 +00:00
parent a6ab3a2677
commit 780e9ec6aa
5 changed files with 46 additions and 49 deletions

@ -301,14 +301,14 @@ bool TForm_schedemag::validate(TForm_item &cf, TToken_string &s)
TString region;
region << MAG_ANNOES << '=' << _anno_prec;
region << ' ' << MAG_CODART << '=' << codart;
region << ' ' << MAG_CODART << "=\"" << codart << "\"";
TString query;
query << "USE " << LF_MAG;
query << "\nFROM " << region;
query << "\nTO " << region;
if (_tolivart <= 0 || _tolivart >= livelli_articolo().last_level())
query << '~';
query.insert("~", query.len()-1);
TISAM_recordset magprec(query);
real currsaldo = cf.get();

@ -507,7 +507,8 @@ TIsamtempfile* TStampa_inventario::calcola_giacenze(const bool giaceff, const bo
{
//Scorre l'anagrafica di magazzino e calcola per ognuno la giacenza alla data indicata
//Memorizzando i records in un file temporaneo che avrà lo stesso tracciato di LF_MAG
TIsamtempfile * temp_mag = new TIsamtempfile(LF_MAG, "tmpmag");
TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag");
TRectype darec(LF_ANAMAG), arec(LF_ANAMAG);
TMask& m = mask();
@ -547,9 +548,6 @@ TIsamtempfile* TStampa_inventario::calcola_giacenze(const bool giaceff, const bo
const TRecnotype items = ana_cur.items();
ana_cur.freeze();
ana_rel.lfile().set_curr(new TArticolo_giacenza_data);
TArticolo_giacenza_data& art_giac = (TArticolo_giacenza_data&)ana_cur.curr();
const TEsercizi_contabili esc;
const int anno = esc.date2esc(al);
TString4 annoes; annoes.format("%04d", anno);
@ -563,14 +561,15 @@ TIsamtempfile* TStampa_inventario::calcola_giacenze(const bool giaceff, const bo
{
if (!pi.addstatus(1))
break;
TArticolo_giacenza_data art_giac(ana_cur.curr());
art_giac.al(al); // Calcola la giacenza alla data per questo articolo
// Scrive i records sul file temporaneo
TRecord_array& mag = art_giac.mag(annoes);
for (int i = mag.last_row(); temp_mag->good() && i > 0; i = mag.pred_row(i))
{
TRectype& magrec = (TRectype&)mag.row(i);
TRectype& magrec = (TRectype&)mag.row(i);
if (giaceff)
{
const real v = art_giac.giacenza_corretta(magrec, true, valcomp);
@ -581,14 +580,12 @@ TIsamtempfile* TStampa_inventario::calcola_giacenze(const bool giaceff, const bo
}
// Se il file è ok lo sostituisce all'interno della relazione del form
if (temp_mag->good())
return temp_mag;
{
error_box(FR("Errore %d in creazione file temporaneo per saldi di magazzino alla data indicata."), temp_mag->status());
delete temp_mag;
return NULL;
}
error_box(FR("Errore %d in creazione file temporaneo per saldi di magazzino alla data indicata."), temp_mag->status());
delete temp_mag;
return NULL;
}
void TStampa_inventario::setprint_permagazzini(const char subordine, const bool alladata, const bool giaceff, bool valcomp, const TDate & al)

@ -553,11 +553,11 @@ protected:
// @member: effettua l'aggiornamento dei saldi relativi alle giacenze interessate al movimento
bool update_balances(bool lock = true) ;
// @member: effettua l'aggiornamento dei saldi di una giacenza
void update_balances(TRectype & magrec, const TSaldo_mag & s) ;
void update_balances(TRectype& magrec, const TSaldo_mag & s) ;
// @member: effettua l'aggiornamento dei saldi di una giacenza sulle gacenze per ciente/fornitore
void update_balances_clifo(TRectype & clifomagrec, const TSaldo_mag_clifo & s);
void update_balances_clifo(TRectype& clifomagrec, const TSaldo_mag_clifo & s);
// @member: effettua l'aggiornamento di un saldo di una giacenza
void update_balance(TRectype & rec, const char * fieldname, const real& diff, int sgn) const;
void update_balance(TRectype& rec, const char * fieldname, const real& diff, int sgn) const;
void giac_putkey(TRectype& mag, const TSaldo_mag & s);
void giac_putkey_clifo(TRectype& clifomag, const TSaldo_mag_clifo & s);

@ -1598,24 +1598,30 @@ void TArticolo_giacenza_data::al(const TDate& data, const char* codmag, const ch
TString80 str; str << TR("Calcolo giacenza articolo ") << codice();
pi = new TProgind(items, str, false, true);
}
/*
TMov_mag* p_movmag = new TMov_mag;
rel.lfile(LF_MOVMAG).set_curr(p_movmag);
TMov_mag& movmag = *p_movmag;
*/
const TRectype& rmovmag = rel.curr();
TRecord_array& rmag = mag(anno);
for (cur = 0; cur.pos() < items; ++cur)
{
if (pi) pi->addstatus(1);
const TDate datacomp = movmag.get_date(MOVMAG_DATACOMP);
const TString & codart = rmovmag.get(RMOVMAG_CODART);
if (pi && !pi->addstatus(1))
break;
const TDate datacomp = rel.curr(LF_MOVMAG).get_date(MOVMAG_DATACOMP);
const TString& codart = rmovmag.get(RMOVMAG_CODART);
if (codart == codice() && datacomp >= inizio && datacomp <= data)
{
const TString16 codmag = rmovmag.get(RMOVMAG_CODMAG);
const TString16 livello = rmovmag.get(RMOVMAG_LIVGIAC);
const long nreg = rmovmag.get_int(RMOVMAG_NUMREG);
const int nrig = rmovmag.get_int(RMOVMAG_NRIG);
const int i = find_mag(anno, codmag, livello);
TMov_mag movmag(nreg);
if (i >= 0) // Se il record di giacenza esiste lo aggiorno ...
{
TRectype& rec = (TRectype&)rmag.row(i);

@ -5,19 +5,12 @@
#include <diction.h>
#include <progind.h>
#include <recset.h>
#include <utility.h>
#include "clifogiac.h"
#include "mglib.h"
#include "movmag.h"
#include <cfven.h>
#ifndef __CGLIB01_H
#include "../cg/cglib01.h"
#endif
#ifndef __DBLIB_H
#include "../db/dblib.h"
#endif
class TSaldo_mag : public TObject
{
@ -133,7 +126,7 @@ public:
virtual TObject* dup() const { return new TSaldo_mag_clifo(*this); }
bool is_deletable() const { return _quant == ZERO && _valore == ZERO; }
bool is_deletable() const { return _quant.is_zero() && _valore.is_zero(); }
static TToken_string & key(const TRectype & head, const TRectype & row);
void add_quant(const real & q, bool plus = true) { _quant = _quant + (plus ? q : -q); }
void add_valore(const real & v, bool plus = true) { _valore = _valore + (plus ? v : -v); }
@ -181,8 +174,10 @@ TToken_string & TSaldo_mag_clifo::key(const TRectype & head, const TRectype & ro
key.add(head.get_int(MOVMAG_CODINDSP));
key.add(row.get(RMOVMAG_CODART));
key.add(row.get(RMOVMAG_LIVGIAC));
const TString & c = row.get(RMOVMAG_CODCAUS);
const TString& c = row.get(RMOVMAG_CODCAUS);
key.add(c.full() ? c : head.get(MOVMAG_CODCAUS));
return key;
}
@ -204,37 +199,36 @@ TSaldo_mag_clifo::TSaldo_mag_clifo(const TSaldo_mag_clifo & s)
set(s._codes, s._tipocf, s._codcf, s._codindsp, s._codart, s._livello, s._codcaus);
_quant = s._quant;
_valore = s._valore;
}
}
// ********************************
// TMov_mag
TMov_mag::TMov_mag() :
TMultiple_rectype(LF_MOVMAG)
{
add_file(LF_RMOVMAG,"NRIG");
}
TMov_mag::TMov_mag() : TMultiple_rectype(LF_MOVMAG)
{ add_file(LF_RMOVMAG,"NRIG"); }
TMov_mag::TMov_mag(long numreg) :
TMultiple_rectype(LF_MOVMAG)
TMov_mag::TMov_mag(long numreg) : TMultiple_rectype(LF_MOVMAG)
{
add_file(LF_RMOVMAG,"NRIG");
TLocalisamfile movmag(LF_MOVMAG);
put(MOVMAG_NUMREG, numreg);
read(movmag);
if (numreg > 0)
{
TLocalisamfile movmag(LF_MOVMAG);
put(MOVMAG_NUMREG, numreg);
read(movmag);
}
}
TMov_mag::~TMov_mag()
{
}
{ }
TCausale_magazzino& TMov_mag::causale(int row) const
{
const TRectype & rowrec = body()[row];
TString8 cod(rowrec.get(RMOVMAG_CODCAUS));
const TRectype& rowrec = body()[row];
TString8 cod = rowrec.get(RMOVMAG_CODCAUS);
if (cod.blank())
cod = get(MOVMAG_CODCAUS);
return cached_causale_magazzino(cod);
}
@ -731,7 +725,7 @@ bool TMov_mag::update_balances(bool lock)
// aggiorna i saldi del record corrente
// in base alla causale e alla modifica fatta (con segno + o -)
void TMov_mag::update_balances(TRectype & magrec, const TSaldo_mag & s)
void TMov_mag::update_balances(TRectype& magrec, const TSaldo_mag & s)
{
const TCausale_magazzino& caus = cached_causale_magazzino(s.codcaus());
@ -846,11 +840,11 @@ void TMov_mag::update_balances(TRectype& magrec, int numrig, bool plus)
TSaldo_mag saldo(*this, rec);
real quant = rec.get_real(RMOVMAG_QUANT);
const TCausale_magazzino& caus = cached_causale_magazzino(saldo.codcaus());
TArticolo & art = articolo(numrig);
TArticolo& art = articolo(numrig);
quant = art.convert_to_um(quant, NULL, rec.get(RMOVMAG_UM));
real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
const real valore = (quant.is_zero() && caus.update_val()) ? rec.get_real(RMOVMAG_PREZZO) : rec.get_real(RMOVMAG_PREZZO) * quant;
saldo.add(quant, valore, plus);