Patch level : 10.0 286
Files correlati : pe0.exe Ricompilazione Demo : [ ] Commento : Preventivi/incarichi (Dinamica) git-svn-id: svn://10.65.10.50/trunk@18732 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
6da5458f1f
commit
5ea42a63e5
16
pe/pe0.cpp
Executable file
16
pe/pe0.cpp
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#include <xvt.h>
|
||||||
|
|
||||||
|
#include "pe0.h"
|
||||||
|
|
||||||
|
int main(int argc, char** argv)
|
||||||
|
{
|
||||||
|
const int r = (argc > 1) ? argv[1][1] - '0' : 0;
|
||||||
|
switch (r)
|
||||||
|
{
|
||||||
|
case 3: pe0400(argc, argv); break; // gestione preventivi
|
||||||
|
case 4: pe0500(argc, argv); break; // generazione ordini e preventivi esecutivi
|
||||||
|
case 5: pe0500(argc, argv); break; // generazione ordini di produzione e fabbisogni
|
||||||
|
default: pe0400(argc, argv); break; // gestione preventivi
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
8
pe/pe0.h
Executable file
8
pe/pe0.h
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef __LV3_H
|
||||||
|
#define __LV3_H
|
||||||
|
|
||||||
|
int pe0400(int argc, char* argv[]);
|
||||||
|
int pe0500(int argc, char* argv[]);
|
||||||
|
int pe0600(int argc, char* argv[]);
|
||||||
|
|
||||||
|
#endif // __LV3_H
|
479
pe/pe0400.cpp
Executable file
479
pe/pe0400.cpp
Executable file
@ -0,0 +1,479 @@
|
|||||||
|
#include <colors.h>
|
||||||
|
|
||||||
|
#include "../ve/ve0100.h"
|
||||||
|
#include "../ve/veini.h"
|
||||||
|
#include "../ve/veuml.h"
|
||||||
|
#include "../ve/veuml3.h"
|
||||||
|
#include "../ve/verig.h"
|
||||||
|
#include "../ve/vepriv.h"
|
||||||
|
|
||||||
|
#include "../ve/velib.h"
|
||||||
|
#include "../ve/velib04.h"
|
||||||
|
|
||||||
|
#define F_K F_USERFLD
|
||||||
|
|
||||||
|
#define F_DETTAGLIO F_USERFLD+1
|
||||||
|
#define FOR_EACH_DOC_ROW_BACK(d, r, row) const TRiga_documento* row = NULL; for (int r = d.rows(); r > 0 && (row = &d[r]) != NULL; r--)
|
||||||
|
|
||||||
|
//////////////////////////////////////////
|
||||||
|
//// CLASSE TGestione_preventivo_msk ////
|
||||||
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
//Definizione della classe della maschera
|
||||||
|
class TGestione_preventivo_msk : public TDocumento_mask
|
||||||
|
{
|
||||||
|
int _rule;
|
||||||
|
protected:
|
||||||
|
//hanlder di documento:
|
||||||
|
static bool pe_data_handler(TMask_field& f, KEY k);
|
||||||
|
//handler di riga:
|
||||||
|
static bool pe_ritirato_handler(TMask_field& f, KEY k);
|
||||||
|
static bool pe_codart_handler(TMask_field& f, KEY k);
|
||||||
|
static bool pe_umart_handler(TMask_field& f, KEY k);
|
||||||
|
|
||||||
|
static bool ss_notify(TSheet_field& ss, int r, KEY key);
|
||||||
|
|
||||||
|
virtual void on_idle();
|
||||||
|
virtual void highlight_row(int row, bool dirty = true, bool update = true);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void user_set_handler( short fieldid, int index);
|
||||||
|
virtual void user_set_row_handler(TMask& rm, short field, int index);
|
||||||
|
|
||||||
|
virtual TVariable_mask * riga_mask(int numriga);
|
||||||
|
virtual void doc2mask(bool reload_clifo = true, bool update = true);
|
||||||
|
|
||||||
|
TGestione_preventivo_msk(const char* tipodoc);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//////////////////////////////////////////
|
||||||
|
//// CLASSE TGestione_preventivo_APP ////
|
||||||
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
// Definizione della classe dell'applicazione motore
|
||||||
|
class TGestione_preventivo_app : public TMotore_application
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual TMask* get_mask( int mode );
|
||||||
|
virtual int write( const TMask& m );
|
||||||
|
virtual int rewrite( const TMask& m );
|
||||||
|
virtual int read ( TMask& m );
|
||||||
|
virtual void init_insert_mode( TMask& m );
|
||||||
|
void elimina_vuote( const TMask& m);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGestione_preventivo_app() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline TGestione_preventivo_app& peapp() { return (TGestione_preventivo_app &)main_app(); };
|
||||||
|
|
||||||
|
//////////////////////////////////////////
|
||||||
|
//// CLASSE TGestione_preventivo_MSK ////
|
||||||
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
////////////////////////////
|
||||||
|
// HANDLER DI DOCUMENTO //
|
||||||
|
////////////////////////////
|
||||||
|
|
||||||
|
void TGestione_preventivo_msk:: on_idle()
|
||||||
|
{
|
||||||
|
TDocumento_mask::on_idle();
|
||||||
|
}
|
||||||
|
|
||||||
|
//magico metodo per settare, al cambio riga dello sheet, il focus sul campo desiderato (il campo in questione è..
|
||||||
|
//..definito nella on_idle(); ricordarsi la set_notify() nel costruttore della maschera senno' viene eseguito l'ss_notify()..
|
||||||
|
//..standard e non questo qui ridefinito. Allah!
|
||||||
|
bool TGestione_preventivo_msk::ss_notify(TSheet_field& ss, int r, KEY key)
|
||||||
|
{
|
||||||
|
TGestione_preventivo_msk& dmsk = (TGestione_preventivo_msk&) ss.mask();
|
||||||
|
TSheet_field & sh = dmsk.sfield(F_SHEET);
|
||||||
|
TDocumento& doc = dmsk.doc();
|
||||||
|
TRiga_documento& row = doc[r + 1];
|
||||||
|
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case K_ENTER: // modifica
|
||||||
|
{
|
||||||
|
TMask & m = sh.sheet_row_mask(r);
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
const bool prodfin = level == 0;
|
||||||
|
const bool price_enabled = (r + 1 == doc.physical_rows()) || (level < doc[r + 2].get_int(RDOC_LEVEL));
|
||||||
|
short id;
|
||||||
|
|
||||||
|
m.enable(FR_PREZZO, price_enabled);
|
||||||
|
m.enable(FR_JOLLY2, price_enabled);
|
||||||
|
for (id = F_CDC1; id < F_CDC12; id++)
|
||||||
|
m.enable(id, prodfin);
|
||||||
|
for (id = F_DESCDC1; id < F_DESCDC12; id++)
|
||||||
|
m.enable(id, prodfin);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case K_INS: // Inserimento
|
||||||
|
{
|
||||||
|
const int new_sheet_r = doc.physical_rows() == 0 ? 0 : r + 1;
|
||||||
|
const int new_r = new_sheet_r + 1;
|
||||||
|
int level = 0;
|
||||||
|
|
||||||
|
doc.insert_row(new_r, dmsk.get( F_LBTIPORIGA ));
|
||||||
|
TRiga_documento & new_row = doc[new_r];
|
||||||
|
|
||||||
|
if (r > 0 && row.is_merce())
|
||||||
|
{
|
||||||
|
|
||||||
|
level = row.get_int(RDOC_LEVEL);
|
||||||
|
if (dmsk.get_bool(F_DETTAGLIO))
|
||||||
|
{
|
||||||
|
level++;
|
||||||
|
dmsk.reset(F_DETTAGLIO);
|
||||||
|
}
|
||||||
|
if (level > 0)
|
||||||
|
{
|
||||||
|
new_row.put(RDOC_CODCOSTO, row.get(RDOC_CODCOSTO));
|
||||||
|
new_row.put(RDOC_CODCMS, row.get(RDOC_CODCMS));
|
||||||
|
new_row.put(RDOC_FASCMS, row.get(RDOC_FASCMS));
|
||||||
|
|
||||||
|
short id;
|
||||||
|
|
||||||
|
sh.disable_cell(r, sh.cid2index(FR_PREZZO));
|
||||||
|
sh.disable_cell(r, sh.cid2index(FR_JOLLY2));
|
||||||
|
row.zero(RDOC_PREZZO);
|
||||||
|
row.zero(RDOC_K);
|
||||||
|
row.autoload(sh);
|
||||||
|
for (id = F_CDC1; id < F_CDC12; id++)
|
||||||
|
sh.disable_cell(new_sheet_r, sh.cid2index(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new_row.put(RDOC_LEVEL, level);
|
||||||
|
TString tree;
|
||||||
|
|
||||||
|
if (level > 0)
|
||||||
|
tree.fill(' ');
|
||||||
|
tree << '+';
|
||||||
|
tree.rpad(10, '-');
|
||||||
|
row.put(RDOC_TREE, tree);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TDocumento_mask::ss_notify(ss, r, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TGestione_preventivo_msk::highlight_row(int row, bool dirty, bool update)
|
||||||
|
{
|
||||||
|
TRiga_documento& rigadoc = doc()[row + 1];
|
||||||
|
TSheet_field& sf = sfield(F_SHEET);
|
||||||
|
COLOR back1 = NORMAL_BACK_COLOR, back2 = FOCUS_BACK_COLOR;
|
||||||
|
const TColor_rule * c = (TColor_rule *) color_rules().objptr(_rule);
|
||||||
|
|
||||||
|
if (c != NULL)
|
||||||
|
{
|
||||||
|
COLOR fore;
|
||||||
|
|
||||||
|
c->colors(back2, fore);
|
||||||
|
}
|
||||||
|
const COLOR back = blend_colors(back1, back2, ((double) rigadoc.get_int(RDOC_LEVEL)) / 10.0);
|
||||||
|
|
||||||
|
sf.set_back_and_fore_color(back, COLOR_INVALID, row);
|
||||||
|
TDocumento_mask::highlight_row(row, dirty, update);
|
||||||
|
}
|
||||||
|
|
||||||
|
TVariable_mask * TGestione_preventivo_msk::riga_mask(int numriga)
|
||||||
|
{
|
||||||
|
TVariable_mask* m = TDocumento_mask::riga_mask(numriga);
|
||||||
|
|
||||||
|
if ( m != NULL)
|
||||||
|
{
|
||||||
|
const TRiga_documento& riga = doc()[numriga + 1];
|
||||||
|
TEdit_field & tree = m->add_string(FR_JOLLY1, 0, "", 30, 50, 10, "D");
|
||||||
|
TEdit_field & k = m->add_string(FR_JOLLY2, 0, "K ", 2, 20, 25);
|
||||||
|
|
||||||
|
tree.set_field(RDOC_TREE);
|
||||||
|
k.set_field(RDOC_K);
|
||||||
|
}
|
||||||
|
return m;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TGestione_preventivo_msk::doc2mask(bool reload_clifo, bool update)
|
||||||
|
{
|
||||||
|
TDocumento_mask::doc2mask(reload_clifo, false);
|
||||||
|
|
||||||
|
TSheet_field& s = sfield(F_SHEET);
|
||||||
|
const int righe = s.items();
|
||||||
|
const TDocumento & d = doc();
|
||||||
|
|
||||||
|
for (int i = 0; i < righe; i++)
|
||||||
|
{
|
||||||
|
const TRiga_documento & row = d[i + 1];
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
const bool prodfin = level == 0;
|
||||||
|
const bool price_enabled = (i + 1 == d.physical_rows()) || (level < d[i + 2].get_int(RDOC_LEVEL));
|
||||||
|
|
||||||
|
s.enable_cell(i, s.cid2index(FR_PREZZO), price_enabled);
|
||||||
|
s.enable_cell(i, s.cid2index(FR_JOLLY2), price_enabled);
|
||||||
|
for (short id = F_CDC1; id < F_CDC12; id++)
|
||||||
|
s.enable_cell(i, s.cid2index(id), prodfin);
|
||||||
|
}
|
||||||
|
|
||||||
|
//aggiorna i colori delle righe e forza l'update dello sheet
|
||||||
|
highlight();
|
||||||
|
}
|
||||||
|
|
||||||
|
//PE_TESTATA_HANDLER: handler che si occupa di decodificare i campi data in testata
|
||||||
|
bool TGestione_preventivo_msk::pe_data_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
bool ok = true;
|
||||||
|
TGestione_preventivo_msk& dmsk = (TGestione_preventivo_msk&)f.mask();
|
||||||
|
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////
|
||||||
|
// HANDLER DI RIGA //
|
||||||
|
///////////////////////
|
||||||
|
|
||||||
|
//PE_RITIRATO_HANDLER: handler sul campo ritirato, che copia nel campo consegnato
|
||||||
|
//lo stesso valore eventualmente arrotondato e aggiorna il campo "dotazione odierna" (sempre)
|
||||||
|
//e il campo "dotazione temporanea" (se la causale è giusta)
|
||||||
|
bool TGestione_preventivo_msk::pe_ritirato_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
if (f.to_check(k))
|
||||||
|
{
|
||||||
|
TMask& msk = f.mask();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TGestione_preventivo_msk::pe_codart_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
bool ok = codart_handler( f, k );
|
||||||
|
|
||||||
|
if (ok && (k == K_ENTER || k == K_TAB))
|
||||||
|
{
|
||||||
|
TMask& row_mask = f.mask();
|
||||||
|
|
||||||
|
if (row_mask.field(FR_JOLLY2).active())
|
||||||
|
{
|
||||||
|
TSheet_field * sh = row_mask.get_sheet();
|
||||||
|
if (sh != NULL)
|
||||||
|
{
|
||||||
|
TDocumento_mask & mask = (TDocumento_mask &) sh->mask();
|
||||||
|
TDocumento & doc = mask.doc();
|
||||||
|
|
||||||
|
if (f.to_check(k, true))
|
||||||
|
{
|
||||||
|
const int r = sh->selected();
|
||||||
|
const TString& codart = mask.get(FR_CODARTMAG);
|
||||||
|
TRiga_documento & row = doc[r + 1];
|
||||||
|
|
||||||
|
if (codart.full())
|
||||||
|
{
|
||||||
|
const TArticolo_giacenza & art = cached_article(codart);
|
||||||
|
TString80 k = art.get(ANAMAG_PERCRIC);
|
||||||
|
|
||||||
|
if (k.blank())
|
||||||
|
{
|
||||||
|
const TString catmer = art.get(ANAMAG_GRMERC);
|
||||||
|
k = cache().get("GMC", catmer, "S2");
|
||||||
|
if (k.blank())
|
||||||
|
k = cache().get("GMC", catmer.left(3), "S2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TGestione_preventivo_msk::pe_umart_handler(TMask_field& f, KEY k)
|
||||||
|
{
|
||||||
|
bool ok = umart_handler( f, k );
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
TMask& row_mask = f.mask();
|
||||||
|
TSheet_field * sh = row_mask.get_sheet();
|
||||||
|
if (sh != NULL)
|
||||||
|
{
|
||||||
|
TDocumento_mask & mask = (TDocumento_mask &) sh->mask();
|
||||||
|
TDocumento & doc = mask.doc();
|
||||||
|
|
||||||
|
if (k == K_F8)
|
||||||
|
{
|
||||||
|
const int r = sh->selected();
|
||||||
|
|
||||||
|
if (r > 0)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = doc[r + 1];
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
|
||||||
|
if (level > 0)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = doc[r];
|
||||||
|
const real qta_prec = row.get_real(RDOC_QTA);
|
||||||
|
real qta(f.get());
|
||||||
|
TToken_string & shrow = sh->row(r);
|
||||||
|
|
||||||
|
qta *= qta_prec;
|
||||||
|
shrow.add(qta.string(), sh->cid2index(FR_UMQTA));
|
||||||
|
sh->force_update(r);
|
||||||
|
f.focusdirty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (f.to_check(k, true))
|
||||||
|
{
|
||||||
|
const int r = sh->selected();
|
||||||
|
TRiga_documento & row = doc[r + 1];
|
||||||
|
const real old_qta = row.get_real(RDOC_QTA);
|
||||||
|
const real qta(f.get());
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
|
||||||
|
if (old_qta != qta)
|
||||||
|
{
|
||||||
|
const int rows = doc.physical_rows();
|
||||||
|
|
||||||
|
for (int i = r + 2; level < doc[i].get_int(RDOC_LEVEL) && i <= rows; i++)
|
||||||
|
{
|
||||||
|
TToken_string & shrow = sh->row(i - 1);
|
||||||
|
real row_qta(shrow.get(sh->cid2index(FR_UMQTA)));
|
||||||
|
|
||||||
|
row_qta *= qta;
|
||||||
|
row_qta /= old_qta;
|
||||||
|
shrow.add(row_qta.string(), sh->cid2index(FR_UMQTA));
|
||||||
|
doc[i].put(RDOC_QTA, row_qta);
|
||||||
|
}
|
||||||
|
sh->force_update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
//metodo che setta gli handler sui campi di riga
|
||||||
|
void TGestione_preventivo_msk::user_set_row_handler(TMask& rm, short field, int index)
|
||||||
|
{
|
||||||
|
switch(index)
|
||||||
|
{
|
||||||
|
case 5101: rm.set_handler(field, pe_ritirato_handler); break;
|
||||||
|
case 5102: rm.set_handler(field, pe_codart_handler); break;
|
||||||
|
default : TDocumento_mask::user_set_row_handler(rm, field, index); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//metodo che setta l'handler di bolla
|
||||||
|
void TGestione_preventivo_msk::user_set_handler( short fieldid, int index)
|
||||||
|
{
|
||||||
|
switch(index)
|
||||||
|
{
|
||||||
|
case 5101: set_field_handler(fieldid, pe_data_handler); break;
|
||||||
|
default : TDocumento_mask::user_set_handler(fieldid, index); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TGestione_preventivo_msk::TGestione_preventivo_msk(const char* tipodoc) : TDocumento_mask(tipodoc)
|
||||||
|
{
|
||||||
|
TConfig* configpe = new TConfig(CONFIG_DITTA, "pe");
|
||||||
|
sfield(F_SHEET).set_auto_append();
|
||||||
|
sfield(F_SHEET).set_notify( ss_notify );
|
||||||
|
_rule = color_rules().add(new TColor_rule("Livello", "", _numexpr, FOCUS_BACK_COLOR, FOCUS_COLOR));
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////////////////
|
||||||
|
//// CLASSE TGESTIONE_PREVENTIVO_APP ////
|
||||||
|
//////////////////////////////////////////
|
||||||
|
|
||||||
|
//ridefinisco il metodo get_mask delle TMotore_application
|
||||||
|
TMask* TGestione_preventivo_app::get_mask( int mode )
|
||||||
|
{
|
||||||
|
if (mode == MODE_INS || mode == MODE_MOD)
|
||||||
|
{
|
||||||
|
TString4 tipodoc;
|
||||||
|
if (mode == MODE_MOD)
|
||||||
|
tipodoc = get_relation()->curr().get(DOC_TIPODOC); // Lo prendo dalla relazione (Gelai)
|
||||||
|
else
|
||||||
|
tipodoc = TMotore_application::get_mask(MODE_QUERY)->get(F_TIPODOC);
|
||||||
|
if (_doc_masks.objptr(tipodoc) == NULL)
|
||||||
|
{
|
||||||
|
TGestione_preventivo_msk* m = new TGestione_preventivo_msk(tipodoc);
|
||||||
|
_doc_masks.add(tipodoc, m);
|
||||||
|
const TTipo_documento& tdoc = m->doc().tipo();
|
||||||
|
const TString_array& handlers = tdoc.handlers();
|
||||||
|
FOR_EACH_ARRAY_ROW(handlers, i, row)
|
||||||
|
{
|
||||||
|
m->user_set_handler( row->get_int( 0 ), row->get_int( 1 ) );
|
||||||
|
}
|
||||||
|
TSheet_field & sh = m->sfield(F_SHEET);
|
||||||
|
const int y = sh.y_pos() - 1;
|
||||||
|
TEdit_field & k = m->add_string(F_K, sh.page(), "K ", 2, y, 10, "D");
|
||||||
|
|
||||||
|
k.set_field(DOC_K);
|
||||||
|
m->add_boolean(F_DETTAGLIO, sh.page(), "Dettaglia ", 30, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return TMotore_application::get_mask(mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ridefinisco il metodo write delle TMotore_application
|
||||||
|
int TGestione_preventivo_app::write( const TMask& m )
|
||||||
|
{
|
||||||
|
TDocumento& doc = ((TDocumento_mask&) m).doc();
|
||||||
|
const TString k = doc.get(DOC_K);
|
||||||
|
|
||||||
|
for (int i = 1 ; i <= doc.physical_rows(); i++)
|
||||||
|
if (doc[i].get(RDOC_K).blank())
|
||||||
|
doc[i].put(RDOC_K, k);
|
||||||
|
return TMotore_application::write(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ridefinisco il metodo rewrite delle TMotore_application
|
||||||
|
int TGestione_preventivo_app::rewrite( const TMask& m )
|
||||||
|
{
|
||||||
|
TDocumento& doc = ((TDocumento_mask&) m).doc();
|
||||||
|
const TString k = doc.get(DOC_K);
|
||||||
|
|
||||||
|
for (int i = 1 ; i <= doc.physical_rows(); i++)
|
||||||
|
if (doc[i].get(RDOC_K).blank())
|
||||||
|
doc[i].put(RDOC_K, k);
|
||||||
|
return TMotore_application::rewrite(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ridefinisco il metodo read della TMotore_application
|
||||||
|
int TGestione_preventivo_app::read(TMask& m)
|
||||||
|
{
|
||||||
|
const int err = TMotore_application::read(m);
|
||||||
|
|
||||||
|
if (err == NOERR)
|
||||||
|
{
|
||||||
|
TDocumento_mask& mask = (TDocumento_mask&) m;
|
||||||
|
TDocumento& doc = mask.doc();
|
||||||
|
const TString k = doc.get(DOC_K);
|
||||||
|
|
||||||
|
for (int i = 1 ; i <= doc.physical_rows(); i++)
|
||||||
|
if (k == doc[i].get(RDOC_K))
|
||||||
|
doc[i].zero(RDOC_K);
|
||||||
|
}
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
//ridefinisco il metodo init_insert_mode della TMotore_application
|
||||||
|
void TGestione_preventivo_app::init_insert_mode(TMask &m)
|
||||||
|
{
|
||||||
|
TGestione_preventivo_msk & mask = (TGestione_preventivo_msk&) m;
|
||||||
|
TDocumento& d = mask.doc();
|
||||||
|
|
||||||
|
return TMotore_application::init_insert_mode(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pe0400( int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TGestione_preventivo_app a;
|
||||||
|
|
||||||
|
a.run( argc, argv, TR("Gestione Preventivi"));
|
||||||
|
return 0;
|
||||||
|
}
|
292
pe/pe0500.cpp
Executable file
292
pe/pe0500.cpp
Executable file
@ -0,0 +1,292 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <automask.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include "pe0500.h"
|
||||||
|
#include "../ve/velib.h"
|
||||||
|
#include "../ve/velib04.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenerazione_esecutivo
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenerazione_esecutivo : public TCopia_documento
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void post_process_output(TLista_documenti& doc_out);
|
||||||
|
void genera_matricola(TRiga_documento & row);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenerazione_esecutivo(const char* cod) : TCopia_documento(cod) {}
|
||||||
|
virtual ~TGenerazione_esecutivo() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenerazione_esecutivo::genera_matricola(TRiga_documento & row)
|
||||||
|
{
|
||||||
|
for (int livello = 0; livello < 4; livello++)
|
||||||
|
{
|
||||||
|
TToken_string * str = row.tipo().genconf(livello);
|
||||||
|
|
||||||
|
if (str != NULL)
|
||||||
|
{
|
||||||
|
const TString codart = row.get(RDOC_CODART);
|
||||||
|
|
||||||
|
if (codart.full())
|
||||||
|
{
|
||||||
|
TString code;
|
||||||
|
const TRectype & anamag = cache().get(LF_ANAMAG, codart);
|
||||||
|
const int items = str->items();
|
||||||
|
|
||||||
|
for (int i = 0; i < items; i++)
|
||||||
|
{
|
||||||
|
const TString & name = str->get(i);
|
||||||
|
if (name.starts_with("PROG"))
|
||||||
|
{
|
||||||
|
TTable lv(format("LV%1d", livello + 1));
|
||||||
|
const int chars = atoi(name.after("PROG"));
|
||||||
|
|
||||||
|
lv.put("CODTAB", code);
|
||||||
|
if (lv.read(_isequal) != NOERR)
|
||||||
|
{
|
||||||
|
lv.zero();
|
||||||
|
lv.put("CODTAB", code);
|
||||||
|
lv.write();
|
||||||
|
}
|
||||||
|
const int prog = lv.get_int("I0") + 1;
|
||||||
|
lv.put("I0", prog);
|
||||||
|
lv.rewrite();
|
||||||
|
TString s; s << prog; s.lpad(chars, '0');
|
||||||
|
code << s;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (name.starts_with("33."))
|
||||||
|
{
|
||||||
|
TFieldref fld(name.after("33."), LF_DOC);
|
||||||
|
|
||||||
|
code << fld.read(row.doc());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (name.starts_with("34."))
|
||||||
|
{
|
||||||
|
TFieldref fld(name.after("34."), LF_RIGHEDOC);
|
||||||
|
|
||||||
|
code << fld.read(row);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (name.starts_with("47."))
|
||||||
|
{
|
||||||
|
TFieldref fld(name.after("47."), LF_ANAMAG);
|
||||||
|
|
||||||
|
code << fld.read(anamag);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row.put(RDOC_LIVELLO, code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TGenerazione_esecutivo::post_process_output(TLista_documenti& doc_out)
|
||||||
|
{
|
||||||
|
const int items = doc_out.items();
|
||||||
|
|
||||||
|
for (int d = 0; d < items; d++)
|
||||||
|
{
|
||||||
|
const TDocumento& doc = doc_out[d];
|
||||||
|
const int rows = doc.physical_rows();
|
||||||
|
|
||||||
|
for (int r = 1; r <= rows; r++)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
|
||||||
|
if (row.get_int(RDOC_LEVEL) == 0)
|
||||||
|
genera_matricola(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenerazione_orsine
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenerazione_ordine : public TCopia_documento
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void post_process_output(TLista_documenti& doc_out);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenerazione_ordine(const char* cod) : TCopia_documento(cod) {}
|
||||||
|
virtual ~TGenerazione_ordine() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenerazione_ordine::post_process_output(TLista_documenti& doc_out)
|
||||||
|
{
|
||||||
|
const int items = doc_out.items();
|
||||||
|
|
||||||
|
for (int d = 0; d < items; d++)
|
||||||
|
{
|
||||||
|
TDocumento& doc = doc_out[d];
|
||||||
|
const int rows = doc.physical_rows();
|
||||||
|
real total;
|
||||||
|
|
||||||
|
for (int r = rows; r > 0; r--)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
|
||||||
|
if (level != 0)
|
||||||
|
{
|
||||||
|
const TString & k = row.get(RDOC_K);
|
||||||
|
TString ge;
|
||||||
|
real perc;
|
||||||
|
real importo = row.importo(true, false);
|
||||||
|
|
||||||
|
if (scontoexpr2perc(k, false, ge, perc))
|
||||||
|
importo *= (2 - perc);
|
||||||
|
total += importo;
|
||||||
|
doc.destroy_row(r, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (total != ZERO)
|
||||||
|
{
|
||||||
|
const real qta = row.get_real(RDOC_QTA);
|
||||||
|
const real price = total / qta;
|
||||||
|
TCurrency_documento c(price, doc, true);
|
||||||
|
|
||||||
|
row.put(RDOC_PREZZO, c.get_value());
|
||||||
|
}
|
||||||
|
total = ZERO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenEsecutivo mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenEsecutivo_mask : public TAutomask
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenEsecutivo_mask() : TAutomask("pe0500a") { open(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
bool TGenEsecutivo_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch (o.dlg())
|
||||||
|
{
|
||||||
|
case F_FROM_FRNDOC:
|
||||||
|
case F_FROM_TONDOC:
|
||||||
|
if (e == fe_modify || e == fe_init)
|
||||||
|
{
|
||||||
|
const long docfr = get_long(F_FROM_FRNDOC);
|
||||||
|
const long docto = get_long(F_FROM_TONDOC);
|
||||||
|
if (docto > 0L && docfr > docto)
|
||||||
|
return error_box("Il documento finale non puo' essere maggiore di quello iniziale");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Main program
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenEsecutivo_app : public TSkeleton_application
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void main_loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenEsecutivo_app::main_loop()
|
||||||
|
{
|
||||||
|
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV,
|
||||||
|
LF_ANAMAG, LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP,
|
||||||
|
LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
|
||||||
|
|
||||||
|
TGenEsecutivo_mask m;
|
||||||
|
while (m.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
const TDate data(m.get_date(F_DATA));
|
||||||
|
TRectype rec_from(LF_DOC);
|
||||||
|
rec_from.put(DOC_ANNO, m.get(F_FROM_ANNO));
|
||||||
|
rec_from.put(DOC_CODNUM, m.get(F_FROM_NUM));
|
||||||
|
rec_from.put(DOC_PROVV, m.get(F_FROM_PROVV));
|
||||||
|
rec_from.put(DOC_NDOC, m.get(F_FROM_FRNDOC));
|
||||||
|
|
||||||
|
|
||||||
|
TRectype rec_to(rec_from);
|
||||||
|
rec_to.put(DOC_NDOC, m.get(F_FROM_TONDOC));
|
||||||
|
|
||||||
|
// Costruisce il filtro sui tipi documento selezionati
|
||||||
|
// Il pipe significa OR per le espressioni
|
||||||
|
TRelation rel(LF_DOC);
|
||||||
|
TCursor cur(&rel, "", 1, &rec_from, &rec_to);
|
||||||
|
|
||||||
|
const long tot = cur.items();
|
||||||
|
if (tot > 0L)
|
||||||
|
{
|
||||||
|
TGenerazione_esecutivo e(m.get(F_CODICE_ESEC));
|
||||||
|
TGenerazione_ordine o(m.get(F_CODICE_ORC));
|
||||||
|
|
||||||
|
e.preserve_original_row();
|
||||||
|
o.preserve_original_row();
|
||||||
|
cur.freeze();
|
||||||
|
TProgind pi(tot, "Generazione in corso...", FALSE, TRUE);
|
||||||
|
for (cur = 0; cur.pos() < tot; ++cur)
|
||||||
|
{
|
||||||
|
pi.addstatus(1);
|
||||||
|
|
||||||
|
TDocumento srcdoc(cur.curr()), newdoc;
|
||||||
|
|
||||||
|
if (e.is_document_ok(srcdoc))
|
||||||
|
{
|
||||||
|
TLista_documenti doc_in;
|
||||||
|
TLista_documenti doc_out;
|
||||||
|
|
||||||
|
doc_in.add(srcdoc);
|
||||||
|
e.elabora(doc_in, doc_out, data);
|
||||||
|
doc_in.rewrite();
|
||||||
|
doc_out.write();
|
||||||
|
doc_in.destroy(-1);
|
||||||
|
{
|
||||||
|
const TDocumento & esecutivo = doc_out[0];
|
||||||
|
for (int r = esecutivo.physical_rows(); r > 0; r--)
|
||||||
|
{
|
||||||
|
TRiga_documento & outrow = (TRiga_documento &) esecutivo[r];
|
||||||
|
const TRiga_documento & srcrow = srcdoc[r];
|
||||||
|
|
||||||
|
outrow.set_original_rdoc_key(srcrow);
|
||||||
|
}
|
||||||
|
doc_in.add(esecutivo);
|
||||||
|
}
|
||||||
|
doc_out.destroy(-1);
|
||||||
|
o.elabora(doc_in, doc_out, data);
|
||||||
|
doc_in.rewrite();
|
||||||
|
doc_out.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
warning_box("Nessun documento soddisfa i vincoli indicati");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int pe0500(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TGenEsecutivo_app a;
|
||||||
|
a.run(argc, argv, "Generazione Preventivi esecutivi e Ordini Clienti");
|
||||||
|
return 0;
|
||||||
|
}
|
12
pe/pe0500.h
Executable file
12
pe/pe0500.h
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#define F_FROM_ANNO 201
|
||||||
|
#define F_FROM_NUM 202
|
||||||
|
#define F_FROM_PROVV 203
|
||||||
|
#define F_FROM_DES 204
|
||||||
|
#define F_TIPI_DOC 205
|
||||||
|
#define F_FROM_FRNDOC 206
|
||||||
|
#define F_FROM_TONDOC 207
|
||||||
|
#define F_CODICE_ESEC 208
|
||||||
|
#define F_DESCR_ESEC 209
|
||||||
|
#define F_CODICE_ORC 210
|
||||||
|
#define F_DESCR_ORC 211
|
||||||
|
#define F_DATA 212
|
145
pe/pe0500a.uml
Executable file
145
pe/pe0500a.uml
Executable file
@ -0,0 +1,145 @@
|
|||||||
|
#include "pe0500.h"
|
||||||
|
|
||||||
|
TOOLBAR "topbar" 0 0 0 2
|
||||||
|
#include <stdbar.h>
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Generazione preventivi esecutivi e ordini" 0 0 0 0
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 76 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 0 "@bSorgente"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_ANNO 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "Anno "
|
||||||
|
FLAGS "AU"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
LIST F_FROM_PROVV 1 12
|
||||||
|
BEGIN
|
||||||
|
PROMPT 60 1 ""
|
||||||
|
ITEM "D|Definitivi"
|
||||||
|
ITEM "P|Provvisori"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FROM_NUM 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 "Numerazione "
|
||||||
|
USE %NUM
|
||||||
|
FLAGS "U"
|
||||||
|
INPUT CODTAB F_FROM_NUM
|
||||||
|
DISPLAY "Codice Num." CODTAB
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
OUTPUT F_FROM_NUM CODTAB
|
||||||
|
OUTPUT F_FROM_DES S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FROM_DES 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 22 2 ""
|
||||||
|
USE %NUM KEY 2
|
||||||
|
INPUT S0 F_FROM_DES
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
DISPLAY "Codice Num." CODTAB
|
||||||
|
COPY OUTPUT F_FROM_NUM
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_FRNDOC 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 3 "Da numero "
|
||||||
|
USE LF_DOC
|
||||||
|
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||||
|
INPUT ANNO F_FROM_ANNO SELECT
|
||||||
|
INPUT CODNUM F_FROM_NUM SELECT
|
||||||
|
INPUT PROVV F_FROM_PROVV SELECT
|
||||||
|
INPUT NDOC F_FROM_FRNDOC
|
||||||
|
DISPLAY "Num." CODNUM
|
||||||
|
DISPLAY "Anno" ANNO
|
||||||
|
DISPLAY "Provv" PROVV
|
||||||
|
DISPLAY "Tipo" TIPODOC
|
||||||
|
DISPLAY "Numero@7" NDOC
|
||||||
|
DISPLAY "Data@10" DATADOC
|
||||||
|
DISPLAY "C/F" TIPOCF
|
||||||
|
DISPLAY "Codice" CODCF
|
||||||
|
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||||
|
OUTPUT F_FROM_FRNDOC NDOC
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_TONDOC 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 26 3 "A numero "
|
||||||
|
COPY USE F_FROM_FRNDOC
|
||||||
|
INPUT ANNO F_FROM_ANNO SELECT
|
||||||
|
INPUT CODNUM F_FROM_NUM SELECT
|
||||||
|
INPUT PROVV F_FROM_PROVV SELECT
|
||||||
|
INPUT NDOC F_FROM_TONDOC
|
||||||
|
COPY DISPLAY F_FROM_FRNDOC
|
||||||
|
OUTPUT F_FROM_TONDOC NDOC
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 76 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 5 "@bDestinazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ESEC 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 6 "Esecutivi "
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0==4
|
||||||
|
INPUT CODTAB F_CODICE_ESEC
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ESEC CODTAB
|
||||||
|
OUTPUT F_DESC_ESEC S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessario specificare il codice elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ESEC 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 20 6 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0==4
|
||||||
|
INPUT S0 F_DESC_ESEC
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ESEC
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ORC 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 7 "Ordini "
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0==4
|
||||||
|
INPUT CODTAB F_CODICE_ORC
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ORC CODTAB
|
||||||
|
OUTPUT F_DESC_ORC S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessario specificare il codice elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ORC 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 20 7 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0==4
|
||||||
|
INPUT S0 F_DESC_ORC
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ORC
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATA
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 9 "Data "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
208
pe/pe0600.cpp
Executable file
208
pe/pe0600.cpp
Executable file
@ -0,0 +1,208 @@
|
|||||||
|
#include <applicat.h>
|
||||||
|
#include <automask.h>
|
||||||
|
#include <progind.h>
|
||||||
|
#include <relation.h>
|
||||||
|
#include <utility.h>
|
||||||
|
|
||||||
|
#include "pe0600.h"
|
||||||
|
#include "../ve/velib.h"
|
||||||
|
#include "../ve/velib04.h"
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenerazione_ordine_produzione
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenerazione_ordine_produzione : public TCopia_documento
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void post_process_output(TLista_documenti& doc_out);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenerazione_ordine_produzione(const char* cod) : TCopia_documento(cod) {}
|
||||||
|
virtual ~TGenerazione_ordine_produzione() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenerazione_ordine_produzione::post_process_output(TLista_documenti& doc_out)
|
||||||
|
{
|
||||||
|
const int items = doc_out.items();
|
||||||
|
|
||||||
|
for (int d = 0; d < items; d++)
|
||||||
|
{
|
||||||
|
TDocumento& doc = doc_out[d];
|
||||||
|
const int rows = doc.physical_rows();
|
||||||
|
int max_level = 0;
|
||||||
|
|
||||||
|
for (int r = 1; r <= rows; r++)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
const int level = row.get_int(RDOC_LEVEL);
|
||||||
|
|
||||||
|
if (max_level < level)
|
||||||
|
max_level = level;
|
||||||
|
}
|
||||||
|
for (int r = rows; r >= 1; r--)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
|
||||||
|
if (!row.is_merce() || row.get_int(RDOC_LEVEL) == max_level)
|
||||||
|
doc.destroy_row(r, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenerazione_ordine_acquisto
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenerazione_ordine_acquisto : public TCopia_documento
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual void post_process_output(TLista_documenti& doc_out);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenerazione_ordine_acquisto(const char* cod) : TCopia_documento(cod) {}
|
||||||
|
virtual ~TGenerazione_ordine_acquisto() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenerazione_ordine_acquisto::post_process_output(TLista_documenti& doc_out)
|
||||||
|
{
|
||||||
|
const int items = doc_out.items();
|
||||||
|
|
||||||
|
for (int d = 0; d < items; d++)
|
||||||
|
{
|
||||||
|
TDocumento& doc = doc_out[d];
|
||||||
|
const int rows = doc.physical_rows();
|
||||||
|
int max_level = -883;
|
||||||
|
|
||||||
|
for (int r = 1; r <= rows; r++)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
const int level = row.get_int("LEVEL");
|
||||||
|
|
||||||
|
if (max_level < level)
|
||||||
|
max_level = level;
|
||||||
|
}
|
||||||
|
for (int r = rows; r >= 1; r--)
|
||||||
|
{
|
||||||
|
TRiga_documento & row = (TRiga_documento &)doc[r];
|
||||||
|
|
||||||
|
if (!row.is_merce() || row.get_int(RDOC_LEVEL) < max_level)
|
||||||
|
doc.destroy_row(r, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TGenOrdini_mask
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenOrdini_mask : public TAutomask
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TGenOrdini_mask() : TAutomask("pe0600a") { open(); }
|
||||||
|
};
|
||||||
|
|
||||||
|
bool TGenOrdini_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||||
|
{
|
||||||
|
switch (o.dlg())
|
||||||
|
{
|
||||||
|
case F_FROM_FRNDOC:
|
||||||
|
case F_FROM_TONDOC:
|
||||||
|
if (e == fe_modify || e == fe_init)
|
||||||
|
{
|
||||||
|
const long docfr = get_long(F_FROM_FRNDOC);
|
||||||
|
const long docto = get_long(F_FROM_TONDOC);
|
||||||
|
if (docto > 0L && docfr > docto)
|
||||||
|
return error_box("Il documento finale non puo' essere maggiore di quello iniziale");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// Main program
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TGenOrdini_app : public TSkeleton_application
|
||||||
|
{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual void main_loop();
|
||||||
|
};
|
||||||
|
|
||||||
|
void TGenOrdini_app::main_loop()
|
||||||
|
{
|
||||||
|
open_files(LF_TAB, LF_TABCOM, LF_DOC, LF_RIGHEDOC, LF_CONDV, LF_RCONDV,
|
||||||
|
LF_ANAMAG, LF_SCONTI, LF_UMART, LF_CLIFO, LF_CFVEN, LF_INDSP,
|
||||||
|
LF_OCCAS, LF_MOVMAG, LF_RMOVMAG, LF_SVRIEP, LF_AGENTI, LF_PERCPROV, 0);
|
||||||
|
|
||||||
|
TGenOrdini_mask m;
|
||||||
|
while (m.run() == K_ENTER)
|
||||||
|
{
|
||||||
|
const TDate data(m.get_date(F_DATA));
|
||||||
|
TRectype rec_from(LF_DOC);
|
||||||
|
rec_from.put(DOC_ANNO, m.get(F_FROM_ANNO));
|
||||||
|
rec_from.put(DOC_CODNUM, m.get(F_FROM_NUM));
|
||||||
|
rec_from.put(DOC_PROVV, m.get(F_FROM_PROVV));
|
||||||
|
rec_from.put(DOC_NDOC, m.get(F_FROM_FRNDOC));
|
||||||
|
|
||||||
|
|
||||||
|
TRectype rec_to(rec_from);
|
||||||
|
rec_to.put(DOC_NDOC, m.get(F_FROM_TONDOC));
|
||||||
|
|
||||||
|
// Costruisce il filtro sui tipi documento selezionati
|
||||||
|
// Il pipe significa OR per le espressioni
|
||||||
|
TRelation rel(LF_DOC);
|
||||||
|
TCursor cur(&rel, "", 1, &rec_from, &rec_to);
|
||||||
|
|
||||||
|
const long tot = cur.items();
|
||||||
|
if (tot > 0L)
|
||||||
|
{
|
||||||
|
TGenerazione_ordine_produzione e(m.get(F_CODICE_ORP));
|
||||||
|
TGenerazione_ordine_acquisto o(m.get(F_CODICE_ORA));
|
||||||
|
|
||||||
|
cur.freeze();
|
||||||
|
TProgind pi(tot, "Generazione in corso...", FALSE, TRUE);
|
||||||
|
for (cur = 0; cur.pos() < tot; ++cur)
|
||||||
|
{
|
||||||
|
pi.addstatus(1);
|
||||||
|
|
||||||
|
TDocumento srcdoc(cur.curr()), newdoc;
|
||||||
|
|
||||||
|
if (e.is_document_ok(srcdoc))
|
||||||
|
{
|
||||||
|
TLista_documenti doc_in;
|
||||||
|
TLista_documenti doc_out;
|
||||||
|
|
||||||
|
doc_in.add(srcdoc);
|
||||||
|
e.elabora(doc_in, doc_out, data);
|
||||||
|
doc_in.rewrite();
|
||||||
|
doc_out.write();
|
||||||
|
doc_in.destroy(-1);
|
||||||
|
doc_out.destroy(-1);
|
||||||
|
doc_in.add(srcdoc);
|
||||||
|
o.elabora(doc_in, doc_out, data);
|
||||||
|
doc_in.rewrite();
|
||||||
|
doc_out.write();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
warning_box("Nessun documento soddisfa i vincoli indicati");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int pe0600(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
TGenOrdini_app a;
|
||||||
|
a.run(argc, argv, "Generazione ordini di produzione e acquisto");
|
||||||
|
return 0;
|
||||||
|
}
|
12
pe/pe0600.h
Executable file
12
pe/pe0600.h
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#define F_FROM_ANNO 201
|
||||||
|
#define F_FROM_NUM 202
|
||||||
|
#define F_FROM_PROVV 203
|
||||||
|
#define F_FROM_DES 204
|
||||||
|
#define F_TIPI_DOC 205
|
||||||
|
#define F_FROM_FRNDOC 206
|
||||||
|
#define F_FROM_TONDOC 207
|
||||||
|
#define F_CODICE_ORP 208
|
||||||
|
#define F_DESCR_ORP 209
|
||||||
|
#define F_CODICE_ORA 210
|
||||||
|
#define F_DESCR_ORA 211
|
||||||
|
#define F_DATA 212
|
145
pe/pe0600a.uml
Executable file
145
pe/pe0600a.uml
Executable file
@ -0,0 +1,145 @@
|
|||||||
|
#include "pe0600.h"
|
||||||
|
|
||||||
|
TOOLBAR "topbar" 0 0 0 2
|
||||||
|
#include <stdbar.h>
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
PAGE "Generazione ordini di produzione e acquisto" 0 0 0 0
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 76 5
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 0 "@bSorgente"
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_ANNO 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 1 "Anno "
|
||||||
|
FLAGS "AU"
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
LIST F_FROM_PROVV 1 12
|
||||||
|
BEGIN
|
||||||
|
PROMPT 60 1 ""
|
||||||
|
ITEM "D|Definitivi"
|
||||||
|
ITEM "P|Provvisori"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FROM_NUM 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 2 "Numerazione "
|
||||||
|
USE %NUM
|
||||||
|
FLAGS "U"
|
||||||
|
INPUT CODTAB F_FROM_NUM
|
||||||
|
DISPLAY "Codice Num." CODTAB
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
OUTPUT F_FROM_NUM CODTAB
|
||||||
|
OUTPUT F_FROM_DES S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_FROM_DES 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 22 2 ""
|
||||||
|
USE %NUM KEY 2
|
||||||
|
INPUT S0 F_FROM_DES
|
||||||
|
DISPLAY "Descrizione@50" S0
|
||||||
|
DISPLAY "Codice Num." CODTAB
|
||||||
|
COPY OUTPUT F_FROM_NUM
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_FRNDOC 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 2 3 "Da numero "
|
||||||
|
USE LF_DOC
|
||||||
|
JOIN LF_CLIFO INTO TIPOCF==TIPOCF CODCF==CODCF
|
||||||
|
INPUT ANNO F_FROM_ANNO SELECT
|
||||||
|
INPUT CODNUM F_FROM_NUM SELECT
|
||||||
|
INPUT PROVV F_FROM_PROVV SELECT
|
||||||
|
INPUT NDOC F_FROM_FRNDOC
|
||||||
|
DISPLAY "Num." CODNUM
|
||||||
|
DISPLAY "Anno" ANNO
|
||||||
|
DISPLAY "Provv" PROVV
|
||||||
|
DISPLAY "Tipo" TIPODOC
|
||||||
|
DISPLAY "Numero@7" NDOC
|
||||||
|
DISPLAY "Data@10" DATADOC
|
||||||
|
DISPLAY "C/F" TIPOCF
|
||||||
|
DISPLAY "Codice" CODCF
|
||||||
|
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
|
||||||
|
OUTPUT F_FROM_FRNDOC NDOC
|
||||||
|
END
|
||||||
|
|
||||||
|
NUMBER F_FROM_TONDOC 6
|
||||||
|
BEGIN
|
||||||
|
PROMPT 26 3 "A numero "
|
||||||
|
COPY USE F_FROM_FRNDOC
|
||||||
|
INPUT ANNO F_FROM_ANNO SELECT
|
||||||
|
INPUT CODNUM F_FROM_NUM SELECT
|
||||||
|
INPUT PROVV F_FROM_PROVV SELECT
|
||||||
|
INPUT NDOC F_FROM_TONDOC
|
||||||
|
COPY DISPLAY F_FROM_FRNDOC
|
||||||
|
OUTPUT F_FROM_TONDOC NDOC
|
||||||
|
END
|
||||||
|
|
||||||
|
GROUPBOX DLG_NULL 76 4
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 5 "@bDestinazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ORP 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 6 "Ordini di prod. "
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0==4
|
||||||
|
INPUT CODTAB F_CODICE_ORP
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ORP CODTAB
|
||||||
|
OUTPUT F_DESC_ORP S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessario specificare il codice elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ORP 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 20 6 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0==4
|
||||||
|
INPUT S0 F_DESC_ORP
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ORP
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_CODICE_ORA 8
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 7 "Ordini di acq. "
|
||||||
|
FLAG "U"
|
||||||
|
USE %ELD SELECT I0==4
|
||||||
|
INPUT CODTAB F_CODICE_ORA
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
OUTPUT F_CODICE_ORA CODTAB
|
||||||
|
OUTPUT F_DESC_ORA S0
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
|
WARNING "E' necessario specificare il codice elaborazione"
|
||||||
|
END
|
||||||
|
|
||||||
|
STRING F_DESC_ORA 50
|
||||||
|
BEGIN
|
||||||
|
PROMPT 20 7 ""
|
||||||
|
USE %ELD KEY 2 SELECT I0==4
|
||||||
|
INPUT S0 F_DESC_ORA
|
||||||
|
DISPLAY "Descrizione@55" S0
|
||||||
|
DISPLAY "Codice" CODTAB
|
||||||
|
COPY OUTPUT F_CODICE_ORA
|
||||||
|
END
|
||||||
|
|
||||||
|
DATE F_DATA
|
||||||
|
BEGIN
|
||||||
|
PROMPT 1 9 "Data "
|
||||||
|
END
|
||||||
|
|
||||||
|
ENDPAGE
|
||||||
|
|
||||||
|
ENDMASK
|
260
pe/prev.src
Executable file
260
pe/prev.src
Executable file
@ -0,0 +1,260 @@
|
|||||||
|
#include "veini.h"
|
||||||
|
#include "verig.h"
|
||||||
|
#include "veuml.h"
|
||||||
|
// Esempio di profilo documento : Profilo ordine cliente
|
||||||
|
|
||||||
|
[MAIN]
|
||||||
|
|
||||||
|
// Descrizione a caratteri del documento
|
||||||
|
TYPE=Ordine Cliente
|
||||||
|
|
||||||
|
// modifica
|
||||||
|
CAMPICALC=TOTMER|TOTPRE|SPESE|SPESIMB|SPESTRA|SPESINC|BOLLI|IMPONIBILI|IMPOSTE|TOTDOC|SCONTOD|SCONTOT|OMAGGI|TOTPROVV
|
||||||
|
CALCOLI=*
|
||||||
|
TOTPROVV =
|
||||||
|
// modifica
|
||||||
|
// Procedure utente da chiamare per il documento ( preprocessarle? )
|
||||||
|
NUOVO=
|
||||||
|
MODIFICA=
|
||||||
|
CANCELLA=
|
||||||
|
STAMPA=
|
||||||
|
RAGGRUPPA=
|
||||||
|
USER=
|
||||||
|
LINES_BEFORESHEET=1
|
||||||
|
|
||||||
|
// Indica se il documento è indirizzato ad un cliente o ad un fornitore
|
||||||
|
TIPOCF=C
|
||||||
|
|
||||||
|
//modulo di riferimento
|
||||||
|
MODULE=ve
|
||||||
|
Title(1)=Cliente
|
||||||
|
Title(2)=Pagamenti
|
||||||
|
Title(3)=Ind.Spedizione
|
||||||
|
Title(4)=Spedizione
|
||||||
|
Title(5)=Righe
|
||||||
|
Title(6)=Totali
|
||||||
|
|
||||||
|
[PROFILO]
|
||||||
|
// Si possono indicare, dopo il numero, PROMPT, HELP, WARNING cosi:
|
||||||
|
// 1|Prompt|Help|Warning
|
||||||
|
|
||||||
|
OCCASEDIT = S_NORMALE //100
|
||||||
|
OCFPI = S_DISABILITATO //100
|
||||||
|
COFI = S_NORMALE //100
|
||||||
|
STATOPAIV = S_NORMALE //100
|
||||||
|
PAIVA = S_NORMALE //100
|
||||||
|
GOLEM = S_NORMALE
|
||||||
|
GRRECAPITO = S_NORMALE //100
|
||||||
|
INDCF = S_DISABILITATO //100
|
||||||
|
CIVCF = S_DISABILITATO //100
|
||||||
|
LOCALITACF = S_DISABILITATO //100
|
||||||
|
CAPCF = S_DISABILITATO //100
|
||||||
|
PROVCOM = S_DISABILITATO //100
|
||||||
|
COMCF = S_DISABILITATO //100
|
||||||
|
DENCOM = S_DISABILITATO //100
|
||||||
|
STATOCF = S_DISABILITATO //100
|
||||||
|
DESSTATOCF = S_DISABILITATO //100
|
||||||
|
CODVAL1 = S_NORMALE //200
|
||||||
|
CODVAL2 = S_NORMALE //200
|
||||||
|
NOME_VAL1 = S_NORMALE //200
|
||||||
|
NOME_VAL2 = S_NORMALE //200
|
||||||
|
CONTROEURO = S_NORMALE //200
|
||||||
|
CAMBIO = S_NORMALE //200
|
||||||
|
DATA_CAMBIO1 = S_NORMALE //200
|
||||||
|
DATA_CAMBIO2 = S_NORMALE //200
|
||||||
|
CODLIN = S_NORMALE //300
|
||||||
|
DESLIN = S_NORMALE //300
|
||||||
|
CODPAG = S_OBBLIGATORIO //400
|
||||||
|
DESCODPAG = S_NORMALE //400
|
||||||
|
GRSCADENZE = S_NORMALE //500
|
||||||
|
DATAINSC = S_NORMALE //500
|
||||||
|
DATASCAD1 = S_DISABILITATO //500
|
||||||
|
DATASCAD2 = S_DISABILITATO //500
|
||||||
|
DATASCAD3 = S_DISABILITATO //500
|
||||||
|
DATASCAD4 = S_DISABILITATO //500
|
||||||
|
DATASCAD5 = S_DISABILITATO //500
|
||||||
|
CODABIA = S_OBBLIGATORIO //600
|
||||||
|
CODCABA = S_OBBLIGATORIO //600
|
||||||
|
DESBANAPP = S_NORMALE //600
|
||||||
|
IBAN = S_NORMALE //600
|
||||||
|
IBAN_STATO = S_NORMALE //600
|
||||||
|
IBAN_CHECK = S_NORMALE //600
|
||||||
|
BBAN = S_NORMALE //600
|
||||||
|
BBAN_CIN = S_NORMALE //600
|
||||||
|
BBAN_ABI = S_NORMALE //600
|
||||||
|
BBAN_CAB = S_NORMALE //600
|
||||||
|
BBAN_CONTO = S_NORMALE //600
|
||||||
|
CODABIP = S_NORMALE //700
|
||||||
|
CODCABP = S_NORMALE //700
|
||||||
|
DESBANPRE = S_NORMALE //700
|
||||||
|
CATVEN = S_NORMALE //800
|
||||||
|
DESCATVEN = S_DISABILITATO //800
|
||||||
|
CODLIST1 = S_NORMALE //800
|
||||||
|
CODLIST2 = S_NORMALE //800
|
||||||
|
DESLIST = S_DISABILITATO //800
|
||||||
|
CODCONT1 = S_NORMALE //810
|
||||||
|
CODCONT2 = S_NORMALE //810
|
||||||
|
DESCONT = S_DISABILITATO //810
|
||||||
|
CODCAMP = S_NORMALE //820
|
||||||
|
DESCAMP = S_DISABILITATO //820
|
||||||
|
SCONTOPERC = S_NORMALE //830
|
||||||
|
GRINDSPED = S_NORMALE //900
|
||||||
|
CODINDSP = S_NORMALE //900
|
||||||
|
RAGSOCSP = S_DISABILITATO //900
|
||||||
|
INDSP = S_DISABILITATO //900
|
||||||
|
CIVSP = S_DISABILITATO //900
|
||||||
|
LOCALITASP = S_DISABILITATO //900
|
||||||
|
CAPSP = S_DISABILITATO //900
|
||||||
|
COMSP = S_DISABILITATO //900
|
||||||
|
DENCOMSP = S_DISABILITATO //900
|
||||||
|
PROVCOMSP = S_DISABILITATO //900
|
||||||
|
STATOSP = S_DISABILITATO //900
|
||||||
|
DESSTATOSP = S_DISABILITATO //900
|
||||||
|
DATADOCRIF = S_NORMALE //1000
|
||||||
|
NUMDOCRIF = S_NOCHECK //1000
|
||||||
|
CODAGVIS = S_NORMALE //1110
|
||||||
|
DESAGVIS = S_NORMALE //1110
|
||||||
|
CODAG = S_NORMALE //1100
|
||||||
|
DESAG = S_NORMALE //1100
|
||||||
|
CODZON = S_NORMALE //1100
|
||||||
|
DESZON = S_NORMALE //1100
|
||||||
|
CODSPMEZZO = S_OBBLIGATORIO //1200
|
||||||
|
DESSPMEZZO = S_NORMALE //1200
|
||||||
|
CODPORTO = S_NORMALE //1210
|
||||||
|
DESPORTO = S_NORMALE //1210
|
||||||
|
CODNOTESP1 = S_NORMALE //1300
|
||||||
|
DESNOTESP1 = S_NORMALE //1300
|
||||||
|
CODNOTESP2 = S_NASCOSTO //1300
|
||||||
|
DESNOTESP2 = S_NASCOSTO //1300
|
||||||
|
CAUSTRASP = S_NORMALE //1400
|
||||||
|
DENCAUSTRASP = S_NORMALE //1400
|
||||||
|
CODVETT1 = S_NORMALE //1500
|
||||||
|
CODVETT2 = S_NORMALE //1500
|
||||||
|
CODVETT3 = S_NORMALE //1500
|
||||||
|
NOMEVETT1 = S_NORMALE //1500
|
||||||
|
NOMEVETT2 = S_NORMALE //1500
|
||||||
|
NOMEVETT3 = S_NORMALE //1500
|
||||||
|
NCOPIE = S_NASCOSTO //1600
|
||||||
|
IMPPAGATO = S_NORMALE //1800
|
||||||
|
ACCSALDO = S_NASCOSTO //1800
|
||||||
|
DOC1 = S_NASCOSTO //1900
|
||||||
|
DOC2 = S_NASCOSTO //1900
|
||||||
|
DOC3 = S_NASCOSTO //1900
|
||||||
|
ASPBENI1 = S_OBBLIGATORIO //2100
|
||||||
|
DESCRBENI1 = S_NORMALE //2100
|
||||||
|
ASPBENI2 = S_NASCOSTO //2100
|
||||||
|
DESCRBENI2 = S_NASCOSTO //2100
|
||||||
|
IMPNETTI = S_NASCOSTO //2200
|
||||||
|
RAGGR = S_NORMALE //2300
|
||||||
|
RAGGREFF = S_NORMALE //2300
|
||||||
|
SPESEINC = S_NORMALE //2400
|
||||||
|
ADDBOLLI = S_NORMALE //2400
|
||||||
|
CODNOTE = S_NORMALE //2500
|
||||||
|
NOTECLI = S_NOCHECK //2500
|
||||||
|
CAUSMAG = S_OBBLIGATORIO //2900
|
||||||
|
CAUSMAGC = S_DISABILITATO //2900
|
||||||
|
DESCRMAG = S_NORMALE //2900
|
||||||
|
DESCRMAGC = S_DISABILITATO //2900
|
||||||
|
DATACONS = S_NORMALE //2000
|
||||||
|
BLANK = S_DISABILITATO //4000
|
||||||
|
|
||||||
|
[DEFAULT]
|
||||||
|
|
||||||
|
[SHEET]
|
||||||
|
Col(0) = FR_JOLLY1|Albero|10
|
||||||
|
Col(1) = FR_CODMAG
|
||||||
|
Col(2) = FR_CODDEP
|
||||||
|
Col(3) = FR_CODART
|
||||||
|
Col(4) = FR_LIV1
|
||||||
|
Col(5) = FR_LIV2
|
||||||
|
Col(6) = FR_LIV3
|
||||||
|
Col(7) = FR_LIV4
|
||||||
|
Col(8) = FR_DESCR
|
||||||
|
Col(9) = FR_UMQTA
|
||||||
|
Col(10) = FR_QTA
|
||||||
|
Col(11) = FR_LORDO
|
||||||
|
Col(12) = FR_QTAEVASA
|
||||||
|
Col(13) = FR_RIGAEVASA
|
||||||
|
Col(14) = FR_DATACONS
|
||||||
|
Col(15) = FR_PREZZO
|
||||||
|
Col(16) = FR_SCONTO
|
||||||
|
Col(17) = FR_JOLLY2|K|25
|
||||||
|
Col(18) = FR_PERCPROV
|
||||||
|
Col(19) = FR_IMPFISUN
|
||||||
|
Col(20) = FR_IMPFISSO
|
||||||
|
Col(21) = FR_PERCPROV1
|
||||||
|
Col(22) = FR_CODIVA
|
||||||
|
Col(23) = FR_ADDIVA
|
||||||
|
Col(24) = FR_CAUS
|
||||||
|
Col(25) = FR_CODMAGC
|
||||||
|
Col(26) = FR_CODDEPC
|
||||||
|
Col(27) = FR_TIPORIGA
|
||||||
|
|
||||||
|
[RIGHE]
|
||||||
|
|
||||||
|
[HANDLERS]
|
||||||
|
|
||||||
|
[PROFILOGRUPPO]
|
||||||
|
101 = S_NASCOSTO
|
||||||
|
100 = S_NORMALE
|
||||||
|
200 = S_NORMALE
|
||||||
|
300 = S_NORMALE
|
||||||
|
400 = S_NORMALE
|
||||||
|
500 = S_NORMALE
|
||||||
|
600 = S_NORMALE
|
||||||
|
700 = S_NORMALE
|
||||||
|
800 = S_NORMALE
|
||||||
|
810 = S_NORMALE
|
||||||
|
820 = S_NORMALE
|
||||||
|
830 = S_NORMALE
|
||||||
|
900 = S_NORMALE
|
||||||
|
1000 = S_NORMALE
|
||||||
|
1100 = S_NORMALE
|
||||||
|
1200 = S_NORMALE
|
||||||
|
1210 = S_NORMALE
|
||||||
|
1300 = S_NORMALE
|
||||||
|
1400 = S_NORMALE
|
||||||
|
1500 = S_NORMALE
|
||||||
|
1600 = S_NASCOSTO
|
||||||
|
1800 = S_NORMALE
|
||||||
|
1900 = S_NORMALE
|
||||||
|
2000 = S_NORMALE
|
||||||
|
2100 = S_NASCOSTO
|
||||||
|
2200 = S_NORMALE
|
||||||
|
2300 = S_NORMALE
|
||||||
|
2400 = S_NORMALE
|
||||||
|
2500 = S_NORMALE
|
||||||
|
2900 = S_NORMALE
|
||||||
|
3000 = S_NORMALE
|
||||||
|
4000 = S_NORMALE
|
||||||
|
|
||||||
|
[ORDINEGRUPPI]
|
||||||
|
NGROUPS=27
|
||||||
|
1=100
|
||||||
|
2=2500
|
||||||
|
3=200
|
||||||
|
4=300
|
||||||
|
5=400
|
||||||
|
6=500
|
||||||
|
7=600
|
||||||
|
8=700
|
||||||
|
9=2400
|
||||||
|
10=2300
|
||||||
|
11=800
|
||||||
|
12=810
|
||||||
|
13=820
|
||||||
|
14=830
|
||||||
|
15=900
|
||||||
|
16=1100
|
||||||
|
17=1200
|
||||||
|
18=1500
|
||||||
|
19=1210
|
||||||
|
20=1300
|
||||||
|
21=1400
|
||||||
|
22=2100
|
||||||
|
23=1800
|
||||||
|
24=1000
|
||||||
|
25=2900
|
||||||
|
26=2000
|
||||||
|
27=3000
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user