Patch level :
Files correlati : Ricompilazione Demo : [ ] Commento : Aggiunto programma di statistica per comune di domicilio git-svn-id: svn://10.65.10.50/trunk@6444 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
3bdcb94811
commit
fc9427ff2f
@ -4,7 +4,7 @@
|
||||
|
||||
#include "at3.h"
|
||||
|
||||
#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7}"
|
||||
#define usage "Error - usage : %s -{0|1|2|3|4|5|6|7|8}"
|
||||
|
||||
int main(int argc,char** argv)
|
||||
{
|
||||
@ -28,6 +28,8 @@ int main(int argc,char** argv)
|
||||
rt = at3700(argc,argv) ; break;
|
||||
case 7:
|
||||
rt = at3800(argc,argv) ; break;
|
||||
case 8:
|
||||
rt = at3900(argc,argv) ; break;
|
||||
default:
|
||||
error_box(usage, argv[0]) ; break;
|
||||
}
|
||||
|
1
at/at3.h
1
at/at3.h
@ -9,6 +9,7 @@ int at3500(int argc, char* argv[]);
|
||||
int at3600(int argc, char* argv[]);
|
||||
int at3700(int argc, char* argv[]);
|
||||
int at3800(int argc, char* argv[]);
|
||||
int at3900(int argc, char* argv[]);
|
||||
|
||||
#endif // __AT3_H
|
||||
|
||||
|
592
at/at3900.cpp
Executable file
592
at/at3900.cpp
Executable file
@ -0,0 +1,592 @@
|
||||
#include <applicat.h>
|
||||
#include <mask.h>
|
||||
#include <printer.h>
|
||||
#include <progind.h>
|
||||
#include <real.h>
|
||||
#include <relation.h>
|
||||
#include <tabutil.h>
|
||||
#include <urldefid.h>
|
||||
#include <utility.h>
|
||||
|
||||
#include "at3.h"
|
||||
|
||||
// nomi campi maschera
|
||||
#include "at3900a.h"
|
||||
|
||||
// nomi dei campi
|
||||
#include "soggetti.h"
|
||||
#include "atstats.h"
|
||||
#include "sezioni.h"
|
||||
#include "comuni.h"
|
||||
|
||||
// classe per la definizione di una riga di statistica
|
||||
class TRigaSxCom : public TObject
|
||||
{
|
||||
TString16 _com;
|
||||
TArray _valori;
|
||||
|
||||
protected:
|
||||
const TRigaSxCom& copy(const TRigaSxCom& riga);
|
||||
public:
|
||||
const TString16 com() const { return _com; }
|
||||
TObject* dup() const { return new TRigaSxCom(*this); }
|
||||
const TRigaSxCom& operator = (const TRigaSxCom& riga);
|
||||
const real& operator [] (int colonna) const;
|
||||
void aggiorna_valore(int colonna, const real& numero) ;
|
||||
void azzera_valori();
|
||||
// costruttore
|
||||
TRigaSxCom(TString16 com) {_com = com;}
|
||||
// costruttore di copia
|
||||
TRigaSxCom(const TRigaSxCom& riga) { copy(riga); }
|
||||
virtual ~TRigaSxCom() {};
|
||||
};
|
||||
|
||||
const TRigaSxCom& TRigaSxCom::copy(const TRigaSxCom& riga)
|
||||
{
|
||||
_com = riga._com;
|
||||
_valori = riga._valori;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const TRigaSxCom& TRigaSxCom::operator = (const TRigaSxCom& riga)
|
||||
{
|
||||
copy(riga);
|
||||
return (*this);
|
||||
}
|
||||
|
||||
const real& TRigaSxCom::operator [] (int colonna) const
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
return ZERO;
|
||||
else
|
||||
return *valore;
|
||||
}
|
||||
|
||||
void TRigaSxCom::aggiorna_valore(int colonna, const real& numero)
|
||||
{
|
||||
real* valore = (real*)_valori.objptr(colonna);
|
||||
if (valore == NULL)
|
||||
_valori.add(new real(numero), colonna);
|
||||
else
|
||||
*valore += numero;
|
||||
}
|
||||
|
||||
void TRigaSxCom::azzera_valori()
|
||||
{
|
||||
_valori.destroy();
|
||||
}
|
||||
|
||||
class TStatSogxCom : public TApplication
|
||||
{
|
||||
TMask* _msk;
|
||||
TRelation* _rel;
|
||||
TCursor* _cur;
|
||||
TLocalisamfile* _sezioni;
|
||||
TLocalisamfile* _comuni;
|
||||
TLocalisamfile* _soggetti;
|
||||
TLocalisamfile* _atstats;
|
||||
TAssoc_array* _colonne;
|
||||
TAssoc_array* _comprovincia;
|
||||
TAssoc_array _categorie;
|
||||
TArray _righe, _righetotali;
|
||||
TString16 _sezini, _sotini, _sezfin, _sotfin, _provincia;
|
||||
TDate _dataini, _datafin;
|
||||
|
||||
static bool filter_func_statxcom(const TRelation* rel);
|
||||
|
||||
protected:
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual bool menu(MENU_TAG m);
|
||||
virtual TMask& get_mask() { return *_msk; }
|
||||
virtual TRelation* get_relation() const { return _rel; }
|
||||
int data2row(const TString16 com);
|
||||
bool riepilogo();
|
||||
bool stampa();
|
||||
bool crea_colonne();
|
||||
bool crea_righe();
|
||||
void azzera_righe();
|
||||
void stampa_sezione(TString16 codsez, TString16 codsot);
|
||||
void stampa_totali();
|
||||
void crea_intestazione();
|
||||
public:
|
||||
TStatSogxCom() {}
|
||||
|
||||
};
|
||||
|
||||
HIDDEN inline TStatSogxCom& app() { return (TStatSogxCom&) main_app(); }
|
||||
|
||||
int TStatSogxCom::data2row(const TString16 com)
|
||||
{
|
||||
real& indicer = (real&)_comprovincia->find((const char*) com);
|
||||
return ((int) indicer.integer());
|
||||
}
|
||||
|
||||
bool TStatSogxCom::crea_colonne()
|
||||
{
|
||||
_colonne->destroy();
|
||||
real contatore(ZERO);
|
||||
real* oggetto = new real(contatore);
|
||||
const char* indice = "T"; // tutti i donatori
|
||||
_colonne->add(indice,(TObject*)oggetto);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatSogxCom::filter_func_statxcom(const TRelation* rel)
|
||||
{
|
||||
bool filtrato = TRUE;
|
||||
TLocalisamfile& sog = rel->lfile(LF_SOGGETTI);
|
||||
// filtro per categorie
|
||||
TAssoc_array& categorie = app()._categorie;
|
||||
if (categorie.items() != 0)
|
||||
{
|
||||
const TString16 cat = sog.get(SOG_CATDON);
|
||||
filtrato = categorie.is_key((const char*) cat);
|
||||
}
|
||||
return filtrato;
|
||||
}
|
||||
|
||||
bool TStatSogxCom::crea_righe()
|
||||
{
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey(2);
|
||||
TString16 com = "****";
|
||||
int indice = 0;
|
||||
_comprovincia->destroy();
|
||||
real* oggetto1 = new real(indice);
|
||||
_comprovincia->add((const char*) com, (TObject*) oggetto1);
|
||||
_righe.add(new TRigaSxCom(com), indice);
|
||||
_righetotali.add(new TRigaSxCom(com), indice);
|
||||
comuni.zero();
|
||||
for (comuni.first(); !comuni.eof(); comuni.next())
|
||||
{
|
||||
TString provincia = comuni.get(COM_PROVCOM);
|
||||
if (provincia == _provincia)
|
||||
{
|
||||
indice++;
|
||||
com = comuni.get(COM_COM);
|
||||
_righe.add(new TRigaSxCom(com), indice);
|
||||
_righetotali.add(new TRigaSxCom(com), indice);
|
||||
real* oggetto = new real(indice);
|
||||
_comprovincia->add((const char*) com,(TObject*) oggetto);
|
||||
}
|
||||
}
|
||||
return _righe.items()>0;
|
||||
}
|
||||
|
||||
bool TStatSogxCom::create()
|
||||
{
|
||||
TApplication::create();
|
||||
_msk = new TMask("at3900a");
|
||||
_rel = new TRelation(LF_SOGGETTI);
|
||||
_rel->add(LF_COMUNI, "COM==DOM_CODCOM");
|
||||
_soggetti = new TLocalisamfile(LF_SOGGETTI);
|
||||
_atstats = new TLocalisamfile(LF_ATSTATS);
|
||||
_sezioni = new TLocalisamfile(LF_SEZIONI);
|
||||
_comuni = new TLocalisamfile(LF_COMUNI);
|
||||
_colonne = new TAssoc_array();
|
||||
_comprovincia = new TAssoc_array();
|
||||
dispatch_e_menu(BAR_ITEM(1));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TStatSogxCom::destroy()
|
||||
{
|
||||
delete _rel;
|
||||
delete _msk;
|
||||
delete _soggetti;
|
||||
delete _atstats;
|
||||
delete _sezioni;
|
||||
delete _comuni;
|
||||
delete _colonne;
|
||||
delete _comprovincia;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
bool TStatSogxCom::menu(MENU_TAG m)
|
||||
{
|
||||
TMask& msk = get_mask();
|
||||
KEY tasto;
|
||||
tasto = msk.run();
|
||||
if (tasto == K_ENTER)
|
||||
{
|
||||
_sezini = _msk->get(F_SEZINI);
|
||||
_sotini = _msk->get(F_SOTINI);
|
||||
_sezfin = _msk->get(F_SEZFIN);
|
||||
_sotfin = _msk->get(F_SOTFIN);
|
||||
_provincia = _msk->get(F_PROVINCIA);
|
||||
if (riepilogo())
|
||||
stampa();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatSogxCom::crea_intestazione()
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 sep;
|
||||
sep = "STATISTICA SOGGETTI PER COMUNE DI DOMICILIO";
|
||||
sep.center_just(80);
|
||||
row.put(sep);
|
||||
row.put("@>", 1);
|
||||
row.put("Pag. @#", 70);
|
||||
printer().setheaderline(2, row);
|
||||
sep = "Categorie ";
|
||||
sep << _msk->get(F_CAT1) << " ";
|
||||
sep << _msk->get(F_CAT2) << " ";
|
||||
sep << _msk->get(F_CAT3) << " ";
|
||||
sep << _msk->get(F_CAT4) << " ";
|
||||
sep << _msk->get(F_CAT5) << " ";
|
||||
sep << _msk->get(F_CAT6) << " ";
|
||||
sep.center_just(80);
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(3, row);
|
||||
sep = "";
|
||||
sep << "Comune Numero";
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(5, row);
|
||||
sep = "";
|
||||
sep.fill('-');
|
||||
row.reset();
|
||||
row.put(sep);
|
||||
printer().setheaderline(6, row);
|
||||
}
|
||||
|
||||
bool TStatSogxCom::stampa()
|
||||
{
|
||||
if (printer().open())
|
||||
{
|
||||
crea_intestazione();
|
||||
TRelation* relstat = new TRelation(LF_ATSTATS);
|
||||
TCursor* curstat = new TCursor(relstat, "", 1);
|
||||
TString16 oldsez = "**";
|
||||
TString16 oldsot = "**";
|
||||
double numero;
|
||||
TString16 actsez, actsot;
|
||||
TString16 com;
|
||||
long last = curstat->items();
|
||||
for ( *curstat=0; curstat->pos() < last; ++(*curstat) )
|
||||
{
|
||||
actsez = curstat->curr().get(ATSS_CODSEZ);
|
||||
actsot = curstat->curr().get(ATSS_CODSOT);
|
||||
com = curstat->curr().get(ATSS_COM);
|
||||
numero = (double)curstat->curr().get_int(ATSS_NUMERO);
|
||||
if (actsez != oldsez || actsot != oldsot)
|
||||
{
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
azzera_righe();
|
||||
}
|
||||
oldsez = actsez;
|
||||
oldsot = actsot;
|
||||
}
|
||||
if (com.empty())
|
||||
com = "****";
|
||||
TRigaSxCom& riga = (TRigaSxCom&)_righe[data2row(com)];
|
||||
TRigaSxCom& rigatotale = (TRigaSxCom&)_righetotali[data2row(com)];
|
||||
const char* indicen = "T";
|
||||
real& colonnan = (real&)_colonne->find(indicen);
|
||||
real n = numero;
|
||||
riga.aggiorna_valore((int) colonnan.integer(),n);
|
||||
rigatotale.aggiorna_valore((int) colonnan.integer(),n);
|
||||
}
|
||||
if (oldsez != "**" && oldsot != "**")
|
||||
{
|
||||
stampa_sezione(oldsez,oldsot);
|
||||
if ((_sezini != _sezfin) || (_sotini != _sotfin))
|
||||
stampa_totali();
|
||||
}
|
||||
delete curstat;
|
||||
delete relstat;
|
||||
printer().close();
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void TStatSogxCom::azzera_righe()
|
||||
{
|
||||
for (int i=0; i<_righe.items(); i++)
|
||||
{
|
||||
TRigaSxCom& riga = (TRigaSxCom&)_righe[i];
|
||||
riga.azzera_valori();
|
||||
}
|
||||
}
|
||||
|
||||
void TStatSogxCom::stampa_sezione(TString16 codsez, TString16 codsot)
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 rigastampa;
|
||||
rigastampa = "Sezione: ";
|
||||
rigastampa << codsez;
|
||||
if (codsot.not_empty())
|
||||
{
|
||||
rigastampa << "/";
|
||||
rigastampa << codsot;
|
||||
}
|
||||
rigastampa << " ";
|
||||
TLocalisamfile sezioni(LF_SEZIONI);
|
||||
sezioni.setkey(1);
|
||||
sezioni.zero();
|
||||
sezioni.put(SEZ_CODSEZ,codsez);
|
||||
sezioni.put(SEZ_CODSOT,codsot);
|
||||
if (sezioni.read() == NOERR)
|
||||
{
|
||||
TString80 den = sezioni.get(SEZ_DENSEZ);
|
||||
rigastampa << den;
|
||||
den = sezioni.get(SEZ_DENSOT);
|
||||
if (den.not_empty())
|
||||
{
|
||||
rigastampa << "/";
|
||||
rigastampa << den;
|
||||
}
|
||||
}
|
||||
rigastampa.center_just(80);
|
||||
row.put(rigastampa);
|
||||
printer().setheaderline(1, row);
|
||||
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey(1);
|
||||
|
||||
TRigaSxCom rigatotali(" ");
|
||||
TString16 valore;
|
||||
TString16 com;
|
||||
|
||||
for (int i=0; i<_righe.items(); i++)
|
||||
{
|
||||
TRigaSxCom& riga = (TRigaSxCom&)_righe[i];
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
if (riga[(int) colonnat.integer()] != 0)
|
||||
{
|
||||
rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa << riga.com();
|
||||
rigastampa << " ";
|
||||
comuni.zero();
|
||||
comuni.put(COM_COM,riga.com());
|
||||
if (comuni.read() == NOERR)
|
||||
rigastampa << comuni.get(COM_DENCOM);
|
||||
int pos = 41;
|
||||
valore = "";
|
||||
valore.format("%8d",riga[(int) colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
}
|
||||
}
|
||||
|
||||
// stampa totali per sezione
|
||||
rigastampa = "";
|
||||
rigastampa.fill('-');
|
||||
row.reset();
|
||||
row.put(rigastampa);
|
||||
printer().print(row);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa = "Totale";
|
||||
int pos = 41;
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[(int) colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
void TStatSogxCom::stampa_totali()
|
||||
{
|
||||
TPrintrow row;
|
||||
TString256 rigastampa;
|
||||
rigastampa = "Riepilogo sezioni stampate";
|
||||
rigastampa.center_just(80);
|
||||
row.put(rigastampa);
|
||||
printer().setheaderline(1, row);
|
||||
|
||||
TLocalisamfile comuni(LF_COMUNI);
|
||||
comuni.setkey(1);
|
||||
|
||||
TRigaSxCom rigatotali(" ");
|
||||
TString16 valore;
|
||||
TString16 com;
|
||||
|
||||
for (int i=0; i<_righe.items(); i++)
|
||||
{
|
||||
TRigaSxCom& riga = (TRigaSxCom&)_righetotali[i];
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
if (riga[(int) colonnat.integer()] != 0)
|
||||
{
|
||||
rigatotali.aggiorna_valore((int) colonnat.integer(),riga[(int) colonnat.integer()]);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa << riga.com();
|
||||
rigastampa << " ";
|
||||
comuni.zero();
|
||||
comuni.put(COM_COM,riga.com());
|
||||
if (comuni.read() == NOERR)
|
||||
rigastampa << comuni.get(COM_DENCOM);
|
||||
int pos = 41;
|
||||
valore = "";
|
||||
valore.format("%8d",riga[(int) colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
}
|
||||
}
|
||||
|
||||
// stampa totali per sezione
|
||||
rigastampa = "";
|
||||
rigastampa.fill('-');
|
||||
row.reset();
|
||||
row.put(rigastampa);
|
||||
printer().print(row);
|
||||
row.reset();
|
||||
rigastampa = "";
|
||||
rigastampa = "Totale";
|
||||
int pos = 41;
|
||||
const char* indicet = "T";
|
||||
real& colonnat = (real&)_colonne->find(indicet);
|
||||
valore = "";
|
||||
valore.format("%8d",rigatotali[(int) colonnat.integer()].integer());
|
||||
rigastampa.overwrite((const char*)valore, pos);
|
||||
pos = pos+8;
|
||||
row.put((const char*) rigastampa);
|
||||
printer().print(row);
|
||||
printer().formfeed();
|
||||
}
|
||||
|
||||
bool TStatSogxCom::riepilogo()
|
||||
{
|
||||
if (crea_colonne() && crea_righe())
|
||||
{
|
||||
// cancello i risultati della elaborazione precedente
|
||||
TLocalisamfile stat(LF_ATSTATS);
|
||||
for (stat.first(); !stat.eof(); stat.next())
|
||||
stat.remove();
|
||||
stat.setkey(1);
|
||||
_cur = new TCursor(_rel, "", 1);
|
||||
TString256 filtro = "";
|
||||
|
||||
filtro = format("(13->PROVCOM == \"%s\")",(const char*)_provincia);
|
||||
// filtro per sezione/sottogruppo
|
||||
if (_sezini.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CODSEZ >= \"%s\")",(const char*)_sezini);
|
||||
}
|
||||
if (_sotini.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CODSOT >= \"%s\")",(const char*)_sotini);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (_sezfin.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CODSEZ <= \"%s\")",(const char*)_sezfin);
|
||||
}
|
||||
if (_sotfin.not_empty())
|
||||
{
|
||||
if (filtro.empty())
|
||||
filtro = format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
|
||||
else
|
||||
{
|
||||
filtro << " && ";
|
||||
filtro << format("(90->CODSOT <= \"%s\")",(const char*)_sotfin);
|
||||
}
|
||||
}
|
||||
}
|
||||
_cur->setfilter((const char*) filtro, TRUE);
|
||||
_categorie.destroy();
|
||||
const TString16 catpri = _msk->get(F_CAT1);
|
||||
const TString16 catsec = _msk->get(F_CAT2);
|
||||
const TString16 catter = _msk->get(F_CAT3);
|
||||
const TString16 catqua = _msk->get(F_CAT4);
|
||||
const TString16 catqui = _msk->get(F_CAT5);
|
||||
const TString16 catses = _msk->get(F_CAT6);
|
||||
if (catpri.not_empty() && catpri.ok())
|
||||
_categorie.add((const char*) catpri);
|
||||
if (catsec.not_empty() && catsec.ok())
|
||||
_categorie.add((const char*) catsec);
|
||||
if (catter.not_empty() && catter.ok())
|
||||
_categorie.add((const char*) catter);
|
||||
if (catqua.not_empty() && catqua.ok())
|
||||
_categorie.add((const char*) catqua);
|
||||
if (catqui.not_empty() && catqui.ok())
|
||||
_categorie.add((const char*) catqui);
|
||||
if (catses.not_empty() && catses.ok())
|
||||
_categorie.add((const char*) catses);
|
||||
_cur->set_filterfunction(filter_func_statxcom);
|
||||
|
||||
TString16 codsez, codsot;
|
||||
long numero;
|
||||
TString16 com;
|
||||
TRectype& recsog = _cur->curr();
|
||||
long last = _cur->items();
|
||||
TProgind prg (last, "Elaborazione in corso... Prego attendere", FALSE, TRUE, 30);
|
||||
for ( *_cur=0; _cur->pos() < last; ++(*_cur) )
|
||||
{
|
||||
prg.addstatus(1);
|
||||
codsez = recsog.get(SOG_CODSEZ);
|
||||
codsot = recsog.get(SOG_CODSOT);
|
||||
com = recsog.get(SOG_DOM_CODCOM);
|
||||
if (com.empty())
|
||||
com = "****";
|
||||
stat.zero();
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_COM, com);
|
||||
if (stat.read() == NOERR)
|
||||
{
|
||||
numero = stat.get_long(ATSS_NUMERO);
|
||||
numero++;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.rewrite();
|
||||
}
|
||||
else
|
||||
{
|
||||
stat.put(ATSS_CODSEZ, codsez);
|
||||
stat.put(ATSS_CODSOT, codsot);
|
||||
stat.put(ATSS_COM, com);
|
||||
numero = 1;
|
||||
stat.put(ATSS_NUMERO, numero);
|
||||
stat.write();
|
||||
}
|
||||
}
|
||||
return (stat.eod() > 0);
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int at3900(int argc, char* argv[])
|
||||
{
|
||||
TStatSogxCom a;
|
||||
a.run(argc, argv, "Statistica soggetti per comune di domicilio");
|
||||
return 0;
|
||||
}
|
26
at/at3900a.h
Executable file
26
at/at3900a.h
Executable file
@ -0,0 +1,26 @@
|
||||
// statistica SOGGETTI PER comune di domicilio
|
||||
// definizione campi per maschera di selezione
|
||||
|
||||
#define F_SEZINI 101
|
||||
#define F_D_SEZINI 102
|
||||
#define F_SOTINI 103
|
||||
#define F_D_SOTINI 104
|
||||
#define F_SEZFIN 105
|
||||
#define F_D_SEZFIN 106
|
||||
#define F_SOTFIN 107
|
||||
#define F_D_SOTFIN 108
|
||||
|
||||
#define F_CAT1 201
|
||||
#define F_D_CAT1 202
|
||||
#define F_CAT2 203
|
||||
#define F_D_CAT2 204
|
||||
#define F_CAT3 205
|
||||
#define F_D_CAT3 206
|
||||
#define F_CAT4 207
|
||||
#define F_D_CAT4 208
|
||||
#define F_CAT5 209
|
||||
#define F_D_CAT5 210
|
||||
#define F_CAT6 211
|
||||
#define F_D_CAT6 212
|
||||
|
||||
#define F_PROVINCIA 301
|
263
at/at3900a.uml
Executable file
263
at/at3900a.uml
Executable file
@ -0,0 +1,263 @@
|
||||
#include "at3900a.h"
|
||||
|
||||
PAGE "Statistica donatori per categoria" -1 -1 78 20
|
||||
|
||||
GROUPBOX DLG_NULL 77 4
|
||||
BEGIN
|
||||
PROMPT 1 1 "Scelta sezioni/sottogruppi"
|
||||
END
|
||||
|
||||
STRING F_SEZINI 2
|
||||
BEGIN
|
||||
PROMPT 2 2 "Da "
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI
|
||||
INPUT CODSEZ F_SEZINI
|
||||
INPUT CODSOT F_SOTINI
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
DISPLAY "Sezione@25" DENSEZ
|
||||
DISPLAY "Sottogruppo@25" DENSOT
|
||||
OUTPUT F_SEZINI CODSEZ
|
||||
OUTPUT F_D_SEZINI DENSEZ
|
||||
OUTPUT F_SOTINI CODSOT
|
||||
OUTPUT F_D_SOTINI DENSOT
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sezione da cui partire"
|
||||
END
|
||||
|
||||
STRING F_D_SEZINI 25
|
||||
BEGIN
|
||||
PROMPT 11 2 ""
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI KEY 2
|
||||
INPUT DENSEZ F_D_SEZINI
|
||||
DISPLAY "Sezione@25" DENSEZ
|
||||
DISPLAY "Sottogruppo@25" DENSOT
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
COPY OUTPUT F_SEZINI
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Sezione da cui partire"
|
||||
END
|
||||
|
||||
STRING F_SOTINI 2
|
||||
BEGIN
|
||||
PROMPT 2 3 " "
|
||||
COPY ALL F_SEZINI
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sottogruppo da cui partire"
|
||||
END
|
||||
|
||||
STRING F_D_SOTINI 25
|
||||
BEGIN
|
||||
PROMPT 11 3 ""
|
||||
FLAGS "U"
|
||||
COPY USE F_D_SEZINI
|
||||
INPUT DENSEZ F_D_SEZINI
|
||||
INPUT DENSOT F_D_SOTINI
|
||||
COPY DISPLAY F_D_SEZINI
|
||||
COPY OUTPUT F_D_SEZINI
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Sottogruppo da cui partire"
|
||||
END
|
||||
|
||||
STRING F_SEZFIN 2
|
||||
BEGIN
|
||||
PROMPT 41 2 "A "
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI
|
||||
INPUT CODSEZ F_SEZFIN
|
||||
INPUT CODSOT F_SOTFIN
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
DISPLAY "Sezione@25" DENSEZ
|
||||
DISPLAY "Sottogruppo@25" DENSOT
|
||||
OUTPUT F_SEZFIN CODSEZ
|
||||
OUTPUT F_D_SEZFIN DENSEZ
|
||||
OUTPUT F_SOTFIN CODSOT
|
||||
OUTPUT F_D_SOTFIN DENSOT
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sezione finale"
|
||||
END
|
||||
|
||||
STRING F_D_SEZFIN 25
|
||||
BEGIN
|
||||
PROMPT 49 2 ""
|
||||
FLAGS "U"
|
||||
USE LF_SEZIONI KEY 2
|
||||
INPUT DENSEZ F_D_SEZFIN
|
||||
DISPLAY "Sezione@25" DENSEZ
|
||||
DISPLAY "Sottogruppo@25" DENSOT
|
||||
DISPLAY "Cod.sez" CODSEZ
|
||||
DISPLAY "Cod.sot." CODSOT
|
||||
COPY OUTPUT F_SEZFIN
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Sezione finale"
|
||||
END
|
||||
|
||||
STRING F_SOTFIN 2
|
||||
BEGIN
|
||||
PROMPT 41 3 " "
|
||||
COPY ALL F_SEZFIN
|
||||
CHECKTYPE SEARCH
|
||||
HELP "Codice sottogruppo finale"
|
||||
END
|
||||
|
||||
STRING F_D_SOTFIN 25
|
||||
BEGIN
|
||||
PROMPT 49 3 ""
|
||||
FLAGS "U"
|
||||
COPY USE F_D_SEZFIN
|
||||
INPUT DENSEZ F_D_SEZFIN
|
||||
INPUT DENSOT F_D_SOTFIN
|
||||
COPY DISPLAY F_D_SEZFIN
|
||||
COPY OUTPUT F_D_SEZFIN
|
||||
CHECKTYPE NORMAL
|
||||
HELP "Sottogruppo finale"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 77 5
|
||||
BEGIN
|
||||
PROMPT 1 5 "Categorie donatori"
|
||||
END
|
||||
|
||||
STRING F_CAT1 2
|
||||
BEGIN
|
||||
PROMPT 2 6 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT1
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@30" S0
|
||||
OUTPUT F_CAT1 CODTAB
|
||||
OUTPUT F_D_CAT1 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT1 30
|
||||
BEGIN
|
||||
PROMPT 8 6 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CAT2 2
|
||||
BEGIN
|
||||
PROMPT 2 7 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT2
|
||||
COPY DISPLAY F_CAT1
|
||||
OUTPUT F_CAT2 CODTAB
|
||||
OUTPUT F_D_CAT2 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT2 30
|
||||
BEGIN
|
||||
PROMPT 8 7 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CAT3 2
|
||||
BEGIN
|
||||
PROMPT 2 8 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT3
|
||||
COPY DISPLAY F_CAT1
|
||||
OUTPUT F_CAT3 CODTAB
|
||||
OUTPUT F_D_CAT3 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT3 30
|
||||
BEGIN
|
||||
PROMPT 8 8 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CAT4 2
|
||||
BEGIN
|
||||
PROMPT 40 6 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT4
|
||||
COPY DISPLAY F_CAT1
|
||||
OUTPUT F_CAT4 CODTAB
|
||||
OUTPUT F_D_CAT4 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT4 30
|
||||
BEGIN
|
||||
PROMPT 46 6 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CAT5 2
|
||||
BEGIN
|
||||
PROMPT 40 7 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT5
|
||||
COPY DISPLAY F_CAT1
|
||||
OUTPUT F_CAT5 CODTAB
|
||||
OUTPUT F_D_CAT5 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT5 30
|
||||
BEGIN
|
||||
PROMPT 46 7 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_CAT6 2
|
||||
BEGIN
|
||||
PROMPT 40 8 ""
|
||||
FLAGS "U"
|
||||
USE CTD
|
||||
INPUT CODTAB F_CAT6
|
||||
COPY DISPLAY F_CAT1
|
||||
OUTPUT F_CAT6 CODTAB
|
||||
OUTPUT F_D_CAT6 S0
|
||||
CHECKTYPE NORMAL
|
||||
WARNING "Codice non presente"
|
||||
HELP "Categoria di appartenenza"
|
||||
END
|
||||
|
||||
STRING F_D_CAT6 30
|
||||
BEGIN
|
||||
PROMPT 46 8 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
STRING F_PROVINCIA 5
|
||||
BEGIN
|
||||
PROMPT 2 11 "Statistica per la provincia di "
|
||||
FLAGS "U"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 9 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 9 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
@ -9,3 +9,4 @@
|
||||
#define ATSS_CATDON "CATDON"
|
||||
#define ATSS_NUMERO "NUMERO"
|
||||
#define ATSS_NUMERO2 "NUMERO2"
|
||||
#define ATSS_COM "COM"
|
Loading…
x
Reference in New Issue
Block a user