Patch level : xx.7.054

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
Riportata la versione 1.7 patch 054 aga sul main trunk


git-svn-id: svn://10.65.10.50/trunk@9659 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2001-05-02 13:40:49 +00:00
parent 657dd8b432
commit 12d9315082
189 changed files with 10325 additions and 2135 deletions

View File

@ -4,8 +4,6 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -28,8 +28,8 @@ void TLavorazione_tab::fill_sheet(TSheet_field & sheet)
row=cod_linea(j); row=cod_linea(j);
if (!row.blank()) if (!row.blank())
{ {
row.add(raw_numpers_linea(j) ,F_LNUMPERS-101); row.add(raw_numpers_linea(j), F_LNUMPERS-101);
row.add(raw_produttiv_linea(j).string() ,F_LPRODUTTIV-101); row.add(raw_produttiv_linea(j).string(), F_LPRODUTTIV-101);
sheet.check_row(righe); sheet.check_row(righe);
righe++; righe++;
} }
@ -91,8 +91,11 @@ protected:
virtual bool user_create(); virtual bool user_create();
virtual TString& get_mask_name(TString& name) const; virtual TString& get_mask_name(TString& name) const;
virtual TMask * set_mask(TMask * _m); virtual TMask * set_mask(TMask * _m);
virtual void ini2sheet(TConfig& ini, TSheet_field &sheet);
virtual void sheet2ini(TSheet_field &sheet,TConfig& ini);
public: public:
void rows2rel(const TMask& m); void rows2rel(const TMask& m);
}; };
@ -172,6 +175,54 @@ int TDistinta_tables::rewrite(const TMask& m)
return err; return err;
} }
void TDistinta_tables::ini2sheet(TConfig& ini, TSheet_field &sheet)
{
if (get_tabname() == "LAV")
{
TString8 para;
for (int i = 0; ; i++)
{
para.format("%d,%d", LF_TAB, i+1);
if (ini.set_paragraph(para))
{
TToken_string& row = sheet.row(i);
row.add(ini.get("CODLIN"), 0);
row.add(ini.get("CODIMP"), 2);
row.add(ini.get("LNUMPERS"), 3);
row.add(ini.get("LPRODUTTIV"), 4);
sheet.check_row(i);
}
else
break;
}
}
}
void TDistinta_tables::sheet2ini(TSheet_field& sheet,TConfig& ini)
{
if (get_tabname() == "LAV")
{
TString8 para;
FOR_EACH_SHEET_ROW(sheet, i, row)
{
para.format("%d,%d", LF_TAB, i+1);
ini.set_paragraph(para);
ini.set("CODLIN", row->get(0));
ini.set("CODIMP", row->get(2));
ini.set("LNUMPERS", row->get(3));
ini.set("LPRODUTTIV", row->get(4));
}
for ( ; ; i++)
{
para.format("%d,%d", LF_TAB, i+1);
if (ini.set_paragraph(para))
ini.remove_all();
else
break;
}
}
}
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// Main program // Main program
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -69,6 +69,10 @@ protected:
virtual int write(const TMask& m); virtual int write(const TMask& m);
virtual int rewrite(const TMask& m); virtual int rewrite(const TMask& m);
virtual bool remove(); virtual bool remove();
virtual void ini2sheet(TConfig& ini, TSheet_field &sheet);
virtual void sheet2ini(TSheet_field &sheet,TConfig& ini);
void load_memo(TMask& m, TToken_string& memo);
public: public:
TRelation & relation() {return *_therel;} TRelation & relation() {return *_therel;}
@ -555,24 +559,25 @@ void TDistinta_mask::sheetrighe_put(TSheet_field &fld_righe, int item)
} }
} }
void TDistinta_mask::load_um() void TDistinta_mask::load_um()
{ {
// ***************************** // *****************************
// LETTURA SHEET UNITA' DI MISURA // LETTURA SHEET UNITA' DI MISURA
char tree_type=_tree.get_type(get(F_CODICE));
TSheet_field &units= (TSheet_field &)field(F_UNITA); // prende lo sheet delle unità di misura TSheet_field &units= (TSheet_field &)field(F_UNITA); // prende lo sheet delle unità di misura
if (tree_type=='L') const char tree_type=_tree.get_type(get(F_CODICE));
if (!app().is_transaction())
{ {
units.destroy(); if (tree_type=='L')
} {
else units.destroy();
{ }
app().relation().lfile().put("CODDIST",get(F_CODICE)); else
units.record()->read(*units.putkey(app().relation())); {
units.autoload(app().relation()); app().relation().lfile().put("CODDIST",get(F_CODICE));
units.record()->read(*units.putkey(app().relation()));
units.autoload(app().relation());
}
} }
units.disable_cell(0, units.cid2index(FU_FC)); units.disable_cell(0, units.cid2index(FU_FC));
const bool virtuale=tree_type!='A' && tree_type !='L'; const bool virtuale=tree_type!='A' && tree_type !='L';
@ -1151,6 +1156,25 @@ TMask* TDistinta_app::get_mask(int mode)
void TDistinta_app::init_query_mode(TMask& m) void TDistinta_app::init_query_mode(TMask& m)
{ {
((TQuery_mask&)m).restart_tree(); ((TQuery_mask&)m).restart_tree();
set_search_field(F_CODICE);
}
void TDistinta_app::load_memo(TMask& m, TToken_string& memo)
{
TSheet_field& params = m.sfield(F_PARAMS);
params.destroy();
const int righe = memo.items();
for (int i = 0; i < righe; i++)
{
TToken_string& row = params.row(i);
memo.get(i, row);
int equal = row.find('=');
if (equal > 0)
row[equal] = SAFE_PIPE_CHR;
row.insert(format(" %c",SAFE_PIPE_CHR),0);
if (_tree.is_global(row.get(1)))
row[0]='G';
}
} }
int TDistinta_app::read(TMask& m) int TDistinta_app::read(TMask& m)
@ -1165,28 +1189,32 @@ int TDistinta_app::read(TMask& m)
sheet.check_row(nrig); sheet.check_row(nrig);
sheet.row(nrig).add(nrig+1, sheet.cid2index(F_SORT0)); sheet.row(nrig).add(nrig+1, sheet.cid2index(F_SORT0));
} }
TToken_string memo(1024, '\n'); TToken_string memo(1024, '\n');
memo = _therel->curr().get("PARAMETRI"); memo = _therel->curr().get("PARAMETRI");
const int righe = memo.items(); load_memo(m, memo);
TSheet_field& params = m.sfield(F_PARAMS);
params.destroy();
for (int i = 0; i < righe; i++)
{
TToken_string& row = params.row(i);
memo.get(i, row);
int equal = row.find('=');
if (equal > 0)
row[equal] = SAFE_PIPE_CHR;
row.insert(format(" %c",SAFE_PIPE_CHR),0);
if (_tree.is_global(row.get(1)))
row[0]='G';
}
} }
return err; return err;
} }
void TDistinta_app::ini2sheet(TConfig& ini, TSheet_field& s)
{
if (s.dlg() == F_PARAMS)
{
const TFixed_string fname("PARAMETRI");
TFieldref memof(fname, 0);
TToken_string memo(1024, '\n');
memo = memof.read(ini, "112");
memo.replace(SAFE_PIPE_CHR, '\n');
load_memo(s.mask(), memo);
}
else
{
TRelation_application::ini2sheet(ini, s);
}
}
bool TDistinta_app::parms2rel(const TMask& m) bool TDistinta_app::parms2rel(const TMask& m)
{ {
TToken_string memo(1024, '\n'); TToken_string memo(1024, '\n');
@ -1195,7 +1223,7 @@ bool TDistinta_app::parms2rel(const TMask& m)
FOR_EACH_SHEET_ROW(parms, r, row) FOR_EACH_SHEET_ROW(parms, r, row)
{ {
var = row->get(0); var = row->get(0);
const char typ = var[0]; const char typ = var[0];
var = row->get(); var = row->get();
if (!var.blank()) if (!var.blank())
{ {
@ -1222,6 +1250,7 @@ int TDistinta_app::write(const TMask& m)
if (err == NOERR) if (err == NOERR)
{ {
TSheet_field& f = m.sfield(F_UNITA); // prende lo sheet delle unità di misura TSheet_field& f = m.sfield(F_UNITA); // prende lo sheet delle unità di misura
f.record()->renum_key(UMART_CODART, m.get(F_CODICE));
err = f.record()->write(FALSE); err = f.record()->write(FALSE);
} }
return err; return err;
@ -1234,11 +1263,29 @@ int TDistinta_app::rewrite(const TMask& m)
if (err == NOERR) if (err == NOERR)
{ {
TSheet_field& f= m.sfield(F_UNITA); // prende lo sheet delle unità di misura TSheet_field& f= m.sfield(F_UNITA); // prende lo sheet delle unità di misura
f.record()->renum_key(UMART_CODART, m.get(F_CODICE));
err = f.record()->write(TRUE); err = f.record()->write(TRUE);
} }
return err; return err;
} }
void TDistinta_app::sheet2ini(TSheet_field& s, TConfig& ini)
{
if (s.dlg() == F_PARAMS)
{
parms2rel(s.mask());
const TFixed_string fname("PARAMETRI");
TFieldref memof(fname, LF_DIST);
TString memo = memof.read(_therel->curr());
memo.replace('\n', SAFE_PIPE_CHR);
memof.write(ini, "112", memo);
}
else
{
TRelation_application::sheet2ini(s, ini);
}
}
bool TDistinta_app::remove() bool TDistinta_app::remove()
{ {
bool ok = TRelation_application::remove(); bool ok = TRelation_application::remove();
@ -1263,7 +1310,6 @@ bool TDistinta_app::remove()
return ok; return ok;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// db0500 gestione distinte // db0500 gestione distinte
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////

View File

@ -154,7 +154,7 @@ END
STRING F_VAR_IMPIANTO 5 STRING F_VAR_IMPIANTO 5
BEGIN BEGIN
FLAGS "UF" FLAGS "U"
PROMPT 2 5 "Impianto " PROMPT 2 5 "Impianto "
USE IMP USE IMP
INPUT CODTAB F_VAR_IMPIANTO INPUT CODTAB F_VAR_IMPIANTO
@ -167,7 +167,7 @@ END
STRING F_VAR_LINEA 5 STRING F_VAR_LINEA 5
BEGIN BEGIN
FLAGS "UF" FLAGS "U"
PROMPT 22 5 "Linea " PROMPT 22 5 "Linea "
USE LNP USE LNP
INPUT CODTAB F_VAR_LINEA INPUT CODTAB F_VAR_LINEA
@ -176,7 +176,7 @@ BEGIN
DISPLAY "Impianto" S6 DISPLAY "Impianto" S6
OUPUT F_VAR_LINEA CODTAB OUPUT F_VAR_LINEA CODTAB
OUPUT F_VAR_IMPIANTO S6 OUPUT F_VAR_IMPIANTO S6
CHECKTYPE FORCED CHECKTYPE SEARCH
END END

View File

@ -3,7 +3,5 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -51,7 +51,9 @@ struct _ParmStruct
_vis_art, _vis_lav, _vis_vir, _vis_gho, _vis_art, _vis_lav, _vis_vir, _vis_gho,
_fabbisogno, _no_fabbis_fin, _no_zero_ord, _fabbisogno, _no_fabbis_fin, _no_zero_ord,
_val_magmb, _val_depmb, _newpage, _det_ord_for, _val_magmb, _val_depmb, _newpage, _det_ord_for,
_separate_dist, _separate_giac; _separate_dist, _separate_giac,
_add_orc, _add_orf, _add_prf, _add_prc, _add_acl, _add_incl,
_normal_disp;
char _liv_attenzione; char _liv_attenzione;
}; };
@ -505,23 +507,36 @@ void TArticolo_giacenza_static::calc_ordinato_fornitori(_ParmStruct* p, const ch
// ad ogni stampa // ad ogni stampa
// Toglie l'ordinato fornitori dalla disponibilita // Toglie l'ordinato fornitori dalla disponibilita
TString16 annoes(p->_anno_es); if (p->_add_orf)
TRecord_array & rmag = mag(annoes); {
for (int i = find_mag(annoes, codmag, livello); i > 0; TString16 annoes(p->_anno_es);
i = find_mag(annoes, codmag, livello, i)) TRecord_array & rmag = mag(annoes);
_disp -= rmag.row(i).get_real(MAG_ORDF); for (int i = find_mag(annoes, codmag, livello); i > 0;
i = find_mag(annoes, codmag, livello, i))
_disp -= rmag.row(i).get_real(MAG_ORDF);
TEsercizi_contabili ese;
const int prev = ese.pred(atoi(annoes)); // Controllo anche l'anno precedente
if (prev > 0)
{
TString16 oldannoes; oldannoes.format("%04d", prev);
TRecord_array & rmag = mag(oldannoes);
for (int i = find_mag(oldannoes, codmag, livello); i > 0;
i = find_mag(oldannoes, codmag, livello, i))
_disp -= rmag.row(i).get_real(MAG_ORDF);
}
}
// Rimuove eventuali elementi rimasti, anche se questo metodo viene effettivamente chiamato una sola // Rimuove eventuali elementi rimasti, anche se questo metodo viene effettivamente chiamato una sola
// volta per articolo. // volta per articolo.
_ordinato_fornitori.destroy(); _ordinato_fornitori.destroy();
// Azzera l'array... // Azzera l'array...
for (i=0; i <= p->_periods; i++) for (int i=0; i <= p->_periods; i++)
_ordinato_fornitori.add(new real); _ordinato_fornitori.add(new real);
//Scorre tutte le numerazioni //Scorre tutte le numerazioni
TString_array& a = p->_numerazioni; TString_array& a = p->_numerazioni;
for (i = a.last(); i >= 0; i--) for (i = a.last(); i >= 0; i--)
{ {
TToken_string& t = (TToken_string&) a[i]; TToken_string& t = (TToken_string&) a[i];
const int items = t.items(); const int items = t.items();
@ -535,13 +550,11 @@ void TArticolo_giacenza_static::calc_ordinato_fornitori(_ParmStruct* p, const ch
doc.put(DOC_PROVV, "D"); doc.put(DOC_PROVV, "D");
calcola_ordinato_documento(doc); calcola_ordinato_documento(doc);
if (::riporta_ordinato())
{ doc.put(DOC_CODNUM, t.get(0));
doc.put(DOC_CODNUM, t.get(0)); doc.put(DOC_ANNO, p->_year - 1);
doc.put(DOC_ANNO, p->_year - 1); doc.put(DOC_PROVV, "D");
doc.put(DOC_PROVV, "D"); calcola_ordinato_documento(doc);
calcola_ordinato_documento(doc);
}
} }
else // Se invece vi sono piu' tipi doc. per questa numerazione e' necessario considerare le testate doc. else // Se invece vi sono piu' tipi doc. per questa numerazione e' necessario considerare le testate doc.
if (items >= 3) if (items >= 3)
@ -569,32 +582,39 @@ void TArticolo_giacenza_static::calc_ordinato_fornitori(_ParmStruct* p, const ch
for (cur = 0L; cur.pos() < cur.items(); ++cur) for (cur = 0L; cur.pos() < cur.items(); ++cur)
// Per ogni documento scorre le sue righe // Per ogni documento scorre le sue righe
calcola_ordinato_documento(cur.curr()); calcola_ordinato_documento(cur.curr());
if (::riporta_ordinato()) from.zero();
{ from.put(DOC_CODNUM, t.get(0));
from.zero(); from.put(DOC_ANNO, p->_year - 1);
from.put(DOC_CODNUM, t.get(0)); from.put(DOC_PROVV, "D");
from.put(DOC_ANNO, p->_year - 1); to = from;
from.put(DOC_PROVV, "D"); cur.setregion(from, to);
to = from; for (cur = 0L; cur.pos() < cur.items(); ++cur)
cur.setregion(from, to);
for (cur = 0L; cur.pos() < cur.items(); ++cur)
// Per ogni documento scorre le sue righe // Per ogni documento scorre le sue righe
calcola_ordinato_documento(cur.curr()); calcola_ordinato_documento(cur.curr());
}
} }
} }
// Progressivizza gli importi // Progressivizza gli importi
for (i=2; i <= p->_periods ; i++) const int periods = p->_periods;
if (periods > 1)
{ {
real& rr = (real&)_ordinato_fornitori[i]; for (i=2; i <= periods ; i++)
rr += (real&)_ordinato_fornitori[i-1]; {
if (i==p->_periods) real& rr = (real&)_ordinato_fornitori[i];
{ rr += (real&)_ordinato_fornitori[i-1];
real& zz = (real&)_ordinato_fornitori[0]; // Totale... if (i== periods)
zz += rr; {
real& zz = (real&)_ordinato_fornitori[0]; // Totale...
zz += rr;
}
} }
} }
else
{
real& rr = (real&)_ordinato_fornitori[1];
real& zz = (real&)_ordinato_fornitori[0]; // Totale...
zz += rr;
}
} }
real& TArticolo_giacenza_static::static_disp(_ParmStruct* p, const char * codmag, const char * livello) real& TArticolo_giacenza_static::static_disp(_ParmStruct* p, const char * codmag, const char * livello)
@ -602,7 +622,47 @@ real& TArticolo_giacenza_static::static_disp(_ParmStruct* p, const char * codmag
if (!_calc) if (!_calc)
{ {
_calc =TRUE; _calc =TRUE;
_disp = disponibilita(p->_anno_es, codmag, livello); const char * annoes = p->_anno_es;
_disp = ZERO;
TRecord_array & rmag = mag(annoes);
for (int i = find_mag(annoes, codmag, livello); i > 0;
i = find_mag(annoes, codmag, livello, i))
{
const TRectype & rec = rmag.row(i);
_disp += rec.get_real(MAG_GIAC);
if (p->_add_orf)
_disp += rec.get_real(MAG_ORDF);
if (p->_add_orc)
_disp -= rec.get_real(MAG_ORDC);
if (p->_add_prf)
_disp += rec.get_real(MAG_PRODFIN);
if (p->_add_prc)
_disp -= rec.get_real(MAG_PRODCOMP);
if (p->_add_acl)
_disp += rec.get_real(MAG_ACL);
if (p->_add_incl)
_disp -= rec.get_real(MAG_INCL);
}
if ((p->_add_orc || p->_add_orf) && !riporta_ordinato()) // Se l-ordinato viene riportato
{
TEsercizi_contabili ese;
const int prev = ese.pred(atoi(annoes)); // Controllo anche l'anno precedente
if (prev > 0)
{
TString16 oldannoes; oldannoes.format("%04d", prev);
const TRecord_array& oldrmag = mag(oldannoes);
for (int i = find_mag(oldannoes, codmag, livello); i > 0;
i = find_mag(oldannoes, codmag, livello, i))
{
const TRectype& rec = oldrmag.row(i);
if (p->_add_orf)
_disp += rec.get_real(MAG_ORDF); // Sommo l'ordinato fornitori
if (p->_add_orc)
_disp -= rec.get_real(MAG_ORDC); // Sottraggo l'ordinato clienti
}
}
}
_umbase = ((TRectype&)(um()[1])).get("UM"); _umbase = ((TRectype&)(um()[1])).get("UM");
// Calcola ordinato fornitori di questo articolo, suddividendo per periodi // Calcola ordinato fornitori di questo articolo, suddividendo per periodi
@ -894,14 +954,25 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
const TString& liv = is_head ? _d->liv() : re.giacenza(); const TString& liv = is_head ? _d->liv() : re.giacenza();
// Il fabbisogno e': nr. componenti di questo articolo per residuo da produrre del padre // Il fabbisogno e': nr. componenti di questo articolo per residuo da produrre del padre
if (_p->_fabbisogno) if (_p->_fabbisogno && _p->_explosion == scalare)
r = re.last_qta() * res2produce_by_father(re); // In UM locale... r = re.last_qta() * res2produce_by_father(re); // In UM locale...
else else
r = re.val() * res2produce_by_father(re); // In UM locale... r = re.val() * res2produce_by_father(re); // In UM locale...
if (r == ZERO) if (r == ZERO)
{
if (_p->_fabbisogno) // Calcolo disponibilita'
{
// Compone la chiave da cercare nella cache: CODART|CODMAG|LIVELLO
// ovvio che tutti i campi debbono essre paddati alla loro massima lunghezza
// Al TArticolo_cache importa solo del CODART in ricerca... i campi seguenti vengono ignorati
// anche se nel TAssoc_array interno vengono cmq memorizzati come chiave
__key.format("%-20s|%-15s|%-5s", (const char*)re.articolo(), (const char*) liv, (const char*) codmag);
_prodorder.add(__key, ZERO, TRUE);
}
continue; // Don't store in _exploded_tree if there's no need continue; // Don't store in _exploded_tree if there's no need
}
TRiga_esplosione2print* r2p = NULL; TRiga_esplosione2print* r2p = NULL;
int pos = -1; int pos = -1;
@ -923,7 +994,7 @@ void TExplode_distinta_form::set_explosion_rows(TArray& exp_array)
r2p = new TRiga_esplosione2print(re, codmag); r2p = new TRiga_esplosione2print(re, codmag);
_exploded_tree.add(r2p,pos); _exploded_tree.add(r2p,pos);
} }
r2p->set_fabbisogno(r + r2p->fabbisogno()); r2p->set_fabbisogno(r + r2p->fabbisogno());
if (_p->_fabbisogno) // Calcolo disponibilita' if (_p->_fabbisogno) // Calcolo disponibilita'
@ -1067,6 +1138,7 @@ void TExplode_distinta_form::explode_and_print()
_distinta.clear_globals(); _distinta.clear_globals();
_distinta.set_global("_IMPIANTO", _d->imp()); _distinta.set_global("_IMPIANTO", _d->imp());
_distinta.set_global("_LINEA", _d->lin()); _distinta.set_global("_LINEA", _d->lin());
_distinta.set_global( "_MAGDEP", _d->mag());
if (!_distinta.set_root(_d->cod(), _d->um(), 1.0, _d->liv())) if (!_distinta.set_root(_d->cod(), _d->um(), 1.0, _d->liv()))
return; return;
@ -1704,6 +1776,15 @@ void TEsplosione_distinta_app::main_loop()
_parameters._det_ord_for = _mask->get_bool(F_DETORDFOR); _parameters._det_ord_for = _mask->get_bool(F_DETORDFOR);
_parameters._separate_dist = _mask->get_bool(F_SEPARATE_DIST); _parameters._separate_dist = _mask->get_bool(F_SEPARATE_DIST);
_parameters._separate_giac = _mask->get_bool(F_SEPARATE_GIAC); _parameters._separate_giac = _mask->get_bool(F_SEPARATE_GIAC);
_parameters._add_orc = _mask->get_bool(F_ORCLI4DISP);
_parameters._add_orf = _mask->get_bool(F_ORFOR4DISP);
_parameters._add_prf = _mask->get_bool(F_INPRF4DISP);
_parameters._add_prc = _mask->get_bool(F_INPRC4DISP);
_parameters._add_incl = _mask->get_bool(F_INCLV4DISP);
_parameters._add_acl = _mask->get_bool(F_ACLV4DISP);
_parameters._normal_disp = _parameters._add_orc && _parameters._add_orf &&
_parameters._add_prf && _parameters._add_prc &&
_parameters._add_acl && _parameters._add_acl;
// Credo che il seguente anno esercizio sia calcolato // Credo che il seguente anno esercizio sia calcolato
// in modo abbastanza schifoso, visto che si e' in possesso del solo anno solare // in modo abbastanza schifoso, visto che si e' in possesso del solo anno solare

View File

@ -39,14 +39,16 @@
#define F_ORFOR4DISP 137 #define F_ORFOR4DISP 137
#define F_INPRF4DISP 138 #define F_INPRF4DISP 138
#define F_INPRC4DISP 139 #define F_INPRC4DISP 139
#define F_CATVEN_LIST 140 #define F_INCLV4DISP 140
#define F_CODLIST 141 #define F_ACLV4DISP 141
#define F_NOIGNORE 142 #define F_CATVEN_LIST 142
#define F_NOZEROORD 143 #define F_CODLIST 143
#define F_IMPIANTO 144 #define F_NOIGNORE 144
#define F_DESCIMP 145 #define F_NOZEROORD 145
#define F_LINEA 146 #define F_IMPIANTO 146
#define F_DESCLIN 147 #define F_DESCIMP 147
#define F_LINEA 148
#define F_DESCLIN 149
#define F_CODDIS 101 #define F_CODDIS 101
#define F_LIV1 102 #define F_LIV1 102

View File

@ -286,19 +286,19 @@ PAGE "Disponibilita'" -1 -1 78 20
BOOLEAN F_FABBISOGNO BOOLEAN F_FABBISOGNO
BEGIN BEGIN
PROMPT 2 2 "Calcola disponibilita'" PROMPT 2 1 "Calcola disponibilita'"
MESSAGE TRUE ENABLE,G_DISPONIB@|"X",F_ORCLI4DISP|"X",F_ORFOR4DISP|"X",F_INPRF4DISP|"X",F_INPRC4DISP MESSAGE TRUE ENABLE,G_DISPONIB@
MESSAGE FALSE CLEAR,G_DISPONIB@|CLEAR,6@ MESSAGE FALSE CLEAR,G_DISPONIB@|CLEAR,6@
END END
GROUPBOX DLG_NULL 50 9 GROUPBOX DLG_NULL 50 11
BEGIN BEGIN
PROMPT 2 2 "" PROMPT 2 1 ""
END END
LIST F_LIVATTENZ 26 LIST F_LIVATTENZ 26
BEGIN BEGIN
PROMPT 3 3 "Segnala giacenza " PROMPT 3 2 "Segnala giacenza "
ITEM " |sotto zero" ITEM " |sotto zero"
ITEM "S|sotto scorta minima" ITEM "S|sotto scorta minima"
// ITEM "R|sotto livello di riordino" // ITEM "R|sotto livello di riordino"
@ -307,48 +307,60 @@ END
BOOLEAN F_FABBISOGNO_FIN BOOLEAN F_FABBISOGNO_FIN
BEGIN BEGIN
PROMPT 3 4 "Non calcolare disp. sui finiti" PROMPT 3 3 "Non calcolare disp. sui finiti"
GROUP G_DISPONIB GROUP G_DISPONIB
END END
BOOLEAN F_NOZEROORD BOOLEAN F_NOZEROORD
BEGIN BEGIN
PROMPT 3 5 "Non stampare righe con fabbisogno nullo" PROMPT 3 4 "Non stampare righe con fabbisogno nullo"
GROUP G_DISPONIB GROUP G_DISPONIB
FLAGS "D" FLAGS "D"
END END
BOOLEAN F_ORCLI4DISP BOOLEAN F_ORCLI4DISP
BEGIN BEGIN
PROMPT 3 6 "Sottrai l'ordinato clienti" PROMPT 3 5 "Sottrai l'ordinato clienti"
// GROUP G_DISPONIB GROUP G_DISPONIB
FLAGS "D" FLAGS "D"
END END
BOOLEAN F_ORFOR4DISP BOOLEAN F_ORFOR4DISP
BEGIN BEGIN
PROMPT 3 7 "Aggiungi l'ordinato fornitori" PROMPT 3 6 "Aggiungi l'ordinato fornitori"
// GROUP G_DISPONIB
FLAGS "D" FLAGS "D"
END END
BOOLEAN F_INPRF4DISP BOOLEAN F_INPRF4DISP
BEGIN BEGIN
PROMPT 3 8 "Aggiungi i finiti in produzione" PROMPT 3 7 "Aggiungi i finiti in produzione"
// GROUP G_DISPONIB
FLAGS "D" FLAGS "D"
END END
BOOLEAN F_INPRC4DISP BOOLEAN F_INPRC4DISP
BEGIN BEGIN
PROMPT 3 9 "Sottrai i componenti in produzione" PROMPT 3 8 "Sottrai i componenti in produzione"
// GROUP G_DISPONIB GROUP G_DISPONIB
FLAGS "D"
END
BOOLEAN F_ACLV4DISP
BEGIN
PROMPT 3 9 "Aggiungi i componenti a conto lavorazione"
GROUP G_DISPONIB
FLAGS "D"
END
BOOLEAN F_INCLV4DISP
BEGIN
PROMPT 3 10 "Sottrai i componenti in conto lavorazione"
GROUP G_DISPONIB
FLAGS "D" FLAGS "D"
END END
LISTBOX F_VALORIZZAZIONE 32 LISTBOX F_VALORIZZAZIONE 32
BEGIN BEGIN
PROMPT 3 11 "" PROMPT 3 12 ""
ITEM "0|Non valorizzare" ITEM "0|Non valorizzare"
MESSAGE HIDE,G_LISTINO@ MESSAGE HIDE,G_LISTINO@
ITEM "1|Valorizza Ultimo costo" ITEM "1|Valorizza Ultimo costo"
@ -375,7 +387,7 @@ END
STRING F_CATVEN_LIST 2 STRING F_CATVEN_LIST 2
BEGIN BEGIN
PROMPT 3 12 "Cat.vendita " PROMPT 57 12 "Cat.vendita "
USE CVE USE CVE
INPUT CODTAB F_CATVEN_LIST INPUT CODTAB F_CATVEN_LIST
DISPLAY "Codice" CODTAB DISPLAY "Codice" CODTAB
@ -389,7 +401,7 @@ END
STRING F_CODLIST 3 STRING F_CODLIST 3
BEGIN BEGIN
PROMPT 25 12 "Cod.listino " PROMPT 39 12 "Cod.listino "
USE LF_CONDV SELECT TIPO=="L" USE LF_CONDV SELECT TIPO=="L"
INPUT TIPO "L" INPUT TIPO "L"
INPUT CATVEN F_CATVEN_LIST INPUT CATVEN F_CATVEN_LIST

View File

@ -1,5 +1,8 @@
#include <applicat.h> #include <applicat.h>
#include <defmask.h>
#include <sheet.h>
#include <automask.h> #include <automask.h>
#include <printer.h>
#include <progind.h> #include <progind.h>
#include <relation.h> #include <relation.h>
#include <sheet.h> #include <sheet.h>
@ -22,7 +25,7 @@ protected:
virtual const TRectype& find_head(const TCodice_articolo& art) const; virtual const TRectype& find_head(const TCodice_articolo& art) const;
virtual const TRectype* find_child(const TCodice_articolo& art, int child) const; virtual const TRectype* find_child(const TCodice_articolo& art, int child) const;
public: public:
bool add_head(const TCodice_articolo& art); bool add_head(const TCodice_articolo& art);
bool add_child(const TRectype& rec); bool add_child(const TRectype& rec);
@ -32,6 +35,8 @@ public:
virtual ~TXmas_tree(); virtual ~TXmas_tree();
}; };
HIDDEN bool _ignore_zero = TRUE;
const TRectype& TXmas_tree::find_head(const TCodice_articolo& art) const const TRectype& TXmas_tree::find_head(const TCodice_articolo& art) const
{ {
const TRectype& rec = _cache_dist->get(art); const TRectype& rec = _cache_dist->get(art);
@ -73,7 +78,7 @@ void TXmas_tree::add_branch(TDistinta_tree& dt)
while (dt.has_father()) while (dt.has_father())
{ {
const real qta = dt.last_qta(); const real qta = dt.last_qta();
if (qta.is_zero()) if (::_ignore_zero && qta.is_zero())
break; // Inutile proseguire break; // Inutile proseguire
TCodice_um um; dt.curr_um(um); TCodice_um um; dt.curr_um(um);
TCodice_articolo art; dt.curr_code(art); TCodice_articolo art; dt.curr_code(art);
@ -114,7 +119,7 @@ void TXmas_tree::add_branch(TDistinta_tree& dt)
} }
TXmas_tree::TXmas_tree() TXmas_tree::TXmas_tree()
{ {
_dist = new TIsamtempfile(LF_DIST, NULL, TRUE, TRUE); _dist = new TIsamtempfile(LF_DIST, NULL, TRUE, TRUE);
_cache_dist = new TRecord_cache(_dist); _cache_dist = new TRecord_cache(_dist);
_cache_dist->test_file_changes(TRUE); _cache_dist->test_file_changes(TRUE);
@ -194,11 +199,69 @@ class TDisplay_mask : public TAutomask
protected: protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void print_tree(TXmas_tree& tree);
public: public:
TDisplay_mask(TAssoc_array& xmas); TDisplay_mask(TAssoc_array& xmas);
virtual ~TDisplay_mask() { } virtual ~TDisplay_mask() { }
}; };
static bool print_node(TTree& t, void* p, word flags)
{
TXmas_tree& tree = (TXmas_tree&)t;
TBit_array& righette = *(TBit_array*)p;
const int depth = tree.curr_depth();
const int tab = (depth-1)*3;
TString descr;
tree.get_description(descr);
TPrintrow row;
if (tab >= 0)
row.put("+--", tab);
row.put(descr);
for (int d = 1; d < depth; d++)
if (righette[d]) row.put("!", (d-1)*3);
printer().print(row);
righette.set(depth, tree.has_rbrother());
return FALSE;
}
void TDisplay_mask::print_tree(TXmas_tree& tree)
{
TPrinter& p = printer();
p.resetheader();
p.resetfooter();
TCodice_articolo art;
TString descr;
tree.goto_root();
tree.curr_code(art);
tree.describe(art, descr);
TPrintrow header;
header.put("@bSTAMPA IMPLOSIONE ");
header.put(art);
header.put(" - ");
header.put(descr);
p.setheaderline(0, header);
p.setheaderline(1, NULL);
TPrintrow footer;
footer.put("Pag.@#", 36);
p.setfooterline(0, NULL);
p.setfooterline(1, footer);
p.setfooterline(2, NULL);
p.open();
TBit_array righette;
tree.scan_depth_first(print_node, &righette);
p.formfeed();
p.close();
}
bool TDisplay_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) bool TDisplay_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{ {
@ -259,6 +322,15 @@ bool TDisplay_mask::on_field_event(TOperable_field& o, TField_event e, long joll
} }
} }
break; break;
case DLG_PRINT:
if (e == fe_button)
{
TXmas_tree* t = (TXmas_tree*)tfield(F_TREE).tree();
if (t)
print_tree(*t);
return FALSE; // Non chiudere la maschera!
}
break;
default: default:
break; break;
} }
@ -656,6 +728,7 @@ void TImplosion_mask::implode()
{ {
_xmas.destroy(); _xmas.destroy();
_ignore_zero = !get_bool(F_DISPLAY_ZERO);
if (get_bool(F_FASTIMPLODE)) if (get_bool(F_FASTIMPLODE))
{ {
if (get_bool(F_ONLYONE)) if (get_bool(F_ONLYONE))

View File

@ -18,11 +18,12 @@
#define F_MAGAZZINO 103 #define F_MAGAZZINO 103
#define F_DEPOSITO 104 #define F_DEPOSITO 104
#define F_USECATMER 220 #define F_USECATMER 220
#define F_DA_CATMER 221 #define F_DA_CATMER 221
#define F_A_CATMER 222 #define F_A_CATMER 222
#define F_DA_ARTICOLO 225 #define F_DA_ARTICOLO 225
#define F_AD_ARTICOLO 226 #define F_AD_ARTICOLO 226
#define F_FASTIMPLODE 227 #define F_FASTIMPLODE 227
#define F_ONLYONE 228 #define F_ONLYONE 228
#define F_DISPLAY_ZERO 229

View File

@ -38,7 +38,7 @@ BEGIN
PROMPT 1 8 "@bVariabili d'ambiente" PROMPT 1 8 "@bVariabili d'ambiente"
END END
SPREADSHEET F_VARS 78 8 SPREADSHEET F_VARS 78 7
BEGIN BEGIN
PROMPT 1 9 "" PROMPT 1 9 ""
ITEM "Impianto" ITEM "Impianto"
@ -51,21 +51,38 @@ BEGIN
ITEM "Liv. 4@6" ITEM "Liv. 4@6"
END END
GROUPBOX DLG_NULL 78 4 GROUPBOX DLG_NULL 78 6
BEGIN BEGIN
PROMPT 1 17 "@bProdotti Finiti" PROMPT 1 16 "@bProdotti Finiti"
END
BOOLEAN F_FASTIMPLODE
BEGIN
PROMPT 2 17 "Implosione rapida (senza articoli virtuali)"
MESSAGE FALSE HIDE,F_ONLYONE
MESSAGE TRUE SHOW,F_ONLYONE
END
BOOLEAN F_ONLYONE
BEGIN
PROMPT 50 17 "Solo primo livello"
END
BOOLEAN F_DISPLAY_ZERO
BEGIN
PROMPT 2 18 "Visualizza le quantitá a zero"
END END
BOOLEAN F_USECATMER BOOLEAN F_USECATMER
BEGIN BEGIN
PROMPT 2 18 "Per categoria merceologica" PROMPT 2 19 "Per categoria merceologica"
MESSAGE FALSE HIDE,F_DA_CATMER|HIDE,F_A_CATMER MESSAGE FALSE HIDE,F_DA_CATMER|HIDE,F_A_CATMER
MESSAGE TRUE SHOW,F_DA_CATMER|SHOW,F_A_CATMER MESSAGE TRUE SHOW,F_DA_CATMER|SHOW,F_A_CATMER
END END
STRING F_DA_CATMER 5 STRING F_DA_CATMER 5
BEGIN BEGIN
PROMPT 42 18 "Da " PROMPT 42 19 "Da "
FLAG "U" FLAG "U"
USE GMC USE GMC
INPUT CODTAB F_DA_CATMER INPUT CODTAB F_DA_CATMER
@ -77,7 +94,7 @@ END
STRING F_A_CATMER 5 STRING F_A_CATMER 5
BEGIN BEGIN
PROMPT 58 18 "A " PROMPT 58 19 "A "
FLAG "U" FLAG "U"
COPY USE F_DA_CATMER COPY USE F_DA_CATMER
INPUT CODTAB F_A_CATMER INPUT CODTAB F_A_CATMER
@ -88,7 +105,7 @@ END
STRING F_DA_ARTICOLO 20 STRING F_DA_ARTICOLO 20
BEGIN BEGIN
PROMPT 2 19 "Dal " PROMPT 2 20 "Dal "
USE LF_ANAMAG USE LF_ANAMAG
INPUT CODART F_DA_ARTICOLO INPUT CODART F_DA_ARTICOLO
DISPLAY "Codice@20" CODART DISPLAY "Codice@20" CODART
@ -101,7 +118,7 @@ END
STRING F_AD_ARTICOLO 20 STRING F_AD_ARTICOLO 20
BEGIN BEGIN
PROMPT 42 19 "Al " PROMPT 42 20 "Al "
COPY USE F_DA_ARTICOLO COPY USE F_DA_ARTICOLO
INPUT CODART F_AD_ARTICOLO INPUT CODART F_AD_ARTICOLO
COPY DISPLAY F_DA_ARTICOLO COPY DISPLAY F_DA_ARTICOLO

View File

@ -4,12 +4,17 @@ TOOLBAR "" 0 -3 0 3
BUTTON F_EXPLODE 10 2 BUTTON F_EXPLODE 10 2
BEGIN BEGIN
PROMPT -12 -11 "~Lista" PROMPT -13 -11 "~Lista"
END
BUTTON DLG_PRINT 10 2
BEGIN
PROMPT -23 -11 "~Stampa"
END END
BUTTON DLG_QUIT 10 2 BUTTON DLG_QUIT 10 2
BEGIN BEGIN
PROMPT -22 -11 "" PROMPT -33 -11 ""
END END
ENDPAGE ENDPAGE

View File

@ -3,8 +3,5 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -11,6 +11,9 @@ int main(int argc, char** argv)
dbcv00(argc, argv); break; dbcv00(argc, argv); break;
case 1: case 1:
dbcv01(argc, argv); break; dbcv01(argc, argv); break;
case 3:
dbcv03(argc, argv); break;
case 2:
default: default:
dbcv02(argc, argv); break; dbcv02(argc, argv); break;
} }

View File

@ -4,5 +4,6 @@
int dbcv00(int argc, char* argv[]); int dbcv00(int argc, char* argv[]);
int dbcv01(int argc, char* argv[]); int dbcv01(int argc, char* argv[]);
int dbcv02(int argc, char* argv[]); int dbcv02(int argc, char* argv[]);
int dbcv03(int argc, char* argv[]);
#endif #endif

View File

@ -3,9 +3,6 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -8,18 +8,21 @@
#include <execp.h> #include <execp.h>
#include "..\mg\anamag.h" #include "..\mg\anamag.h"
#include "..\mg\mag.h" #include "..\mg\mag.h"
#include "..\mg\mglib.h"
#include "..\include\doc.h" #include "..\include\doc.h"
#include "..\include\rdoc.h" #include "..\include\rdoc.h"
#include "..\ve\velib.h" #include "..\ve\velib.h"
typedef void (*SET_DOC_FUN)(TImport_file & import,TConfig &trans); typedef void (*SET_DOC_FUN)(TImport_file & import,TConfig &trans);
typedef int (*SET_BODYDOC_FUN)(TImport_file & import,TConfig &trans); typedef int (*SET_BODYDOC_FUN)(TImport_file & import,TConfig &trans, const bool dotrans);
typedef const char *(*TIPOCF_FUN)(TImport_file & import); typedef const char *(*TIPOCF_FUN)(TImport_file & import);
typedef bool (*FILTER_FUN)(TImport_file & import); typedef bool (*FILTER_FUN)(TImport_file & import);
typedef bool (*GROUPBRK_FUN)(TImport_file & import);
static TExternisamfile *_ithcheck=NULL; static TExternisamfile *_ithcheck=NULL;
static bool _check=TRUE; static bool _check=TRUE;
#include "dbcvlib.h"
class TImporta_mask : public TAutomask class TImporta_mask : public TAutomask
{ {
@ -44,13 +47,14 @@ private:
bool read_is_dist(const char *item_code); bool read_is_dist(const char *item_code);
bool is_ghost(const char *item_code); bool is_ghost(const char *item_code);
const char * read_first_um(const char *item_code); const char * read_first_um(const char *item_code);
bool creadocs(const char * msg, bool creadocs(const char * msg,
long firm, TImport_file & imp_file, long firm, TImport_file & imp_file,
const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc,const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3, const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc,const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3,
SET_DOC_FUN set_header, SET_BODYDOC_FUN set_body, FILTER_FUN filter , SET_DOC_FUN set_header, SET_BODYDOC_FUN set_body, FILTER_FUN filter ,GROUPBRK_FUN grp,
TIPOCF_FUN tipocf, bool do_ve0=TRUE); TIPOCF_FUN tipocf, bool do_ve0=TRUE);
void clear_docs(long firm, const char * num, const TDate *fromdate=NULL, const TDate *todate=NULL); void clear_docs(long firm, const char * num, const TDate *fromdate=NULL, const TDate *todate=NULL, const long fromnum= 0,const long tonum=-1 );
void change_docs_status(const char * num, const TDate *fromdate, const TDate *todate, int fromstatus, int tostatus); void change_docs_status(const char * num, const TDate *fromdate, const TDate *todate, int fromstatus, int tostatus);
void newums(); void newums();
@ -288,7 +292,7 @@ bool TImporta_BPCS ::importa_boms(TMask &m)
} }
} }
// importa solo gli impianti SEgrate e TrieSte // importa solo gli impianti SEgrate e TrieSte
if (!skip && metodo == 99 && (impianto=="SE" || impianto=="TS" )) if (!skip && (impianto=="SE" || impianto=="TS" ) /* && metodo == 99 */)
{ {
main_imp=impianto; main_imp=impianto;
do { do {
@ -524,17 +528,17 @@ bool TImporta_BPCS ::importa_arts(TMask & m, const bool erase, const bool solo
_anamag->put( ANAMAG_CODART,item_code); _anamag->put( ANAMAG_CODART,item_code);
_anamag->put( ANAMAG_DESCR,items.get("IDESC")); _anamag->put( ANAMAG_DESCR,items.get("IDESC"));
_anamag->put( ANAMAG_DESCRAGG,items.get("IDSCE")); _anamag->put( ANAMAG_DESCRAGG,items.get("IDSCE"));
_anamag->put( ANAMAG_CODFORN, items.get("IVEND")); _anamag->put( ANAMAG_CODFORN, items.get_long("IVEND"));
_anamag->put( ANAMAG_UMP, "KG"); _anamag->put( ANAMAG_UMP, "KG");
_anamag->put( ANAMAG_PESO, items.get("IWGHT")); _anamag->put( ANAMAG_PESO, items.get_real("IWGHT"));
// riordino // riordino
_anamag->put( ANAMAG_RIORDINO , "F"); //_anamag->put( ANAMAG_RIORDINO , items.get("IMRP")=="M" ? "F" : "P" ); _anamag->put( ANAMAG_RIORDINO , "F"); //_anamag->put( ANAMAG_RIORDINO , items.get("IMRP")=="M" ? "F" : "P" );
_anamag->put( ANAMAG_GIORNIRIOR, items.get("ILEAD")); _anamag->put( ANAMAG_GIORNIRIOR, items.get_long("ILEAD"));
_anamag->put( ANAMAG_LOTTORIOR, items.get("ILOTS")); _anamag->put( ANAMAG_LOTTORIOR, items.get_real("ILOTS"));
_anamag->put( ANAMAG_LOTTOIRIOR, items.get("IIOQ")); _anamag->put( ANAMAG_LOTTOIRIOR, items.get_real("IIOQ"));
// //
_anamag->put( ANAMAG_PPCONF , items.get("IFII")); _anamag->put( ANAMAG_PPCONF , items.get_long("IFII"));
_anamag->put( ANAMAG_PPCOLLO , items.get("IFII")); _anamag->put( ANAMAG_PPCOLLO , items.get_long("IFII"));
TString16 gmc=items.get("IITYP"); TString16 gmc=items.get("IITYP");
switch (gmc[0]) switch (gmc[0])
{ {
@ -564,8 +568,8 @@ bool TImporta_BPCS ::importa_arts(TMask & m, const bool erase, const bool solo
} }
} }
_anamag->put( ANAMAG_GRMERC,gmc); _anamag->put( ANAMAG_GRMERC,gmc);
_anamag->put( ANAMAG_COSTSTD, items.get("ISCST")); _anamag->put( ANAMAG_COSTSTD, items.get_real("ISCST"));
_anamag->put( ANAMAG_ULTCOS1, items.get("IACST")); _anamag->put( ANAMAG_ULTCOS1, items.get_real("IACST"));
tmp=items.get("TAXC1"); tmp=items.get("TAXC1");
if (tmp.left(3)=="IVA") if (tmp.left(3)=="IVA")
tmp=tmp.sub(3); tmp=tmp.sub(3);
@ -573,16 +577,16 @@ bool TImporta_BPCS ::importa_arts(TMask & m, const bool erase, const bool solo
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD")) if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{ {
_anamag->put( ANAMAG_CLASSDOG , check_clasdog(items_ext.get_long("MSTDO"))); _anamag->put( ANAMAG_CLASSDOG , check_clasdog(items_ext.get_long("MSTDO")));
_anamag->put( ANAMAG_USER1 , items_ext.get("MSIDR"));// idrati _anamag->put( ANAMAG_USER1 , items_ext.get_real("MSIDR"));// idrati
_anamag->put( ANAMAG_USER2 , items_ext.get("MSANI"));//anidri _anamag->put( ANAMAG_USER2 , items_ext.get_real("MSANI"));//anidri
_anamag->put( ANAMAG_USER3 , items_ext.get("MSTAL"));//alcool _anamag->put( ANAMAG_USER3 , items_ext.get("MSTAL"));//alcool
// dimensioni // dimensioni
_anamag->put( ANAMAG_USER4, items_ext.get("MSPLU")); _anamag->put( ANAMAG_USER4, items_ext.get_long("MSSLU"));
_anamag->put( ANAMAG_USER5, items_ext.get("MSPAL")); _anamag->put( ANAMAG_USER5, items_ext.get_long("MSSAL"));
_anamag->put( ANAMAG_USER6, items_ext.get("MSPPR")); _anamag->put( ANAMAG_USER6, items_ext.get_long("MSCPR"));
// composizione pallets // composizione pallets
_anamag->put( ANAMAG_USER7, items_ext.get("MSCST")); // casse per strato _anamag->put( ANAMAG_USER7, items_ext.get_long("MSCST")); // casse per strato
_anamag->put( ANAMAG_USER8, items_ext.get("MSSTP")); // strati per pallet _anamag->put( ANAMAG_USER8, items_ext.get_long("MSSTP")); // strati per pallet
} }
force_write(*_anamag); force_write(*_anamag);
real smin(items.get("IMIN")); real smin(items.get("IMIN"));
@ -795,7 +799,7 @@ void TImporta_BPCS ::change_docs_status(const char * num, const TDate *fromdate,
TString codnum(num); TString codnum(num);
TLocalisamfile doc(LF_DOC); TLocalisamfile doc(LF_DOC);
TDocumento doc_record; TDocumento doc_record;
TIndwin info(80,"Cambio stato documenti ",TRUE,FALSE); TIndwin info(80,"Cambio stato documenti ",TRUE,FALSE);
for (int anno=1998; anno<=2000; anno++) for (int anno=1998; anno<=2000; anno++)
{ {
@ -808,7 +812,6 @@ void TImporta_BPCS ::change_docs_status(const char * num, const TDate *fromdate,
doc.get_int(DOC_ANNO) == anno && doc.get_int(DOC_ANNO) == anno &&
(doc.get("CODNUM")==codnum || codnum.blank())) (doc.get("CODNUM")==codnum || codnum.blank()))
{ {
info.set_text(format("Cambio stato %s n. %ld", num, doc.get_long(DOC_NDOC)));
if (info.iscancelled()) if (info.iscancelled())
return; return;
@ -818,6 +821,7 @@ void TImporta_BPCS ::change_docs_status(const char * num, const TDate *fromdate,
if (!todate || todate->empty() || doc.get_date("DATADOC")<=*todate) if (!todate || todate->empty() || doc.get_date("DATADOC")<=*todate)
if (docstatus == fromstatus) if (docstatus == fromstatus)
{ {
info.set_text(format("Cambio stato %s n. %ld", num, doc.get_long(DOC_NDOC)));
doc_record = doc.curr(); doc_record = doc.curr();
doc_record.read(_isequal, _lock); doc_record.read(_isequal, _lock);
doc_record.put(DOC_STATO, tostatus); doc_record.put(DOC_STATO, tostatus);
@ -828,7 +832,7 @@ void TImporta_BPCS ::change_docs_status(const char * num, const TDate *fromdate,
} }
} }
void TImporta_BPCS::clear_docs(long firm, const char * num, const TDate *fromdate, const TDate *todate) void TImporta_BPCS::clear_docs(long firm, const char * num, const TDate *fromdate, const TDate *todate, const long fromnum,const long tonum )
{ {
TConfig *trans=NULL; TConfig *trans=NULL;
long ntransac=0; long ntransac=0;
@ -839,7 +843,7 @@ void TImporta_BPCS::clear_docs(long firm, const char * num, const TDate *fromdat
TString codnum(num); TString codnum(num);
TLocalisamfile doc(LF_DOC); TLocalisamfile doc(LF_DOC);
TLocalisamfile rdoc(LF_RIGHEDOC); TLocalisamfile rdoc(LF_RIGHEDOC);
for (int anno=1998; anno<=1999; anno++) for (int anno=1998; anno<=2002; anno++)
{ {
TDate docdate(doc.get_date("DATADOC")); TDate docdate(doc.get_date("DATADOC"));
doc.put(DOC_PROVV,"D"); doc.put(DOC_PROVV,"D");
@ -852,6 +856,8 @@ void TImporta_BPCS::clear_docs(long firm, const char * num, const TDate *fromdat
{ {
if (!fromdate || fromdate->empty() || doc.get_date("DATADOC")>=*fromdate) if (!fromdate || fromdate->empty() || doc.get_date("DATADOC")>=*fromdate)
if (!todate || todate->empty() || doc.get_date("DATADOC")<=*todate) if (!todate || todate->empty() || doc.get_date("DATADOC")<=*todate)
if (fromnum<=0 || doc.get_long(DOC_NDOC)>=fromnum )
if (tonum<=0 || doc.get_long(DOC_NDOC)<=tonum )
{ {
ntransac++; ntransac++;
if (ntransac==nblock*100) if (ntransac==nblock*100)
@ -888,12 +894,14 @@ void TImporta_BPCS::clear_docs(long firm, const char * num, const TDate *fromdat
} }
} }
bool TImporta_BPCS::creadocs(const char * msg, bool TImporta_BPCS::creadocs(const char * msg,
long firm, // ditta long firm, // ditta
TImport_file & imp_file, TImport_file & imp_file,
const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc, const char *FieldNumDoc, const char *FieldClifor, const char *FieldDataDoc,
const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3, const char *FieldGroup1, const char *FieldGroup2, const char *FieldGroup3,
SET_DOC_FUN set_header, SET_BODYDOC_FUN set_body, FILTER_FUN filter , TIPOCF_FUN tipocf, SET_DOC_FUN set_header, SET_BODYDOC_FUN set_body, FILTER_FUN filter ,
GROUPBRK_FUN grpfun, TIPOCF_FUN tipocf,
bool do_ve0) bool do_ve0)
{ {
@ -902,7 +910,13 @@ bool TImporta_BPCS::creadocs(const char * msg,
int nblock=1; int nblock=1;
long ntransac=0; long ntransac=0;
int nrigadoc=0; int nrigadoc=0;
long starting_ndoc=0;
// autonumerazione a partire da ...
if (FieldNumDoc && *FieldNumDoc== '*' && *(FieldNumDoc+1)== '*' )
{
starting_ndoc = atol(FieldNumDoc+2);
FieldNumDoc = NULL;
}
// rimuove le transazioni // rimuove le transazioni
delete_files("ND_*.ini"); delete_files("ND_*.ini");
@ -924,6 +938,8 @@ bool TImporta_BPCS::creadocs(const char * msg,
if (filter(imp_file)) if (filter(imp_file))
{ {
long new_ndoc =FieldNumDoc ? imp_file.get_long(FieldNumDoc) : last_ndoc; long new_ndoc =FieldNumDoc ? imp_file.get_long(FieldNumDoc) : last_ndoc;
if (new_ndoc <= 0 && starting_ndoc)
new_ndoc = starting_ndoc++ ;
long new_clifor=FieldClifor ? imp_file.get_long(FieldClifor) : last_clifor; long new_clifor=FieldClifor ? imp_file.get_long(FieldClifor) : last_clifor;
if (new_clifor==0L && FieldClifor) if (new_clifor==0L && FieldClifor)
new_clifor=9999; // cliente generico new_clifor=9999; // cliente generico
@ -931,8 +947,8 @@ bool TImporta_BPCS::creadocs(const char * msg,
TString new_group1=FieldGroup1 ? imp_file.get(FieldGroup1) : last_group1; TString new_group1=FieldGroup1 ? imp_file.get(FieldGroup1) : last_group1;
TString new_group2=FieldGroup2 ? imp_file.get(FieldGroup2) : last_group2; TString new_group2=FieldGroup2 ? imp_file.get(FieldGroup2) : last_group2;
TString new_group3=FieldGroup3 ? imp_file.get(FieldGroup3) : last_group3; TString new_group3=FieldGroup3 ? imp_file.get(FieldGroup3) : last_group3;
if (nrigadoc>99 || (last_ndoc != new_ndoc) || (last_date != new_date ) || (last_clifor != new_clifor )|| if (nrigadoc>99 || (grpfun && grpfun(imp_file)) || (last_ndoc != new_ndoc) || (last_date != new_date ) || (last_clifor != new_clifor )||
(last_group1 != new_group1 )|| (last_group2 != new_group2 )|| (last_group3 != new_group3 )) (last_group1 != new_group1 )|| (last_group2 != new_group2 )|| (last_group3 != new_group3 ))
{ {
if (ntransac==nblock*100) if (ntransac==nblock*100)
{ {
@ -962,6 +978,8 @@ bool TImporta_BPCS::creadocs(const char * msg,
trans->set(DOC_TIPOCF, tipocf(imp_file)); trans->set(DOC_TIPOCF, tipocf(imp_file));
if (new_clifor>0L) if (new_clifor>0L)
{ {
if (tipocf(imp_file) == "F")
new_clifor = trascode_for(new_clifor);
trans->set(DOC_CODCF,new_clifor); trans->set(DOC_CODCF,new_clifor);
// gestione condizione di pagamento // gestione condizione di pagamento
@ -973,11 +991,12 @@ bool TImporta_BPCS::creadocs(const char * msg,
trans->set(DOC_PROVV,"D"); trans->set(DOC_PROVV,"D");
set_header(imp_file, *trans); set_header(imp_file, *trans);
nrigadoc=0; nrigadoc=0;
ntransac++; last_ndoc=-1L;
ntransac++;
} }
// righe // righe
trans->set_paragraph(format("%d,%d",LF_RIGHEDOC, nrigadoc+1)); trans->set_paragraph(format("%d,%d",LF_RIGHEDOC, nrigadoc+1));
nrigadoc += set_body(imp_file, *trans); nrigadoc += set_body(imp_file, *trans,do_ve0);
} }
imp_file.next(); imp_file.next();
} }
@ -988,10 +1007,14 @@ bool TImporta_BPCS::creadocs(const char * msg,
// genera i documenti // genera i documenti
if (do_ve0) if (do_ve0)
{ {
TExternal_app *_gestart=NULL;
TString cmd("ve0.exe -1 -i"); TString cmd("ve0.exe -1 -i");
cmd << format("ND_%03d*.INI",nblock-1) ; cmd << format("ND_%03d*.INI",nblock-1) ;
TExternal_app gestdoc((const char *)cmd); if (_gestart==NULL)
gestdoc.run(); _gestart = new TExternal_app((const char *)cmd);
while (_gestart->run()!=0 && yesno_box("Ritento l'esecuzione di ve0.exe ?"))
;
} }
nblock++; nblock++;
} }
@ -1015,7 +1038,7 @@ void set_head_F_ordcli(TImport_file & import, TConfig &trans)
round_date(dc,28,TRUE); round_date(dc,28,TRUE);
trans.set(DOC_DATACONS, dc);// stessa data del doc trans.set(DOC_DATACONS, dc);// stessa data del doc
} }
int set_body_F_ordcli(TImport_file &import, TConfig &trans) int set_body_F_ordcli(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
TToken_string tmp; TToken_string tmp;
trans.set(RDOC_TIPORIGA,"01"); trans.set(RDOC_TIPORIGA,"01");
@ -1025,7 +1048,7 @@ int set_body_F_ordcli(TImport_file &import, TConfig &trans)
tmp.add("1"); tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO")); trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM")); trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
trans.set(RDOC_QTA,import.get_real("FQTY")); trans.set(RDOC_QTA,import.get("FQTY"));
// gia' suddivisa su doc : trans.set(RDOC_DATACONS, import.get_date("FDATE")); // gia' suddivisa su doc : trans.set(RDOC_DATACONS, import.get_date("FDATE"));
tmp=import.get("FPFAC"); tmp=import.get("FPFAC");
tmp << 1; tmp << 1;
@ -1052,7 +1075,7 @@ void set_head_R_ordcli(TImport_file & import, TConfig &trans)
round_date(dc,28,TRUE); round_date(dc,28,TRUE);
trans.set(DOC_DATACONS, dc);// stessa data del doc trans.set(DOC_DATACONS, dc);// stessa data del doc
} }
int set_body_R_ordcli(TImport_file &import, TConfig &trans) int set_body_R_ordcli(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
TToken_string tmp; TToken_string tmp;
trans.set(RDOC_TIPORIGA,"01"); trans.set(RDOC_TIPORIGA,"01");
@ -1062,8 +1085,8 @@ int set_body_R_ordcli(TImport_file &import, TConfig &trans)
tmp.add("1"); tmp.add("1");
trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO")); trans.set(RDOC_PREZZO,cache().get(LF_UMART,tmp).get("PREZZO"));
trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM")); trans.set(RDOC_UMQTA,cache().get(LF_UMART,tmp).get("UM"));
trans.set(RDOC_QTA,import.get_real("SQREQ")); trans.set(RDOC_QTA,import.get("SQREQ"));
trans.set(RDOC_QTAEVASA,import.get_real("SQFIN")); trans.set(RDOC_QTAEVASA,import.get("SQFIN"));
tmp=import.get("SOFAC"); tmp=import.get("SOFAC");
tmp << 1; tmp << 1;
@ -1081,7 +1104,7 @@ bool filter_R_ordcli(TImport_file & import)
return ok; return ok;
} }
// ordini di produzione // ordini di produzione firm planned
void set_head_F_ordprod(TImport_file & import, TConfig &trans) void set_head_F_ordprod(TImport_file & import, TConfig &trans)
{ {
trans.set(DOC_ANNO,import.get_date("FRDTE").year()); trans.set(DOC_ANNO,import.get_date("FRDTE").year());
@ -1093,15 +1116,15 @@ void set_head_F_ordprod(TImport_file & import, TConfig &trans)
dc = rdt; dc = rdt;
if (dc < today) if (dc < today)
if (1 || yesno_box("Data ordine di produzione per l'articolo %s inferiore a quella attuale: posticipo ?",(const char *) import.get("FPROD"))) if (0 || yesno_box("Data ordine di produzione per l'articolo %s inferiore a quella attuale: posticipo a oggi?",(const char *) import.get("FPROD")))
dc = today; dc = today;
round_date(dc,28,TRUE); //round_date(dc,28,TRUE);
TDate dd(trans.get(DOC_DATADOC)); TDate dd(trans.get(DOC_DATADOC));
if (dc < dd ) if (dc < dd )
trans.set(DOC_DATADOC, dc); trans.set(DOC_DATADOC, dc);
trans.set(DOC_DATACONS, dc); trans.set(DOC_DATACONS, dc);
} }
int set_body_F_ordprod(TImport_file &import, TConfig &trans) int set_body_F_ordprod(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
TToken_string tmp,tmp2; TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01"); trans.set(RDOC_TIPORIGA,"01");
@ -1116,7 +1139,7 @@ int set_body_F_ordprod(TImport_file &import, TConfig &trans)
codimp2codmagdep(tmp, atoi(import.get("FPBOMM")), tmp2); codimp2codmagdep(tmp, atoi(import.get("FPBOMM")), tmp2);
trans.set(RDOC_IMPIANTO,tmp); trans.set(RDOC_IMPIANTO,tmp);
trans.set(RDOC_CODMAG,tmp2); trans.set(RDOC_CODMAG,tmp2);
trans.set(RDOC_QTA,import.get_real("FQTY")); trans.set(RDOC_QTA,import.get("FQTY"));
trans.set(RDOC_QTAEVASA,"0"); trans.set(RDOC_QTAEVASA,"0");
return 1; return 1;
} }
@ -1142,20 +1165,21 @@ void set_head_R_ordprod(TImport_file & import, TConfig &trans)
trans.set(DOC_ANNO,import.get_date("SRDTE").year()); trans.set(DOC_ANNO,import.get_date("SRDTE").year());
trans.set("CODNUM",(import.get("SOFAC")=="SE") ? "MSP": "TSMP"); trans.set("CODNUM",(import.get("SOFAC")=="SE") ? "MSP": "TSMP");
trans.set("TIPODOC","ORP"); trans.set("TIPODOC","ORP");
TDate today(TODAY),dc(import.get_date("SDDTE")); TDate today(TODAY),
TDate rdt(import.get_date("SRSDT")); dc(import.get_date("SDDTE")); // due date : data di consegna
TDate rdt(import.get_date("SRSDT")); // reschedule date
if (rdt.ok() && rdt != 99999999L && rdt > dc) if (rdt.ok() && rdt != 99999999L && rdt > dc)
dc = rdt; dc = rdt;
if (dc < today) if (dc < today)
if (1 || yesno_box("Data ordine di produzione %ld per l'articolo %s inferiore a quella attuale: posticipo ?",import.get_long("SORD"),(const char *) import.get("SPROD"))) if (0 || yesno_box("Data ordine di produzione %ld per l'articolo %s inferiore a quella attuale: posticipo a oggi?",import.get_long("SORD"),(const char *) import.get("SPROD")))
dc = today; dc = today;
round_date(dc,28,TRUE); //round_date(dc,28,TRUE);
TDate dd(trans.get(DOC_DATADOC)); TDate dd(trans.get(DOC_DATADOC)); // data documento
if (dc < dd ) if (dc < dd )
trans.set(DOC_DATADOC, dc); trans.set(DOC_DATADOC, dc);
trans.set(DOC_DATACONS, dc); trans.set(DOC_DATACONS, dc);
} }
int set_body_R_ordprod(TImport_file &import, TConfig &trans) int set_body_R_ordprod(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
TToken_string tmp,tmp2; TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01"); trans.set(RDOC_TIPORIGA,"01");
@ -1186,8 +1210,8 @@ int set_body_R_ordprod(TImport_file &import, TConfig &trans)
} }
real totale = import.get_real("SQREQ"); real totale = import.get_real("SQREQ");
real evasa = import.get_real("SQFIN"); real evasa = import.get_real("SQFIN");
trans.set(RDOC_QTA,totale); trans.set(RDOC_QTA,totale.string());
trans.set(RDOC_QTAEVASA,evasa); trans.set(RDOC_QTAEVASA,evasa.string());
add_stdlabors(import.get_codice("SPROD"), import.get_long("SWRKC"), int(import.get_long("SOBOMM"))); add_stdlabors(import.get_codice("SPROD"), import.get_long("SWRKC"), int(import.get_long("SOBOMM")));
return 1; return 1;
} }
@ -1232,12 +1256,12 @@ void set_head_ordacq(TImport_file & import, TConfig &trans)
{ {
real cambio=import.get_real("PEXRT"); real cambio=import.get_real("PEXRT");
cambio_fisso(codval,cambio); cambio_fisso(codval,cambio);
trans.set(DOC_CAMBIO,cambio); trans.set(DOC_CAMBIO,cambio.string());
trans.set(DOC_CODVAL,codval); trans.set(DOC_CODVAL,codval);
} }
} }
int set_body_ordacq(TImport_file &import, TConfig &trans) int set_body_ordacq(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
TToken_string tmp,tmp2; TToken_string tmp,tmp2;
trans.set(RDOC_TIPORIGA,"01"); trans.set(RDOC_TIPORIGA,"01");
@ -1256,7 +1280,7 @@ int set_body_ordacq(TImport_file &import, TConfig &trans)
trans.set(RDOC_QTAEVASA,import.get("PQREC")); trans.set(RDOC_QTAEVASA,import.get("PQREC"));
// gestione codice IVA // gestione codice IVA
tmp = "F"; tmp = "F";
tmp.add(import.get("TVEND")); tmp.add(import.get("PVEND"));
TString8 codiva(cache().get(LF_CFVEN,tmp).get("ASSFIS")); TString8 codiva(cache().get(LF_CFVEN,tmp).get("ASSFIS"));
if (codiva.blank()) if (codiva.blank())
codiva = cache().get(LF_ANAMAG,tmp).get(ANAMAG_CODIVA); codiva = cache().get(LF_ANAMAG,tmp).get(ANAMAG_CODIVA);
@ -1410,23 +1434,38 @@ void set_head_bolacq(TImport_file & import, TConfig &trans)
trans.set(DOC_CAUSMAG,causmag); trans.set(DOC_CAUSMAG,causmag);
trans.set(DOC_NOTE,descrmov); trans.set(DOC_NOTE,descrmov);
trans.set(DOC_NDOC,numdoc); trans.set(DOC_NDOC,numdoc);
codcli = trascode_for(codcli);
trans.set(DOC_CODCF,codcli == 0L ? "" : format("%ld",codcli)); trans.set(DOC_CODCF,codcli == 0L ? "" : format("%ld",codcli));
trans.set(DOC_ANNO,import.get_date("TTDTE").year()); trans.set(DOC_ANNO,import.get_date("TTDTE").year());
// riferimenti // riferimenti
trans.set(DOC_DOC1,external_refnum(import)); trans.set(DOC_DOC1,import.get("TREF"));
trans.set(DOC_NUMDOCRIF,import.get("TREF")); trans.set(DOC_NUMDOCRIF,external_refnum(import));
trans.set(DOC_DATADOCRIF,import.get_date("TSDTE")); trans.set(DOC_DATADOCRIF,external_refdate(import));
TString codval = converti_codval(import.get("THCURR")); TString codval = converti_codval(import.get("THCURR"));
if (!codval.empty()) if (!codval.empty())
{ {
real cambio=import.get_real("THTEXR"); real cambio=import.get_real("THTEXR");
cambio_fisso(codval,cambio); cambio_fisso(codval,cambio);
trans.set(DOC_CAMBIO,cambio); trans.set(DOC_CAMBIO,cambio.string());
trans.set(DOC_CODVAL,codval); trans.set(DOC_CODVAL,codval);
} }
} }
int set_body_bolacq(TImport_file &import, TConfig &trans) bool set_group_movmag(TImport_file & import)
{
static TString _prev;
TString newstr = external_refnum(import);
if (_prev != newstr)
{
_prev = newstr;
return TRUE;
}
return FALSE;
}
int set_body_bolacq(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
int extrarow=0; int extrarow=0;
static long _last_ord = -1; static long _last_ord = -1;
@ -1519,6 +1558,7 @@ int set_body_bolacq(TImport_file &import, TConfig &trans)
} }
trans.set(RDOC_CAUSMAG,causmag); trans.set(RDOC_CAUSMAG,causmag);
trans.set(RDOC_QTA, qta.string()); trans.set(RDOC_QTA, qta.string());
trans.set(RDOC_QTAEVASA, "0");
real price = import.get_real("TPRIC"); real price = import.get_real("TPRIC");
if (price.is_zero()) if (price.is_zero())
{ {
@ -1534,7 +1574,7 @@ int set_body_bolacq(TImport_file &import, TConfig &trans)
} }
trans.set(RDOC_PREZZO, price.string()); trans.set(RDOC_PREZZO, price.string());
if (_ithcheck) if (_ithcheck && dotrans)
{ {
_ithcheck->put("TPROD",import.get("TPROD")); _ithcheck->put("TPROD",import.get("TPROD"));
_ithcheck->put("TSEQ",import.get("TSEQ")); _ithcheck->put("TSEQ",import.get("TSEQ"));
@ -1576,7 +1616,8 @@ void set_head_movmag(TImport_file & import, TConfig &trans)
else else
magno = 28; magno = 28;
} }
if (import.get("TLOCT")=="CICCA") if ((import.get("TLOCT")=="CICCA")
|| (import.get("TLOCT")=="CMINT"))
{ {
import.put("TTYPE", "_L");//conto lavoro import.put("TTYPE", "_L");//conto lavoro
cod0 = '_'; // codice fittizio per simulare IL CONTO LAVORO cod0 = '_'; // codice fittizio per simulare IL CONTO LAVORO
@ -1682,22 +1723,24 @@ void set_head_movmag(TImport_file & import, TConfig &trans)
trans.set(DOC_CAUSMAG,causmag); trans.set(DOC_CAUSMAG,causmag);
trans.set(DOC_NOTE,descrmov); trans.set(DOC_NOTE,descrmov);
trans.set(DOC_NDOC,0L); trans.set(DOC_NDOC,0L);
if (trans.get(DOC_TIPOCF) == "F")
codcli = trascode_for(codcli);
trans.set(DOC_CODCF,codcli == 0L ? "" : format("%ld",codcli)); trans.set(DOC_CODCF,codcli == 0L ? "" : format("%ld",codcli));
trans.set(DOC_ANNO,import.get_date("TTDTE").year()); trans.set(DOC_ANNO,import.get_date("TTDTE").year());
// riferimenti // riferimenti
trans.set(DOC_DOC1,external_refnum(import)); trans.set(DOC_DOC1,import.get("TREF"));
trans.set(DOC_NUMDOCRIF,import.get("TREF")); // trans.set(DOC_NUMDOCRIF,external_refnum(import));
trans.set(DOC_DATADOCRIF,import.get_date("TSDTE")); // trans.set(DOC_DATADOCRIF,external_refdate(import));
TString codval = converti_codval(import.get("THCURR")); TString codval = converti_codval(import.get("THCURR"));
if (!codval.empty()) if (!codval.empty())
{ {
real cambio=import.get_real("THTEXR"); real cambio=import.get_real("THTEXR");
cambio_fisso(codval,cambio); cambio_fisso(codval,cambio);
trans.set(DOC_CAMBIO,cambio); trans.set(DOC_CAMBIO,cambio.string());
trans.set(DOC_CODVAL,codval); trans.set(DOC_CODVAL,codval);
} }
} }
int set_body_movmag(TImport_file &import, TConfig &trans) int set_body_movmag(TImport_file &import, TConfig &trans, const bool dotrans)
{ {
int extrarow=0; int extrarow=0;
static long _last_ord = -1; static long _last_ord = -1;
@ -1725,9 +1768,9 @@ int set_body_movmag(TImport_file &import, TConfig &trans)
int terzista = location2method(import.get_long("TLOCT")); int terzista = location2method(import.get_long("TLOCT"));
if (terzista == 7) if (terzista == 7)
{ {
if (import.get("TCOM").find("PD")>=0) if (codimp == "PD" || (import.get("TCOM").find("PD")>=0))
codmag = "PD1PF"; codmag = "PD1PF";
else if (import.get("TCOM").find("PR")>=0) else if (codimp == "PR" || (import.get("TCOM").find("PR")>=0))
codmag = "PR1PF"; codmag = "PR1PF";
} }
@ -1800,7 +1843,7 @@ int set_body_movmag(TImport_file &import, TConfig &trans)
if (codiva.blank()) if (codiva.blank())
codiva = "20"; codiva = "20";
trans.set(RDOC_CODIVA, codiva); trans.set(RDOC_CODIVA, codiva);
if (_ithcheck) if (_ithcheck && dotrans)
{ {
_ithcheck->put("TPROD",import.get("TPROD")); _ithcheck->put("TPROD",import.get("TPROD"));
_ithcheck->put("TSEQ",import.get("TSEQ")); _ithcheck->put("TSEQ",import.get("TSEQ"));
@ -1816,12 +1859,22 @@ bool filter_bolacq(TImport_file & import)
TFilename chkname(import.name()); TFilename chkname(import.name());
chkname = chkname.path(); chkname = chkname.path();
chkname.add("ithchk"); chkname.add("ithchk");
if (chkname.exist()) chkname.ext("dbf");
if (!chkname.exist())
_check = FALSE; _check = FALSE;
else else
{ {
_ithcheck = new TExternisamfile(chkname, TRUE, TRUE); _ithcheck = new TExternisamfile(chkname, TRUE, TRUE);
_ithcheck->setkey(1); _ithcheck->setkey(1);
_ithcheck->first();
/*TString tprod;
int tseq ;
while (_ithcheck->eof())
{
tprod = _ithcheck->get("TPROD");
tseq = _ithcheck->get_int("TSEQ");
}*/
} }
} }
if (_ithcheck) if (_ithcheck)
@ -1944,11 +1997,11 @@ bool TImporta_BPCS ::importa_ordacq(TMask & m)
{ {
long firm =get_firm(); long firm =get_firm();
clear_docs(firm,"SEOF"); clear_docs(firm,"SEOF");
clear_docs(firm,"TSOF"); // clear_docs(firm,"TSOF");
TImport_file ordacq(m.get(F_PATH),BPCS_ORDACQ); TImport_file ordacq(m.get(F_PATH),BPCS_ORDACQ);
return creadocs("Importazione ordini di acquisto..",firm,ordacq, return creadocs("Importazione ordini di acquisto..",firm,ordacq,
"PORD","PVEND",NULL,NULL,NULL,NULL, "PORD","PVEND",NULL,NULL,NULL,NULL,
set_head_ordacq,set_body_ordacq,filter_ordacq, tipocf_for); set_head_ordacq,set_body_ordacq,filter_ordacq, NULL, tipocf_for);
} }
bool TImporta_BPCS ::importa_ordcli(TMask & m) bool TImporta_BPCS ::importa_ordcli(TMask & m)
@ -1959,12 +2012,12 @@ bool TImporta_BPCS ::importa_ordcli(TMask & m)
TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS); TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS);
bool ok = creadocs("Importazione ordini cliente (1)..",firm,released_orders, bool ok = creadocs("Importazione ordini cliente (1)..",firm,released_orders,
NULL,"SCUST","SRDTE","SOFAC",NULL,NULL, NULL,"SCUST","SRDTE","SOFAC",NULL,NULL,
set_head_R_ordcli,set_body_R_ordcli,filter_R_ordcli, tipocf_cli); set_head_R_ordcli,set_body_R_ordcli,filter_R_ordcli, NULL, tipocf_cli);
TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD); TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD);
ok = ok && creadocs("Importazione ordini cliente (2)..",firm,firm_orders, ok = ok && creadocs("Importazione ordini cliente (2)..",firm,firm_orders,
NULL,"FPPVND","FRDTE","FPFAC",NULL,NULL, NULL,"FPPVND","FRDTE","FPFAC",NULL,NULL,
set_head_F_ordcli,set_body_F_ordcli,filter_F_ordcli, tipocf_cli); set_head_F_ordcli,set_body_F_ordcli,filter_F_ordcli, NULL, tipocf_cli);
return ok; return ok;
} }
@ -1972,17 +2025,25 @@ bool TImporta_BPCS ::importa_ordprod(TMask & m)
{ {
long firm =get_firm(); long firm =get_firm();
if (yesno_box("Cancello gli ordini MSP?")) if (yesno_box("Cancello gli ordini MSP?"))
clear_docs(firm,"MSP"); if (noyes_box("Cancello solo gli MSP non confermati (n. >= 900000)?"))
clear_docs(firm,"SEFA"); clear_docs(firm,"MSP", NULL, NULL, 900000L);
else
clear_docs(firm,"MSP");
if (yesno_box("Cancello gli ordini SEFA?"))
clear_docs(firm,"SEFA");
bool ok = TRUE;
TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS); TImport_file released_orders(m.get(F_PATH),BPCS_SHOPORDS);
bool ok = creadocs("Importazione ordini di produzione Segrate (Released)..",firm,released_orders, ok = ok && creadocs("Importazione ordini di produzione Segrate (Released)..",firm,released_orders,
"SORD",NULL,"SRDTE","SOFAC",NULL,NULL, "SORD",NULL,"SRDTE","SOFAC",NULL,NULL,
set_head_R_ordprod,set_body_R_ordprod,filterRordprodSE, tipocf_null); set_head_R_ordprod,set_body_R_ordprod,filterRordprodSE, NULL, tipocf_null);
TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD); TImport_file firm_orders(m.get(F_PATH),BPCS_FIRMORD);
ok = ok && creadocs("Importazione ordini di produzione Segrate (Firm Planned)..",firm,firm_orders, ok = ok && creadocs("Importazione ordini di produzione Segrate (Firm Planned)..",firm,firm_orders,
NULL,NULL,"FRDTE","FPFAC",NULL,NULL, "**900000",NULL,"FRDTE","FPFAC",NULL,NULL,
set_head_F_ordprod,set_body_F_ordprod,filterFordprodSE, tipocf_null); set_head_F_ordprod,set_body_F_ordprod,filterFordprodSE, NULL, tipocf_null);
return ok; return ok;
} }
@ -2017,7 +2078,7 @@ bool TImporta_BPCS::importa_bolacq(TImport_file &movmag, bool segrate, bool trie
} }
ok &= creadocs("Importazione bolle di acquisto di Segrate..",firm, movmag, ok &= creadocs("Importazione bolle di acquisto di Segrate..",firm, movmag,
NULL,"TVEND","TTDTE", "THRNO","TTYPE","TREF", NULL,"TVEND","TTDTE", "THRNO","TTYPE","TREF",
set_head_bolacq,set_body_bolacq,filter_bolacqSE, tipocf_for, !testonly); set_head_bolacq,set_body_bolacq,filter_bolacqSE, set_group_movmag, tipocf_for, !testonly);
if (!testonly) if (!testonly)
{ {
confirm_docs("SEBA",&fromdate,&todate); confirm_docs("SEBA",&fromdate,&todate);
@ -2033,7 +2094,7 @@ bool TImporta_BPCS::importa_bolacq(TImport_file &movmag, bool segrate, bool trie
} }
ok &= creadocs("Importazione bolle di acquisto di Trieste..",firm, movmag, ok &= creadocs("Importazione bolle di acquisto di Trieste..",firm, movmag,
NULL,"TVEND","TTDTE", "THRNO","TTYPE","TREF", NULL,"TVEND","TTDTE", "THRNO","TTYPE","TREF",
set_head_bolacq,set_body_bolacq,filter_bolacqTS, tipocf_for, !testonly); set_head_bolacq,set_body_bolacq,filter_bolacqTS, set_group_movmag, tipocf_for, !testonly);
if (!testonly) if (!testonly)
{ {
confirm_docs("TSBA",&fromdate,&todate); confirm_docs("TSBA",&fromdate,&todate);
@ -2078,8 +2139,8 @@ bool TImporta_BPCS::importa_movmag(TImport_file &movmag, bool segrate, bool trie
clear_docs(firm, "SEMM",&fromdate,&todate); clear_docs(firm, "SEMM",&fromdate,&todate);
} }
ok &= creadocs("Importazione movimenti magazzino di Segrate..",firm, movmag, ok &= creadocs("Importazione movimenti magazzino di Segrate..",firm, movmag,
NULL,"TVEND","TTDTE","TTYPE","TREF",NULL, NULL,"TVEND","TTDTE","TTYPE",NULL,NULL,
set_head_movmag,set_body_movmag,filter_movmagSE, tipocf_movmag, !testonly); set_head_movmag,set_body_movmag,filter_movmagSE, set_group_movmag, tipocf_movmag, !testonly);
if (!testonly) if (!testonly)
{ {
confirm_docs("SEBE",&fromdate,&todate); confirm_docs("SEBE",&fromdate,&todate);
@ -2103,7 +2164,7 @@ bool TImporta_BPCS::importa_movmag(TImport_file &movmag, bool segrate, bool trie
} }
ok &= creadocs("Importazione movimenti magazzino di Trieste..",firm, movmag, ok &= creadocs("Importazione movimenti magazzino di Trieste..",firm, movmag,
NULL,"TVEND","TTDTE","TTYPE","TREF",NULL, NULL,"TVEND","TTDTE","TTYPE","TREF",NULL,
set_head_movmag,set_body_movmag,filter_movmagTS, tipocf_movmag, !testonly); set_head_movmag,set_body_movmag,filter_movmagTS, set_group_movmag, tipocf_movmag, !testonly);
if (!testonly) if (!testonly)
{ {
confirm_docs("TSBE",&fromdate,&todate); confirm_docs("TSBE",&fromdate,&todate);
@ -2200,8 +2261,8 @@ void TImporta_automag_BPCS::main_loop()
const TDate &fromdate=(m.get_date(F_MOVMAG_FROMD)); const TDate &fromdate=(m.get_date(F_MOVMAG_FROMD));
const TDate &todate=(m.get_date(F_MOVMAG_TOD)); const TDate &todate=(m.get_date(F_MOVMAG_TOD));
if (importa_bolacq(movmag, m.get_bool(F_MOVMAG_SE),m.get_bool(F_MOVMAG_TS), fromdate, todate, m.get_bool(F_TESTONLY),m.get_bool(F_NOCLEAR))) if (importa_movmag(movmag, m.get_bool(F_MOVMAG_SE),m.get_bool(F_MOVMAG_TS), fromdate, todate, m.get_bool(F_TESTONLY),m.get_bool(F_NOCLEAR)))
importa_movmag(movmag, m.get_bool(F_MOVMAG_SE),m.get_bool(F_MOVMAG_TS), fromdate, todate, m.get_bool(F_TESTONLY),m.get_bool(F_NOCLEAR)); importa_bolacq(movmag, m.get_bool(F_MOVMAG_SE),m.get_bool(F_MOVMAG_TS), fromdate, todate, m.get_bool(F_TESTONLY),m.get_bool(F_NOCLEAR));
message_box("Fine importazione"); message_box("Fine importazione");
} }

View File

@ -44,4 +44,5 @@
#define G_SERVICE_10 110 #define G_SERVICE_10 110
#define G_SERVICE_11 114 #define G_SERVICE_11 114
#define G_SERVICE_12 115 #define G_SERVICE_12 115
#define G_SERVICE_13 116

View File

@ -336,29 +336,37 @@ bool find_wrongcycle()
} }
class TMov_diff_inv : public TConfig class TMov_diff_inv : public TConfig
{ {
int _nriga; int _nriga;
TDate _al;
bool _use_giac_al;
TArticolo_giacenza_data _art;
public: public:
void set_header(const char *imp_filter); void set_header(const char *imp_filter);
int righe () {return _nriga;} int righe () {return _nriga;}
bool max_righe () {return _nriga > 99 ;} bool max_righe () {return _nriga > 99 ;}
void locate_bpcs_stock(const TString &codice , int mag , const TString &location, TImport_file &mag_bpcs, real &giac) ; void locate_bpcs_stock(const TString &codice , int mag , const TString &location, TImport_file &mag_bpcs, real &giac) ;
int compare_stocks(TLocalisamfile &mag, const real & bpcs_stock, bool giac); int compare_stocks(TLocalisamfile &mag, const real & bpcs_stock, bool giac);
TMov_diff_inv (int num); TMov_diff_inv (int num, const char * al, bool giac_al);
~TMov_diff_inv() {}
} ; } ;
TMov_diff_inv::TMov_diff_inv (int num) : TMov_diff_inv::TMov_diff_inv (int num, const char * al, bool giac_al) :
TConfig (format("ND_%05d.ini",num)) , _nriga(0) TConfig (format("ND_%05d.ini",num)) , _nriga(0), _al(al),
_use_giac_al(giac_al), _art()
{} {}
void TMov_diff_inv::locate_bpcs_stock(const TString &codice , int mag , const TString &location, TImport_file &mag_bpcs, real & giac) void TMov_diff_inv::locate_bpcs_stock(const TString &codice , int mag , const TString &location, TImport_file &mag_bpcs, real & giac)
{ {
int direction = 0;
long diff = 0; long diff = 0;
/*
int direction = 0;
do { do {
diff = codice.compare(mag_bpcs.get("CODICE")); diff = codice.compare(mag_bpcs.get("CODICE"));
if (diff == 0)
diff = mag - mag_bpcs.get_int("MAG");
if (diff == 0) if (diff == 0)
diff = mag - mag_bpcs.get_int("MAG");
if (diff == 0)
diff = location.compare(mag_bpcs.get("LOC")); diff = location.compare(mag_bpcs.get("LOC"));
if (diff > 0 && direction != -1) if (diff > 0 && direction != -1)
{ {
@ -373,15 +381,24 @@ void TMov_diff_inv::locate_bpcs_stock(const TString &codice , int mag , const TS
direction = 0; direction = 0;
} }
} while (diff*direction>0 && direction != 0 ); } while (diff*direction>0 && direction != 0 );
*/
mag_bpcs.zero();
mag_bpcs.put("MAG", format("%d",mag));
mag_bpcs.put("LOC", location);
mag_bpcs.put("CODICE", codice);
diff = mag_bpcs.read(_isequal);
if (diff != 0) if (diff != 0)
giac = ZERO; giac = ZERO;
else else
giac = mag_bpcs.get_real("QTY"); giac = mag_bpcs.get_real("QTY");
} }
int TMov_diff_inv::compare_stocks(TLocalisamfile &mag, const real & val_bpcs, bool giac) int TMov_diff_inv::compare_stocks(TLocalisamfile &mag, const real & val_bpcs, bool giac)
{ {
if (!giac) if (!giac)
return _nriga; return _nriga;
/*
TRectype newmag = mag.curr(); TRectype newmag = mag.curr();
if (mag.read() != NOERR) if (mag.read() != NOERR)
mag.curr() = newmag; mag.curr() = newmag;
@ -390,6 +407,33 @@ int TMov_diff_inv::compare_stocks(TLocalisamfile &mag, const real & val_bpcs, bo
val = (mag.get_real("VEN")); val = (mag.get_real("VEN"));
real diff = (val_bpcs - val); real diff = (val_bpcs - val);
diff.round(3); diff.round(3);
*/
real val;
if (_use_giac_al)
{
_art.read(mag.get("CODART"));
TString16 codmag(mag.get("CODMAG"));
TString16 annoes(mag.get("ANNOES"));
_art.al(_al, codmag);
const int i = _art.find_mag(annoes, codmag);
TRectype & mag1 = _art.mag(annoes)[i];
val = mag1.get_real("GIAC");
if (!giac)
val = (mag1.get_real("VEN"));
}
else
{
TRectype newmag = mag.curr();
if (mag.read() != NOERR)
mag.curr() = newmag;
val = mag.get_real("GIAC");
if (!giac)
val = (mag.get_real("VEN"));
}
real diff = (val_bpcs - val);
diff.round(3);
const real piotta = "900000.0"; const real piotta = "900000.0";
while (diff >= 0.001 || diff <= -0.001) while (diff >= 0.001 || diff <= -0.001)
{ {
@ -416,7 +460,7 @@ int TMov_diff_inv::compare_stocks(TLocalisamfile &mag, const real & val_bpcs, bo
void TMov_diff_inv::set_header(const char * imp_filter) void TMov_diff_inv::set_header(const char * imp_filter)
{ {
TDate today(TODAY); // TDate today(TODAY);
set_paragraph("Transaction"); set_paragraph("Transaction");
set("Action","INSERT"); set("Action","INSERT");
set("Mode","AUTO"); set("Mode","AUTO");
@ -426,14 +470,20 @@ void TMov_diff_inv::set_header(const char * imp_filter)
set("CODNUM",codimp); set("CODNUM",codimp);
set("CAUSMAG",""); set("CAUSMAG","");
set("NOTE","\"Differenze inventariali rilevate per confronto con gli archivi di BPCS\""); set("NOTE","\"Differenze inventariali rilevate per confronto con gli archivi di BPCS\"");
set("DATADOC",today.string()); //set("DATADOC",today.string());
set("DATADOC",_al.string());
} }
void sinchro_stock(const TMask & m, const char * imp_filter) void sinchro_stock(const TMask & m, const char * imp_filter)
{ {
if (!yesno_box(format("Confermi l'allineamento giacenze per %s dal file %s?", imp_filter, BPCS_STOCK))) if (!yesno_box(format("Confermi l'allineamento giacenze per %s dal file %s?", imp_filter, BPCS_STOCK)))
return ; return ;
TDate today(TODAY); const bool launch_ve0 = yesno_box("Devo registrare immediatamente i documenti?");
TDate day(TODAY);
TString16 data(m.get(S_GIAC_AL));
if (data.not_empty())
day = data;
const bool use_al = m.get_bool(S_USE_AL);
TIndwin info(60,format("Allineamento giacenze per %s...",imp_filter),FALSE,FALSE); TIndwin info(60,format("Allineamento giacenze per %s...",imp_filter),FALSE,FALSE);
TImport_file mag_bpcs(m.get(F_PATH),BPCS_STOCK); TImport_file mag_bpcs(m.get(F_PATH),BPCS_STOCK);
TLocalisamfile mag(LF_MAG); TLocalisamfile mag(LF_MAG);
@ -445,7 +495,7 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
delete_files("ND_*.ini"); delete_files("ND_*.ini");
TMov_diff_inv *action; TMov_diff_inv *action;
action = new TMov_diff_inv(movimenti++); action = new TMov_diff_inv(movimenti++,day, use_al);
action->set_header(imp_filter); action->set_header(imp_filter);
// Crea i mag di eurocampo eventualemnte mancanti // Crea i mag di eurocampo eventualemnte mancanti
@ -457,10 +507,11 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
nummag = mag_bpcs.get_int("MAG"); nummag = mag_bpcs.get_int("MAG");
num_mag2main_imp(nummag, codimp); num_mag2main_imp(nummag, codimp);
if (codimp == imp_filter) if (codimp == imp_filter)
{ {
imploc2codmagdep(codimp, mag_bpcs.get("LOC"), codmag); TString16 loc = mag_bpcs.get("LOC");
imploc2codmagdep(codimp, loc, codmag);
//num_mag2cod_imp(nummag, codmag); //num_mag2cod_imp(nummag, codmag);
mag.put("ANNOES", today.year()); mag.put("ANNOES", day.year());
mag.put("CODART", codart); mag.put("CODART", codart);
mag.put("CODMAG", codmag); mag.put("CODMAG", codmag);
if (mag.read()!=NOERR) if (mag.read()!=NOERR)
@ -491,14 +542,14 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
if (!skip) if (!skip)
{ {
int nriga = 0; int nriga = 0;
mag.put("ANNOES", today.year()); mag.put("ANNOES", day.year());
mag.put("CODART", codart); mag.put("CODART", codart);
mag.put("NRIGA", ++nriga); mag.put("NRIGA", ++nriga);
mag.setkey(1); mag.setkey(1);
while (mag.read()==NOERR) while (mag.read()==NOERR)
mag.put("NRIGA", ++nriga); mag.put("NRIGA", ++nriga);
mag.zero(' '); mag.zero(' ');
mag.put("ANNOES", today.year()); mag.put("ANNOES", day.year());
mag.put("CODART", codart); mag.put("CODART", codart);
mag.put("NRIGA", nriga); mag.put("NRIGA", nriga);
mag.put("CODMAG", codmag); mag.put("CODMAG", codmag);
@ -516,7 +567,7 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
mag_bpcs.first(); mag_bpcs.first();
mag.setkey(1); mag.setkey(1);
mag.zero(); mag.zero();
mag.put("ANNOES", today.year()); mag.put("ANNOES", day.year());
ok = mag.read(_isgteq)==NOERR; ok = mag.read(_isgteq)==NOERR;
// magazzino Eurocampo vs mag BPCS // magazzino Eurocampo vs mag BPCS
while (ok) while (ok)
@ -555,13 +606,13 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
{ {
if (err != NOERR) if (err != NOERR)
break; break;
if ((/*codimp == "PR" || codimp == "PD" ||*/ codimp == imp_filter )&& nummag>0) if ((((codimp == "SE1" || codimp == "TS1") && coddep == "07") || codimp == imp_filter ) && nummag>0)
{ {
coddep2location(coddep, codlocation); coddep2location(codmag, coddep, codlocation, nummag);
/*if (codmag == "SE1" && coddep == "07") if (codmag == "SE1" && coddep == "07")
nummag = 91; nummag = 91;
if (codmag == "TS1" && coddep == "07") if (codmag == "TS1" && coddep == "07")
nummag = 92;*/ nummag = 92;
action->locate_bpcs_stock(codart, nummag, codlocation, mag_bpcs, bpcsstock); action->locate_bpcs_stock(codart, nummag, codlocation, mag_bpcs, bpcsstock);
action->compare_stocks(mag, bpcsstock, TRUE); action->compare_stocks(mag, bpcsstock, TRUE);
/*if (FALSE && nummag < 30) // elimina /*if (FALSE && nummag < 30) // elimina
@ -570,7 +621,7 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
action->compare_stocks(mag, bpcsstock, FALSE); action->compare_stocks(mag, bpcsstock, FALSE);
}*/ }*/
} }
if (codmag == "SE3" || codmag == "TS3" || coddep == "07") if (codmag == "SE3" || codmag == "TS3" /*|| coddep == "07"*/)
{ {
// elimina vecchimagazzini SE3/TS3 e la vecchia codifica del magazzino di padova/parma // elimina vecchimagazzini SE3/TS3 e la vecchia codifica del magazzino di padova/parma
bpcsstock = ZERO; bpcsstock = ZERO;
@ -578,10 +629,14 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
} }
if (action->max_righe()) if (action->max_righe())
{ {
TExternal_app gestdoc(format("ve0.exe -1 -i%s",(const char *)action->name())); TString80 filename(action->name());
delete action; delete action;
gestdoc.run(); if (launch_ve0)
action = new TMov_diff_inv(movimenti++); {
TExternal_app gestdoc(format("ve0.exe -1 -i%s",(const char *)filename));
gestdoc.run();
}
action = new TMov_diff_inv(movimenti++, day, use_al);
action->set_header(imp_filter); action->set_header(imp_filter);
} }
} }
@ -593,9 +648,13 @@ void sinchro_stock(const TMask & m, const char * imp_filter)
if (action->righe()) if (action->righe())
{ {
TExternal_app gestdoc(format("ve0.exe -1 -i%s",(const char *)action->name())); TString80 filename(action->name());
delete action; delete action;
gestdoc.run(); if (launch_ve0)
{
TExternal_app gestdoc(format("ve0.exe -1 -i%s",(const char *)filename));
gestdoc.run();
}
} }
} }
@ -895,7 +954,7 @@ void unify_mags(const TMask & m)
int err; int err;
TLocalisamfile mag(LF_MAG), TLocalisamfile mag(LF_MAG),
rmovmag(LF_RMOVMAG), movmag(LF_MOVMAG); rmovmag(LF_RMOVMAG), movmag(LF_MOVMAG);
TProgind info(80,"",FALSE,TRUE); TProgind info(80,"",TRUE,TRUE);
unify_mags_reset_bar(info, "tabella causali mag", caumag.items()); unify_mags_reset_bar(info, "tabella causali mag", caumag.items());
err = caumag.first(); err = caumag.first();
@ -904,6 +963,8 @@ void unify_mags(const TMask & m)
unify_magcode("S10", caumag); unify_magcode("S10", caumag);
err = caumag.next(); err = caumag.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
message_box("Modificare a mano la tabella magazzini"); message_box("Modificare a mano la tabella magazzini");
unify_mags_reset_bar(info, "tabella impianti", impianti.items()); unify_mags_reset_bar(info, "tabella impianti", impianti.items());
@ -915,6 +976,8 @@ void unify_mags(const TMask & m)
unify_magcode("S8", impianti); unify_magcode("S8", impianti);
err = impianti.next(); err = impianti.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
unify_mags_reset_bar(info, "tabella linee di produzione", linee.items()); unify_mags_reset_bar(info, "tabella linee di produzione", linee.items());
linee.setkey(2); linee.setkey(2);
@ -925,14 +988,18 @@ void unify_mags(const TMask & m)
unify_magcode("S8", linee); unify_magcode("S8", linee);
err = linee.next(); err = linee.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
unify_mags_reset_bar(info, "giacenze", mag.items()); unify_mags_reset_bar(info, "giacenze", mag.items());
err = mag.first(); err = mag.first();
while (err==NOERR) while (err==NOERR)
{ {
//unify_magcode("CODMAG", mag); unify_magcode("CODMAG", mag);
err = mag.next(); err = mag.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
unify_mags_reset_bar(info, "movimenti di magazzino", rmovmag.items()); unify_mags_reset_bar(info, "movimenti di magazzino", rmovmag.items());
@ -943,6 +1010,8 @@ void unify_mags(const TMask & m)
unify_magcode("CODMAG", rmovmag); unify_magcode("CODMAG", rmovmag);
err = rmovmag.next(); err = rmovmag.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
TLocalisamfile doc(LF_DOC),rdoc(LF_RIGHEDOC); TLocalisamfile doc(LF_DOC),rdoc(LF_RIGHEDOC);
unify_mags_reset_bar(info, "righe documenti", rdoc.items()); unify_mags_reset_bar(info, "righe documenti", rdoc.items());
@ -976,6 +1045,8 @@ void unify_mags(const TMask & m)
} }
err = rdoc.next(); err = rdoc.next();
info.addstatus(1); info.addstatus(1);
if (info.iscancelled())
return;
} }
} }
@ -1200,30 +1271,64 @@ void find_wrong_um(const TMask & m)
} }
} }
if (codeum.blank()) if (codeum.blank())
error_box("Unità di misura nulla per %s", (const char *)coddist); if (yesno_box("Unità di misura nulla per %s. Aggiungo", (const char *)coddist))
{
umart.put("CODART",coddist);
umart.put("NRIGA","2");
umart.put("UM",dist.get("UM"));
umart.put("FC",1);
err = umart.write();
if (err != NOERR)
warning_box("Errore in scrittura UM");
}
} }
} }
else if (coddist.find("__")>=0) else if (coddist.find("__")>=0)
{ {
// variante di prod, probabilmente da esprimere in batch di prod // variante di prod, probabilmente da esprimere in batch di prod
if (codeum != "BP") bool chk_ricetta = FALSE;
bool chk_distinta = FALSE;
real bp=ZERO;
if (codeum != "BP") // oh, guarda, la UM non è uguale a batch, caso sospetto!
{ {
// oh, guarda, la UM non è uguale a batch, caso sospetto!
real bp;
umart.setkey(2); umart.setkey(2);
umart.put("CODART",coddist); umart.put("CODART",coddist);
umart.put("UM","BP"); umart.put("UM","BP");
if ((err = umart.read())==NOERR) if ((err = umart.read())==NOERR)
bp = umart.get_real("FC"); bp = umart.get_real("FC");
umart.setkey(1); umart.setkey(1);
if (bp.is_zero() || bp == 1.0)
chk_distinta = TRUE;
}
else
{
umart.setkey(2);
umart.put("CODART",coddist);
umart.put("UM","BP");
if ((err = umart.read())==NOERR)
bp = umart.get_real("FC");
umart.setkey(1);
umart.put("CODART",coddist);
umart.put("NRIGA","1");
err = umart.read();
if (err==NOERR)
if (umart.get("UM")=="KG")
chk_ricetta = TRUE;
else
if (bp == 1.0)
chk_distinta = TRUE;
}
if (chk_distinta)
{
real total= ZERO; real total= ZERO;
rdist.zero(); rdist.zero();
rdist.put("CODDIST", coddist); rdist.put("CODDIST", coddist);
if (bp.is_zero() && rdist.read()) if (rdist.read())
{ {
int newbp=0; int newbp=0;
while (bp != 1.0 && coddist == rdist.get("CODDIST")) while (bp <= 1.0 && coddist == rdist.get("CODDIST") //
&& (rdist.get("TIPO")!="V"))
{ {
code = rdist.get("CODCOMP"); code = rdist.get("CODCOMP");
real expr = rdist.get_real("EXPR"); real expr = rdist.get_real("EXPR");
@ -1292,7 +1397,7 @@ void find_wrong_um(const TMask & m)
umart.put("FC",bp); umart.put("FC",bp);
if ((err = umart.write())!=NOERR) if ((err = umart.write())!=NOERR)
{ {
// umart.rewrite();
} }
dist.put("UM","BP"); dist.put("UM","BP");
err = dist.rewrite(); err = dist.rewrite();
@ -1301,6 +1406,41 @@ void find_wrong_um(const TMask & m)
warning_box("UM di distinta per %s %s", (const char *)coddist, (const char *)codeum); warning_box("UM di distinta per %s %s", (const char *)coddist, (const char *)codeum);
} }
} }
if (chk_ricetta)
{
real totale_ricetta = ZERO;
rdist.zero();
rdist.put("CODDIST", coddist);
rdist.read(_isgteq+_nolock);
while (coddist == rdist.get("CODDIST"))
{
code = rdist.get("CODCOMP");
real expr = rdist.get_real("EXPR");
if (rdist.get("UM") == "KG")
totale_ricetta = totale_ricetta + expr;
if (rdist.get("UM") == "GR")
totale_ricetta = totale_ricetta + (expr/1000.0);
rdist.next();
}
if (bp != totale_ricetta && (((bp-totale_ricetta) >0.001 ) ||
((totale_ricetta-bp) >0.001 )) )
{
TString ts(totale_ricetta.string());
if ((totale_ricetta == 10000.0 || totale_ricetta == 1000.0 ))
{
if (yesno_box("Batch di produzione per %s a %s; lo porto a %s",
(const char *)coddist, (const char *)bp.string(), (const char *)ts))
{
umart.put("CODART",coddist);
umart.put("UM","BP");
umart.put("FC", totale_ricetta);
umart.rewrite();
}
}// else
// warning_box("Batch di produzione per %s a %s, totale componenti %s",
// (const char *)coddist, (const char *)bp.string(), (const char *)ts);
}
}
} }
info.addstatus(1); info.addstatus(1);
err = dist.prev(); err = dist.prev();
@ -1414,9 +1554,137 @@ bool TService_mask::on_field_event(TOperable_field& o, TField_event e, long joll
return TRUE; return TRUE;
} }
void converti_magazzino(TLocalisamfile & file, const char *campo, const char *campovecchio , const char *camponuovo)
{
file.first();
while (!file.eof())
{
if (file.get(campo) == campovecchio)
{
file.put(campo,camponuovo);
file.rewrite();
}
file.next();
do_events();
}
}
void uniscimag(const char *campovecchio , const char *camponuovo)
{
TLocalisamfile file(LF_MAG), nfile(LF_MAG);;
TString codart= "";
real qentr, qusc, qacq, qven , qrimin, qgiac;
real vqentr, vqusc, vqacq, vqven , vqrimin;
int nriga = 1;
int annoes;
bool done=TRUE;
file.first();
while (!file.eof())
{
if (codart == "")
{
codart = file.get("CODART");
annoes= file.get_int("ANNOES");
done = TRUE;
}
if (file.get("CODMAG") == campovecchio)
{
qentr = file.get_real("ENT");
qusc = file.get_real("USC");
qacq = file.get_real("ACQ");
qven = file.get_real("VEN");
qrimin = file.get_real("RIM");
vqentr = file.get_real("VALENT");
vqusc = file.get_real("VALUSC");
vqacq = file.get_real("VALACQ");
vqven = file.get_real("VALVEN");
vqrimin = file.get_real("VALRIM");
qgiac = file.get_real("GIAC");
file.put("ENT", ZERO);
file.put("USC", ZERO);
file.put("ACQ",ZERO);
file.put("VEN",ZERO);
file.put("RIM",ZERO);
file.put("VALENT",ZERO);
file.put("VALUSC",ZERO);
file.put("VALACQ",ZERO);
file.put("VALVEN",ZERO);
file.put("VALRIM",ZERO);
file.put("GIAC",ZERO);
// file.remove(); can' remove without renumbering
//file.rewrite();
done = FALSE;
}
else if (file.get("CODMAG") == camponuovo && !done)
{
qentr += file.get_real("ENT");
qusc += file.get_real("USC");
qacq += file.get_real("ACQ");
qven += file.get_real("VEN");
qrimin += file.get_real("RIM");
vqentr += file.get_real("VALENT");
vqusc += file.get_real("VALUSC");
vqacq += file.get_real("VALACQ");
vqven += file.get_real("VALVEN");
vqrimin += file.get_real("VALRIM");
qgiac += file.get_real("GIAC");
file.put("ENT", qentr);
file.put("USC", qusc);
file.put("ACQ",qacq);
file.put("VEN",qven);
file.put("RIM",qrimin);
file.put("VALENT",vqentr);
file.put("VALUSC",vqusc);
file.put("VALACQ",vqacq);
file.put("VALVEN",vqven);
file.put("VALRIM",vqrimin);
file.put("GIAC",qgiac);
file.put("CODMAG",camponuovo);
//file.rewrite();
done = TRUE;
}
nriga = file. get_int("NRIGA");
file.next();
if (file.eof() || codart != file.get("CODART"))
{
if (!done)
{
nfile.zero();
nfile.put("ENT", qentr);
nfile.put("USC", qusc);
nfile.put("ACQ",qacq);
nfile.put("VEN",qven);
nfile.put("RIM",qrimin);
nfile.put("VALENT",vqentr);
nfile.put("VALUSC",vqusc);
nfile.put("VALACQ",vqacq);
nfile.put("VALVEN",vqven);
nfile.put("VALRIM",vqrimin);
nfile.put("GIAC",qgiac);
nfile.put("CODMAG",camponuovo);
nfile.put("CODART", codart);
nfile.put("ANNOES", codart);
nfile.put("NRIGA", nriga+1);
//nfile.write();
}
codart = file.get("CODART");
annoes= file.get_int("ANNOES");
done = TRUE;
qentr = qusc = qacq = qven = qrimin = vqentr = vqusc = vqacq = vqven = vqrimin = qgiac = ZERO;
}
do_events();
}
}
void TCover_services::main_loop() void TCover_services::main_loop()
{ {
TLocalisamfile rdoc(LF_RIGHEDOC), rmovmag(LF_RMOVMAG), mag(LF_MAG);
//converti_magazzino(rdoc, "CODMAG", "COMSE", "SE1X0");
//converti_magazzino(rdoc, "CODMAGC", "COMSE", "SE1X0");
//converti_magazzino(rmovmag, "CODMAG", "COMSE", "SE1X0");
//uniscimag("COM", "SE1X0");
TService_mask m; TService_mask m;
while (m.run()!=K_QUIT); while (m.run()!=K_QUIT);
} }

View File

@ -15,6 +15,8 @@
#define S_LASTBOLLA 202 #define S_LASTBOLLA 202
#define S_MOVMAG_FROMD 203 #define S_MOVMAG_FROMD 203
#define S_MOVMAG_TOD 204 #define S_MOVMAG_TOD 204
#define S_GIAC_AL 205
#define S_USE_AL 206
#define G_ARTICOLI 10 #define G_ARTICOLI 10
#define G_DISTINTE 20 #define G_DISTINTE 20
@ -24,7 +26,9 @@
#define G_SERVICE_2 102 #define G_SERVICE_2 102
#define G_SERVICE_3 103 #define G_SERVICE_3 103
#define G_SERVICE_8 108 #define G_SERVICE_8 108
#define G_SERVICE_9 109
#define G_SERVICE_10 110 #define G_SERVICE_10 110
#define G_SERVICE_11 114 #define G_SERVICE_11 114
#define G_SERVICE_12 115 #define G_SERVICE_12 115
#define G_SERVICE_13 116

View File

@ -1,4 +1,4 @@
#include "dbcv00a.h" #include "dbcv02a.h"
#define G_ARTICOLI 10 #define G_ARTICOLI 10
#define G_DISTINTE 20 #define G_DISTINTE 20
#define G_MOVMAG 30 #define G_MOVMAG 30
@ -63,7 +63,7 @@ BEGIN
ITEM "12|Ricerca errori nel ciclo di lavoro" ITEM "12|Ricerca errori nel ciclo di lavoro"
MESSAGE HIDE, G_SERVICE@ MESSAGE HIDE, G_SERVICE@
ITEM "13|Allineamento giacenze" ITEM "13|Allineamento giacenze"
MESSAGE HIDE, G_SERVICE@ MESSAGE HIDE, G_SERVICE@ |SHOW, G_SERVICE_13@
ITEM "14|Scollegamento mov.mag da documenti" ITEM "14|Scollegamento mov.mag da documenti"
MESSAGE HIDE, G_SERVICE@ MESSAGE HIDE, G_SERVICE@
ITEM "16|Unifica magazzini terzisti" ITEM "16|Unifica magazzini terzisti"
@ -104,6 +104,18 @@ BEGIN
GROUP G_SERVICE G_SERVICE_10 GROUP G_SERVICE G_SERVICE_10
END END
DATE S_GIAC_AL
BEGIN
PROMPT 3 5 "Giacenze al:"
GROUP G_SERVICE G_SERVICE_13
END
BOOLEAN S_USE_AL
BEGIN
PROMPT 43 5 "Calcolo le giacenze a questa data"
GROUP G_SERVICE G_SERVICE_13
END
NUM S_LASTBOLLA 5 NUM S_LASTBOLLA 5
BEGIN BEGIN
PROMPT 3 6 "Ultima n.bolla BPCS Cover compresa nel pending " PROMPT 3 6 "Ultima n.bolla BPCS Cover compresa nel pending "

884
db/dbcv03.cpp Executable file
View File

@ -0,0 +1,884 @@
#include "dbcv.h"
#include "dbcv09.h"
#include "dbcv00a.h"
#include "dbcv01.h"
#include "printer.h"
#include <automask.h>
#include <applicat.h>
#include <execp.h>
#include "..\mg\anamag.h"
#include "..\mg\mag.h"
#include "..\include\doc.h"
#include "..\include\rdoc.h"
#include "..\ve\velib.h"
#include "dbcvlib.h"
class TImpchk_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImpchk_mask() :TAutomask("dbcv03a.msk"){}
};
bool TImpchk_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
return TRUE;
}
class TImpchk_BPCS : public TSkeleton_application
{
TLocalisamfile * _dist, *_rdist, * _anamag, *_umart, *_codcorr,*_mag;
private:
void delete_ghosts();
void delete_arts();
bool delete_boms();
int read_last_rdist(const char *item_code);
bool read_is_dist(const char *item_code);
bool is_ghost(const char *item_code);
const char * read_first_um(const char *item_code);
void clear_docs(long firm, const char * num, const TDate *fromdate=NULL, const TDate *todate=NULL);
protected:
void add_log_row(TPrinter &prn, TPrintrow &oldrow, const char *m);
bool compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield, const TString & impfield);
bool compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield, const real & impfield);
bool compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield, const long impfield);
protected:
virtual bool create();
virtual bool destroy();
bool chkimp_boms(TMask &m);
bool cambia_gmc(TMask & m);
bool chkimp_arts(TMask &m);
bool importa_ums_BP(TMask &m);
protected:
virtual void main_loop() ;
};
bool TImpchk_BPCS::create()
{
open_files(LF_TAB, LF_TABCOM, LF_CLIFO, LF_CFVEN, LF_RIGHEDOC, LF_MOVMAG, LF_RMOVMAG, 0);
_dist = new TLocalisamfile(LF_DIST);
_rdist = new TLocalisamfile(LF_RDIST);
_anamag = new TLocalisamfile(LF_ANAMAG);
_umart = new TLocalisamfile(LF_UMART);
_codcorr = new TLocalisamfile(LF_CODCORR);
_mag = new TLocalisamfile(LF_MAG);
return TSkeleton_application::create();
}
bool TImpchk_BPCS::destroy()
{
delete _dist;
delete _rdist;
delete _anamag;
delete _umart;
delete _codcorr;
delete _mag;
return TSkeleton_application::destroy();
}
int TImpchk_BPCS::read_last_rdist(const char *item_code)
{
static TString prevcode="";
static int nrig=0;
if (prevcode!=item_code)
{
prevcode=item_code;
nrig=0;
_rdist->put("CODDIST",item_code);
int err=_rdist->read(_isgteq);
while (err==NOERR && _rdist->get("CODDIST")==item_code)
{
nrig++;
err=_rdist->next();
}
}
return ++nrig;
}
bool TImpchk_BPCS::read_is_dist(const char *item_code)
{
const TRectype & rec=cache().get(LF_DIST,item_code);
if (!rec.empty())
return TRUE;
return FALSE;
}
bool TImpchk_BPCS::is_ghost(const char *item_code)
{
const TRectype & rec=cache().get(LF_DIST,item_code);
if (!rec.empty())
return rec.get_bool("VIRTUALE") && !rec.get_bool("ARTPROD")&& !rec.get_bool("ARTACQ") ;
return FALSE;
}
const char * TImpchk_BPCS::read_first_um(const char *item_code)
{
TToken_string key(item_code);
key.add(1);
const TRectype & rec=cache().get(LF_UMART,key);
if (rec.empty())
error_box("Impossibile trovare l'item %s",item_code);
return rec.get("UM");
}
// cancella gli articoli
void TImpchk_BPCS ::delete_arts()
{
message_box("- cancellazione articoli disabilitata -");
}
// cancella le distinte che non sono lavorazioni
bool TImpchk_BPCS ::delete_boms()
{
message_box("- cancellazione distinte disabilitata -");
return FALSE;
}
// elimina i ghost "di servizio"
void TImpchk_BPCS ::delete_ghosts()
{
message_box("- cancellazione distinte fantasma disabilitata -");
}
bool TImpchk_BPCS::chkimp_boms(TMask &m)
{
return TRUE;
TWait_cursor hourglass;
cache().flush(LF_DIST);
cache().flush(LF_ANAMAG);
cache().flush(LF_UMART);
TSupport_file morti(LF_DIST, format("%s\\%s",(const char * ) m.get(F_PATH),ANAGRAFICA_MORTI));
TImport_file boms(m.get(F_PATH), BPCS_DISTINTE);
TProgind info(boms.items(),"Importazione distinte...",TRUE,TRUE);
TToken_string imported_lcode,dead_lcode,skipped_lcode,current_lcode;
TString old_code,item_code,last_code;
TString8 impianto,main_imp;
int bseq=0;
boms.first();
while (!boms.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
// converte ogni distinta ancora valida
old_code=(boms.get_codice("BPROD"));
impianto=(boms.get("BMWHS"));
int metodo(int(boms.get_long("BMBOMM")));
current_lcode.add(old_code,0);
current_lcode.add(impianto,1);
current_lcode.add(metodo,2);
const long ddis=boms.get_long("BDDIS");
bool skip=!((ddis==99999999)||(ddis==9999999)||(ddis==999999)||(ddis==99999));
if (skipped_lcode==current_lcode || dead_lcode==current_lcode)
skip = TRUE;
if (!skip && m.get_bool(F_CHECKDEADARTS))
{
morti.put("CODDIST",old_code);
if (morti.read()==NOERR)
{
skip=TRUE;
skipped_lcode=current_lcode;
}
}
if (!skip && atol(boms.get("BDEFF"))<m.get_int(F_ANNO)*10000L)
{
if (skipped_lcode==current_lcode || dead_lcode==current_lcode)
skip = TRUE;
else
{
TTimed_skipbox bbox(format("La distinta %s (%s), di %s metodo '%02d', risale al %s; ignoro l'importazione ?",
(const char *)old_code,
(const char *)cache().get(LF_ANAMAG,old_code).get("DESCR"),
(const char *)impianto,
metodo,
(const char *)boms.get("BDEFF")),60);
if (skip=(bbox.run()==K_ESC))
{
if (noyes_box("Ignoro l'importazione di tutti i metodi del codice %s?",(const char *) old_code))
{
morti.put("CODDIST",old_code);
morti.write();
dead_lcode=current_lcode;
}
skipped_lcode=current_lcode;
}
}
}
// importa solo gli impianti SEgrate e TrieSte
if (!skip && metodo == 99 && (impianto=="SE" || impianto=="TS" ))
{
main_imp=impianto;
do {
if (impianto == "PD")
impianto = "PR";
if (metodo==7)
{
impianto = "PD";
metodo = 0;
}
const TString8 father_grmerc= cache().get(LF_ANAMAG,old_code).get("GRMERC");
if (metodo!=0)
{
if (metodo==99)
{
if (cache().get(LF_ANAMAG,old_code ).get(ANAMAG_GRMERC)[0]!='F')
message_box("Il codice %s con metodo 99 non e' un finito",(const char *)old_code);
// sconfezionamento
impianto=format("%s9%02d",(const char *)main_imp,metodo);
if (cache().get("LNP",impianto).empty())
{
cache().discard("LNP",impianto);
// inserisce la linea di sconfezionamento
TTable imp("LNP");
imp.put("CODTAB",impianto);
imp.put("S0","Riconfezionamento/sconfezionamento");
imp.put("S6",main_imp);
imp.put("S7",format("%s1",(const char *) impianto));
imp.put("B9","X");
//imp.write();
}
}
else
{
// terzisti
impianto=format("X%02d%s",metodo,(const char *)main_imp);
if (cache().get("LNP",impianto).empty())
{
cache().discard("LNP",impianto);
// inserisce il terzista come linea produttiva sull'impianto esterno
TTable imp("LNP");
imp.put("CODTAB",impianto);
imp.put("S0",format("%s (%s)",descr_method(metodo),(const char *) impianto));
imp.put("S6","XT");
imp.put("S7",format("%s3%02d",(const char *) impianto,metodo));
imp.put("B9","X");
//imp.write();
}
}
}
// padre
TString descr,um_f(read_first_um(old_code));
TString item_code=old_code;
item_code << "__" << impianto;
const bool father_ghost= is_ghost(old_code);
if (father_ghost)
descr=cache().get(LF_DIST,old_code).get("DESCR");
else
descr=cache().get(LF_ANAMAG,old_code).get("DESCR");
if (!father_ghost && item_code!=last_code)
{
// se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile)
if (cache().get(LF_DIST,old_code).empty())
{
cache().discard(LF_DIST,old_code);
_dist->zero();
_dist->put("CODDIST", old_code);
_dist->put("DESCR", descr);
_dist->put("VIRTUALE", " ");
_dist->put("MASTER", "X");
_dist->put("ARTPROD", "X");
_dist->put("UM", um_f);
TString varvar("VARIANTE=");
varvar << "_DISTINTA+\"__\"+IF(_IMPIANTO!=\"XT\",_IMPIANTO,_LINEA)" ;
_dist->put("PARAMETRI",varvar);
int err=_dist->write();
if (err!=_isreinsert)
{
_rdist->zero();
_rdist->put("CODDIST", old_code);
_rdist->put("NRIG", 1 );
_rdist->put("TIPO", "V" );
_rdist->put("CODCOMP", "VARIANTE" );
_rdist->put("UM", "");
_rdist->put("EXPR", 1 );
_rdist->write();
}
}
}
// figlio
TString son_code=boms.get_codice("BCHLD");
TString um_s=read_first_um(son_code) ;
const bool son_ghost=is_ghost(son_code);
if (son_ghost)
son_code << "__" << impianto ;
// scrivi la bom
if (last_code!=item_code)
{
if (cache().get(LF_DIST,item_code).empty())
{
cache().discard(LF_DIST,item_code);
descr << " (impianto " << main_imp << ")";
_dist->zero(' ');
_dist->put("CODDIST", item_code);
_dist->put("DESCR", descr);
_dist->put("VIRTUALE", "X" );
_dist->put("ARTPROD", "");
_dist->put("UM", "BP");
if (impianto.left(2)!= "XT")
{
// l'albero della distinte di un impianto e' su qyell'impianto
// i terzisti seguono l'impianto di pianificazione
TString varimp("_IMPIANTO=");
varimp << '"'<< main_imp <<'"';
_dist->put("PARAMETRI",varimp);
}
_dist->write(); // fallisce se esiste gia'
_umart->zero(' ');
_umart->put("CODART",item_code);
_umart->put("NRIGA",1);
_umart->put("UM",um_f);
_umart->put("FC","1");
force_write(*_umart);
}
last_code=item_code;
if (bseq>0 || (impianto != "PD" && impianto != "PR"))
bseq=0;
}
if (impianto == "PD")
bseq--;
else if (impianto != "PR")
bseq++;
if (bseq==0) error_box("Numero riga 0 per %s / %s",(const char *)item_code,(const char *)son_code);
_rdist->zero(' ');
_rdist->put("CODDIST", item_code);
_rdist->put("NRIG", bseq >0 ? bseq : -bseq);
if (son_ghost)
_rdist->put("TIPO", "D");
else if (son_code=="ACQUA" || son_code=="ACQUADEION")
_rdist->put("TIPO", "L");
else
_rdist->put("TIPO", "A");
_rdist->put("CODCOMP", son_code );
_rdist->put("UM", um_s);
_rdist->put("EXPR", boms.get_real("BQREQ") );
_rdist->write();
imported_lcode=current_lcode;
} while (impianto == "PD");
}
boms.next();
}
delete_ghosts();
return TRUE;
}
void TImpchk_BPCS::add_log_row(TPrinter &prn, TPrintrow &oldrow, const char *m)
{
TString mm(m);
if (oldrow.lastpos())
prn.print(oldrow);
oldrow.reset();
oldrow.put(mm,4);
prn.print(oldrow);
oldrow.reset();
}
bool TImpchk_BPCS::compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield,
const real & impfield)
{
real r_eurocampo(_anamag->get_real( anafield));
if (r_eurocampo != impfield && !impfield.is_zero())
{
if (r_eurocampo.is_zero())
{
_anamag->put(anafield, impfield);
return TRUE;
} else {
TString messaggio = format("Il campo %s manca dei decimali", anafield);
messaggio << "(" << r_eurocampo << " invece di " << impfield << "\nAggiorno automaticamente?";
real r_bpcs(impfield);
if (r_bpcs.trunc() == r_eurocampo && yesno_box(messaggio))
{
_anamag->put(anafield, impfield);
return TRUE;
}
messaggio = anafield;
messaggio << "=" << _anamag->get_real( anafield) << " , " << impfield << " su BPCS";
add_log_row(prn, prow, messaggio);
}
}
return FALSE;
}
bool TImpchk_BPCS::compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield,
const TString & impfield)
{
if (_anamag->get( anafield) != impfield && !impfield.blank())
if (_anamag->get( anafield).blank())
{
_anamag->put( anafield, impfield);
return TRUE;
} else {
add_log_row(prn, prow, format ("%s = '%s', '%s'su BPCS",
(const char *) anafield,(const char *)_anamag->get( anafield), (const char *)impfield));
}
return FALSE;
}
bool TImpchk_BPCS::compare_item(TPrinter &prn, TPrintrow &prow, const char * anafield,
const long impfield)
{
if (_anamag->get_long( anafield) != impfield && impfield!=0L)
if (_anamag->get_long( anafield) == 0L)
{
_anamag->put( anafield, impfield);
return TRUE;
} else {
add_log_row(prn, prow, format ("%s = '%ld', '%ld'su BPCS",
(const char *) anafield,_anamag->get_long( anafield), impfield));
}
return FALSE;
}
// importa le ums dal file di anagrafica
bool TImpchk_BPCS ::chkimp_arts(TMask & m)
{
TPrinter prn;
TPrintrow prow;
TWait_cursor hourglass;
cache().flush(LF_ANAMAG);
cache().flush(LF_DIST);
cache().flush(LF_UMART);
TSupport_file morti(LF_DIST, format("%%%s\\%s",(const char * ) m.get(F_PATH),ANAGRAFICA_MORTI));
TImport_file items_ext(m.get(F_PATH),BPCS_IMPORTEX);
TImport_file items(m.get(F_PATH),BPCS_ANAGRAFICA);
TString item_code,item_type,tmp;
bool skip;
TProgind info(items.items(),"Controllo articoli e distinte fantasma...",TRUE,TRUE);
prn.open();
items_ext.first();
items.first();
while (!items.eof())
{
info.addstatus(1);
if (info.iscancelled())
break;
item_type=items.get("IITYP");
if (items.get("IID")=="IM" && atoi(item_type)!=6)
{
if (item_type!="0") // non fantasma
{
item_code=items.get_codice("IPROD");
skip=FALSE;
// sincronizza il file dell'anagrafica Importex
while (items_ext.get_codice("MSITE")<item_code && !items_ext.eof())
items_ext.next();
morti.put("CODDIST",item_code);
if (morti.read()!=NOERR)
{
// *******
// anagrafica
_anamag->zero();
_anamag->put( ANAMAG_CODART,item_code);
bool newart = (_anamag->read()==_iskeynotfound);
if (newart && yesno_box("Articolo %s '%s'non trovato:\n lo metto tra gli articoli da ignorare?",
(const char *)item_code,(const char *)items.get("IDESC")))
{
morti.put("CODDIST",item_code);
morti.put("DESCR",items.get("IDESC"));
morti.write();
}
else
{
prow.reset();
prow.put("Articolo ");
prow.put(item_code);
if (newart)
{
prow.put(" mancante: inserito in automatico");
prn.print(prow);
_anamag->put( ANAMAG_DESCR,items.get("IDESC"));
_anamag->put( ANAMAG_DESCRAGG,items.get("IDSCE"));
_anamag->put( ANAMAG_CODFORN, items.get_long("IVEND"));
_anamag->put( ANAMAG_UMP, "KG");
_anamag->put( ANAMAG_PESO, items.get_real("IWGHT"));
// riordino
_anamag->put( ANAMAG_RIORDINO , "F"); //_anamag->put( ANAMAG_RIORDINO , items.get("IMRP")=="M" ? "F" : "P" );
_anamag->put( ANAMAG_GIORNIRIOR, items.get_long("ILEAD"));
_anamag->put( ANAMAG_LOTTORIOR, items.get_real("ILOTS"));
_anamag->put( ANAMAG_LOTTOIRIOR, items.get_real("IIOQ"));
//
_anamag->put( ANAMAG_PPCONF , items.get_long("IFII"));
_anamag->put( ANAMAG_PPCOLLO , items.get_long("IFII"));
TString16 gmc=items.get("IITYP");
switch (gmc[0])
{
case 'F':
case 'E':
case 'Z':
case 'G':
gmc[0]= 'F'; break;
case 'M':
gmc[0]= 'S'; break;
case 'P':
gmc[0]= 'C'; break;
}
TString16 iclas(items.get("ICLAS"));
if (!iclas.blank())
{
switch (m.get(F_ICLAS)[0])
{
case 'S':
complete_gmc(gmc, iclas);
break;
case 'C':
gmc << iclas;
break;
case ' ':
break;
}
}
_anamag->put( ANAMAG_GRMERC,gmc);
_anamag->put( ANAMAG_COSTSTD, items.get_real("ISCST"));
_anamag->put( ANAMAG_ULTCOS1, items.get_real("IACST"));
tmp=items.get("TAXC1");
if (tmp.left(3)=="IVA")
tmp=tmp.sub(3);
_anamag->put( ANAMAG_CODIVA , tmp);
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{
_anamag->put( ANAMAG_CLASSDOG , check_clasdog(items_ext.get_long("MSTDO")));
_anamag->put( ANAMAG_USER1 , items_ext.get_real("MSIDR"));// idrati
_anamag->put( ANAMAG_USER2 , items_ext.get_real("MSANI"));//anidri
_anamag->put( ANAMAG_USER3 , items_ext.get("MSTAL"));//alcool
// dimensioni
_anamag->put( ANAMAG_USER4, items_ext.get_long("MSPLU"));
_anamag->put( ANAMAG_USER5, items_ext.get_long("MSPAL"));
_anamag->put( ANAMAG_USER6, items_ext.get_long("MSPPR"));
// composizione pallets
_anamag->put( ANAMAG_USER7, items_ext.get_long("MSCST")); // casse per strato
_anamag->put( ANAMAG_USER8, items_ext.get_long("MSSTP")); // strati per pallet
}
//_anamag.write();
real smin(items.get("IMIN"));
if (smin!=ZERO)
{
_mag->zero();
_mag->put(MAG_SCORTAMIN,smin);
_mag->put(MAG_ANNOES,"1999");
_mag->put(MAG_CODART,item_code);
_mag->put(MAG_NRIGA,1);
_mag->put(MAG_CODMAG,"SE1PF");
//force_write(*_mag);
_mag->put(MAG_NRIGA,2);
_mag->put(MAG_CODMAG,"TS1PF");
//force_write(*_mag);
}
} else {
bool changed=FALSE;
bool different=FALSE;
changed |= compare_item(prn, prow, ANAMAG_DESCR, items.get("IDESC"));
changed |= compare_item(prn, prow, ANAMAG_DESCRAGG, items.get("IDSCE"));
changed |= compare_item(prn, prow, ANAMAG_CODFORN, items.get_long("IVEND"));
if (_anamag->get( ANAMAG_UMP).blank())
{
_anamag->put( ANAMAG_UMP,"KG");
changed = TRUE;
} else {
if (_anamag->get( ANAMAG_UMP) != "KG")
add_log_row(prn, prow, format("Unita' di misura del peso insolita: %s",(const char *)_anamag->get( ANAMAG_UMP)));
}
changed |= compare_item(prn, prow, ANAMAG_PESO, items.get_real("IWGHT"));
// riordino
if (_anamag->get( ANAMAG_RIORDINO).blank())
{
_anamag->put( ANAMAG_RIORDINO,"F");
changed = TRUE;
} else {
if (_anamag->get( ANAMAG_RIORDINO) != "F")
add_log_row(prn, prow, format("TIpo di riordino insolito: %s",(const char *)_anamag->get( ANAMAG_RIORDINO)));
}
changed |= compare_item(prn, prow, ANAMAG_GIORNIRIOR, items.get_long( "ILEAD"));
changed |= compare_item(prn, prow, ANAMAG_LOTTORIOR, items.get_real( "ILOTS"));
changed |= compare_item(prn, prow, ANAMAG_LOTTOIRIOR, items.get_real( "IIOQ"));
//
changed |= compare_item(prn, prow, ANAMAG_PPCONF, items.get_long("IFII"));
changed |= compare_item(prn, prow, ANAMAG_PPCOLLO, items.get_long("IFII"));
TString8 gmc=items.get("IITYP");
switch (gmc[0])
{
case 'F':
case 'E':
case 'Z':
case 'G':
gmc[0]= 'F'; break;
case 'M':
gmc[0]= 'S'; break;
case 'P':
gmc[0]= 'C'; break;
}
TString16 iclas(items.get("ICLAS"));
if (!iclas.blank())
{
switch (m.get(F_ICLAS)[0])
{
case 'S':
complete_gmc(gmc, iclas);
break;
case 'C':
gmc << iclas;
break;
case ' ':
break;
}
}
changed |= compare_item(prn, prow, ANAMAG_GRMERC, gmc);
changed |= compare_item(prn, prow, ANAMAG_COSTSTD, items.get_real("ISCST"));
changed |= compare_item(prn, prow, ANAMAG_ULTCOS1, items.get_real("IACST"));
tmp=items.get("TAXC1");
if (tmp.left(3)=="IVA")
tmp=tmp.sub(3);
changed |= compare_item(prn, prow, ANAMAG_CODIVA, tmp);
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{
changed |= compare_item(prn, prow, ANAMAG_CLASSDOG, atol(check_clasdog(items_ext.get_long("MSTDO"))));
changed |= compare_item(prn, prow, ANAMAG_USER1, items_ext.get_real("MSIDR"));
changed |= compare_item(prn, prow, ANAMAG_USER2, items_ext.get_real("MSANI"));
changed |= compare_item(prn, prow, ANAMAG_USER3, items_ext.get("MSTAL"));
// dimensioni
changed |= compare_item(prn, prow, ANAMAG_USER4, items_ext.get_long("MSPLU"));
changed |= compare_item(prn, prow, ANAMAG_USER5, items_ext.get_long("MSPAL"));
changed |= compare_item(prn, prow, ANAMAG_USER6, items_ext.get_long("MSPPR"));
// composizione pallets
changed |= compare_item(prn, prow, ANAMAG_USER7, items_ext.get_long("MSCST"));
changed |= compare_item(prn, prow, ANAMAG_USER8, items_ext.get_long("MSSTP"));
}
//_anamag.write();
real smin(items.get("IMIN"));
if (smin!=ZERO)
{
_mag->zero();
_mag->put(MAG_SCORTAMIN,smin);
_mag->put(MAG_ANNOES,"1999");
_mag->put(MAG_CODART,item_code);
_mag->put(MAG_NRIGA,1);
_mag->put(MAG_CODMAG,"SE1PF");
//force_write(*_mag);
_mag->put(MAG_NRIGA,2);
_mag->put(MAG_CODMAG,"TS1PF");
//force_write(*_mag);
}
if (changed)
_anamag->rewrite();
}
} // inserisco - ignoro
// *******
// UMS
TString4 um,ums(items.get("IUMS"));
real fc;
int nriga=1;
for (int u=0; u<3; u++)
{
switch (u)
{
case 1:
um=items.get("IUMP");
fc=items.get_real("IUMCN");
break;
case 2:
um=items.get("IUMR");
fc=items.get_real("IUMRC");
break;
default:
um=ums;
fc=1.0;
}
if (!um.blank() && (u==0 || um!=ums))
{
_umart->zero();
_umart->put("CODART",item_code);
_umart->put("NRIGA",nriga);
_umart->put("UM",um);
if (nriga==1)
_umart->put("PREZZO",items.get("ILIST"));
_umart->put("FC",fc);
//force_write(*_umart);
nriga++;
}
} // fine ciclo unita' di misura
long ean=items.get_long("IDRAW");
if (!m.get(F_EAN).blank())
{
TString16 eancode=items.get("IDRAW");
if (ean!=0L || (eancode[0]>='A' && eancode[0]<='Z' && atol(eancode.sub(1))!=0L))
{
_codcorr->zero();
_codcorr->put("CODARTALT",eancode);
_codcorr->put("NRIGA",1);
_codcorr->put("TIPO",m.get(F_EAN));
_codcorr->put("CODART",item_code);
//force_write(*_codcorr);
}
}
} // controllo morti
} // articolo magazzino
} // record type check
items.next();
} // while
prn.close();
return TRUE;
}
bool TImpchk_BPCS ::cambia_gmc(TMask & m)
{
TWait_cursor hourglass;
cache().flush(LF_ANAMAG);
cache().flush(LF_DIST);
cache().flush(LF_UMART);
TImport_file items_ext(m.get(F_PATH),BPCS_IMPORTEX);
TImport_file items(m.get(F_PATH),BPCS_ANAGRAFICA);
TString item_code,item_type,tmp;
TProgind info(items.items(),"Importazione gruppi merceologici e classi doganali",TRUE,TRUE);
items_ext.first();
items.first();
while (!items.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
item_type=items.get("IITYP");
if (items.get("IID")=="IM" && atoi(item_type)!=6)
{
item_code=items.get_codice("IPROD");
if (item_type!="0") // fantasma
{
_anamag->zero();
_anamag->put( ANAMAG_CODART,item_code);
if (_anamag->read()==NOERR)
{
// sincronizza il file dell'anagrafica Importex
while (items_ext.get_codice("MSITE")<item_code && !items_ext.eof())
items_ext.next();
if (items_ext.get_codice("MSITE")==items.get_codice("IPROD"))
{
TString cld=check_clasdog(items_ext.get_long("MSTDO"));
if (!cld.blank())
_anamag->put( ANAMAG_CLASSDOG , cld);
}
TString16 gmc=items.get("IITYP");
switch (gmc[0])
{
case 'F':
case 'E':
case 'Z':
case 'G':
gmc[0]= 'F'; break; // finiti
case 'M':
gmc[0]= 'S'; break; // semilavorati ()
case 'P':
gmc[0]= 'C'; break; // componenti (parts)
}
TString16 iclas(items.get("ICLAS"));
if (!iclas.blank())
{
switch (m.get(F_ICLAS)[0])
{
case 'S':
complete_gmc(gmc, iclas);
break;
case 'C':
gmc << iclas;
break;
case ' ':
break;
}
}
_anamag->put( ANAMAG_GRMERC,gmc);
_anamag->rewrite();
}
}
}
items.next();
}
return TRUE;
}
// importa le ums dal file dei divisori
bool TImpchk_BPCS ::importa_ums_BP(TMask & m)
{
return TRUE;
TWait_cursor hourglass;
cache().flush(LF_UMART);
TImport_file divisori(m.get(F_PATH),BPCS_DIVISORI);
TProgind info(divisori.items(),"Importazione divisori (batch di produzione)...",TRUE,TRUE);
divisori.first();
TString item_code,impianto;
while (!divisori.eof())
{
info.addstatus(1);
if (info.iscancelled())
return FALSE;
impianto=divisori.get("ICFAC");
if (impianto=="SE" || impianto == "TS")
{
for (int falsi_terzisti=0;falsi_terzisti<3; falsi_terzisti++)
{
item_code=(divisori.get_codice("ICPROD"));
item_code << "__";
switch (falsi_terzisti)
{
case 1:
item_code << "PD"; break;
case 2:
item_code << "PR"; break;
default:
item_code << impianto; break;
}
if (read_is_dist(item_code))
{
_umart->zero();
_umart->put("CODART",item_code);
_umart->put("NRIGA",2);
_umart->put("UM","BP");
_umart->put("FC",divisori.get("ICBTCH"));
force_write(*_umart);
}
}
}
divisori.next();
}
return TRUE;
}
void TImpchk_BPCS ::main_loop()
{
TImpchk_mask m;
while (m.run()!=K_QUIT)
{
bool ok = TRUE;
ok &= chkimp_arts(m); // articoli e distinte virtuali fantasma
ok &= chkimp_boms(m); // distinte non fantasma
ok &= importa_ums_BP(m);
if (ok)
message_box("Operazione conclusa");
else
message_box("Operazione interrotta");
}
}
int dbcv03(int argc, char* argv[])
{
int n = argc > 1 ? (argv[1][1] - '0') : 0;
TImpchk_BPCS dt;
dt.run(argc, argv, "Controllo archivi importati da BPCS");
return 0;
}

55
db/dbcv03a.uml Executable file
View File

@ -0,0 +1,55 @@
#include "dbcv00a.h"
TOOLBAR "" 0 19 0 0
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -11 "~OK"
PICTURE BMP_OK
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -11 "~Fine"
MESSAGE EXIT,K_QUIT
PICTURE BMP_QUIT
PICTURE BMP_QUITDN
END
ENDPAGE
PAGE "Servizi" -1 -1 80 20
STRING DLG_PROFILE 70
BEGIN
FLAGS "HG"
PROMPT 1 1 ""
PSELECT
END
STRING F_PATH 40
BEGIN
PROMPT 1 1 "Percorso dei files DBF di BPCS "
END
LIST F_ICLAS 35
BEGIN
PROMPT 3 6 ""
ITEM " |Non caricare il campo ICLAS"
ITEM "S|Carica ICLAS come sotto cat.merc."
ITEM "C|Carica ICLAS come cat.merc."
GROUP G_ARTICOLI
END
LIST F_EAN 30
BEGIN
PROMPT 3 8 ""
ITEM " |Non caricare i codici EAN"
ITEM "8|Carica codici EAN 8"
ITEM "13|Carica codici EAN 13"
GROUP G_ARTICOLI
END
ENDPAGE
ENDMASK

View File

@ -1,9 +1,10 @@
#include "dblib.h" #include "..\db\dblib.h"
#include "dbcv09.h" #include "dbcv09.h"
#include "dbcv00a.h" #include "dbcv00a.h"
#include <relation.h> #include <relation.h>
#include <execp.h> #include <execp.h>
#include "..\mg\anamag.h" #include "..\mg\anamag.h"
#include "..\mg\mglib.h"
void delete_files(const char *wild) void delete_files(const char *wild)
{ {
@ -77,16 +78,6 @@ long method2location(int method)
return -99; // terzista generico return -99; // terzista generico
} }
void coddep2location(const char * coddep, TString & codlocation)
{
codlocation.cut(0);
if (coddep[0]>='0' && coddep[0]<='9')
codlocation = format("%02d", method2location(atoi(coddep))) ;
else if (coddep == "C0")
codlocation = "CICCA";
}
int location2method(long location) int location2method(long location)
{ {
switch (location) switch (location)
@ -98,7 +89,7 @@ int location2method(long location)
case 63: return 4; case 63: return 4;
case 872: return 5; case 872: return 5;
case 66: return 6; case 66: return 6;
case 1700: return 7; case 1700: return 7; // Ex COVER
case 115: return 8; case 115: return 8;
case 935: return 9; case 935: return 9;
case 911: return 10; case 911: return 10;
@ -368,27 +359,39 @@ const char * check_clasdog(long stdo)
void imploc2codmagdep(TString &codimp,TString &location, TString &codmag) void imploc2codmagdep(TString &codimp,TString &location, TString &codmag)
{ {
int terzista = 0; int terzista = 0;
if (atoi(location))
{
terzista = location2method(atoi(location));
if (terzista == 7)
{
if (codimp=="SE")
codimp = "PR";
else
codimp = "PD";
terzista = 0;
}
}
codmag = codimp; codmag = codimp;
codmag << 1; codmag << 1;
if (location == "CICCA") if (!location.blank())
codmag << "C0";
else if (terzista>0)
{ {
codmag << format("%02d",terzista); // must be a terzist....
codimp = "XT"; if (atoi(location))
{
terzista = location2method(atoi(location));
if (terzista == 7)
{
if (codimp!="SE")
{
if (codimp=="SE3")
codmag = "SE1";
else
codmag = "TS1";
}
}
}
if (location == "CICCA")
codmag << "C0";
else if (location == "CMINT")
codmag << "C1";
else if (location == "COMMEX")
codmag << "X0";
else if (terzista>0)
{
codmag << format("%02d",terzista);
codimp = "XT";
} else if (!location.blank())
error_box("Locazione sconosciuta '%s'",(const char *)location);
} else { } else {
codmag << "PF"; codmag << "PF";
} }
@ -396,14 +399,6 @@ void imploc2codmagdep(TString &codimp,TString &location, TString &codmag)
void codimp2codmagdep(TString &codimp,int terzista, TString &codmag) void codimp2codmagdep(TString &codimp,int terzista, TString &codmag)
{ {
if (terzista == 7)
{
if (codimp=="SE")
codimp = "PR";
else
codimp = "PD";
terzista = 0;
}
codmag = codimp; codmag = codimp;
codmag << 1; codmag << 1;
if (terzista>0) if (terzista>0)
@ -413,6 +408,13 @@ void codimp2codmagdep(TString &codimp,int terzista, TString &codmag)
} else { } else {
codmag << "PF"; codmag << "PF";
} }
if (terzista == 7)
{
if (codimp=="SE")
codimp = "PR";
else
codimp = "PD";
}
} }
void num_mag2cod_imp(int magno, TString & codimp) void num_mag2cod_imp(int magno, TString & codimp)
@ -442,8 +444,8 @@ void num_mag2cod_imp(int magno, TString & codimp)
int cod_mag2num_mag(TString & codmagdep) int cod_mag2num_mag(TString & codmagdep)
{ {
const int terzista = atoi(codmagdep.sub(3)); const int terzista = atoi(codmagdep.sub(3));
if (terzista!=7) // if (terzista!=7)
{ // {
TString codmag = codmagdep.left(3); TString codmag = codmagdep.left(3);
if (codmag=="SE1") if (codmag=="SE1")
return terzista ? 91 : 26; return terzista ? 91 : 26;
@ -453,16 +455,32 @@ int cod_mag2num_mag(TString & codmagdep)
if (codmag != "VGG" && codmag != "SE3" && codmag != "TS3") if (codmag != "VGG" && codmag != "SE3" && codmag != "TS3")
{ {
codmagdep.overwrite("07",3); codmagdep.overwrite("07",3);
if (codmag == "COM")
return 26;
if (codmag == "PD1") if (codmag == "PD1")
return 92; return 92;
if (codmag == "PR1") if (codmag == "PR1")
return 91; return 91;
error_box("Che cazzo di magazzino è %s?", (const char *)codmag); error_box("Che minchia di magazzino è %s?", (const char *)codmag);
} }
} // }
return -1; return -1;
} }
void coddep2location(const char * codmag, const char * coddep, TString & codlocation, int & nummag)
{
codlocation.cut(0);
if (coddep[0]>='0' && coddep[0]<='9')
codlocation = format("%02d", method2location(atoi(coddep))) ;
else if (coddep == "C0")
codlocation = "CICCA";
else if (coddep == "C1")
codlocation = "CMINT";
else if (coddep == "X0")
codlocation = "COMMEX";
}
const TString & converti_codval(const TString & codval) const TString & converti_codval(const TString & codval)
{ {
static TString4 _codval; static TString4 _codval;
@ -922,11 +940,13 @@ void setformulavar()
// se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile) // se non e' un fantasma lo definisce come variante (distinta contenente una riga di tipo variabile)
// se e' un finito, anche varianti di sconfezionamento // se e' un finito, anche varianti di sconfezionamento
if (ana.get(ANAMAG_GRMERC)[0]=='F') if (ana.get(ANAMAG_GRMERC)[0]=='F')
//varvar << "IF(_IMPIANTO==\"XT\",_LINEA,IF(_LINEA?=\"??9??\",_LINEA,_IMPIANTO))" ; //varvar << "IF(_IMPIANTO==\"XT\",_LINEA,IF(_LINEA?=\"??9??\",_LINEA,_IMPIANTO))" ;
varvar << "IF((_IMPIANTO==\"XT\")||(_LINEA?=\"??9??\"),_LINEA,_IMPIANTO)" ; varvar << "IF((_IMPIANTO==\"XT\")||(_LINEA?=\"??9??\"),_LINEA,_IMPIANTO)" ;
else else
varvar << "IF(_IMPIANTO==\"XT\",_LINEA,_IMPIANTO)" ; varvar << "IF(_IMPIANTO==\"XT\",_LINEA,_IMPIANTO)" ;
if (varvar != dist.get("PARAMETRI")) if (dist.get("PARAMETRI").blank() ||
(varvar != dist.get("PARAMETRI") &&
yesno_box("Setto la formula di %s\nattuale:%s;\nnuova :%s",(const char *)cod,(const char *)dist.get("PARAMETRI") ,(const char *)varvar)))
{ {
dist.put("PARAMETRI",varvar); dist.put("PARAMETRI",varvar);
dist.rewrite(); dist.rewrite();
@ -1032,13 +1052,48 @@ int inserisci_articolo(const char * codart, const char * um)
art_ini.set("Action","INSERT"); art_ini.set("Action","INSERT");
if (um && *um) if (um && *um)
art_ini.set("Mode","AUTO"); art_ini.set("Mode","AUTO");
else
{
// cerca di capire la mejo unit' di misura
switch (*codart)
{
case '0':
case '1':
case '2':
case '3':
case '4':
um = "PZ";
break;
case '5':
um = "CA";
break;
case 'U':
switch (*(codart+1))
{
case '0':
um = "KG";
break;
case 'K':
if ((*(codart+2)) <= '9')
um = "CA";
break;
}
break;
}
}
art_ini.set("Firm","1"); art_ini.set("Firm","1");
art_ini.set_paragraph("47"); art_ini.set_paragraph("47");
art_ini.set("CODART",codart); art_ini.set("CODART",codart);
art_ini.set("DESCR",format("--- descrizione art. %s ---", codart)); art_ini.set("DESCR",format("*--- descrizione art. %s", codart));
art_ini.set("CODIVA","20");
art_ini.set_paragraph("49,1"); art_ini.set_paragraph("49,1");
art_ini.set("UM",um); if (um && *um)
art_ini.set("FC","1.0"); {
art_ini.set("UM",um);
if (strcmp(um,"KG")==0 || strcmp(um,"GR")== 0)
art_ini.set("UMP",um); // unita' di misura del peso
art_ini.set("FC","1.0");
}
} }
TExternal_app *_gestart=NULL; TExternal_app *_gestart=NULL;
if (_gestart==NULL) if (_gestart==NULL)
@ -1066,16 +1121,21 @@ void TImport_file::put(const char *field, const char * val)
{ {
_f->put(field,val); _f->put(field,val);
} }
TString & TImport_file::get(const char *field) TString & TImport_file::get(const char *field)
{ {
_sbuffer = _f->get(field); _sbuffer = _f->get(field);
return _sbuffer.trim(); return _sbuffer.trim();
} }
TString & TImport_file::get_codice(const char *field) TString & TImport_file::get_codice(const char *field)
{ {
_sbuffer = _f->get(field); _sbuffer = _f->get(field);
_sbuffer.trim(); _sbuffer.trim();
// special computing....
if (_sbuffer == "U00254G")
_sbuffer = "U00254";
return _sbuffer; return _sbuffer;
} }
const real & TImport_file::get_real(const char *field) const real & TImport_file::get_real(const char *field)
@ -1118,9 +1178,9 @@ long TImport_file::items()
} }
int TImport_file::read() int TImport_file::read(int mode)
{ {
int err = _f->read(_isgteq); int err = _f->read(mode);
return err; return err;
} }
int TImport_file::write() int TImport_file::write()
@ -1175,20 +1235,7 @@ TSupport_file::~TSupport_file()
delete _cache; delete _cache;
} }
// **************************************
/*
TTimed_skipbox:: TTimed_skipbox(const char * message,int seconds,int x,int y)
: TTimed_breakbox(message,seconds,x,y)
{
hide(DLG_OK);
hide(DLG_CANCEL);
add_button(DLG_CANCEL, 0, "~Ignora", -22, -1, 12, 2,"",0);
add_button(DLG_OK, 0, "Im~porta", -12, -1, 12, 2,"",0);
}
TTimed_skipbox::~TTimed_skipbox()
{}
*/
bool number_box(const char * prompt, real & v) bool number_box(const char * prompt, real & v)
{ {
TMask m("Input",1,60,10); TMask m("Input",1,60,10);
@ -1205,8 +1252,51 @@ const char * external_refnum(TImport_file &import)
{ {
static TString _wrk; static TString _wrk;
_wrk=import.get("TCOM"); _wrk=import.get("TCOM");
while (_wrk[0]<'0' || _wrk[0]>'9') while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
_wrk = _wrk.mid(1); _wrk = _wrk.mid(1);
int lenextdoc=_wrk.len(); int lenextdoc=_wrk.len();
return lenextdoc > 6 ? _wrk.left(lenextdoc-6): _wrk; if (lenextdoc > 6)
} _wrk.cut(lenextdoc-6);
_wrk.trim();
if (_wrk.len()>7)
_wrk = _wrk.right(7);
if (atol(_wrk)==0L)
return "";
return _wrk;
}
const char * external_refdate(TImport_file &import)
{
static TString _wrk;
_wrk=import.get("TCOM");
while (_wrk[0] && (_wrk[0]<'0' || _wrk[0]>'9' || _wrk[0]=='/'|| _wrk[0]=='-'|| _wrk[0]=='.'))
_wrk = _wrk.mid(1);
if (_wrk.len() < 6)
_wrk.cut(0);
else
{
_wrk = _wrk.right(6);
if (atol(_wrk)==0L)
return "";
if (_wrk[5]=='9')
_wrk.insert("19",4);
else
_wrk.insert("20",4);
_wrk.insert("-",4);
_wrk.insert("-",2);
}
return _wrk;
}
long trascode_for(const long oldcod)
{
static TExternisamfile *_trascofor=NULL;
if (_trascofor==NULL)
_trascofor=new TExternisamfile("TRS_FORN",TRUE, TRUE);
_trascofor->put("OLDCODE", oldcod);
if (_trascofor->read()==NOERR)
{
long newcod = _trascofor->get_long("newcode");
return newcod > 0 ? newcod : oldcod;
}
return oldcod;
}

View File

@ -41,7 +41,7 @@ public:
bool eof(); bool eof();
long items(); long items();
int write(); int write();
int read(); int read(int mode);
void zap(bool pack=FALSE); void zap(bool pack=FALSE);
const char *name() {return _f->name();} const char *name() {return _f->name();}
TImport_file(const char *path, const char * name); TImport_file(const char *path, const char * name);
@ -63,23 +63,16 @@ public:
}; };
class TTimed_skipbox: public TTimed_breakbox
{
public:
TTimed_skipbox(const char * message,int seconds,int x=40,int y=10);
~TTimed_skipbox();
};
bool number_box(const char * prompt, real & v); bool number_box(const char * prompt, real & v);
const char * external_refnum(TImport_file &import); const char * external_refnum(TImport_file &import);
const char * external_refdate(TImport_file &import);
void delete_files(const char *wildcard); void delete_files(const char *wildcard);
bool force_write(TLocalisamfile & f); bool force_write(TLocalisamfile & f);
// individua il metodo a partire dalla locazione di magazzino (codice dep) // individua il metodo a partire dalla locazione di magazzino (codice dep)
int location2method(long location) ; int location2method(long location) ;
long method2location(int method) ; long method2location(int method) ;
void coddep2location(const char * coddep, TString & codlocation) ; void coddep2location(const char * codmag, const char * coddep, TString & codlocation, int & nummag) ;
// codifica il nome del terzista // codifica il nome del terzista
const char * descr_method(int method) ; const char * descr_method(int method) ;
// aggiunge le lavorazioni standard // aggiunge le lavorazioni standard
@ -111,4 +104,5 @@ int cod_mag2num_mag(TString & codmag);
const TString & converti_codval(const TString & codval); const TString & converti_codval(const TString & codval);
void cambio_fisso(const TString & codval, real & val); void cambio_fisso(const TString & codval, real & val);
int inserisci_articolo(const char * codart, const char * um); int inserisci_articolo(const char * codart, const char * um);
long trascode_for(const long oldcod);

17
db/dbcvlib.h Executable file
View File

@ -0,0 +1,17 @@
#ifndef __DBCVLIB_H
#define __DBCVLIB_H
#ifndef __MGLIB_H
#include "../mg/mglib.h"
#endif
// libreria per i movimenti
class TTimed_skipbox: public TTimed_breakbox
{
public:
TTimed_skipbox(const char * message,int seconds,int x=40,int y=10);
~TTimed_skipbox();
};
#endif

View File

@ -498,11 +498,73 @@ const char* TDistinta_tree::curr_um(TCodice_um& code) const
return code; return code;
} }
real TDistinta_tree::last_qta() const real TDistinta_tree::last_qta(bool vis_ghost) const
{ {
_path.get(-2, _tmp); const int last = _path.items()-1;
real val; _tmp.get(5, val); int from = last - 1;
return val; TCodice_articolo art;
TCodice_um um;
real val;
real tot = 1.0;
TQuantita qta;
if (!vis_ghost)
{
for (int i = from ; i >= 0; i--)
{
_path.get(i, _tmp);
if (_tmp.get_char(6) != 'G')
{
from = i + 1;
break;
}
}
}
if (from < 0)
from = 0;
for (int i = 0; i <= last; i++)
{
_path.get(i, _tmp);
_tmp.get(5, val);
_tmp.get(0, art);
_tmp.get(4, um);
if (i > 0)
{
qta.set_val(val);
qta.convert2umdist();
val = qta.val();
}
qta.set(art, um, ZERO);
int tprec = tot.precision();
int vprec = val.precision();
if (tprec + vprec > 15)
{
while (tprec + vprec > 16)
{
if (tprec > vprec)
--tprec;
else
--vprec;
}
tot.round(tprec);
val.round(vprec);
}
#ifdef DBG
TString s(tot.string());
TString s1(val.string());
#endif
if (i >= from)
tot *= val;
#ifdef DBG
s = tot.string();
#endif
if (tot.is_zero())
break;
}
if (tot.precision() > 15)
tot.round(15);
return tot;
} }
real TDistinta_tree::curr_qta() const real TDistinta_tree::curr_qta() const
@ -1535,7 +1597,7 @@ static bool explode_callback(TTree& node, void* jolly, word when)
if (ep._filter.find(type) < 0) if (ep._filter.find(type) < 0)
return FALSE; return FALSE;
TRiga_esplosione* er = new TRiga_esplosione(tree); TRiga_esplosione* er = new TRiga_esplosione(tree, ep._filter.find('G') >= 0);
er->set_mat_base(is_leaf); er->set_mat_base(is_leaf);
ep._array->add(er); ep._array->add(er);
} }
@ -1691,13 +1753,13 @@ TLavorazione *TDistinta_tree::find_labor(TRiga_esplosione *l)
// TRiga_esplosione // TRiga_esplosione
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
void TRiga_esplosione::init(const TDistinta_tree& tree) void TRiga_esplosione::init(const TDistinta_tree& tree, bool vis_ghost)
{ {
TCodice_articolo art; tree.curr_code(art); art.trim(); TCodice_articolo art; tree.curr_code(art); art.trim();
TCodice_um um; tree.curr_um(um); TCodice_um um; tree.curr_um(um);
real val = tree.curr_qta(); real val = tree.curr_qta();
set(art, um, val); set(art, um, val);
_last_qta = tree.last_qta(); // Puo' sempre servire anche questa _last_qta = tree.last_qta(vis_ghost); // Puo' sempre servire anche questa
tree.curr_giaclev(_giac); tree.curr_giaclev(_giac);
_tipo = tree.curr_type(); _tipo = tree.curr_type();
_sort = tree.curr_sort(); _sort = tree.curr_sort();
@ -1727,9 +1789,9 @@ const char * TRiga_esplosione::father(const char * types)
return _tmp_path; return _tmp_path;
} }
TRiga_esplosione::TRiga_esplosione(const TDistinta_tree& tree) TRiga_esplosione::TRiga_esplosione(const TDistinta_tree& tree, bool vis_ghost)
{ {
init(tree); init(tree, vis_ghost);
} }
TRiga_esplosione::TRiga_esplosione(const TRiga_esplosione& re) TRiga_esplosione::TRiga_esplosione(const TRiga_esplosione& re)

View File

@ -342,7 +342,7 @@ public:
int curr_comp(TString& code) const; int curr_comp(TString& code) const;
long curr_sort() const; long curr_sort() const;
const char* curr_um(TCodice_um& code) const; const char* curr_um(TCodice_um& code) const;
real last_qta() const; real last_qta(bool vis_ghost = FALSE) const;
real curr_qta() const; real curr_qta() const;
int curr_depth() const { return path_depth(_path);} int curr_depth() const { return path_depth(_path);}
char curr_type() const { return path_type(_path);} char curr_type() const { return path_type(_path);}
@ -391,7 +391,7 @@ class TRiga_esplosione : public TQuantita
protected: protected:
virtual TObject* dup() const { return new TRiga_esplosione(*this); } virtual TObject* dup() const { return new TRiga_esplosione(*this); }
void init(const TDistinta_tree& tree); void init(const TDistinta_tree& tree, bool vis_ghost = FALSE);
public: public:
const TToken_string& path() const { return _path; } const TToken_string& path() const { return _path; }
@ -410,7 +410,7 @@ public:
const real& last_qta() const { return _last_qta; } const real& last_qta() const { return _last_qta; }
TRiga_esplosione(); TRiga_esplosione();
TRiga_esplosione(const TDistinta_tree& tree); TRiga_esplosione(const TDistinta_tree& tree, bool vis_ghost = FALSE);
TRiga_esplosione(const TRiga_esplosione& re); TRiga_esplosione(const TRiga_esplosione& re);
virtual ~TRiga_esplosione() { } virtual ~TRiga_esplosione() { }
}; };

View File

@ -203,6 +203,7 @@ BEGIN
KEY "Codice valuta" KEY "Codice valuta"
PROMPT 0 0 "" PROMPT 0 0 ""
FIELD 31->CODVAL FIELD 31->CODVAL
MESSAGE COPY,FL->4
FLAGS "H" FLAGS "H"
END END
@ -231,11 +232,18 @@ BEGIN
PROMPT 5 2 "N. DOCUMENTI " PROMPT 5 2 "N. DOCUMENTI "
END END
NUMERO 3 18 STRINGA 4 3
BEGIN
KEY "Codice valuta"
PROMPT 0 0 ""
FLAGS "H"
END
VALUTA 3 18
BEGIN BEGIN
KEY "Totale" KEY "Totale"
PROMPT 115 2 "TOTALE " PROMPT 115 2 "TOTALE "
PICTURE "###.###.###.###" DRIVENBY 4
END END
END END

View File

@ -1,6 +1,2 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
/* ef0 -0 */
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -3,18 +3,19 @@
PAGE "Righe Effetto" -1 -1 76 16 PAGE "Righe Effetto" -1 -1 76 16
NUMBER F_IMPEFF 16 2 CURRENCY F_IMPEFF 16
BEGIN BEGIN
PROMPT 2 1 "Importo effetto " PROMPT 2 1 "Importo effetto "
PICTURE ".2" // PICTURE ".2"
// PICTURE "###.###.###,@@" // PICTURE "###.###.###,@@"
// NUM_EXPR #F_IMPFATT>=#F_IMPEFF // NUM_EXPR #F_IMPFATT>=#F_IMPEFF
// WARNING "L'importo dell'effetto non puo' superare l'importo della fattura" // WARNING "L'importo dell'effetto non puo' superare l'importo della fattura"
END END
NUMBER F_IMPEFFVAL 15 3 CURRENCY F_IMPEFFVAL 15
BEGIN BEGIN
PROMPT 2 2 "Imp.effetto val. " PROMPT 2 2 "Imp.effetto val. "
DRIVENBY -F_CODVAL
PICTURE ".3" PICTURE ".3"
// PICTURE "###.###.###,@@@" // PICTURE "###.###.###,@@@"
// NUM_EXPR #F_IMPFATTVAL>=#F_IMPEFFVAL // NUM_EXPR #F_IMPFATTVAL>=#F_IMPEFFVAL
@ -75,16 +76,17 @@ BEGIN
PROMPT 2 7 "Data fattura " PROMPT 2 7 "Data fattura "
END END
NUMBER F_IMPFATT 20 2 CURRENCY F_IMPFATT 20
BEGIN BEGIN
PROMPT 2 8 "Importo fattura " PROMPT 2 8 "Importo fattura "
PICTURE "###.###.###.###,@@" // PICTURE "###.###.###.###,@@"
END END
NUMBER F_IMPFATTVAL 20 3 CURRENCY F_IMPFATTVAL 20
BEGIN BEGIN
PROMPT 2 9 "Imp. fatt. val " PROMPT 2 9 "Imp. fatt. val "
PICTURE "###.###.###.###,@@@" DRIVENBY -F_CODVAL
// PICTURE "###.###.###.###,@@@"
END END
NUMBER F_ANNO 4 NUMBER F_ANNO 4

View File

@ -229,45 +229,50 @@ bool TEffetto::fatt(long num)
// restituisce i dati relativi alle fatture a cui si riferisce l'effetto // restituisce i dati relativi alle fatture a cui si riferisce l'effetto
// costruendo una TToken_string del tipo // costruendo una TToken_string del tipo
// "num_fatt0|data_fatt0|imp_fatt0|num_fatt1|data_fatt1|imp_fatt1|..." // "num_fatt0|data_fatt0|imp_fatt0|num_fatt1|data_fatt1|imp_fatt1|..."
TToken_string* TEffetto::dati_fatt(long num, const bool valuta) TToken_string& TEffetto::dati_fatt(long num, const bool valuta, TToken_string& dati)
{ {
TToken_string* dati= new TToken_string; dati.cut(0);
dati->cut(0);
TLocalisamfile righe_eff(LF_REFFETTI);
TLocalisamfile righe_eff(LF_REFFETTI); righe_eff.put(REFF_NPROGTR, num);
righe_eff.put(REFF_NPROGTR, num); righe_eff.read();
righe_eff.read(); const int items = rows_r(); // prende il numero delle righe dell'effetto
int items = rows_r(); // prende il numero delle righe dell'effetto for (int i = 1; i <= items; i++) // le legge tutte
for (int i = 1; i <= items; i++)// le legge tutte {
{ dati.add(righe_eff.get(REFF_NFATT));//prende il numero
dati->add(righe_eff.get(REFF_NFATT));//prende il numero dati.add(righe_eff.get(REFF_DATAFATT));//prende la data
dati->add(righe_eff.get(REFF_DATAFATT));//prende la data dati.add(righe_eff.get(valuta ? REFF_IMPFATTVAL : REFF_IMPFATT));//prende l'importo
dati->add(righe_eff.get(valuta ? REFF_IMPFATTVAL : REFF_IMPFATT));//prende l' importo righe_eff.next();// passa alla riga successiva
righe_eff.next();// passa alla riga successiva }
} return dati;
return dati;
} }
// restituisce i dati relativi alle fatture a cui si riferisce l'effetto // restituisce i dati relativi alle fatture a cui si riferisce l'effetto
// costruendo una TToken_string del tipo // costruendo una TToken_string del tipo
// "codnum_fatt0|num_fatt0|anno_fatt0|codnum_fatt1|num_fatt1|anno_fatt1|..." // "codnum_fatt0|num_fatt0|anno_fatt0|codnum_fatt1|num_fatt1|anno_fatt1|..."
TToken_string* TEffetto::altridati_fatt(long num) TToken_string& TEffetto::altridati_fatt(long num, TToken_string& dati)
{ {
TToken_string* dati= new TToken_string; dati.cut(0);
dati->cut(0);
TLocalisamfile righe_eff(LF_REFFETTI);
TLocalisamfile righe_eff(LF_REFFETTI); righe_eff.put(REFF_NPROGTR, num);
righe_eff.put(REFF_NPROGTR, num); righe_eff.read();
righe_eff.read(); const int items = rows_r(); // prende il numero delle righe dell'effetto
int items = rows_r(); // prende il numero delle righe dell'effetto TString16 str;
for (int i = 1; i <= items; i++)// le legge tutte for (int i = 1; i <= items; i++)// le legge tutte
{ {
dati->add(righe_eff.get(REFF_CODNUM));//prende il codice numerazione str = righe_eff.get(REFF_CODNUM); str.trim();
dati->add(righe_eff.get(REFF_NFATT));//prende il numero dati.add(str);//prende il codice numerazione
dati->add(righe_eff.get(REFF_ANNODOC));//prende il numero
righe_eff.next();// passa alla riga successiva str = righe_eff.get(REFF_NFATT); str.trim();
} dati.add(str);//prende il numero
return dati;
str = righe_eff.get(REFF_ANNODOC); str.trim();
dati.add(str);//prende il numero
righe_eff.next();// passa alla riga successiva
}
return dati;
} }
const bool TEffetto::in_valuta() const const bool TEffetto::in_valuta() const

View File

@ -3,7 +3,7 @@
#ifndef __RECARRAY_H #ifndef __RECARRAY_H
#include <recarray.h> #include <recarray.h>
#endif #endif
#include <effetti.h> #include <effetti.h>
#include <reffetti.h> #include <reffetti.h>
@ -88,9 +88,9 @@ public:
// restituisce true se l'effetto si riferisce ad una sola fattura // restituisce true se l'effetto si riferisce ad una sola fattura
bool fatt(long num); bool fatt(long num);
// restituisce i dati relativi alle fatture a cui si riferisce l'effetto // restituisce i dati relativi alle fatture a cui si riferisce l'effetto
TToken_string* dati_fatt(long num, const bool valuta = FALSE); TToken_string& dati_fatt(long num, const bool valuta, TToken_string& dati);
// restituisce i dati codnum, ndoc, anno relativi alle fatture a cui si riferisce l'effetto // restituisce i dati codnum, ndoc, anno relativi alle fatture a cui si riferisce l'effetto
TToken_string* altridati_fatt(long num); TToken_string& altridati_fatt(long num, TToken_string& dati);
// costruttore di default // costruttore di default
TEffetto(); TEffetto();
// costuisce l'effetto con il record passato // costuisce l'effetto con il record passato

View File

@ -229,8 +229,12 @@ int TVariazione_distinte::read(TMask& m)
codice << eff.get_tipo(); codice << '|' << eff.get(EFF_CODCF); codice << eff.get_tipo(); codice << '|' << eff.get(EFF_CODCF);
riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC)); riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC));
codice = eff.get(EFF_CODABIP); codice << eff.get(EFF_CODCABP); codice = eff.get(EFF_CODABI);
riga.add(cache().get("%BAN", codice, "S0")); TString desc(cache().get("%BAN", codice, "S0"));
codice << eff.get(EFF_CODCAB);
desc << " " << cache().get("%BAN", codice, "S0");
desc.cut(50);
riga.add(desc);
if (eff.fatt(numero))// se l'effetto contiene solo una fattura if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata { // metto i riferimenti al documento ed al numero di rata
@ -251,16 +255,16 @@ int TVariazione_distinte::read(TMask& m)
//gestisco il controllo sulla presenza o meno di una valuta //gestisco il controllo sulla presenza o meno di una valuta
const TString16 codval(eff.get(EFF_CODVAL)); const TString16 codval(eff.get(EFF_CODVAL));
if (i == 0) if (i == 0)
{ {
const bool valuta = codval.not_empty() && codval != TCurrency::get_firm_val(); const bool valuta = ::is_true_value(codval);
m.set(F_CODVAL, codval); m.set(F_CODVAL, codval);
m.enable(F_CODVAL, valuta); m.enable(F_CODVAL, valuta);
} }
riga.add(codval); riga.add(codval);
TCurrency soldi(eff.get_real(EFF_IMPORTO)); const real soldi = eff.get_real(EFF_IMPORTO);
riga.add(soldi.string()); riga.add(soldi.string());
TCurrency soldival(eff.get_real(EFF_IMPORTOVAL), codval); const real soldival = eff.get_real(EFF_IMPORTOVAL);
if (!soldival.get_num().is_zero()) if (!soldival.is_zero())
riga.add(soldival.string()); riga.add(soldival.string());
shrighe.row(i) = riga; shrighe.row(i) = riga;
@ -458,7 +462,6 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
TString16 codval = app()._msk->get(F_CODVAL); TString16 codval = app()._msk->get(F_CODVAL);
TString16 codtab; TString16 codtab;
if (codval.empty()) codval = "LIT";
int err, i = 0; int err, i = 0;
err = eff.read(f, tipodist, ndist, nrigadist); err = eff.read(f, tipodist, ndist, nrigadist);
@ -476,10 +479,8 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
const char tipo = eff.get_tipo(); const char tipo = eff.get_tipo();
TString16 valuta = eff.get(EFF_CODVAL); TString16 valuta = eff.get(EFF_CODVAL);
if (valuta.empty())
valuta = "LIT";
const bool valuta_ok = valuta == codval; const bool valuta_ok = ::same_values(valuta, codval);
const long numero = eff.get_long(EFF_NPROGTR); const long numero = eff.get_long(EFF_NPROGTR);
if (to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipod) if (to_select && valuta_ok && !effetto_aggiunto(numero) && tipo == tipod)
@ -493,8 +494,12 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
codice << tipo << '|' << eff.get(EFF_CODCF); codice << tipo << '|' << eff.get(EFF_CODCF);
riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC)); riga.add(cache().get(LF_CLIFO, codice, CLI_RAGSOC));
codice = eff.get(EFF_CODABIP); codice << eff.get(EFF_CODCABP); codice = eff.get(EFF_CODABI);
riga.add(cache().get("%BAN", codice, "S0")); TString desc(cache().get("%BAN", codice, "S0"));
codice << eff.get(EFF_CODCAB);
desc << " " << cache().get("%BAN", codice, "S0");
desc.cut(50);
riga.add(desc);
if (eff.fatt(numero))// se l'effetto contiene solo una fattura if (eff.fatt(numero))// se l'effetto contiene solo una fattura
{ // metto i riferimenti al documento ed al numero di rata { // metto i riferimenti al documento ed al numero di rata
@ -514,11 +519,11 @@ void TVariazione_distinte::carica_riba(int tipopag, const bool reset)
} }
riga.add(valuta); riga.add(valuta);
TCurrency soldi(eff.get_real(EFF_IMPORTO), "_FIRM"); const real soldi = eff.get_real(EFF_IMPORTO);
riga.add(soldi.string()); riga.add(soldi.string());
TCurrency soldival(eff.get_real(EFF_IMPORTOVAL), codval); const real soldival = eff.get_real(EFF_IMPORTOVAL);
if (!soldival.get_num().is_zero()) if (!soldival.is_zero())
riga.add(soldival.string()); riga.add(soldival.string());
sf.row(i) = riga; sf.row(i) = riga;
@ -582,9 +587,7 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
real res = m2.get_real(F_TOTIMPDIST); real res = m2.get_real(F_TOTIMPDIST);
if (res > ZERO) if (res > ZERO)
{ // se i due importi sono diversi da zero { // se i due importi sono diversi da zero
TString val = m->get(F_CODVAL); TString16 val = m->get(F_CODVAL);
if (val == "LIT")
val.cut(0);
int items = sf.items(); int items = sf.items();
// cerca se esiste un effetto con importo uguale a quello // cerca se esiste un effetto con importo uguale a quello
// da caricare // da caricare
@ -592,13 +595,12 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
TString16 codval = row.get(sf.cid2index(F_VALUTA)); TString16 codval = row.get(sf.cid2index(F_VALUTA));
codval.trim();
// se la valuta non appare o è lire faccio in modo che vengano // se la valuta non appare o è lire faccio in modo che vengano
// presi gli effetti con valuta inesistente // presi gli effetti con valuta inesistente
if (codval == " " || codval == "LIT") const bool valuta = ::is_true_value(codval);
codval.cut(0); const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
const bool valuta = codval.not_empty(); if (imp == res && ::same_values(codval, val))
const real imp(real::ita2eng(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO))));
if (imp == res && codval == val)
{ {
row.add('X', 0); row.add('X', 0);
res = ZERO; res = ZERO;
@ -610,15 +612,14 @@ bool TVariazione_distinte::imp_aut_handler(TMask_field& f, KEY k)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
TString16 codval = row.get(sf.cid2index(F_VALUTA)); TString16 codval = row.get(sf.cid2index(F_VALUTA));
if (codval == " " || codval == "LIT") codval.trim();
codval.cut(0); const bool valuta = ::is_true_value(codval) ;
const bool valuta = codval.not_empty(); const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)));
const real imp(real::ita2eng(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO))));
// se l'importo, della riga corrente dello sheet, è minore // se l'importo, della riga corrente dello sheet, è minore
// dell 'importo che si deve caricare e se lo rimane anche // dell 'importo che si deve caricare e se lo rimane anche
// sommato all'importo già selezionato, si procede a rendere // sommato all'importo già selezionato, si procede a rendere
// la riga selezionata per il caricamento // la riga selezionata per il caricamento
if (codval == val && imp <= res) if (::same_values(codval, val) && imp <= res)
{ {
row.add('X',0); row.add('X',0);
res -= imp; res -= imp;
@ -805,7 +806,8 @@ void TVariazione_distinte::calcola_totale()
const int items = sf.items(); const int items = sf.items();
real impdist; real impdist;
const TString16 codval = m->get(F_CODVAL); const TString16 codval = m->get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT"; const bool valuta = ::is_true_value(codval);
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
@ -814,7 +816,7 @@ void TVariazione_distinte::calcola_totale()
if (*row.get(0) != 'X') // valido (not to delete) if (*row.get(0) != 'X') // valido (not to delete)
{ {
const real imp(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO))); const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
impdist += imp; impdist += imp;
} }
} }
@ -832,7 +834,8 @@ void TVariazione_distinte::calcola()
real impsel; real impsel;
const real imp_pres = m->get_real(F_TOTIMP); const real imp_pres = m->get_real(F_TOTIMP);
const TString16 codval = m->get(F_CODVAL); const TString16 codval = m->get(F_CODVAL);
const bool valuta = codval.not_empty() && codval != "LIT"; const bool valuta = ::is_true_value(codval);
for (int i = 0; i < items; i++) for (int i = 0; i < items; i++)
{ {
TToken_string& row = sf.row(i); TToken_string& row = sf.row(i);
@ -840,7 +843,7 @@ void TVariazione_distinte::calcola()
// selezionato // selezionato
if (*row.get(0) == 'X') if (*row.get(0) == 'X')
{ {
const real imp(real::ita2eng(row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO)))); const real imp = row.get(sf.cid2index(valuta ? F_IMPORTOVAL : F_IMPORTO));
impsel += imp; impsel += imp;
} }
} }
@ -870,6 +873,8 @@ void TVariazione_distinte::aggiungi()
app().end_wait(); app().end_wait();
m2->reset(F_TOTIMPDIST); m2->reset(F_TOTIMPDIST);
m2->reset(F_IMPSEL); m2->reset(F_IMPSEL);
const TString16 codval = m->get(F_CODVAL);
m2->set(F_CODVALS, codval);
m2->run(); m2->run();
calcola_totale(); calcola_totale();
} }

View File

@ -27,6 +27,7 @@
#define F_SHEET 204 #define F_SHEET 204
#define F_TOTIMPDIST 205 #define F_TOTIMPDIST 205
#define F_IMPSEL 206 #define F_IMPSEL 206
#define F_CODVALS 207
// Identificatori campi per lo spreadsheet Righe Distinta (ef0300b.uml ed ef0300d.uml) // Identificatori campi per lo spreadsheet Righe Distinta (ef0300b.uml ed ef0300d.uml)
#define F_CHECK 101 #define F_CHECK 101

View File

@ -90,7 +90,7 @@ BEGIN
OUTPUT F_CODABIP CODTAB[1,5] OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10] OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_DENBANP 100@->S0 OUTPUT F_DENBANP 100@->S0
CHECKTYPE REQUIRED CHECKTYPE SEARCH
END END
NUMBER F_CODCABP 5 0 NUMBER F_CODCABP 5 0
@ -99,12 +99,14 @@ BEGIN
FIELD LF_EFFETTI->CODCABP FIELD LF_EFFETTI->CODCABP
FLAGS "RZ" FLAGS "RZ"
COPY ALL F_CODABIP COPY ALL F_CODABIP
CHECKTYPE REQUIRED
END END
STRING F_DENBANP 50 STRING F_DENBANP 50
BEGIN BEGIN
PROMPT 2 5 "Banca di Presentazione " PROMPT 2 5 "Banca di Presentazione "
USE %BAN KEY 2 USE %BAN KEY 2 SELECT 100@->CODTAB!=""
JOIN BNP ALIAS 100 INTO CODTAB==CODTAB
INPUT S0 F_DENBANP INPUT S0 F_DENBANP
DISPLAY "Denominazione@50" S0 DISPLAY "Denominazione@50" S0
DISPLAY "Codice ABI" CODTAB[1,5] DISPLAY "Codice ABI" CODTAB[1,5]
@ -112,7 +114,7 @@ BEGIN
OUTPUT F_CODABIP CODTAB[1,5] OUTPUT F_CODABIP CODTAB[1,5]
OUTPUT F_CODCABP CODTAB[6,10] OUTPUT F_CODCABP CODTAB[6,10]
OUTPUT F_DENBANP S0 OUTPUT F_DENBANP S0
CHECKTYPE REQUIRED CHECKTYPE NORMAL
END END
LIST F_TIPOPAG 24 LIST F_TIPOPAG 24

View File

@ -1,7 +1,7 @@
// DEFINIZIONE MASCHERE, PER RIGHE DISTINTA, PER LA GESTIONE DISTINTE // DEFINIZIONE MASCHERE, PER RIGHE DISTINTA, PER LA GESTIONE DISTINTE
#include "ef0300.h" #include "ef0300.h"
PAGE "Righe Distinta" -1 -1 63 14 PAGE "Righe Distinta" -1 -1 73 14
BOOLEAN F_CHECK BOOLEAN F_CHECK
BEGIN BEGIN
@ -22,13 +22,13 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
STRING F_CLIENTE 50 40 STRING F_CLIENTE 50
BEGIN BEGIN
PROMPT 2 4 "Cliente " PROMPT 2 4 "Cliente "
FLAGS "D" FLAGS "D"
END END
STRING F_BANCA 50 40 STRING F_BANCA 50
BEGIN BEGIN
PROMPT 2 5 "Banca d'appoggio " PROMPT 2 5 "Banca d'appoggio "
FLAGS "D" FLAGS "D"

View File

@ -42,16 +42,22 @@ BEGIN
ITEM "Importo Val." ITEM "Importo Val."
END END
NUMBER F_TOTIMPDIST 18 2 STRING F_CODVALS 3
BEGIN BEGIN
PROMPT 2 17 "Importo " PROMPT 2 17 ""
PICTURE "###.###.###.###,@@" FLAGS "H"
END END
NUMBER F_IMPSEL 18 2 CURRENCY F_TOTIMPDIST 18
BEGIN
PROMPT 2 17 "Importo "
DRIVENBY F_CODVALS
END
CURRENCY F_IMPSEL 18
BEGIN BEGIN
PROMPT 37 17 "Importo Selezionato " PROMPT 37 17 "Importo Selezionato "
PICTURE "###.###.###.###,@@" DRIVENBY F_CODVALS
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2

View File

@ -1,7 +1,7 @@
// DEFINIZIONE MASCHERE, PER RIGHE DISTINTA, PER LA GESTIONE DISTINTE // DEFINIZIONE MASCHERE, PER RIGHE DISTINTA, PER LA GESTIONE DISTINTE
#include "ef0300.h" #include "ef0300.h"
PAGE "Righe Distinta" -1 -1 63 14 PAGE "Righe Distinta" -1 -1 73 14
BOOLEAN F_CHECK BOOLEAN F_CHECK
BEGIN BEGIN
@ -22,13 +22,13 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
STRING F_CLIENTE 50 40 STRING F_CLIENTE 50
BEGIN BEGIN
PROMPT 2 4 "Cliente " PROMPT 2 4 "Cliente "
FLAGS "D" FLAGS "D"
END END
STRING F_BANCA 50 40 STRING F_BANCA 50
BEGIN BEGIN
PROMPT 2 5 "Banca d'appoggio " PROMPT 2 5 "Banca d'appoggio "
FLAGS "D" FLAGS "D"
@ -62,18 +62,19 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
STRING F_IMPORTO 18 CURRENCY F_IMPORTO 18
BEGIN BEGIN
PROMPT 2 10 "Importo " PROMPT 2 10 "Importo "
FIELD LF_EFFETTI->IMPORTO FIELD LF_EFFETTI->IMPORTO
FLAGS "DR" FLAGS "D"
END END
STRING F_IMPORTOVAL 18 CURRENCY F_IMPORTOVAL 18
BEGIN BEGIN
PROMPT 2 11 "Importo Val. " PROMPT 2 11 "Importo Val. "
FIELD LF_EFFETTI->IMPORTOVAL FIELD LF_EFFETTI->IMPORTOVAL
FLAGS "DR" FLAGS "D"
DRIVENBY F_VALUTA
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 9 2

View File

@ -65,7 +65,7 @@ protected:
static bool annulla_handler(TMask_field& f, KEY k); static bool annulla_handler(TMask_field& f, KEY k);
public: public:
int base_no() { return _base_page_no; } int base_no() const { return _base_page_no; }
const TMask& msk() const { return *_msk; } const TMask& msk() const { return *_msk; }
const TRelation& firm_rel() const { return *_firmrel; } const TRelation& firm_rel() const { return *_firmrel; }
@ -156,6 +156,7 @@ bool TEmissione::create()
_rel->add("%BAN", "CODTAB=CODABI+CODCAB", 1, 0, 402); _rel->add("%BAN", "CODTAB=CODABI+CODCAB", 1, 0, 402);
_rel->add(LF_COMUNI, "STATO=STATOCF|COM=COMCF",1,LF_CLIFO); _rel->add(LF_COMUNI, "STATO=STATOCF|COM=COMCF",1,LF_CLIFO);
_rel->add(LF_COMUNI, "STATO=STATO|COM=COM", 1, LF_INDSP, 213); _rel->add(LF_COMUNI, "STATO=STATO|COM=COM", 1, LF_INDSP, 213);
_rel->add("BNP", "CODTAB=CODABIP+CODCABP", 1, 0, 403);
_cur = NULL; _cur = NULL;
_msk->set(F_NOMEFILE,RIBAFILENAME); _msk->set(F_NOMEFILE,RIBAFILENAME);
// _trasfile = new TRiba_file(RIBAFILENAME, "riba.ini"); // _trasfile = new TRiba_file(RIBAFILENAME, "riba.ini");
@ -327,6 +328,16 @@ void TEmissione::footer_ef()
TRecord_text rec; TRecord_text rec;
*_cur = 0; *_cur = 0;
rec.set_type("EF"); rec.set_type("EF");
if (!_trasfile->tracciato_setif())
{
TTracciato_record * trec = _trasfile->t_rec("EF");
const int p1 = trec->get(7).position();
const int p2 = trec->get(8).position();
trec->get(7).set_position(p2);
trec->get(8).set_position(p1);
}
_trasfile->autoload(rec, *_cur); _trasfile->autoload(rec, *_cur);
_trasfile->write(rec); _trasfile->write(rec);
_trasfile->write_file()->seekp(0, ios::end); _trasfile->write_file()->seekp(0, ios::end);
@ -640,7 +651,7 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s)
long num = effetto.numero(); long num = effetto.numero();
const bool in_valuta = effetto.in_valuta(); const bool in_valuta = effetto.in_valuta();
bool condition = (effetto.fatt(num));//TRUE se effetto non raggruppato bool condition = (effetto.fatt(num));//TRUE se effetto non raggruppato
TToken_string* dati = effetto.dati_fatt(num, in_valuta); TToken_string dati; effetto.dati_fatt(num, in_valuta, dati);
TString in(s.get()); TString in(s.get());
if (in[0]=='!') if (in[0]=='!')
{ {
@ -656,13 +667,13 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s)
// "!DATIFATT" stampa numero e data fattura delle fatture a cui si riferisce l'effetto // "!DATIFATT" stampa numero e data fattura delle fatture a cui si riferisce l'effetto
if (in == "DATIFATT") if (in == "DATIFATT")
{ {
int elem = dati->items(); int elem = dati.items();
TString descfatt; TString descfatt;
for (int i = 0; i < elem; i+=3) for (int i = 0; i < elem; i+=3)
{ {
descfatt << dati->get(i); descfatt << dati.get(i);
descfatt << ' '; descfatt << ' ';
descfatt << dati->get(i+1); descfatt << dati.get(i+1);
descfatt << '\n'; descfatt << '\n';
} }
cf.set(descfatt); cf.set(descfatt);
@ -672,7 +683,7 @@ bool TRiba_form::validate(TForm_item &cf, TToken_string &s)
{ {
if (condition) if (condition)
{ {
real importo(dati->get(2)); real importo(dati.get(2));
cf.set(importo.string()); cf.set(importo.string());
} }
} }
@ -862,8 +873,8 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
// "!DATI" numero e data fattura // "!DATI" numero e data fattura
TEffetto effetto(cursor()->file().curr()); //= eff.curr(); TEffetto effetto(cursor()->file().curr()); //= eff.curr();
long num = effetto.numero(); long num = effetto.numero();
TToken_string* dati = effetto.dati_fatt(num); TToken_string dati; effetto.dati_fatt(num, FALSE, dati);
const int elem = dati->items(); const int elem = dati.items();
TString80 in(s.get()); // prende il primo parametro, il codice del messaggio TString80 in(s.get()); // prende il primo parametro, il codice del messaggio
if (in[0]=='!') if (in[0]=='!')
{ {
@ -874,9 +885,9 @@ bool TDistinta_form::validate(TForm_item &cf, TToken_string &s)
TString descfatt; TString descfatt;
for (int i = 0; i < elem; i+=3) for (int i = 0; i < elem; i+=3)
{ {
descfatt << dati->get(i); descfatt << dati.get(i);
descfatt << ' '; descfatt << ' ';
descfatt << dati->get(i+1); descfatt << dati.get(i+1);
descfatt << '\n'; descfatt << '\n';
} }
cf.set(descfatt); cf.set(descfatt);
@ -1082,49 +1093,51 @@ void TRiba_file::validate(TCursor& cur,TRecord_text &rec, TToken_string &s, TStr
TString descfatt; TString descfatt;
if (tracciato_setif()) if (tracciato_setif())
{ {
TToken_string* dati = effetto.dati_fatt(num); TToken_string dati; effetto.dati_fatt(num, FALSE, dati);
int elem = dati->items(); int elem = dati.items();
for (int i = 0; i < elem; i+=3) for (int i = 0; i < elem; i+=3)
{ {
descfatt << dati->get(i); descfatt << dati.get(i);
descfatt << " "; descfatt << " ";
descfatt << dati->get(i+1); descfatt << dati.get(i+1);
descfatt << " "; descfatt << " ";
} }
} }
else else
{ {
TToken_string* dati = effetto.altridati_fatt(num); TToken_string dati; effetto.altridati_fatt(num, dati);
int elem = dati->items(); int elem = dati.items();
for (int i = 0; i < elem; i+=3) TString16 str;
{ for (int i = 0; i < elem; i+=3)
if (i!=0) {
descfatt << "/"; if (i!=0)
descfatt << dati->get(i); // codnum descfatt << "/";
descfatt << " "; str = dati.get(i); str.trim(); // codnum
descfatt << dati->get(i+1); // numdoc if (str.not_empty()) descfatt << str << ' ';
descfatt << " ";
TString16 anno = dati->get(i+2); // anno (2 cifre) str = dati.get(); str.trim(); // numdoc
anno.trim(); if (str.not_empty()) descfatt << str;
if (anno.len() > 2)
descfatt << anno.right(2); str = dati.get(i); // anno (2 cifre)
else str.trim();
descfatt << anno.rpad(2); if (str.len() >= 2)
} descfatt << ' ' << str.right(2);
} }
int l = descfatt.len(); }
const int l = descfatt.len();
TString in(s.get()); TString in(s.get());
if (in[0]=='!') if (in[0]=='!')
{ {
in.ltrim(1); in.ltrim(1);
if (in == "1") if (in == "1")
{ {
valore = descfatt.left(40); valore = descfatt.left(40);
valore.trim(); valore.trim();
} }
if (in == "2") if (in == "2")
{ {
valore = descfatt.mid(40, l); valore = descfatt.mid(40, l);
valore.trim();
} }
} }
} }

View File

@ -560,17 +560,17 @@ bool TPrint_effetti_app::preprocess_page(int file, int counter)
// prendo dall'effetto tutti i dati relativi alle fatture, che // prendo dall'effetto tutti i dati relativi alle fatture, che
// vengono inseriti nella Token_String nell'ordine // vengono inseriti nella Token_String nell'ordine
// NUMERO FATTURA|DATA FATTURA|IMPORTO FATTURA // NUMERO FATTURA|DATA FATTURA|IMPORTO FATTURA
TToken_string* dati = effetto.dati_fatt(num); TToken_string dati; effetto.dati_fatt(num, FALSE, dati);
int elem = dati->items(); int elem = dati.items();
if (elem > 3) if (elem > 3)
{ {
TString descfatt; TString descfatt;
int j=3; int j=3;
for (int i = 3; i < elem; i+=3) for (int i = 3; i < elem; i+=3)
{ {
descfatt = dati->get(i+1);// prendo la data della fattura descfatt = dati.get(i+1);// prendo la data della fattura
descfatt << " "; descfatt << " ";
descfatt << dati->get(i);// prendo il numero della fattura descfatt << dati.get(i);// prendo il numero della fattura
_pr.reset(); _pr.reset();
if (_pr_type == st_scadenza || _pr_type == st_cliente ) if (_pr_type == st_scadenza || _pr_type == st_cliente )
_pr.put(descfatt, 111); _pr.put(descfatt, 111);

View File

@ -1,12 +1,4 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"

View File

@ -782,6 +782,8 @@ bool TSchedaPercipienti::check_competenza(TMask_field& f, KEY k)
// //
bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k) bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
{ {
const int fdec = TCurrency::get_firm_dec();
if (k == K_ENTER) if (k == K_ENTER)
{ {
TMask& m = f.mask(); TMask& m = f.mask();
@ -831,8 +833,8 @@ bool TSchedaPercipienti::check_handler(TMask_field& f, KEY k)
app()._tot_vers += versato; app()._tot_vers += versato;
} }
app()._tot_rit.round(0); app()._tot_rit.round(fdec);
app()._tot_vers.round(0); app()._tot_vers.round(fdec);
// memorizzo i totali ritenute pagate/versate // memorizzo i totali ritenute pagate/versate
m.set(F_RITOPE, app()._tot_rit); m.set(F_RITOPE, app()._tot_rit);
@ -1778,19 +1780,20 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
const real h_PercAssImpInps, const real h_PercAssImpInps,
const real h_PercCommitInps) const real h_PercCommitInps)
{ {
const int fdec = TCurrency::get_firm_dec();
// azzera struttura di valori calcolati // azzera struttura di valori calcolati
clear_struct(c); clear_struct(c);
// calcolo CPA // calcolo CPA
c.impcpa = (s.compenso * h_PercCassaPrev) / (100.00 + h_PercCassaPrev); c.impcpa = (s.compenso * h_PercCassaPrev) / (100.00 + h_PercCassaPrev);
c.impcpa.round(); c.impcpa.round(fdec);
if (s.impcpa == ZERO || force) if (s.impcpa == ZERO || force)
s.impcpa = c.impcpa; s.impcpa = c.impcpa;
// calcolo imponibile // calcolo imponibile
c.imponibile = ((s.compenso - s.impcpa) * h_PercAssImp) / 100.00; c.imponibile = ((s.compenso - s.impcpa) * h_PercAssImp) / 100.00;
c.imponibile.round(); c.imponibile.round(fdec);
if (s.imponibile == ZERO || force) if (s.imponibile == ZERO || force)
s.imponibile = c.imponibile; s.imponibile = c.imponibile;
@ -1800,7 +1803,7 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
// calcolo ritenuta lorda // calcolo ritenuta lorda
c.ritlorda = (s.imponibile * s.perc) / 100.00; c.ritlorda = (s.imponibile * s.perc) / 100.00;
c.ritlorda.round(); c.ritlorda.round(fdec);
s.ritlorda = c.ritlorda; s.ritlorda = c.ritlorda;
// calcolo totale detrazioni // calcolo totale detrazioni
@ -1820,7 +1823,7 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
// calcolo contributo Inps complessivo // calcolo contributo Inps complessivo
c.ctssncomp = (((s.compenso * s.alqimp10) / 100.00) * h_PercInps) / 100.00; c.ctssncomp = (((s.compenso * s.alqimp10) / 100.00) * h_PercInps) / 100.00;
c.ctssncomp.round(); c.ctssncomp.round(fdec);
if (s.ctssncomp == ZERO || force) if (s.ctssncomp == ZERO || force)
s.ctssncomp = c.ctssncomp; s.ctssncomp = c.ctssncomp;
@ -1829,7 +1832,7 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
c.ctssnperc = s.ctssncomp - ((s.ctssncomp * 2) / 3); c.ctssnperc = s.ctssncomp - ((s.ctssncomp * 2) / 3);
else else
c.ctssnperc = s.ctssncomp - ((s.ctssncomp * h_PercCommitInps) / 100.00); c.ctssnperc = s.ctssncomp - ((s.ctssncomp * h_PercCommitInps) / 100.00);
c.ctssnperc.round(); c.ctssnperc.round(fdec);
if (s.ctssnperc == ZERO || force) if (s.ctssnperc == ZERO || force)
s.ctssnperc = c.ctssnperc; s.ctssnperc = c.ctssnperc;
@ -1839,7 +1842,7 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
// calcolo ritenute utili pagati // calcolo ritenute utili pagati
c.ritutpag = (s.utpagati * s.perc) / 100.00; c.ritutpag = (s.utpagati * s.perc) / 100.00;
c.ritutpag.round(); c.ritutpag.round(fdec);
if (s.ritutpag == ZERO || force) if (s.ritutpag == ZERO || force)
s.ritutpag = c.ritutpag; s.ritutpag = c.ritutpag;
if (abs(s.ritutpag) > abs(s.ritenuta)) if (abs(s.ritutpag) > abs(s.ritenuta))
@ -1875,40 +1878,6 @@ Pag_struct& TSchedaPercipienti::calcola_riga_pag(Pag_struct& s,
TSheet_field& TSchedaPercipienti::enable_pag_sheet(TMask& m, const TString& quadro) const TSheet_field& TSchedaPercipienti::enable_pag_sheet(TMask& m, const TString& quadro) const
{ {
TSheet_field* s = NULL; TSheet_field* s = NULL;
// procedura originale
/* TSheet_field& s_C = (TSheet_field&)m.field(F_PAGAMENTI_C);
if (quadro == "C")
{
s_C.show();
s = &s_C;
}
else s_C.hide();
TSheet_field& s_D = (TSheet_field&)m.field(F_PAGAMENTI_D);
if (quadro == "D" || quadro == "D1" || quadro == "E" || quadro == "E1")
{
s_D.show();
s = &s_D;
}
else s_D.hide();
TSheet_field& s_DB = (TSheet_field&)m.field(F_PAGAMENTI_DB);
if (quadro == "DB")
{
s_DB.show();
s = &s_DB;
}
else s_DB.hide();
TSheet_field& s_G = (TSheet_field&)m.field(F_PAGAMENTI_G);
if (quadro == "G")
{
s_G.show();
s = &s_G;
}
else s_G.hide();
*/
TSheet_field& s_C = (TSheet_field&)m.field(F_PAGAMENTI_C); TSheet_field& s_C = (TSheet_field&)m.field(F_PAGAMENTI_C);
if (quadro == "SC" || quadro == "SE") if (quadro == "SC" || quadro == "SE")
{ {

View File

@ -3,8 +3,6 @@
#include "770102.h" #include "770102.h"
#include <tabutil.h> #include <tabutil.h>
HIDDEN TString80 tmp1, tmp2;
void TSchedaPercipienti::init_mask(TMask& m) void TSchedaPercipienti::init_mask(TMask& m)
{ {
update_lasts(m); update_lasts(m);
@ -265,20 +263,28 @@ void TSchedaPercipienti::load_pag_sheet(const long numvers)
continue; continue;
const long npag = i; const long npag = i;
const int LARGHEZZA_COL = 15; const int LARGHEZZA_COL = 15;
TString80 dep;
d->add(" "); // 0 spazio per la 'X' di selezione d->add(" "); // 0 spazio per la 'X' di selezione
TString dep(riga.get(token_pos("DATAPAG")));
dep = riga.get(token_pos("DATAPAG"));
d->add(dep); // 1 data pagamento d->add(dep); // 1 data pagamento
comp = riga.get(token_pos("COMPENSO")); comp = riga.get(token_pos("COMPENSO"));
dep = comp.string("."); const TCurrency soldi_compenso(comp);
dep = soldi_compenso.string(TRUE);
dep.right_just(LARGHEZZA_COL); dep.right_just(LARGHEZZA_COL);
d->add(dep); // 2 compenso d->add(dep); // 2 compenso
ritpag = riga.get(token_pos("RITENUTA")); ritpag = riga.get(token_pos("RITENUTA"));
dep = ritpag.string("."); const TCurrency soldi_ritenuta(ritpag);
dep = soldi_ritenuta.string(TRUE);
dep.right_just(LARGHEZZA_COL); dep.right_just(LARGHEZZA_COL);
d->add(dep); // 3 ritenuta d->add(dep); // 3 ritenuta
d->add(i); // 4 numero riga d->add(i); // 4 numero riga
d->add(nvers); // 5 numero versamento collegato d->add(nvers); // 5 numero versamento collegato
_pags->add(*d); // aggiungo la riga nell'array_sheet _pags->add(*d); // aggiungo la riga nell'array_sheet
@ -847,8 +853,8 @@ bool TSchedaPercipienti::pag_standard_handler(TMask_field& f, KEY k)
// controllo CPA // controllo CPA
if (name == "IMPCPA") if (name == "IMPCPA")
{ {
if ((d_codqua != "SF" && d_codqua != "SG") && s.impcpa != ZERO) if ((d_codqua != "SC") && s.impcpa != ZERO)
return f.error_box("CPA valido solo per causali con quadro SF e SG"); return f.error_box("CPA valido solo per causali con quadro SC");
if (abs(s.impcpa) > abs(s.compenso)) if (abs(s.impcpa) > abs(s.compenso))
return f.error_box("CPA maggiore del compenso"); return f.error_box("CPA maggiore del compenso");
} }

View File

@ -2,13 +2,13 @@
#include <applicat.h> #include <applicat.h>
#include <assoc.h> #include <assoc.h>
#include <relation.h> #include <currency.h>
#include <progind.h>
#include <urldefid.h>
#include <sheet.h>
#include <mask.h>
#include <maskfld.h>
#include <mailbox.h> #include <mailbox.h>
#include <mask.h>
#include <progind.h>
#include <relation.h>
#include <sheet.h>
#include <urldefid.h>
#include "77lib.h" #include "77lib.h"
#include "770200a.h" #include "770200a.h"
@ -16,7 +16,7 @@
class TVersa_rit : public TApplication class TVersa_rit : public TApplication
{ {
private: private:
TLink770 _coll; TLink770 _coll;
real _versato; real _versato;
TRelation* _rel; TRelation* _rel;
TCursor* _cur; TCursor* _cur;
@ -27,8 +27,8 @@ class TVersa_rit : public TApplication
TLocalisamfile* _perc, *_scperc, *_rpag, *_rver; TLocalisamfile* _perc, *_scperc, *_rpag, *_rver;
TAssoc_array _apags; TAssoc_array _apags;
// Estremi versamento // Estremi versamento
TString16 _data, _serie, _numero; TString16 _data, _serie, _numero;
char _luogo, _tipo; char _luogo, _tipo;
void add(const long codditta, char tipoa, const long codanagr, void add(const long codditta, char tipoa, const long codanagr,
const int nprog, TToken_string& rriga); const int nprog, TToken_string& rriga);
@ -64,8 +64,8 @@ class TVersa_rit : public TApplication
char tipoa,const long codanagr,const int nprog); char tipoa,const long codanagr,const int nprog);
TCursor* meik_curs(TRelation* rel); TCursor* meik_curs(TRelation* rel);
bool do_all(); bool do_all();
void build_schede_sheet(const long codditta); void build_schede_sheet(const long codditta);
void build_pagam_sheet(const long codditta); void build_pagam_sheet(const long codditta);
public: public:
TVersa_rit() {} TVersa_rit() {}
@ -90,10 +90,10 @@ bool TVersa_rit::create()
// (lo lascio per eventuali prove) // (lo lascio per eventuali prove)
// real totdocla = ZERO; // real totdocla = ZERO;
// real spesela = ZERO; // real spesela = ZERO;
// real compensola = ZERO; // real compensola = ZERO;
// real impostela = ZERO; // real impostela = ZERO;
// real ritenutela = 70000; // real ritenutela = 70000;
// TToken_string s(80); // TToken_string s(80);
// s.add(4); // s.add(4);
// s.add("M"); // s.add("M");
// s.add("F"); // s.add("F");
@ -138,16 +138,16 @@ bool TVersa_rit::create()
_sheet_perc = new TCursor_sheet(_cur, _sheet_perc = new TCursor_sheet(_cur,
" |TIPOA|CODANAGR|6->RAGSOC", " |TIPOA|CODANAGR|6->RAGSOC",
"Selezione percipienti", "Selezione percipienti",
"@1|Tipo|Codice|Ragione sociale@50", "@1|Tipo|Codice|Ragione sociale@50",
8, 3); 8, 3);
_schede = new TArray_sheet(3, 3, -3, -3, _schede = new TArray_sheet(3, 3, -3, -3,
"Selezione schede", "Selezione schede",
"@1|T|Codice|Scheda n.|Data@10|Ragione@50"); "@1|T|Codice|Scheda n.|Data@10|Ragione@50");
_pagam = new TArray_sheet(3, 3, -3, -3, _pagam = new TArray_sheet(3, 3, -3, -3,
"Selezione ritenute da versare", "Selezione ritenute da versare",
"@1|T|Codice|Scheda n.|Riga n.|Ritenuta@15"); "@1|T|Codice|Scheda n.|Riga n.|Ritenuta@18R");
_apags.destroy(); _apags.destroy();
dispatch_e_menu (BAR_ITEM(1)); dispatch_e_menu (BAR_ITEM(1));
@ -359,7 +359,8 @@ void TVersa_rit::build_pagam_sheet(const long codditta)
while ( (nriga = tpag->get_int()) != 0 ) // le righe partono da 1 while ( (nriga = tpag->get_int()) != 0 ) // le righe partono da 1
{ {
real da_versare(tpag->get()); // leggo importo rimasto da versare const real da_versare = tpag->get(); // leggo importo rimasto da versare
const TCurrency k(da_versare);
TToken_string rr(100); TToken_string rr(100);
rr.add(" "); // Spazio per selezionare rr.add(" "); // Spazio per selezionare
@ -368,7 +369,7 @@ void TVersa_rit::build_pagam_sheet(const long codditta)
// rr.add(ragsoc); // rr.add(ragsoc);
rr.add(nprog); rr.add(nprog);
rr.add(nriga); rr.add(nriga);
rr.add(da_versare.string()); rr.add(k.string(TRUE));
_pagam->add(rr); _pagam->add(rr);
} }
} }
@ -424,9 +425,9 @@ void TVersa_rit::build_schede_sheet(const long codditta)
bool TVersa_rit::do_all() bool TVersa_rit::do_all()
{ {
KEY kp; KEY kp;
long items = 0L; long items = 0L;
// esecuzione prima maschera: richiesta estremi versamento // esecuzione prima maschera: richiesta estremi versamento
kp = _msk->run(); kp = _msk->run();
if (kp != K_ENTER) if (kp != K_ENTER)

View File

@ -162,7 +162,7 @@ BEGIN
GROUP 1 2 3 4 5 GROUP 1 2 3 4 5
END END
NUMBER F_VERSATO 15 CURRENCY F_VERSATO 15
BEGIN BEGIN
PROMPT 2 10 "Importo versato " PROMPT 2 10 "Importo versato "
PICTURE "." PICTURE "."
@ -171,12 +171,12 @@ BEGIN
CHECKTYPE REQUIRED CHECKTYPE REQUIRED
END END
BUTTON DLG_OK 9 2 BUTTON DLG_OK 10 2
BEGIN BEGIN
PROMPT -12 -1 "" PROMPT -12 -1 ""
END END
BUTTON DLG_CANCEL 9 2 BUTTON DLG_CANCEL 10 2
BEGIN BEGIN
PROMPT -22 -1 "" PROMPT -22 -1 ""
END END

View File

@ -200,7 +200,7 @@ BEGIN
PROMPT 2 14 "19 Somme assoggettate ai contributi previd.e assist." PROMPT 2 14 "19 Somme assoggettate ai contributi previd.e assist."
END END
NUMBER F_QASACTRPA LENIMP CURRENCY F_QASACTRPA LENIMP
BEGIN BEGIN
PROMPT STDIMP 14 "" PROMPT STDIMP 14 ""
FIELD LF_QUAA->QASACTRPA FIELD LF_QUAA->QASACTRPA
@ -212,7 +212,7 @@ BEGIN
PROMPT 2 15 "20 Somme assoggettate a C.s.s.n." PROMPT 2 15 "20 Somme assoggettate a C.s.s.n."
END END
NUMBER F_AIFCSSN49 LENIMP CURRENCY F_AIFCSSN49 LENIMP
BEGIN BEGIN
PROMPT STDIMP 15 "" PROMPT STDIMP 15 ""
FIELD LF_QUAA->AIFCSSN FIELD LF_QUAA->AIFCSSN
@ -261,7 +261,7 @@ BEGIN
PROMPT 2 4 "21 Contributi previdenz.ed assist.obblig.lav.dip." PROMPT 2 4 "21 Contributi previdenz.ed assist.obblig.lav.dip."
END END
NUMBER F_COBBDIP21 LENIMP CURRENCY F_COBBDIP21 LENIMP
BEGIN BEGIN
PROMPT STDIMP 4 "" PROMPT STDIMP 4 ""
FIELD LF_QUAA->COBBDIP FIELD LF_QUAA->COBBDIP
@ -273,7 +273,7 @@ BEGIN
PROMPT 2 5 "22 Contributi previdenza complementare ex D.Lgs.124/93" PROMPT 2 5 "22 Contributi previdenza complementare ex D.Lgs.124/93"
END END
NUMBER F_QAEXCTRPC LENIMP CURRENCY F_QAEXCTRPC LENIMP
BEGIN BEGIN
PROMPT STDIMP 5 "" PROMPT STDIMP 5 ""
FIELD LF_QUAA->QAEXCTRPC FIELD LF_QUAA->QAEXCTRPC
@ -285,7 +285,7 @@ BEGIN
PROMPT 2 6 "23 Contributi lavoratore dipendente ex D.Lgs.579/95" PROMPT 2 6 "23 Contributi lavoratore dipendente ex D.Lgs.579/95"
END END
NUMBER F_QAEXCTRLD LENIMP CURRENCY F_QAEXCTRLD LENIMP
BEGIN BEGIN
PROMPT STDIMP 6 "" PROMPT STDIMP 6 ""
FIELD LF_QUAA->QAEXCTRLD FIELD LF_QUAA->QAEXCTRLD
@ -297,7 +297,7 @@ BEGIN
PROMPT 2 7 "24 Somme e valori non assoggettati a ritenuta" PROMPT 2 7 "24 Somme e valori non assoggettati a ritenuta"
END END
NUMBER QAF_SVNSOGRIT LENIMP CURRENCY QAF_SVNSOGRIT LENIMP
BEGIN BEGIN
PROMPT STDIMP 7 "" PROMPT STDIMP 7 ""
FIELD LF_QUAA->NORIT FIELD LF_QUAA->NORIT
@ -309,7 +309,7 @@ BEGIN
PROMPT 2 8 "25 Erogazioni spese sanitarie (detrazioni importo interno)" PROMPT 2 8 "25 Erogazioni spese sanitarie (detrazioni importo interno)"
END END
NUMBER F_QAERGSAN LENIMP CURRENCY F_QAERGSAN LENIMP
BEGIN BEGIN
PROMPT STDIMP 8 "" PROMPT STDIMP 8 ""
FIELD LF_QUAA->QAERGSAN FIELD LF_QUAA->QAERGSAN
@ -321,7 +321,7 @@ BEGIN
PROMPT 2 9 "26 Erogazioni spese sanitarie (detrazioni importo parziale)" PROMPT 2 9 "26 Erogazioni spese sanitarie (detrazioni importo parziale)"
END END
NUMBER F_ERSPSAN41 LENIMP CURRENCY F_ERSPSAN41 LENIMP
BEGIN BEGIN
PROMPT STDIMP 9 "" PROMPT STDIMP 9 ""
FIELD LF_QUAA->ERSPSAN FIELD LF_QUAA->ERSPSAN
@ -333,7 +333,7 @@ BEGIN
PROMPT 2 10 "27 Premi di assicurazione vita e infortuni" PROMPT 2 10 "27 Premi di assicurazione vita e infortuni"
END END
NUMBER F_PRASSVI42 LENIMP CURRENCY F_PRASSVI42 LENIMP
BEGIN BEGIN
PROMPT STDIMP 10 "" PROMPT STDIMP 10 ""
FIELD LF_QUAA->PRASSVI FIELD LF_QUAA->PRASSVI
@ -345,7 +345,7 @@ BEGIN
PROMPT 2 11 "28 Contributi previd.complementare ex art.15,c.8,L.335/95" PROMPT 2 11 "28 Contributi previd.complementare ex art.15,c.8,L.335/95"
END END
NUMBER F_CONPRECO43 LENIMP CURRENCY F_CONPRECO43 LENIMP
BEGIN BEGIN
PROMPT STDIMP 11 "" PROMPT STDIMP 11 ""
FIELD LF_QUAA->CONPRECO FIELD LF_QUAA->CONPRECO
@ -357,7 +357,7 @@ BEGIN
PROMPT 2 12 "29 Retribuzioni e pensioni" PROMPT 2 12 "29 Retribuzioni e pensioni"
END END
NUMBER F_DENARO LENIMP CURRENCY F_DENARO LENIMP
BEGIN BEGIN
PROMPT STDIMP 12 "" PROMPT STDIMP 12 ""
FIELD LF_QUAA->DENARO FIELD LF_QUAA->DENARO
@ -369,7 +369,7 @@ BEGIN
PROMPT 2 13 "30 Assegni e indennità erogati da enti previdenz.e assist." PROMPT 2 13 "30 Assegni e indennità erogati da enti previdenz.e assist."
END END
NUMBER F_AIEREP23 LENIMP CURRENCY F_AIEREP23 LENIMP
BEGIN BEGIN
PROMPT STDIMP 13 "" PROMPT STDIMP 13 ""
FIELD LF_QUAA->AIENTIPREV FIELD LF_QUAA->AIENTIPREV
@ -381,7 +381,7 @@ BEGIN
PROMPT 2 14 "31 Compensi da terzi" PROMPT 2 14 "31 Compensi da terzi"
END END
NUMBER F_CCTAMMCONT LENIMP CURRENCY F_CCTAMMCONT LENIMP
BEGIN BEGIN
PROMPT STDIMP 14 "" PROMPT STDIMP 14 ""
FIELD LF_QUAA->CCTAMMCONT FIELD LF_QUAA->CCTAMMCONT
@ -393,7 +393,7 @@ BEGIN
PROMPT 2 15 "32 Imponibile" PROMPT 2 15 "32 Imponibile"
END END
NUMBER F_QAIMPON LENIMP CURRENCY F_QAIMPON LENIMP
BEGIN BEGIN
PROMPT STDIMP 15 "" PROMPT STDIMP 15 ""
FIELD LF_QUAA->QAIMPON FIELD LF_QUAA->QAIMPON
@ -405,7 +405,7 @@ BEGIN
PROMPT 2 16 "33 Imposta corrispondente al totale imponibile" PROMPT 2 16 "33 Imposta corrispondente al totale imponibile"
END END
NUMBER F_ICTOTIMP30 LENIMP CURRENCY F_ICTOTIMP30 LENIMP
BEGIN BEGIN
PROMPT STDIMP 16 "" PROMPT STDIMP 16 ""
FIELD LF_QUAA->ICTOTIMP FIELD LF_QUAA->ICTOTIMP
@ -454,7 +454,7 @@ BEGIN
PROMPT 2 4 "34 Detrazioni per coniuge a carico" PROMPT 2 4 "34 Detrazioni per coniuge a carico"
END END
NUMBER F_DETCC LENIMP CURRENCY F_DETCC LENIMP
BEGIN BEGIN
PROMPT STDIMP 4 "" PROMPT STDIMP 4 ""
FIELD LF_QUAA->DETCC FIELD LF_QUAA->DETCC
@ -466,7 +466,7 @@ BEGIN
PROMPT 2 5 "35 Detrazioni per figli a carico" PROMPT 2 5 "35 Detrazioni per figli a carico"
END END
NUMBER F_DETFC LENIMP CURRENCY F_DETFC LENIMP
BEGIN BEGIN
PROMPT STDIMP 5 "" PROMPT STDIMP 5 ""
FIELD LF_QUAA->DETFC FIELD LF_QUAA->DETFC
@ -478,7 +478,7 @@ BEGIN
PROMPT 2 6 "36 Detrazioni per altri familiari a carico" PROMPT 2 6 "36 Detrazioni per altri familiari a carico"
END END
NUMBER F_DETAF LENIMP CURRENCY F_DETAF LENIMP
BEGIN BEGIN
PROMPT STDIMP 6 "" PROMPT STDIMP 6 ""
FIELD LF_QUAA->DETAF FIELD LF_QUAA->DETAF
@ -490,7 +490,7 @@ BEGIN
PROMPT 2 7 "37 Detrazioni per lavoro dipendente" PROMPT 2 7 "37 Detrazioni per lavoro dipendente"
END END
NUMBER F_DETLD LENIMP CURRENCY F_DETLD LENIMP
BEGIN BEGIN
PROMPT STDIMP 7 "" PROMPT STDIMP 7 ""
FIELD LF_QUAA->DETLD FIELD LF_QUAA->DETLD
@ -502,7 +502,7 @@ BEGIN
PROMPT 2 8 "38 Detrazioni per oneri" PROMPT 2 8 "38 Detrazioni per oneri"
END END
NUMBER F_DETO LENIMP CURRENCY F_DETO LENIMP
BEGIN BEGIN
PROMPT STDIMP 8 "" PROMPT STDIMP 8 ""
FIELD LF_QUAA->DETO FIELD LF_QUAA->DETO
@ -514,7 +514,7 @@ BEGIN
PROMPT 2 9 "39 Totale detrazioni" PROMPT 2 9 "39 Totale detrazioni"
END END
NUMBER F_TOTDET36 LENIMP CURRENCY F_TOTDET36 LENIMP
BEGIN BEGIN
PROMPT STDIMP 9 "" PROMPT STDIMP 9 ""
FIELD LF_QUAA->TOTDET FIELD LF_QUAA->TOTDET
@ -526,7 +526,7 @@ BEGIN
PROMPT 2 10 "40 Ammontare delle ritenute dovute" PROMPT 2 10 "40 Ammontare delle ritenute dovute"
END END
NUMBER F_AMMRITDOV LENIMP CURRENCY F_AMMRITDOV LENIMP
BEGIN BEGIN
PROMPT STDIMP 10 "" PROMPT STDIMP 10 ""
FIELD LF_QUAA->AMMRITDOV FIELD LF_QUAA->AMMRITDOV
@ -539,7 +539,7 @@ BEGIN
PROMPT 2 11 "41 Ammontare delle ritenute operate da terzi" PROMPT 2 11 "41 Ammontare delle ritenute operate da terzi"
END END
NUMBER F_AMRIOT37 LENIMP CURRENCY F_AMRIOT37 LENIMP
BEGIN BEGIN
PROMPT STDIMP 11 "" PROMPT STDIMP 11 ""
FIELD LF_QUAA->AMRIOT FIELD LF_QUAA->AMRIOT
@ -551,7 +551,7 @@ BEGIN
PROMPT 2 12 "42 Ammontare delle ritenute operate dal datore lavoro" PROMPT 2 12 "42 Ammontare delle ritenute operate dal datore lavoro"
END END
NUMBER F_AMRIODL38 LENIMP CURRENCY F_AMRIODL38 LENIMP
BEGIN BEGIN
PROMPT STDIMP 12 "" PROMPT STDIMP 12 ""
FIELD LF_QUAA->AMRIODL FIELD LF_QUAA->AMRIODL
@ -563,7 +563,7 @@ BEGIN
PROMPT 2 13 "43 Eccedenza delle ritenute da rimborsare" PROMPT 2 13 "43 Eccedenza delle ritenute da rimborsare"
END END
NUMBER F_ECCRITRIMB LENIMP CURRENCY F_ECCRITRIMB LENIMP
BEGIN BEGIN
PROMPT STDIMP 13 "" PROMPT STDIMP 13 ""
FIELD LF_QUAA->ECCRITRIMB FIELD LF_QUAA->ECCRITRIMB
@ -575,7 +575,7 @@ BEGIN
PROMPT 2 14 "44 Contributo straordinario per l'Europa da trattenere" PROMPT 2 14 "44 Contributo straordinario per l'Europa da trattenere"
END END
NUMBER F_QACTREURO LENIMP CURRENCY F_QACTREURO LENIMP
BEGIN BEGIN
PROMPT STDIMP 14 "" PROMPT STDIMP 14 ""
FIELD LF_QUAA->QACTREURO FIELD LF_QUAA->QACTREURO
@ -629,7 +629,7 @@ BEGIN
PROMPT 2 4 "45 Contributi obbligatori a carico del dipendente" PROMPT 2 4 "45 Contributi obbligatori a carico del dipendente"
END END
NUMBER F_COBBDIP44 LENIMP CURRENCY F_COBBDIP44 LENIMP
BEGIN BEGIN
PROMPT STDIMP 4 "" PROMPT STDIMP 4 ""
FIELD LF_QUAA->COBBDIP2 FIELD LF_QUAA->COBBDIP2
@ -641,7 +641,7 @@ BEGIN
PROMPT 2 5 "46 Imponibile" PROMPT 2 5 "46 Imponibile"
END END
NUMBER F_AMMIMP45 LENIMP CURRENCY F_AMMIMP45 LENIMP
BEGIN BEGIN
PROMPT STDIMP 5 "" PROMPT STDIMP 5 ""
FIELD LF_QUAA->AMMIMP FIELD LF_QUAA->AMMIMP
@ -653,7 +653,7 @@ BEGIN
PROMPT 2 6 "47 Detrazioni d'imposta" PROMPT 2 6 "47 Detrazioni d'imposta"
END END
NUMBER F_DETIMPOS46 LENIMP CURRENCY F_DETIMPOS46 LENIMP
BEGIN BEGIN
PROMPT STDIMP 6 "" PROMPT STDIMP 6 ""
FIELD LF_QUAA->DETIMPOS FIELD LF_QUAA->DETIMPOS
@ -665,7 +665,7 @@ BEGIN
PROMPT 2 7 "48 Ritenuta eseguita" PROMPT 2 7 "48 Ritenuta eseguita"
END END
NUMBER F_RITESEG47 LENIMP CURRENCY F_RITESEG47 LENIMP
BEGIN BEGIN
PROMPT STDIMP 7 "" PROMPT STDIMP 7 ""
FIELD LF_QUAA->RITESEG FIELD LF_QUAA->RITESEG

View File

@ -59,8 +59,8 @@ BEGIN
INPUT QLAP F_QLANNOPAG INPUT QLAP F_QLANNOPAG
DISPLAY "A.P." QLAP DISPLAY "A.P." QLAP
DISPLAY "M.P." QLMP DISPLAY "M.P." QLMP
DISPLAY "Ritenute@15" QLRITEFF DISPLAY "Ritenute@15R" QLRITEFF
DISPLAY "Importo versato" QLRITVER DISPLAY "Importo versato@R" QLRITVER
DISPLAY "L.V." QLLV DISPLAY "L.V." QLLV
DISPLAY "T.V." QLTV DISPLAY "T.V." QLTV
DISPLAY "C.T." QLCT DISPLAY "C.T." QLCT

View File

@ -1,41 +1,2 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(6)
MENU MENU_BAR(6)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(7)
MENU MENU_BAR(7)
SUBMENU MENU_FILE "~File"

View File

@ -1,29 +1,2 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"

View File

@ -1,26 +1,2 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"

View File

@ -1,14 +1,3 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"

View File

@ -1,9 +1,3 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"

View File

@ -75,12 +75,10 @@ BEGIN
FLAGS "D" FLAGS "D"
END END
NUMBER F_FATTBIL 15 CURRENCY F_FATTBIL 15
BEGIN BEGIN
PROMPT 1 14 "Fatture da ricevere " PROMPT 1 14 "Fatture da ricevere "
PICTURE "."
FIELD LF_PERC->FATTBIL FIELD LF_PERC->FATTBIL
FLAGS "R"
END END
ENDPAGE ENDPAGE

View File

@ -1,30 +1,3 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(1)
MENU MENU_BAR(1)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(2)
MENU MENU_BAR(2)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(3)
MENU MENU_BAR(3)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(4)
MENU MENU_BAR(4)
SUBMENU MENU_FILE "~File"
MENUBAR MENU_BAR(5)
MENU MENU_BAR(5)
SUBMENU MENU_FILE "~File"

View File

@ -1,7 +1,5 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -1,5 +1,3 @@
#include <default.url> #include <default.url>
#include <mainmenu.url>
MENU TASK_MENUBAR
SUBMENU MENU_FILE "~File"

View File

@ -33,7 +33,7 @@ class TSchedaP;
#define DITTA_770 "Ditta770" #define DITTA_770 "Ditta770"
// Arrotonda modificato { 1500 -> 1000 (e non 2000 come in round(-3)) } // Arrotonda modificato { 1500 -> 1000 (e non 2000 come in round(-3)) }
const real& round_770(const real& importo); real round_770(const real& importo);
// Cerca di stabilire se il titolare della ditta e' PF o PG // Cerca di stabilire se il titolare della ditta e' PF o PG
char tipo_persona (long codditta); char tipo_persona (long codditta);

View File

@ -1,12 +1,15 @@
// 77lib01.cpp // 77lib01.cpp
#include <applicat.h> #include <applicat.h>
#include <config.h> #include <config.h>
#include <mask.h> #include <currency.h>
#include <isam.h> #include <isam.h>
#include <anagr.h> #include <mask.h>
#include <tabutil.h> #include <tabutil.h>
#include <comuni.h>
#include <relation.h> #include <relation.h>
#include <anagr.h>
#include <comuni.h>
#include "scperc.h" #include "scperc.h"
#include "perc.h" #include "perc.h"
#include "rver.h" #include "rver.h"
@ -15,8 +18,7 @@
#include "dipend.h" // per is_erede #include "dipend.h" // per is_erede
#include "77lib.h" #include "77lib.h"
HIDDEN real __dep; HIDDEN TString __tmp;
HIDDEN TString80 __tmp;
HIDDEN const char* _build_key(TVersamento& vers); HIDDEN const char* _build_key(TVersamento& vers);
HIDDEN long _codditta_770 = 0L; // La ditta corrente 770 HIDDEN long _codditta_770 = 0L; // La ditta corrente 770
@ -98,19 +100,32 @@ const char* get_desc_cau(const char* codcau)
// //
// Round adattata per 770 - 1.12.95 // Round adattata per 770 - 1.12.95
// Arrotonda cosi': // Arrotonda cosi':
// se importo >= 500 importo -> 1000 // se importo > 500 importo -> 1000
// se importo < 500 importo -> 0 // se importo <= 500 importo -> 0
// L'unica differenza con round(-3) e' il comportamento // L'unica differenza con round(-3) e' il comportamento
// alle 500 lire. // alle 500 lire.
// //
const real& round_770(const real& importo) real round_770(const real& importo)
{ {
__dep = ZERO; const int ndec = TCurrency::get_firm_dec();
__dep = importo / 1000.00; real imp;
__dep = __dep + 0.499; if (ndec == 0)
__dep.trunc(); {
__dep *= 1000.00; imp = importo / 1000.00;
return __dep; imp = imp + 0.499;
imp.trunc();
imp *= 1000.00;
/* bel colpo, solo qualche logaritmo naturale in più e poi sarebbe perfetto: bastava
imp = importo - 1.0;
imp.round(-3);
*/
}
else
{
imp = importo;
imp.round(0);
}
return imp;
} }
int conta_tipiper(const long codit, TString& quadro, int* NumFisiche, int* NumNoFisiche) int conta_tipiper(const long codit, TString& quadro, int* NumFisiche, int* NumNoFisiche)
@ -362,7 +377,7 @@ bool esiste_pag_in_anno(TSchedaP& sch, const int annodic, const TDate& data_da,
{ {
int annopag = datapag.year(); int annopag = datapag.year();
if (annocomp) if (annocomp)
annopag = annocomp; annopag = annocomp;
if (annopag == annodic) if (annopag == annodic)
return TRUE; return TRUE;
} }
@ -561,13 +576,13 @@ int num_quadri_L_agg(const long codditta)
// quadri esauriti sul modulo base // quadri esauriti sul modulo base
righe -= rbase; righe -= rbase;
if (righe <= 0) if (righe <= 0)
return 0; return 0;
// calcola numero quadri aggiuntivi // calcola numero quadri aggiuntivi
div_t div_result; div_t div_result;
div_result = div(righe, ragg); div_result = div(righe, ragg);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
return div_result.quot; return div_result.quot;
} }
@ -652,47 +667,47 @@ int num_quadri_N_agg(const long codditta)
righes -= rbases; righes -= rbases;
righet -= rbaset; righet -= rbaset;
if (righen<=0 && righep<=0 && righeq<=0 && righer<=0 && righes<=0 && righet<=0) if (righen<=0 && righep<=0 && righeq<=0 && righer<=0 && righes<=0 && righet<=0)
return 0; return 0;
// calcola numero quadri aggiuntivi // calcola numero quadri aggiuntivi
int qagg = 0; int qagg = 0;
div_t div_result; div_t div_result;
// quadri N // quadri N
div_result = div(righen, raggn); div_result = div(righen, raggn);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
// quadri P // quadri P
div_result = div(righep, raggp); div_result = div(righep, raggp);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
// quadri Q // quadri Q
div_result = div(righeq, raggq); div_result = div(righeq, raggq);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
// quadri R // quadri R
div_result = div(righer, raggr); div_result = div(righer, raggr);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
// quadri S // quadri S
div_result = div(righes, raggs); div_result = div(righes, raggs);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
// quadri T // quadri T
div_result = div(righet, raggt); div_result = div(righet, raggt);
if (div_result.rem) if (div_result.rem)
div_result.quot++; div_result.quot++;
if (div_result.quot > qagg) if (div_result.quot > qagg)
qagg = div_result.quot; qagg = div_result.quot;
return qagg; return qagg;
} }
@ -1096,68 +1111,68 @@ bool TVersamento_stampa::find(TVersamento& vers)
int Pag_struct::operator==(Pag_struct& s) int Pag_struct::operator==(Pag_struct& s)
{ {
if (this->datapag != s.datapag) if (this->datapag != s.datapag)
return 0; return 0;
if (this->imponibile != s.imponibile) if (this->imponibile != s.imponibile)
return 0; return 0;
if (this->perc != s.perc) if (this->perc != s.perc)
return 0; return 0;
if (this->ritenuta != s.ritenuta) if (this->ritenuta != s.ritenuta)
return 0; return 0;
if (this->compenso != s.compenso) if (this->compenso != s.compenso)
return 0; return 0;
if (this->netto != s.netto) if (this->netto != s.netto)
return 0; return 0;
if (this->numvers != s.numvers) if (this->numvers != s.numvers)
return 0; return 0;
if (this->spesa != s.spesa) if (this->spesa != s.spesa)
return 0; return 0;
if (this->ctssnperc != s.ctssnperc) if (this->ctssnperc != s.ctssnperc)
return 0; return 0;
if (this->ctssncomp != s.ctssncomp) if (this->ctssncomp != s.ctssncomp)
return 0; return 0;
if (this->ritlorda != s.ritlorda) if (this->ritlorda != s.ritlorda)
return 0; return 0;
if (this->controbb != s.controbb) if (this->controbb != s.controbb)
return 0; return 0;
if (this->detfamil != s.detfamil) if (this->detfamil != s.detfamil)
return 0; return 0;
if (this->detlavdip != s.detlavdip) if (this->detlavdip != s.detlavdip)
return 0; return 0;
if (this->totdet != s.totdet) if (this->totdet != s.totdet)
return 0; return 0;
if (this->giolavdip != s.giolavdip) if (this->giolavdip != s.giolavdip)
return 0; return 0;
if (this->impcpa != s.impcpa) if (this->impcpa != s.impcpa)
return 0; return 0;
if (this->somregconv != s.somregconv) if (this->somregconv != s.somregconv)
return 0; return 0;
if (this->alqimp10 != s.alqimp10) if (this->alqimp10 != s.alqimp10)
return 0; return 0;
if (this->cod10 != s.cod10) if (this->cod10 != s.cod10)
return 0; return 0;
if (this->utpagati != s.utpagati) if (this->utpagati != s.utpagati)
return 0; return 0;
if (this->utspett != s.utspett) if (this->utspett != s.utspett)
return 0; return 0;
if (this->ritutpag != s.ritutpag) if (this->ritutpag != s.ritutpag)
return 0; return 0;
if (this->ritutspe != s.ritutspe) if (this->ritutspe != s.ritutspe)
return 0; return 0;
if (this->nquote != s.nquote) if (this->nquote != s.nquote)
return 0; return 0;
if (this->somnsrit != s.somnsrit) if (this->somnsrit != s.somnsrit)
return 0; return 0;
if (this->ammlordo != s.ammlordo) if (this->ammlordo != s.ammlordo)
return 0; return 0;
if (this->quotaprov != s.quotaprov) if (this->quotaprov != s.quotaprov)
return 0; return 0;
if (this->impnetto != s.impnetto) if (this->impnetto != s.impnetto)
return 0; return 0;
if (this->comnetto != s.comnetto) if (this->comnetto != s.comnetto)
return 0; return 0;
// strutture uguali // strutture uguali
return 1; return 1;
} }
// overloading operatore di assegnazione per la struct dei pagamenti // overloading operatore di assegnazione per la struct dei pagamenti
@ -1195,8 +1210,8 @@ Pag_struct& Pag_struct::operator=(TRectype& rec)
this->quotaprov = rec.get_real("QUOTAPROV"); this->quotaprov = rec.get_real("QUOTAPROV");
this->impnetto = rec.get_real("IMPNETTO"); this->impnetto = rec.get_real("IMPNETTO");
this->comnetto = rec.get_real("COMNETTO"); this->comnetto = rec.get_real("COMNETTO");
return *this; return *this;
} }
// overloading operatore di assegnazione per la struct dei pagamenti // overloading operatore di assegnazione per la struct dei pagamenti
@ -1227,6 +1242,6 @@ Pag_struct& Pag_struct::operator+=(Pag_struct& s)
this->quotaprov += s.quotaprov; this->quotaprov += s.quotaprov;
this->impnetto += s.impnetto; this->impnetto += s.impnetto;
this->comnetto += s.comnetto; this->comnetto += s.comnetto;
return *this; return *this;
} }

View File

@ -48,11 +48,11 @@ bool TStampa_riepilogo::create()
{ {
TConfig conf(CONFIG_USER, "77"); TConfig conf(CONFIG_USER, "77");
_currfirm = conf.get_long(DITTA_770, "77"); _currfirm = conf.get_long(DITTA_770);
} }
{ {
TConfig conf(CONFIG_STUDIO, "77"); TConfig conf(CONFIG_STUDIO, "77");
_curryear = conf.get_int(ANNO_SEL, "77"); _curryear = conf.get_int(ANNO_SEL);
} }
_msk->set(F_CODICE,_currfirm); _msk->set(F_CODICE,_currfirm);
_msk->set(F_ANNO,_curryear); _msk->set(F_ANNO,_curryear);

View File

@ -70,7 +70,7 @@ BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
FIELD CAUSALE FIELD CAUSALE
END END
NUMBER 3 14 VALUTA 3 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@cTotale" "Tot." SPECIAL STRINGA INTESTAZIONE "@cTotale" "Tot."
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -80,7 +80,7 @@ BEGIN
FIELD TOTALE FIELD TOTALE
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 4 15 VALUTA 4 15
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "Somme non sogg." "Somme non sogg." SPECIAL STRINGA INTESTAZIONE "Somme non sogg." "Somme non sogg."
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -90,7 +90,7 @@ BEGIN
FIELD SOMME FIELD SOMME
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 5 15 VALUTA 5 15
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "Som. Reg. Conv." "Som. Reg. Conv" SPECIAL STRINGA INTESTAZIONE "Som. Reg. Conv." "Som. Reg. Conv"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -100,7 +100,7 @@ BEGIN
FIELD SOMREGCONV FIELD SOMREGCONV
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 6 14 VALUTA 6 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@cImponibile" "Imponibile" SPECIAL STRINGA INTESTAZIONE "@cImponibile" "Imponibile"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -110,7 +110,7 @@ BEGIN
FIELD IMPONIBILE FIELD IMPONIBILE
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 7 14 VALUTA 7 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@cImporto" "Importo" SPECIAL STRINGA INTESTAZIONE "@cImporto" "Importo"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"

View File

@ -67,7 +67,7 @@ KEY "CAUSALE"
PROMPT 2 1 "" PROMPT 2 1 ""
FIELD CAUSALE FIELD CAUSALE
END END
NUMBER 3 14 VALUTA 3 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CImponibile" "Imponibile" SPECIAL STRINGA INTESTAZIONE "@CImponibile" "Imponibile"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -77,7 +77,7 @@ BEGIN
FIELD IMPONIBILE FIELD IMPONIBILE
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 4 14 NUMERO 4 6
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CAliquota" "Aliquota" SPECIAL STRINGA INTESTAZIONE "@CAliquota" "Aliquota"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -87,7 +87,7 @@ BEGIN
FIELD PERC FIELD PERC
PICTURE "##@,@@" PICTURE "##@,@@"
END END
NUMBER 5 14 VALUTA 5 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CImporto" "Importo" SPECIAL STRINGA INTESTAZIONE "@CImporto" "Importo"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -97,7 +97,7 @@ BEGIN
FIELD IMPORTO FIELD IMPORTO
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 6 14 VALUTA 6 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CNetto" "Netto" SPECIAL STRINGA INTESTAZIONE "@CNetto" "Netto"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -107,7 +107,7 @@ BEGIN
FIELD NETTO FIELD NETTO
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 7 14 VALUTA 7 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CSomme" "Somme" SPECIAL STRINGA INTESTAZIONE "@CSomme" "Somme"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"

View File

@ -71,7 +71,7 @@ BEGIN
PROMPT 2 1 "" PROMPT 2 1 ""
FIELD CAUSALE FIELD CAUSALE
END END
NUMBER 3 14 VALUTA 3 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CSomme" "Somme" SPECIAL STRINGA INTESTAZIONE "@CSomme" "Somme"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -81,7 +81,7 @@ BEGIN
FIELD SOMME FIELD SOMME
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 4 14 VALUTA 4 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CAmmontare" "Ammontare" SPECIAL STRINGA INTESTAZIONE "@CAmmontare" "Ammontare"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -91,7 +91,7 @@ BEGIN
FIELD AMMONTARE FIELD AMMONTARE
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 5 14 NUMERO 5 6
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@cAliquota" "Aliquota" SPECIAL STRINGA INTESTAZIONE "@cAliquota" "Aliquota"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -101,7 +101,7 @@ BEGIN
FIELD PERC FIELD PERC
PICTURE "##@,@@" PICTURE "##@,@@"
END END
NUMBER 6 14 VALUTA 6 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CImporto" "Importo" SPECIAL STRINGA INTESTAZIONE "@CImporto" "Importo"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"
@ -111,7 +111,7 @@ BEGIN
FIELD IMPORTO FIELD IMPORTO
PICTURE "###.###.###^^^" PICTURE "###.###.###^^^"
END END
NUMBER 7 14 VALUTA 7 14
BEGIN BEGIN
SPECIAL STRINGA INTESTAZIONE "@CNetto" "Netto" SPECIAL STRINGA INTESTAZIONE "@CNetto" "Netto"
SPECIAL NUMERO OFFSET "0" "Offset iniziale campo" SPECIAL NUMERO OFFSET "0" "Offset iniziale campo"

View File

@ -1,6 +1,6 @@
USE 42 USE 42
JOIN 9 INTO CODDITTA=CODDITTA JOIN 9 INTO CODDITTA=CODDITTA
JOIN 6 TO 9 ALIAS 106 INTO TIPOA=TIPOA CODANAGR=CODANAGR JOIN 6 TO 9 ALIAS 106 INTO TIPOA=TIPOA CODANAGR=CODANAGR
END END
DESCRIPTION DESCRIPTION

View File

@ -13,13 +13,13 @@ IVA|4|18|2|Iva documento
TOTALE|4|18|2|Totale documento TOTALE|4|18|2|Totale documento
FORZATURA|8|1|0|Flag di forzatura controlli FORZATURA|8|1|0|Flag di forzatura controlli
TOTRIT|4|18|2|Totale ritenute (collegamento contabilità) TOTRIT|4|18|2|Totale ritenute (collegamento contabilità)
RITSOC|4|18|0|Ritenute sociali (collegamento contabilità) RITSOC|4|18|2|Ritenute sociali (collegamento contabilità)
MESEC|2|2|0|Mese competenza MESEC|2|2|0|Mese competenza
ANNOC|2|4|0|Anno competenza ANNOC|2|4|0|Anno competenza
CAUSQUA|7|1|0|Causale quadro CAUSQUA|7|1|0|Causale quadro
FLAGTS|7|1|0|Flag T.S. FLAGTS|7|1|0|Flag T.S.
RITOPE|4|18|0|Ritenute operate RITOPE|4|18|2|Ritenute operate
RITVER|4|18|0|Ritenute versate RITVER|4|18|2|Ritenute versate
2 2
CODDITTA+TIPOA+CODANAGR+NPROG| CODDITTA+TIPOA+CODANAGR+NPROG|
CODDITTA+TIPOA+CODANAGR+DATADOC+NPROG| CODDITTA+TIPOA+CODANAGR+DATADOC+NPROG|

View File

@ -8,7 +8,7 @@ NRIGA|2|4|0|Numero progressivo di versamento
VERS1015|8|1|0|Versamento 1015 VERS1015|8|1|0|Versamento 1015
DATAVERS|5|8|0|Data versamento DATAVERS|5|8|0|Data versamento
TIPOVERS|1|1|0|Tipo versamento TIPOVERS|1|1|0|Tipo versamento
RITENUTA|4|18|0|Ritenuta versata RITENUTA|4|18|2|Ritenuta versata
LUOVERS|1|1|0|Luogo versamento LUOVERS|1|1|0|Luogo versamento
NUMERO|1|11|0|Numero versamento NUMERO|1|11|0|Numero versamento
SERIE|1|5|0|Serie SERIE|1|5|0|Serie

View File

@ -6,34 +6,34 @@ CODANAGR|3|5|0|Codice percipiente
NPROG|2|4|0|Numero progressivo di scheda NPROG|2|4|0|Numero progressivo di scheda
NRIGA|2|4|0|Numero progressivo di pagamento NRIGA|2|4|0|Numero progressivo di pagamento
DATAPAG|5|8|0|Data pagamento DATAPAG|5|8|0|Data pagamento
IMPONIBILE|4|18|0|Imponibile IMPONIBILE|4|18|2|Imponibile
PERC|4|6|2|Aliquota PERC|4|6|2|Aliquota
RITENUTA|4|18|0|Ritenuta RITENUTA|4|18|2|Ritenuta
COMPENSO|4|18|0|Compenso COMPENSO|4|18|2|Compenso
NETTO|4|18|0|Compenso netto NETTO|4|18|2|Compenso netto
NUMVERS|3|5|0|Numero progressivo di versamento collegato NUMVERS|3|5|0|Numero progressivo di versamento collegato
SPESA|4|18|0|Spesa SPESA|4|18|2|Spesa
CTSSNPERC|4|18|0|Contributo 10% percipiente (Dbis) CTSSNPERC|4|18|2|Contributo 10% percipiente (Dbis)
CTSSNCOMP|4|18|0|Contributo 10% complessivo (Dbis) CTSSNCOMP|4|18|2|Contributo 10% complessivo (Dbis)
RITLORDA|4|18|0|Ritenuta lorda (C) RITLORDA|4|18|2|Ritenuta lorda (C)
CONTROBB|4|18|0|Contributi obbligatori (C) CONTROBB|4|18|2|Contributi obbligatori (C)
DETFAMIL|4|18|0|Detrazioni familiari (C) DETFAMIL|4|18|2|Detrazioni familiari (C)
DETLAVDIP|4|18|0|Detrazioni lavoro dipendente (C) DETLAVDIP|4|18|2|Detrazioni lavoro dipendente (C)
TOTDET|4|18|0|Totale detrazioni (C) TOTDET|4|18|2|Totale detrazioni (C)
GIOLAVDIP|2|3|0|Giorni lavoro dipendente (C) GIOLAVDIP|2|3|0|Giorni lavoro dipendente (C)
IMPCPA|4|18|0|Importo CPA (D) IMPCPA|4|18|2|Importo CPA (D)
SOMREGCONV|4|18|0|Somme regime convenzionale (D,Dbis) SOMREGCONV|4|18|2|Somme regime convenzionale (D,Dbis)
ALQIMP10|4|6|2|Aliquota imponibile contributo 10% (Dbis) ALQIMP10|4|6|2|Aliquota imponibile contributo 10% (Dbis)
COD10|1|1|0|Codice 10% (Dbis) COD10|1|1|0|Codice 10% (Dbis)
UTPAGATI|4|18|0|Utili pagati (G) UTPAGATI|4|18|2|Utili pagati (G)
UTSPETT|4|18|0|Utili spettanti (G) UTSPETT|4|18|2|Utili spettanti (G)
RITUTPAG|4|18|0|Ritenute utili pagati (G) RITUTPAG|4|18|2|Ritenute utili pagati (G)
RITUTSPE|4|18|0|Ritenute utili spettanti (G) RITUTSPE|4|18|2|Ritenute utili spettanti (G)
NQUOTE|4|6|2|Numero quote (G) NQUOTE|4|6|2|Numero quote (G)
SOMNSRIT|4|18|0|Somme non soggette a ritenuta (calc) SOMNSRIT|4|18|2|Somme non soggette a ritenuta (calc)
AMMLORDO|4|18|0|Ammontare lordo corrisposto (calc) AMMLORDO|4|18|2|Ammontare lordo corrisposto (calc)
QUOTAPROV|4|18|0|Quota provvigioni (calc) QUOTAPROV|4|18|2|Quota provvigioni (calc)
IMPNETTO|4|18|0|Imponibile al netto delle ritenute (calc) IMPNETTO|4|18|2|Imponibile al netto delle ritenute (calc)
COMNETTO|4|18|0|Compenso al netto delle ritenute (calc) COMNETTO|4|18|2|Compenso al netto delle ritenute (calc)
1 1
CODDITTA+TIPOA+CODANAGR+NPROG+NRIGA| CODDITTA+TIPOA+CODANAGR+NPROG+NRIGA|

View File

@ -11,8 +11,8 @@ QLAB|2|2|0|
QLSERIE|1|5|0| QLSERIE|1|5|0|
QLNUMERO|1|11|0| QLNUMERO|1|11|0|
QLCODQUA|1|2|0| QLCODQUA|1|2|0|
QLRITEFF|4|18|0| QLRITEFF|4|18|2|
QLRITVER|4|18|0| QLRITVER|4|18|2|
QLRSS|1|2|0| QLRSS|1|2|0|
QLNOTE|1|20|0| QLNOTE|1|20|0|
2 2

View File

@ -6,12 +6,12 @@ CODANAGR|3|5|0|Codice anagrafica
NPROG|2|4|0|Numero progressivo di riga NPROG|2|4|0|Numero progressivo di riga
CODCAUS|9|2|0|Codice causale CODCAUS|9|2|0|Codice causale
CAUSALE|1|1|0|15 - Causale CAUSALE|1|1|0|15 - Causale
TOTALE|4|18|0|16 - Ammontare lordo corrisposto TOTALE|4|18|2|16 - Ammontare lordo corrisposto
SOMME|4|18|0|17 - Somme non soggette a ritenuta SOMME|4|18|2|17 - Somme non soggette a ritenuta
IMPONIBILE|4|18|0|19 - Imponibile IMPONIBILE|4|18|2|19 - Imponibile
PERC|4|6|2|Aliquota PERC|4|6|2|Aliquota
IMPORTO|4|18|0|20 - Ritenute operate IMPORTO|4|18|2|20 - Ritenute operate
SOMREGCONV|4|18|0|18 - Somme non soggette a ritenuta per reg. conv. SOMREGCONV|4|18|2|18 - Somme non soggette a ritenuta per reg. conv.
GENERATA|8|1|0|Riga generata dalle schede GENERATA|8|1|0|Riga generata dalle schede
1 1
CODDITTA+TIPOA+CODANAGR+NPROG| CODDITTA+TIPOA+CODANAGR+NPROG|

View File

@ -6,12 +6,12 @@ CODANAGR|3|5|0|Codice anagrafica
NPROG|2|4|0|Numero progrssivo riga NPROG|2|4|0|Numero progrssivo riga
CODCAUS|9|2|0|Codice causale CODCAUS|9|2|0|Codice causale
CAUSALE|7|1|0|11 - Causale CAUSALE|7|1|0|11 - Causale
TOTALE|4|18|0|12 - Ammontare lordo corrisposto TOTALE|4|18|2|12 - Ammontare lordo corrisposto
QUOTAPRO|4|18|0|14 - Quota provvigioni QUOTAPRO|4|18|2|14 - Quota provvigioni
SPESEANT|4|18|0|13 - Spese anticipate SPESEANT|4|18|2|13 - Spese anticipate
IMPONIBILE|4|18|0|15 - Imponibile IMPONIBILE|4|18|2|15 - Imponibile
PERC|4|6|2|Aliquota PERC|4|6|2|Aliquota
IMPORTO|4|18|0|16 - Ritenute operate IMPORTO|4|18|2|16 - Ritenute operate
GENERATA|8|1|0|Riga generata dalle schede GENERATA|8|1|0|Riga generata dalle schede
1 1
CODDITTA+TIPOA+CODANAGR+NPROG| CODDITTA+TIPOA+CODANAGR+NPROG|

View File

@ -6,11 +6,11 @@ CODANAGR|3|5|0|Codice anagrafico
NPROG|2|4|0|Numero progressivo di riga NPROG|2|4|0|Numero progressivo di riga
CODCAUS|9|2|0|Codice causale CODCAUS|9|2|0|Codice causale
CAUSALE|7|1|0|11 - Causale quadro CAUSALE|7|1|0|11 - Causale quadro
IMPONIBILE|4|18|0|12 - Imponibile corrisposto IMPONIBILE|4|18|2|12 - Imponibile corrisposto
PERC|4|6|2|13 - Aliquota PERC|4|6|2|13 - Aliquota
IMPORTO|4|18|0|14 - Ritenute operate IMPORTO|4|18|2|14 - Ritenute operate
NETTO|4|18|0|15 - Somme corrisposte al netto delle ritenute NETTO|4|18|2|15 - Somme corrisposte al netto delle ritenute
SOMME|4|18|0|16 - Somme corrisposte non assoggettate a ritenuta SOMME|4|18|2|16 - Somme corrisposte non assoggettate a ritenuta
GENERATA|8|1|0|Riga generata dalle schede GENERATA|8|1|0|Riga generata dalle schede
1 1
CODDITTA+TIPOA+CODANAGR+NPROG| CODDITTA+TIPOA+CODANAGR+NPROG|

View File

@ -6,11 +6,11 @@ CODANAGR|3|5|0|Codice anagrafica
NPROG|2|4|0|Numero progrssivo i riga NPROG|2|4|0|Numero progrssivo i riga
CODCAUS|9|2|0|Codice causale CODCAUS|9|2|0|Codice causale
CAUSALE|7|1|0|11 - Causale quadro CAUSALE|7|1|0|11 - Causale quadro
SOMME|4|18|0|12 - Somme corrisposte SOMME|4|18|2|12 - Somme corrisposte
AMMONTARE|4|18|0|13 - Ammontare complessivo dei premi riscossi AMMONTARE|4|18|2|13 - Ammontare complessivo dei premi riscossi
PERC|4|6|2|14 - Aliquota PERC|4|6|2|14 - Aliquota
IMPORTO|4|18|0|15 - Ritenute operate IMPORTO|4|18|2|15 - Ritenute operate
NETTO|4|18|0|16 - Netti corrisposto NETTO|4|18|2|16 - Netti corrisposto
GENERATA|8|1|0|Riga generata dalle schede GENERATA|8|1|0|Riga generata dalle schede
1 1
CODDITTA+TIPOA+CODANAGR+NPROG| CODDITTA+TIPOA+CODANAGR+NPROG|

View File

@ -2,8 +2,8 @@
5 5
CODDITTA|3|5|0|Codice ditta CODDITTA|3|5|0|Codice ditta
CODCAUS|1|2|0|Codice causale (Vale solo 'C' o 'D') CODCAUS|1|2|0|Codice causale (Vale solo 'C' o 'D')
COMPENSO|4|18|0|2 - Ammontare complessivo COMPENSO|4|18|2|2 - Ammontare complessivo
IMPONIBILE|4|18|0|3 - Ammontare somme soggette a ritenuta IMPONIBILE|4|18|2|3 - Ammontare somme soggette a ritenuta
RITENUTA|4|18|0|4 - Ritenute operate RITENUTA|4|18|2|4 - Ritenute operate
1 1
CODDITTA+CODCAUS| CODDITTA+CODCAUS|

View File

@ -47,6 +47,8 @@
#define ANAMAG_VALSTATUN "VALSTATUN" #define ANAMAG_VALSTATUN "VALSTATUN"
#define ANAMAG_PROV "PROV" #define ANAMAG_PROV "PROV"
#define ANAMAG_PAESE "PAESE" #define ANAMAG_PAESE "PAESE"
#define ANAMAG_COLLTYPE "COLLTYPE"
#define ANAMAG_CODMAG "CODMAG"
#define ANAMAG_USER1 "USER1" #define ANAMAG_USER1 "USER1"
#define ANAMAG_USER2 "USER2" #define ANAMAG_USER2 "USER2"
#define ANAMAG_USER3 "USER3" #define ANAMAG_USER3 "USER3"

View File

@ -3,3 +3,5 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>

View File

@ -3,3 +3,4 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>

View File

@ -9,6 +9,7 @@
#include "../ve/veconf.h" #include "../ve/veconf.h"
#include "mg1100.h" #include "mg1100.h"
#include <cfven.h>
// maschera dell'applicazione "Gestione interattiva movimenti di magazzino" // maschera dell'applicazione "Gestione interattiva movimenti di magazzino"
// //
@ -90,12 +91,17 @@ TMask_movmag::TMask_movmag(TMov_mag * m_m)
ss.set_lines_record(m_m->body()); ss.set_lines_record(m_m->body());
// setta i campi della maschera // setta i campi della maschera
// per la pagina giacenze // per la pagina giacenze
TSheet_field &fld_righe= (TSheet_field &)field(F_RIGHE); TSheet_field &fld_righe = sfield(F_RIGHE);
// setta le colonne in base all'abilitazione dei livelli di giacenza // setta le colonne in base all'abilitazione dei livelli di giacenza
/*
livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV1,1); livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV1,1);
livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV2,2); livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV2,2);
livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV3,3); livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV3,3);
livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV4,4); livelli_giacenza().set_sheetcolumn(fld_righe,F_LIV4,4);
*/
livelli_giacenza().set_sheet_columns(fld_righe,F_LIV1);
// abilita i controlli // abilita i controlli
for (int l=0; l<4; l++) for (int l=0; l<4; l++)
if (livelli_giacenza().autoinsert(1+l)) if (livelli_giacenza().autoinsert(1+l))
@ -322,7 +328,7 @@ bool TMask_movmag::handle_giacattuale(TMask_field &f, KEY k)
{ {
TMask & maskrighe =f.mask(); TMask & maskrighe =f.mask();
TMask_movmag &maskmov=(TMask_movmag &)maskrighe.get_sheet()->mask(); TMask_movmag &maskmov=(TMask_movmag &)maskrighe.get_sheet()->mask();
if (k==K_TAB && !maskmov.is_running()) if (k==K_TAB && (!maskmov.is_running() || f.focusdirty()))
{ {
TString codliv; TString codliv;
// codici livello // codici livello
@ -474,16 +480,18 @@ bool TMask_movmag::add_explrows(int r)
if (cau.esplodente() && *sheet.cell(r,sheet.cid2index(F_ESPLOSA)) == ' ') if (cau.esplodente() && *sheet.cell(r,sheet.cid2index(F_ESPLOSA)) == ' ')
{ {
TDistinta_tree distinta; TDistinta_tree distinta;
TArticolo articolo;
TArray boom; TArray boom;
// ******************************* // *******************************
// c'e' una riga di movimento esplodente non ancora esplosa: // c'e' una riga di movimento esplodente non ancora esplosa:
// va sostituita con n righe esplose // va sostituita con n righe esplose
TString codmag;
real prezzo,quant; real prezzo,quant;
const char tipo_costo = cau.get("S11")[0]; const char tipo_costo = cau.get("S11")[0];
const int livello = cau.get_int("I0"); const int livello = cau.get_int("I0");
const TString codart = sheet.cell(r,sheet.cid2index(F_CODART)); const TString codart = sheet.cell(r,sheet.cid2index(F_CODART));
bool ok = distinta.set_root(codart); bool ok = distinta.set_root(codart);
const int rigaprec = r - 1;
const bool is_coll = rigaprec >= 0 && *sheet.cell(r, sheet.cid2index(F_AUTOMATICA)) == riga_automatica;
if (ok) if (ok)
{ {
distinta.explode(boom, TRUE, RAGGR_EXP_NONE, livello, "A"); distinta.explode(boom, TRUE, RAGGR_EXP_NONE, livello, "A");
@ -498,10 +506,34 @@ bool TMask_movmag::add_explrows(int r)
quant=sheet.row(r).get(sheet.cid2index(F_QUANT)); quant=sheet.row(r).get(sheet.cid2index(F_QUANT));
quant*=riga_esp.val(); quant*=riga_esp.val();
nuova_riga.add(quant.string() , sheet.cid2index(F_QUANT)); nuova_riga.add(quant.string() , sheet.cid2index(F_QUANT));
if (codmag.not_empty())
{ articolo.read(riga_esp.articolo());
nuova_riga.add(codmag.sub(1,3) ,sheet.cid2index(F_CODMAG)); char coll_type = articolo.get_char(ANAMAG_COLLTYPE);
nuova_riga.add(codmag.sub(4,5) ,sheet.cid2index(F_CODDEP)); TString16 codmag;
if (coll_type == 'M')
{
if (is_coll)
codmag = *sheet.cell(rigaprec, sheet.cid2index(F_CODMAG));
}
else
if (coll_type == 'F')
{
TString key("F|");
key << articolo.get(ANAMAG_CODFORN);
codmag = cache().get(LF_CFVEN, key, CFV_CODMAG);
}
else
if (coll_type == 'A')
codmag = articolo.get(ANAMAG_CODMAG);
if (codmag.not_empty())
{
const TString16 mag(codmag.left(3));
const TString16 dep(codmag.mid(3));
nuova_riga.add(mag ,sheet.cid2index(F_CODMAG));
nuova_riga.add(dep ,sheet.cid2index(F_CODDEP));
} }
articolo.read(riga_esp.articolo()); articolo.read(riga_esp.articolo());
if (tipo_costo == 'U') if (tipo_costo == 'U')

View File

@ -347,12 +347,12 @@ BEGIN
FLAGS "AI" FLAGS "AI"
//USE LF_RMOVMAG KEY NRIG //USE LF_RMOVMAG KEY NRIG
//INPUT NUMREG F_NUMREG //INPUT NUMREG F_NUMREG
ITEM "@1F" ITEM "@1"
ITEM "CodArt@F" ITEM "CodArt"
ITEM "Liv1@F10" ITEM "Liv1@10"
ITEM "Liv2@F10" ITEM "Liv2@10"
ITEM "Liv3@F10" ITEM "Liv3@10"
ITEM "Liv4@F10" ITEM "Liv4@10"
ITEM "Descrizione" ITEM "Descrizione"
ITEM "CodMag" ITEM "CodMag"
ITEM "CodDep" ITEM "CodDep"

View File

@ -30,8 +30,17 @@ bool TMask_buildmov::handle_annoes(TMask_field &fld, KEY k)
if (esc!=0) if (esc!=0)
fld.set(esc); fld.set(esc);
} }
if (k == K_TAB && fld.focusdirty()) if (fld.to_check(k) || k == K_ENTER)
{ {
TConfig prassid(CONFIG_DITTA, "Euro");
TDate adozione = prassid.get("DataAdozione");
if (adozione.ok())
{
TEsercizi_contabili esc;
const int anno = esc.date2esc(adozione);
if (mask.get_int(F_ANNOES) < anno)
return fld.error_box("Impossibile effettuare la ricostruzione saldi su\n un esercizio precedente alla data adozione Euro") ;
}
if (mask.esercizi.exist(mask.get_int(F_ANNOES))) if (mask.esercizi.exist(mask.get_int(F_ANNOES)))
{ {
const TEsercizio & e=mask.esercizi.esercizio(mask.get_int(F_ANNOES)); const TEsercizio & e=mask.esercizi.esercizio(mask.get_int(F_ANNOES));
@ -39,7 +48,7 @@ bool TMask_buildmov::handle_annoes(TMask_field &fld, KEY k)
{ {
fld.error_box("Il magazzino dell'esercizio indicato risulta chiuso \nImpossibile effettuare la ricostruzione saldi") ; fld.error_box("Il magazzino dell'esercizio indicato risulta chiuso \nImpossibile effettuare la ricostruzione saldi") ;
return FALSE; return FALSE;
} }
} }
} }
return TRUE; return TRUE;

View File

@ -364,7 +364,7 @@ void TApp_openclose::compila_movimento(TMov_mag& currmov, TArticolo_giacenza& ar
// Setta il prezzo al nr di decimali impostati per la valuta corrente // Setta il prezzo al nr di decimali impostati per la valuta corrente
currency.set_price(caus == CAUS_A_VAL ? FALSE : TRUE); // Se mov. solo valore (FIFO/LIFO) i decimali devono essere per gl'importi currency.set_price(caus == CAUS_A_VAL ? FALSE : TRUE); // Se mov. solo valore (FIFO/LIFO) i decimali devono essere per gl'importi
currency.set_num(prezzo); currency.set_num(prezzo);
riga.put(RMOVMAG_PREZZO, currency.string()); riga.put(RMOVMAG_PREZZO, currency);
} }
} }
@ -382,7 +382,7 @@ void TApp_openclose::chiudi_esercizio()
TTable esc("ESC"); TTable esc("ESC");
TTable magazzini("MAG"); TTable magazzini("MAG");
rebuild_balances(_es_to_close); // Cosi' ci assicuriamo che i saldi dell'esercizio vecchio siano a posto // rebuild_balances(_es_to_close); // Cosi' ci assicuriamo che i saldi dell'esercizio vecchio siano a posto
descr1.format(_what == definitiva ? "Apertura esercizio %s" : "Aggiornamento saldi esercizio %s", (const char*) _es_to_open); descr1.format(_what == definitiva ? "Apertura esercizio %s" : "Aggiornamento saldi esercizio %s", (const char*) _es_to_open);
descr2 << descr1 << " in corso..."; descr2 << descr1 << " in corso...";

View File

@ -3,4 +3,5 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>

View File

@ -1189,7 +1189,7 @@ SECTION BODY ODD 0 COLUMNWISE
VALUTA 484 12 VALUTA 484 12
BEGIN BEGIN
KEY "VALven" KEY "VALven"
PROMPT 9 1 "" PROMPT 9 1 ":-)"
FLAGS "U" FLAGS "U"
PICTURE "#######,@##" PICTURE "#######,@##"
MESSAGE _NUMEXPR,#444/#443 MESSAGE _NUMEXPR,#444/#443

View File

@ -18,6 +18,9 @@ class TForm_schedemag : public TForm_stampemg
bool _magazzino_chiuso; bool _magazzino_chiuso;
bool _sottocatmer; bool _sottocatmer;
bool _sudd_mag; bool _sudd_mag;
bool _no_valori;
bool _no_ff;
bool _sintetica;
TDate _data_inizio, _data_fine; TDate _data_inizio, _data_fine;
TToken_string *_rmov_sortexp; TToken_string *_rmov_sortexp;
@ -40,6 +43,7 @@ public:
void setdett_percatmer(bool sottocat,int livart,int livgiac,bool sudd_mag,bool sudd_dep); void setdett_percatmer(bool sottocat,int livart,int livgiac,bool sudd_mag,bool sudd_dep);
void setdett_permag(bool sudd_dep, bool showdett,int livart,int livgiac); void setdett_permag(bool sudd_dep, bool showdett,int livart,int livgiac);
void set_date_limite(const int anno, const TDate& d, const TDate& e); void set_date_limite(const int anno, const TDate& d, const TDate& e);
void set_options(bool no_valori, bool no_ff, bool sintetica);
const char* descr_tiposcheda() const; const char* descr_tiposcheda() const;
const char* nomecampo_scheda() const; const char* nomecampo_scheda() const;
@ -333,9 +337,6 @@ bool TForm_schedemag::validate(TForm_item &cf, TToken_string &s)
cf.set(currsaldo.string()); cf.set(currsaldo.string());
} }
} }
#ifdef DBG
real currsaldo = cf.get(); // Per conoscenza
#endif
return TRUE; return TRUE;
} }
@ -431,10 +432,10 @@ void TForm_schedemag::setdett_percatmer(bool sottocat,int livart,int livgiac,boo
h_c.enable(); h_c.enable();
TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO"); TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO");
h_a.enable(); h_a.enable();
h_a.set_newpage(livart !=0 && livgiac ==0 && !sudd_mag); h_a.set_newpage(livart !=0 && livgiac ==0 && !sudd_mag && !_no_ff);
TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_GRMOV"); TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_GRMOV");
h_g.enable(livart ==0 || livgiac !=0 || sudd_mag); h_g.enable(livart ==0 || livgiac !=0 || sudd_mag);
h_g.set_newpage(livart ==0 || livgiac !=0 || sudd_mag); h_g.set_newpage(livart ==0 || livgiac !=0 || sudd_mag && !_no_ff);
TForm_subsection &h_l=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC"); TForm_subsection &h_l=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC");
h_l.enable(livelli_giacenza().enabled() && (livgiac !=0 ||livart ==0)); h_l.enable(livelli_giacenza().enabled() && (livgiac !=0 ||livart ==0));
TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG"); TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG");
@ -484,14 +485,14 @@ void TForm_schedemag::setdett_perart(bool percatmer,bool sottocatmer,int livart,
TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO"); TForm_subsection &h_a=(TForm_subsection &)find_field('B',odd_page,"HEADER_ARTICOLO");
h_a.enable (livart!=0 && !sudd_mag); h_a.enable (livart!=0 && !sudd_mag);
h_a.set_newpage(livart!=0 && !sudd_mag); h_a.set_newpage(livart!=0 && !sudd_mag && !_no_ff);
TForm_subsection &t_a=(TForm_subsection &)find_field('B',odd_page,"TOTALI_GRUPPIART"); TForm_subsection &t_a=(TForm_subsection &)find_field('B',odd_page,"TOTALI_GRUPPIART");
t_a.show( livart!=0 && !sudd_mag); t_a.show( livart!=0 && !sudd_mag);
// raggruppamento MAX fino alla giacenza // raggruppamento MAX fino alla giacenza
TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_GRMOV"); TForm_subsection &h_g=(TForm_subsection &)find_field('B',odd_page,"HEADER_GRMOV");
h_g.enable(livart ==0 || livgiac !=0 || sudd_mag); h_g.enable(livart ==0 || livgiac !=0 || sudd_mag);
h_g.set_newpage(livart ==0 || livgiac !=0 || sudd_mag); h_g.set_newpage(!_no_ff && (livart ==0 || livgiac !=0 || sudd_mag));
TForm_subsection &h_l=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC"); TForm_subsection &h_l=(TForm_subsection &)find_field('B',odd_page,"HEADER_LIVGIAC");
h_l.enable(livelli_giacenza().enabled() && (livart ==0 || livgiac !=0 )); h_l.enable(livelli_giacenza().enabled() && (livart ==0 || livgiac !=0 ));
TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG"); TForm_subsection &h_m=(TForm_subsection &)find_field('B',odd_page,"HEADER_MAG");
@ -561,6 +562,28 @@ void TForm_schedemag::set_tiposcheda(const char * tipo)
} }
} }
void TForm_schedemag::set_options(bool no_valori, bool no_ff, bool sintetica)
{
_no_valori = no_valori;
if (_no_valori)
{
((TForm_item &)find_field('H',odd_page, 8)).hide();
((TForm_item &)find_field('H',odd_page, 9)).hide();
((TForm_item &)find_field('B',odd_page, 104)).hide();
((TForm_item &)find_field('B',odd_page, 105)).hide();
((TForm_item &)find_field('B',odd_page, FF_VALORE_GART)).hide();
((TForm_item &)find_field('B',odd_page, FF_VALORE_MOV)).hide();
((TForm_item &)find_field('B',odd_page, 190)).hide();
if (name().left(7) == "mg3300a")
((TForm_item &)find_field('B',odd_page, FF_VALORE_GRMOV)).hide();
}
_no_ff = no_ff;
_sintetica = sintetica;
}
void TForm_schedemag::set_date_limite(const int anno, const TDate& d, const TDate& e) void TForm_schedemag::set_date_limite(const int anno, const TDate& d, const TDate& e)
{ {
TEsercizi_contabili ec; TEsercizi_contabili ec;
@ -665,6 +688,7 @@ void TStampa_schede_mag::setprint_permagazzini()
{ {
TDate d1(_mask->get(F_DADATA)); TDate d1(_mask->get(F_DADATA));
TString cond; TString cond;
cond << "ANSI(" << LF_MOVMAG << "->DATAREG)>=\"" << d1.string(ANSI) << '"'; cond << "ANSI(" << LF_MOVMAG << "->DATAREG)>=\"" << d1.string(ANSI) << '"';
((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")).setcondition(cond,_strexpr); ((TForm_subsection &)_form->find_field('B',odd_page,"MOVS_INTERESSATI")).setcondition(cond,_strexpr);
((TForm_subsection &)_form->find_field('B',odd_page,"H_MOVS_INTERESSATI")).setcondition(cond,_strexpr); ((TForm_subsection &)_form->find_field('B',odd_page,"H_MOVS_INTERESSATI")).setcondition(cond,_strexpr);
@ -685,9 +709,7 @@ void TStampa_schede_mag::setprint_permagazzini()
// filtering ONLY NEGATIVES // filtering ONLY NEGATIVES
if (_mask->get(F_FILTRO)[0]=='N') if (_mask->get(F_FILTRO)[0]=='N')
{
_cur->set_filterfunction(negatives_only, TRUE); _cur->set_filterfunction(negatives_only, TRUE);
}
// prepare cursor to print.... // prepare cursor to print....
((TSorted_cursor *)_cur)->change_order(_form->rmov_sortexp()); ((TSorted_cursor *)_cur)->change_order(_form->rmov_sortexp());
@ -697,7 +719,7 @@ void TStampa_schede_mag::setprint_permagazzini()
TLocalisamfile *mag=new TLocalisamfile(LF_MAG); TLocalisamfile *mag=new TLocalisamfile(LF_MAG);
mag->setkey(2); mag->setkey(2);
TString mag_joinexp; TString mag_joinexp;
mag_joinexp << "ANNOES==" << _mask->get(F_ANNOES) << "|CODMAG==CODMAG|CODART==CODART|LIVELLO==LIVGIAC"; mag_joinexp << "ANNOES==" << _mask->get(F_ANNOES) << "|CODMAG==CODMAG|CODART==CODART|LIVELLO==LIVGIAC";
_cur->relation()->replace(mag,1,mag_joinexp); _cur->relation()->replace(mag,1,mag_joinexp);
_cur->setfilter(cfilter,TRUE); _cur->setfilter(cfilter,TRUE);
_cur->setregion(darec,arec,0x2); _cur->setregion(darec,arec,0x2);
@ -739,9 +761,7 @@ void TStampa_schede_mag::setprint_perarticoli()
// filtering ONLY NEGATIVES // filtering ONLY NEGATIVES
if (_mask->get(F_FILTRO)[0]=='N') if (_mask->get(F_FILTRO)[0]=='N')
{ _cur->set_filterfunction(negatives_only);
_cur->set_filterfunction(negatives_only);
}
// Imposta i livelli di dettaglio della scheda // Imposta i livelli di dettaglio della scheda
int tolivelloart=_mask->get_int(F_TOLIVELLOART); int tolivelloart=_mask->get_int(F_TOLIVELLOART);
@ -820,22 +840,29 @@ void TStampa_schede_mag::main_loop()
_mask->set(F_TOLIVELLOART,livelli_articolo().last_level()); _mask->set(F_TOLIVELLOART,livelli_articolo().last_level());
if (dettaglio=='G' && _mask->get_int(F_TOLIVELLOGIAC)==0) if (dettaglio=='G' && _mask->get_int(F_TOLIVELLOGIAC)==0)
_mask->set(F_TOLIVELLOGIAC,livelli_giacenza().last_level()); _mask->set(F_TOLIVELLOGIAC,livelli_giacenza().last_level());
if (*_mask->get(F_ORDINE)=='A') TString16 frmname;
{ const bool per_articoli = (*_mask->get(F_ORDINE) == 'A');
_form = new TForm_schedemag("mg3300a", "") ; const bool sintetica = _mask->get_bool(F_SINTETICA);
// *_mask->get(F_FILTRO) == 'T' ? if (per_articoli)
// new TForm_schedemag("mg3300aa", "") : frmname = "mg3300a";
// new TForm_schedemag("mg3300a", "") ; else
frmname = "mg3300b";
if (sintetica)
frmname << 's';
_form = new TForm_schedemag(frmname, "") ;
_form->set_options(_mask->get_bool(F_NO_VALORI), _mask->get_bool(F_NO_FF),
sintetica);
if (per_articoli)
setprint_perarticoli(); setprint_perarticoli();
} else if (*_mask->get(F_ORDINE)=='M') { else
_form = new TForm_schedemag("mg3300b", "");
setprint_permagazzini(); setprint_permagazzini();
}
_form->set_date_limite(_mask->get_int(F_ANNOES), _mask->get_date(F_DADATA), _mask->get_date(F_ADATA)); _form->set_date_limite(_mask->get_int(F_ANNOES), _mask->get_date(F_DADATA), _mask->get_date(F_ADATA));
_form->print(); _form->print();
delete _form; delete _form;
_form = NULL;
} }
} // while true } // while true
return ; return ;

View File

@ -24,6 +24,9 @@
#define F_DETTAGLIODEP 126 #define F_DETTAGLIODEP 126
#define F_ENABLER 127 #define F_ENABLER 127
#define F_FILTRO 130 #define F_FILTRO 130
#define F_NO_VALORI 131
#define F_NO_FF 132
#define F_SINTETICA 133
#define G_CATMER 1 #define G_CATMER 1
#define G_CODART 2 #define G_CODART 2

View File

@ -1,5 +1,5 @@
#include "mg3300.h" #include "mg3300.h"
PAGE "Stampa Schede di magazzino" -1 -1 78 20 PAGE "Stampa Schede di magazzino" -1 -1 78 21
LISTBOX F_SCHEDA 30 LISTBOX F_SCHEDA 30
BEGIN BEGIN
@ -248,10 +248,23 @@ END
BOOL F_SUDDIV_DEPOSITI BOOL F_SUDDIV_DEPOSITI
BEGIN BEGIN
FLAGS "D" PROMPT 2 17 "Suddivido per depositi"
PROMPT 2 17 "Suddivido per depositi"
END END
BOOL F_NO_VALORI
BEGIN
PROMPT 2 18 "Non stampare i valori"
END
BOOL F_NO_FF
BEGIN
PROMPT 42 16 "Senza salto pagina"
END
BOOL F_SINTETICA
BEGIN
PROMPT 42 17 "Stampa sintetica"
END
BUTTON DLG_OK 10 2 BUTTON DLG_OK 10 2
BEGIN BEGIN

View File

@ -34,8 +34,6 @@ END
GENERAL GENERAL
BEGIN BEGIN
OFFSET 0 1 OFFSET 0 1
// FONT "Courier New"
// SIZE 12
END END
SECTION GRAPHIC SECTION GRAPHIC
@ -53,14 +51,14 @@ SECTION HEADER ODD 5
STRINGA 2 10 STRINGA 2 10
BEGIN BEGIN
KEY "Data" KEY "Data"
PROMPT 120 1 "Data " PROMPT 65 1 "Data "
MESSAGE _TODAY MESSAGE _TODAY
END END
NUMERO 3 7 NUMERO 3 7
BEGIN BEGIN
KEY "Nr. pagina" KEY "Nr. pagina"
PROMPT 137 1 "Pagina " PROMPT 81 1 "Pagina "
MESSAGE _PAGENO MESSAGE _PAGENO
END END
@ -85,37 +83,38 @@ SECTION HEADER ODD 5
MESSAGE _USER,TIPOSCHEDA MESSAGE _USER,TIPOSCHEDA
END END
STRINGA 5 146 STRINGA 5 95
BEGIN BEGIN
KEY "Separatore (iniziale)" KEY "Separatore (iniziale)"
PROMPT 1 3 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 3 "-----------------------------------------------------------------------------------------------"
END END
STRINGA 6 12 STRINGA 6 12
BEGIN BEGIN
PROMPT 42 4 "UM" PROMPT 42 4 "UM"
END END
NUMBER 7 12 NUMERO 7 12
BEGIN BEGIN
PROMPT 47 4 "Quantità" PROMPT 50 4 "Quantitŕ"
END END
NUMBER 8 12 VALUTA 8 12
BEGIN BEGIN
PROMPT 62 4 "Prezzo" PROMPT 66 4 "Prezzo"
FLAGS "U"
END END
NUMBER 9 12 VALUTA 9 12
BEGIN BEGIN
PROMPT 78 4 "Valore" PROMPT 81 4 "Valore"
END END
STRINGA 5 146 STRINGA 5 95
BEGIN BEGIN
KEY "Separatore (iniziale)" KEY "Separatore (iniziale)"
PROMPT 1 5 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 5 "-----------------------------------------------------------------------------------------------"
END END
END END
SECTION BODY ODD 0 SECTION BODY ODD 0
NUMBER 100 1 NUMERO 100 1
BEGIN BEGIN
FLAGS "H" FLAGS "H"
MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART
@ -154,7 +153,7 @@ SECTION BODY ODD 0
STRINGA 24 50 1 STRINGA 24 50 1
BEGIN BEGIN
KEY "dep" KEY "dep"
PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 2 "-----------------------------------------------------------------------------------------------"
END END
END //HEADER articolo END //HEADER articolo
@ -218,10 +217,10 @@ SECTION BODY ODD 0
END END
END // HEADER deposito END // HEADER deposito
END // HEADER magazzino END // HEADER magazzino
STRINGA 24 50 1 STRINGA 24 95
BEGIN BEGIN
KEY "dep" KEY "dep"
PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 2 "-----------------------------------------------------------------------------------------------"
END END
END // HEADER raggruppamenti di movimenti END // HEADER raggruppamenti di movimenti
@ -299,32 +298,32 @@ SECTION BODY ODD 0
FLAGS "H" FLAGS "H"
MESSAGE _USER,DESCRCAUSALE|COPY,FF_DESCRCAUSALE MESSAGE _USER,DESCRCAUSALE|COPY,FF_DESCRCAUSALE
END END
NUMBER FF_QUANTRIGA 12 NUMERO FF_QUANTRIGA 12
BEGIN BEGIN
FLAGS "H" FLAGS "H"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q
END END
SECTION MOVIMENTO_CAUSALE 1 0 0 FILE LF_RMOVMAG GROUP CAUS SECTION MOVIMENTO_CAUSALE 1 0 0 FILE LF_RMOVMAG GROUP CAUS
NUMBER FF_QUANTRIGA 12 NUMERO FF_QUANTRIGA 12
BEGIN BEGIN
FLAGS "H" FLAGS "H"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q
END END
NUMBER FF_STAMPASALDOPREC 6 NUMERO FF_STAMPASALDOPREC 6
BEGIN BEGIN
FLAGS "H" FLAGS "H"
END END
NUMBER FF_CANPRINTSALDOPREC 6 NUMERO FF_CANPRINTSALDOPREC 6
BEGIN BEGIN
FLAGS "H" FLAGS "H"
MESSAGE _USER,CANPRINTSALDOPREC MESSAGE _USER,CANPRINTSALDOPREC
END END
SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<"" SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<""
NUMBER 103 30 NUMERO 103 30
BEGIN BEGIN
PROMPT 31 1 "Quantita' a saldo prec:" PROMPT 31 1 "Quantita' a saldo prec:"
PICTURE "###.##@,@##" PICTURE "###.##@,@##"
@ -346,39 +345,38 @@ SECTION BODY ODD 0
FIELD LF_RMOVMAG->UM FIELD LF_RMOVMAG->UM
END END
NUMBER 104 12 VALUTA 104 12
BEGIN BEGIN
PROMPT 42 1 "" PROMPT 42 1 ""
PICTURE "###.###.###" FLAGS "U"
FIELD LF_RMOVMAG->PREZZO FIELD LF_RMOVMAG->PREZZO
END END
NUMBER 103 12 NUMERO 103 12
BEGIN BEGIN
PROMPT 31 1 "" PROMPT 31 1 ""
PICTURE "###.##@,@##" PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV
END END
NUMBER 105 12 VALUTA 105 12
BEGIN BEGIN
PROMPT 54 1 "" PROMPT 57 1 ""
PICTURE "###.###.###"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV
END END
END // sezione movimenti di competenza END // sezione movimenti di competenza
END // SEZIONE righe movimento di competenza ragg. per causale END // SEZIONE righe movimento di competenza ragg. per causale
SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_CANPRINTSALDOPREC!=0) SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_CANPRINTSALDOPREC!=0)
NUMBER 100 18 NUMERO 100 18
BEGIN BEGIN
PROMPT 8 1 "Saldo precedente :" PROMPT 8 1 "Saldo precedente :"
END END
NUMBER FF_SALDOPREC 12 NUMERO FF_SALDOPREC 15
BEGIN BEGIN
PROMPT 46 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GRMOV MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GRMOV
END END
NUMBER 101 12 NUMERO 101 12
BEGIN BEGIN
FLAGS "H" FLAGS "H"
MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC
@ -392,7 +390,7 @@ SECTION BODY ODD 0
SECTION TOTALI_MOV 1 1 1 NUMEXPR #FF_SALDO_MOV!=0 SECTION TOTALI_MOV 1 1 1 NUMEXPR #FF_SALDO_MOV!=0
SECTION HEADER_MOV 1 1 1 NUMEXPR (#FF_NUMRIGHE==0) SECTION HEADER_MOV 1 1 1 NUMEXPR (#FF_NUMRIGHE==0)
NUMBER FF_NUM_MOV 32 NUMERO FF_NUM_MOV 32
BEGIN BEGIN
PROMPT 2 1 "Mov. " PROMPT 2 1 "Mov. "
END END
@ -406,16 +404,16 @@ SECTION BODY ODD 0
END END
STRINGA FF_TIPOCF_MOV 1 STRINGA FF_TIPOCF_MOV 1
BEGIN BEGIN
PROMPT 60 1 "" PROMPT 63 1 ""
END END
NUMERO FF_CODCF_MOV 6 NUMERO FF_CODCF_MOV 6
BEGIN BEGIN
PROMPT 62 1 "" PROMPT 65 1 ""
PICTURE "######" PICTURE "######"
END END
STRINGA FF_CLIFO_MOV 50 STRINGA FF_CLIFO_MOV 50
BEGIN BEGIN
PROMPT 70 1 "" PROMPT 73 1 ""
END END
END // header mov della scheda END // header mov della scheda
@ -432,22 +430,20 @@ SECTION BODY ODD 0
PROMPT 42 1 "" PROMPT 42 1 ""
FIELD LF_UMART->UM FIELD LF_UMART->UM
END END
NUMBER FF_SALDO_MOV 12 NUMERO FF_SALDO_MOV 15
BEGIN BEGIN
PROMPT 46 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
MESSAGE _USER,ADDQTA,FF_SALDO_GRMOV MESSAGE _USER,ADDQTA,FF_SALDO_GRMOV
END END
NUMBER FF_VALORE_MOV 15 VALUTA FF_VALORE_MOV 15
BEGIN BEGIN
PROMPT 69 1 "" PROMPT 72 1 ""
PICTURE "###.###.###.##@"
MESSAGE _USER,ADDVAL,FF_VALORE_GRMOV MESSAGE _USER,ADDVAL,FF_VALORE_GRMOV
END END
NUMBER 100 12 VALUTA 190 12
BEGIN BEGIN
PROMPT 57 1 "" PROMPT 60 1 ""
PICTURE "###.###.##@"
MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV|INC,FF_NUMRIGHE MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV|INC,FF_NUMRIGHE
END END
END // totali mov END // totali mov
@ -466,58 +462,21 @@ SECTION BODY ODD 0
FIELD LF_UMART->UM FIELD LF_UMART->UM
MESSAGE COPY,FF_UM_GART MESSAGE COPY,FF_UM_GART
END END
NUMBER FF_SALDO_GRMOV 12 NUMERO FF_SALDO_GRMOV 15
BEGIN BEGIN
PROMPT 46 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
MESSAGE ADD,FF_SALDO_GART MESSAGE ADD,FF_SALDO_GART
END END
NUMBER FF_VALORE_GRMOV 15 VALUTA FF_VALORE_GRMOV 15
BEGIN BEGIN
PROMPT 69 1 "" PROMPT 72 1 ""
PICTURE "###.###.###.##@"
MESSAGE ADD,FF_VALORE_GART MESSAGE ADD,FF_VALORE_GART
END END
END // TOTALI scheda per articolo END // TOTALI scheda per articolo
END // loop RMOVMAG END // loop RMOVMAG
SECTION TOTALI_MOV_ARTICOLO 1 0 0 GROUP // NUMEXPR #FF_SALDO_MOV!=0
FLAGS "D"
// da eliminare !!!!!!!!!!!
/*
NUMBER FF_NUM_MOVART 32
BEGIN
PROMPT 2 1 "Mov. "
END
STRINGA FF_DATA_MOVART 10
BEGIN
PROMPT 12 1 "del "
END
STRINGA 100 2
BEGIN
PROMPT 27 1 ""
FIELD LF_UMART->UM
END
NUMBER FF_SALDO_MOVART 12
BEGIN
PROMPT 31 1 ""
PICTURE "###.##@,@##"
MESSAGE ADD,FF_SALDO_GRMOV
END
NUMBER 100 12
BEGIN
PROMPT 42 1 ""
PICTURE "###.###.##@"
MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV
END
NUMBER FF_VALORE_MOVART 12
BEGIN
PROMPT 54 1 ""
PICTURE "###.###.##@"
MESSAGE ADD,FF_VALORE_GRMOV
END
*/
END // totali mov
END // ragg articolo (codice o catmer) END // ragg articolo (codice o catmer)
SECTION TOTALI_GRUPPIART 1 1 3 GROUP //PG057 NUMEXPR #FF_SALDO_GART!=0 SECTION TOTALI_GRUPPIART 1 1 3 GROUP //PG057 NUMEXPR #FF_SALDO_GART!=0
@ -530,15 +489,14 @@ SECTION BODY ODD 0
PROMPT 42 1 "" PROMPT 42 1 ""
FIELD LF_UMART->UM FIELD LF_UMART->UM
END END
NUMBER FF_SALDO_GART 12 NUMERO FF_SALDO_GART 15
BEGIN BEGIN
PROMPT 46 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
END END
NUMBER FF_VALORE_GART 15 VALUTA FF_VALORE_GART 15
BEGIN BEGIN
PROMPT 69 1 "" PROMPT 72 1 ""
PICTURE "###.###.###.##@"
END END
END // TOTALI scheda per articolo END // TOTALI scheda per articolo

479
mg/mg3300as.frm Executable file
View File

@ -0,0 +1,479 @@
// form stampa schede per articolo
#include "mg3300.h"
USE LF_ANAMAG
SORT LF_RMOVMAG BY CODART[1,2] NUMREG
USING LF_MOVMAG INTO NUMREG==NUMREG
JOIN TO LF_ANAMAG KEY 2 INTO CODART==CODART
JOIN LF_MAG TO LF_RMOVMAG KEY 2 INTO ANNOES==1990 CODMAG==CODMAG CODART==CODART LIVELLO==LIVGIAC
JOIN LF_MOVMAG TO LF_RMOVMAG INTO NUMREG==NUMREG
//JOIN %CAU TO LF_RMOVMAG ALIAS ALIAS_CAU_RIGHE INTO CODTAB==CODCAUS
//JOIN %CAU TO LF_MOVMAG ALIAS ALIAS_CAU_MOV INTO CODTAB==CODCAUS
JOIN MAG TO LF_RMOVMAG ALIAS ALIAS_MAG INTO CODTAB==CODMAG[1,3]
JOIN MAG TO LF_RMOVMAG ALIAS ALIAS_DEP INTO CODTAB==CODMAG
JOIN GMC TO LF_ANAMAG ALIAS ALIAS_CATMER INTO CODTAB==GRMERC[1,3]
JOIN GMC TO LF_ANAMAG ALIAS ALIAS_SOTTOCATMER INTO CODTAB==GRMERC[1,5]
JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART
JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS 349 INTO CODART==CODART UM==UM
JOIN LF_CLIFO TO LF_MOVMAG INTO TIPOCF==TIPOCF CODCF==CODCF
END
DESCRIPTION
BEGIN
47->* "Anagrafica articoli"
109->* "Archivio Giacenze"
MAG->* "Tabella magazzini"
110->* "Movimenti di magazzino"
111->* "Righe Movimenti di magazzino"
49->* "Unità di misura articoli"
END
GENERAL
BEGIN
OFFSET 0 1
END
SECTION GRAPHIC
BEGIN
END
SECTION HEADER ODD 5
STRINGA 1 40 1
BEGIN
KEY "nome ditta"
PROMPT 1 1 "Ditta "
MESSAGE _DITTA, !RAGSOC
END
STRINGA 2 10
BEGIN
KEY "Data"
PROMPT 85 1 "Data "
MESSAGE _TODAY
END
NUMERO 3 7
BEGIN
KEY "Nr. pagina"
PROMPT 101 1 "Pagina "
MESSAGE _PAGENO
END
DATA 20
BEGIN
KEY "Data inizio"
PROMPT 1 2 "Dal "
MESSAGE _USER,DADATA
END
DATA 21
BEGIN
KEY "Data fine"
PROMPT 17 2 "Al "
MESSAGE _USER,ADATA
END
STRINGA 4 45
BEGIN
KEY "Intestazione stampa"
PROMPT 45 2 "Stampa schede di magazzino :"
MESSAGE _USER,TIPOSCHEDA
END
STRINGA 5 115
BEGIN
KEY "Separatore (iniziale)"
PROMPT 1 3 "-------------------------------------------------------------------------------------------------------------------"
END
STRINGA 1 4
BEGIN
PROMPT 1 4 "Mov."
END
STRINGA 2 3
BEGIN
PROMPT 11 4 "Del"
END
STRINGA 3 11
BEGIN
PROMPT 20 4 "Descrizione"
END
STRINGA 6 3
BEGIN
PROMPT 62 4 "UM"
END
NUMERO 7 12
BEGIN
PROMPT 66 4 "Quantità"
END
VALUTA 8 12
BEGIN
PROMPT 82 4 "Prezzo"
FLAGS "U"
END
VALUTA 9 12
BEGIN
PROMPT 96 4 "Valore"
END
STRINGA 10 5
BEGIN
PROMPT 110 4 "Caus."
END
STRINGA 5 115
BEGIN
KEY "Separatore (iniziale)"
PROMPT 1 5 "-------------------------------------------------------------------------------------------------------------------"
END
END
SECTION BODY ODD 0
NUMERO 100 1
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART
END
SECTION HEADER_ARTICOLO 1 2 2 NORMAL GROUP
FLAGS "N"
SECTION HEADER_CATMER 1 2 1 GROUP
STRINGA 10 20 1
BEGIN
KEY "CODICE CATMER"
PROMPT 1 1 "Gruppo merceologico "
MESSAGE _USER,CODCATMER|RESET,FF_STAMPASALDOPREC
END
STRINGA 12 50 1
BEGIN
KEY "DESCR."
PROMPT 30 1 ""
MESSAGE _USER,CATMER
END
END //HEADER catmer
STRINGA 10 20 1
BEGIN
KEY "CODICE articolo"
PROMPT 1 1 "Articolo "
MESSAGE _USER,CODGRUPPOART|RESET,FF_STAMPASALDOPREC
END
STRINGA 11 50 1
BEGIN
KEY "DESCR.articolo"
PROMPT 30 1 ""
MESSAGE _USER,GRUPPOART
END
STRINGA 24 115 1
BEGIN
KEY "dep"
PROMPT 1 2 "-------------------------------------------------------------------------------------------------------------------"
END
END //HEADER articolo
SECTION GRUPPI_ARTICOLO 1 0 0 FILE LF_ANAMAG BY CODART
SECTION FILE_RMOVMAG 1 1 0 FILE LF_RMOVMAG
SECTION HEADER_GRMOV 1 2 2 NORMAL GROUP
SECTION HEADER_LIVGIACCATMER 1 1 1 GROUP
STRINGA 10 20 1
BEGIN
KEY "CODICE CATMER"
PROMPT 1 1 "Gruppo merceologico "
MESSAGE _USER,CODCATMER|RESET,FF_STAMPASALDOPREC
END
STRINGA 12 50 1
BEGIN
KEY "DESCR."
PROMPT 30 1 ""
MESSAGE _USER,CATMER
END
END //HEADER catmer
STRINGA 10 20 1
BEGIN
KEY "CODICE articolo"
PROMPT 1 1 "Gruppo "
MESSAGE _USER,CODGRUPPOART|RESET,FF_STAMPASALDOPREC
END
STRINGA 11 50 1
BEGIN
KEY "DESCR.articolo"
PROMPT 30 1 ""
MESSAGE _USER,GRUPPOART
END
SECTION HEADER_LIVGIAC 2 1 1 GROUP
STRINGA 20 20 1
BEGIN
KEY "CODICE livello"
PROMPT 1 1 ""
MESSAGE _USER,CODGRUPPOGIAC
END
STRINGA 21 50 1
BEGIN
KEY "Livello giac"
PROMPT 23 1 ""
MESSAGE _USER,GRUPPOGIAC
END
END
SECTION HEADER_MAG 2 1 1 GROUP
STRINGA 22 50 1
BEGIN
KEY "mag"
PROMPT 3 1 "Magazzino "
FIELD ALIAS_MAG@->S0
END
SECTION HEADER_DEP 2 1 1 STR_EXPR ALIAS_MAG@->B0=="X"
STRINGA 23 50 1
BEGIN
KEY "dep"
PROMPT 5 1 "Deposito "
FIELD ALIAS_DEP@->S0
END
END // HEADER deposito
END // HEADER magazzino
STRINGA 24 115
BEGIN
KEY "dep"
PROMPT 1 2 "-------------------------------------------------------------------------------------------------------------------"
END
END // HEADER raggruppamenti di movimenti
STRINGA 10
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDO_GRMOV|RESET,FF_VALORE_GRMOV
END
SECTION GRUPPI_RMOVMAG 1 0 0 FILE LF_RMOVMAG GROUP CODART
SECTION H_MOVS_INTERESSATI 1 0 0 STREXPR LF_MOVMAG->DATAREG>""
NUMERO 10
BEGIN
FLAGS "H"
FIELD LF_RMOVMAG->NUMREG
MESSAGE COPY,FF_NUM_MOV
END
NUMERO 11
BEGIN
FLAGS "H"
FIELD LF_MOVMAG->DATAREG
MESSAGE COPY,FF_DATA_MOV
END
STRINGA 12
BEGIN
FLAGS "H"
FIELD LF_MOVMAG->DESCR
MESSAGE COPY,FF_DESCR_MOV
END
NUMERO 16
BEGIN
FLAGS "H"
MESSAGE RESET,FF_NUMRIGHE
END
END // header mov
SECTION MOVIMENTO 1 0 0 FILE LF_RMOVMAG GROUP NUMREG
NUMERO FF_NUMRIGHE
BEGIN
KEY "Contatore del numero di righe raggruppate"
END
NUMERO 13
BEGIN
FLAGS "H"
MESSAGE _USER,CAUSALERIGA|COPY,FF_CAUSALE_RIGA|RESET,FF_SALDO_MOV|RESET,FF_VALORE_MOV
END
NUMERO FF_QUANTRIGA 12
BEGIN
FLAGS "H"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q
END
SECTION MOVIMENTO_CAUSALE 1 0 0 FILE LF_RMOVMAG GROUP CAUS
NUMERO FF_QUANTRIGA 12
BEGIN
FLAGS "H"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q
END
NUMERO FF_STAMPASALDOPREC 6
BEGIN
FLAGS "H"
END
NUMERO FF_CANPRINTSALDOPREC 6
BEGIN
FLAGS "H"
MESSAGE _USER,CANPRINTSALDOPREC
END
SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<""
NUMERO 103 30
BEGIN
PROMPT 31 1 "Quantita' a saldo prec:"
PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDOPREC
END
END
SECTION MOVS_INTERESSATI 1 0 0 STREXPR LF_MOVMAG->DATAREG>=""
STRINGA 100 30
BEGIN
PROMPT 1 1 ""
MESSAGE _STREXPR,LF_RMOVMAG->CODART+"/"+LF_RMOVMAG->LIVGIAC+":"+LF_RMOVMAG->CODMAG
END
STRINGA 101 12
BEGIN
PROMPT 27 1 ""
FIELD LF_RMOVMAG->UM
END
VALUTA 104 12
BEGIN
PROMPT 42 1 ""
FLAGS "U"
FIELD LF_RMOVMAG->PREZZO
END
NUMERO 103 12
BEGIN
PROMPT 31 1 ""
PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV
END
VALUTA 105 12
BEGIN
PROMPT 57 1 ""
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV
END
END // sezione movimenti di competenza
END // SEZIONE righe movimento di competenza ragg. per causale
SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_CANPRINTSALDOPREC!=0)
NUMERO 100 18
BEGIN
PROMPT 20 1 "Saldo precedente :"
END
NUMERO FF_SALDOPREC 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GRMOV
END
NUMERO 101 12
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC
END
STRINGA 102 12
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
END // stampa saldo precedente
SECTION TOTALI_MOV 1 1 1 NUMEXPR #FF_SALDO_MOV!=0
STRINGA FF_CAUSALE_RIGA 5
BEGIN
PROMPT 110 1 ""
END
NUMERO FF_NUM_MOV 6
BEGIN
PROMPT 1 1 ""
END
STRINGA FF_DATA_MOV 10
BEGIN
PROMPT 8 1 ""
END
STRINGA FF_DESCR_MOV 40
BEGIN
PROMPT 20 1 ""
END
STRINGA 100 2
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
NUMERO FF_SALDO_MOV 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
MESSAGE _USER,ADDQTA,FF_SALDO_GRMOV
END
VALUTA FF_VALORE_MOV 15
BEGIN
PROMPT 92 1 ""
MESSAGE _USER,ADDVAL,FF_VALORE_GRMOV
END
VALUTA 190 12
BEGIN
PROMPT 80 1 ""
MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV|INC,FF_NUMRIGHE
END
END // totali mov
END // loop movimento
END // loop scheda
SECTION TOTALI_GRMOV 1 1 3 GROUP //PG057 NUMEXPR #FF_SALDO_GRMOV!=0
STRINGA 100 15
BEGIN
PROMPT 20 1 "Totale scheda"
END
STRINGA 100 2
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
MESSAGE COPY,FF_UM_GART
END
NUMERO FF_SALDO_GRMOV 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
MESSAGE ADD,FF_SALDO_GART
END
VALUTA FF_VALORE_GRMOV 15
BEGIN
PROMPT 92 1 ""
MESSAGE ADD,FF_VALORE_GART
END
END // TOTALI scheda per articolo
END // loop RMOVMAG
END // ragg articolo (codice o catmer)
SECTION TOTALI_GRUPPIART 1 1 3 GROUP //PG057 NUMEXPR #FF_SALDO_GART!=0
STRINGA 100 15
BEGIN
PROMPT 20 1 "Totale scheda"
END
STRINGA FF_UM_GART 2
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
NUMERO FF_SALDO_GART 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
END
VALUTA FF_VALORE_GART 15
BEGIN
PROMPT 92 1 ""
END
END // TOTALI scheda per articolo
END // *****
SECTION FOOTER ODD 2
END

View File

@ -48,14 +48,14 @@ SECTION HEADER ODD 5
STRINGA 2 10 STRINGA 2 10
BEGIN BEGIN
KEY "Data" KEY "Data"
PROMPT 120 1 "Data " PROMPT 65 1 "Data "
MESSAGE _TODAY MESSAGE _TODAY
END END
NUMERO 3 7 NUMERO 3 7
BEGIN BEGIN
KEY "Nr. pagina" KEY "Nr. pagina"
PROMPT 137 1 "Pagina " PROMPT 81 1 "Pagina "
MESSAGE _PAGENO MESSAGE _PAGENO
END END
@ -80,10 +80,10 @@ SECTION HEADER ODD 5
MESSAGE _USER,TIPOSCHEDA MESSAGE _USER,TIPOSCHEDA
END END
STRINGA 5 146 STRINGA 5 95
BEGIN BEGIN
KEY "Separatore (iniziale)" KEY "Separatore (iniziale)"
PROMPT 1 3 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 3 "-----------------------------------------------------------------------------------------------"
END END
STRINGA 6 12 STRINGA 6 12
BEGIN BEGIN
@ -91,20 +91,21 @@ SECTION HEADER ODD 5
END END
NUMBER 7 12 NUMBER 7 12
BEGIN BEGIN
PROMPT 46 4 "Quantità" PROMPT 50 4 "Quantitŕ"
END END
NUMBER 8 12 VALUTA 8 12
BEGIN BEGIN
PROMPT 62 4 "Prezzo" PROMPT 66 4 "Prezzo"
FLAGS "U"
END END
NUMBER 9 15 NUMBER 9 15
BEGIN BEGIN
PROMPT 78 4 "Valore" PROMPT 81 4 "Valore"
END END
STRINGA 5 146 STRINGA 5 95
BEGIN BEGIN
KEY "Separatore (iniziale)" KEY "Separatore (iniziale)"
PROMPT 1 5 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 5 "-----------------------------------------------------------------------------------------------"
END END
END END
@ -191,10 +192,10 @@ SECTION BODY ODD 2
END END
END // HEADER livgiac END // HEADER livgiac
END //HEADER articolo END //HEADER articolo
STRINGA 24 50 1 STRINGA 24 95
BEGIN BEGIN
KEY "dep" KEY "dep"
PROMPT 1 2 "------------------------------------------------------------------------------------------------------------------------------------------------------" PROMPT 1 2 "-----------------------------------------------------------------------------------------------"
END END
END // HEADER magazzino END // HEADER magazzino
@ -279,11 +280,10 @@ SECTION BODY ODD 2
PROMPT 27 1 "" PROMPT 27 1 ""
FIELD LF_RMOVMAG->UM FIELD LF_RMOVMAG->UM
END END
VALUTA 104 12
NUMBER 104 12
BEGIN BEGIN
PROMPT 42 1 "" PROMPT 42 1 ""
PICTURE "###.###.###" FLAGS "U"
FIELD LF_RMOVMAG->PREZZO FIELD LF_RMOVMAG->PREZZO
END END
NUMBER 103 12 NUMBER 103 12
@ -292,10 +292,9 @@ SECTION BODY ODD 2
PICTURE "###.##@,@##" PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV
END END
NUMBER 105 12 VALUTA 105 12
BEGIN BEGIN
PROMPT 54 1 "" PROMPT 57 1 ""
PICTURE "###.###.###"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV
END END
END // sezione movimento di competenza END // sezione movimento di competenza
@ -306,10 +305,10 @@ SECTION BODY ODD 2
BEGIN BEGIN
PROMPT 8 1 "Saldo precedente :" PROMPT 8 1 "Saldo precedente :"
END END
NUMBER FF_SALDOPREC 12 NUMBER FF_SALDOPREC 15
BEGIN BEGIN
PROMPT 31 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GART MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GART
END END
NUMBER 101 12 NUMBER 101 12
@ -319,7 +318,7 @@ SECTION BODY ODD 2
END END
STRINGA 102 12 STRINGA 102 12
BEGIN BEGIN
PROMPT 27 1 "" PROMPT 42 1 ""
FIELD LF_UMART->UM FIELD LF_UMART->UM
END END
END // stampa saldo precedente END // stampa saldo precedente
@ -350,22 +349,21 @@ SECTION BODY ODD 2
PROMPT 42 2 "" PROMPT 42 2 ""
FIELD LF_UMART->UM FIELD LF_UMART->UM
END END
NUMBER FF_SALDO_MOV 12 NUMBER FF_SALDO_MOV 15
BEGIN BEGIN
PROMPT 46 2 "" PROMPT 46 2 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
MESSAGE _USER,ADDQTA,FF_SALDO_GART MESSAGE _USER,ADDQTA,FF_SALDO_GART
END END
NUMBER FF_VALORE_MOV 15 VALUTA FF_VALORE_MOV 15
BEGIN BEGIN
PROMPT 69 2 "" PROMPT 72 2 ""
PICTURE "###.###.###.##@"
MESSAGE _USER,ADDVAL,FF_VALORE_GART MESSAGE _USER,ADDVAL,FF_VALORE_GART
END END
NUMBER 100 12 VALUTA 190 12
BEGIN BEGIN
PROMPT 57 2 "" PROMPT 60 2 ""
PICTURE "###.###.##@" FLAGS "U"
MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV
END END
END // totali mov END // totali mov
@ -382,15 +380,14 @@ SECTION BODY ODD 2
PROMPT 42 1 "" PROMPT 42 1 ""
FIELD LF_UMART->UM FIELD LF_UMART->UM
END END
NUMBER FF_SALDO_GART 12 NUMBER FF_SALDO_GART 15
BEGIN BEGIN
PROMPT 46 1 "" PROMPT 46 1 ""
PICTURE "###.##@,@##" PICTURE "##.###.##@,@##"
END END
NUMBER FF_VALORE_GART 15 VALUTA FF_VALORE_GART 15
BEGIN BEGIN
PROMPT 69 1 "" PROMPT 72 1 ""
PICTURE "###.###.###.##@"
END END
END // TOTALI scheda per articolo END // TOTALI scheda per articolo
END // loop RMOVMAG raggruppate END // loop RMOVMAG raggruppate

406
mg/mg3300bs.frm Executable file
View File

@ -0,0 +1,406 @@
// form stampa schede per magazzino
#include "mg3300.h"
USE LF_RMOVMAG KEY 2 BY CODMAG CODART LIVGIAC LF_MOVMAG->DATAREG NUMREG
JOIN LF_MAG TO LF_RMOVMAG KEY 2 INTO ANNOES==1996 CODMAG==CODMAG CODART==CODART LIVELLO==LIVGIAC
JOIN LF_ANAMAG TO LF_RMOVMAG INTO CODART==CODART
JOIN LF_MOVMAG TO LF_RMOVMAG INTO NUMREG==NUMREG
JOIN %CAU TO LF_MOVMAG INTO CODTAB==CODCAUS
JOIN MAG TO LF_RMOVMAG ALIAS 500 INTO CODTAB==CODMAG[1,3]
JOIN MAG TO LF_RMOVMAG ALIAS 501 INTO CODTAB==CODMAG
JOIN GMC TO LF_ANAMAG ALIAS ALIAS_CATMER INTO CODTAB==GRMERC[1,3]
JOIN GMC TO LF_ANAMAG ALIAS ALIAS_SOTTOCATMER INTO CODTAB==GRMERC[1,5]
JOIN LF_UMART TO LF_ANAMAG INTO CODART==CODART
JOIN LF_UMART TO LF_RMOVMAG KEY 2 ALIAS 349 INTO CODART==CODART UM==UM
END
DESCRIPTION
BEGIN
47->* "Anagrafica articoli"
109->* "Archivio Giacenze"
MAG->* "Tabella magazzini"
110->* "Movimenti di magazzino"
111->* "Righe Movimenti di magazzino"
49->* "Unità di misura articoli"
END
GENERAL
BEGIN
OFFSET 0 1
// FONT "Courier New"
// SIZE 12
END
SECTION GRAPHIC
BEGIN
END
SECTION HEADER ODD 5
STRINGA 1 40 1
BEGIN
KEY "nome ditta"
PROMPT 1 1 "Ditta "
MESSAGE _DITTA, !RAGSOC
END
STRINGA 2 10
BEGIN
KEY "Data"
PROMPT 85 1 "Data "
MESSAGE _TODAY
END
NUMERO 3 7
BEGIN
KEY "Nr. pagina"
PROMPT 101 1 "Pagina "
MESSAGE _PAGENO
END
DATA 20
BEGIN
KEY "Data inizio"
PROMPT 1 2 "Dal "
MESSAGE _USER,DADATA
END
DATA 21
BEGIN
KEY "Data fine"
PROMPT 17 2 "Al "
MESSAGE _USER,ADATA
END
STRINGA 4 45
BEGIN
KEY "Intestazione stampa"
PROMPT 45 2 "Stampa schede di magazzino :"
MESSAGE _USER,TIPOSCHEDA
END
STRINGA 5 115
BEGIN
KEY "Separatore (iniziale)"
PROMPT 1 3 "-------------------------------------------------------------------------------------------------------------------"
END
STRINGA 1 4
BEGIN
PROMPT 1 4 "Mov."
END
STRINGA 2 3
BEGIN
PROMPT 11 4 "Del"
END
STRINGA 3 11
BEGIN
PROMPT 20 4 "Descrizione"
END
STRINGA 6 3
BEGIN
PROMPT 62 4 "UM"
END
NUMERO 7 12
BEGIN
PROMPT 66 4 "Quantità"
END
VALUTA 8 12
BEGIN
PROMPT 82 4 "Prezzo"
FLAGS "U"
END
VALUTA 9 12
BEGIN
PROMPT 96 4 "Valore"
END
STRINGA 10 5
BEGIN
PROMPT 110 4 "Caus."
END
STRINGA 5 115
BEGIN
KEY "Separatore (iniziale)"
PROMPT 1 5 "-------------------------------------------------------------------------------------------------------------------"
END
END
SECTION BODY ODD 2
NUMBER 100 1
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART
END
SECTION HEADER_MAG 1 2 2 GROUP
FLAGS "N"
STRINGA 22 20 1
BEGIN
KEY "mag"
PROMPT 1 1 "Magazzino "
FIELD 500@->CODTAB[1,3]
END
STRINGA 22 50 1
BEGIN
KEY "mag"
PROMPT 15 1 ""
FIELD 500@->S0
END
SECTION HEADER_DEP 2 0 0 GROUP
SECTION HEADER_DEP_VERO 1 1 1 STR_EXPR 500@->B0=="X"
STRINGA 23 20 1
BEGIN
KEY "dep"
PROMPT 3 1 "Deposito "
FIELD 501@->CODTAB[4,5]
END
STRINGA 23 50 1
BEGIN
KEY "dep"
PROMPT 15 1 ""
FIELD 501@->S0
END
END
END // HEADER deposito
SECTION HEADER_CATMER 1 2 1 GROUP
FLAGS "H"
STRINGA 10 20 1
BEGIN
KEY "CODICE CATMER"
PROMPT 1 1 "Gruppo merceologico "
MESSAGE _USER,CODCATMER
END
STRINGA 12 50 1
BEGIN
KEY "DESCR."
PROMPT 30 1 ""
MESSAGE _USER,CATMER
END
END //HEADER catmer
SECTION HEADER_ARTICOLO 2 1 1 GROUP
STRINGA 10 20 1
BEGIN
KEY "CODICE articolo"
PROMPT 5 1 "Articolo "
MESSAGE _USER,CODGRUPPOART
END
STRINGA 11 50 1
BEGIN
KEY "DESCR.articolo"
PROMPT 30 1 ""
MESSAGE _USER,GRUPPOART
END
SECTION HEADER_LIVGIAC 2 1 1 GROUP
STRINGA 20 20 1
BEGIN
KEY "CODICE livello"
PROMPT 5 1 ""
MESSAGE _USER,CODGRUPPOGIAC
END
STRINGA 21 50 1
BEGIN
KEY "Livello giac"
PROMPT 23 1 ""
MESSAGE _USER,GRUPPOGIAC
END
END // HEADER livgiac
END //HEADER articolo
STRINGA 24 115
BEGIN
KEY "dep"
PROMPT 1 2 "-------------------------------------------------------------------------------------------------------------------"
END
END // HEADER magazzino
SECTION FILE_RMOVMAG 1 0 0 FILE LF_ANAMAG
STRINGA 10
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDO_GART|RESET,FF_VALORE_GART|RESET,FF_STAMPASALDOPREC
END
SECTION GRUPPI_RMOVMAG 1 0 0 FILE LF_RMOVMAG GROUP CODMAG+CODART
SECTION H_MOVS_INTERESSATI 1 0 0 STREXPR LF_MOVMAG->DATAREG>""
NUMERO 10
BEGIN
FLAGS "H"
FIELD LF_RMOVMAG->NUMREG
MESSAGE COPY,FF_NUM_MOV|RESET,FF_SALDO_MOV|RESET,FF_VALORE_MOV
END
NUMERO 11
BEGIN
FLAGS "H"
FIELD LF_MOVMAG->DATAREG
MESSAGE COPY,FF_DATA_MOV
END
NUMERO 12
BEGIN
FLAGS "H"
FIELD LF_MOVMAG->DESCR
MESSAGE COPY,FF_DESCR_MOV
END
NUMERO 13
BEGIN
FLAGS "H"
MESSAGE _USER,CAUSALERIGA|COPY,FF_CAUSALE_RIGA
END
END // header mov
SECTION MOVIMENTO 1 0 0 FILE LF_RMOVMAG GROUP NUMREG
NUMBER FF_QUANTRIGA 12
BEGIN
FLAGS "H"
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*349@->FC|_USER,*SEGNOCAUS,Q
END
NUMBER FF_STAMPASALDOPREC 30
BEGIN
FLAGS "H"
END
NUMBER FF_CANPRINTSALDOPREC 6
BEGIN
FLAGS "H"
MESSAGE _USER,CANPRINTSALDOPREC
END
SECTION MOVS_PRECEDENTI 1 0 0 STREXPR LF_MOVMAG->DATAREG<""
NUMBER 103 30
BEGIN
PROMPT 31 1 "Quantita' a saldo prec:"
PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDOPREC
END
END
SECTION MOVS_INTERESSATI 1 0 0 STREXPR LF_MOVMAG->DATAREG>=""
STRINGA 100 30
BEGIN
PROMPT 1 1 ">>>"
MESSAGE _STREXPR,LF_RMOVMAG->CODART+" "+LF_RMOVMAG->LIVGIAC+" "+LF_RMOVMAG->CODMAG
END
STRINGA 101 12
BEGIN
PROMPT 27 1 ""
FIELD LF_RMOVMAG->UM
END
VALUTA 104 12
BEGIN
PROMPT 42 1 ""
FLAGS "U"
FIELD LF_RMOVMAG->PREZZO
END
NUMBER 103 12
BEGIN
PROMPT 31 1 ""
PICTURE "###.##@,@##"
MESSAGE _NUMEXPR,#FF_QUANTRIGA|ADD,FF_SALDO_MOV
END
VALUTA 105 12
BEGIN
PROMPT 57 1 ""
MESSAGE _NUMEXPR,LF_RMOVMAG->QUANT*LF_RMOVMAG->PREZZO|_USER,*SEGNOCAUS,V|ADD,FF_VALORE_MOV
END
END // sezione movimento di competenza
END // loop movimento
SECTION STAMPASALDOPREC 1 1 1 NUMEXPR (#FF_STAMPASALDOPREC==0)&&(#FF_CANPRINTSALDOPREC!=0)
NUMBER 100 18
BEGIN
PROMPT 20 1 "Saldo precedente :"
END
NUMBER FF_SALDOPREC 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
MESSAGE _USER,SALDOPREC|ADD,FF_SALDO_GART
END
NUMBER 101 12
BEGIN
FLAGS "H"
MESSAGE RESET,FF_SALDOPREC |INC,FF_STAMPASALDOPREC
END
STRINGA 102 12
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
END // stampa saldo precedente
SECTION TOTALI_MOV 1 1 1 NUMEXPR #FF_SALDO_MOV!=0
STRINGA FF_CAUSALE_RIGA 5
BEGIN
PROMPT 110 1 ""
END
NUMBER FF_NUM_MOV 6
BEGIN
PROMPT 1 1 ""
END
STRINGA FF_DATA_MOV 10
BEGIN
PROMPT 8 1 ""
END
STRINGA FF_DESCR_MOV 40
BEGIN
PROMPT 20 1 ""
END
STRINGA 100 2
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
NUMBER FF_SALDO_MOV 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
MESSAGE _USER,ADDQTA,FF_SALDO_GART
END
VALUTA FF_VALORE_MOV 15
BEGIN
PROMPT 92 1 ""
MESSAGE _USER,ADDVAL,FF_VALORE_GART
END
VALUTA 190 12
BEGIN
PROMPT 80 1 ""
FLAGS "U"
MESSAGE _NUMEXPR,#FF_VALORE_MOV/#FF_SALDO_MOV
END
END // totali mov
END // loop scheda
SECTION TOTALI_GART 1 1 3 GROUP
STRINGA 100 15
BEGIN
PROMPT 20 1 "Totale scheda"
END
STRINGA 100 2
BEGIN
PROMPT 62 1 ""
FIELD LF_UMART->UM
END
NUMBER FF_SALDO_GART 15
BEGIN
PROMPT 66 1 ""
PICTURE "##.###.##@,@##"
END
VALUTA FF_VALORE_GART 15
BEGIN
PROMPT 92 1 ""
END
END // TOTALI scheda per articolo
END // loop RMOVMAG raggruppate
END // *****
SECTION FOOTER ODD 2
END

View File

@ -2,22 +2,12 @@
#include "mglib.h" #include "mglib.h"
#include "mg3500.h" #include "mg3500.h"
#include "mg3500a.h"
#include "mg3frm.h" #include "mg3frm.h"
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
// mg3500 Stampa // mg3500 Stampa
class TForm_storgiac : public TForm_stampemg
{
TSorted_cursor * _sortcur;
bool _use_alternate_cursor;
public:
void use_alternate_cursor(const bool b = TRUE) { _use_alternate_cursor = b; }
virtual TCursor* cursor() const ;
TForm_storgiac(const char *name,const char *code) ;
virtual ~TForm_storgiac();
};
TForm_storgiac::TForm_storgiac(const char *name,const char *code) : TForm_storgiac::TForm_storgiac(const char *name,const char *code) :
TForm_stampemg(name,code) TForm_stampemg(name,code)
{ {
@ -40,23 +30,6 @@ TCursor* TForm_storgiac::cursor() const
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
// Applicazione // Applicazione
///////////////////////////////////////////////////// /////////////////////////////////////////////////////
class TStampa_storgiac : public TSkeleton_application
{
TArray * _files;
TStampemg_mask * _mask;
TCursor * _cur;
TForm_storgiac * _form; // to be moved into TPrint_application
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
public:
TStampa_storgiac() {}
virtual ~TStampa_storgiac() {};
};
bool TStampa_storgiac::create() bool TStampa_storgiac::create()
{ {
_mask = new TStampemg_mask("mg3500"); _mask = new TStampemg_mask("mg3500");
@ -183,6 +156,7 @@ void TStampa_storgiac::main_loop()
_cur->relation()->replace(new TLocalisamfile(LF_STOMAG),1,joinexp); _cur->relation()->replace(new TLocalisamfile(LF_STOMAG),1,joinexp);
_cur->setfilter(cfilter,TRUE); _cur->setfilter(cfilter,TRUE);
_cur->setregion(darec,arec); _cur->setregion(darec,arec);
set_def_valuta(*_form);
_form->print(); _form->print();
delete _form; delete _form;
} }

34
mg/mg3500a.h Executable file
View File

@ -0,0 +1,34 @@
#ifndef __MG3500A_H
#define __MG3500A_H
class TForm_storgiac : public TForm_stampemg
{
TSorted_cursor * _sortcur;
bool _use_alternate_cursor;
public:
void use_alternate_cursor(const bool b = TRUE) { _use_alternate_cursor = b; }
virtual TCursor* cursor() const ;
TForm_storgiac(const char *name,const char *code) ;
virtual ~TForm_storgiac();
};
class TStampa_storgiac : public TSkeleton_application
{
TArray * _files;
TStampemg_mask * _mask;
TCursor * _cur;
TForm_storgiac * _form; // to be moved into TPrint_application
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
virtual void set_def_valuta(TForm_storgiac & f) {}
public:
TStampa_storgiac() {}
virtual ~TStampa_storgiac() {};
};
#endif //__MG3500A_H

View File

@ -3,4 +3,4 @@
#define QFIRMNAME "A.G.A. Informatica Srl" #define QFIRMNAME "A.G.A. Informatica Srl"
#include <default.url> #include <default.url>
#include <mainmenu.url>

View File

@ -110,7 +110,7 @@ END
VALUTA 108 VALUTA 108
BEGIN BEGIN
KEY "valore" KEY "valore"
PROMPT 120 4 "Valore" PROMPT 122 4 "Valore"
END END
STRINGA 100 132 STRINGA 100 132
@ -282,19 +282,19 @@ SECTION BODY ODD 1
PICTURE "####.###,@##" PICTURE "####.###,@##"
END END
VALUTA 107 11 VALUTA 107 13
BEGIN BEGIN
KEY "prezzo" KEY "prezzo"
PROMPT 99 1 "" PROMPT 99 1 ""
FLAGS "U" FLAGS "U"
FIELD LF_RMOVMAG->PREZZO FIELD LF_RMOVMAG->PREZZO
PICTURE "###.###.##@" PICTURE "#.###.###.##@"
END END
VALUTA 108 14 VALUTA 108 14
BEGIN BEGIN
KEY "valore" KEY "valore"
PROMPT 112 1 "" PROMPT 114 1 ""
MESSAGE _NUMEXPR,LF_RMOVMAG->PREZZO*LF_RMOVMAG->QUANT*349@->FC|ADD,15 MESSAGE _NUMEXPR,LF_RMOVMAG->PREZZO*LF_RMOVMAG->QUANT*349@->FC|ADD,15
PICTURE "##.###.###.##@" PICTURE "##.###.###.##@"
END END
@ -310,7 +310,7 @@ SECTION BODY ODD 1
VALUTA 15 17 VALUTA 15 17
BEGIN BEGIN
KEY "totale mov" KEY "totale mov"
PROMPT 109 4 "" PROMPT 111 4 ""
MESSAGE ADD,FL->215 MESSAGE ADD,FL->215
PICTURE "#.###.###.###.##@" PICTURE "#.###.###.###.##@"
END END
@ -330,7 +330,7 @@ SECTION FOOTER LAST 3
VALUTA 215 17 VALUTA 215 17
BEGIN BEGIN
KEY "totale mov" KEY "totale mov"
PROMPT 109 1 "" PROMPT 111 1 ""
PICTURE "#.###.###.###.##@" PICTURE "#.###.###.###.##@"
END END
END END

View File

@ -9,7 +9,7 @@ BEGIN
INPUT CODTAB F_ANNOES INPUT CODTAB F_ANNOES
DISPLAY "Esercizio" CODTAB DISPLAY "Esercizio" CODTAB
DISPLAY "Dal@12" D0 DISPLAY "Dal@12" D0
DISPLAY "Al@12" D0 DISPLAY "Al@12" D1
OUTPUT F_ANNOES CODTAB OUTPUT F_ANNOES CODTAB
ADD NONE ADD NONE
CHECKTYPE NORMAL CHECKTYPE NORMAL

View File

@ -1,41 +1,15 @@
#include <applicat.h> #include <applicat.h>
#include <currency.h> #include <currency.h>
#include <progind.h> #include <progind.h>
#include <utility.h>
#include "../cg/cglib01.h" #include "../cg/cglib01.h"
#include "../ve/veconf.h" #include "../ve/veconf.h"
#include "mglib.h" #include "mglib.h"
#include "mg4200.h" #include "mg4200.h"
#include "mg4200a.h"
#include "mg4frm.h" #include "mg4frm.h"
#define MAX_VAL_COLUMNS 6
class TForm_inventario : public TForm_stampemg
{
int _colonne;
TSorted_cursor *_sortcur; // Cursore sortato: RAGGFIS+CODART usato in stampe per raggr. fisc.
TConfig *conf_ditta;
bool _use_alternate_cursor;
TArticolo_giacenza_loadable * _curr_art;
TString16 _codlist,_catven; // codici listino e cat vendita
bool _giaceff, // flag inventario di giacenza
_valcomp, // flag valorizzzione finiti o componenti
_alladata; // flag di stampa inventario alla data, per utilizzare TArticolo_giacenza_loadable
TTipo_valorizz _valorizz_scelte[MAX_VAL_COLUMNS]; // valorizzazioni delle varie colonne
TCurrency *_currency;
TArticolo_giacenza_loadable &curr_art();
public:
virtual TCursor* cursor() const ;
bool genera_intestazione_supplementare(pagetype p, short y);
void set_parametri(const char * codcm,const char * cod,bool giaceff, bool valcomp, bool alladata);
bool valorizzazione(TForm_item &cf, TTipo_valorizz t);
bool validate(TForm_item &cf, TToken_string &s);
void use_alternate_cursor(const bool b = TRUE) { _use_alternate_cursor = b; }
void add_colval(int tipo);
TForm_inventario(const char *name,const char *code) ;
~TForm_inventario();
};
TCursor* TForm_inventario::cursor() const TCursor* TForm_inventario::cursor() const
{ {
if (_use_alternate_cursor) // Se e' settata la stampa per ragg. fisc ritorna il cursore appropriato if (_use_alternate_cursor) // Se e' settata la stampa per ragg. fisc ritorna il cursore appropriato
@ -48,55 +22,63 @@ bool TForm_inventario::validate(TForm_item &cf, TToken_string &s)
const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio const TString code(s.get(0)); // prende il primo parametro, il codice del messaggio
TString subcode; TString subcode;
if (code=="_USER") { if (code=="_USER")
{
TLocalisamfile & magfile=relation()->lfile(LF_MAG); TLocalisamfile & magfile=relation()->lfile(LF_MAG);
TRectype & magrec=magfile.curr(); TRectype & magrec=magfile.curr();
subcode=s.get(); subcode=s.get();
if (subcode=="GIAC") { if (subcode=="GIAC")
real v=curr_art().giacenza_corretta(magrec,_giaceff,_valcomp); {
cf.set(v.string()); real v=curr_art().giacenza_corretta(magrec, FALSE,_valcomp);
} cf.set(v.string());
if (subcode=="VAL1") { }
valorizzazione(cf,_valorizz_scelte[0]); else
} if (subcode=="VAL1")
if (subcode=="VAL2"&& _colonne >=2) { valorizzazione(cf,_valorizz_scelte[0]);
valorizzazione(cf,_valorizz_scelte[1]); else
} if (subcode=="VAL2"&& _colonne >=2)
if (subcode=="VAL3" && _colonne >=3) { valorizzazione(cf,_valorizz_scelte[1]);
valorizzazione(cf,_valorizz_scelte[2]); else
} if (subcode=="VAL3" && _colonne >=3)
if (subcode=="VAL4" && _colonne >=4) { valorizzazione(cf,_valorizz_scelte[2]);
valorizzazione(cf,_valorizz_scelte[3]); else
} if (subcode=="VAL4" && _colonne >=4)
if (subcode=="VAL5"&& _colonne >=5) { valorizzazione(cf,_valorizz_scelte[3]);
valorizzazione(cf,_valorizz_scelte[4]); else
} if (subcode=="VAL5"&& _colonne >=5)
if (subcode=="VAL6" && _colonne >=6) { valorizzazione(cf,_valorizz_scelte[4]);
valorizzazione(cf,_valorizz_scelte[5]); else
} if (subcode=="VAL6" && _colonne >=6)
if (subcode=="NAMEVAL1") { valorizzazione(cf,_valorizz_scelte[5]);
cf.set(Nome_valorizz[_valorizz_scelte[0]]); /* else
} if (subcode=="NAMEVAL1")
if (subcode=="NAMEVAL2"&& _colonne >=2) { cf.set(Nome_valorizz[_valorizz_scelte[0]]);
cf.set(Nome_valorizz[_valorizz_scelte[1]]); else
} if (subcode=="NAMEVAL2"&& _colonne >=2)
if (subcode=="NAMEVAL3" && _colonne >=3) { cf.set(Nome_valorizz[_valorizz_scelte[1]]);
cf.set(Nome_valorizz[_valorizz_scelte[2]]); else
} if (subcode=="NAMEVAL3" && _colonne >=3)
if (subcode=="NAMEVAL4" && _colonne >=4) { cf.set(Nome_valorizz[_valorizz_scelte[2]]);
cf.set(Nome_valorizz[_valorizz_scelte[3]]); else
} if (subcode=="NAMEVAL4" && _colonne >=4)
if (subcode=="NAMEVAL5"&& _colonne >=5) { cf.set(Nome_valorizz[_valorizz_scelte[3]]);
cf.set(Nome_valorizz[_valorizz_scelte[4]]); else
} if (subcode=="NAMEVAL5"&& _colonne >=5)
if (subcode=="NAMEVAL6" && _colonne >=6) { cf.set(Nome_valorizz[_valorizz_scelte[4]]);
cf.set(Nome_valorizz[_valorizz_scelte[5]]); else
} if (subcode=="NAMEVAL6" && _colonne >=6)
if (subcode=="LINEATOTALI") { cf.set(Nome_valorizz[_valorizz_scelte[5]]); */
TString l(29*_colonne+12,'-'); else
cf.set(l); if (subcode=="LINEATOTALI")
} {
TString l(29*_colonne+12,'-');
cf.set(l);
}
} }
else
if (code == "_ANNO")
cf.set(format("%d", _annoes));
return TForm_stampemg::validate(cf, s); return TForm_stampemg::validate(cf, s);
} }
@ -171,33 +153,33 @@ bool TForm_inventario::valorizzazione(TForm_item &cf, TTipo_valorizz t)
// arrotonda le valorizzazioni a costo unitario // arrotonda le valorizzazioni a costo unitario
_currency->set_price(TRUE); _currency->set_price(TRUE);
_currency->set_num(v); _currency->set_num(v);
v = _currency->string(); v = _currency->get_num();
if (t==valorizz_LIFO) { if (t==valorizz_LIFO) {
TString codmag(magrec.get(MAG_CODMAG));codmag.left(3); TString codmag(magrec.get(MAG_CODMAG));codmag.left(3);
const TString livello(magrec.get(MAG_LIVELLO)); const TString livello(magrec.get(MAG_LIVELLO));
v=curr_art().LIFO(annoes,codmag,livello, _giaceff,_valcomp); v=curr_art().LIFO(annoes,codmag,livello, FALSE,_valcomp);
} }
if (t==valorizz_FIFO) { if (t==valorizz_FIFO) {
TString codmag(magrec.get(MAG_CODMAG));codmag.left(3); TString codmag(magrec.get(MAG_CODMAG));codmag.left(3);
const TString livello(magrec.get(MAG_LIVELLO)); const TString livello(magrec.get(MAG_LIVELLO));
v=curr_art().FIFO(annoes,codmag,livello, _giaceff,_valcomp); v=curr_art().FIFO(annoes,codmag,livello, FALSE,_valcomp);
} }
if (t==valorizz_LIFOa) { if (t==valorizz_LIFOa) {
TString codmag(magrec.get(MAG_CODMAG));codmag.left(3); TString codmag(magrec.get(MAG_CODMAG));codmag.left(3);
const TString livello(magrec.get(MAG_LIVELLO)); const TString livello(magrec.get(MAG_LIVELLO));
v=curr_art().LIFO_annuale(annoes,codmag,livello, _giaceff,_valcomp); v=curr_art().LIFO_annuale(annoes,codmag,livello, FALSE,_valcomp);
} }
if (t==valorizz_FIFOa) { if (t==valorizz_FIFOa) {
TString codmag(magrec.get(MAG_CODMAG));codmag.left(3); TString codmag(magrec.get(MAG_CODMAG));codmag.left(3);
const TString livello(magrec.get(MAG_LIVELLO)); const TString livello(magrec.get(MAG_LIVELLO));
v=curr_art().FIFO_annuale(annoes,codmag,livello, _giaceff,_valcomp); v=curr_art().FIFO_annuale(annoes,codmag,livello, FALSE,_valcomp);
} }
const real giac_corretta = curr_art().giacenza_corretta(magrec,_giaceff,_valcomp); const real giac_corretta = curr_art().giacenza_corretta(magrec, FALSE,_valcomp);
v= v * giac_corretta ; v= v * giac_corretta ;
_currency->set_price(FALSE); _currency->set_price(FALSE);
_currency->set_num(v); _currency->set_num(v);
cf.set(_currency->string()); cf.set(_currency->get_num().string());
return TRUE; return TRUE;
} }
@ -234,13 +216,14 @@ bool TForm_inventario::genera_intestazione_supplementare(pagetype p, short y)
return TRUE; return TRUE;
} }
void TForm_inventario::set_parametri(const char * codcatv,const char * codlist,bool giaceff, bool valcomp, bool alladata) void TForm_inventario::set_parametri(const char * codcatv,const char * codlist,bool giaceff, bool valcomp, bool alladata, int annoes)
{ {
_catven=codcatv; _catven=codcatv;
_codlist=codlist; _codlist=codlist;
_giaceff=giaceff; _giaceff=giaceff;
_valcomp=valcomp; _valcomp=valcomp;
_alladata=alladata; _alladata=alladata;
_annoes = annoes;
} }
TForm_inventario::TForm_inventario(const char *name,const char *code) : TForm_inventario::TForm_inventario(const char *name,const char *code) :
@ -408,27 +391,6 @@ bool TStampainv_mask::handle_codlist(TMask_field &fld, KEY k)
// STAMPA anagrafiche // STAMPA anagrafiche
class TStampa_inventario : public TSkeleton_application
{
TArray * _files;
TStampemg_mask * _mask;
TCursor * _cur;
TForm_inventario * _form; // to be moved into TPrint_application
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
virtual void on_firm_change();
void setprint_permagazzini();
void setprint_perarticoli();
void setprint_perarticoli_all();
bool calcola_giacenze(const bool b = TRUE);
public:
TStampa_inventario() {}
};
void TStampa_inventario ::on_firm_change() void TStampa_inventario ::on_firm_change()
{ {
@ -460,8 +422,69 @@ bool TStampa_inventario::destroy()
return TRUE; return TRUE;
} }
bool TStampa_inventario::crea_tempmag(const bool b)
{
const bool valcomp = *_mask->get(F_FIN_COMP)=='C';
TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag", TRUE, b);
TRectype darec(LF_ANAMAG), arec(LF_ANAMAG);
darec.put(ANAMAG_CODART, _mask->get(F_DAART));
arec.put(ANAMAG_CODART, _mask->get(F_AART));
TRelation ana_rel(LF_ANAMAG);
TCursor ana_cur(&ana_rel, "", 1, &darec, &arec);
const TRecnotype items = ana_cur.items();
ana_cur.freeze();
const TDate data_limite(_mask->get_date(F_DATALIM));
TArticolo_giacenza art_giac;
TString16 annoes(_mask->get(F_ANNOES));
TString msg;
msg << "Creazione giacenze temporanee anno " << annoes;
TProgind pi(items, msg, FALSE, TRUE);
for (ana_cur = 0L; ana_cur.pos() < items; ++ana_cur)
{
art_giac.read(ana_cur.curr());
// Scrive i records sul file temporaneo
TRecord_array& mag = art_giac.mag(annoes);
for (int i = mag.last_row(); i > 0 && temp_mag->good(); i = mag.pred_row(i))
{
TRectype & magrec = (TRectype &) mag.row(i);
real v=art_giac.giacenza_corretta(magrec, TRUE, valcomp);
magrec.put(MAG_GIAC, v);
temp_mag->write(magrec);
}
pi.addstatus(1L);
}
// Se il file è ok lo sostituisce all'interno della relazione del form
const bool rt = temp_mag->good();
if (!rt)
{
error_box("Errore %d in creazione file temporaneo per saldi di magazzino alla data indicata.", temp_mag->status());
delete temp_mag;
}
else
if (b) // Non sostituire in caso di stampa tutti gli articoli
_form->relation()->replace(temp_mag);
else
delete temp_mag; // in caso di stampa tutti gli articoli, non cancella fisicamente il file; per riaprirlo poi
return rt;
}
bool TStampa_inventario::calcola_giacenze(const bool b) bool TStampa_inventario::calcola_giacenze(const bool b)
{ {
const bool giaceff = *_mask->get(F_REALE_GIAC)=='R';
const bool valcomp = *_mask->get(F_FIN_COMP)=='C';
//Scorre l'anagrafica di magazzino e calcola per ognuno la giacenza alla data indicata //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 //Memorizzando i records in un file temporaneo che avrà lo stesso tracciato di LF_MAG
TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag", TRUE, b); TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag", TRUE, b);
@ -494,7 +517,16 @@ bool TStampa_inventario::calcola_giacenze(const bool b)
// Scrive i records sul file temporaneo // Scrive i records sul file temporaneo
TRecord_array& mag = art_giac.mag(annoes); TRecord_array& mag = art_giac.mag(annoes);
for (int i = mag.last_row(); i > 0 && temp_mag->good(); i = mag.pred_row(i)) for (int i = mag.last_row(); i > 0 && temp_mag->good(); i = mag.pred_row(i))
temp_mag->write(mag.row(i)); {
TRectype & magrec = (TRectype &) mag.row(i);
if (giaceff)
{
real v=art_giac.giacenza_corretta(magrec, TRUE,valcomp);
magrec.put(MAG_GIAC, v);
}
temp_mag->write(magrec);
}
pi.addstatus(1L); pi.addstatus(1L);
} }
@ -521,7 +553,7 @@ void TStampa_inventario::setprint_permagazzini()
TRectype darec(LF_MAG),arec(LF_MAG); TRectype darec(LF_MAG),arec(LF_MAG);
TString cfilter, espr1, espr2; TString cfilter, espr1, espr2;
_cur = _form->cursor(); _cur = _form->cursor();
// setta il filtro sul cursore // setta il filtro sul cursore
if (*_mask->get(F_FILTRO)=='N') if (*_mask->get(F_FILTRO)=='N')
cfilter << "(STR(GIAC!=\"0\"))&&" ; cfilter << "(STR(GIAC!=\"0\"))&&" ;
if (*_mask->get(F_FILTRO)=='+') if (*_mask->get(F_FILTRO)=='+')
@ -532,6 +564,10 @@ void TStampa_inventario::setprint_permagazzini()
cfilter << "(CODART<=" << '"' << _mask->get(F_AART)<< "\")&&" ; cfilter << "(CODART<=" << '"' << _mask->get(F_AART)<< "\")&&" ;
if (cfilter.not_empty()) if (cfilter.not_empty())
cfilter.cut(cfilter.len()-2); cfilter.cut(cfilter.len()-2);
if (!totdep)
_form->find_field('B',odd_page,"GRUPPI_DEPOSITO").setcondition("CODMAG[1,3]",_strexpr);
else
_form->find_field('B',odd_page,"GRUPPI_DEPOSITO").setcondition("CODMAG[1,5]",_strexpr);
switch (subordine) switch (subordine)
{ {
case 'C': case 'C':
@ -559,30 +595,34 @@ void TStampa_inventario::setprint_permagazzini()
else else
espr1.format("ANNOES|CODMAG|%d->GRMERC|CODART|LIVELLO", LF_ANAMAG); espr1.format("ANNOES|CODMAG|%d->GRMERC|CODART|LIVELLO", LF_ANAMAG);
_form->set_ordering(mg_cat_merc); _form->set_ordering(mg_cat_merc);
espr2.format("CODMAG[1,3]+CODMAG[1,5]+%d->GRMERC[1,3]", LF_ANAMAG); // espr2.format("CODMAG[1,3]+CODMAG[1,5]+%d->GRMERC[1,3]", LF_ANAMAG);
espr2.format("%d->GRMERC[1,3]", LF_ANAMAG);
_form->find_field('B',odd_page,"GRUPPI_CATMER").setcondition(espr2,_strexpr); _form->find_field('B',odd_page,"GRUPPI_CATMER").setcondition(espr2,_strexpr);
if (subordine == 'S') if (subordine == 'S')
{ {
_form->find_field('B',odd_page,"H_SCATMER").show(); _form->find_field('B',odd_page,"H_SCATMER").show();
_form->find_field('B',odd_page,"TOT_SCATMER").show(); _form->find_field('B',odd_page,"TOT_SCATMER").show();
m1 << _mask->get(F_DASCATMER); if (m1.len() > 3) m1.left_just(5); m1 << _mask->get(F_DASCATMER);
m2 << _mask->get(F_ASCATMER); if (m2.len() > 3) m2.left_just(5); m2 << _mask->get(F_ASCATMER);
} }
else else
{ {
_form->find_field('B',odd_page,"H_SCATMER").hide(); _form->find_field('B',odd_page,"H_SCATMER").hide();
_form->find_field('B',odd_page,"TOT_SCATMER").hide(); _form->find_field('B',odd_page,"TOT_SCATMER").hide();
} }
if (m1.not_empty()) if (m1.not_empty())
{ {
espr2.format("&&(%d->GRMERC[1,%d]>=\"%s\")", LF_ANAMAG, m1.len(), (const char*)m1); espr2.format("&&(%d->GRMERC >= \"%s\")", LF_ANAMAG, (const char*)m1);
cfilter << espr2; cfilter << espr2;
} }
if (m2.not_empty()) if (m2.not_empty())
{ {
espr2.format("&&(%d->GRMERC[1,%d]<=\"%s\")", LF_ANAMAG, m2.len(), (const char*)m2); espr2.format("&&(%d->GRMERC <= \"%s\")", LF_ANAMAG, (const char*)m2);
cfilter << espr2; cfilter << espr2;
} }
// espr2.format("CODMAG[1,3]+CODMAG[1,5]+%d->GRMERC", LF_ANAMAG);
espr2.format("%d->GRMERC", LF_ANAMAG);
_form->find_field('B',odd_page,"GRUPPI_SCATMER").setcondition(espr2,_strexpr);
} }
break; break;
case 'R': case 'R':
@ -620,17 +660,13 @@ void TStampa_inventario::setprint_permagazzini()
TRUE,_mask->get_bool(F_TOTALIDEPOSITI),_mask->get_bool(F_DETTAGLIODEP)); TRUE,_mask->get_bool(F_TOTALIDEPOSITI),_mask->get_bool(F_DETTAGLIODEP));
((TSorted_cursor *)_cur)->change_order(espr1); ((TSorted_cursor *)_cur)->change_order(espr1);
if (!totdep)
_form->find_field('B',odd_page,"GRUPPI_DEPOSITO").setcondition("CODMAG[1,3]",_strexpr);
else
_form->find_field('B',odd_page,"GRUPPI_DEPOSITO").setcondition("CODMAG[1,5]",_strexpr);
darec.put("ANNOES",_mask->get(F_ANNOES)); darec.put("ANNOES",_mask->get(F_ANNOES));
darec.put("CODMAG",_mask->get(F_DAMAG)); darec.put("CODMAG",_mask->get(F_DAMAG));
arec.put("ANNOES",_mask->get(F_ANNOES)); arec.put("ANNOES",_mask->get(F_ANNOES));
arec.put("CODMAG",_mask->get(F_AMAG)); arec.put("CODMAG",_mask->get(F_AMAG));
_cur->setfilter(cfilter, TRUE); _cur->setfilter(cfilter, TRUE);
_cur->setregion(darec,arec,0x2); _cur->setregion(darec,arec);
} }
// ORDINAMENTO // ORDINAMENTO
@ -692,6 +728,8 @@ void TStampa_inventario::setprint_perarticoli()
espr2.format("&&(%d->GRMERC<=\"%s\")", LF_ANAMAG, (const char*)m2); espr2.format("&&(%d->GRMERC<=\"%s\")", LF_ANAMAG, (const char*)m2);
cfilter << espr2; cfilter << espr2;
} }
espr2.format("%d->GRMERC", LF_ANAMAG);
_form->find_field('B',odd_page,"GRUPPI_SCATMER").setcondition(espr2,_strexpr);
} }
else else
{ {
@ -758,10 +796,10 @@ void TStampa_inventario::setprint_perarticoli()
if (*_mask->get(F_AART)) if (*_mask->get(F_AART))
cfilter << "&&(CODART<=\"" << _mask->get(F_AART) << "\")"; cfilter << "&&(CODART<=\"" << _mask->get(F_AART) << "\")";
} }
arec.put("ANNOES",_mask->get(F_ANNOES)); arec.put("ANNOES",_mask->get(F_ANNOES));
arec.put("CODMAG",_mask->get(F_AMAG)); arec.put("CODMAG", _mask->get(F_AMAG));
_cur->setfilter(cfilter, subordine != 'C'); _cur->setfilter(cfilter, subordine != 'C');
_cur->setregion(darec,arec,0x2); _cur->setregion(darec,arec);
} }
void TStampa_inventario::setprint_perarticoli_all() void TStampa_inventario::setprint_perarticoli_all()
@ -772,7 +810,7 @@ void TStampa_inventario::setprint_perarticoli_all()
char subordine=*_mask->get(F_ORDINEART); char subordine=*_mask->get(F_ORDINEART);
_cur = _form->cursor(); _cur = _form->cursor();
if (*_mask->get(F_FILTRO)=='N') if (*_mask->get(F_FILTRO)=='N')
filter << "(STR(" << LF_MAG <<"->GIAC!=\"0\"))&&"; filter << "(STR(" << LF_MAG <<"->GIAC!=\"0\"))&&";
if (*_mask->get(F_FILTRO)=='+') if (*_mask->get(F_FILTRO)=='+')
@ -817,10 +855,10 @@ void TStampa_inventario::setprint_perarticoli_all()
m2 = _mask->get(F_ACATMER); m2 = _mask->get(F_ACATMER);
if (subordine == 'S') if (subordine == 'S')
{ {
m1 << _mask->get(F_DASCATMER); m1.left_just(3) << _mask->get(F_DASCATMER);
m2 << _mask->get(F_ASCATMER); m2.left_just(3) << _mask->get(F_ASCATMER);
m1.trim(); // m1.trim();
m2.trim(); // m2.trim();
} }
// Siccome GRMERC e' il primo campo della chiave, se e' settato l'articolo di fine intervallo // Siccome GRMERC e' il primo campo della chiave, se e' settato l'articolo di fine intervallo
// ed esso non e' vuoto, mentre la categoria merc. lo e'... la setregion() del cursore non ha effetti, // ed esso non e' vuoto, mentre la categoria merc. lo e'... la setregion() del cursore non ha effetti,
@ -832,21 +870,25 @@ void TStampa_inventario::setprint_perarticoli_all()
darec.put("GRMERC", m1); darec.put("GRMERC", m1);
darec.put("CODART",_mask->get(F_DAART)); darec.put("CODART",_mask->get(F_DAART));
arec.put("GRMERC", m2); arec.put("GRMERC", m2);
arec.put("CODART",_mask->get(F_AART)); const TString80 aart(_mask->get(F_AART));
if (aart.not_empty())
arec.put("CODART", aart);
_form->find_field('B',odd_page,"H_CATMER").show(); _form->find_field('B',odd_page,"H_CATMER").show();
_form->find_field('B',odd_page,"TOT_CATMER").show(); _form->find_field('B',odd_page,"TOT_CATMER").show();
_form->set_ordering(mg_cat_merc);
if (subordine == 'S') if (subordine == 'S')
{ {
_form->find_field('B',odd_page,"H_SCATMER").show(); _form->find_field('B',odd_page,"H_SCATMER").show();
_form->find_field('B',odd_page,"TOT_SCATMER").show(); _form->find_field('B',odd_page,"TOT_SCATMER").show();
} TString16 espr ; espr.format("%d->GRMERC", LF_ANAMAG);
_form->find_field('B',odd_page,"GRUPPI_SCATMER").setcondition(espr,_strexpr);
}
else else
{ {
_form->find_field('B',odd_page,"H_SCATMER").hide(); _form->find_field('B',odd_page,"H_SCATMER").hide();
_form->find_field('B',odd_page,"TOT_SCATMER").hide(); _form->find_field('B',odd_page,"TOT_SCATMER").hide();
_form->find_field('B',odd_page,"GRUPPI_SCATMER").setcondition("CODART",_strexpr); _form->find_field('B',odd_page,"GRUPPI_SCATMER").setcondition("CODART",_strexpr);
} }
_form->set_ordering(mg_cat_merc);
} }
break; break;
case 'R': case 'R':
@ -893,7 +935,7 @@ void TStampa_inventario::setprint_perarticoli_all()
TSortedfile *mag; TSortedfile *mag;
TRelation *rel = NULL; TRelation *rel = NULL;
if (_mask->get_bool(F_ALLADATA)) if (_mask->get_bool(F_ALLADATA) || *_mask->get(F_REALE_GIAC)=='R')
{ {
TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag", FALSE, TRUE); // Non crearlo, auto cancella il file TIsamtempfile* temp_mag = new TIsamtempfile(LF_MAG, "tmpmag", FALSE, TRUE); // Non crearlo, auto cancella il file
rel = new TRelation(temp_mag); rel = new TRelation(temp_mag);
@ -929,6 +971,8 @@ void TStampa_inventario::main_loop()
} }
const bool b = _mask->get_bool(F_ALLADATA); const bool b = _mask->get_bool(F_ALLADATA);
const bool r = *_mask->get(F_REALE_GIAC)=='R';
if (*_mask->get(F_ORDINE)=='A') if (*_mask->get(F_ORDINE)=='A')
{ {
@ -940,6 +984,12 @@ void TStampa_inventario::main_loop()
delete _form; delete _form;
continue; continue;
} }
else
if (!b && r && !crea_tempmag(FALSE))
{
delete _form;
continue;
}
setprint_perarticoli_all(); setprint_perarticoli_all();
} }
else else
@ -950,6 +1000,12 @@ void TStampa_inventario::main_loop()
delete _form; delete _form;
continue; continue;
} }
else
if (!b && r && !crea_tempmag())
{
delete _form;
continue;
}
setprint_perarticoli(); setprint_perarticoli();
} }
} }
@ -961,12 +1017,19 @@ void TStampa_inventario::main_loop()
delete _form; delete _form;
continue; continue;
} }
else
if (!b && r && !crea_tempmag())
{
delete _form;
continue;
}
setprint_permagazzini(); setprint_permagazzini();
} }
_form->set_parametri(_mask->get(F_CATVENLISTINO), _form->set_parametri(_mask->get(F_CATVENLISTINO),
_mask->get(F_CODLISTINO), _mask->get(F_CODLISTINO),
*_mask->get(F_REALE_GIAC)=='R', *_mask->get(F_REALE_GIAC)=='R',
*_mask->get(F_FIN_COMP)=='C', b); *_mask->get(F_FIN_COMP)=='C', b,
_mask->get_int(F_ANNOES));
_form->add_colval(_mask->get_int(F_VAL1)-1); _form->add_colval(_mask->get_int(F_VAL1)-1);
_form->add_colval(_mask->get_int(F_VAL2)-1); _form->add_colval(_mask->get_int(F_VAL2)-1);
_form->add_colval(_mask->get_int(F_VAL3)-1); _form->add_colval(_mask->get_int(F_VAL3)-1);
@ -976,7 +1039,16 @@ void TStampa_inventario::main_loop()
_form->genera_intestazioni(odd_page, 5); _form->genera_intestazioni(odd_page, 5);
_form->genera_intestazione_supplementare(odd_page, 4); // Nomi valorizzazioni applicate per colonna _form->genera_intestazione_supplementare(odd_page, 4); // Nomi valorizzazioni applicate per colonna
set_def_valuta(*_form);
const TDate data_limite(_mask->get_date(F_DATALIM));
if (data_limite.ok())
{
TForm_item & f = _form->find_field('H',odd_page,4);
TString prompt = f.prompt();
prompt << " al " << data_limite.string();
f.set_prompt(prompt);
}
_form->print(); _form->print();
delete _form; delete _form;
} }

View File

@ -57,7 +57,7 @@ BEGIN
INPUT CODTAB F_ANNOES INPUT CODTAB F_ANNOES
DISPLAY "Esercizio" CODTAB DISPLAY "Esercizio" CODTAB
DISPLAY "Dal@12" D0 DISPLAY "Dal@12" D0
DISPLAY "Al@12" D0 DISPLAY "Al@12" D1
OUTPUT F_ANNOES CODTAB OUTPUT F_ANNOES CODTAB
ADD NONE ADD NONE
CHECKTYPE NORMAL CHECKTYPE NORMAL

View File

@ -20,9 +20,6 @@ END
GENERAL GENERAL
BEGIN BEGIN
OFFSET 0 1 OFFSET 0 1
// Let the user be free to choose the font&size:
// FONT "Courier New"
// SIZE 10
END END
@ -55,8 +52,9 @@ END
NUMERO 4 32 NUMERO 4 32
BEGIN BEGIN
KEY "Intestazione stampa" KEY "Intestazione stampa"
PROMPT 45 2 "Stampa inventario" PROMPT 45 2 "Stampa inventario esercizio "
MESSAGE _ANNO
END END
STRINGA 5 255 STRINGA 5 255
@ -1161,7 +1159,6 @@ SECTION BODY ODD 0 COLUMNWISE
BEGIN BEGIN
KEY "COL6" KEY "COL6"
PROMPT 17 1 "" PROMPT 17 1 ""
FLAGS "U"
PICTURE "##.###.###.##@" PICTURE "##.###.###.##@"
MESSAGE ADD,447 MESSAGE ADD,447
GROUP 3 FG_COL6 GROUP 3 FG_COL6

61
mg/mg4200a.h Executable file
View File

@ -0,0 +1,61 @@
#ifndef __MG4200A_H
#define __MG4200A_H
#define MAX_VAL_COLUMNS 6
class TForm_inventario : public TForm_stampemg
{
int _colonne;
TSorted_cursor *_sortcur; // Cursore sortato: RAGGFIS+CODART usato in stampe per raggr. fisc.
TConfig *conf_ditta;
bool _use_alternate_cursor;
TArticolo_giacenza_loadable * _curr_art;
TString16 _codlist,_catven; // codici listino e cat vendita
bool _giaceff, // flag inventario di giacenza
_valcomp, // flag valorizzzione finiti o componenti
_alladata, // flag di stampa inventario alla data, per utilizzare TArticolo_giacenza_loadable
_pos, // flag di stampa inventario positivi
_notzero; // flag di stampa inventario non zero
int _annoes;
TTipo_valorizz _valorizz_scelte[MAX_VAL_COLUMNS]; // valorizzazioni delle varie colonne
TCurrency *_currency;
TArticolo_giacenza_loadable &curr_art();
public:
virtual TCursor* cursor() const ;
bool genera_intestazione_supplementare(pagetype p, short y);
void set_parametri(const char * codcm,const char * cod,bool giaceff, bool valcomp, bool alladata, int annoes);
bool valorizzazione(TForm_item &cf, TTipo_valorizz t);
bool validate(TForm_item &cf, TToken_string &s);
void use_alternate_cursor(const bool b = TRUE) { _use_alternate_cursor = b; }
void add_colval(int tipo);
TForm_inventario(const char *name,const char *code) ;
~TForm_inventario();
};
class TStampa_inventario : public TSkeleton_application
{
TArray * _files;
TStampemg_mask * _mask;
TCursor * _cur;
TForm_inventario * _form; // to be moved into TPrint_application
protected:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
virtual void on_firm_change();
void setprint_permagazzini();
void setprint_perarticoli();
void setprint_perarticoli_all();
bool crea_tempmag(const bool b = TRUE);
bool calcola_giacenze(const bool b = TRUE);
virtual void set_def_valuta(TForm_inventario & f) {}
public:
TStampa_inventario() {}
};
#endif //__MG4200A_H

View File

@ -20,9 +20,6 @@ END
GENERAL GENERAL
BEGIN BEGIN
OFFSET 0 1 OFFSET 0 1
// Let the user be free to choose the font&size:
// FONT "Courier New"
// SIZE 10
END END
@ -55,8 +52,9 @@ END
NUMERO 4 32 NUMERO 4 32
BEGIN BEGIN
KEY "Intestazione stampa" KEY "Intestazione stampa"
PROMPT 45 2 "Stampa inventario" PROMPT 45 2 "Stampa inventario esercizio "
MESSAGE _ANNO
END END
STRINGA 5 255 STRINGA 5 255

View File

@ -20,9 +20,6 @@ END
GENERAL GENERAL
BEGIN BEGIN
OFFSET 0 1 OFFSET 0 1
// FONT "Courier New"
// Let the user be free to choose the font size:
// SIZE 10
END END
SECTION GRAPHIC SECTION GRAPHIC
@ -53,8 +50,9 @@ END
NUMERO 4 32 NUMERO 4 32
BEGIN BEGIN
KEY "Intestazione stampa" KEY "Intestazione stampa"
PROMPT 45 2 "Stampa inventario" PROMPT 45 2 "Stampa inventario esercizio "
MESSAGE _ANNO
END END
STRINGA 5 146 STRINGA 5 146

Some files were not shown because too many files have changed in this diff Show More