Patch level : 2003 580

Files correlati     : f110.dir mg1.exe mg1200.msk mg3.exe mg3300.msk mg4.exe mg4300.frm
Ricompilazione Demo : [ ]
Commento            :

GF20086
Se faccio un movimento  su un magazzino es 001 e poi vado in modifica e
cambio il magazzino nell'anagrafica articoli nella pagina giacenze risulta,
oltre alla nuova, una scheda per il mag 001 vuota. Se faccio un ricalcolo
saldi la situazione non cambia.


git-svn-id: svn://10.65.10.50/trunk@11438 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2003-09-24 13:37:10 +00:00
parent bccc8fef5d
commit ae4aed1ef1
10 changed files with 213 additions and 116 deletions

View File

@ -1,3 +1,3 @@
110 110
0 0
$movmag|52|52|135|0|Movimenti di magazzino (?)||| $movmag|52|52|135|0|Movimenti di magazzino|||

View File

@ -79,7 +79,7 @@ void TApp_rebuildbalances::main_loop()
while (m.run()==K_ENTER) while (m.run()==K_ENTER)
{ {
if (!rebuild_balances(m.get(F_ANNOES))) if (!rebuild_balances(m.get(F_ANNOES)))
warning_box("A causa degli errori riscontrati i saldi di magazzino \npotrebbero non essere stati del tutto aggiornati. \nProcedere ad una nuova operazione di ''Ricostruzione saldi''"); warning_box(TR("A causa degli errori riscontrati i saldi di magazzino \npotrebbero non essere stati del tutto aggiornati. \nProcedere ad una nuova operazione di 'Ricostruzione saldi'"));
} }
} }
@ -87,6 +87,6 @@ int mg1200(int argc, char* argv[])
{ {
TApp_rebuildbalances a; TApp_rebuildbalances a;
a.run(argc, argv, "Ricostruzione saldi"); a.run(argc, argv, TR("Ricostruzione saldi"));
return 0; return 0;
} }

View File

@ -1,19 +1,6 @@
#include "mg1200.h" #include "mg1200.h"
TOOLBAR "" 0 19 40 2 PAGE "Ricostruzione Saldi" -1 -1 36 4
BUTTON DLG_OK 14 2
BEGIN
PROMPT -12 -1 "Ricostruisci"
END
BUTTON DLG_CANCEL 14 2
BEGIN
PROMPT -22 -1 "Annulla"
END
ENDPAGE
PAGE "Ricostruzione movimenti" 11 50 10
DATE F_DATA DATE F_DATA
BEGIN BEGIN
@ -24,7 +11,7 @@ END
NUMBER F_ANNOES 4 NUMBER F_ANNOES 4
BEGIN BEGIN
PROMPT 2 3 "Codice esercizio " PROMPT 1 1 "Codice esercizio "
USE ESC USE ESC
INPUT CODTAB F_ANNOES INPUT CODTAB F_ANNOES
DISPLAY "Esercizio@20" CODTAB DISPLAY "Esercizio@20" CODTAB
@ -35,6 +22,19 @@ BEGIN
FLAGS "Z" FLAGS "Z"
END END
BUTTON DLG_ELABORA 14 2
BEGIN
PROMPT -12 -1 "~Elabora"
PICTURE BMP_ELABORA
MESSAGE EXIT,K_ENTER
END
BUTTON DLG_QUIT 14 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE ENDPAGE
ENDMASK ENDMASK

View File

