Patch level :10.0 lavanderina

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :allineamento lavori al 29 agosto


git-svn-id: svn://10.65.10.50/trunk@17133 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2008-08-29 08:51:51 +00:00
parent 8f71fa564f
commit fd378c9686
13 changed files with 890 additions and 79 deletions

View File

@ -1,3 +1,3 @@
166
0
$lvconsplan|0|0|57|0|Planning consegne|||
$lvclifogiac|0|0|702|0|Giacenze per cliente|||

View File

@ -1,14 +1,55 @@
166
9
CODPLAN|3|6|0|Codice del planning
DTCONS|5|8|0|Data consegna
GGCONS|2|1|0|Giorno consegna
CODAUT|1|2|0|Autista
CODMEZ|1|2|0|Mezzo
CODITI|2|3|0|Codice itinerario
UTULAGG|1|16|0|Utente che aggiornato per ultimo il planning
DTULAGG|5|8|0|Data ultimo aggionamento del planning
ORULAGG|10|6|0|Ora ultimo aggiornamento del planning
50
TIPOCF|1|1|0|Tipo <C>liente <F>ornitore
CODCF|3|6|0|Codice Cliente Fornitore
INDSPED|2|3|0|Codice indirizzo di spedizione
CODMAG|1|5|0|Codice magazzino e deposito
CODART|1|20|0|Codice articolo
LIVELLO|1|15|0|Livello di magazzino
NRIGA|2|3|0|-numero riga per sheet anagrafica-
ANNOES|1|4|0|Codice esercizio
DATARIF|5|8|0|Data di riferimento
UBICAZ|1|12|0|Codice ubicazione
RIM|4|15|5|Rimanenze iniziali
VALRIM|4|18|3|Valore rimanenze iniziali
ACQ|4|15|5|Acquistato
VALACQ|4|18|3|Valore acquistato
ENT|4|15|5|Entrato
VALENT|4|18|3|Valore entrato
VEN|4|15|5|Venduto
VALVEN|4|18|3|Valore venduto
USC|4|15|5|Uscito
VALUSC|4|18|3|Valore uscito
GIAC|4|15|5|Giacenza
ORDF|4|15|5|Ordinato fornitori
VALORDF|4|18|3|Valore ordinato fornitori
ORDC|4|15|5|Ordinato clienti
VALORDC|4|18|3|Valore ordinato clienti
INCL|4|15|5|In conto lavorazione
ACL|4|15|5|A conto lavorazione
PRODCOMP|4|15|5|Componenti in produzione
PRODFIN|4|15|5|Assemblati in produzione
NLABEL|4|10|0|Numero etichette da stampare
NDIST|4|15|5|Distinte da scaricare
SCARTI|4|15|5|Scarti
VALSCARTI|4|15|5|Valore scarti
LIVRIOR|4|15|3|Livello di riordino
LOTTORIOR|4|15|3|Lotto minimo di riordino
LOTTOIRIOR|4|15|3|Lotto incrementale di riordino
GIORNIRIOR|4|5|1|Numero di giorni di riordino
SCORTAMIN|4|15|5|Scorta minima
USER1|4|15|5|campo definito dall'utente
USERVAL1|4|18|3|valore
USER2|4|15|5|campo definito dall'utente
USERVAL2|4|18|3|valore
USER3|4|15|5|campo definito dall'utente
USERVAL3|4|18|3|valore
USER4|4|15|5|campo definito dall'utente
USERVAL4|4|18|3|valore
USER5|4|15|5|campo definito dall'utente
USERVAL5|4|18|3|valore
USER6|4|15|5|campo definito dall'utente
USERVAL6|4|18|3|valore
2
CODPLAN|
DTCONS+CODPLAN|X
TIPOCF+CODCF+INDSPED+ANNOES+CODART+NRIGA|
TIPOCF+CODCF+INDSPED+ANNOES+CODMAG+CODART+LIVELLO|X

View File

@ -85,7 +85,7 @@ int TPeriodi_sosp::controlli(const TMask& mask)
bool TPeriodi_sosp::user_create()
{
_rel = new TRelation(LF_LVTIPISOSP);
_rel = new TRelation(LF_LVPERISOSP);
_mask = new TPeriodi_sosp_mask;
return true;
}

View File

