Patch level : 10.0 285

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Riportata la versione 3.2 patch 1358


git-svn-id: svn://10.65.10.50/trunk@18723 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-04-17 07:45:43 +00:00
parent ae84547dcd
commit d2e77b63fb
16 changed files with 598 additions and 114 deletions

View File

@ -1239,18 +1239,18 @@ bool TStampaPerCategorie::user_create()
add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ|SOG_CODSOT","",3)); add_cursor(new TSorted_cursor(_rel,"SOG_CODSEZ|SOG_CODSOT","",3));
_msk = new TMask("at2700a"); _msk = new TMask("at2700a");
TFilename filename = "filecat"; TFilename filename = "at2700";
filename.ext("dbf"); filename.ext("dbf");
TFilename filetrr = "filecat"; TFilename filetrr = "at2700";
filetrr.ext("trr"); filetrr.ext("trr");
if (!filetrr.custom_path()) if (!filetrr.custom_path())
{ {
filetrr = "recdesc/filecat"; filetrr = "recdesc/at2700";
filetrr.ext("trr"); filetrr.ext("trr");
} }
_file = new TExternisamfile(filename, filetrr, FALSE); _file = new TExternisamfile(filename, filetrr, FALSE);
TFilename namepers("filepers"); TFilename namepers("at2700");
namepers.ext("dbf"); namepers.ext("dbf");
if (namepers.exist()) if (namepers.exist())
_filepers = new TExternisamfile(namepers); _filepers = new TExternisamfile(namepers);

12
at/at2700.trr Executable file
View File

@ -0,0 +1,12 @@
1001
8
CODICE|3|8|0|Codice
COGNOME|1|25|0|Cognome
NOME|1|25|0|Nome
SPOSATA|1|25|0|Cognome da sposata
INDIRIZZO|1|30|0|Indirizzo
STRADARIO|1|5|0|Stradario
PRESSO|1|30|0|Presso
LOCALITA|1|80|0|CAP, Localita, Prov.
1
CODICE|X

View File

@ -593,11 +593,15 @@ bool TFrequenza::user_create()
_form_eti = new TEti_freq_form(etformato); _form_eti = new TEti_freq_form(etformato);
_stampa80 = config.get_bool("Stampa80"); _stampa80 = config.get_bool("Stampa80");
_form_let = new TEti_freq_form("ATLETTER"); _form_let = new TEti_freq_form("ATLETTER");
TFilename freqname = "file"; TFilename freqname = "at2900";
freqname.ext("dbf"); freqname.ext("dbf");
TFilename freqtrr = "file"; TFilename freqtrr = "at2900";
freqtrr.ext("trr"); freqtrr.ext("trr");
freqtrr.custom_path(); if (!freqtrr.custom_path())
{
freqtrr = "recdesc/at2900";
freqtrr.ext("trr");
}
_file = new TExternisamfile(freqname, freqtrr, FALSE); _file = new TExternisamfile(freqname, freqtrr, FALSE);
return TRUE; return TRUE;

13
at/at2900.trr Executable file
View File

@ -0,0 +1,13 @@
1001
9
CODICE|3|8|0|Codice
COGNOME|1|25|0|Cognome
NOME|1|25|0|Nome
NOMINATIVO|1|100|0|Nominativo x famiglie
SPOSATA|1|25|0|Cognome da sposata
INDIRIZZO|1|30|0|Indirizzo
STRADARIO|1|5|0|Stradario
PRESSO|1|30|0|Presso
LOCALITA|1|80|0|CAP, Localita, Prov.
1
CODICE

View File