@ -9,9 +9,7 @@
#include "mglib.h" #include "mglib.h"
#include "mg3300.h" #include "mg3300.h"
#ifndef __CGLIB01_H
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
#endif
TCausale_magazzino& get_cau(const char* codcaus) TCausale_magazzino& get_cau(const char* codcaus)
@ -25,6 +23,7 @@ TCausale_magazzino& get_cau(const char* codcaus)
} }
return *caus; return *caus;
} }
class TForm_schedemag : public TForm_stampemg class TForm_schedemag : public TForm_stampemg
{ {
int _tolivgiac,_tolivart; int _tolivgiac,_tolivart;

View File

@ -212,19 +212,19 @@ BEGIN
PROMPT 42 12 "Dettaglio i depositi" PROMPT 42 12 "Dettaglio i depositi"
END END
LIST F_ENABLER 40 LIST F_ENABLER 30
BEGIN BEGIN
PROMPT 2 14 "" PROMPT 2 14 "Livello di dettaglio "
ITEM "AC|Dettaglia fino ai singoli articoli" ITEM "AC|fino ai singoli articoli"
MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART
ITEM "AL|Dettaglia gli articoli fino al livello" ITEM "AL|fino al livello"
MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|SHOW,F_TOLIVELLOART|CHECK,F_TOLIVELLOART MESSAGE RESET,F_TOLIVELLOGIAC|HIDE,F_TOLIVELLOGIAC|SHOW,F_TOLIVELLOART|CHECK,F_TOLIVELLOART
ITEM "GC|Dettaglia le giacenze fino al livello " ITEM "GC|fino al livello di giacenza"
MESSAGE RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|SHOW,F_TOLIVELLOGIAC|CHECK,F_TOLIVELLOGIAC MESSAGE RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|SHOW,F_TOLIVELLOGIAC|CHECK,F_TOLIVELLOGIAC
ITEM "|Massimo dettaglio" ITEM "|massimo"
MESSAGE ENABLE,F_SUDDIV_MAGAZZINI MESSAGE ENABLE,F_SUDDIV_MAGAZZINI
MESSAGE RESET,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|HIDE,F_TOLIVELLOGIAC MESSAGE RESET,F_TOLIVELLOGIAC|RESET,F_TOLIVELLOART|HIDE,F_TOLIVELLOART|HIDE,F_TOLIVELLOGIAC
@ -232,10 +232,9 @@ BEGIN
END END
NUMBER F_TOLIVELLOART 1 NUMBER F_TOLIVELLOART 1
BEGIN BEGIN
PROMPT 45 14 "" PROMPT 57 14 ""
USE FCA USE FCA
INPUT CODTAB F_TOLIVELLOART INPUT CODTAB F_TOLIVELLOART
DISPLAY "Num." CODTAB DISPLAY "Num." CODTAB
@ -251,7 +250,7 @@ END
NUMBER F_TOLIVELLOGIAC 1 NUMBER F_TOLIVELLOGIAC 1
BEGIN BEGIN
PROMPT 45 14 "" PROMPT 57 14 ""
USE FCG USE FCG
INPUT CODTAB F_TOLIVELLOGIAC INPUT CODTAB F_TOLIVELLOGIAC
DISPLAY "Num." CODTAB DISPLAY "Num." CODTAB

View File

@ -7,7 +7,9 @@
#include "mag.h" #include "mag.h"
#include "stomag.h" #include "stomag.h"
#include "umart.h" #include "umart.h"
#include "movmag.h"
#include "rmovmag.h"
#include "../ve/veconf.h" #include "../ve/veconf.h"
#include "mglib.h" #include "mglib.h"
#include "mg4300.h" #include "mg4300.h"
@ -24,7 +26,7 @@ public:
bool ragg_grpfis() const { return get_bool("B5"); } bool ragg_grpfis() const { return get_bool("B5"); }
bool ragg_caus() const { return get_bool("B6"); } bool ragg_caus() const { return get_bool("B6"); }
int last_numreg() const { return get_int("I4"); } long last_numreg() const { return get_long("I4"); }
void set_last_numreg(long n) { put("I4",n); } void set_last_numreg(long n) { put("I4",n); }
// data ultima stampa esercizio precedente // data ultima stampa esercizio precedente
TDate last_print_prec() const { return get_date("D4"); } TDate last_print_prec() const { return get_date("D4"); }
@ -38,9 +40,8 @@ public:
// ************************************************ // ************************************************
// TEMP!!!!!!!!!!!!!!!! // TEMP!!!!!!!!!!!!!!!!
TRegistro_giornalemag:: TRegistro_giornalemag::TRegistro_giornalemag(const char* cod, int year)
TRegistro_giornalemag(const char* cod, int year) :TRegistro_std(cod,year)
:TRegistro_std(cod,year)
{ {
if (tipo()!=TIPOREG_GIOMAG) if (tipo()!=TIPOREG_GIOMAG)
fatal_box("Il registro richiesto non è relativo ad un libro giornale di magazzino"); fatal_box("Il registro richiesto non è relativo ad un libro giornale di magazzino");
@ -49,8 +50,8 @@ TRegistro_giornalemag::
class TGiornalemag : public TForm_stampemg class TGiornalemag : public TForm_stampemg
{ {
static TDate dadata; static TDate _dadata;
static TDate adata; static TDate _adata;
static int freq_stampa; static int freq_stampa;
static bool stampa_def; static bool stampa_def;
static bool ragg_mag; static bool ragg_mag;
@ -61,6 +62,7 @@ class TGiornalemag : public TForm_stampemg
static TCursor * cur; static TCursor * cur;
static TGiornalemag* giofrm; static TGiornalemag* giofrm;
static TAssoc_array _cod_magazzini; static TAssoc_array _cod_magazzini;
static TAssoc_array _cau_magazzino;
static int _annoes; static int _annoes;
static int livello_giac; static int livello_giac;
@ -80,6 +82,8 @@ static bool filter_func(const TRelation* r);
protected: protected:
// void add_mag(TRectype & magrec,const char * codreg); // void add_mag(TRectype & magrec,const char * codreg);
void calcola_range_movimenti(TRecnotype& primo, TRecnotype& ultimo) const;
public: public:
void set_parametri(TMask & m); void set_parametri(TMask & m);
bool can_be_printed(); bool can_be_printed();
@ -181,11 +185,13 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s)
valore << ' '; valore << ' ';
vv = ""; vv = "";
} }
const TRectype& anamag = cursor()->relation()->curr(LF_ANAMAG);
if (ragg_articoli) if (ragg_articoli)
{ {
valore << "Art." << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART) << ' '; valore << "Art." << anamag.get(ANAMAG_CODART) << ' ';
//vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' '; //vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' ';
TString livello(cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC")); TString livello(cursor()->relation()->curr(LF_RMOVMAG).get("LIVGIAC"));
if (livello.not_empty() && livello_giac != 0) if (livello.not_empty() && livello_giac != 0)
{ {
for (int lev=1; lev <= livello_giac; lev++) for (int lev=1; lev <= livello_giac; lev++)
@ -200,13 +206,15 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s)
valore << livelli_giacenza().name(livello_giac); valore << livelli_giacenza().name(livello_giac);
valore << " " << livelli_giacenza().group_descr_packed(livello,livello_giac) << " "; valore << " " << livelli_giacenza().group_descr_packed(livello,livello_giac) << " ";
} }
} else { }
else
{
if (ragg_classi) if (ragg_classi)
{ {
valore << "Classe fiscale " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CLASSEFIS) << ' '; valore << "Classe fiscale " << anamag.get(ANAMAG_CLASSEFIS) << ' ';
if (ragg_raggart) if (ragg_raggart)
{ {
valore << " ragg. " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_RAGGFIS) << ' '; valore << " ragg. " << anamag.get(ANAMAG_RAGGFIS) << ' ';
} }
} else { } else {
vv.cut(0); vv.cut(0);
@ -215,14 +223,16 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s)
//valore << "Mov." << cursor()->relation()->lfile(LF_RMOVMAG).get("NUMREG") << "/"; //valore << "Mov." << cursor()->relation()->lfile(LF_RMOVMAG).get("NUMREG") << "/";
//valore << cursor()->relation()->lfile(LF_RMOVMAG).get("NRIG"); //valore << cursor()->relation()->lfile(LF_RMOVMAG).get("NRIG");
} }
vv << "Art. " << cursor()->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART); vv << "Art. " << anamag.get(ANAMAG_CODART);
//vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' '; //vv << ' ' << cursor()->relation()->lfile(LF_RMOVMAG).get("LIVGIAC") << ' ';
} }
} }
valore << vv; valore << vv;
cf.set(valore); cf.set(valore);
return TRUE; return TRUE;
} else if (subcode== "INFO_CAUS") { }
else if (subcode== "INFO_CAUS")
{
const TRectype& rec_caus = cache().get("%CAU", cf.get()); const TRectype& rec_caus = cache().get("%CAU", cf.get());
if (ragg_caus) if (ragg_caus)
{ {
@ -247,14 +257,16 @@ bool TGiornalemag::validate(TForm_item &cf, TToken_string &s)
} }
const char * TGiornalemag::get_cronofield(TVariable_rectype & r) const char * TGiornalemag::get_cronofield(TVariable_rectype & rmovmag)
{ {
// static buffer // static buffer
static TString * valore=NULL; if (valore == NULL ) valore = new TString80 ; static TString * valore=NULL;
if (valore == NULL )
valore = new TString16;
const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG));
const TDate datamov = movmag.get(MOVMAG_DATAREG);
TDate datamov(cur->relation()->lfile(LF_MOVMAG).get_date("DATAREG"));
long numreg=cur->relation()->lfile(LF_MOVMAG).get_int("NUMREG");
// gestione frequenza // gestione frequenza
valore->cut(0); valore->cut(0);
switch (freq_stampa ) { switch (freq_stampa ) {
@ -262,7 +274,7 @@ const char * TGiornalemag::get_cronofield(TVariable_rectype & r)
valore->format("%4d%2d%2d%7d",datamov.year(), valore->format("%4d%2d%2d%7d",datamov.year(),
datamov.month(), datamov.month(),
datamov.day(), datamov.day(),
numreg); movmag.get_long("NUMREG"));
break; break;
default: default:
valore->format("%4d%2d%2d",datamov.year(), valore->format("%4d%2d%2d",datamov.year(),
@ -272,62 +284,100 @@ const char * TGiornalemag::get_cronofield(TVariable_rectype & r)
return *valore; return *valore;
} }
const char * TGiornalemag::get_fiscfield(TVariable_rectype & r) const char * TGiornalemag::get_fiscfield(TVariable_rectype & rmovmag)
{ {
static TString * valore=NULL; if (valore == NULL ) valore = new TString80 ; static TString * valore=NULL;
TString vv; if (valore == NULL )
valore = new TString80 ;
TString80 vv;
valore->cut(0); valore->cut(0);
const TString80 codart = rmovmag.get(RMOVMAG_CODART);
// gestione ragruppamenti // gestione ragruppamenti
if (!ragg_mag) if (!ragg_mag)
{ {
valore->format("%-15s",(const char *)cur->relation()->lfile(LF_RMOVMAG).get("CODMAG")); valore->format("%-15s",(const char *)rmovmag.get(RMOVMAG_CODMAG));
} }
if (ragg_articoli) if (ragg_articoli)
{ {
*valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART); *valore << codart;
TString c2(cur->relation()->lfile(LF_RMOVMAG).get("LIVGIAC"));
if (livello_giac) if (livello_giac)
{
const TString80 c2 = rmovmag.get("LIVGIAC");
*valore << livelli_giacenza().unpack_grpcode(c2, livello_giac); *valore << livelli_giacenza().unpack_grpcode(c2, livello_giac);
}
} }
else else
{ {
if (ragg_classi) if (ragg_classi)
{ {
*valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CLASSEFIS); const TRectype& anamag = cache().get(LF_ANAMAG, codart);
*valore << anamag.get(ANAMAG_CLASSEFIS);
if (ragg_raggart) if (ragg_raggart)
{ *valore << anamag.get(ANAMAG_RAGGFIS);
*valore << cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_RAGGFIS);
}
} }
else else
{ {
if (!ragg_caus && freq_stampa==0) if (!ragg_caus && freq_stampa==0)
{ {
vv.format("%4d",cur->relation()->lfile(LF_RMOVMAG).get_int("NRIG")); vv.format("%4d",rmovmag.get_int(RMOVMAG_NRIG));
} }
else else
{ {
vv.format("%-20s", (const char *)cur->relation()->lfile(LF_ANAMAG).get(ANAMAG_CODART)); vv.format("%-20s", (const char *)codart);
} }
} }
} }
TString16 codcaus = rmovmag.get(RMOVMAG_CODCAUS);
if (codcaus.empty())
{
const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG));
codcaus = movmag.get(MOVMAG_CODCAUS);
}
if (ragg_caus) // raggruppo per "tipo" di causale if (ragg_caus) // raggruppo per "tipo" di causale
*valore << cur->curr(-ALIAS_CAUSALI).get("S8"); {
TCausale_magazzino* caus = (TCausale_magazzino*)_cau_magazzino.objptr(codcaus);
*valore << caus->get("S8");
}
else else
*valore << cur->curr(-ALIAS_CAUSALI).get("CODTAB"); *valore << codcaus;
*valore << vv; *valore << vv;
return *valore; return *valore;
} }
void TGiornalemag::calcola_range_movimenti(TRecnotype& primo, TRecnotype& ultimo) const
{
TRelation rel(LF_MOVMAG);
TRectype recfr(LF_MOVMAG), recto(LF_MOVMAG);
if (_dadata.ok())
recfr.put(MOVMAG_DATAREG, _dadata);
if (_adata.ok())
recto.put(MOVMAG_DATAREG, _adata);
TCursor cur(&rel, "", 3, &recfr, &recto);
const TRecnotype items = cur.items();
cur.freeze();
primo = 0;
ultimo = 0;
for (cur = 0L; cur.pos() < items; ++cur)
{
const long numreg = rel.curr().get_long(MOVMAG_NUMREG);
if (primo == 0 || numreg < primo)
primo = numreg;
if (numreg > ultimo)
ultimo = numreg;
}
}
void TGiornalemag::set_parametri(TMask & m) void TGiornalemag::set_parametri(TMask & m)
{ {
// set static variables // set static variables
dadata=m.get_date(F_DATAIN); _dadata=m.get_date(F_DATAIN);
adata=m.get_date(F_DATAFIN); _adata=m.get_date(F_DATAFIN);
freq_stampa = m.get_int(F_FREQ); freq_stampa = m.get_int(F_FREQ);
stampa_def = (*m.get(F_DEFINITIVA) == 'D'); stampa_def = (*m.get(F_DEFINITIVA) == 'D');
ragg_mag = m.get_bool(F_RAGGMAG); ragg_mag = m.get_bool(F_RAGGMAG);
@ -350,7 +400,6 @@ void TGiornalemag::set_parametri(TMask & m)
ragg_articoli || ragg_classi || ragg_caus); ragg_articoli || ragg_classi || ragg_caus);
find_field('B',odd_page,"HEADER_MOV").show(freq_stampa==0); find_field('B',odd_page,"HEADER_MOV").show(freq_stampa==0);
TVariable_rectype *vrec_rmov= new TVariable_rectype(LF_RMOVMAG); TVariable_rectype *vrec_rmov= new TVariable_rectype(LF_RMOVMAG);
vrec_rmov->add_field(new TVariable_field ("CRONO_FIELD",get_cronofield,32)); vrec_rmov->add_field(new TVariable_field ("CRONO_FIELD",get_cronofield,32));
vrec_rmov->add_field(new TVariable_field ("FISC_FIELD",get_fiscfield,48)); vrec_rmov->add_field(new TVariable_field ("FISC_FIELD",get_fiscfield,48));
@ -360,15 +409,34 @@ void TGiornalemag::set_parametri(TMask & m)
// inserisce tutti i magazzini collegati // inserisce tutti i magazzini collegati
_cod_magazzini.destroy(); _cod_magazzini.destroy();
TTable mag("MAG"); TTable mag("MAG");
for (int err = mag.first(); err == NOERR; err = mag.next()) int err;
for (err = mag.first(); err == NOERR; err = mag.next())
{ {
const TString16 codmag(mag.get("CODTAB").left(3)); const TString16 codmag(mag.get("CODTAB").left(3));
if (codmag.len() == 3 && mag.get("S8")==m.get(F_CODREG)) if (codmag.len() == 3 && mag.get("S8")==m.get(F_CODREG))
_cod_magazzini.add(codmag); _cod_magazzini.add(codmag);
} }
_cau_magazzino.destroy();
TTable cau("%CAU");
for (err = cau.first(); err == NOERR; err = cau.next())
{
TCausale_magazzino* cm = new TCausale_magazzino(cau.curr());
_cau_magazzino.add(cm->codice(), cm);
}
TRecnotype primo, ultimo;
calcola_range_movimenti(primo, ultimo);
TRectype recfr(LF_RMOVMAG), recto(LF_RMOVMAG);
if (primo > 0)
recfr.put(RMOVMAG_NUMREG, primo);
if (ultimo > 0)
recto.put(RMOVMAG_NUMREG, ultimo);
cursor()->setregion(recfr, recto);
// setta il filtro sui magazzini di questo giornale // setta il filtro sui magazzini di questo giornale
cursor()->set_filterfunction(filter_func,TRUE); cursor()->set_filterfunction(filter_func,FALSE);
} }
/* /*
@ -398,29 +466,32 @@ void TGiornalemag::add_mag(TRectype & magrec,const char * codreg)
bool TGiornalemag::filter_func(const TRelation* r) bool TGiornalemag::filter_func(const TRelation* r)
{ {
const TRectype& movmag = r->curr(LF_MOVMAG); // const TRectype& movmag = r->curr(LF_MOVMAG);
const TDate datareg = movmag.get("DATAREG"); const TRectype& rmovmag = r->curr(LF_RMOVMAG);
const TRectype& movmag = cache().get(LF_MOVMAG, rmovmag.get(RMOVMAG_NUMREG));
const TDate datareg = movmag.get(MOVMAG_DATAREG);
if (datareg.year() != _annoes) if (datareg.year() != _annoes)
return FALSE; return FALSE;
if (!dadata.empty() && datareg < dadata) if (!_dadata.empty() && datareg < _dadata)
return FALSE; return FALSE;
if (!adata.empty() && datareg > adata) if (!_adata.empty() && datareg > _adata)
return FALSE; return FALSE;
const TString16 codmag = r->curr(LF_RMOVMAG).get("CODMAG").left(3); const TString4 codmag = rmovmag.get(RMOVMAG_CODMAG).left(3);
if (!_cod_magazzini.is_key(codmag)) if (!_cod_magazzini.is_key(codmag))
return FALSE; return FALSE;
// considera solo le causali "fiscali" o quelle che movimentano le rimanenze iniziali(movimenti d'apertura) // considera solo le causali "fiscali" o quelle che movimentano le rimanenze iniziali(movimenti d'apertura)
bool rval; bool rval = FALSE;
TCausale_magazzino& causrig=(TCausale_magazzino&)r->curr(-ALIAS_CAUSALIR);
if (causrig.codice().not_empty()) TString16 codcaus = rmovmag.get(RMOVMAG_CODCAUS);
rval = causrig.is_fiscale() || causrig.sgn(s_rim); if (codcaus.empty())
else codcaus = movmag.get(MOVMAG_CODCAUS);
{ TCausale_magazzino* caus = (TCausale_magazzino*)_cau_magazzino.objptr(codcaus);
TCausale_magazzino& causmov=(TCausale_magazzino&)r->curr(-ALIAS_CAUSALI); if (caus != NULL)
rval = causmov.is_fiscale() || causmov.sgn(s_rim); rval = caus->is_fiscale() || caus->sgn(s_rim);
}
return rval; return rval;
} }
@ -430,10 +501,10 @@ bool TGiornalemag::can_be_printed()
{ {
TLocalisamfile mov(LF_MOVMAG); TLocalisamfile mov(LF_MOVMAG);
mov.setkey(3); mov.setkey(3);
mov.put("DATAREG",dadata); mov.put(MOVMAG_DATAREG,_dadata);
mov.read(); mov.read();
mov.prev(); mov.prev();
if (!mov.eof() || mov.get("NUMREGST")!=_reg_giorn->last_numreg()) if (!mov.eof() || mov.get(MOVMAG_NUMREGST)!=_reg_giorn->last_numreg())
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
@ -454,8 +525,8 @@ TGiornalemag::~TGiornalemag()
} }
// dichiarazioni degli static // dichiarazioni degli static
TDate TGiornalemag::dadata; TDate TGiornalemag::_dadata;
TDate TGiornalemag::adata; TDate TGiornalemag::_adata;
int TGiornalemag::freq_stampa; int TGiornalemag::freq_stampa;
bool TGiornalemag::ragg_mag; bool TGiornalemag::ragg_mag;
bool TGiornalemag::stampa_def; bool TGiornalemag::stampa_def;
@ -467,6 +538,7 @@ int TGiornalemag::livello_giac;
TCursor * TGiornalemag::cur; TCursor * TGiornalemag::cur;
TGiornalemag * TGiornalemag::giofrm; TGiornalemag * TGiornalemag::giofrm;
TAssoc_array TGiornalemag::_cod_magazzini; TAssoc_array TGiornalemag::_cod_magazzini;
TAssoc_array TGiornalemag::_cau_magazzino;
int TGiornalemag::_annoes; int TGiornalemag::_annoes;
// STAMPA giornale // STAMPA giornale
@ -476,7 +548,6 @@ class TStampa_giornalemag : public TSkeleton_application
TGiornalemag * _giorn_mag; // to be moved into TPrint_application TGiornalemag * _giorn_mag; // to be moved into TPrint_application
TCursor * _cur; TCursor * _cur;
static bool livgiac_handler(TMask_field &, KEY);
protected: protected:
virtual bool create(); virtual bool create();
virtual bool destroy(); virtual bool destroy();

View File

@ -1,8 +1,6 @@
#include "mg4300.h" #include "mg4300.h"
USE LF_RMOVMAG BY CRONO_FIELD FISC_FIELD USE LF_RMOVMAG BY CRONO_FIELD FISC_FIELD
JOIN LF_MOVMAG INTO NUMREG==NUMREG JOIN LF_MOVMAG INTO NUMREG==NUMREG
JOIN %CAU TO LF_MOVMAG ALIAS ALIAS_CAUSALI INTO CODTAB==CODCAUS
JOIN %CAU TO LF_RMOVMAG ALIAS ALIAS_CAUSALIR INTO CODTAB==CAUS
JOIN LF_ANAMAG TO LF_RMOVMAG INTO CODART==CODART JOIN LF_ANAMAG TO LF_RMOVMAG INTO CODART==CODART
JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART
JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS ALIAS_UMRMOV INTO CODART==CODART UM==UM JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS ALIAS_UMRMOV INTO CODART==CODART UM==UM
@ -112,8 +110,8 @@ SECTION BODY ODD 2
BEGIN BEGIN
PROMPT 10 1 "" PROMPT 10 1 ""
MESSAGE COPY,FF_INFOCAUS MESSAGE COPY,FF_INFOCAUS
FIELD ALIAS_CAUSALIR@->CODTAB FIELD CAUS
FIELD ALIAS_CAUSALI@->CODTAB FIELD LF_MOVMAG->CODCAUS
END END
STRINGA 102 12 STRINGA 102 12
BEGIN BEGIN

View File

@ -23,8 +23,6 @@
#define G_DESART 3 #define G_DESART 3
#define G_PARAMVALORI 4 #define G_PARAMVALORI 4
#define ALIAS_CAUSALI 500
#define ALIAS_CAUSALIR 501
#define ALIAS_UMRMOV 502 #define ALIAS_UMRMOV 502
#define FF_CODTOT 601 #define FF_CODTOT 601

View File

@ -147,6 +147,7 @@ protected:
void reset_anno_mag () { set_anno_mag();} void reset_anno_mag () { set_anno_mag();}
void reset_anno_sto () { set_anno_sto();} void reset_anno_sto () { set_anno_sto();}
bool is_last_esercizio(const char* annoes) const; bool is_last_esercizio(const char* annoes) const;
bool is_deletable(const TRectype& mag) const;
void copia_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag); void copia_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag);
void add_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const real & qta, const real & prz); void add_storico(TRecord_array& nrstorico, const char * annoes,const char * codmag, const real & qta, const real & prz);

View File

@ -568,31 +568,58 @@ bool TArticolo_giacenza::is_last_esercizio(const char* annoes) const
return yes; return yes;
} }
const char* const zero_fields[] =
{
MAG_GIAC, MAG_PRODFIN, MAG_INCL, MAG_ACL, MAG_NLABEL,
MAG_RIM, MAG_VALRIM, MAG_ACQ, MAG_VALACQ, MAG_ENT, MAG_VALENT,
MAG_VEN, MAG_VALVEN, MAG_USC, MAG_VALUSC, MAG_ORDF, MAG_VALORDF,
MAG_ORDC, MAG_VALORDC, MAG_SCARTI, MAG_VALSCARTI, MAG_PRODCOMP,
"USER1", "USERVAL1", "USER2", "USERVAL2", "USER3", "USERVAL3",
"USER4", "USERVAL4", "USER5", "USERVAL5", "USER6", "USERVAL6",
NULL
};
const char* const protected_fields[] =
{
MAG_UBICAZ, MAG_LIVRIOR, MAG_SCORTAMIN, MAG_LOTTORIOR, MAG_LOTTOIRIOR, MAG_GIORNIRIOR, NULL
};
bool TArticolo_giacenza::is_deletable(const TRectype& mag) const
{
int i;
for (i = 0; protected_fields[i]; i++)
{
const TString& val = mag.get(protected_fields[i]);
if (val.not_empty() && !real::is_null(val))
return false;
}
for (i = 0; zero_fields[i]; i++)
{
const TString& val = mag.get(zero_fields[i]);
if (val.not_empty() && !real::is_null(val))
return false;
}
return true;
}
bool TArticolo_giacenza::azzera_saldi(const char* cod_es, bool save_to_disk) bool TArticolo_giacenza::azzera_saldi(const char* cod_es, bool save_to_disk)
{ {
TRecord_array& rec_arr = TArticolo_giacenza::mag(cod_es); TRecord_array& rec_arr = TArticolo_giacenza::mag(cod_es);
const int last = rec_arr.last_row(); const int last = rec_arr.last_row();
for (int r = last;r > 0 ; r = rec_arr.pred_row(r)) // Scorre le righe for (int r = last; r > 0; r = rec_arr.pred_row(r)) // Scorre le righe
{ {
TRectype& mag = rec_arr[r]; TRectype& mag = rec_arr[r];
for (int i = 0; zero_fields[i]; i++)
mag.put(MAG_GIAC,0); mag.zero(zero_fields[i]);
mag.put(MAG_RIM,0);mag.put(MAG_VALRIM,0); if (is_deletable(mag))
mag.put(MAG_ACQ,0);mag.put(MAG_VALACQ,0); rec_arr.destroy_row(r, TRUE);
mag.put(MAG_ENT,0);mag.put(MAG_VALENT,0);
mag.put(MAG_VEN,0);mag.put(MAG_VALVEN,0);
mag.put(MAG_USC,0);mag.put(MAG_VALUSC,0);
mag.put(MAG_ORDF,0);mag.put(MAG_VALORDF,0);
mag.put(MAG_ORDC,0);mag.put(MAG_VALORDC,0);
mag.put(MAG_SCARTI,0);mag.put(MAG_VALSCARTI,0);
mag.put(MAG_PRODCOMP,0);
mag.put(MAG_PRODFIN,0);
mag.put(MAG_INCL,0);
mag.put(MAG_ACL,0);
mag.put(MAG_NLABEL,0);
} }
return save_to_disk ? (rec_arr.write(TRUE) == NOERR) : TRUE; bool ok = TRUE;
if (save_to_disk)
ok = rec_arr.write(TRUE) == NOERR;
return ok;
} }
bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, const TTipo_valorizz tipo, bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, const TTipo_valorizz tipo,
@ -602,7 +629,7 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co
TRecord_array& rec_arr = TArticolo_giacenza::mag(oldes); TRecord_array& rec_arr = TArticolo_giacenza::mag(oldes);
const int last = rec_arr.last_row(); const int last = rec_arr.last_row();
real rim, val, giac, inpf, proc, icl, acl; real rim, val, giac, inpf, proc, icl, acl;
TCurrency currency(ZERO, "_FIRM"); TCurrency currency(ZERO);
rec_arr.renum_key(MAG_ANNOES, codes); // Rinumera rec_arr.renum_key(MAG_ANNOES, codes); // Rinumera
for (int r = last;r > 0 ; r = rec_arr.pred_row(r)) // Scorre le righe for (int r = last;r > 0 ; r = rec_arr.pred_row(r)) // Scorre le righe
@ -681,6 +708,9 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co
rec.zero(MAG_ORDF); rec.zero(MAG_VALORDF); rec.zero(MAG_ORDF); rec.zero(MAG_VALORDF);
rec.zero(MAG_ORDC); rec.zero(MAG_VALORDC); rec.zero(MAG_ORDC); rec.zero(MAG_VALORDC);
} }
if (is_deletable(rec))
rec_arr.destroy_row(r, TRUE);
} }
// Per non perdere le modifiche in memoria, al fine di avere i saldi riportati correttamente // Per non perdere le modifiche in memoria, al fine di avere i saldi riportati correttamente
@ -688,11 +718,12 @@ bool TArticolo_giacenza::riporta_saldi(const char * oldes, const char* newes, co
// dell'esercizio newes // dell'esercizio newes
if (!save_to_disk) if (!save_to_disk)
{ {
TRecord_array copia(rec_arr); const TRecord_array copia(rec_arr);
TRecord_array& nuovo = TArticolo_giacenza::mag(codes);
if (copia.rows() > 0) if (copia.rows() > 0)
{
TRecord_array& nuovo = TArticolo_giacenza::mag(codes);
nuovo = copia; nuovo = copia;
}
else else
azzera_saldi(codes, FALSE); azzera_saldi(codes, FALSE);
} }