@ -7,6 +7,8 @@ int main(int argc, char** argv)
const int r = (argc > 1) ? argv[1][1] - '0' : 0;
switch (r)
{
case 0: lv2100(argc, argv); break; //generazione automatica del planning
case 1: lv2200(argc, argv); break; //manipolazione e stampa del planning
default: lv2100(argc, argv); break; //generazione automatica del planning
}
return 0;

View File

@ -2,5 +2,6 @@
#define __LV2_H
int lv2100(int argc, char* argv[]);
int lv2200(int argc, char* argv[]);
#endif // __LV2_H

View File

@ -46,23 +46,6 @@ bool TGenera_planning_mask::on_field_event(TOperable_field& o, TField_event e, l
}
return true;
}
/*
/////////////////////////////////////////////////////////////
// TGenera_planning recordset
/////////////////////////////////////////////////////////////
class TGenera_planning_recordset : public TCSV_recordset
{
public:
TEsporta_ps0713_recordset();
};
TGenera_planning_recordset::TEsporta_ps0713_recordset()
: TCSV_recordset("CSV(\"\t\")")
{
}
*/
///////////////////////////////////////////////////////////
// TGenera_planning applicazione
@ -273,7 +256,7 @@ void TGenera_planning_app::elabora_passaggio(const TDate& dadata, const TDate& a
if (dadatacont > adata || (adatacont.ok() && adatacont < dadata))
return; // Inutile proseguire
//cache sulla tabella frequenze consegne
//cache sulla tabella frequenze consegne
TString8 keycoditi;
keycoditi << coditi;
const TRectype& iti = cache().get("&ITI",keycoditi);

View File

@ -1,8 +1,5 @@
// generazione automatica planning
// definizione campi per maschera lv2100a
#define F_CODDITTA 101
#define F_RAGSOC 102
#define F_DADATA 103
#define F_ADATA 104
#define F_CODITI 105

View File

@ -4,51 +4,30 @@ TOOLBAR "" 0 0 0 2
#include <elabar.h>
ENDPAGE
PAGE "Generazione planning" -1 -1 78 20
GROUPBOX DLG_NULL 76 3
BEGIN
PROMPT 1 1 "@bDitta corrente"
END
NUMBER F_CODDITTA 5
BEGIN
PROMPT 2 2 "Codice "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA F_CODDITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
PAGE "Generazione planning" -1 -1 76 20
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 4 "@bDati per la generazione del planning"
PROMPT 1 1 "@bDati per la generazione del planning"
END
DATE F_DADATA
BEGIN
PROMPT 2 5 "Genera il planning dal "
PROMPT 2 2 "Genera il planning dal "
FIELD DADATA
CHECKTYPE REQUIRED
END
DATE F_ADATA
BEGIN
PROMPT 45 5 "al "
PROMPT 45 2 "al "
FIELD ADATA
CHECKTYPE REQUIRED
END
STRING F_CODITI 3
BEGIN
PROMPT 2 6 "Itinerario "
PROMPT 2 3 "Itinerario "
FLAGS "UZ"
USE &ITI
INPUT CODTAB F_CODITI
@ -60,7 +39,7 @@ END
STRING F_DESCRITI 50
BEGIN
PROMPT 23 6 ""
PROMPT 23 3 ""
USE &ITI KEY 2
INPUT S0 F_DESCRITI
DISPLAY "Descrizione@50" S0
@ -70,7 +49,7 @@ END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 7 "Cliente "
PROMPT 2 4 "Cliente "
FLAGS "U"
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
@ -83,7 +62,7 @@ END
STRING F_RAGSOCCLI 50
BEGIN
PROMPT 23 7 ""
PROMPT 23 4 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI

441
lv/lv2200.cpp Executable file
View File

@ -0,0 +1,441 @@
#include <applicat.h>
#include <automask.h>
#include <progind.h>
#include <recarray.h>
#include <recset.h>
#include <relation.h>
#include "lvlib.h"
#include "lvrconsplan.h"
#include "lvpasplan.h"
#include "lv2.h"
#include "lv2200a.h"
///////////////////////////////////////////////////////////
// TGestione_planning maschera
///////////////////////////////////////////////////////////
class TGestione_planning_mask : public TAutomask
{
TToken_string _rigaoriginale;
private:
void fill_sheet();
bool changed(TToken_string& oldrow, TToken_string& newrow, short id);
int codice_riga(const TDate& data);
void aggiorna_plan();
bool cancella_riga();
void nuova_riga();
public:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
TGestione_planning_mask (const char* name) : TAutomask(name) {}
};
//questa funzione si occupa di riempire lo sheet dinamicamente in base ai parametri che l'utente decide
void TGestione_planning_mask::fill_sheet()
{
if (field(F_DADATA).empty() || field(F_ADATA).empty())
return;
TString query = "USE LVRCONSPLAN KEY 2";
const long coditi = get_long(F_CODITI);
const long codcli = get_long(F_CODCF);
if (coditi || codcli)
{
query << " SELECT ";
if (codcli > 0)
query << "(CODCF=" << codcli << ')';
if (coditi > 0)
{
if (codcli > 0)
query << "&&";
query << "(CODITI=" << coditi << ')';
}
}
query << "\n";
query << "FROM DTCONS=" << get(F_DADATA) << "\n";
query << "TO DTCONS=" << get(F_ADATA) << "\n";
TISAM_recordset plan(query);
TProgind pi(plan.items(), TR("Elaborazione dati planning in corso..."), true, true);
TSheet_field& sheet = sfield(F_PLAN);
TMask& sheetmask = sheet.sheet_mask();
TRelation& rel = *plan.cursor()->relation(); //accesso al file delle righe
sheet.destroy();
for (bool ok = plan.move_first(); ok; ok = plan.move_next())
{
if (!pi.addstatus(1))
break;
TToken_string& row = sheet.row(-1); //crea una nuova riga dello sheet
//scandisco nella maschera tutti i campi che hanno un field
FOR_EACH_MASK_FIELD(sheetmask,i,f)
{
const TFieldref* fr = f->field(); //leggo il valore dalla relation
if (fr != NULL)
row.add(fr->read(rel),sheet.cid2index(f->dlg())); //metto il valore letto nella posizione corretta nella TToken_string
}
sheet.check_row(sheet.items()-1); //fa fare alla maschera la decodifica dei codici e aggiorna la TToken_string
}
sheet.force_update();
}
//funzione che confronta due due campi di una TToken_string e restitusce true se sono diversi
bool TGestione_planning_mask::changed(TToken_string& oldrow, TToken_string& newrow, short id)
{
const TSheet_field& sheet = sfield(F_PLAN);
const int i = sheet.cid2index(id);
const TFixed_string oldval(oldrow.get(i));
const TFixed_string newval(newrow.get(i));
return oldval != newval;
}
//questa funzione trova il primo codiceriga libero per un certo codplan
int TGestione_planning_mask::codice_riga(const TDate& data)
{
const long codplan = data.date2ansi();
//per ora memorizzo zero
int ptriga = 0;
//se esiste almeno una riga, memorizzo il codriga dell'ultima
TISAM_recordset rplan("USE LVRCONSPLAN KEY 1\nFROM CODPLAN=#CODPLAN\nTO CODPLAN=#CODPLAN");
rplan.set_var("#CODPLAN",TVariant(codplan));
if (rplan.move_last())
ptriga = rplan.get(LVRCONSPLAN_CODRIGA).as_int();
ptriga++; //incremento il codriga interessato
return ptriga;
}
//questa funzione gestisce l'aggiornamanto dinamico dello sheet
void TGestione_planning_mask::aggiorna_plan()
{
//bool che indicano se effettivamente devo fare una rewrite dei dati...
//...se ho modificato un autista e/o un mezzo, questo va modificato su tutte...
//...le righe di quel planning
bool dorewrite = false;
bool updatecar = false;
//variabili che mi premettono di lavorare sullo sheet
TSheet_field& sheet = sfield(F_PLAN);
TToken_string rigamodificata = sheet.row(sheet.selected()); //metto in una stringa la riga che sto analizzando
//instanzio un isam file sulla tabella dei planning
TLocalisamfile rplan(LF_LVRCONSPLAN);
//creo il codplan
const int posdata = sheet.cid2index(F_S_DATA);
TDate data = _rigaoriginale.get(posdata);
long codplan = data.date2ansi();
const long codplanor = codplan ;
//creo il codriga
const int posriga = sheet.cid2index(F_S_RIGA);
int codriga = _rigaoriginale.get_int(posriga);
//se esiste almeno una riga per quel planning, leggo il record corrispondente
if (codriga > 0)
{
rplan.zero();
rplan.put(LVRCONSPLAN_CODPLAN,codplanor);
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
rplan.read();
}
//se ho modificato la data di una riga esistente, o se se ho creata una nuova, allora
if (changed(_rigaoriginale,rigamodificata,F_S_DATA) || codriga <= 0)
{
//se esiste almeno una riga, elimino quella che voglio modifcare
if (codriga > 0)
rplan.remove();
//creo i nuovi codplan e codriga
data = rigamodificata.get(posdata);
codplan = data.date2ansi();
codriga = codice_riga(data);
//creo la nuova riga
rplan.zero();
rplan.put(LVRCONSPLAN_CODPLAN,codplan);
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
rplan.put(LVRCONSPLAN_CODPLANOR,codplanor);
//scrivo la nuova riga
rplan.write();
//modifico anche la TToken_string così da evitare errori al momento della rewrite
rigamodificata.add(data,posdata);
rigamodificata.add(codriga,posriga);
dorewrite = true;
}
//se viene modificato un periodo di sospensione e/o una modalità di passaggio...
//...e/o un codice itinerario su una riga, devo fare la rewrite di quella riga
//ATTENZIONE: la modifica di un itinerario implica anche la modifica di autista e mezzo...
//...mettendo quelli previsti per il nuovo itinerario
if (changed(_rigaoriginale,rigamodificata,F_S_PERSOSPVAR) || changed(_rigaoriginale,rigamodificata,F_S_MODPASS) || changed(_rigaoriginale,rigamodificata,F_S_ITI))
dorewrite = true;
//se viene modificato un autista e/o un mezzo devo fare la rewrite di quella riga...
//... e riaggiornare anche tutte le righe di quell'itinerario in quella data con i nuovi parametri
if (changed(_rigaoriginale,rigamodificata,F_S_CODAUT) || changed(_rigaoriginale,rigamodificata,F_S_CODMEZ))
dorewrite = updatecar = true;
//se devo fare una rewrite:
if (dorewrite)
{
TMask& m = sheet.sheet_mask();
//per ogni campo della maschera che ha un field, ci scrivo dentro il nuovo valore
FOR_EACH_MASK_FIELD(m,i,f)
{
const TFieldref* rf = f->field();
if (rf != NULL)
{
const char* val = rigamodificata.get(sheet.cid2index(f->dlg()));
rf->write(val,rplan.curr());
}
}
rplan.curr().zero(LVRCONSPLAN_CONSSTD);
lv_set_update_info(rplan.curr());
rplan.rewrite();
}
//se ho modificato autista e/o mezzo, allora:
if (updatecar)
{
//recupero dai dati modificati i nuovi valori di autista e mezzo
const int codaut = rigamodificata.get_int(sheet.cid2index(F_S_CODAUT));
const TString8 codmez= rigamodificata.get(sheet.cid2index(F_S_CODMEZ));
//recupero il codice itinerario su cui sto facendo la modifica
const long coditi = rigamodificata.get_long(sheet.cid2index(F_S_ITI));
//instanzio un recordset sui planning, filtrando sui coditi
TISAM_recordset recrplan("USE LVRCONSPLAN SELECT CODITI=#CODITI\nFROM CODPLAN=#CODPLAN\nTO CODPLAN=#CODPLAN");
recrplan.set_var("#CODPLAN",codplan);
recrplan.set_var("#CODITI",coditi);
TRectype& rec = recrplan.cursor()->curr();
for (bool ok = recrplan.move_first(); ok; ok = recrplan.move_next())
{
//cambio autisyta e mezzo
rec.put(LVRCONSPLAN_CODAUT,codaut);
rec.put(LVRCONSPLAN_CODMEZ,codmez);
rec.zero(LVRCONSPLAN_CONSSTD);
lv_set_update_info(rec);
//faccio l'effettiva rewrite
rec.rewrite(rplan);
}
}
}
//questa funzione elimina una riga dal planning
bool TGestione_planning_mask::cancella_riga()
{
int err=NOERR;
//variabile che mi permette di lavorare sullo sheet
TSheet_field& sheet = sfield(F_PLAN);
//instanzio un isam file sulla tabella dei planning
TLocalisamfile rplan(LF_LVRCONSPLAN);
//creo il codplan
const int posdata = sheet.cid2index(F_S_DATA);
TDate data = _rigaoriginale.get(posdata);
long codplan = data.date2ansi();
//creo il codriga
const int posriga = sheet.cid2index(F_S_RIGA);
int codriga = _rigaoriginale.get_int(posriga);
//se esiste almeno una riga per quel planning, leggo il record corrispondente
if (codriga > 0)
{
rplan.zero();
rplan.put(LVRCONSPLAN_CODPLAN,codplan);
rplan.put(LVRCONSPLAN_CODRIGA,codriga);
err = rplan.remove();
}
return err == NOERR;
}
//questa funzione genera una nuova riga di planning e propone sullo sheet i campi che può riempire
void TGestione_planning_mask::nuova_riga()
{
TSheet_field& sheet = sfield(F_PLAN);
TToken_string& rigamodificata = sheet.row(sheet.selected());
rigamodificata.add(get_date(F_DADATA),sheet.cid2index(F_S_DATA));
if (!field(F_CODCF).empty())
{
rigamodificata.add(get_long(F_CODCF),sheet.cid2index(F_S_CODCF));
rigamodificata.add(get(F_RAGSOCCLI),sheet.cid2index(F_S_RAGSOCCLI));
}
if (!field(F_CODITI).empty())
rigamodificata.add(get_long(F_CODITI),sheet.cid2index(F_S_ITI));
sheet.check_row(sheet.selected()); //fa fare alla maschera la decodifica dei codici e aggiorna la TToken_string
return;
}
//questa funzione gestisce i vari eenti che si verificano sui campi della maschera
bool TGestione_planning_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
switch (o.dlg())
{
//se quiesti campi vengono riempiti, allora riempi lo sheet opportunamante
case F_DADATA:
case F_ADATA:
case F_CODITI:
case F_CODCF:
if (e == fe_modify)
{
fill_sheet();
}
break;
//analisi delle operazioni sullo sheet
case F_PLAN:
switch (e)
{
case se_query_modify: //se viene selezionata una riga, la salvo in una variabile globale
{
TSheet_field& sheet = (TSheet_field&)o;
_rigaoriginale = sheet.row(sheet.selected());
}
break;
case se_notify_modify: //se avviene una modifica, aggiorna il planning e lo sheet
aggiorna_plan();
fill_sheet();
break;
case se_notify_del: //se viene eliminata una riga dallo sheet, cancellala anche dal file
cancella_riga();
break;
case se_query_add: //se si decide di fare una modifica sullo sheet, ma i campi data della testata sono vuoti, rifiutati
if (field(F_DADATA).empty())
return false;
break;
case se_notify_add: //se si aggiunge una riga nuova allo sheet, svuota la var globale e aggiungi la riga anche al file
_rigaoriginale = "";
nuova_riga();
break;
default: break;
}
break;
//quando riempio il campo data dello sheet, decodifica il giorno di consegna
case F_S_DATA:
if (e == fe_modify || e == fe_init)
{
const TDate dtcons = o.get();
const TString16 ggcons = itow(dtcons.wday());
o.mask().set(F_S_GIORNO,ggcons);
}
break;
//quando riempio il campo itinerario dell sheet, recupero i dati di autista e mezzo da &ITI
case F_S_ITI:
if (e == fe_modify && !o.empty())
{
TMask& msk = o.mask();
const TRectype& iti = cache().get("&ITI",o.get());
if (!iti.empty())
{
const bool riganuova = msk.get_int(F_S_RIGA) <= 0;
if (riganuova || msk.field(F_S_CODAUT).empty())
msk.set(F_S_CODAUT,iti.get("S1"));
if (riganuova || msk.field(F_S_CODMEZ).empty())
msk.set(F_S_CODMEZ,iti.get("S2"));
}
}
break;
//quando riempio il campo cliente sullo sheet controllo se posso proporre dei dati di default sul planning
case F_S_CODCF:
if (e == fe_modify && !o.empty())
{
TMask& msk = o.mask(); //maschera di sheet
TLocalisamfile pplan(LF_LVPASPLAN);
pplan.put(LVPASPLAN_CODCF,msk.get(F_S_CODCF));
pplan.put(LVPASPLAN_CODCONT,msk.get(F_S_CODCONT));
pplan.put(LVPASPLAN_GGCONS,msk.get_date(F_S_DATA).wday());
int err = pplan.read(_isgteq);
//se trovo dei dati validi sulla tabella LF_LVPASPLAN, riempio tutti i campi che riesco,...
//...utilizzando anche la tabella &ITI
if (err == NOERR)
{
msk.set(F_S_ITI,pplan.get_int(LVPASPLAN_CODITI),true);
msk.set(F_S_ORDFER,pplan.get_int(LVPASPLAN_ORDFERM));
msk.set(F_S_MODPASS,pplan.get_char(LVPASPLAN_MODPASS));
}
}
break;
default: break;
}
return true;
}
///////////////////////////////////////////////////////////
// TGestione_planning applicazione
///////////////////////////////////////////////////////////
class TGestione_planning_app : public TSkeleton_application
{
TGestione_planning_mask* _msk;
protected:
virtual bool create();
virtual bool destroy();
public:
bool transfer();
virtual void main_loop();
};
bool TGestione_planning_app::create()
{
_msk = new TGestione_planning_mask("lv2200a");
return TSkeleton_application::create();
}
bool TGestione_planning_app::destroy()
{
delete _msk;
return TApplication::destroy();
}
bool TGestione_planning_app::transfer()
{
return true;
}
void TGestione_planning_app::main_loop()
{
while (_msk->run() == K_ENTER)
transfer();
}
int lv2200(int argc, char* argv[])
{
TGestione_planning_app app;
app.run(argc, argv, TR("Gestione planning"));
return 0;
}