@ -105,13 +105,14 @@ protected:
const TString& find_comune(const TRecordset& soggetti) const; const TString& find_comune(const TRecordset& soggetti) const;
const TString& find_dencom_nasc(const TString& codcom) const; const TString& find_dencom_nasc(const TString& codcom) const;
void crea_prima_riga(TEsporta_ON_recordset& csv, const TString& sezini, const TString& sezfin) const;
public: public:
void esporta_soggetti(const TMask& msk) const; void esporta_soggetti(const TMask& msk) const;
}; };
void TEsporta_ON_app::esporta_soggetti(const TMask& m) const void TEsporta_ON_app::crea_prima_riga(TEsporta_ON_recordset& csv, const TString& sezini, const TString& sezfin) const
{ {
TConfig config("at9600a.ini"); TConfig config("at9600a.ini");
// query su soggetti // query su soggetti
@ -130,20 +131,45 @@ void TEsporta_ON_app::esporta_soggetti(const TMask& m) const
// query su sezioni per stabilire cosa scrivere nel primo record // query su sezioni per stabilire cosa scrivere nel primo record
// elenco delle sezioni trasferite separate da ',' // elenco delle sezioni trasferite separate da ','
TString querysez; TString querysez;
querysez << "USE SEZIONI"; querysez << "USE SEZIONI\nSELECT CODSOT=''";
if (sezini.not_empty()) if (sezini.not_empty())
querysez << "\nFROM CODSEZ=\"" << sezini << "\""; querysez << "\nFROM CODSEZ=\"" << sezini << "\"";
if (sezini.not_empty()) if (sezini.not_empty())
querysez << "\nTO CODSEZ=\"" << sezfin << "\""; querysez << "\nTO CODSEZ=\"" << sezfin << "\"";
TISAM_recordset sezioni(querysez); TISAM_recordset sezioni(querysez);
TEsporta_ON_recordset csv;
// crea testata // crea testata
TToken_string ts("", ','); TToken_string ts("", ',');
for (bool oks = sezioni.move_first(); oks; oks = sezioni.move_next()) for (bool oks = sezioni.move_first(); oks; oks = sezioni.move_next())
ts.add(sezioni.get(SEZ_CODSEZ).as_string()); ts.add(sezioni.get(SEZ_CODSEZ).as_string());
csv.new_rec(ts); csv.new_rec(ts);
}
void TEsporta_ON_app::esporta_soggetti(const TMask& m) const
{
TConfig config("at9600a.ini");
//query su sezioni
const TString4 sezini = m.get(F_SEZINI);
const TString4 sotini = m.get(F_SOTINI);
const TString4 sezfin = m.get(F_SEZFIN);
const TString4 sotfin = m.get(F_SOTFIN);
TEsporta_ON_recordset csv;
//crea la prima stupida riga
crea_prima_riga(csv, sezini, sezfin);
// query su soggetti
TString query;
query << "USE SOGGETTI KEY 3";
const TDate data = m.get_date(F_DATA);
if (sezini.not_empty())
query << "\nFROM CODSEZ=\"" << sezini << "\"";
if (sezini.not_empty())
query << "\nTO CODSEZ=\"" << sezfin << "\"";
TISAM_recordset soggetti(query);
const int items = soggetti.items(); const int items = soggetti.items();
TProgind pi(items, "Estrazione soggetti...", true, true); TProgind pi(items, "Estrazione soggetti...", true, true);
@ -156,10 +182,12 @@ void TEsporta_ON_app::esporta_soggetti(const TMask& m) const
const TString4& catdon = soggetti.get(SOG_CATDON).as_string(); const TString4& catdon = soggetti.get(SOG_CATDON).as_string();
const TDate dataisc = soggetti.get(SOG_DATAISC).as_date(); const TDate dataisc = soggetti.get(SOG_DATAISC).as_date();
const bool passa = config.get_bool(catdon, "CATEGORIE"); const bool passa = config.get_bool(catdon, "CATEGORIE");
const TString4& codsez = soggetti.get(SOG_CODSEZ).as_string(); const TString4& codsez = soggetti.get(SOG_CODSEZ).as_string();
TString16 sez_on = config.get(codsez, "SEZIONI"); TString16 sez_on = config.get(codsez, "SEZIONI");
if (sez_on.empty()) if (sez_on.empty())
sez_on = codsez; sez_on = codsez;
//if ((catdon == "01" || catdon == "04") && (dataisc.empty() || dataisc <= data)) //if ((catdon == "01" || catdon == "04") && (dataisc.empty() || dataisc <= data))
if (passa && (dataisc.empty() || dataisc <= data)) if (passa && (dataisc.empty() || dataisc <= data))
{ {

View File

@ -50,4 +50,4 @@ AV=X
DA=X DA=X
[GENERALE] [GENERALE]
NOMEFILE = reggioe.txt NOMEFILE = rimini.txt

View File

@ -59,7 +59,7 @@ public:
void ripristina_trasfer(); void ripristina_trasfer();
void trasfer2tempfile(); void trasfer2tempfile();
long leggi_tabella_tras(); long leggi_tabella_tras();
void componi_path(TMask*); bool componi_path(const TMask&);
bool video_ripartenza(); bool video_ripartenza();
void ditta_ricevente(); void ditta_ricevente();
bool ripartenza(); bool ripartenza();
@ -131,23 +131,20 @@ bool TRic_archivi::destroy()
return TApplication::destroy(); return TApplication::destroy();
} }
void TRic_archivi::componi_path(TMask* msk) bool TRic_archivi::componi_path(const TMask& msk)
{ {
TFilename path = msk->get(F_PATHNAME); TFilename path = msk.get(F_PATHNAME);
const TString8 drive = msk->get(F_DRIVE); const TString& drive = msk.get(F_DRIVE);
// Inizio cazzata - da sostituire con _disketto = ::os_is_removable_drive(drive) // Inizio cazzata - da sostituire con _disketto = ::os_is_removable_drive(drive)
if (drive == "A:" || drive == "B:") _disketto = drive == "A:" || drive == "B:";
_disketto = TRUE;
else
_disketto = false;
// Fine cazzata // Fine cazzata
const int pos = path.find(':'); const int pos = path.find(':');
if (pos) if (pos)
path = path.mid(pos+1); path = path.mid(pos+1);
if (path.not_empty()) if (path.full())
{ {
_marker << drive << "\\" << path << "\\marker"; _marker << drive << "\\" << path << "\\marker";
_trasfer << drive << "\\" << path << "\\trasfer"; _trasfer << drive << "\\" << path << "\\trasfer";
@ -161,6 +158,8 @@ void TRic_archivi::componi_path(TMask* msk)
if (!_disketto) if (!_disketto)
_pathname << drive << "\\"; _pathname << drive << "\\";
} }
return _disketto;
} }
bool TRic_archivi::leggi_marker() bool TRic_archivi::leggi_marker()
@ -349,18 +348,16 @@ void TRic_archivi::main_loop()
if (_scelta == 'S') if (_scelta == 'S')
{ {
TMask maskera("cg6400b"); TMask maskera("cg6400b");
TMask* msk = &maskera; KEY tasto = maskera.run();
KEY tasto = msk->run();
if (tasto == K_ENTER) if (tasto == K_ENTER)
{ {
componi_path(msk); componi_path(maskera);
do do
{ {
if (_disketto) if (_disketto)
{ {
char drive = msk->get(F_DRIVE)[0]; char drive = maskera.get(F_DRIVE)[0];
if (yesno_box(FR("Inserire il dischetto %d nell' unita' %c"), _numdisk,drive)) if (yesno_box(FR("Inserire il dischetto %d nell' unita' %c"), _numdisk,drive))
{ {
if (!leggi_marker()) if (!leggi_marker())
@ -403,31 +400,28 @@ void TRic_archivi::main_loop()
_tras_file->close(); // Chiude il trasfer letto dalla directory della ditta _tras_file->close(); // Chiude il trasfer letto dalla directory della ditta
::remove(_trasf); ::remove(_trasf);
TFilename tab = _tras_file->path(_dittaric); TFilename tab = _tras_file->path(_dittaric);
TFilename tabcdx = tab; TFilename tabcdx = tab; tabcdx.add("ttab.cdx");
TFilename tabdbf = tab; TFilename tabdbf = tab; tabdbf.add("ttab.dbf");
tabcdx.add("ttab.cdx"); tabcdx.fremove();
tabdbf.add("ttab.dbf"); tabdbf.fremove();
::remove(tabcdx);
::remove(tabdbf);
} }
} }
else else
if (_scelta == 'P') if (_scelta == 'P')
{ {
TMask maskera("cg6400b"); TMask maskera("cg6400b");
TMask* msk = &maskera;
KEY tasto = msk->run(); KEY tasto = maskera.run();
if (tasto == K_ENTER) if (tasto == K_ENTER)
{ {
componi_path(msk); componi_path(maskera);
do do
{ {
if (_disketto) if (_disketto)
{ {
char drive = msk->get(F_DRIVE)[0]; char drive = maskera.get(F_DRIVE)[0];
if (yesno_box(FR("Inserire il dischetto %d nell' unita' %c"), _numdisk,drive)) if (yesno_box(FR("Inserire il dischetto %d nell' unita' %c"), _numdisk,drive))
{ {
if (!leggi_marker_rep()) if (!leggi_marker_rep())

View File

@ -568,6 +568,7 @@ int TTransfer_file::lenrec(char sigla)
return lenrec(i); return lenrec(i);
} }
/*
long TTransfer_file::start(char sigla) long TTransfer_file::start(char sigla)
{ {
const int i = num(sigla); const int i = num(sigla);
@ -576,32 +577,30 @@ long TTransfer_file::start(char sigla)
long TTransfer_file::start(int i) long TTransfer_file::start(int i)
{ {
if (i == 0) long s = 1;
return 1; if (i > 0)
else
{ {
TToken_string& data = (TToken_string&)_index[i-1]; TToken_string& data = (TToken_string&)_index[i-1];
return data.get_long(1) + 1; s += data.get_long(1);
} }
} return s;
long TTransfer_file::end(int i)
{
TToken_string& data = (TToken_string&)_index[i];
return data.get_long(4);
} }
long TTransfer_file::rec(int i) long TTransfer_file::rec(int i)
{ {
long rec = 1; long rec = 1;
if (i > 0) if (i > 0)
{ {
TToken_string& data = (TToken_string&)_index[i-1]; TToken_string& data = (TToken_string&)_index[i-1];
rec = (data.get_long(1)) + 1; rec += data.get_long(1);
} }
return rec; return rec;
}*/
long TTransfer_file::end(int i)
{
TToken_string& data = (TToken_string&)_index[i];
return data.get_long(4);
} }
int TTransfer_file::num(char sigla) int TTransfer_file::num(char sigla)
@ -658,7 +657,7 @@ void TTransfer_file::readat(long recnum)
int TTransfer_file::read_rec_trasfer(long numrec, int size) int TTransfer_file::read_rec_trasfer(long numrec, int size)
{ {
go2rec(numrec); go2rec(numrec);
const word letti = fread((char*)(const char*)_record,sizeof(char),size,_trasfer); const size_t letti = fread(_record.get_buffer(), sizeof(char), size, _trasfer);
return letti; return letti;
} }
@ -706,15 +705,14 @@ void TTransfer_file::put(const char* val, const char* file, int fieldnum,long re
int TTransfer_file::write(long numrec, int size) int TTransfer_file::write(long numrec, int size)
{ {
go2rec(numrec); go2rec(numrec);
const word scritti = fwrite((char*)(const char*)_record,sizeof(char),size,_trasfer); const size_t scritti = fwrite(_record,sizeof(char),size,_trasfer);
return scritti; return scritti;
} }
void TTransfer_file::writeat(const char* str,int size,int fieldnum,const char* file) void TTransfer_file::writeat(const char* str,int size,int fieldnum,const char* file)
{ {
go2field(fieldnum,file); go2field(fieldnum,file);
const size_t nscritti = fwrite (str,1,size,_trasfer);
const int nscritti = fwrite (str,1,size,_trasfer);
} }
void TTransfer_file::writeat(const char* str,int size,int fieldnum,const char* file, const long nrec) void TTransfer_file::writeat(const char* str,int size,int fieldnum,const char* file, const long nrec)
@ -868,6 +866,7 @@ void TTransfer_file::annulla_classi(int g, int c,bool conto)
} }
} }
/*
// La gogna e' troppo poco: inguardabile! // La gogna e' troppo poco: inguardabile!
// Pointer e reference ben conditi con scansioni inutili della tabella ESC! // Pointer e reference ben conditi con scansioni inutili della tabella ESC!
int TTransfer_file::dataes(const TDate& d, int* prevesc, TDate& finesp) int TTransfer_file::dataes(const TDate& d, int* prevesc, TDate& finesp)
@ -887,6 +886,7 @@ int TTransfer_file::dataes(const TDate& d, int* prevesc, TDate& finesp)
} }
return 0; return 0;
} }
*/
char TTransfer_file::TipoConto(int g, int c) char TTransfer_file::TipoConto(int g, int c)
{ {
@ -2032,21 +2032,12 @@ int TTransfer_file::ultima_riga_partita(TString& record)
void TTransfer_file::write_tmp_movSC(TString& record) void TTransfer_file::write_tmp_movSC(TString& record)
{ {
TString annostr;
_nregSC = atol(record.sub(2,8)); _nregSC = atol(record.sub(2,8));
_numrigSC = atoi(record.sub(8,10)); _numrigSC = atoi(record.sub(8,10));
TString app (record.sub(26,28)); _annoSC = 2000 + atoi(record.sub(26,28));
int anno = atoi(app);
if (anno < 80)
annostr = "20";
else
annostr = "19";
annostr << app;
_annoSC = atoi(annostr);
_numpartSC = record.sub(28,35); _numpartSC = record.sub(28,35);
int tipomov = atoi(record.sub(37,38)); const int tipomov = atoi(record.sub(37,38));
if (_nregSC != _nregSC_p || _numrigSC != _numrigSC_p || if (_nregSC != _nregSC_p || _numrigSC != _numrigSC_p ||
_annoSC != _annoSC_p || _numpartSC != _numpartSC_p) _annoSC != _annoSC_p || _numpartSC != _numpartSC_p)
@ -2199,9 +2190,9 @@ void TTransfer_file::partita(TString& record)
do do
{ {
int from = trc.from(key); const int from = trc.from(key);
int to = trc.to(key); const int to = trc.to(key);
TString16 fname = trc.field_name(key); const TString16 fname = trc.field_name(key);
TString field = record.sub(from-1,to); TString field = record.sub(from-1,to);
int flag = trc.flag(key); int flag = trc.flag(key);
int dec = trc.flag_bis(key); int dec = trc.flag_bis(key);
@ -2310,7 +2301,7 @@ void TTransfer_file::partita(TString& record)
if (flag == 2) if (flag == 2)
{ {
TString f = converti(field,false); const TString& f = converti(field,false);
_deppart->put(fname,f); _deppart->put(fname,f);
} }
else else
@ -2367,17 +2358,17 @@ void TTransfer_file::calcola_importo(TString& record)
_tpart->readat(rec); _tpart->readat(rec);
} }
// Scrive scadenza da record di sistema a record di file temporaneo
void TTransfer_file::scadenza(TString& record) void TTransfer_file::scadenza(TString& record)
{ {
const TMappa_trc& trc = mappa(); const TMappa_trc& trc = mappa();
TString sigla,key,app_imp,app_val; TString key,app_imp,app_val;
int numfield = 150; int numfield = 150;
TString tipoc; TString tipoc;
static bool prima_volta = true; static bool prima_volta = true;
int tipomov = atoi(record.sub(37,38)); int tipomov = atoi(record.sub(37,38));
const TString4 sigla = record.mid(0,2);
sigla = record.mid(0,2);
key.format("%2s%d", (const char*)sigla,numfield); key.format("%2s%d", (const char*)sigla,numfield);
if (trc.is_key((const char *) key)) if (trc.is_key((const char *) key))
@ -2388,14 +2379,14 @@ void TTransfer_file::scadenza(TString& record)
do do
{ {
int from = trc.from(key); const int from = trc.from(key);
int to = trc.to(key); const int to = trc.to(key);
TString fname = trc.field_name(key); const TString16 fname = trc.field_name(key);
TString field = record.sub(from-1,to); TString field = record.sub(from-1,to);
int flag = trc.flag(key); int flag = trc.flag(key);
int dec = trc.flag_bis(key); int dec = trc.flag_bis(key);
TRecfield campo (*_depscad,fname); const TRecfield campo (*_depscad,fname);
if (campo.type() == _realfld) if (campo.type() == _realfld)
{ {
negativo(field); negativo(field);
@ -3182,21 +3173,21 @@ bool TTransfer_file::fcopytemp(const char* orig, const char* dest)
_tmppart << path(); _tmppart << path();
_tmppart.add(TEMP_PART); _tmppart.add(TEMP_PART);
_tpart = new TIsamtempfile(LF_PARTITE, _tmppart, true); _tpart = new TIsamtempfile(LF_PARTITE, _tmppart, true);
//_deppart = new TRectype(LF_PARTITE);
trec.get(LF_PARTITE); trec.get(LF_PARTITE);
_deppart = new TExtrectype (trec); _deppart = new TExtrectype (trec);
_tmpscad = "%"; _tmpscad = "%";
_tmpscad << path(); _tmpscad << path();
_tmpscad.add(TEMP_SCAD); _tmpscad.add(TEMP_SCAD);
_tscad = new TIsamtempfile(LF_SCADENZE, _tmpscad, true); _tscad = new TIsamtempfile(LF_SCADENZE, _tmpscad, true);
//_depscad = new TRectype (LF_SCADENZE);
trec.get(LF_SCADENZE); trec.get(LF_SCADENZE);
_depscad = new TExtrectype (trec); _depscad = new TExtrectype (trec);
_tmppagsca = "%"; _tmppagsca = "%";
_tmppagsca << path(); _tmppagsca << path();
_tmppagsca << "\\" << TEMP_PAGSCA; _tmppagsca << "\\" << TEMP_PAGSCA;
_tpagsca = new TIsamtempfile(LF_PAGSCA, _tmppagsca, true); _tpagsca = new TIsamtempfile(LF_PAGSCA, _tmppagsca, true);
//_deppagsca = new TRectype (LF_PAGSCA);
trec.get(LF_PAGSCA); trec.get(LF_PAGSCA);
_deppagsca = new TExtrectype (trec); _deppagsca = new TExtrectype (trec);
nrec_salda = atol(nrec.mid(pos*6,6)); nrec_salda = atol(nrec.mid(pos*6,6));
@ -3450,7 +3441,6 @@ void TTransfer_file::scrivi_IVA(long nrec)
_ttab->zero(); _ttab->zero();
_ttab->put("CODTAB", "U1"); _ttab->put("CODTAB", "U1");
for (int err = _ttab->read(_isgteq); err == NOERR; err = _ttab->next()) for (int err = _ttab->read(_isgteq); err == NOERR; err = _ttab->next())
{ {
const TString& trec = _ttab->get("CODTAB").left(2); const TString& trec = _ttab->get("CODTAB").left(2);
@ -3462,6 +3452,7 @@ void TTransfer_file::scrivi_IVA(long nrec)
delete _prog; delete _prog;
} }
// Tarsferimento saldaconto da sistema
void TTransfer_file::scrivi_SC(long nrec) void TTransfer_file::scrivi_SC(long nrec)
{ {
TString buffer(sizeT); TString buffer(sizeT);
@ -3595,15 +3586,14 @@ bool TTransfer_file::fcopytemp_PC(const char* orig, const char* dest)
_tmppagsca.add(TEMP_PAGSCA); _tmppagsca.add(TEMP_PAGSCA);
_tpart = new TIsamtempfile(LF_PARTITE, _tmppart, true); _tpart = new TIsamtempfile(LF_PARTITE, _tmppart, true);
//_deppart = new TRectype (LF_PARTITE);
trec.get(LF_PARTITE); trec.get(LF_PARTITE);
_deppart = new TExtrectype (trec); _deppart = new TExtrectype (trec);
_tscad = new TIsamtempfile(LF_SCADENZE, _tmpscad, true); _tscad = new TIsamtempfile(LF_SCADENZE, _tmpscad, true);
//_depscad = new TRectype (LF_SCADENZE);
trec.get(LF_SCADENZE); trec.get(LF_SCADENZE);
_depscad = new TExtrectype (trec); _depscad = new TExtrectype (trec);
_tpagsca = new TIsamtempfile(LF_PAGSCA, _tmppagsca, true); _tpagsca = new TIsamtempfile(LF_PAGSCA, _tmppagsca, true);
//_deppagsca = new TRectype (LF_PAGSCA);
trec.get(LF_PAGSCA); trec.get(LF_PAGSCA);
_deppagsca = new TExtrectype (trec); _deppagsca = new TExtrectype (trec);
} }
@ -4621,7 +4611,7 @@ static void align_numpart(char tipocf, TString& numpart)
numpart.trim(); numpart.trim();
} }
void TTransfer_file::write_partite(TString& record) void TTransfer_file::write_partite(const TString& record)
{ {
TString sigla,key; TString sigla,key;
int numfield = 1; int numfield = 1;
@ -4815,13 +4805,15 @@ void TTransfer_file::write_partite(TString& record)
_prog->addstatus(1); _prog->addstatus(1);
} }
void TTransfer_file::write_scadenze(TString& record) // Trasferisce record scadenze da record trasfer PC a tscad.dbf
void TTransfer_file::write_scadenze(const TString& record)
{ {
TString sigla,key;
int numfield = 1;
const TMappa_trc& trc = mappa(); const TMappa_trc& trc = mappa();
sigla = record.mid(0,2); const TString4 sigla = record.mid(0,2);
int numfield = 1;
TString8 key;
key.format("%2s%d", (const char*)sigla,numfield); key.format("%2s%d", (const char*)sigla,numfield);
_depscad->zero(); _depscad->zero();
@ -4916,7 +4908,7 @@ void TTransfer_file::write_scadenze(TString& record)
if (flag == 2) if (flag == 2)
{ {
TString f = converti(field,true); TString80 f = converti(field,true);
_depscad->put(fname,f); _depscad->put(fname,f);
} }
else else
@ -4946,7 +4938,7 @@ void TTransfer_file::write_scadenze(TString& record)
_prog->addstatus(1); _prog->addstatus(1);
} }
void TTransfer_file::write_pagsca(TString& record) void TTransfer_file::write_pagsca(const TString& record)
{ {
TString sigla,key; TString sigla,key;
int numfield = 1; int numfield = 1;
@ -5109,17 +5101,18 @@ void TTransfer_file::write_pagsca(TString& record)
bool TMappa_trc::leggi_modulo(const char* tracciato) bool TMappa_trc::leggi_modulo(const char* tracciato)
{ {
TFilename trcini(tracciato); trcini.custom_path();
TScanner s(trcini);
TString16 key; TString16 key;
TString4 sigla; TString4 sigla;
TScanner s(tracciato);
while (s.ok()) while (s.ok())
{ {
const TString& line = s.line(); const TString& line = s.line();
if (line[0] == '#') continue; //Perche' e' un commento if (line[0] == '#') continue; //Perche' e' un commento
TToken_string* record = new TToken_string(line); TToken_string* record = new TToken_string(line);
sigla = record->get(0); record->get(0, sigla);
long numrec = record->get_long(1); const int numrec = record->get_int(1);
key.format("%2s%d", (const char*)sigla,numrec); key.format("%2s%d", (const char*)sigla,numrec);
add(key, record); add(key, record);

View File

@ -99,7 +99,6 @@ class TRic_recfield : public TObject
virtual ~TRic_recfield() {} virtual ~TRic_recfield() {}
}; };
class TMappa_trc : public TAssoc_array class TMappa_trc : public TAssoc_array
{ {
public : public :
@ -111,9 +110,6 @@ public :
const char* field_name (const char* key) const; const char* field_name (const char* key) const;
int flag (const char* key) const; int flag (const char* key) const;
int flag_bis (const char* key) const; int flag_bis (const char* key) const;
TMappa_trc() {};
virtual ~TMappa_trc() {}
}; };
class TTransfer_file class TTransfer_file
@ -246,9 +242,9 @@ private:
void write_righe_contabili(const TString& record); void write_righe_contabili(const TString& record);
void write_righe_IVA(TString& record); void write_righe_IVA(TString& record);
// Funzioni utilizzate per la ricezione Saldaconto da PC // Funzioni utilizzate per la ricezione Saldaconto da PC
void write_partite(TString& record); void write_partite(const TString& record);
void write_scadenze(TString& record); void write_scadenze(const TString& record);
void write_pagsca(TString& record); void write_pagsca(const TString& record);
int annoes_PC(const TString& data) const; int annoes_PC(const TString& data) const;
void causale(TString& cau,TString& tipo,TString& descr); void causale(TString& cau,TString& tipo,TString& descr);
@ -335,10 +331,10 @@ public:
long nrec(int i); // Ritorna il numero di record di quel file long nrec(int i); // Ritorna il numero di record di quel file
int lenrec(int i); // Ritorna la lunghezza del record del trasfer corrispondente a quel file int lenrec(int i); // Ritorna la lunghezza del record del trasfer corrispondente a quel file
int lenrec(char sigla); // Ritorna la stessa cosa ma con la sigla invece del numero int lenrec(char sigla); // Ritorna la stessa cosa ma con la sigla invece del numero
long start(int i); // Inizio del file numero i // long start(int i); // Inizio del file numero i
long start(char sigla); // Inizio del file sigla long start(char sigla); // Inizio del file sigla
long end(int i); // Ritorna la posizione in byte corrispondente alla fine di quel file all'interno del trasfer long end(int i); // Ritorna la posizione in byte corrispondente alla fine di quel file all'interno del trasfer
long rec(int i); //long rec(int i);
long tot_rec() const { return _tot_rec; } long tot_rec() const { return _tot_rec; }

View File

@ -340,6 +340,10 @@ B1|160|116|116|29|ULTCLASS|||
B1|161|117|127|29|IMPORTO||| B1|161|117|127|29|IMPORTO|||
B1|162|128|140|29|IMPORTOVAL|3|3| B1|162|128|140|29|IMPORTOVAL|3|3|
B1|163|141|146|29|DATASCAD|2|| B1|163|141|146|29|DATASCAD|2||
B1|164|201|205|29|CODABIPR|||
B1|165|206|210|29|CODCABPR|||
B1|166|211|215|29|CODABI|||
B1|167|216|220|29|CODCAB|||
# #
# Tracciato Pagamenti scadenze # Tracciato Pagamenti scadenze
# #
@ -355,3 +359,7 @@ B1|208|153|153|30|SEZ|||
B1|209|117|127|30|IMPORTO||| B1|209|117|127|30|IMPORTO|||
B1|210|128|140|30|IMPORTOVAL|3|3| B1|210|128|140|30|IMPORTOVAL|3|3|
B1|211|1|1|30|IMP||| B1|211|1|1|30|IMP|||
B1|164|201|205|30|CODABIPR|||
B1|165|206|210|30|CODCABPR|||
B1|166|211|215|30|CODABI|||
B1|167|216|220|30|CODCAB|||

View File

@ -80,6 +80,7 @@ Trasferimento dati contabili
Trasferimento commesse Trasferimento commesse
Importazione fatture di acquisto Importazione fatture di acquisto
Importazione fatture di vendita Importazione fatture di vendita
Importazione spese
PS0816 AeC PS0816 AeC
Caricamento listino personalizzato per AeC. Caricamento listino personalizzato per AeC.

View File

@ -11,6 +11,7 @@ int main(int argc, char** argv)
case 1: ps0713200(argc, argv); break; //Trasferimento commesse case 1: ps0713200(argc, argv); break; //Trasferimento commesse
case 2: ps0713300(argc, argv); break; //Importazione fatture di acquisto per ATS case 2: ps0713300(argc, argv); break; //Importazione fatture di acquisto per ATS
case 3: ps0713400(argc, argv); break; //Importazione fatture di vendita per ATS case 3: ps0713400(argc, argv); break; //Importazione fatture di vendita per ATS
case 4: ps0713500(argc, argv); break; //Importazione spese per ATS
default: default:
ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS ps0713100(argc, argv); break; //Trasferimento dati contabili per ATS
} }

View File

@ -2,3 +2,4 @@ int ps0713100(int argc, char* argv[]);
int ps0713200(int argc, char* argv[]); int ps0713200(int argc, char* argv[]);
int ps0713300(int argc, char* argv[]); int ps0713300(int argc, char* argv[]);
int ps0713400(int argc, char* argv[]); int ps0713400(int argc, char* argv[]);
int ps0713500(int argc, char* argv[]);

314
ps/ps0713500.cpp Executable file
View File

@ -0,0 +1,314 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <reputils.h>
#include <utility.h>
#include <relation.h>
#include <reprint.h>
#include <textset.h>
#include <recarray.h>
#include "tabutil.h"
#include "ps0713.h"
#include "ps0713500a.h"
#include <rcausali.h>
#include <clifo.h>
#include <mov.h>
#include <rmov.h>
///////////////////////////////////////////////////////////
// TAutomask
///////////////////////////////////////////////////////////
class TImportaSpese_mask : public TAutomask
{
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
TImportaSpese_mask();
};
TImportaSpese_mask::TImportaSpese_mask() :TAutomask ("ps0713500a")
{
}
bool TImportaSpese_mask::on_field_event(TOperable_field& f, TField_event e, long jolly)
{
switch (f.dlg())
{
//giochetto per avere la lista dei files validi nella directory di trasferimento!
case F_NAME:
if (e == fe_button)
{
TArray_sheet as(-1, -1, 72, 20, TR("Selezione file"),
"File@32");
TFilename path = get(F_PATH);
path.add("*.csv"); //files delle testate
list_files(path, as.rows_array());
TFilename name;
FOR_EACH_ARRAY_ROW(as.rows_array(), i, row)
{
name = *row;
*row = name.name();
}
if (as.run() == K_ENTER)
{
f.set(as.row(as.selected()));
}
}
break;
default:
break;
}
return true;
}
///////////////////////////////////////////////
//// CLASSI DERIVATE PER IMPORTAZIONE DATI ////
///////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// Recordset specifici per i dati da trasferire
/////////////////////////////////////////////////////////////
//Piano dei conti
class TImporta_spese_recordset : public TCSV_recordset
{
protected:
virtual TRecnotype new_rec(const char* buf = NULL);
public:
TImporta_spese_recordset(const char * fileName);
};
TRecnotype TImporta_spese_recordset::new_rec(const char* buf)
{
TToken_string str(256,'\t'); //nuovo record tab separator
if(buf && *buf)
{
bool apici=false;
for (const char* c = buf; *c ; c++)
{
if (*c == '"')
{
apici = !apici;
}
else
{
if (*c == ',')
{
if (!apici)
str << str.separator();
else
str << *c;
}
else
str << *c;
}
}
}
const TRecnotype n = TText_recordset::new_rec(str);
if (n >= 0)
row(n).separator(str.separator());
return n;
}
TImporta_spese_recordset::TImporta_spese_recordset(const char * fileName)
: TCSV_recordset("CSV(,)")
{
load_file(fileName);
}
///////////////////////////////////////
// TSkeleton_application
///////////////////////////////////////
class TSpeseCSV : public TSkeleton_application
{
virtual bool check_autorization() const {return false;}
virtual const char * extra_modules() const {return "ve";}
protected:
void chiudi_movimento(TConfig& configfile, TImporto& tot_doc, TDate& data);
public:
virtual void main_loop();
bool transfer(const TMask& msk);
TSpeseCSV() {};
};
const char* const nomeini = "ps0713500ats.ini"; //non si conosce il perchè
void TSpeseCSV::chiudi_movimento(TConfig& configfile, TImporto& tot_doc, TDate& data)
{
//aggiungo i campi che mancano in testata
configfile.set_paragraph("23");
configfile.set(MOV_DATAREG, data);
configfile.set(MOV_DATADOC, data);
configfile.set(MOV_DATACOMP, data);
tot_doc.normalize();
//aggiungo la prima riga che bilancia le righe successive
TString8 paragraph;
paragraph.format("%d,%d",LF_RMOV,1);
configfile.set_paragraph(paragraph);
configfile.set(RMV_IMPORTO,tot_doc.valore().string());
configfile.set(RMV_SEZIONE,tot_doc.sezione());
configfile.set_paragraph("Transaction");
TString app;
app << "cg2 -0 -i" << nomeini;
TExternal_app primanota(app);
primanota.run();
}
bool TSpeseCSV::transfer(const TMask& msk)
{
//genero il nome del file da caricare
TFilename name = msk.get(F_PATH);
name.add(msk.get(F_NAME));
TImporta_spese_recordset s(name);
TProgind pi(s.items(),"Importazione spese in corso ...",true,true);
xvt_fsys_removefile(nomeini);
TConfig configfile (nomeini, "Transaction"); //setto il paragrafo [Transaction] del file ini
TDate dataold, data;
int nriga = 2;
TImporto tot_doc;
const TRectype& causale = cache().get(LF_RCAUSALI, msk.get(F_CODCAU));
for (bool ok=s.move_first();ok;ok=s.move_next())
{
if (!pi.addstatus(1))
break;
TString80 tmp;
//importo
tmp = s.get(2).as_string();
//evito di analizzare eventuali righe vuote
if (tmp.blank())
continue;
tmp.replace(',','.');
tmp.strip("\"");
const real imp = tmp;
if (!imp.is_zero())
{
//codice commessa
tmp = s.get(0).as_string();
tmp.strip("\"");
const TRectype& commessa = cache().get("CMS", tmp);
//data
tmp = s.get(1).as_string();
tmp.strip("\"");
data.set_day(atoi(tmp.mid(0,2)));
data.set_month(atoi(tmp.mid(3,2)));
data.set_year(atoi(tmp.mid(6,4)));
//descrizione
tmp = s.get(3).as_string();
tmp.strip("\"");
if(data != dataold)
{
if (dataold.ok())
chiudi_movimento(configfile, tot_doc, data);
TFilename filename(nomeini);
filename.fremove();
configfile.set_paragraph("Transaction");
configfile.set("Action","INSERT");
configfile.set("Mode","AUTO");
configfile.set_paragraph("23"); //setto il paragrafo [23] del file ini (testata)
configfile.set(MOV_CODCAUS, causale.get(RCA_CODCAUS));
configfile.set_paragraph("24,1");
configfile.set(RMV_NUMRIG,1);
configfile.set(RMV_GRUPPO, causale.get(RCA_GRUPPO));
configfile.set(RMV_CONTO, causale.get(RCA_CONTO));
configfile.set(RMV_SOTTOCONTO, causale.get(RCA_SOTTOCONTO));
tot_doc.reset();
nriga = 2;
dataold = data;
}
TImporto importo('D', imp);
importo.normalize();
tot_doc -= importo;
TString8 paragraph;
paragraph.format("%d,%d",LF_RMOV,nriga++);
configfile.set_paragraph(paragraph);
configfile.set(RMV_IMPORTO,importo.valore().string());
configfile.set(RMV_SEZIONE,importo.sezione());
configfile.set(RMV_CODCMS,commessa.get("CODTAB"));
configfile.set(RMV_DATAREG,data);
configfile.set(RMV_GRUPPO,commessa.get("I1"));
configfile.set(RMV_CONTO,commessa.get("I2"));
configfile.set(RMV_SOTTOCONTO,commessa.get("I3"));
}
}
chiudi_movimento(configfile, tot_doc, data);
return true;
}
void TSpeseCSV::main_loop()
{
TImportaSpese_mask msk;
if (msk.run() == K_ENTER)
{
if (transfer(msk))
{
message_box(TR("Importazione spese completata"));
xvt_fsys_removefile(nomeini);
}
}
}
TSpeseCSV& app() { return (TSpeseCSV&) main_app(); }
int ps0713500 (int argc, char* argv[])
{
TSpeseCSV main_app;
main_app.run(argc, argv, TR("Importazione Spese"));
return true;
}

8
ps/ps0713500a.h Executable file
View File

@ -0,0 +1,8 @@
//campi maschera ps0713400a
#define F_CODITTA 101
#define F_RAGSOC 102
#define F_PATH 103
#define F_NAME 104
#define F_CODCAU 105
#define F_DESCAU 106

111
ps/ps0713500a.uml Executable file
View File

@ -0,0 +1,111 @@
#include "ps0713500a.h"
TOOLBAR "" 0 20 0 2
BUTTON DLG_ELABORA 10 2
BEGIN
PICTURE BMP_ELABORA
MESSAGE EXIT,K_ENTER
PROMPT -12 -1 ""
END
BUTTON DLG_QUIT 10 2
BEGIN
PROMPT -22 -1 ""
END
STRING DLG_PROFILE 50
BEGIN
PROMPT 9 -12 "Profilo "
PSELECT
FLAGS "H"
END
ENDPAGE
PAGE "Inserimento fatture" 0 0 0 -3
GROUPBOX DLG_NULL 90 3
BEGIN
PROMPT 2 1 "@bDitta corrente"
END
NUMBER F_CODITTA 5
BEGIN
PROMPT 3 2 "Codice "
FLAGS "FD"
USE LF_NDITTE
INPUT CODDITTA F_CODITTA
OUTPUT F_RAGSOC RAGSOC
CHECKTYPE REQUIRED
END
STRING F_RAGSOC 50
BEGIN
PROMPT 23 2 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 90 4
BEGIN
PROMPT 2 4 "@bSorgente"
END
STRING F_PATH 256 39
BEGIN
PROMPT 3 5 "Cartella "
DSELECT
CHECKTYPE REQUIRED
FIELD ComInPath
FLAGS "M"
END
STRING F_NAME 18
BEGIN
PROMPT 3 6 "File (*.csv) "
FIELD ComInFile
FLAGS "B"
CHECKTYPE REQUIRED
END
GROUPBOX DLG_NULL 90 3
BEGIN
PROMPT 2 8 "@bCausale"
END
STRING F_CODCAU 3
BEGIN
PROMPT 3 9 "Causale "
FIELD CODCAU
FLAGS "UZ"
USE LF_CAUSALI
INPUT CODCAUS F_CODCAU
DISPLAY "Cod." CODCAUS
DISPLAY "Descrizione@50" DESCR
DISPLAY "Documento" TIPODOC
DISPLAY "Registro" REG
DISPLAY "Tipo movimento" TIPOMOV
OUTPUT F_CODCAU CODCAUS
OUTPUT F_DESCAU DESCR
CHECKTYPE REQUIRED
END
STRING F_DESCAU 50
BEGIN
PROMPT 25 9 "Descrizione "
FIELD DESCR
USE LF_CAUSALI KEY 2
INPUT DESCR F_DESCAU
DISPLAY "Descrizione @50" DESCR
DISPLAY "Cod." CODCAUS
DISPLAY "Documento" TIPODOC
DISPLAY "Registro" REG
DISPLAY "Movimento" TIPOMOV
COPY OUTPUT F_CODCAU
END
ENDPAGE
ENDMASK