Corretta gestione form per stamap ordini (mischiava Valore con Residuo)
git-svn-id: svn://10.65.10.50/branches/R_10_00@23007 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
30fb95bbaf
commit
b4795aed72
@ -309,6 +309,32 @@ void TStampa_ordini::add_tiporiga(TString& cond, const char tipo)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void append_range_filter(TString& filter, int file, const char* field, long from, long to)
|
||||||
|
{
|
||||||
|
if (from > 0 || to > 0)
|
||||||
|
{
|
||||||
|
filter << "&&(BETWEEN(";
|
||||||
|
if (file > 0) filter << file << "->";
|
||||||
|
filter << field << ',' << from << ',' << to << "))";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void append_range_filter(TString& filter, int file, const char* field, const TDate& from, const TDate& to)
|
||||||
|
{
|
||||||
|
if (from.ok() || to.ok())
|
||||||
|
append_range_filter(filter, file, field, from.date2ansi(), to.date2ansi());
|
||||||
|
}
|
||||||
|
|
||||||
|
static void append_range_filter(TString& filter, int file, const char* field, const TString& from, const TString& to)
|
||||||
|
{
|
||||||
|
if (from.full() || to.full())
|
||||||
|
{
|
||||||
|
filter << "&&(BETWEEN(";
|
||||||
|
if (file > 0) filter << file << "->";
|
||||||
|
filter << field << ",\"" << from << "\",\"" << to << "\"))";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void TStampa_ordini::filter_for_number()
|
void TStampa_ordini::filter_for_number()
|
||||||
{
|
{
|
||||||
CHECK(_frm, "Form non valido");
|
CHECK(_frm, "Form non valido");
|
||||||
@ -383,6 +409,7 @@ void TStampa_ordini::filter_for_number()
|
|||||||
{
|
{
|
||||||
// In caso di dettaglio per righe non va settato il filtro per dataconsegnain quanto
|
// In caso di dettaglio per righe non va settato il filtro per dataconsegnain quanto
|
||||||
// già impostato sulla sottosezione (vedi sotto)
|
// già impostato sulla sottosezione (vedi sotto)
|
||||||
|
/*
|
||||||
if (_from_cons.ok())
|
if (_from_cons.ok())
|
||||||
{
|
{
|
||||||
filter_expr << "&&";
|
filter_expr << "&&";
|
||||||
@ -397,6 +424,8 @@ void TStampa_ordini::filter_for_number()
|
|||||||
(const char*)_to_cons.string(ANSI));
|
(const char*)_to_cons.string(ANSI));
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, 0, DOC_DATACONS, _from_cons, _to_cons);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter_expr.starts_with("&&"))
|
if (filter_expr.starts_with("&&"))
|
||||||
@ -459,6 +488,7 @@ void TStampa_ordini::filter_for_number()
|
|||||||
cond << s;
|
cond << s;
|
||||||
|
|
||||||
// Setta i range per la data di consegna
|
// Setta i range per la data di consegna
|
||||||
|
/*
|
||||||
if (_from_cons.ok())
|
if (_from_cons.ok())
|
||||||
{
|
{
|
||||||
if (cond.not_empty())
|
if (cond.not_empty())
|
||||||
@ -475,8 +505,11 @@ void TStampa_ordini::filter_for_number()
|
|||||||
LF_RIGHEDOC, (const char*)_to_cons.string(ANSI));
|
LF_RIGHEDOC, (const char*)_to_cons.string(ANSI));
|
||||||
cond << s;
|
cond << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(cond, LF_RIGHEDOC, RDOC_DATACONS, _from_cons, _to_cons);
|
||||||
|
|
||||||
// Setta i range per il codice magazzino
|
// Setta i range per il codice magazzino
|
||||||
|
/*
|
||||||
if (_from_mag.not_empty())
|
if (_from_mag.not_empty())
|
||||||
{
|
{
|
||||||
if (cond.not_empty())
|
if (cond.not_empty())
|
||||||
@ -493,8 +526,11 @@ void TStampa_ordini::filter_for_number()
|
|||||||
LF_RIGHEDOC, (const char*)_to_mag);
|
LF_RIGHEDOC, (const char*)_to_mag);
|
||||||
cond << s;
|
cond << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(cond, LF_RIGHEDOC, RDOC_CODMAG, _from_mag, _to_mag);
|
||||||
|
|
||||||
// Setta i range per il codice articolo
|
// Setta i range per il codice articolo
|
||||||
|
/*
|
||||||
if (_from_art.not_empty())
|
if (_from_art.not_empty())
|
||||||
{
|
{
|
||||||
if (cond.not_empty())
|
if (cond.not_empty())
|
||||||
@ -511,6 +547,8 @@ void TStampa_ordini::filter_for_number()
|
|||||||
LF_RIGHEDOC, (const char*)_to_art);
|
LF_RIGHEDOC, (const char*)_to_art);
|
||||||
cond << s;
|
cond << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(cond, LF_RIGHEDOC, RDOC_CODART, _from_art, _to_art);
|
||||||
|
|
||||||
s.format("&&(%d->CODART!=\"\")", LF_RIGHEDOC);
|
s.format("&&(%d->CODART!=\"\")", LF_RIGHEDOC);
|
||||||
cond << s;
|
cond << s;
|
||||||
@ -686,6 +724,7 @@ void TStampa_ordini::filter_for_clifo_agent()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Filtro sulla data ordine...
|
// Filtro sulla data ordine...
|
||||||
|
/*
|
||||||
if (_from_date.ok())
|
if (_from_date.ok())
|
||||||
{
|
{
|
||||||
s.format("&&(ANSI(%d->DATADOC)>=\"%s\")", LF_DOC,
|
s.format("&&(ANSI(%d->DATADOC)>=\"%s\")", LF_DOC,
|
||||||
@ -698,8 +737,11 @@ void TStampa_ordini::filter_for_clifo_agent()
|
|||||||
(const char*)_to_date.string(ANSI));
|
(const char*)_to_date.string(ANSI));
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, LF_DOC, DOC_DATADOC, _from_date, _to_date);
|
||||||
|
|
||||||
// Filtro sulla data consegna...
|
// Filtro sulla data consegna...
|
||||||
|
/*
|
||||||
if (_from_cons.ok())
|
if (_from_cons.ok())
|
||||||
{
|
{
|
||||||
s.format("&&(ANSI(DATACONS)>=\"%s\")",
|
s.format("&&(ANSI(DATACONS)>=\"%s\")",
|
||||||
@ -712,10 +754,13 @@ void TStampa_ordini::filter_for_clifo_agent()
|
|||||||
(const char*)_to_cons.string(ANSI));
|
(const char*)_to_cons.string(ANSI));
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, 0, DOC_DATACONS, _from_cons, _to_cons);
|
||||||
|
|
||||||
if (_detail_rows)
|
if (_detail_rows)
|
||||||
{
|
{
|
||||||
// Setta i range per il codice articolo
|
// Setta i range per il codice articolo
|
||||||
|
/*
|
||||||
if (_from_art.full())
|
if (_from_art.full())
|
||||||
{
|
{
|
||||||
s.format("&&(%d->CODART>=\"%s\")",
|
s.format("&&(%d->CODART>=\"%s\")",
|
||||||
@ -729,6 +774,9 @@ void TStampa_ordini::filter_for_clifo_agent()
|
|||||||
LF_RIGHEDOC, (const char*)_to_art);
|
LF_RIGHEDOC, (const char*)_to_art);
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, LF_RIGHEDOC, RDOC_CODART, _from_art, _to_art);
|
||||||
|
|
||||||
// Setta i range per i livelli di giacenza (da 1 a 4)
|
// Setta i range per i livelli di giacenza (da 1 a 4)
|
||||||
if (_detail_level > 0)
|
if (_detail_level > 0)
|
||||||
for (int lev=1, index=0; lev <= _detail_level; lev++)
|
for (int lev=1, index=0; lev <= _detail_level; lev++)
|
||||||
@ -999,18 +1047,22 @@ void TStampa_ordini::filter_for_articolo()
|
|||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
|
|
||||||
// Filtro su Cli/Fo
|
// Filtro su Cli/Fo
|
||||||
|
/*
|
||||||
if (_from_cf > 0L)
|
if (_from_cf > 0L)
|
||||||
{
|
{
|
||||||
s.format("&&(STR(NUM(%d->CODCF)>=%ld))", LF_DOC, _from_cf);
|
s.format("&&(STR(NUM(%d->CODCF)>=%ld))", LF_DOC, _from_cf);
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_to_cf > 0L)
|
if (_to_cf > 0L)
|
||||||
{
|
{
|
||||||
s.format("&&(STR(NUM(%d->CODCF)<=%ld))", LF_DOC, _to_cf);
|
s.format("&&(STR(NUM(%d->CODCF)<=%ld))", LF_DOC, _to_cf);
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, LF_DOC, DOC_CODCF, _from_cf, _to_cf);
|
||||||
|
|
||||||
// Filtro sulla data ordine...
|
// Filtro sulla data ordine...
|
||||||
|
/*
|
||||||
if (_from_date.ok())
|
if (_from_date.ok())
|
||||||
{
|
{
|
||||||
s.format("&&(ANSI(%d->DATADOC)>=\"%s\")", LF_DOC,
|
s.format("&&(ANSI(%d->DATADOC)>=\"%s\")", LF_DOC,
|
||||||
@ -1023,8 +1075,11 @@ void TStampa_ordini::filter_for_articolo()
|
|||||||
(const char*)_to_date.string(ANSI));
|
(const char*)_to_date.string(ANSI));
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, LF_DOC, DOC_DATADOC, _from_date, _to_date);
|
||||||
|
|
||||||
// Filtro sulla data consegna...
|
// Filtro sulla data consegna...
|
||||||
|
/*
|
||||||
if (_from_cons.ok())
|
if (_from_cons.ok())
|
||||||
{
|
{
|
||||||
s.format("&&(ANSI(DATACONS)>=\"%s\")",
|
s.format("&&(ANSI(DATACONS)>=\"%s\")",
|
||||||
@ -1037,6 +1092,8 @@ void TStampa_ordini::filter_for_articolo()
|
|||||||
(const char*)_to_cons.string(ANSI));
|
(const char*)_to_cons.string(ANSI));
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, 0, DOC_DATACONS, _from_cons, _to_cons);
|
||||||
|
|
||||||
// Setta i range per i livelli di giacenza (da 1 a 4)
|
// Setta i range per i livelli di giacenza (da 1 a 4)
|
||||||
if (_detail_level > 0)
|
if (_detail_level > 0)
|
||||||
@ -1062,6 +1119,7 @@ void TStampa_ordini::filter_for_articolo()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Setta i range per il codice magazzino (deposito incluso)
|
// Setta i range per il codice magazzino (deposito incluso)
|
||||||
|
/*
|
||||||
if (_from_mag.not_empty())
|
if (_from_mag.not_empty())
|
||||||
{
|
{
|
||||||
s.format("&&(%d->CODMAG>=\"%s\")",
|
s.format("&&(%d->CODMAG>=\"%s\")",
|
||||||
@ -1074,6 +1132,8 @@ void TStampa_ordini::filter_for_articolo()
|
|||||||
LF_RIGHEDOC, (const char*)_to_mag);
|
LF_RIGHEDOC, (const char*)_to_mag);
|
||||||
filter_expr << s;
|
filter_expr << s;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
append_range_filter(filter_expr, LF_RIGHEDOC, RDOC_CODMAG, _from_mag, _to_mag);
|
||||||
|
|
||||||
if (_TEA_rord > ' ')
|
if (_TEA_rord > ' ')
|
||||||
{
|
{
|
||||||
|
@ -119,7 +119,8 @@ BEGIN
|
|||||||
SPECIAL STRINGA FINCATURA "XX" "Fincatura sinistra e destra"
|
SPECIAL STRINGA FINCATURA "XX" "Fincatura sinistra e destra"
|
||||||
KEY "Codice Valuta"
|
KEY "Codice Valuta"
|
||||||
PROMPT 7 1 ""
|
PROMPT 7 1 ""
|
||||||
FIELD CODVAL
|
//FIELD CODVAL
|
||||||
|
MESSAGE _ORDINE,CODVAL
|
||||||
END
|
END
|
||||||
|
|
||||||
DATA BODY_COL_DATACONS 10
|
DATA BODY_COL_DATACONS 10
|
||||||
|
@ -338,7 +338,7 @@ void TStampa_dettaglio_articoli::main_loop()
|
|||||||
int or1200(int argc, char** argv)
|
int or1200(int argc, char** argv)
|
||||||
{
|
{
|
||||||
TStampa_dettaglio_articoli a;
|
TStampa_dettaglio_articoli a;
|
||||||
a.run(argc,argv,TR("Stampa disponibilita' articoli"));
|
a.run(argc,argv,TR("Stampa disponibilità articoli"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@ BEGIN
|
|||||||
MESSAGE _PAGENO
|
MESSAGE _PAGENO
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMERO 4 40
|
STRINGA 4 40
|
||||||
BEGIN
|
BEGIN
|
||||||
KEY "Intestazione stampa"
|
KEY "Intestazione stampa"
|
||||||
PROMPT 60 2 "Stampa dettaglio disponibilita' articoli"
|
PROMPT 60 2 "Stampa dettaglio disponibilità articoli"
|
||||||
END
|
END
|
||||||
|
|
||||||
END //HEADER
|
END //HEADER
|
||||||
|
@ -4,7 +4,7 @@ TOOLBAR "topbar" 0 0 0 2
|
|||||||
#include <printbar.h>
|
#include <printbar.h>
|
||||||
ENDPAGE
|
ENDPAGE
|
||||||
|
|
||||||
PAGE "Disponibilita' articoli" 0 0 0 0
|
PAGE "Disponibilità articoli" 0 0 0 0
|
||||||
|
|
||||||
GROUPBOX DLG_NULL 41 7
|
GROUPBOX DLG_NULL 41 7
|
||||||
BEGIN
|
BEGIN
|
||||||
|
341
or/orlib01.cpp
341
or/orlib01.cpp
@ -173,187 +173,196 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
|
|||||||
|
|
||||||
cf.set(qt.string());
|
cf.set(qt.string());
|
||||||
}
|
}
|
||||||
|
} else
|
||||||
|
if (action == "CODVAL") // Comandi per stampa riepilogo per valuta
|
||||||
|
{
|
||||||
|
const TString& codval = doc.get(DOC_CODVAL);
|
||||||
|
if (is_firm_value(codval))
|
||||||
|
cf.set("");
|
||||||
|
else
|
||||||
|
cf.set(codval);
|
||||||
|
} else
|
||||||
|
if (action == "VALTABLE") // Comandi per stampa riepilogo per valuta
|
||||||
|
{
|
||||||
|
TString subcommand(s.get(2));
|
||||||
|
if (subcommand == "RESET")
|
||||||
|
{
|
||||||
|
_totvaluta.destroy();
|
||||||
|
cf.find_field("TOTVAL1").disable();
|
||||||
|
cf.find_field("TOTVAL2").disable();
|
||||||
|
cf.find_field("TOTVAL3").disable();
|
||||||
|
cf.find_field("TOTVAL4").disable();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const int valute = _totvaluta.items();
|
||||||
|
TString4 codval = doc.get(DOC_CODVAL);
|
||||||
|
if (is_firm_value(codval)) codval.cut(0);
|
||||||
|
|
||||||
|
const bool is_key = _totvaluta.is_key(codval);
|
||||||
|
const bool is_new = !is_key && valute < 4;
|
||||||
|
|
||||||
|
if (is_new) // Aggiunge l'elemento se non c'e'
|
||||||
|
_totvaluta.add(codval,(_TTotale_valuta*)new _TTotale_valuta,is_key);
|
||||||
|
// Controlla/stampa al massimo 4 valute
|
||||||
|
if (is_key || is_new)
|
||||||
|
{
|
||||||
|
_TTotale_valuta& tv = (_TTotale_valuta&)_totvaluta[codval];
|
||||||
|
const bool is_valord = subcommand == "VALORD";
|
||||||
|
real& r = is_valord ? tv.totord() : tv.totres();
|
||||||
|
TString s_id;
|
||||||
|
int i_id;
|
||||||
|
|
||||||
|
// Abilita la sezione corrispondente e setta i valori all'interno
|
||||||
|
if (!is_key)
|
||||||
|
{
|
||||||
|
TString16 sec_name = "TOTVAL";
|
||||||
|
sec_name << valute+1;
|
||||||
|
tv.secnum() = valute+1;
|
||||||
|
cf.find_field(sec_name).enable();
|
||||||
|
// Setta anche il codice valuta
|
||||||
|
i_id = BODY_CODVAL + valute*10;
|
||||||
|
s_id.format("%d",i_id);
|
||||||
|
cf.find_field(s_id).set(codval);
|
||||||
|
if (valute == 0)
|
||||||
|
{
|
||||||
|
i_id--;
|
||||||
|
s_id.format("%d",i_id);
|
||||||
|
cf.find_field(s_id).set("@bTotali");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const int sn = tv.secnum();
|
||||||
|
i_id = is_valord ? BODY_TOTVALORD : BODY_TOTVALRES;
|
||||||
|
|
||||||
|
i_id += (sn-1)*10;
|
||||||
|
s_id.format("%d",i_id);
|
||||||
|
r += ((real) cf.get()); // Somma il valore corrente
|
||||||
|
cf.find_field(s_id).set(r.string());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (action == "VALTABLE") // Comandi per stampa riepilogo per valuta
|
if (action == "CALCDISP") // messaggi per calcolo disponibilita'
|
||||||
|
{
|
||||||
|
TString command(s.get(2));
|
||||||
|
if (command == "RESET") // resetta la tabella
|
||||||
{
|
{
|
||||||
TString subcommand(s.get(2));
|
_totdisp.destroy();
|
||||||
if (subcommand == "RESET")
|
const real rz = ZERO;
|
||||||
|
const int items = _date_array->items();
|
||||||
|
for (int i = 0; i<items; i++)
|
||||||
|
_totdisp.add(rz);
|
||||||
|
// Legge anche una volta per tutte il TArticolo_giacenza (uargh uargh)
|
||||||
|
if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
|
||||||
{
|
{
|
||||||
_totvaluta.destroy();
|
_codmag = rdoc.get(RDOC_CODMAG);
|
||||||
cf.find_field("TOTVAL1").disable();
|
_livello = rdoc.get(RDOC_LIVELLO);
|
||||||
cf.find_field("TOTVAL2").disable();
|
}
|
||||||
cf.find_field("TOTVAL3").disable();
|
else
|
||||||
cf.find_field("TOTVAL4").disable();
|
cf.set("Errore in lettura articolo");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (command == "CALC") // Effettua il calcolo per questa riga articolo,
|
||||||
|
//cumulando nell'array le quantita', espresse sempre in UM principale
|
||||||
|
{
|
||||||
|
const bool is_ordine_cliente = doc.get(DOC_TIPOCF)[0] == 'C';
|
||||||
|
const TString16 causmag(doc.get(DOC_CAUSMAG));
|
||||||
|
const TString16 um(rdoc.get(RDOC_UMQTA));
|
||||||
|
const TDate datacons(rdoc.get_date(RDOC_DATACONS));
|
||||||
|
int segno = is_ordine_cliente ? -1 : +1; // default
|
||||||
|
if (causmag.not_empty()) // se la causale esiste consulta il segno
|
||||||
|
{
|
||||||
|
TCausale_magazzino cm(causmag);
|
||||||
|
segno *= cm.sgn(is_ordine_cliente ? s_ordc : s_ordf);
|
||||||
|
}
|
||||||
|
// Reperisce fattore di conversione per UM principale,
|
||||||
|
// la quantita residua
|
||||||
|
real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document
|
||||||
|
qtares = _art_giac->convert_to_um(qtares, "", um, true);
|
||||||
|
qtares *= segno; // mette a posto il segno...
|
||||||
|
// Trova il periodo giusto
|
||||||
|
const int index = find_period(datacons);
|
||||||
|
if (index >= _totdisp.items())
|
||||||
|
_totdisp.add(ZERO, index); // Added by Guy! Should never happen :-)
|
||||||
|
real& rv = (real&) _totdisp[index];
|
||||||
|
rv += qtares;
|
||||||
|
|
||||||
|
const TDate datascimp(doc.get_date("DATASCIMP"));
|
||||||
|
|
||||||
|
if (datascimp.ok())
|
||||||
|
{
|
||||||
|
const int last_index = find_period(datascimp);
|
||||||
|
if (last_index >= 0)
|
||||||
|
{
|
||||||
|
real& rv = (real&) _totdisp[last_index];
|
||||||
|
rv -= qtares;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (command == "PRNUM") // Stampa l'unita' di misura principale
|
||||||
|
{
|
||||||
|
const TRecord_array& um = _art_giac->um();
|
||||||
|
if (um.rows() > 0) // Controlla che ci sia almeno una unita' di misura
|
||||||
|
cf.set(um.row(1).get("UM")); // UM principale
|
||||||
|
else
|
||||||
|
cf.set("");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const int valute = _totvaluta.items();
|
const int period = s.get_int(3);
|
||||||
TString codval(doc.get(DOC_CODVAL));
|
//const int items = _date_array->items();
|
||||||
const bool is_key = _totvaluta.is_key(codval);
|
TString16 annoes;
|
||||||
const bool is_new = !is_key && valute < 4;
|
real giacenza, scorta_min;
|
||||||
|
|
||||||
if (is_new) // Aggiunge l'elemento se non c'e'
|
TEsercizi_contabili esc;
|
||||||
_totvaluta.add(codval,(_TTotale_valuta*)new _TTotale_valuta,is_key);
|
annoes << esc.date2esc(doc.get_date(DOC_DATADOC));
|
||||||
// Controlla/stampa al massimo 4 valute
|
//TString16 codmag(rdoc.get(RDOC_CODMAG));
|
||||||
if (is_key || is_new)
|
//TString16 livello(rdoc.get(RDOC_LIVELLO));
|
||||||
|
const int codmag_len = (_detail_dep || _detail_mag) ? _codmag.len() : 0;
|
||||||
|
const int livello_len = _level > 0 ? _livello.len() : 0;
|
||||||
|
//if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
|
||||||
{
|
{
|
||||||
_TTotale_valuta& tv = (_TTotale_valuta&)_totvaluta[codval];
|
// Serve l'anno esercizio del magazzino...
|
||||||
const bool is_valord = subcommand == "VALORD";
|
|
||||||
real& r = is_valord ? tv.totord() : tv.totres();
|
|
||||||
TString s_id;
|
|
||||||
int i_id;
|
|
||||||
|
|
||||||
// Abilita la sezione corrispondente e setta i valori all'interno
|
|
||||||
if (!is_key)
|
|
||||||
{
|
|
||||||
TString16 sec_name = "TOTVAL";
|
|
||||||
sec_name << valute+1;
|
|
||||||
tv.secnum() = valute+1;
|
|
||||||
cf.find_field(sec_name).enable();
|
|
||||||
// Setta anche il codice valuta
|
|
||||||
i_id = BODY_CODVAL + valute*10;
|
|
||||||
s_id.format("%d",i_id);
|
|
||||||
cf.find_field(s_id).set(codval);
|
|
||||||
if (valute == 0)
|
|
||||||
{
|
|
||||||
i_id--;
|
|
||||||
s_id.format("%d",i_id);
|
|
||||||
cf.find_field(s_id).set("@bTotali");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const int sn = tv.secnum();
|
|
||||||
i_id = is_valord ? BODY_TOTVALORD : BODY_TOTVALRES;
|
|
||||||
|
|
||||||
i_id += (sn-1)*10;
|
|
||||||
s_id.format("%d",i_id);
|
|
||||||
r += ((real) cf.get()); // Somma il valore corrente
|
|
||||||
cf.find_field(s_id).set(r.string());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (action == "CALCDISP") // messaggi per calcolo disponibilita'
|
|
||||||
{
|
|
||||||
TString command(s.get(2));
|
|
||||||
if (command == "RESET") // resetta la tabella
|
|
||||||
{
|
|
||||||
_totdisp.destroy();
|
|
||||||
const real rz = ZERO;
|
|
||||||
const int items = _date_array->items();
|
|
||||||
for (int i = 0; i<items; i++)
|
|
||||||
_totdisp.add(rz);
|
|
||||||
// Legge anche una volta per tutte il TArticolo_giacenza (uargh uargh)
|
|
||||||
if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
|
|
||||||
{
|
|
||||||
_codmag = rdoc.get(RDOC_CODMAG);
|
|
||||||
_livello = rdoc.get(RDOC_LIVELLO);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cf.set("Errore in lettura articolo");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (command == "CALC") // Effettua il calcolo per questa riga articolo,
|
|
||||||
//cumulando nell'array le quantita', espresse sempre in UM principale
|
|
||||||
{
|
|
||||||
const bool is_ordine_cliente = doc.get(DOC_TIPOCF)[0] == 'C';
|
|
||||||
const TString16 causmag(doc.get(DOC_CAUSMAG));
|
|
||||||
const TString16 um(rdoc.get(RDOC_UMQTA));
|
|
||||||
const TDate datacons(rdoc.get_date(RDOC_DATACONS));
|
|
||||||
int segno = is_ordine_cliente ? -1 : +1; // default
|
|
||||||
if (causmag.not_empty()) // se la causale esiste consulta il segno
|
|
||||||
{
|
|
||||||
TCausale_magazzino cm(causmag);
|
|
||||||
segno *= cm.sgn(is_ordine_cliente ? s_ordc : s_ordf);
|
|
||||||
}
|
|
||||||
// Reperisce fattore di conversione per UM principale,
|
|
||||||
// la quantita residua
|
|
||||||
real qtares = rdoc.qtaresidua(); // ZIO PERA! ag völ la riga dal document
|
|
||||||
qtares = _art_giac->convert_to_um(qtares, "", um, true);
|
|
||||||
qtares *= segno; // mette a posto il segno...
|
|
||||||
// Trova il periodo giusto
|
|
||||||
const int index = find_period(datacons);
|
|
||||||
if (index >= _totdisp.items())
|
|
||||||
_totdisp.add(ZERO, index); // Added by Guy! Should never happen :-)
|
|
||||||
real& rv = (real&) _totdisp[index];
|
|
||||||
rv += qtares;
|
|
||||||
|
|
||||||
const TDate datascimp(doc.get_date("DATASCIMP"));
|
|
||||||
|
|
||||||
if (datascimp.ok())
|
|
||||||
{
|
|
||||||
const int last_index = find_period(datascimp);
|
|
||||||
if (last_index >= 0)
|
|
||||||
{
|
|
||||||
real& rv = (real&) _totdisp[last_index];
|
|
||||||
rv -= qtares;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (command == "PRNUM") // Stampa l'unita' di misura principale
|
|
||||||
{
|
|
||||||
const TRecord_array& um = _art_giac->um();
|
|
||||||
if (um.rows() > 0) // Controlla che ci sia almeno una unita' di misura
|
|
||||||
cf.set(um.row(1).get("UM")); // UM principale
|
|
||||||
else
|
|
||||||
cf.set("");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const int period = s.get_int(3);
|
|
||||||
//const int items = _date_array->items();
|
|
||||||
TString16 annoes;
|
|
||||||
real giacenza, scorta_min;
|
|
||||||
|
|
||||||
TEsercizi_contabili esc;
|
|
||||||
annoes << esc.date2esc(doc.get_date(DOC_DATADOC));
|
|
||||||
//TString16 codmag(rdoc.get(RDOC_CODMAG));
|
|
||||||
//TString16 livello(rdoc.get(RDOC_LIVELLO));
|
|
||||||
const int codmag_len = (_detail_dep || _detail_mag) ? _codmag.len() : 0;
|
|
||||||
const int livello_len = _level > 0 ? _livello.len() : 0;
|
|
||||||
//if (_art_giac->read(rdoc.get(RDOC_CODART)) == NOERR)
|
|
||||||
{
|
|
||||||
// Serve l'anno esercizio del magazzino...
|
|
||||||
|
|
||||||
// Ciclo sulle giacenze di magazzino
|
// Ciclo sulle giacenze di magazzino
|
||||||
TRecord_array& mmgg = _art_giac->mag(annoes);
|
TRecord_array& mmgg = _art_giac->mag(annoes);
|
||||||
const int rows = mmgg.rows();
|
const int rows = mmgg.rows();
|
||||||
// Cumula raggruppando le giacenze per lo stesso mag/dep/liv.giac
|
// Cumula raggruppando le giacenze per lo stesso mag/dep/liv.giac
|
||||||
// Scurre alla ruvescia
|
// Scurre alla ruvescia
|
||||||
for (int i=mmgg.last_row();i>0;i--)
|
for (int i=mmgg.last_row();i>0;i--)
|
||||||
{
|
{
|
||||||
const TRectype& rec = mmgg.row(i); // gosh!?
|
const TRectype& rec = mmgg.row(i); // gosh!?
|
||||||
|
|
||||||
//checkka se trattasi di medesimo liv giac/mag/dep in caso sia stato spec. il dettaglio
|
//checkka se trattasi di medesimo liv giac/mag/dep in caso sia stato spec. il dettaglio
|
||||||
// altrimenti cumula el todo
|
// altrimenti cumula el todo
|
||||||
if (codmag_len == 0 || (rec.get(MAG_CODMAG).compare(_codmag, codmag_len) == 0))
|
if (codmag_len == 0 || (rec.get(MAG_CODMAG).compare(_codmag, codmag_len) == 0))
|
||||||
if (livello_len == 0 || (rec.get(MAG_LIVELLO).compare(_livello, livello_len) == 0))
|
if (livello_len == 0 || (rec.get(MAG_LIVELLO).compare(_livello, livello_len) == 0))
|
||||||
{
|
{
|
||||||
giacenza += _art_giac->giacenza_corretta(rec, _giac_eff, _val_comp);
|
giacenza += _art_giac->giacenza_corretta(rec, _giac_eff, _val_comp);
|
||||||
scorta_min = rec.get_real(MAG_SCORTAMIN);
|
scorta_min = rec.get_real(MAG_SCORTAMIN);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i< period/*items*/; i++)
|
}
|
||||||
giacenza += (real&)_totdisp[i];
|
for (int i = 0; i< period/*items*/; i++)
|
||||||
if (command == "PRNGIAC") // Stampa la giacenza prevista
|
giacenza += (real&)_totdisp[i];
|
||||||
|
if (command == "PRNGIAC") // Stampa la giacenza prevista
|
||||||
|
{
|
||||||
|
cf.set(giacenza.string());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (command == "PRNSOTT") // Stampa il sottoscorta
|
||||||
|
{
|
||||||
|
if (giacenza < scorta_min)
|
||||||
{
|
{
|
||||||
|
giacenza = scorta_min - giacenza;
|
||||||
cf.set(giacenza.string());
|
cf.set(giacenza.string());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (command == "PRNSOTT") // Stampa il sottoscorta
|
cf.set("");
|
||||||
{
|
}
|
||||||
if (giacenza < scorta_min)
|
// Ignore any other command
|
||||||
{
|
}
|
||||||
giacenza = scorta_min - giacenza;
|
|
||||||
cf.set(giacenza.string());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cf.set("");
|
|
||||||
}
|
|
||||||
// Ignore any other command
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (action == "PREZZONS")
|
if (action == "PREZZONS")
|
||||||
@ -402,7 +411,7 @@ bool TOrdine_form::validate(TForm_item &cf, TToken_string &s)
|
|||||||
} else
|
} else
|
||||||
if (action == "VALRES")
|
if (action == "VALRES")
|
||||||
{
|
{
|
||||||
cf.set(rdoc.valore(true, false, AUTO_DECIMALS).string());
|
cf.set(rdoc.valore(false, false, AUTO_DECIMALS).string()); // true -> false totale -> residuo 22-10-2014
|
||||||
} else
|
} else
|
||||||
if (action == "GIACENZA")
|
if (action == "GIACENZA")
|
||||||
{
|
{
|
||||||
|
@ -4,6 +4,6 @@ Picture = <or00>
|
|||||||
Module = 33
|
Module = 33
|
||||||
Flags = ""
|
Flags = ""
|
||||||
Item_01 = "Stampa ordini", "or1.exe -0","F"
|
Item_01 = "Stampa ordini", "or1.exe -0","F"
|
||||||
Item_02 = "Stampa disponibilita' articoli", "or1.exe -1","F"
|
Item_02 = "Stampa disponibilitŕ articoli", "or1.exe -1","F"
|
||||||
Item_03 = "Generazione ordini a fornitore", "or1.exe -3","F"
|
Item_03 = "Generazione ordini a fornitore", "or1.exe -3","F"
|
||||||
Item_04 = "Scarico e ripristino documenti", "ve5.exe -0","F"
|
Item_04 = "Scarico e ripristino documenti", "ve5.exe -0","F"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user