31
lv/lv2200a.h Executable file
View File

@ -0,0 +1,31 @@
// modifica manuale planning
// definizione campi per maschera lv2200a
#define F_DADATA 201
#define F_ADATA 202
#define F_CODITI 203
#define F_DESCRITI 204
#define F_CODCF 205
#define F_RAGSOCCLI 206
#define F_PLAN 207
//campi dello sheet
#define F_S_BOLLA 100
#define F_S_DATA 101
#define F_S_GIORNO 102
#define F_S_ITI 103
#define F_S_ORDFER 104
#define F_S_MODPASS 105
#define F_S_CODCONT 106
#define F_S_CODCF 107
#define F_S_RAGSOCCLI 108
#define F_S_CODAUT 109
#define F_S_DESAUT 998
#define F_S_CODMEZ 110
#define F_S_DESMEZ 999
#define F_S_ANNO 111
#define F_S_CODNUM 112
#define F_S_NDOC 113
#define F_S_PASSTD 114
#define F_S_PERSOSP 115
#define F_S_PERSOSPVAR 116
#define F_S_RIGA 117

350
lv/lv2200a.uml Executable file
View File

@ -0,0 +1,350 @@
#include "lv2200a.h"
TOOLBAR "" 0 0 0 2
#include <elabar.h>
ENDPAGE
PAGE "Visualizzazione e modifica planning" -1 -1 76 20
GROUPBOX DLG_NULL 76 5
BEGIN
PROMPT 1 1 "@bDati del planning"
END
DATE F_DADATA
BEGIN
PROMPT 2 2 "Visualizza il planning dal "
FIELD DADATA
CHECKTYPE REQUIRED
END
DATE F_ADATA
BEGIN
PROMPT 45 2 "al "
FIELD ADATA
CHECKTYPE REQUIRED
END
STRING F_CODITI 3
BEGIN
PROMPT 2 3 "Itinerario "
FLAGS "UZ"
USE &ITI
INPUT CODTAB F_CODITI
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODITI CODTAB
OUTPUT F_DESCRITI S0
END
STRING F_DESCRITI 50
BEGIN
PROMPT 23 3 ""
USE &ITI KEY 2
INPUT S0 F_DESCRITI
DISPLAY "Descrizione@50" S0
DISPLAY "Codice " CODTAB
COPY OUTPUT F_CODITI
END
NUMBER F_CODCF 6
BEGIN
PROMPT 2 4 "Cliente "
FLAGS "U"
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF F_CODCF
DISPLAY "Codice " CODCF
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT F_CODCF CODCF
OUTPUT F_RAGSOCCLI RAGSOC
CHECKTYPE NORMAL
END
STRING F_RAGSOCCLI 50
BEGIN
PROMPT 23 4 ""
USE LF_CLIFO KEY 2
INPUT TIPOCF "C"
INPUT RAGSOC F_RAGSOCCLI
DISPLAY "Ragione sociale@50" RAGSOC
DISPLAY "Codice " CODCF
COPY OUTPUT F_CODCF
CHECKTYPE NORMAL
END
SPREADSHEET F_PLAN
BEGIN
PROMPT 0 6 "Planning"
ITEM "Data"
ITEM "Giorno"
ITEM "Itinerario"
ITEM "Or. fermata"
ITEM "Mod. pass."
ITEM "Contratto"
ITEM "Codice\nCliente@6"
ITEM "Ragione sociale@50"
ITEM "Autista"
ITEM "Mezzo"
ITEM "Tipo\ndoc."
ITEM "Numero\ndoc."
ITEM "Consegna\nstandard"
ITEM "Per.\nsosp."
ITEM "Per.\nsosp. var."
ITEM "Num.\nriga@5"
END
ENDPAGE
ENDMASK
PAGE "Planning" -1 -1 78 20
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 1 "@bDati planning"
END
DATE F_S_DATA
BEGIN
PROMPT 2 2 "Data "
FIELD DTCONS
CHECKTYPE REQUIRED
END
STRING F_S_GIORNO 10
BEGIN
PROMPT 20 2 "Giorno "
FLAG "D"
END
NUMBER F_S_ITI 3
BEGIN
PROMPT 40 2 "Itinerario "
FLAGS "Z"
FIELD CODITI
USE &ITI
INPUT CODTAB F_S_ITI
DISPLAY "Codice " CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_S_ITI CODTAB
CHECKTYPE REQUIRED
END
NUMBER F_S_RIGA 5
BEGIN
PROMPT 60 2 "Riga "
FLAGS "DG"
MESSAGE EMPTY ENABLE,F_S_CODCONT
MESSAGE DISABLE,F_S_CODCONT
FIELD CODRIGA
END
NUMBER F_S_ORDFER 3
BEGIN
FLAGS "DU"
PROMPT 2 3 "Ordine di fermata "
FIELD ORDFER
CHECKTYPE REQUIRED
END
LIST F_S_MODPASS 10
BEGIN
PROMPT 25 3 "Modalità di passaggio "
ITEM "C|Consegna"
ITEM "R|Ritiro"
ITEM "E|Entrambi"
FIELD MODPASS
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 5 "@bDati cliente"
END
NUMBER F_S_CODCONT 6
BEGIN
PROMPT 2 6 "Contratto "
FLAGS "DU"
USE LF_LVCONDV
JOIN LF_CLIFO INTO TIPOCF="C" CODCF=CODCF
INPUT CODCONT F_S_CODCONT
INPUT CODCF F_S_CODCF
DISPLAY "Codice@6" CODCONT
DISPLAY "Cliente@50" LF_CLIFO->RAGSOC
DISPLAY "Codice Cliente" CODCF
OUTPUT F_S_CODCONT CODCONT
OUTPUT F_S_CODCF CODCF
OUTPUT F_S_RAGSOCCLI LF_CLIFO->RAGSOC
FIELD CODCONT
END
NUMBER F_S_CODCF 6
BEGIN
PROMPT 2 7 "Cliente "
FLAGS "DUG"
FIELD CODCF
USE LF_CLIFO KEY 1
INPUT TIPOCF "C"
INPUT CODCF F_S_CODCF
DISPLAY "Codice " F_S_SCODCF
DISPLAY "Ragione sociale@50" F_S_RAGSOC
OUTPUT F_S_CODCF CODCF
OUTPUT F_S_RAGSOCCLI RAGSOC
CHECKTYPE REQUIRED
END
STRING F_S_RAGSOCCLI 50
BEGIN
PROMPT 22 7 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 76 4
BEGIN
PROMPT 1 9 "@bDettagli trasporto"
END
STRING F_S_CODAUT 6
BEGIN
PROMPT 2 10 "Autista "
FLAGS "UZ"
USE &AUT
INPUT CODTAB F_S_CODAUT
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_S_CODAUT CODTAB
OUTPUT F_S_DESAUT S0
CHECKTYPE REQUIRED
FIELD CODAUT
END
STRING F_S_DESAUT 50
BEGIN
PROMPT 22 10 ""
USE &AUT KEY 2
INPUT S0 F_S_DESAUT
DISPLAY "Descrizione@50" S0
DISPLAY "Codice" CODTAB
COPY OUTPUT F_S_CODAUT
CHECKTYPE REQUIRED
END
STRING F_S_CODMEZ 8
BEGIN
PROMPT 2 11 "Targa "
FLAGS "U"
USE &MEZ
INPUT CODTAB F_S_CODMEZ
DISPLAY "Codice@8" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_S_CODMEZ CODTAB
OUTPUT F_S_DESMEZ S0
FIELD CODMEZ
CHECKTYPE REQUIRED
END
STRING F_S_DESMEZ 50
BEGIN
PROMPT 22 11 ""
USE &MEZ KEY 2
INPUT S0 F_S_DESMEZ
DISPLAY "Descrizione@50" S0
DISPLAY "Codice@8" CODTAB
COPY OUTPUT F_S_CODMEZ
CHECKTYPE REQUIRED
END
GROUPBOX DLG_NULL 20 5
BEGIN
PROMPT 56 13 "@bDati bolla associata"
END
NUMBER F_S_ANNO 4
BEGIN
PROMPT 57 14 "Anno doc. "
FIELD ANNO
FLAG "D"
END
STRING F_S_CODNUM 4
BEGIN
PROMPT 57 15 "Documento "
FIELD CODNUM
FLAG "D"
END
NUMBER F_S_NDOC 7
BEGIN
PROMPT 57 16 "Numero "
FIELD NDOC
FLAG "DG"
MESSAGE EMPTY DISABLE,F_S_BOLLA
MESSAGE ENABLE,F_S_BOLLA
END
GROUPBOX DLG_NULL 53 5
BEGIN
PROMPT 1 13 "@bDettagli planning"
END
BOOLEAN F_S_PASSTD
BEGIN
PROMPT 2 14 "Consegna standard "
FIELD CONSSTD
FLAG "D"
END
NUMBER F_S_PERSOSP 2
BEGIN
PROMPT 2 15 "Periodo di sospensione "
FIELD PERSOSP
FLAG "D"
END
NUMBER F_S_PERSOSPVAR 2
BEGIN
PROMPT 2 16 "Periodo di sospensione variato "
FIELD PERSOSPVAR
USE LF_LVPERISOSP
INPUT CODCF F_S_CODCF SELECT
INPUT CODCONT F_S_CODCONT SELECT
INPUT CODPER F_S_PERSOSPVAR
DISPLAY "Codice @6" CODPER
DISPLAY "Da @10" DATAINI
DISPLAY "a @10" DATAFIN
OUTPUT F_S_PERSOSPVAR CODPER
CHECKTYPE NORMAL
END
ENDPAGE
TOOLBAR "" 0 0 0 2
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_DELREC 2 2
BEGIN
PROMPT 2 1 "Elimina"
MESSAGE EXIT,K_DEL
PICTURE BMP_DELREC
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 3 1 "Bolla"
PICTURE BMP_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 4 1 ""
END
ENDPAGE
ENDMASK

View File

@ -1,14 +0,0 @@
#ifndef __LVCONSPLAN_H
#define __LVCONSPLAN_H
#define LVCONSPLAN_CODPLAN "CODPLAN"
#define LVCONSPLAN_DTCONS "DTCONS"
#define LVCONSPLAN_GGCONS "GGCONS"
#define LVCONSPLAN_CODAUT "CODAUT"
#define LVCONSPLAN_CODMEZ "CODMEZ"
#define LVCONSPLAN_CODITI "CODITI"
#define LVCONSPLAN_UTCREAZ "UTULAGG"
#define LVCONSPLAN_DTULAGG "DTULAGG"
#define LVCONSPLAN_ORULAGG "ORULAGG"
#endif

View File

@ -14,7 +14,7 @@ END
STRING F_COD_ITINERARIO 3
BEGIN
PROMPT 2 2 "Itinerario "
FLAGS "U"
FLAGS "ZU"
USE &ITI
INPUT CODTAB F_COD_ITINERARIO
DISPLAY "Codice" CODTAB