Patch level : xx.282

Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Riportata la versione 01.05 patch 282


git-svn-id: svn://10.65.10.50/trunk@8080 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1999-04-22 15:31:16 +00:00
parent e80b2f7908
commit 2afc3025a0
34 changed files with 2850 additions and 474 deletions

BIN
mr/check.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

BIN
mr/darrowd.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowd2.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowdl.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowdr.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowl.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowl2.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowr.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowr2.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowu.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowu2.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowul.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

BIN
mr/darrowur.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 246 B

View File

@ -1,3 +1,5 @@
#define APPNAME eurocamp
#define QAPPNAME "eurocampo"
#include <default.url>
/* mr0 -0 Gestione tabelle */

BIN
mr/mr01.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -17,15 +17,13 @@ TTable_application& app() { return (TTable_application&)main_app(); }
class TMRP_mask : public TCalendar_mask
{
TMRP_calendar* _calendar;
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
bool init_calendar();
bool save_calendar() const;
bool remove_calendar() const;
bool remove_calendar();
TMRP_mask(const char* name, int num = 0);
virtual ~TMRP_mask();
@ -52,36 +50,28 @@ bool TMRP_mask::init_calendar()
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
if (_calendar == NULL)
if (calendar().linea() != lin || calendar().impianto() != imp)
{
_calendar = new TMRP_calendar(lin, imp);
if (cf.dirty())
{
TString str(80);
str = "Il calendario ";
switch (calendar().tipo())
{
case 'L': str << "della linea " << calendar().linea(); break;
case 'I': str << "del impianto " << calendar().impianto(); break;
default : str << "standard"; break;
}
str << " e' stato modificato:\nsi desidera salvare le modifiche effettuate?";
if (yesno_box(str))
calendar().rewrite();
}
calendar().set(lin, imp);
cf.set_dirty(FALSE);
changed = TRUE;
}
else
{
if (_calendar->linea() != lin || _calendar->impianto() != imp)
{
if (cf.dirty())
{
TString str(80);
str = "Il calendario ";
switch (_calendar->tipo())
{
case 'L': str << "della linea " << _calendar->linea(); break;
case 'I': str << "del impianto " << _calendar->impianto(); break;
default : str << "standard"; break;
}
str << " e' stato modificato:\nsi desidera salvare le modifiche effettuate?";
if (yesno_box(str))
_calendar->rewrite();
}
_calendar->set(lin, imp);
cf.set_dirty(FALSE);
changed = TRUE;
}
}
cf.set_calendar(_calendar, get_int(F_YEAR));
cf.set_calendar(&calendar(), get_int(F_YEAR));
return changed;
}
@ -93,31 +83,16 @@ bool TMRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
switch (o.dlg())
{
case F_IMPIANTO:
if (e == fe_close && o.empty())
{
TConfig ini(CONFIG_DITTA, "mr");
bool gestione_impianti = ini.get_bool("GESTIMPIANTI");
if (gestione_impianti)
return error_box("E' necessario specificare un impianto");
}
break;
case F_CODICE:
case F_TYPE:
if (e == fe_modify)
{
if (init_calendar())
{
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
cf.win().force_update();
}
}
init_calendar();
break;
case F_YEAR:
if (e == fe_init || e == fe_modify)
{
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
cf.set_calendar(_calendar, get_int(F_YEAR));
if (is_running())
cf.win().force_update();
update_calendar(F_CALENDAR, F_YEAR);
}
break;
default:
@ -129,43 +104,46 @@ bool TMRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
bool TMRP_mask::save_calendar() const
{
if (_calendar != NULL)
{
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
if (cf.dirty())
_calendar->rewrite();
}
TCalendar_field& cf = (TCalendar_field&)field(F_CALENDAR);
if (cf.dirty())
calendar().rewrite();
return TRUE;
}
bool TMRP_mask::remove_calendar() const
bool TMRP_mask::remove_calendar()
{
if (_calendar != NULL)
const TString& tn = app().get_tabname();
const char tipo = tn[0];
if (calendar().tipo() != tipo)
{
const TString& tn = app().get_tabname();
const char tipo = tn[0];
if (_calendar->tipo() != tipo)
{
if (tipo == 'L')
_calendar->set(get(F_CODICE), get(F_IMPIANTO));
else
_calendar->set(NULL, get(F_CODICE));
CHECK(_calendar->tipo() == tipo, "Tipo calendario incongruente");
}
_calendar->remove();
if (tipo == 'L')
calendar().set(get(F_CODICE), get(F_IMPIANTO));
else
calendar().set(NULL, get(F_CODICE));
CHECK(calendar().tipo() == tipo, "Tipo calendario incongruente");
}
calendar().remove();
return TRUE;
}
TMRP_mask::TMRP_mask(const char* name, int num)
: TCalendar_mask(name, num), _calendar(NULL)
: TCalendar_mask(name, num)
{
const TString& tn = app().get_tabname();
if (tn == "LNP")
{
TConfig ini(CONFIG_DITTA, "mr");
bool gestione_impianti = ini.get_bool("GESTIMPIANTI");
if (!gestione_impianti)
{
disable(F_IMPIANTO);
disable(F_DESCIMPIANTO);
}
}
}
TMRP_mask::~TMRP_mask()
{
if (_calendar)
delete _calendar;
}
///////////////////////////////////////////////////////////
@ -174,10 +152,13 @@ TMRP_mask::~TMRP_mask()
class TMRPtables : public TTable_application
{
void read_turni(TMask& m);
void write_turni(const TMask& m);
protected:
virtual TString& get_mask_name(TString& name) const;
virtual TMask* set_mask(TMask* m);
virtual int read(TMask& m);
virtual int write(const TMask& m);
virtual int rewrite(const TMask& m);
virtual bool remove();
@ -198,8 +179,12 @@ TMask* TMRPtables::set_mask(TMask* m)
{
if (m == NULL)
{
const TString& tn = get_tabname();
TString name; get_mask_name(name);
m = new TMRP_mask(name);
if (tn == "IMP" || tn == "LNP")
m = new TMRP_mask(name);
else
m = new TMask(name);
}
return TTable_application::set_mask(m);
}
@ -219,14 +204,58 @@ void TMRPtables::remove_calendar(const TMask& m)
const TString& tn = get_tabname();
if (tn == "IMP" || tn == "LNP")
{
const TMRP_mask& cm = (const TMRP_mask&)m;
TMRP_mask& cm = (TMRP_mask&)m;
cm.remove_calendar();
}
}
void TMRPtables::read_turni(TMask& m)
{
TUnita_produttiva up(file().curr());
for (int t=7; t >=0; t--)
{
const id= F_T1HINIZIO+t*5;
m.set(id,up.ora_inizio_turno(t));
m.set(id+1,up.min_inizio_turno(t));
m.set(id+2,up.ore_durata_turno(t));
m.set(id+3,up.min_durata_turno(t));
m.set(id+4,up.raw_numpers_turno(t));
}
}
void TMRPtables::write_turni(const TMask& m)
{
TUnita_produttiva & up=(TUnita_produttiva &)file().curr();
for (int t=0; t < 8; t++)
{
const id= F_T1HINIZIO+t*5;
up.set_inizio_turno(t, m.get_int(id), m.get_int(id+1));
up.set_durata_turno(t, m.get_int(id+2), m.get_int(id+3));
up.set_numpers_turno(t, m.get_int(id+4));
}
}
int TMRPtables::read(TMask& m)
{
const int err = TTable_application::read(m);
if (err == NOERR)
{
const TString& tn = get_tabname();
if (tn == "IMP"||tn == "LNP" )
{
read_turni(m);
}
}
return err;
}
int TMRPtables::write(const TMask& m)
{
const TString& tn = get_tabname();
if (tn == "IMP"||tn == "LNP" )
{
write_turni(m);
}
const int err = TTable_application::write(m);
if (err == NOERR)
save_calendar(m);
@ -235,6 +264,11 @@ int TMRPtables::write(const TMask& m)
int TMRPtables::rewrite(const TMask& m)
{
const TString& tn = get_tabname();
if (tn == "IMP"||tn == "LNP" )
{
write_turni(m);
}
const int err = TTable_application::rewrite(m);
if (err == NOERR)
save_calendar(m);

View File

@ -21,6 +21,15 @@ public:
bool TConf_MRP_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
case F_YEAR:
if (e == fe_init || e == fe_modify)
update_calendar(F_CALENDAR, F_YEAR);
break;
default:
break;
}
return TRUE;
}
@ -39,7 +48,6 @@ TConf_MRP_mask::~TConf_MRP_mask()
//////////////////////////////////////////////////
class TConf_MRP_application : public TConfig_application
{
TMRP_calendar* _calendar;
TConf_MRP_mask *_mask;
protected:
@ -53,71 +61,62 @@ public:
virtual bool user_create();
virtual bool user_destroy();
TConf_MRP_application() : TConfig_application(CONFIG_DITTA) { _mask = NULL; _calendar = NULL;}
TConf_MRP_application() : TConfig_application(CONFIG_DITTA) { _mask = NULL;}
virtual ~TConf_MRP_application() {}
};
bool TConf_MRP_application::preprocess_config (TMask& mask, TConfig& config)
bool TConf_MRP_application::preprocess_config (TMask& mask, TConfig& c)
{
TToken_string ora_inizio("",':');
TMRP_config& config=(TMRP_config&)c;
for (int i = 0; i < NTURNI; i++)
{
// Traduce le ore ed i minuti
const short h = F_T1HINIZIO+(i*4);
ora_inizio = config.get("TINIZIO","mr", i);
mask.set(h,ora_inizio.get(0)); // Hour...
mask.set(h+1,ora_inizio.get(1)); // Minutes...
const long tdurata = config.get_long("TDURATA", "mr", i);
const int hours = (int)tdurata / 60; // numero di ore
const int minutes = (int)tdurata % 60; // numero di minuti
mask.set(h+2, hours);
mask.set(h+3, minutes);
// inizio turno
mask.set(h , config.ora_inizio_turno(i)); // Hour...
mask.set(h+1, config.min_inizio_turno(i)); // Minutes...
// durata turno
mask.set(h+2, config.ore_durata_turno(i));
mask.set(h+3, config.min_durata_turno(i));
mask.set(F_T1NUMPERS+i,config.numpers_turno(i));
}
// Carica il calendario
TCalendar_field& cf = (TCalendar_field&)mask.field(F_CALENDAR);
cf.set_calendar(_calendar, mask.get_int(F_YEAR));
cf.win().force_update();
((TCalendar_mask&)mask).update_calendar(F_CALENDAR, F_YEAR);
return TRUE;
}
bool TConf_MRP_application::postprocess_config (TMask& mask, TConfig& config)
bool TConf_MRP_application::postprocess_config (TMask& mask, TConfig& c)
{
TToken_string ora_inizio("",':');
TMRP_config& config=(TMRP_config&)c;
for (int i = 0; i < NTURNI; i++)
{
// Traduce le ore ed i minuti
const short h = F_T1HINIZIO+(i*4);
ora_inizio.add(mask.get(h),0); // Hour...
ora_inizio.add(mask.get(h+1),1); // Minutes
config.set("TINIZIO",ora_inizio,"mr", TRUE, i);
const int durata_h = mask.get_int(h+2);
const int durata_m = mask.get_int(h+3);
const long minutes = durata_h * 60 + durata_m;
config.set("TDURATA", minutes, "mr", TRUE, i);
config.set_inizio_turno(i,mask.get_int(h) ,mask.get_int(h+1));
config.set_durata_turno(i,mask.get_int(h+2),mask.get_int(h+3));
// numero di persone
config.set_numpers_turno(i,mask.get_int(F_T1NUMPERS+i));
}
config.set("GESTIMPIANTI", mask.get_bool(F_GESTIMPIANTI) ? "X" : "", "mr", TRUE);
config.set("NTURNI", mask.get(F_NTURNI), "mr", TRUE);
config.set_gestimpianti(mask.get_bool(F_GESTIMPIANTI));
config.set_turni(mask.get_int(F_NTURNI));
TString paragraph(config.get_paragraph());
config.set_paragraph(""); // Akkrokkio per salvare il calendario...
_calendar->write();
((const TCalendar_mask&)mask).calendar().write();
config.set_paragraph(paragraph); // re-read
return TRUE;
}
bool TConf_MRP_application::user_create()
{
TConfig conf(CONFIG_DITTA);
conf.set( "EdMask", "mr0400a", "mr");
_calendar = new TMRP_calendar(); // Calendario standard
return TRUE;
}
bool TConf_MRP_application::user_destroy()
{
if (_calendar)
delete _calendar;
return TRUE;
}

View File

@ -35,10 +35,19 @@
#define F_T8MINIZIO 132
#define F_T8HDURATA 133
#define F_T8MDURATA 134
#define F_T1NUMPERS 135
#define F_T2NUMPERS 136
#define F_T3NUMPERS 137
#define F_T4NUMPERS 138
#define F_T5NUMPERS 139
#define F_T6NUMPERS 140
#define F_T7NUMPERS 141
#define F_T8NUMPERS 142
#define F_YEAR 201
#define F_CALENDAR 202
#define F_DEFAULT_IMP 203
#define F_DEFAULT_LNP 204
#endif

View File

@ -18,10 +18,37 @@ PAGE "Parametri ditta" -1 -1 65 15
BOOLEAN F_GESTIMPIANTI
BEGIN
PROMPT 2 2 "Gestione impianti "
FIELD GESTIMPIANTI
PROMPT 2 1 "Gestione impianti "
FIELD GESTIMPIANTI
MESSAGE TRUE SHOW,F_DEFAULT_IMP
MESSAGE FALSE HIDE,F_DEFAULT_IMP
END
STRING F_DEFAULT_LNP 5
BEGIN
PROMPT 2 2 "Linea di default "
FIELD DEFAULT_CODLIN
USE LNP
INPUT CODTAB F_DEFAULT_LNP
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_DEFAULT_LNP CODTAB
OUTPUT F_DEFAULT_IMP S6
END
STRING F_DEFAULT_IMP 5
BEGIN
PROMPT 42 2 "Impianto di default "
FIELD DEFAULT_CODIMP
USE IMP
INPUT CODTAB F_DEFAULT_IMP
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_DEFAULT_IMP CODTAB
END
LISTBOX F_NTURNI 3
BEGIN
PROMPT 2 4 "Numero turni "
@ -50,11 +77,12 @@ BEGIN
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MINIZIO 2
BEGIN
PROMPT 30 5 ""
PROMPT 30 5 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
@ -66,16 +94,22 @@ BEGIN
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MDURATA 2
BEGIN
PROMPT 47 5 ""
PROMPT 47 5 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T1NUMPERS 3
BEGIN
PROMPT 52 5 "Persone impiegate "
END
NUMBER F_T2HINIZIO 2
BEGIN
PROMPT 2 6 "Ora inizio secondo turno "
@ -87,7 +121,7 @@ END
NUMBER F_T2MINIZIO 2
BEGIN
PROMPT 30 6 ""
PROMPT 30 6 ":"
GROUP 2 12 13 14 15 16 17 18 28
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -105,13 +139,19 @@ END
NUMBER F_T2MDURATA 2
BEGIN
PROMPT 47 6 ""
PROMPT 47 6 ":"
GROUP 2 12 13 14 15 16 17 18 28
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T2NUMPERS 3
BEGIN
PROMPT 52 6 "Persone impiegate "
GROUP 2 12 13 14 15 16 17 18 28
END
NUMBER F_T3HINIZIO 2
BEGIN
PROMPT 2 7 "Ora inizio terzo turno "
@ -123,7 +163,7 @@ END
NUMBER F_T3MINIZIO 2
BEGIN
PROMPT 30 7 ""
PROMPT 30 7 ":"
GROUP 3 13 14 15 16 17 18 28 38
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -141,13 +181,19 @@ END
NUMBER F_T3MDURATA 2
BEGIN
PROMPT 47 7 ""
PROMPT 47 7 ":"
GROUP 3 13 14 15 16 17 18 28 38
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T3NUMPERS 3
BEGIN
PROMPT 52 7 "Persone impiegate "
GROUP 3 13 14 15 16 17 18 28 38
END
NUMBER F_T4HINIZIO 2
BEGIN
@ -160,7 +206,7 @@ END
NUMBER F_T4MINIZIO 2
BEGIN
PROMPT 30 8 ""
PROMPT 30 8 ":"
GROUP 4 14 15 16 17 18 28 38 48
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -178,13 +224,19 @@ END
NUMBER F_T4MDURATA 2
BEGIN
PROMPT 47 8 ""
PROMPT 47 8 ":"
GROUP 4 14 15 16 17 18 28 38 48
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4NUMPERS 3
BEGIN
PROMPT 52 8 "Persone impiegate "
GROUP 4 14 15 16 17 18 28 38 48
END
NUMBER F_T5HINIZIO 2
BEGIN
PROMPT 2 9 "Ora inizio quinto turno "
@ -196,7 +248,7 @@ END
NUMBER F_T5MINIZIO 2
BEGIN
PROMPT 30 9 ""
PROMPT 30 9 ":"
GROUP 5 15 16 17 18 28 38 48 58
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -214,13 +266,19 @@ END
NUMBER F_T5MDURATA 2
BEGIN
PROMPT 47 9 ""
PROMPT 47 9 ":"
GROUP 5 15 16 17 18 28 38 48 58
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5NUMPERS 3
BEGIN
PROMPT 52 9 "Persone impiegate "
GROUP 5 15 16 17 18 28 38 48 58
END
NUMBER F_T6HINIZIO 2
BEGIN
PROMPT 2 10 "Ora inizio sesto turno "
@ -232,7 +290,7 @@ END
NUMBER F_T6MINIZIO 2
BEGIN
PROMPT 30 10 ""
PROMPT 30 10 ":"
GROUP 6 16 17 18 28 38 48 58 68
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -250,13 +308,19 @@ END
NUMBER F_T6MDURATA 2
BEGIN
PROMPT 47 10 ""
PROMPT 47 10 ":"
GROUP 6 16 17 18 28 38 48 58 68
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6NUMPERS 3
BEGIN
PROMPT 52 10 "Persone impiegate "
GROUP 6 16 17 18 28 38 48 58 68
END
NUMBER F_T7HINIZIO 2
BEGIN
PROMPT 2 11 "Ora inizio settimo turno "
@ -268,7 +332,7 @@ END
NUMBER F_T7MINIZIO 2
BEGIN
PROMPT 30 11 ""
PROMPT 30 11 ":"
GROUP 7 17 18 28 38 48 58 68 78
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -286,13 +350,18 @@ END
NUMBER F_T7MDURATA 2
BEGIN
PROMPT 47 11 ""
PROMPT 47 11 ":"
GROUP 7 17 18 28 38 48 58 68 78
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7NUMPERS 3
BEGIN
PROMPT 52 11 "Persone impiegate "
GROUP 7 17 18 28 38 48 58 68 78
END
NUMBER F_T8HINIZIO 2
BEGIN
@ -305,7 +374,7 @@ END
NUMBER F_T8MINIZIO 2
BEGIN
PROMPT 30 12 ""
PROMPT 30 12 ":"
GROUP 8 18 28 38 48 58 68 78
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
@ -323,13 +392,20 @@ END
NUMBER F_T8MDURATA 2
BEGIN
PROMPT 47 12 ""
PROMPT 47 12 ":"
GROUP 8 18 28 38 48 58 68 78
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8NUMPERS 3
BEGIN
PROMPT 52 12 "Persone impiegate "
GROUP 8 18 28 38 48 58 68 78
END
ENDPAGE
PAGE "Calendario" -1 -1 65 15
@ -337,7 +413,7 @@ PAGE "Calendario" -1 -1 65 15
NUMBER F_YEAR 4
BEGIN
PROMPT 1 1 "Anno "
FLAGS "AD"
FLAGS "A"
END
CALENDAR F_CALENDAR -3 -1

View File

@ -1,5 +1,5 @@
#define APPNAME EURO_MR
#define QAPPNAME "EURO_MR"
#define APPNAME eurocamp
#define QAPPNAME "eurocampo"
#include <default.url>
/* mr1 -0 Generazione MRP Reports */

View File

@ -1,5 +1,5 @@
#define APPNAME EURO_MR
#define QAPPNAME "EURO_MR"
#define APPNAME eurocamp
#define QAPPNAME "eurocamp"
#include <default.url>
#include "mr2url.h"

File diff suppressed because it is too large Load Diff

View File

@ -94,6 +94,7 @@
// sheet articoli
#define LAST_BUCKET 13
#define F_CHECKLINE 100
#define F_TIPOCF_SHEET 101
#define F_CLIENTE 102
#define F_ARTICOLO 103

View File

@ -364,7 +364,7 @@ END
BOOL F_MSP_SORT_ORDER
BEGIN
PROMPT 2 3 "Inverti l'ordine"
PROMPT 2 3 "Ordine inverso"
MESSAGE TRUE PUSH, F_MSP_SORT
MESSAGE FALSE PUSH, F_MSP_SORT
END
@ -395,13 +395,13 @@ BEGIN
PROMPT 42 1 "Logica di proposta:"
END
LIST F_RECALC_TYPE2 35
LIST F_RECALC_TYPE2 34
BEGIN
FLAGS "D"
PROMPT 42 2 ""
ITEM "1|FirstFit "
ITEM "1_INF|FirstFit (capacita' infinite) "
ITEM "1_INFH|FirstFit (capacita' umane infinite)"
ITEM "1|FirstFit "
ITEM "1_INF|FirstFit (capacita' infinite) "
ITEM "1_INFH|FirstFit (capacita' umane infin.) "
ITEM "JIT|JustInTime "
ITEM "JIT_INF|JustInTime (capacita' infinite)"
ITEM "JIT_INFH|JustInTime (capacita umane infin.)"
@ -990,6 +990,7 @@ ENDMASK
PAGE "Articoli" -1 -1 80 18
LIST F_TIPOCF_SHEET 9
BEGIN
PROMPT 1 0 ""
@ -1405,7 +1406,7 @@ END
STRING F_MASTERCODE 1
BEGIN
PROMPT 22 15 ""
PROMPT 42 15 "MasterCode"
FLAGS "H"
END
@ -1424,12 +1425,19 @@ END*/
BUTTON DLG_OK 10 2
BEGIN
PROMPT -12 -1 ""
PROMPT -13 -1 ""
END
BUTTON F_CHECKLINE 10 2
BEGIN
PROMPT -23 -1 ""
PICTURE USER_BMP_CHECK
PICTURE BMP_LENTE
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -22 -1 ""
PROMPT -33 -1 ""
END
ENDPAGE

View File

@ -1,3 +1,7 @@
#define G_ARTICOLI 10
#define G_VINCOLI 20
#define G_MOVIMENTO 30
#define FC_RIGA 101
#define FC_BUCKET 102
#define FC_CODART 103
@ -17,6 +21,7 @@
#define FC_MOVEFILTER 116
#define FC_FINDFILTER 117
#define FC_MAXBUCK2CHECK 118
#define FC_ARTICLE2FIND 119
// MSP check mask

View File

@ -1,7 +1,5 @@
#include "mr2200b.h"
#include "mr2url.h"
#define G_ARTICOLI 10
#define G_VINCOLI 20
PAGE "Controllo planning" -1 -1 76 20
@ -214,14 +212,25 @@ LIST FC_FINDFILTER 28
BEGIN
PROMPT 30 13 ""
ITEM "8|Sotto stock"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "12|Anomalie"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "4|Eccessiva permanenza"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "14|Anomalie e nuove proposte"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "15|Anomalie e modifiche"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "13|Anomalie e modifiche manuali"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "2|Nuove proposte"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "3|Modifiche"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "1|Modifiche manuali"
MESSAGE HIDE,FC_ARTICLE2FIND|SHOW,FC_MAXBUCK2CHECK
ITEM "-1|Codice articolo"
MESSAGE SHOW,FC_ARTICLE2FIND|HIDE,FC_MAXBUCK2CHECK
END
NUMBER FC_MAXBUCK2CHECK 2
@ -229,44 +238,62 @@ BEGIN
PROMPT 62 13 "fino a "
END
STRING FC_ARTICLE2FIND 20
BEGIN
PROMPT 30 14 "Codice "
FLAGS "U"
USE LF_ANAMAG
INPUT CODART FC_ARTICLE2FIND
DISPLAY "Codice@20" CODART
DISPLAY "Descrizione@50" DESCR
OUTPUT FC_ARTICLE2FIND CODART
END
BUTTON FC_RIGHT_BAD 4 2
BEGIN
PROMPT 46 16 ""
PROMPT 46 17 ""
PICTURE USER_BMP_ARROWRIGHT_RED
GROUP G_MOVIMENTO
END
BUTTON FC_DOWN_BAD 4 2
BEGIN
PROMPT 40 18 ""
PICTURE USER_BMP_ARROWDOWN_RED
GROUP G_MOVIMENTO
END
BUTTON FC_LEFT_BAD 4 2
BEGIN
PROMPT 34 16 ""
PROMPT 34 17 ""
PICTURE USER_BMP_ARROWLEFT_RED
GROUP G_MOVIMENTO
END
BUTTON FC_UP_BAD 4 2
BEGIN
PROMPT 40 14 ""
PROMPT 40 16 ""
PICTURE USER_BMP_ARROWUP_RED
GROUP G_MOVIMENTO
END
BUTTON FC_UPLEFT 4 2
BEGIN
PROMPT 4 14 "<"
PICTURE USER_BMP_ARROWUPLEFT
GROUP G_MOVIMENTO
END
BUTTON FC_UP 4 2
BEGIN
PROMPT 10 14 "Su'"
PICTURE USER_BMP_ARROWUP
GROUP G_MOVIMENTO
END
BUTTON FC_UPRIGHT 4 2
BEGIN
PROMPT 16 14 ">"
PICTURE USER_BMP_ARROWUPRIGHT
GROUP G_MOVIMENTO
END
BUTTON FC_RIGHT 4 2
@ -279,18 +306,21 @@ BUTTON FC_DOWNRIGHT 4 2
BEGIN
PROMPT 16 18 ">"
PICTURE USER_BMP_ARROWDOWNRIGHT
GROUP G_MOVIMENTO
END
BUTTON FC_DOWN 4 2
BEGIN
PROMPT 10 18 "Giu'"
PICTURE USER_BMP_ARROWDOWN
GROUP G_MOVIMENTO
END
BUTTON FC_DOWNLEFT 4 2
BEGIN
PROMPT 4 18 "<"
PICTURE USER_BMP_ARROWDOWNLEFT
GROUP G_MOVIMENTO
END
BUTTON FC_LEFT 4 2

View File

@ -1,14 +1,207 @@
#include <config.h>
#include <prefix.h>
#include <progind.h>
#include <tabutil.h>
#include <xvtility.h>
#include <defmask.h>
#include <utility.h> // file functions
#include "mrplib.h"
///////////////////////////////////////////////////////////
// TMRP_time
//////////////////////////////////////////////////////////
TAssoc_array TMRP_time::_frate_indovino;
TMRP_calendar& TMRP_time::get_calendar(const char* codimp,const char* codlin)
{
TToken_string k;
k.add(codimp);
k.add(codlin);
TMRP_calendar* cal = (TMRP_calendar*)_frate_indovino.objptr(k);
if (cal == NULL)
{
if (_frate_indovino.items() > 16)
_frate_indovino.destroy(); // troppi calendari fanno male alla salute...
cal = new TMRP_calendar(codlin, codimp);
_frate_indovino.add(k, cal);
}
return *cal;
}
TMRP_calendar& TMRP_time::calendario()
{
return TMRP_time::get_calendar(_imp, _lin);
}
int TMRP_time::compare(const TSortable& s) const
{
const TMRP_time& t = (const TMRP_time&)s;
int res;
if (_date == t._date)
res = _hour - t._hour;
else
res = _date > t._date ? +1 : -1;
return res;
}
TMRP_time& TMRP_time::add_time(int days, long hours,bool macchina)
{
TMRP_calendar& cal = calendario();
if (days != 0)
{
cal.next_working_day(_date, days);
_hour = 0;
}
while (hours != 0)
{
real junk;
const int ore = macchina ? cal.add_oremacchina(junk, _date):cal.add_oreuomo(junk, _date);
const long tot = _hour + hours;
if (tot < 0 || tot > ore)
{
if (hours >= 0)
{
cal.next_working_day(_date);
hours -= ore - _hour;
_hour = 0;
}
else
{
cal.prev_working_day(_date);
hours += _hour;
_hour = (macchina ? cal.add_oremacchina(junk, _date) : cal.add_oreuomo(junk,_date));
}
}
else
{
_hour = int(tot);
hours = 0;
}
}
return *this;
}
void TMRP_time::set(const TDate& d, int h, const char* imp, const char* lin)
{
_date = d;
_hour = h;
_imp = imp;
_lin = lin;
}
TMRP_time::TMRP_time() : _hour(0)
{ }
TMRP_time::TMRP_time(const TDate& d, int h, const char* imp, const char* lin)
: _date(d), _hour(h), _imp(imp), _lin(lin)
{ }
///////////////////////////////////////////////////////////
// TMRP_array
///////////////////////////////////////////////////////////
TSortable* TMRP_array::add_obj(const TToken_string& key)
{
TSortable* obj = (TSortable*)_by_key.objptr(key);
if (obj == NULL)
{
obj = new_obj(key);
_by_key.add(key, obj);
_by_idx.add(obj);
}
return obj;
}
void TMRP_array::add(TMRP_array &a, bool force)
{
TString_array keys;
a._by_key.get_keys(keys);
for (int o=keys.items()-1; o >= 0; o--)
{
TString & key = keys.row(o);
TSortable* obj = (TSortable*)a._by_key.objptr(key)->dup();
TSortable* oldobj = (TSortable*)_by_key.objptr(key);
if (oldobj == NULL || force)
{
_by_key.add(key, obj);
_by_idx.add(obj);
}
}
}
TMRP_array & TMRP_array::operator=(const TMRP_array& a)
{
_by_key=a._by_key;
_by_idx=a._by_idx;
return *this;
}
TMRP_array::TMRP_array(const TMRP_array& a)
{
*this = TMRP_array::operator=(a);
}
// Ordina gli articoli secondo il noto algoritmo Fantini-Truffelli
// per array di oggetti su cui non e' definito un ordinamento completo
long TMRP_array::sort()
{
const long last = items()-1;
TProgind* pi = NULL;
if (last >= 16)
pi = new TProgind(last, "Ordinamento", FALSE, TRUE);
else
begin_wait();
for (long i = 0; i < last; i++)
{
if (pi) pi->addstatus(1);
TSortable* best = &find_obj(i);
bool swapped = TRUE;
while (swapped)
{
swapped = FALSE;
for (long j = i+1; j <= last; j++)
{
TSortable& other = find_obj(j);
if (other.compare(*best) > 0)
{
// swap(i, j);
// best = &other;
best = (TSortable*)_by_idx.remove(int(j), TRUE);
_by_idx.TArray::insert(best, int(i));
swapped = TRUE;
}
}
}
}
if (pi)
delete pi;
else
end_wait();
return last+1;
}
void TMRP_array::destroy()
{
_by_key.destroy();
_by_idx.destroy();
}
///////////////////////////////////////////////////////////
// TMRP_calendar
///////////////////////////////////////////////////////////
TString16 TMRP_calendar::_days;
TToken_string TMRP_calendar::_holidays;
void TMRP_calendar::init_default()
{
TConfig cfg(CONFIG_DITTA, "mr");
TMRP_config cfg;
// Inizializza i turni dei 5 giorni feriali a 1
// Inizializza i turni di sabato e domenica a 0
// Inizializza i turni dei giorni festivi a 0
@ -16,6 +209,29 @@ void TMRP_calendar::init_default()
// Inizializza la lista delle feste comandate tranne la Pasqua
_holidays = cfg.get("Feste", NULL, -1,
"01-01|06-01|25-04|01-05|15-08|01-11|08-12|25-12|26-12");
TUnita_produttiva * up=NULL;
if (_codlin.not_empty())
up=new TLinea_prod(_codlin);
else if (_codimp.not_empty())
up=new TImpianto(_codimp);
for (int t = 0; t < 8; t++)
{
if (up)
{
// turni di linea
_lungturno[t] = up->durata_turno(t);
_inizturno[t] = up->inizio_turno(t);
_persturno[t] = up->numpers_turno(t);
}
else
{
// turni di ditta
_lungturno[t] = cfg.durata_turno(t);
_inizturno[t] = cfg.inizio_turno(t);
_persturno[t] = cfg.numpers_turno(t);
}
}
}
bool TMRP_calendar::is_holiday(int g, int m) const
@ -287,6 +503,61 @@ int TMRP_calendar::set_turni(const TDate& data, int mini, int maxi)
return 0;
}
int TMRP_calendar::add_oreuomo(real & var,const TDate& date, bool max)
{
int minuti = 0L;
const int tm = max ? turni_max(date) : turni_min(date);
for (int t = tm-1; t >= 0; t--)
minuti += _lungturno[t] * _persturno[t] ;
var +=(minuti / 60 );
return minuti / 60 ;
}
int TMRP_calendar::add_oreuomo_max(real & var,const TDate& date)
{
return add_oreuomo(var, date,TRUE);
}
int TMRP_calendar::add_oremacchina(real & var,const TDate& date, bool max)
{
const int tm = max ? turni_max(date) : turni_min(date);
int minuti = 0L;
for (int t = tm-1; t >= 0; t--)
{
minuti += _lungturno[t];
const int start=_inizturno[t];
const int end=_inizturno[t]+_lungturno[t]-1;
for (int pt = t-1; pt >= 0; pt--)
{
int overlap ;
if (_inizturno[pt]<start)
{
// OK 100%
if (_inizturno[pt] + _lungturno[pt] > end)
overlap = end + 1 - start ;
else
overlap = _inizturno[pt] + _lungturno[pt] -1 - start;
}
else
{
if (end > _inizturno[pt]+_lungturno[pt])
overlap = _lungturno[pt];
else
overlap = end + 1 - _inizturno[pt] ;
}
if (overlap >= 0)
minuti -= overlap;
}
}
var +=(minuti / 60 );
return (minuti / 60 );
}
int TMRP_calendar::add_oremacchina_max(real & var,const TDate& date)
{
return add_oremacchina(var, date,TRUE);
}
int TMRP_calendar::write() const
{
if (!_codlin.blank())
@ -295,9 +566,13 @@ int TMRP_calendar::write() const
if (!_codimp.blank())
return write_cal('I');
TConfig cfg(CONFIG_DITTA, "mr");
cfg.set("Turni", _days);
cfg.set("Feste", _holidays);
if (_days.not_empty())
{
TConfig cfg(CONFIG_DITTA, "mr");
cfg.set("Turni", _days);
cfg.set("Feste", _holidays);
}
return NOERR;
}
@ -315,8 +590,8 @@ void TMRP_calendar::set(const char* linea, const char* impianto)
_exc_lin.destroy();
_exc_imp.destroy();
_codlin = linea;
_codimp = impianto;
_codlin = linea; _codlin.rpad(5);
_codimp = impianto; _codimp.rpad(5);
if (_codlin.not_empty())
{
@ -348,9 +623,22 @@ char TMRP_calendar::tipo() const
return 'S';
}
TDate& TMRP_calendar::next_working_day(TDate& work, int gap)
{
const int delta = gap >= 0 ? +1 : -1;
const int steps = gap >= 0 ? gap : -gap;
for (int i = 0; i < steps; i++)
{
do work += delta;
while (turni_min(work) <= 0);
}
return work;
}
TMRP_calendar::TMRP_calendar(const char* linea, const char* impianto)
{
set(linea, impianto);
init_default();
}
///////////////////////////////////////////////////////////
@ -391,17 +679,40 @@ void TCalendar_win::handler(WINDOW win, EVENT* ep)
const int last = TDate::last_day(month, _anno);
if (day >= 1 && day <= last)
{
TMask m("Turni del giorno", 1, 40, 7);
m.add_date(101, 0, "Data ", 1, 1, "D");
m.add_string(102, 0, "", 19, 1, 9, "D");
m.add_boolean(103, 0, "Festa", 31, 1);
m.add_list(104, 0, "Turni minimi ", 1, 3, 8, "", " |0|1|2|3|4|5|6", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni");
m.add_list(105, 0, "Turni massimi ", 1, 4, 8, "", " |0|1|2|3|4|5|6", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni");
m.add_number(106, 0, "= ", 31, 3, 1, "D");
m.add_number(107, 0, "= ", 31, 4, 1, "D");
const bool is_std=_calendario->tipo()=='S' ;
TString calname;
switch (_calendario->tipo())
{
case 'S':
calname="Calendario standard";
break;
case 'I':
calname="Calendario impianto ";
calname << '"'<< _calendario->impianto() << '"';
break;
case 'L':
calname="Calendario linea ";
calname << '"'<< _calendario->linea() << '"';
break;
}
TMask m(calname, 1, 40, 8);
m.add_static(DLG_NULL, 0, "Turni del giorno ", 1, 1);
m.add_date(101, 0, "", 1, 2, "D");
m.add_string(102, 0, "", 19, 2, 9, "D");
m.add_boolean(103, 0, "Festa", 31, 2, is_std ? "":"D");
if (is_std)
{
m.add_list(104, 0, "Turni minimi ", 1, 4, 8, "", "0|1|2|3|4|5|6|7|8", "Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
m.add_list(105, 0, "Turni massimi ", 1, 5, 8, "", "0|1|2|3|4|5|6|7|8", "Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
} else {
m.add_list(104, 0, "Turni minimi ", 1, 4, 8, "", " |0|1|2|3|4|5|6|7|8", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
m.add_list(105, 0, "Turni massimi ", 1, 5, 8, "", " |0|1|2|3|4|5|6|7|8", "Standard|Nessuno|1 turno|2 turni|3 turni|4 turni|5 turni|6 turni|7 turni|8 turni");
}
m.add_number(106, 0, "= ", 31, 4, 1, "D");
m.add_number(107, 0, "= ", 31, 5, 1, "D");
m.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
const TDate d(day, month, _anno);
const bool festa = _calendario->is_holiday(d);
m.set(101, d.string());
@ -448,12 +759,22 @@ void TCalendar_win::update()
{
TField_window::update();
const TDate today(TODAY);
const int this_year = today.year();
const int this_month = today.month();
const int this_day = today.day();
_pixmap = TRUE;
TString16 str;
str << _anno;
set_color(COLOR_BLACK, COLOR_WHITE);
printat(1, 1, str);
if (_anno == this_year)
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
stringat(1, 1, str);
if (_anno == this_year)
set_font();
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
@ -463,14 +784,24 @@ void TCalendar_win::update()
const int x = rct.right * (i+1) / 33;
line(x, 0, x, rct.bottom);
str.format("%2d", i);
printat(x+2, 0, str);
if (i == this_day)
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
stringat(x+2, 0, str);
if (i == this_day)
set_font();
}
for (j = 1; j <= 12; j++)
{
const int y = rct.bottom * j / 13;
line(0, y, rct.right, y);
str = itom(j); str.cut(3);
printat(1, y, str);
if (j == this_month)
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
stringat(1, y, str);
if (j == this_month)
set_font();
}
TMRP_calendar* defcal = NULL;
@ -489,13 +820,39 @@ void TCalendar_win::update()
{
const int x = rct.right * (i+1) / 33;
const TDate data(i, j, _anno);
set_color(cal->is_red(data) ? COLOR_RED : COLOR_BLACK, COLOR_WHITE);
int tmin, tmax;
cal->turni(data, tmin, tmax);
COLOR colore = COLOR_BLACK;
if (cal->is_red(data))
colore = COLOR_RED;
else
{
if (tmin != 0)
{
const TDate ieri = data-1L;
if (cal->turni_min(ieri) == 0)
{
const TDate domani = data+1L;
if (cal->turni_min(domani) == 0)
colore = COLOR_MAGENTA;
}
}
else
colore = COLOR_BLUE;
}
set_color(colore, COLOR_WHITE);
if (j == this_month && i == this_day)
set_font(XVT_FFN_FIXED, XVT_FS_BOLD);
str.format("%d", tmin);
printat(x+2, y, str);
stringat(x+2, y, str);
str.format("%2d", tmax);
printat(x+2, y+CHARY-3, str);
stringat(x+2, y+BASEY/2, str);
if (j == this_month && i == this_day)
set_font();
}
}
@ -536,12 +893,84 @@ void TCalendar_field::set_calendar(TMRP_calendar* cal, int year)
{
TCalendar_win& cw = (TCalendar_win&)win();
cw.set_calendar(cal, year);
cw.force_update();
}
///////////////////////////////////////////////////////////
// TCalendar_mask
///////////////////////////////////////////////////////////
/*
void TCalendar_mask::make_profile_name(TFilename& f) const
{
f =::firm2dir(-1); // Directory dati
f.add("config"); // Directory config
f.add(user()); // Directory config
if (!f.exist())
make_dir(f);
f.add(source_file()); // Nome Maschera
f.ext("ini"); // Estensione
}
void TCalendar_mask::save_profile()
{
TFilename prof;
make_profile_name(prof);
ofstream ini(prof);
for (int i = 0; i < fields(); i++)
{
TMask_field& f = fld(i);
if (f.is_loadable())
{
if (f.is_sheet())
{
TSheet_field& s = (TSheet_field&)f;
FOR_EACH_SHEET_ROW(s, r, row)
ini << f.dlg() << '[' << r << "] = " << *row << endl;
}
else
{
ini << f.dlg() << " = " << f.get() << endl;
}
}
}
}
void TCalendar_mask::load_profile()
{
TFilename prof;
make_profile_name(prof);
if (prof.exist())
{
TScanner ini(prof);
while (ini.good())
{
TString& line = ini.line();
int id, idx;
const int num = sscanf(line, "%d[%d] = ", &id, &idx);
if (num > 0 && id2pos(id) >= 0) // Riga valida
{
TMask_field& f = field(id);
if (f.is_loadable())
{
const int eq = line.find('=');
line.ltrim(eq+2); // Considera solo il valore del campo
if (num == 1)
f.set(line); else
if (num == 2 && f.is_sheet())
{
TSheet_field& sf = (TSheet_field&)f;
if (idx == 0) sf.destroy(); // Cancella tutto se inserisci la prima riga
sf.row(idx) = line;
}
}
}
}
}
}
*/
TMask_field* TCalendar_mask::parse_field(TScanner& scanner)
{
const TString& k = scanner.key();
@ -550,9 +979,405 @@ TMask_field* TCalendar_mask::parse_field(TScanner& scanner)
return TAutomask::parse_field(scanner);
}
void TCalendar_mask::update_calendar(short calendar, short year, short plant, short line)
{
TCalendar_field& cf = (TCalendar_field&)field(calendar);
TString16 linea = line > 0 ? get(line) : EMPTY_STRING;
TString16 impianto = plant > 0 ? get(plant) : EMPTY_STRING;
int anno = year >= 0 ? get_int(year) : 0;
_calendar.set(linea, impianto);
cf.set_calendar(&_calendar, anno);
}
TCalendar_mask::TCalendar_mask(const char* name, int num)
{
read_mask(name, num, 0);
set_handlers();
}
//***********************************
//
//***********************************
static TMRP_config *_confditta=NULL;
TMRP_config & mrp_config()
{
if (_confditta==NULL)
_confditta= new TMRP_config();
return *_confditta;
}
//***********************************
int TMRP_config::ora_inizio_turno(int i)
{
return (int)inizio_turno(i) / 60; // numero di minuti
}
int TMRP_config::min_inizio_turno(int i)
{
return (int)inizio_turno(i) % 60; // numero di minuti
}
int TMRP_config::inizio_turno(int i)
{
return get_int("TINIZIO","mr", i);
}
int TMRP_config::ore_durata_turno(int i)
{
return (int)durata_turno(i) / 60;
}
int TMRP_config::min_durata_turno(int i)
{
return (int)durata_turno(i) % 60;
}
int TMRP_config::durata_turno(int i)
{
return get_int("TDURATA", "mr", i);
}
int TMRP_config::numpers_turno(int t)
{
return get_int("NUMPERS", "mr", t);
}
void TMRP_config::set_inizio_turno(int i,int ore, int minuti)
{
const int time = ore * 60 + minuti;
set_inizio_turno(i,time);
}
void TMRP_config::set_durata_turno(int i,int ore, int minuti)
{
const int time = ore * 60 + minuti;
set_durata_turno(i,time);
}
void TMRP_config::set_inizio_turno(int i,int time)
{
set("TINIZIO", time, "mr", TRUE, i);
}
void TMRP_config::set_durata_turno(int i,int time)
{
set("TDURATA", time, "mr", TRUE, i);
}
//********
TImpianto * get_impianto(const char * codice)
{
static TImpianto *buffer=NULL;
if (!buffer)
buffer= new TImpianto();
*buffer=cache().get("IMP",codice);
return buffer;
}
TLinea_prod* get_linea(const char * codice)
{
static TLinea_prod *buffer=NULL;
if (!buffer)
buffer= new TLinea_prod();
*buffer=cache().get("LNP",codice);
return buffer;
}
const char *TUnita_produttiva::erre1(int t)
{
static char _erre[4] = "R0";
_erre[1]='0'+char(t);
CHECK(t>=0 && t<8, "Errore nel numero di turno");
return _erre;
}
const char *TUnita_produttiva::erre2(int t)
{
static char _erre[4] = "R10";
_erre[2]='0'+char(t);
CHECK(t>=0 && t<8, "Errore nel numero di turno");
return _erre;
}
#define M_INIZIO 10000L
#define M_DURATA 1L
//#define M_PERSON 0.05
// inizio turno
int TUnita_produttiva::inizio_turno(int t)
{
real r=get_real(erre1(t));
r=r/M_INIZIO;
const int i=(int)r.round().integer();
return i;
}
void TUnita_produttiva::set_inizio_turno(int t,int time)
{
real r(time);
r = r * M_INIZIO;
r = r + long(TUnita_produttiva::durata_turno(t))*M_DURATA;
put(erre1(t), r);
}
// durata turno
int TUnita_produttiva::durata_turno(int t)
{
real r=get_real(erre1(t));
r=r-real(long(TUnita_produttiva::inizio_turno(t))*M_INIZIO);
r=r/M_DURATA;
const int i=(int)r.round().integer();
return i;
}
void TUnita_produttiva::set_durata_turno(int t,int time)
{
real r(TUnita_produttiva::inizio_turno(t));
r = r * M_INIZIO;
r = r + long(time)*M_DURATA;
put(erre1(t), r);
}
// persone per turno
int TUnita_produttiva::raw_numpers_turno(int t)
{
real r(get_real(erre2(t)));
return (int)r.round().integer();
}
int TUnita_produttiva::numpers_turno(int t)
{
int val;
if (!TUnita_produttiva::personale_dedicato())
val=raw_numpers_turno(t);
if (val==0)
val=get_int("I1");
else
val= mrp_config().numpers_turno(t);
return val;
/*int r=raw_numpers_turno(t);
if (r==0)
return numpers_turno();
else
return r;*/
}
void TUnita_produttiva::set_numpers_turno(int t, int pers)
{
real r(pers);
put(erre2(t), r);
}
void TUnita_produttiva::set_inizio_turno(int t,int ore, int minuti)
{
const int time=ore*60+minuti;
set_inizio_turno(t,time);
}
void TUnita_produttiva::set_durata_turno(int t,int ore, int minuti)
{
const int time=ore*60+minuti;
set_durata_turno(t,time);
}
int TUnita_produttiva::ora_inizio_turno(int t)
{
return inizio_turno(t)/60;
}
int TUnita_produttiva::min_inizio_turno(int t)
{
return inizio_turno(t)%60;
}
int TUnita_produttiva::ore_durata_turno(int t)
{
return durata_turno(t)/60;
}
int TUnita_produttiva::min_durata_turno(int t)
{
return durata_turno(t)%60;
}
const char * TUnita_produttiva::codmag() const
{
TString16 s(codmagdep());
return s.sub(0,3);
}
const char * TUnita_produttiva::coddep() const
{
TString16 s(codmagdep());
return s.sub(3,5);
}
// ***************************
// ****** TImpianto
TImpianto::TImpianto(const char* cod)
: TUnita_produttiva()
{
settab("IMP");
if (cod && *cod)
{
TTable t("IMP");
t.put("CODTAB",cod);
t.read();
}
}
// ***************************
// ****** TLinea_prod
TRectype & TUnita_produttiva::operator=(const TRectype & rec)
{
TRectype ::operator=(rec);
return *this ;
}
TRectype & TImpianto::operator=(const TRectype & rec)
{
TUnita_produttiva::operator=(rec);
return *this ;
}
TRectype & TLinea_prod::operator=(const TRectype & rec)
{
TUnita_produttiva::operator=(rec);
return *this ;
}
const char * TLinea_prod::codimp() const
{
static char _codimp[5];
return strcpy(_codimp, get("S6"));
}
TLinea_prod::TLinea_prod(const char* cod )
: TUnita_produttiva()
{
settab("LNP");
if (cod && *cod)
{
TTable t("LNP");
put("CODTAB",cod);
read(t);
}
}
const char * TLinea_prod::codmagdep() const
{
const char * cod=TUnita_produttiva::codmagdep() ;
if (*cod==0)
{
TImpianto* imp=((TLinea_prod *)this)->get_impianto();
if (imp)
return imp->codmagdep();
}
return cod;
}
int TLinea_prod::inizio_turno(int t)
{
int val;
if (TUnita_produttiva::num_turni()!=0)
val=TUnita_produttiva::inizio_turno(t);
else
{
TImpianto* imp=get_impianto();
if (imp && imp->num_turni()!=0)
val=imp->inizio_turno(t);
else
val=mrp_config().inizio_turno(t);
}
return val;
}
int TLinea_prod::durata_turno(int t)
{
int val;
if (TUnita_produttiva::num_turni()!=0)
val=TUnita_produttiva::durata_turno(t);
else
{
TImpianto* imp=get_impianto();
if (imp && imp->num_turni()!=0)
val=imp->durata_turno(t);
else
val=mrp_config().durata_turno(t);
}
return val;
}
int TLinea_prod::numpers_turno(int t)
{
int val;
if (TUnita_produttiva::num_turni()!=0)
val=TUnita_produttiva::numpers_turno(t);
else
{
TImpianto* imp=get_impianto();
if (imp)
val=imp->numpers_turno(t);
}
return val;
}
int TLinea_prod::num_turni()
{
int val=TUnita_produttiva::num_turni();
if (val==0)
{
TImpianto* imp=get_impianto();
if (imp)
val=imp->num_turni();
if (val==0)
val=mrp_config().num_turni();
}
return val;
}
TImpianto * TLinea_prod::get_impianto() const
{
const char * imp = codimp();
if (imp && *imp)
return ::get_impianto(imp);
else
return NULL;
}
static TCodgiac_livelli *_livelli=NULL;
TCodgiac_livelli &livelli_giac()
{
if (_livelli==NULL)
_livelli=new TCodgiac_livelli();
return *_livelli;
}
void find_price(const TString &tipocv, const TString &codcv, const TString &codcatven,
const char *tipocf, long codcf,
const char * codice, const real & qta, real & price)
{
static TCondizione_vendita *_condv =NULL;
bool retry=TRUE;
if (_condv == NULL)
_condv = new TCondizione_vendita(new TConfig (CONFIG_DITTA));
switch (tipocv[0])
{
case 'C':
if (codcf == 0L && _condv->config_ditta().get_bool("GESCONCC", "ve"))
break; // necessario il codice del cli/for
case 'O':
case 'L':
_condv -> put_condv(tipocv,codcv,codcatven,
tipocf, codcf ? format("%ld",codcf) : "");
if (_condv->ricerca(codice, qta))
{
price = _condv->get_prezzo();
retry=FALSE;
}
break;
}
if (retry)
{
TToken_string key(codice);
key.add(1);
price = cache().get(LF_UMART,key).get_real(UMART_PREZZO);
}
}

View File

@ -5,10 +5,64 @@
#include <automask.h>
#endif
#ifndef __ASSOC_H
#include <assoc.h>
#endif
#ifndef __DBLIB_H
#include "../db/dblib.h"
#endif
#ifndef __MGLIB_H
#include "../mg/mglib.h"
#endif
class TMRP_array : public TObject
{
TAssoc_array _by_key;
TPointer_array _by_idx;
void swap(long i, long j) { _by_idx.swap(int(i), int(j)); }
protected:
TToken_string _key; // Token string di lavoro
virtual TSortable* new_obj(const TToken_string& key) const pure;
TSortable* add_obj(const TToken_string& key);
TSortable* find_obj(const TToken_string& key) const
{ return (TSortable*)_by_key.objptr(key); }
TSortable& find_obj(long n) const
{ return (TSortable&)_by_idx[int(n)]; }
public:
long items() const { return _by_key.items(); }
void destroy();
long sort();
void add(TMRP_array &a, bool force=FALSE);
// I metodi add(), find() e operator[] devono essere dichiarati
// dalle classi derivate e ritornare i tipi giusti tramite cast
// TSortable* add(const char* key, bool create)
// { return (TSortable*)add_obj(key); }
// TSortable* find(const char* key) const
// { return (TSortable*)find_obj(key); }
// TSortable& operator[](long index) const
// { return (TSortable&)*find_obj(index); }
TMRP_array & operator=(const TMRP_array& a);
TMRP_array() { }
TMRP_array(const TMRP_array& a);
virtual ~TMRP_array() { }
};
class TMRP_calendar : public TObject
{
static TString16 _days;
static TToken_string _holidays;
int _inizturno[8];
int _lungturno[8];
int _persturno[8];
TAssoc_array _exc_imp, _exc_lin;
TString16 _codimp, _codlin;
@ -26,6 +80,17 @@ public:
int turni_max(const TDate& date)
{ int mini, maxi; turni(date, mini, maxi); return maxi; }
// ore minime e massime ad una certa data
int add_oremacchina(real & var,const TDate& date, bool max=FALSE);
int add_oremacchina_max(real & var,const TDate& date);
int add_oreuomo(real & var,const TDate& date, bool max=FALSE);
int add_oreuomo_max(real & var,const TDate& date);
TDate& next_working_day(TDate& from, int gap = 1);
TDate& prev_working_day(TDate& from, int gap = 1)
{ return next_working_day(from, -gap); }
int set_turni(const TDate& date, int mini, int maxi);
@ -53,7 +118,7 @@ class TCalendar_field : public TWindowed_field
protected: // TWindowed_field
virtual TField_window* create_window(int x, int y, int dx, int dy,
WINDOW parent);
public:
public:
void set_calendar(TMRP_calendar* cal, int year = 0);
TCalendar_field(TMask* m) : TWindowed_field(m) { }
@ -62,12 +127,173 @@ public:
class TCalendar_mask : public TAutomask
{
TMRP_calendar _calendar;
protected:
virtual TMask_field* parse_field(TScanner& scanner);
// void make_profile_name(TFilename& f) const;
public:
TMRP_calendar& calendar() { return _calendar; }
// void save_profile();
// void load_profile();
const TMRP_calendar& calendar() const { return _calendar; }
void update_calendar(short calendar, short year, short plant = 0, short line = 0);
TCalendar_mask(const char* name, int num = 0);
virtual ~TCalendar_mask() {};
};
class TMRP_time : public TSortable
{
static TAssoc_array _frate_indovino;
TString16 _imp, _lin;
TDate _date;
int _hour;
TMRP_calendar& calendario();
void copy(const TMRP_time& t) { set(t._date, t._hour, t._imp, t._lin); }
public:
static TMRP_calendar& get_calendar(const char* codimp=NULL,const char* ccodlin=NULL);
virtual int compare(const TSortable& s) const;
TMRP_time& add_time(int days, long hours = 0, bool macchina=TRUE);
TMRP_time& sub_time(int days, long hours = 0, bool macchina=TRUE) { return add_time(-days, -hours,macchina); }
void set(const TDate& d, int h, const char* imp, const char* lin);
TMRP_time& operator=(const TMRP_time& t) { copy(t); return *this; }
const TDate& date() const { return _date; }
TMRP_time();
TMRP_time(const TDate& d, int h, const char* imp, const char* lin);
TMRP_time(const TMRP_time& t) { copy(t); }
virtual ~TMRP_time() { }
};
class TMRP_config : public TConfig
{
protected:
void set_inizio_turno(int t,int time);
void set_durata_turno(int t,int time);
public:
// **
void set_inizio_turno(int t,int ore, int minuti);
void set_durata_turno(int t,int ore, int minuti);
void set_numpers_turno(int t, int pers) {set("NUMPERS", pers, "mr", TRUE, t);}
void set_turni(int n) {set("NTURNI", n, "mr", TRUE);}
void set_gestimpianti(bool gi) {set("GESTIMPIANTI", gi ? "X" : "", "mr", TRUE); }
// **
int inizio_turno(int t);
int durata_turno(int t);
// **
int ora_inizio_turno(int t);
int min_inizio_turno(int t);
int ore_durata_turno(int t);
int min_durata_turno(int t);
int num_turni() {return get_int("NTURNI", "mr");}
int numpers_turno(int t);
bool gestimpianti() {return get_bool("GESTIMPIANTI","mr"); }
TMRP_config() : TConfig(CONFIG_DITTA,"mr") {}
virtual ~TMRP_config() {}
};
class TUnita_produttiva : public TRectype
{
const char *erre1(int t); // campo durata e inizio turno
const char *erre2(int t); // numero persone
protected:
void set_inizio_turno(int t,int time);
void set_durata_turno(int t,int time);
public:
const char * codice() const {return get("CODTAB");}
const char * descr() const {return get("S0");}
int raw_numpers_turno(int t) ;
// **
void set_inizio_turno(int t,int ore, int minuti);
void set_durata_turno(int t,int ore, int minuti);
void set_numpers_turno(int t, int pers);
virtual int num_turni() {return get_int("I0");}
virtual int inizio_turno(int t);
virtual int durata_turno(int t);
// **
int ora_inizio_turno(int t);
int min_inizio_turno(int t);
int ore_durata_turno(int t);
int min_durata_turno(int t);
// numero di persone sul turno
virtual int numpers_turno(int t) ;
// flag di personale dedicato
virtual bool personale_dedicato() const { return get_bool("B0"); }
virtual const char * codmagdep() const { return get("S7"); }
const char * codmag() const ;
const char * coddep() const ;
virtual TRectype & operator=(const TRectype& rec);
TUnita_produttiva(const TUnita_produttiva& rec) : TRectype (rec){}
TUnita_produttiva(const TRectype& rec) : TRectype (rec){}
TUnita_produttiva() : TRectype (LF_TAB){}
virtual ~TUnita_produttiva() { }
};
class TImpianto : public TUnita_produttiva
{
protected:
TObject* dup() const { return new TImpianto(*this); }
public:
virtual TRectype & operator=(const TRectype& rec);
// **
TImpianto(const char* cod = "") ;
TImpianto(const TRectype& rec) : TUnita_produttiva (rec) {}
TImpianto(const TImpianto& rec) : TUnita_produttiva (rec){}
virtual ~TImpianto() { }
};
class TLinea_prod : public TUnita_produttiva
{
protected:
TObject* dup() const { return new TLinea_prod(*this); }
public:
TImpianto * get_impianto() const;
// **
const char * codimp() const;
virtual const char * codmagdep() const ;
bool to_check() const {return !get_bool("B9");} //
int check_level() const {return !get_bool("I2");} //
// **
virtual int num_turni() ;
virtual int inizio_turno(int t);
virtual int durata_turno(int t);
virtual int numpers_turno(int t) ;
virtual TRectype & operator=(const TRectype& rec);
TLinea_prod(const char* cod = "") ;
TLinea_prod(const TRectype& rec) : TUnita_produttiva (rec) {}
TLinea_prod(const TLinea_prod& rec) : TUnita_produttiva (rec){}
virtual ~TLinea_prod() { }
};
TImpianto * get_impianto(const char * codice);
TLinea_prod* get_linea(const char * codice);
TCodgiac_livelli &livelli_giac();
void find_price(const TString &tipocv, const TString &codcv, const TString &codcatven,
const char * tipocf, long codcf, const char * codice, const real & qta, real & price);
#endif

View File

@ -4,4 +4,61 @@
#define F_CODICE 101
#define F_DESC 102
#define F_TURNI 103
#define F_PERSONE 104
#define F_PERSONESPEC 105
#define H_PERSONESPEC 106
#define F_T1HINIZIO 110
#define F_T1MINIZIO 111
#define F_T1HDURATA 112
#define F_T1MDURATA 113
#define F_T1NUMPERS 114
#define F_T2HINIZIO 115
#define F_T2MINIZIO 116
#define F_T2HDURATA 117
#define F_T2MDURATA 118
#define F_T2NUMPERS 119
#define F_T3HINIZIO 120
#define F_T3MINIZIO 121
#define F_T3HDURATA 122
#define F_T3MDURATA 123
#define F_T3NUMPERS 124
#define F_T4HINIZIO 125
#define F_T4MINIZIO 126
#define F_T4HDURATA 127
#define F_T4MDURATA 128
#define F_T4NUMPERS 129
#define F_T5HINIZIO 130
#define F_T5MINIZIO 131
#define F_T5HDURATA 132
#define F_T5MDURATA 133
#define F_T5NUMPERS 134
#define F_T6HINIZIO 135
#define F_T6MINIZIO 136
#define F_T6HDURATA 137
#define F_T6MDURATA 138
#define F_T6NUMPERS 139
#define F_T7HINIZIO 140
#define F_T7MINIZIO 141
#define F_T7HDURATA 142
#define F_T7MDURATA 143
#define F_T7NUMPERS 144
#define F_T8HINIZIO 145
#define F_T8MINIZIO 146
#define F_T8HDURATA 147
#define F_T8MDURATA 148
#define F_T8NUMPERS 149
#define F_CODMAG 160
#define F_DESMAG 161
#define F_CODDEP 162
#define F_DESDEP 163
#define F_YEAR 201
#define F_TYPE 202
#define F_CALENDAR 203
#endif

View File

@ -1,6 +1,26 @@
#include "mrtblnp.h"
#include "mrtbimp.h"
TOOLBAR "" 0 19 80 3
// gruppi turni "Minori o uguali a X"
#define GL1 10
#define GL2 11
#define GL3 12
#define GL4 13
#define GL5 14
#define GL6 15
#define GL7 16
#define GL8 17
// gruppi turni "Maggiori di X"
#define GM1 20
#define GM2 21
#define GM3 22
#define GM4 23
#define GM5 24
#define GM6 25
#define GM7 26
#define GM8 27
#define GPERS 30
TOOLBAR "" 0 -2 -1 -1
#include <toolbar.h>
ENDPAGE
@ -39,7 +59,458 @@ BEGIN
OUTPUT F_CODICE CODTAB
CHECKTYPE REQUIRED
END
LISTBOX F_TURNI 3
BEGIN
PROMPT 2 7 "Numero turni "
ITEM "0|"
MESSAGE CLEAR,GL1@|CLEAR,GM1@
ITEM "1|1"
MESSAGE CLEAR,GM1@|ENABLE,GL1@
ITEM "2|2"
MESSAGE CLEAR,GM2@|ENABLE,GL2@
ITEM "3|3"
MESSAGE CLEAR,GM3@|ENABLE,GL3@
ITEM "4|4"
MESSAGE CLEAR,GM4@|ENABLE,GL4@
ITEM "5|5"
MESSAGE CLEAR,GM5@|ENABLE,GL5@
ITEM "6|6"
MESSAGE CLEAR,GM6@|ENABLE,GL6@
ITEM "7|7"
MESSAGE CLEAR,GM7@|ENABLE,GL7@
ITEM "8|8"
MESSAGE CLEAR,GM8@|ENABLE,GL8@
FIELD I0
END
BOOL F_PERSONESPEC
BEGIN
PROMPT 40 7 "Utilizza personale proprio"
FIELD B0
MESSAGE TRUE SHOW,GPERS@|ENABLE,F_PERSONE
MESSAGE FALSE HIDE,GPERS@
END
NUMBER F_PERSONE 3
BEGIN
PROMPT 26 8 "Persone su un turno "
FIELD I1
GROUP GPERS
END
TEXT DLG_NULL
BEGIN
PROMPT 2 8 "Ora inizio"
END
TEXT DLG_NULL
BEGIN
PROMPT 16 8 "Durata "
END
NUMBER F_T1HINIZIO 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 9 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MINIZIO 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 9 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T1HDURATA 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 9 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MDURATA 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 9 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T1NUMPERS 3
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 9 ""
END
NUMBER F_T2HINIZIO 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 10 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T2MINIZIO 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 10 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T2HDURATA 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 10 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T2MDURATA 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 10 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T2NUMPERS 3
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 10 ""
END
NUMBER F_T3HINIZIO 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 11 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T3MINIZIO 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 11 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T3HDURATA 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 11 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T3MDURATA 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 11 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T3NUMPERS 3
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 11 ""
END
NUMBER F_T4HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 12 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 12 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 12 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 12 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 12 ""
END
NUMBER F_T5HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 3 13 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 6 13 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 16 13 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 19 13 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 13 ""
END
NUMBER F_T6HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 3 14 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 6 14 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 16 14 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 19 14 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8 GPERS
PROMPT 46 14 ""
END
NUMBER F_T7HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
PROMPT 3 15 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
PROMPT 6 15 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7HDURATA 2
BEGIN
PROMPT 16 15 ""
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7MDURATA 2
BEGIN
PROMPT 19 15 ":"
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7NUMPERS 3
BEGIN
PROMPT 46 15 ""
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8 GPERS
END
NUMBER F_T8HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 3 16 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 6 16 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 16 16 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 19 16 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8 GPERS
PROMPT 46 16 ""
END
STRING F_CODMAG 3
BEGIN
FLAGS "U"
PROMPT 2 18 "Magazzino "
FIELD S7[1,3]
USE MAG SELECT CODTAB[4,5]=""
INPUT CODTAB F_CODMAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_CODDEP CODTAB[4,5]
OUTPUT F_DESMAG S0
CHECKTYPE NORMAL
MESSAGE EMPTY RESET,F_CODDEP|RESET,F_DESDEP
MESSAGE ENABLE,F_CODDEP|ENABLE,F_DESDEP
END
STRING F_DESMAG 50
BEGIN
FLAGS "U"
PROMPT 20 18 ""
USE MAG KEY 2
INPUT S0 F_DESMAG
COPY DISPLAY F_CODMAG
COPY OUTPUT F_CODMAG
END
STRING F_CODDEP 2
BEGIN
FLAGS "U"
PROMPT 2 19 "Deposito "
FIELD S7[4,5]
USE MAG // SELECT CODTAB[4,5]!=""
INPUT CODTAB[1,3] F_CODMAG
INPUT CODTAB[4,5] F_CODDEP
DISPLAY "Cod.Mag." CODTAB[1,3]
DISPLAY "Cod.Dep" CODTAB[4,5]
DISPLAY "Descrizione@50" S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_CODDEP CODTAB[4,5]
OUTPUT F_DESDEP S0
CHECKTYPE NORMAL
MESSAGE EMPTY RESET,F_DESDEP
END
STRING F_DESDEP 50
BEGIN
FLAGS "U"
PROMPT 20 19 ""
USE MAG KEY 2
INPUT S0 F_DESDEP
COPY DISPLAY F_CODDEP
COPY OUTPUT F_CODDEP
CHECKTYPE NORMAL
END
ENDPAGE
PAGE "Calendario" -1 -1 65 15

View File

@ -6,7 +6,58 @@
#define F_IMPIANTO 103
#define F_DESCIMPIANTO 104
#define F_PERSONE 105
#define F_PERSONESPEC 105
#define F_PERSONE 106
#define F_NO_CRP 107
#define F_CRP_LEVEL 108
#define F_TURNI 109
#define F_T1HINIZIO 110
#define F_T1MINIZIO 111
#define F_T1HDURATA 112
#define F_T1MDURATA 113
#define F_T1NUMPERS 114
#define F_T2HINIZIO 115
#define F_T2MINIZIO 116
#define F_T2HDURATA 117
#define F_T2MDURATA 118
#define F_T2NUMPERS 119
#define F_T3HINIZIO 120
#define F_T3MINIZIO 121
#define F_T3HDURATA 122
#define F_T3MDURATA 123
#define F_T3NUMPERS 124
#define F_T4HINIZIO 125
#define F_T4MINIZIO 126
#define F_T4HDURATA 127
#define F_T4MDURATA 128
#define F_T4NUMPERS 129
#define F_T5HINIZIO 130
#define F_T5MINIZIO 131
#define F_T5HDURATA 132
#define F_T5MDURATA 133
#define F_T5NUMPERS 134
#define F_T6HINIZIO 135
#define F_T6MINIZIO 136
#define F_T6HDURATA 137
#define F_T6MDURATA 138
#define F_T6NUMPERS 139
#define F_T7HINIZIO 140
#define F_T7MINIZIO 141
#define F_T7HDURATA 142
#define F_T7MDURATA 143
#define F_T7NUMPERS 144
#define F_T8HINIZIO 145
#define F_T8MINIZIO 146
#define F_T8HDURATA 147
#define F_T8MDURATA 148
#define F_T8NUMPERS 149
#define F_CODMAG 160
#define F_DESMAG 161
#define F_CODDEP 162
#define F_DESDEP 163
#define F_YEAR 201
#define F_TYPE 202

View File

@ -1,10 +1,30 @@
#include "mrtblnp.h"
TOOLBAR "" 0 19 80 3
// gruppi turni "Minori o uguali a X"
#define GL1 10
#define GL2 11
#define GL3 12
#define GL4 13
#define GL5 14
#define GL6 15
#define GL7 16
#define GL8 17
// gruppi turni "Maggiori di X"
#define GM1 20
#define GM2 21
#define GM3 22
#define GM4 23
#define GM5 24
#define GM6 25
#define GM7 26
#define GM8 27
#define GPERS 30
TOOLBAR "" 0 -2 -1 -1
#include <toolbar.h>
ENDPAGE
PAGE "Linee di produzione" -1 -1 65 15
PAGE "Linee di produzione" -1 -1 80 20
GROUPBOX DLG_NULL 78 5
BEGIN
@ -50,9 +70,9 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT F_IMPIANTO CODTAB
OUTPUT F_DESCIMPIANTO S0
CHECKTYPE NORMAL
CHECKTYPE REQUIRED
FIELD S6
WARNING "Impianto assente"
WARNING "E' necessario specificare un impianto"
END
STRING F_DESCIMPIANTO 50
@ -67,18 +87,473 @@ BEGIN
WARNING "Impianto assente"
END
GROUPBOX DLG_NULL 78 4
BOOL F_NO_CRP
BEGIN
PROMPT 1 6 ""
END
PROMPT 2 6 "Escludi dal Capacity Review "
FIELD B9
MESSAGE FALSE HIDE,F_CRP_LEVEL
MESSAGE TRUE SHOW,F_CRP_LEVEL
END
LIST F_CRP_LEVEL 25
BEGIN
PROMPT 40 6 "Livello "
ITEM "0|Master Schedule"
FIELD I2
END
LISTBOX F_TURNI 3
BEGIN
PROMPT 2 7 "Numero turni "
ITEM "0|"
MESSAGE CLEAR,GL1@|CLEAR,GM1@
ITEM "1|1"
MESSAGE CLEAR,GM1@|ENABLE,GL1@
ITEM "2|2"
MESSAGE CLEAR,GM2@|ENABLE,GL2@
ITEM "3|3"
MESSAGE CLEAR,GM3@|ENABLE,GL3@
ITEM "4|4"
MESSAGE CLEAR,GM4@|ENABLE,GL4@
ITEM "5|5"
MESSAGE CLEAR,GM5@|ENABLE,GL5@
ITEM "6|6"
MESSAGE CLEAR,GM6@|ENABLE,GL6@
ITEM "7|7"
MESSAGE CLEAR,GM7@|ENABLE,GL7@
ITEM "8|8"
MESSAGE CLEAR,GM8@|ENABLE,GL8@
FIELD I0
END
BOOL F_PERSONESPEC
BEGIN
PROMPT 40 7 "Utilizza personale specializzato"
FIELD B0
MESSAGE TRUE SHOW,GPERS@|ENABLE,F_PERSONE
MESSAGE FALSE HIDE,GPERS@
END
NUMBER F_PERSONE 3
BEGIN
PROMPT 2 7 "Persone "
FLAGS "U"
FIELD I0
PROMPT 26 8 "Persone su un turno "
FIELD I1
GROUP GPERS
END
TEXT DLG_NULL
BEGIN
PROMPT 2 8 "Ora inizio"
END
TEXT DLG_NULL
BEGIN
PROMPT 16 8 "Durata "
END
NUMBER F_T1HINIZIO 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 9 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MINIZIO 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 9 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T1HDURATA 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 9 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T1MDURATA 2
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 9 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T1NUMPERS 3
BEGIN
GROUP GL1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 9 ""
END
NUMBER F_T2HINIZIO 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 10 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T2MINIZIO 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 10 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T2HDURATA 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 10 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T2MDURATA 2
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 10 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T2NUMPERS 3
BEGIN
GROUP GM1 GL2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 10 ""
END
NUMBER F_T3HINIZIO 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 11 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T3MINIZIO 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 11 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T3HDURATA 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 11 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
CHECKTYPE REQUIRED
END
NUMBER F_T3MDURATA 2
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 11 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T3NUMPERS 3
BEGIN
GROUP GM1 GM2 GL3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 11 ""
END
NUMBER F_T4HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 3 12 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 6 12 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 16 12 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8
PROMPT 19 12 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T4NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GL4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 12 ""
END
NUMBER F_T5HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 3 13 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 6 13 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 16 13 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8
PROMPT 19 13 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T5NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GL5 GL6 GL7 GL8 GPERS
PROMPT 46 13 ""
END
NUMBER F_T6HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 3 14 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 6 14 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 16 14 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8
PROMPT 19 14 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T6NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GL6 GL7 GL8 GPERS
PROMPT 46 14 ""
END
NUMBER F_T7HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
PROMPT 3 15 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
PROMPT 6 15 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7HDURATA 2
BEGIN
PROMPT 16 15 ""
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7MDURATA 2
BEGIN
PROMPT 19 15 ":"
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T7NUMPERS 3
BEGIN
PROMPT 46 15 ""
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GL7 GL8 GPERS
END
NUMBER F_T8HINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 3 16 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8MINIZIO 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 6 16 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8HDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 16 16 ""
NUM_EXPR {(#THIS_FIELD <= 23)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8MDURATA 2
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8
PROMPT 19 16 ":"
NUM_EXPR {(#THIS_FIELD <= 59)}
WARNING "Ora non valida"
FLAGS "Z"
END
NUMBER F_T8NUMPERS 3
BEGIN
GROUP GM1 GM2 GM3 GM4 GM5 GM6 GM7 GL8 GPERS
PROMPT 46 16 ""
END
STRING F_CODMAG 3
BEGIN
FLAGS "U"
PROMPT 2 18 "Magazzino "
FIELD S7[1,3]
USE MAG SELECT CODTAB[4,5]=""
INPUT CODTAB F_CODMAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_CODDEP CODTAB[4,5]
OUTPUT F_DESMAG S0
CHECKTYPE NORMAL
MESSAGE EMPTY RESET,F_CODDEP|RESET,F_DESDEP
MESSAGE ENABLE,F_CODDEP|ENABLE,F_DESDEP
END
STRING F_DESMAG 50
BEGIN
FLAGS "U"
PROMPT 20 18 ""
USE MAG KEY 2
INPUT S0 F_DESMAG
COPY DISPLAY F_CODMAG
COPY OUTPUT F_CODMAG
END
STRING F_CODDEP 2
BEGIN
FLAGS "U"
PROMPT 2 19 "Deposito "
FIELD S7[4,5]
USE MAG // SELECT CODTAB[4,5]!=""
INPUT CODTAB[1,3] F_CODMAG
INPUT CODTAB[4,5] F_CODDEP
DISPLAY "Cod.Mag." CODTAB[1,3]
DISPLAY "Cod.Dep" CODTAB[4,5]
DISPLAY "Descrizione@50" S0
OUTPUT F_CODMAG CODTAB[1,3]
OUTPUT F_CODDEP CODTAB[4,5]
OUTPUT F_DESDEP S0
CHECKTYPE NORMAL
MESSAGE EMPTY RESET,F_DESDEP
END
STRING F_DESDEP 50
BEGIN
FLAGS "U"
PROMPT 20 19 ""
USE MAG KEY 2
INPUT S0 F_DESDEP
COPY DISPLAY F_CODDEP
COPY OUTPUT F_CODDEP
CHECKTYPE NORMAL
END
ENDPAGE
PAGE "Calendario" -1 -1 65 15

BIN
mr/selordf.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

BIN
mr/selordp.bmp Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B