1995-08-07 07:59:09 +00:00
|
|
|
|
|
|
|
|
|
#include <relapp.h>
|
1995-08-11 11:05:08 +00:00
|
|
|
|
#include <tabutil.h>
|
1995-08-07 07:59:09 +00:00
|
|
|
|
#include <msksheet.h>
|
1995-08-11 11:05:08 +00:00
|
|
|
|
#include <assoc.h>
|
1995-08-24 13:51:57 +00:00
|
|
|
|
#include <checks.h>
|
|
|
|
|
|
|
|
|
|
#include "ve2400.h"
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
class TAnagrafica_magazzino: public TRelation_application {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
TMask *_msk; // maschera principale
|
|
|
|
|
TRelation *_rel; // relazione principale di un solo file (anagrafiche di magazzino)
|
|
|
|
|
TLocalisamfile *_umart; // file di accesso alle unit<69> di misura
|
|
|
|
|
TLocalisamfile *_deslin; // file di accesso alle descrizioni in lingua
|
|
|
|
|
TLocalisamfile *_codcorr; // file di accesso ai codici corrispondenti
|
|
|
|
|
TRecord_array *_linee_rec0; // record array di accoppiamento delle unit<69> di misura
|
|
|
|
|
TRecord_array *_linee_rec1; // record array di accoppiamento delle descrizioni in lingua con il primo sheet
|
|
|
|
|
TRecord_array *_linee_rec2; // record array di accoppiamento delle codici corrispondenti con il secondo sheet
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
|
|
|
|
virtual bool user_create();
|
|
|
|
|
virtual bool user_destroy();
|
1995-08-24 13:51:57 +00:00
|
|
|
|
virtual TMask *get_mask(int) { return _msk; }
|
|
|
|
|
virtual bool changing_mask(int) { return FALSE; }
|
|
|
|
|
virtual TRelation *get_relation() const { return _rel; }
|
1995-08-11 11:05:08 +00:00
|
|
|
|
virtual void init_insert_mode(TMask &);
|
|
|
|
|
|
|
|
|
|
virtual int read(TMask& m);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
virtual int write(const TMask& m);
|
|
|
|
|
virtual int rewrite(const TMask& m);
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
static bool handle_sheet0(TMask_field &, KEY); // handler dello sheet delle unit<69> di misura
|
|
|
|
|
static bool handle_sheet1(TMask_field &, KEY); // handler dello sheet delle descrizioni in lingua
|
|
|
|
|
static bool handle_sheet2(TMask_field &, KEY); // handler dello sheer dei codici alternativi
|
|
|
|
|
static bool handle_sheet0_um(TMask_field &, KEY); // handler del campo UM dello sheet delle unit<69> di misura
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
|
|
|
|
public:
|
1995-08-24 13:51:57 +00:00
|
|
|
|
TAnagrafica_magazzino() {}
|
|
|
|
|
virtual ~TAnagrafica_magazzino() {}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
};
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::user_create() {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
_msk= new TMask("VE2400");
|
|
|
|
|
_msk->set_handler(F_SHEET0, handle_sheet0);
|
|
|
|
|
_msk->set_handler(F_SHEET1, handle_sheet1);
|
|
|
|
|
_msk->set_handler(F_SHEET2, handle_sheet2);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
TSheet_field &f= (TSheet_field &)_msk->field(F_SHEET0);
|
|
|
|
|
TMask &fm= f.sheet_mask();
|
|
|
|
|
fm.set_handler(FS_CODUM, handle_sheet0_um);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
_rel= new TRelation(LF_ANAGR);
|
|
|
|
|
_umart= new TLocalisamfile(LF_UMART);
|
|
|
|
|
_deslin= new TLocalisamfile(LF_DESLIN);
|
|
|
|
|
_codcorr= new TLocalisamfile(LF_CODCORR);
|
|
|
|
|
_linee_rec0= new TRecord_array(LF_UMART, "NRIGA");
|
|
|
|
|
_linee_rec1= new TRecord_array(LF_DESLIN, "NRIGA");
|
|
|
|
|
_linee_rec2= new TRecord_array(LF_CODCORR, "NRIGA");
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::user_destroy() {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
delete _linee_rec2;
|
|
|
|
|
delete _linee_rec1;
|
|
|
|
|
delete _linee_rec0;
|
|
|
|
|
delete _codcorr;
|
|
|
|
|
delete _deslin;
|
|
|
|
|
delete _umart;
|
|
|
|
|
delete _rel;
|
|
|
|
|
delete _msk;
|
1995-08-07 07:59:09 +00:00
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
int TAnagrafica_magazzino::read(TMask& m) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
int err= TRelation_application::read(m);
|
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TRectype rum(_umart->curr()); // prende il record corrente dal file delle unit<69> di misura
|
|
|
|
|
rum.zero();
|
|
|
|
|
rum.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
|
|
|
|
|
_linee_rec0->read(rum); // legge il record array
|
|
|
|
|
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0); // prende il sheet delle unit<69> di misura
|
|
|
|
|
f0.destroy(); // cancella lo sheet
|
|
|
|
|
int last= _linee_rec0->last_row();
|
|
|
|
|
if (last>0) {
|
|
|
|
|
for (int i= 1; i <= last; i++) {
|
|
|
|
|
TRectype &rec= _linee_rec0->row(i, TRUE); // prende il record della riga corrente dal record array
|
|
|
|
|
TToken_string &row= f0.row(i-1);
|
|
|
|
|
row= rec.get("UM"); // imposta la riga dello sheet con i campi del record della riga corrente
|
|
|
|
|
if (i != 1) row.add(rec.get("FC"));
|
|
|
|
|
else row.add("1"); // forza a 1 il secondo campo della prima riga (il fattore di conversione della prima U.M. deve essere 1)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
TToken_string &row= f0.row(-1); // aggiunge una riga allo sheet
|
|
|
|
|
row.add("");
|
|
|
|
|
row.add("1"); // setta il secondo campo della riga aggiunta a 1
|
|
|
|
|
}
|
|
|
|
|
f0.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. <20> fisso a 1)
|
|
|
|
|
f0.force_update(0); // aggiorna lo stato della riga 0
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
TRectype r(_deslin->curr()); // prende il record corrente dal file delle descrizioni in lingua
|
1995-08-07 07:59:09 +00:00
|
|
|
|
r.zero();
|
1995-08-11 11:05:08 +00:00
|
|
|
|
r.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
|
|
|
|
|
_linee_rec1->read(r); // legge il record array
|
|
|
|
|
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1); // prende il sheet delle descrizioni in lingua
|
|
|
|
|
f1.destroy(); // cancella lo sheet
|
|
|
|
|
last= _linee_rec1->last_row();
|
|
|
|
|
for (int i= 1; i <= last; i++) {
|
|
|
|
|
TRectype &rec= _linee_rec1->row(i, TRUE); // prende il record della riga corrente dal record array
|
|
|
|
|
TToken_string &row= f1.row(i-1);
|
|
|
|
|
row= rec.get("CODLIN"); // imposta la riga dello sheet con i campi del record della riga corrente
|
|
|
|
|
row.add(rec.get("DESCR"));
|
|
|
|
|
}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
TRectype rcor(_codcorr->curr()); // prende il record corrente dal file dei codici corrispondenti
|
1995-08-07 07:59:09 +00:00
|
|
|
|
rcor.zero();
|
1995-08-11 11:05:08 +00:00
|
|
|
|
rcor.put("CODART", m.get(F_CODART)); // imposta il record corrente sul codice articolo (dalla maschera)
|
|
|
|
|
_linee_rec2->read(rcor); // legge il record array
|
|
|
|
|
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2); // prende lo sheet dei codici corrispondenti
|
|
|
|
|
f2.destroy(); // cancella lo sheet
|
|
|
|
|
last= _linee_rec2->last_row();
|
|
|
|
|
for (i= 1; i <= last; i++) {
|
|
|
|
|
TRectype &rec= _linee_rec2->row(i, TRUE); // prende il record della riga corrente dal record array
|
|
|
|
|
TToken_string &row= f2.row(i-1);
|
|
|
|
|
row= rec.get("CODARTALT"); // imposta la riga dello sheet con i campi del record della riga corrente
|
|
|
|
|
row.add(rec.get("TIPO"));
|
|
|
|
|
}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
}
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
int TAnagrafica_magazzino::write(const TMask& m) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
int err= TRelation_application::write(m);
|
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
|
|
|
|
_linee_rec0->destroy_rows();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART));
|
|
|
|
|
|
|
|
|
|
for (int i= 0; i < f0.items(); i++) {
|
|
|
|
|
TToken_string &row= f0.row(i);
|
|
|
|
|
const TString16 um(row.get(0));
|
|
|
|
|
const real fc(row.get());
|
|
|
|
|
|
|
|
|
|
if (um.not_empty() && (!fc.is_zero())) {
|
|
|
|
|
TRectype &rec= _linee_rec0->row(i+1, TRUE);
|
|
|
|
|
rec.put("UM", um);
|
|
|
|
|
rec.put("FC", fc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
err= _linee_rec0->write();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
|
|
|
|
|
_linee_rec1->destroy_rows();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
|
|
|
|
|
|
|
|
|
|
for (int i= 0; i < f1.items(); i++) {
|
|
|
|
|
TToken_string &row= f1.row(i);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
const TString16 codlin(row.get(0));
|
|
|
|
|
const TString80 descr(row.get());
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (codlin.not_empty() && descr.not_empty()) {
|
|
|
|
|
TRectype &rec= _linee_rec1->row(i+1, TRUE);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
rec.put("CODLIN", codlin);
|
|
|
|
|
rec.put("DESCR", descr);
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
err= _linee_rec1->write();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
_linee_rec2->destroy_rows();
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
for (int i= 0; i < f2.items(); i++) {
|
|
|
|
|
TToken_string &row= f2.row(i);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
const TString80 codartalt(row.get(0));
|
|
|
|
|
const TString16 tipo(row.get());
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (codartalt.not_empty()) {
|
|
|
|
|
TRectype &reccor= _linee_rec2->row(i+1, TRUE);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
reccor.put("CODARTALT", codartalt);
|
|
|
|
|
reccor.put("TIPO", tipo);
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
err= _linee_rec2->write();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
}
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
int TAnagrafica_magazzino::rewrite(const TMask& m) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
int err= TRelation_application::rewrite(m);
|
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f0= (TSheet_field &)m.field(F_SHEET0);
|
|
|
|
|
_linee_rec0->destroy_rows();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec0->renum_key("CODART", m.get(F_CODART));
|
|
|
|
|
|
|
|
|
|
for (int i= 0; i < f0.items(); i++) {
|
|
|
|
|
TToken_string & row = f0.row(i);
|
|
|
|
|
const TString16 um(row.get(0));
|
|
|
|
|
const real fc(row.get());
|
|
|
|
|
|
|
|
|
|
if (um.not_empty() && (!fc.is_zero())) {
|
|
|
|
|
TRectype &rec= _linee_rec0->row(i+1, TRUE);
|
|
|
|
|
rec.put("UM", um);
|
|
|
|
|
rec.put("FC", fc);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
err= _linee_rec0->rewrite();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f1= (TSheet_field &)m.field(F_SHEET1);
|
|
|
|
|
_linee_rec1->destroy_rows();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec1->renum_key("CODART", m.get(F_CODART));
|
|
|
|
|
|
|
|
|
|
for (int i= 0; i < f1.items(); i++) {
|
|
|
|
|
TToken_string & row = f1.row(i);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
const TString16 codlin(row.get(0));
|
|
|
|
|
const TString80 descr(row.get());
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (codlin.not_empty() && descr.not_empty()) {
|
|
|
|
|
TRectype &rec= _linee_rec1->row(i+1, TRUE);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
rec.put("CODLIN", codlin);
|
|
|
|
|
rec.put("DESCR", descr);
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
err= _linee_rec1->rewrite();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
}
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (err == NOERR) {
|
|
|
|
|
TSheet_field &f2= (TSheet_field &)m.field(F_SHEET2);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
_linee_rec2->destroy_rows();
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (m.insert_mode()) _linee_rec2->renum_key("CODART", m.get(F_CODART));
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
for (int i= 0; i < f2.items(); i++) {
|
|
|
|
|
TToken_string &row= f2.row(i);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
const TString80 codartalt(row.get(0));
|
|
|
|
|
const TString80 tipo(row.get());
|
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (codartalt.not_empty()) {
|
|
|
|
|
TRectype &reccor= _linee_rec2->row(i+1, TRUE);
|
1995-08-07 07:59:09 +00:00
|
|
|
|
reccor.put("CODARTALT", codartalt);
|
|
|
|
|
reccor.put("TIPO", tipo);
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
err= _linee_rec2->write();
|
1995-08-07 07:59:09 +00:00
|
|
|
|
}
|
|
|
|
|
return err;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
void TAnagrafica_magazzino::init_insert_mode(TMask &m) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
TSheet_field &f= (TSheet_field &)m.field(F_SHEET0);
|
|
|
|
|
if (f.items()==0) {
|
|
|
|
|
TToken_string &row= f.row(-1); // aggiunge una riga allo sheet
|
|
|
|
|
row.add("");
|
|
|
|
|
row.add("1"); // setta il secondo campo della riga aggiunta a 1
|
|
|
|
|
f.disable_cell(0, 1); // mette in sola lettura il secondo campo della prima riga (il fattore di conversione della prima U.M. <20> fisso a 1)
|
|
|
|
|
f.force_update(0); // aggiorna lo stato della riga 0
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::handle_sheet0(TMask_field &fld, KEY k) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (k==K_ENTER) {
|
|
|
|
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
1995-08-24 13:51:57 +00:00
|
|
|
|
if (f.items()>0) {
|
|
|
|
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocit<69>
|
|
|
|
|
for (int i= 0; i<f.items(); i++) {
|
|
|
|
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
|
|
|
|
|
error_box("Le unit<69> di misura devono essere diverse tra loro");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
real x(f.cell(i,1));
|
|
|
|
|
if (x.is_zero()) { // controlla che il fattore di conversione (secondo elemento) non sia 0
|
|
|
|
|
error_box("I fattori di conversione delle unit<69> di misura non possono valere 0");
|
|
|
|
|
break;
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
}
|
1995-08-24 13:51:57 +00:00
|
|
|
|
return (i==f.items());
|
|
|
|
|
} else return TRUE;
|
1995-08-11 11:05:08 +00:00
|
|
|
|
} else return TRUE;
|
|
|
|
|
}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::handle_sheet1(TMask_field &fld, KEY k) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (k==K_ENTER) {
|
|
|
|
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
1995-08-24 13:51:57 +00:00
|
|
|
|
if (f.items()>1) {
|
|
|
|
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocit<69>
|
|
|
|
|
for (int i= 0; i<f.items(); i++) {
|
|
|
|
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
|
|
|
|
|
error_box("I codici di lingua devono essere diversi tra loro");
|
|
|
|
|
break;
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
}
|
1995-08-24 13:51:57 +00:00
|
|
|
|
return (i==f.items());
|
|
|
|
|
} else return TRUE;
|
1995-08-11 11:05:08 +00:00
|
|
|
|
} else return TRUE;
|
|
|
|
|
}
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::handle_sheet2(TMask_field &fld, KEY k) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (k==K_ENTER) {
|
|
|
|
|
TSheet_field &f= (TSheet_field &)fld; // typecast del campo al suo sheet corrispondente
|
1995-08-24 13:51:57 +00:00
|
|
|
|
if (f.items()>0) {
|
|
|
|
|
TMask &m= fld.mask(); // prende la maschere d'origine del campo
|
|
|
|
|
TAssoc_array v; // istanzia l'hash table per il controllo di univocit<69>
|
|
|
|
|
v.add(m.get(F_CODART)); // aggiunge all'hash table il codice articolo originale
|
|
|
|
|
for (int i= 0; i<f.items(); i++) {
|
|
|
|
|
if (v.add(f.cell(i,0))) { // aggiunge all'hash table l'elemento 0 (primo) della riga corrente e controlla che non esista gi<67>
|
|
|
|
|
error_box("I codici alternativi devono essere diversi tra loro e dal codice dell'articolo");
|
|
|
|
|
break;
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
}
|
1995-08-24 13:51:57 +00:00
|
|
|
|
return (i==f.items());
|
|
|
|
|
} else return TRUE;
|
1995-08-11 11:05:08 +00:00
|
|
|
|
} else return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
1995-08-24 13:51:57 +00:00
|
|
|
|
bool TAnagrafica_magazzino::handle_sheet0_um(TMask_field &fld, KEY k) {
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (k==K_TAB) {
|
|
|
|
|
TMask &m= fld.mask(); // prende la maschera d'origine del campo (maschera dello sheet)
|
|
|
|
|
TString16 me(fld.get()); // prende il contenuto del campo corrente (unit<69> di misura corrente)
|
1995-08-24 13:51:57 +00:00
|
|
|
|
if (me.not_empty()) { // se il codice dell'unit<69> di misura <20> vuoto non viene fatto alcun calcolo
|
|
|
|
|
TSheet_field *f= m.get_sheet(); // prende lo sheet d'origine della maschera del campo
|
|
|
|
|
CHECK(f != NULL, "Il puntatore allo sheet <20> nullo");
|
|
|
|
|
if (f->selected() != 0) {
|
|
|
|
|
|
|
|
|
|
// ALGORITMO DI PRECALCOLO DEL RAPPORTO DELLE UNITA' DI MISURA NELLO SHEET
|
|
|
|
|
//
|
|
|
|
|
// SHEET:
|
|
|
|
|
// -----
|
|
|
|
|
// riga u.m. f.c.
|
|
|
|
|
// 1) KM 1 -> kilometri (you), riferiti al metro (your) con f.c. 1000 (your_fc)
|
|
|
|
|
// ... ... ...
|
|
|
|
|
// ...) MM X -> millimetri (me), riferiti al metro (my) con f.c. 0,001 (my_fc)
|
|
|
|
|
//
|
|
|
|
|
// se (your==my) allora X=(my_fc/your_fc) ...chiaro, no!? :-)
|
|
|
|
|
|
|
|
|
|
TTable t("%UMS");
|
|
|
|
|
real x(0.0); // fattore di conversione dell'unit<69> di misura corrente
|
|
|
|
|
const TString16 you(f->row(0).get(0)); // prende l'unit<69> di misura di rapporto (dalla prima linea dello sheet)
|
1995-08-11 11:05:08 +00:00
|
|
|
|
t.zero();
|
1995-08-24 13:51:57 +00:00
|
|
|
|
t.put("CODTAB", me);
|
1995-08-11 11:05:08 +00:00
|
|
|
|
if (t.read() == NOERR) {
|
1995-08-24 13:51:57 +00:00
|
|
|
|
TString16 my(t.get("S7")); // prende l'unit<69> di misura di riferimento dell'unit<69> di misura corrente
|
|
|
|
|
real my_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
|
|
|
|
t.zero();
|
|
|
|
|
t.put("CODTAB", you);
|
|
|
|
|
if (t.read() == NOERR) {
|
|
|
|
|
TString16 your(t.get("S7")); // prende l'unit<69> di misura di riferimento dell'unit<69> di misura di rapporto
|
|
|
|
|
real your_fc(t.get_real("R0")); // prende il suo fattore di conversione
|
|
|
|
|
if (your==my) {
|
|
|
|
|
x= my_fc/your_fc; // calcola il rapporto tra i fattori di conversione
|
|
|
|
|
x.round(5); // arrotonda il risultato a 5 decimali
|
|
|
|
|
}
|
|
|
|
|
}
|
1995-08-11 11:05:08 +00:00
|
|
|
|
}
|
1995-08-24 13:51:57 +00:00
|
|
|
|
m.set(FS_FCUM, x.stringa()); // il risultato viene scritto nel campo del fattore di conversione
|
1995-08-11 11:05:08 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ve2400(int argc, char* argv[]) {
|
1995-08-24 13:51:57 +00:00
|
|
|
|
TAnagrafica_magazzino a;
|
1995-08-07 07:59:09 +00:00
|
|
|
|
|
1995-08-11 11:05:08 +00:00
|
|
|
|
a.run(argc, argv, "Anagrafica di magazzino ");
|
1995-08-07 07:59:09 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|