Patch level :

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :


git-svn-id: svn://10.65.10.50/branches/R_10_00@22223 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2011-06-07 10:04:39 +00:00
parent 5ea1fa9367
commit 9fb2626891
14 changed files with 398 additions and 237 deletions

View File

@ -56,7 +56,7 @@ bool THA_table_app::get_next_key(TToken_string& key)
const TString& codart = curr_mask().get(F_CODART);
if (codart.full())
{
const TString& codtab = get_next_att_key(codart);
const TString& codtab = hd_get_next_att_key(codart);
//riempie la token_string con i dati richiesti
key.add(F_CODART);

View File

@ -30,11 +30,13 @@
//==============================
//pagina 2
//esportazione dati
#define F_OUTPUT_PATH 250
#define F_OU_CARDOC_NUM 251
#define F_OU_CARDOC_TIP 252
#define F_OU_CARDOC_STA 253
#define F_OU_BARCODE_TIP 254
#define F_OUTPUT_PATH 250
#define F_CONCENTRATORE_PATH 251
#define F_TRANSACTION_PATH 252
#define F_OU_CARDOC_NUM 253
#define F_OU_CARDOC_TIP 254
#define F_OU_CARDOC_STA 255
#define F_OU_BARCODE_TIP 256
//importazione dati
#define F_INPUT_PATH 260

View File

@ -327,12 +327,12 @@ PAGE "Trasferimenti" 0 2 0 0
GROUPBOX DLG_NULL 76 7
BEGIN
PROMPT 1 1 "@bEsportazione"
PROMPT 1 0 "@bEsportazione"
END
STRING F_OUTPUT_PATH 255 39
STRING F_OUTPUT_PATH 255 40
BEGIN
PROMPT 2 2 "Percorso files .txt da esportare "
PROMPT 2 1 "Server: percorso files .txt "
DSELECT
FLAGS "M"
CHECKTYPE REQUIRED
@ -340,14 +340,34 @@ BEGIN
FIELD OutputPath
END
GROUPBOX DLG_NULL 74 3
STRING F_CONCENTRATORE_PATH 255 40
BEGIN
PROMPT 2 3 "@bDocumenti di carico"
PROMPT 2 2 "Server: Percorso concentratore "
DSELECT
FLAGS "M"
CHECKTYPE REQUIRED
WARNING "Selezionare una cartella valida!"
FIELD ConcentratorePath
END
STRING F_TRANSACTION_PATH 255 40
BEGIN
PROMPT 2 3 "Client: Percorso .ini transaz. "
DSELECT
FLAGS "M"
CHECKTYPE REQUIRED
WARNING "Selezionare una cartella valida!"
FIELD TransactionPath
END
GROUPBOX DLG_NULL 44 3
BEGIN
PROMPT 2 4 "@bDocumenti di carico"
END
STRING F_OU_CARDOC_NUM 4
BEGIN
PROMPT 3 4 "Numerazione "
PROMPT 3 5 "Numerazione "
USE %NUM
INPUT CODTAB F_OU_CARDOC_NUM
DISPLAY "Codice@8" CODTAB
@ -359,7 +379,7 @@ END
STRING F_OU_CARDOC_TIP 4
BEGIN
PROMPT 23 4 "Tipo "
PROMPT 23 5 "Tipo "
USE %TIP
INPUT CODTAB F_OU_CARDOC_TIP
DISPLAY "Codice" CODTAB
@ -372,7 +392,7 @@ END
STRING F_OU_CARDOC_STA 1
BEGIN
PROMPT 36 4 "Stato "
PROMPT 36 5 "Stato "
USE %STD
INPUT CODTAB F_OU_CARDOC_STA
DISPLAY "Codice" CODTAB
@ -385,7 +405,7 @@ END
LISTBOX F_OU_BARCODE_TIP 10
BEGIN
PROMPT 2 6 "Tipo di barcode "
PROMPT 47 5 "Tipo di barcode "
ITEM "N|Normale"
ITEM "8|EAN8 "
ITEM "1|EA13 "

View File

@ -1,5 +1,6 @@
#include <applicat.h>
#include <automask.h>
#include <execp.h>
#include <progind.h>
#include <comuni.h>
@ -8,7 +9,7 @@
#include "../ve/condv.h"
#include "halib.h"
#include "ha1250.h"
#include "ha1200a.h"
///////////////////////////////////////////////////////////
@ -59,20 +60,18 @@ bool TFile2Txt_mask::on_field_event(TOperable_field& o, TField_event e, long jol
TFile2Txt_mask::TFile2Txt_mask() : TAutomask ("ha1200a")
{
TConfig config(CONFIG_DITTA, "ha");
const TString& path = config.get("OutputPath");
set(F_PATH, path);
}
///////////////////////////////////////
// TSkeleton_application
///////////////////////////////////////
class TFile2Txt : public TSkeleton_application
class TFile2Txt : public THardy_transaction
{
TFilename _output_dir;
protected:
void elabora(const TMask& mask);
virtual void elabora(const TMask& mask);
virtual TMask* create_mask() const;
virtual const char* fake_trans_file() const;
bool genera_agenti_txt();
bool genera_clienti_txt(const long da_codcli);
@ -93,15 +92,14 @@ protected:
TFilename genera_path(const TString& prefisso);
public:
virtual void main_loop();
virtual bool create();
};
TFilename TFile2Txt::genera_path(const TString& prefisso)
{
TFilename output_path;
output_path = _output_dir;
output_path = _output_path;
output_path.add(prefisso);
output_path.ext(".txt");
return output_path;
@ -858,6 +856,11 @@ bool TFile2Txt::genera_ripristino_txt(const TMask& mask)
//metodo di alto livello per la gestione delle chiamate
void TFile2Txt::elabora(const TMask& mask)
{
// a) stoppa il concentratore
chiudi_concentratore();
//b) esegue le vere elaborazioni
//------------------------------
bool go_on = true;
if (mask.get_bool(F_AGENTI))
@ -904,26 +907,31 @@ void TFile2Txt::elabora(const TMask& mask)
if (mask.get_bool(F_INIMAG) && go_on)
go_on = genera_ripristino_txt(mask);
//c) lancia il concentratore in modalità di carico
carica_concentratore();
//d) rilancia il concentratore in modalità di trasmissione
trasmetti_concentratore();
}
void TFile2Txt::main_loop()
TMask* TFile2Txt::create_mask() const
{
TFile2Txt_mask mask;
_output_dir = mask.get(F_PATH);
if (!_output_dir.exist())
error_box("Non esiste la cartella di destinazione indicata!");
while (mask.run() == K_ENTER)
{
elabora(mask);
}
TMask* mask = new TFile2Txt_mask;
mask->set(F_OUTPUT_PATH, _output_path);
mask->set(F_CONC_PATH, _conc_path);
mask->set(F_TRANS_PATH, _trans_path);
return mask;
}
bool TFile2Txt::create()
const char* TFile2Txt::fake_trans_file() const
{
return TSkeleton_application::create();
return "157";
}
int ha1200(int argc, char* argv[])
{
TFile2Txt a;

View File

@ -1,26 +1,28 @@
#define F_PATH 200
#define F_AGENTI 201
#define F_CLIENTI 202
#define F_SOSPESI 203
#define F_LISTINI 204
#define F_CONTRATTI 205
#define F_PROMOZIONI 206
#define F_PRODOTTI 207
#define F_LINEE 208
#define F_BARCODE 209
#define F_DECODART 210
#define F_ATTREZZA 211
#define F_TABPAG 212
#define F_CARICO 213
#define F_INIMAG 214
#define F_OUTPUT_PATH 200
#define F_CONC_PATH 201
#define F_TRANS_PATH 202
#define F_AGENTI 212
#define F_CLIENTI 213
#define F_SOSPESI 214
#define F_LISTINI 215
#define F_CONTRATTI 216
#define F_PROMOZIONI 217
#define F_PRODOTTI 218
#define F_LINEE 219
#define F_BARCODE 220
#define F_DECODART 221
#define F_ATTREZZA 222
#define F_TABPAG 223
#define F_CARICO 224
#define F_INIMAG 225
#define F_DA_CODCLI 220
#define F_DA_SOSP_CODCLI 221
#define F_CODNUM 222
#define F_ANNO 223
#define F_PROVV 224
#define F_STATO 225
#define F_DA_CARDOC 226
#define F_A_CARDOC 227
#define F_ANNOES 230
#define F_CODMAG 231
#define F_DA_CODCLI 230
#define F_DA_SOSP_CODCLI 231
#define F_CODNUM 232
#define F_ANNO 233
#define F_PROVV 234
#define F_STATO 235
#define F_DA_CARDOC 236
#define F_A_CARDOC 237
#define F_ANNOES 240
#define F_CODMAG 241

View File

@ -1,31 +1,45 @@
#include "ha1200a.h"
PAGE "Esportazione archivi in formato .txt" -1 -1 78 13
PAGE "Esportazione archivi in formato .txt" -1 -1 78 15
STRING F_PATH 256 50
STRING F_OUTPUT_PATH 256 49
BEGIN
PROMPT 1 1 "Cartella creazione files "
PROMPT 1 0 "Cartella creazione files "
FLAGS "D"
END
STRING F_CONC_PATH 256 49
BEGIN
PROMPT 1 1 "Cartella concentratore "
FLAGS "D"
END
STRING F_TRANS_PATH 256 49
BEGIN
PROMPT 1 2 "Cartella file transazione "
FLAGS "D"
END
GROUPBOX DLG_NULL 76 11
BEGIN
PROMPT 1 2 "@bArchivi da trasferire"
PROMPT 1 3 "@bArchivi da trasferire"
END
BOOLEAN F_AGENTI
BEGIN
PROMPT 2 3 "Agenti"
PROMPT 2 4 "Agenti"
FIELD Agenti
END
BOOLEAN F_CLIENTI
BEGIN
PROMPT 2 4 "Clienti"
PROMPT 2 5 "Clienti"
FIELD Clienti
END
NUMBER F_DA_CODCLI 6
BEGIN
PROMPT 12 4 "Dal cli: "
PROMPT 12 5 "Dal cli: "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_DA_CODCLI
@ -33,16 +47,18 @@ BEGIN
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_DA_CODCLI CODCF
CHECKTYPE NORMAL
FIELD Dacliente
END
BOOLEAN F_SOSPESI
BEGIN
PROMPT 2 5 "Sospesi"
PROMPT 2 6 "Sospesi"
FIELD Sospesi
END
NUMBER F_DA_SOSP_CODCLI 6
BEGIN
PROMPT 12 5 "Dal cli: "
PROMPT 12 6 "Dal cli: "
USE LF_CLIFO
INPUT TIPOCF "C"
INPUT CODCF F_DA_SOSP_CODCLI
@ -50,63 +66,74 @@ BEGIN
DISPLAY "Ragione Sociale@50" RAGSOC
OUTPUT F_DA_SOSP_CODCLI CODCF
CHECKTYPE NORMAL
FIELD Dasospeso
END
BOOLEAN F_LISTINI
BEGIN
PROMPT 2 6 "Listini"
PROMPT 2 7 "Listini"
FIELD Listini
END
BOOLEAN F_CONTRATTI
BEGIN
PROMPT 2 7 "Contratti"
PROMPT 2 8 "Contratti"
FIELD Contratti
END
BOOLEAN F_PROMOZIONI
BEGIN
PROMPT 2 8 "Promozioni"
PROMPT 2 9 "Promozioni"
FIELD Promozioni
END
BOOLEAN F_DECODART
BEGIN
PROMPT 2 9 "Codici articolo alternativi"
PROMPT 2 10 "Codici articolo alternativi"
FIELD Codartalt
END
BOOLEAN F_PRODOTTI
BEGIN
PROMPT 32 3 "Prodotti"
PROMPT 32 4 "Prodotti"
FIELD Prodotti
END
BOOLEAN F_LINEE
BEGIN
PROMPT 32 4 "Linee"
PROMPT 32 5 "Linee"
FIELD Linee
END
BOOLEAN F_BARCODE
BEGIN
PROMPT 32 5 "Barcode"
PROMPT 32 6 "Barcode"
FIELD Barcode
END
BOOLEAN F_ATTREZZA
BEGIN
PROMPT 53 3 "Attrezzature"
PROMPT 53 4 "Attrezzature"
FIELD Attrezzature
END
BOOLEAN F_TABPAG
BEGIN
PROMPT 53 4 "Condizioni pagamento"
PROMPT 53 5 "Condizioni pagamento"
FIELD Condpag
END
BOOLEAN F_CARICO
BEGIN
PROMPT 53 5 "Documenti di carico"
PROMPT 53 6 "Documenti di carico"
MESSAGE FALSE HIDE,2@
MESSAGE TRUE SHOW,2@
FIELD Carico
END
NUMBER F_DA_CARDOC 7
BEGIN
PROMPT 53 6 "Dal doc. n. "
PROMPT 53 7 "Dal doc. n. "
USE DOC SELECT (STATO=#F_STATO)
INPUT PROVV "D"
INPUT ANNO F_ANNO SELECT
@ -122,11 +149,12 @@ BEGIN
OUTPUT F_DA_CARDOC NDOC
CHECKTYPE NORMAL
GROUP 2
FIELD Dacardoc
END
NUMBER F_A_CARDOC 7
BEGIN
PROMPT 53 7 "Al doc n. "
PROMPT 53 8 "Al doc n. "
COPY USE F_DA_CARDOC
INPUT PROVV "D"
INPUT ANNO F_ANNO SELECT
@ -138,40 +166,43 @@ BEGIN
NUM_EXPR (#F_A_CARDOC>=#F_DA_CARDOC)||(#F_A_CARDOC==0)
WARNING "Il numero documento finale deve essere > di quello iniziale oppure lasciato vuoto"
GROUP 2
FIELD Acardoc
END
STRING F_CODNUM 4
BEGIN
PROMPT 53 8 "Num. "
PROMPT 53 9 "Num. "
FLAGS "D"
GROUP 2
END
NUMBER F_ANNO 4
BEGIN
PROMPT 63 8 "Anno "
PROMPT 63 9 "Anno "
FLAGS "A"
MESSAGE K_SPACE,F_CARICO
CHECKTYPE REQUIRED
GROUP 2
FIELD Anno
END
STRING F_STATO 1
BEGIN
PROMPT 77 8 ""
PROMPT 77 9 ""
FLAGS "H"
END
BOOLEAN F_INIMAG
BEGIN
PROMPT 53 9 "Ripristina magazzino"
PROMPT 53 10 "Ripristina magazzino"
MESSAGE FALSE HIDE,3@
MESSAGE TRUE SHOW,3@
FIELD Ripmag
END
STRING F_CODMAG 3
BEGIN
PROMPT 53 10 "Mag. "
PROMPT 53 11 "Mag. "
USE MAG SELECT CODTAB[4,5]==""
FLAGS "U"
INPUT CODTAB F_CODMAG
@ -180,15 +211,17 @@ BEGIN
OUTPUT F_CODMAG CODTAB[1,3]
CHECKTYPE REQUIRED
GROUP 3
FIELD Codmag
END
NUMBER F_ANNOES 4
BEGIN
PROMPT 64 10 "Anno "
PROMPT 64 11 "Anno "
FLAGS "A"
MESSAGE K_SPACE,F_INIMAG
CHECKTYPE REQUIRED
GROUP 3
FIELD Annomag
END
ENDPAGE

View File

@ -1,6 +1,8 @@
#include <automask.h>
#include <config.h>
#include <execp.h>
#include <relation.h>
#include <utility.h>
#include "ha1250.h"
@ -19,6 +21,68 @@ bool THardy_transaction::is_server() const
return i_am_server;
}
bool THardy_transaction::is_by_postino() const
{
TFilename trans = argv(2);
return (trans.starts_with("/i") || trans.starts_with("-i"));
}
void THardy_transaction::chiudi_concentratore()
{
TFilename bat_chiudi = _conc_path;
bat_chiudi.add("chiudi.bat");
TExternal_app app_chiudi(bat_chiudi);
app_chiudi.run();
//sara' meglio aspettare qualche secondo
xvt_sys_sleep(3000);
}
void THardy_transaction::carica_concentratore()
{
TFilename bat_carica = _conc_path;
bat_carica.add("car.bat");
TExternal_app app_carica(bat_carica);
app_carica.run();
//sara' meglio aspettare qualche secondo
xvt_sys_sleep(1000);
}
bool THardy_transaction::scarica_concentratore()
{
TFilename bat_scarica = _conc_path;
bat_scarica.add("descar.bat");
TExternal_app app_scarica(bat_scarica);
app_scarica.run();
//deve assicurarsi che il file upload.d sia completato; usa un test sulle dimensioni
//aspetta qualche secondo per permettere al concentratore di iniziare a generare il file
TFilename upload = _input_path;
upload.add("upload.d");
//se trova il file upload.d comincia a fare i test
long last_size = 0L;
for (int s = 0; s < 60; s++)
{
xvt_sys_sleep(3000);
long size = fsize(upload);
if (size == last_size && size > 0)
break;
last_size = size;
}
if (last_size == 0L)
return cantread_box(upload);
return true;
}
void THardy_transaction::trasmetti_concentratore()
{
TFilename bat_trasm = _conc_path;
bat_trasm.add("trasmissione.bat");
TExternal_app app_trasm(bat_trasm);
app_trasm.run();
}
void THardy_transaction::main_loop()
{
@ -27,13 +91,14 @@ void THardy_transaction::main_loop()
//sono il server?
bool i_am_server = is_server();
TFilename trans = argv(2);
if (trans.starts_with("/i") || trans.starts_with("-i"))
//sono lanciato dal postino?
if (is_by_postino())
{
//se sono il server eseguo subito l'elaborazione
if (i_am_server)
{
//legge i files da trasferire
TFilename trans = argv(2);
trans.ltrim(2);
TConfig ini(trans, fake_trans_file());
FOR_EACH_MASK_FIELD(*mask, i, f)
@ -59,30 +124,33 @@ void THardy_transaction::main_loop()
else
error_box(TR("Le transazioni possono essere eseguite solo dal server!"));
}
while (mask->run() == K_ENTER)
else //sono lanciato in modo interattivo
{
//se è il server -> esegue le operazioni di elaborazione
if (i_am_server)
elabora(*mask);
else //senno' prepara il .ini per l'elaborazione postinica
while (mask->run() == K_ENTER)
{
TFilename lista_files = _trans_path;
lista_files.add(name());
lista_files.ext("ini");
TConfig ini(lista_files, "Transaction");
ini.set("Action", "RUN");
ini.set("Mode", "AUTO");
ini.set_paragraph(fake_trans_file());
FOR_EACH_MASK_FIELD(*mask, i, f)
//se è il server -> esegue le operazioni di elaborazione
if (i_am_server)
elabora(*mask);
else //senno' prepara il .ini per l'elaborazione postinica
{
const TFieldref* field = f->field();
if (field != NULL && f->active())
field->write(ini, fake_trans_file(), f->get());
TFilename lista_files = _trans_path;
lista_files.add(name());
lista_files.ext("ini");
TConfig ini(lista_files, "Transaction");
ini.set("Action", "RUN");
ini.set("Mode", "AUTO");
ini.set_paragraph(fake_trans_file());
FOR_EACH_MASK_FIELD(*mask, i, f)
{
const TFieldref* field = f->field();
if (field != NULL && f->active())
field->write(ini, fake_trans_file(), f->get());
}
message_box(TR("Transazione di scarico inviata al server"));
}
message_box(TR("Transazione di scarico inviata al server"));
}
}
} //if(by_postino(...
delete mask;
}

View File

@ -10,7 +10,12 @@ protected:
virtual void elabora(const TMask& mask) pure;
virtual TMask* create_mask() const pure;
bool is_server() const;
bool is_by_postino() const;
virtual const char* fake_trans_file() const pure;
void chiudi_concentratore();
void carica_concentratore();
bool scarica_concentratore();
void trasmetti_concentratore();
public:
virtual void main_loop();

View File

@ -11,10 +11,10 @@
#include "../mg/rmovmag.h"
#include "halib.h"
#include "ha1250.h"
#include "ha1300a.h"
#include "ha1301a.h"
//funzione di ordinamento del file di upload una volta caricato in memoria
static TToken_string tipi_record("SU|VC|TF|RF|SI|BR|RC");
@ -252,11 +252,6 @@ bool TUpload2Campo_mask::on_field_event(TOperable_field& o, TField_event e, long
TUpload2Campo_mask::TUpload2Campo_mask() : TAutomask ("ha1300a")
{
TConfig config(CONFIG_DITTA, "ha");
const TString& input_path = config.get("InputPath");
set(F_INPUT_PATH, input_path);
const TString& archive_path = config.get("ArchivePath");
set(F_ARCHIVE_PATH, archive_path);
}
@ -284,12 +279,16 @@ TUpload2Campo_newcli_mask::TUpload2Campo_newcli_mask() : TAutomask ("ha1301a")
///////////////////////////////////////
// TSkeleton_application
///////////////////////////////////////
class TUpload2Campo : public TSkeleton_application
class TUpload2Campo : public THardy_transaction
{
bool _can_write;
TAssoc_array _nuovi_clienti;
protected:
virtual void elabora(const TMask& mask);
virtual TMask* create_mask() const;
const char* fake_trans_file() const;
//metodi di basso livello
const TString& check_agente(TString& codice_terminale, TLog_report& log);
const TString& check_articolo(TString& codart, TLog_report& log);
@ -307,11 +306,8 @@ protected:
void elabora_SI(THardy_upload_recordset& recset, TLog_report& log);
void elabora_RC(THardy_upload_recordset& recset, TLog_report& log);
void elabora(const TMask& mask);
public:
virtual void main_loop();
virtual bool create();
};
/////////////////////////////////////////////////////////////////////////////////////////////////
@ -1321,140 +1317,152 @@ void TUpload2Campo::elabora_RC(THardy_upload_recordset& recset, TLog_report& log
void TUpload2Campo::elabora(const TMask& mask)
{
//prende la directory di archiviazione
const TString archive_path = mask.get(F_ARCHIVE_PATH);
// a) stoppa il concentratore
chiudi_concentratore();
//creazione del filename dei files da importare
TFilename src_files = mask.get(F_INPUT_PATH);
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
//src_files.add("upload*.d");
src_files.add("upload.d");
TString_array src_files_list;
const int n_files_d = list_files(src_files, src_files_list);
// b) scarica il concentratore per generare il file upload.d
bool carica = scarica_concentratore();
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
TLog_report log("Segnalazioni su acquisizione");
log.kill_duplicates();
log.log(0, "");
// c) rilancia il concentratore in modalità trasmissione
trasmetti_concentratore();
//scandisce i files uno ad uno
for (int i = 0; i < n_files_d; i++)
// d) esegue le elaborazioni
if (carica)
{
if (!pi.addstatus(1))
break;
//file corrente in fase di elaborazione
const TFilename curr_fname = src_files_list.row(i);
//creazione del filename dei files da importare
TFilename src_files = _input_path;
//una volta si importavano tutti i files di tipo upload*.d; poi si è passati ad importare solo upload.d e basta!
//src_files.add("upload*.d");
src_files.add("upload.d");
TString_array src_files_list;
const int n_files_d = list_files(src_files, src_files_list);
THardy_upload_recordset recset(curr_fname);
const long items = recset.items();
//ordinamento del file in memoria secondo l'ordine stabilito nella tipi_record "SU|VC|TF|RF|SI|BR|RC";
recset.sort(ordina_upload);
TString msg;
#ifdef DBG
msg << "D:/dati/hardy/" << "cazzone_" << curr_fname.name_only() << ".txt";
recset.save_as(msg);
#endif
//creazione progind e log
msg.cut(0);
msg << "Elaborazione file " << curr_fname << " in corso...";
TProgind pi(items, msg, true, true);
msg.cut(0);
msg << "File " << curr_fname.name_only();
TProgind pi(n_files_d, TR("Acquisizione files in corso..."), true, true);
TLog_report log("Segnalazioni su acquisizione");
log.kill_duplicates();
log.log(0, "");
log.log(0, msg);
log.log(0, "");
//parametro di controllo; solo se resta true fino alla fine il documento viene writato
//solo in caso di elaborazione definitiva può diventare true; vale per ogni upload*.d, in modo da archiviare..
//..quelli buoni
_can_write = false;
if (mask.get_bool(F_DEFINITIVO))
_can_write = true;
//codice terminalino; viene preso dal tipo record SU (è comunque presente in ogni tipo record) ed usato per l'archiviazione..
//..del file se correttamente importato
TString4 terminalino;
//giro su tutti i record del terribile recordset per l'acquisizione dei dati
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
//scandisce i files uno ad uno
for (int i = 0; i < n_files_d; i++)
{
if (!pi.addstatus(1))
break;
//file corrente in fase di elaborazione
const TFilename curr_fname = src_files_list.row(i);
//acquisizione tipo record da riga corrente del file di input
TString4 tipo_record = recset.rec_type();
tipo_record.trim();
THardy_upload_recordset recset(curr_fname);
const long items = recset.items();
//ordinamento del file in memoria secondo l'ordine stabilito nella tipi_record "SU|VC|TF|RF|SI|BR|RC";
recset.sort(ordina_upload);
//Sequenza di ordinamento dei record "SU|VC|TF|RF|SI|BR|RC": NON ATTENTATEVI A CAMBIARLA O NON FUNZIONA PIU' UN CAZZO!!
const int pos = tipi_record.get_pos(tipo_record);
TString msg;
#ifdef DBG
msg << "D:/dati/hardy/" << "cazzone_" << curr_fname.name_only() << ".txt";
recset.save_as(msg);
#endif
//creazione progind e log
msg.cut(0);
msg << "Elaborazione file " << curr_fname << " in corso...";
TProgind pi(items, msg, true, true);
msg.cut(0);
msg << "File " << curr_fname.name_only();
log.log(0, "");
log.log(0, msg);
log.log(0, "");
//parametro di controllo; solo se resta true fino alla fine il documento viene writato
//solo in caso di elaborazione definitiva può diventare true; vale per ogni upload*.d, in modo da archiviare..
//..quelli buoni
_can_write = false;
if (mask.get_bool(F_DEFINITIVO))
_can_write = true;
//codice terminalino; viene preso dal tipo record SU (è comunque presente in ogni tipo record) ed usato per l'archiviazione..
//..del file se correttamente importato
TString4 terminalino;
//giro su tutti i record del terribile recordset per l'acquisizione dei dati
for (bool ok = recset.move_first(); ok; ok = recset.move_next())
{
if (!pi.addstatus(1))
break;
//acquisizione tipo record da riga corrente del file di input
TString4 tipo_record = recset.rec_type();
tipo_record.trim();
//Sequenza di ordinamento dei record "SU|VC|TF|RF|SI|BR|RC": NON ATTENTATEVI A CAMBIARLA O NON FUNZIONA PIU' UN CAZZO!!
const int pos = tipi_record.get_pos(tipo_record);
//trattazione dei vari tracciati record
switch (pos)
{
case 0: //tipo record: SU (SetUp...ovvero agente)
terminalino = elabora_SU(recset, log); //non serve a una cippa!
break;
case 1: //tipo record: VC (nuovi clienti e Variazioni Cliente)
elabora_VC(recset, log);
break;
case 2: //tipo record: TF (Testata Fattura)
elabora_TF(recset, log);
break;
case 3: //tipo record: RF (Riga Fattura)
//elabora_RF(recset, log); //non serve! lo fa l'elaborazione di testata
break;
case 4: //tipo record: SI (incasso documenti)
elabora_SI(recset, log);
break;
case 5: //tipo record: BR (righe movimenti magazzino)
elabora_BR(recset, log);
break;
case 6: //tipo record: RC (Richiesta Carico)
elabora_RC(recset, log);
break;
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
//trattazione dei vari tracciati record
switch (pos)
{
TString msg;
msg << "Tipo record non riconosciuto '" << tipo_record << "' alla riga " << (recset.current_row() + 1);
log.log(2, msg);
}
break;
} //switch(pos)..
case 0: //tipo record: SU (SetUp...ovvero agente)
terminalino = elabora_SU(recset, log); //non serve a una cippa!
break;
case 1: //tipo record: VC (nuovi clienti e Variazioni Cliente)
elabora_VC(recset, log);
break;
case 2: //tipo record: TF (Testata Fattura)
elabora_TF(recset, log);
break;
case 3: //tipo record: RF (Riga Fattura)
//elabora_RF(recset, log); //non serve! lo fa l'elaborazione di testata
break;
case 4: //tipo record: SI (incasso documenti)
elabora_SI(recset, log);
break;
case 5: //tipo record: BR (righe movimenti magazzino)
elabora_BR(recset, log);
break;
case 6: //tipo record: RC (Richiesta Carico)
elabora_RC(recset, log);
break;
default: //se il tipo record non esiste nella lista dei tipi record si incazza e lo scrive!
{
TString msg;
msg << "Tipo record non riconosciuto '" << tipo_record << "' alla riga " << (recset.current_row() + 1);
log.log(2, msg);
}
break;
} //switch(pos)..
} //for (bool ok... (acquisizione di un file)
log.log(0, "");
} //for (bool ok... (acquisizione di un file)
log.log(0, "");
//sequenza di archiviazione del file di upload se elaborato con successo in via definitiva
if (_can_write)
{
if (archivia_file_importato(archive_path, curr_fname, terminalino, log))
//sequenza di archiviazione del file di upload se elaborato con successo in via definitiva
if (_can_write)
{
msg.cut(0);
msg << "Archiviato file " << curr_fname.name_only();
log.log(0, msg);
if (archivia_file_importato(_archive_path, curr_fname, terminalino, log))
{
msg.cut(0);
msg << "Archiviato file " << curr_fname.name_only();
log.log(0, msg);
}
}
}
} //for (int i = 0; i < n_files_d;... (giro su tutti i files tipo upload*.d)
} //for (int i = 0; i < n_files_d;... (giro su tutti i files tipo upload*.d)
log.preview();
log.preview();
} //if (carica)
}
TMask* TUpload2Campo::create_mask() const
{
TMask* mask = new TUpload2Campo_mask;
mask->set(F_INPUT_PATH, _input_path);
mask->set(F_ARCHIVE_PATH, _archive_path);
mask->set(F_CONC_PATH, _conc_path);
mask->set(F_TRANS_PATH, _trans_path);
return mask;
}
void TUpload2Campo::main_loop()
const char* TUpload2Campo::fake_trans_file() const
{
TUpload2Campo_mask mask;
while (mask.run() == K_ENTER)
{
elabora(mask);
}
}
bool TUpload2Campo::create()
{
return TSkeleton_application::create();
return "164";
}
int ha1300(int argc, char* argv[])

View File

@ -1,3 +1,5 @@
#define F_INPUT_PATH 201
#define F_ARCHIVE_PATH 202
#define F_DEFINITIVO 203
#define F_CONC_PATH 203
#define F_TRANS_PATH 204
#define F_DEFINITIVO 205

View File

@ -1,6 +1,6 @@
#include "ha1300a.h"
PAGE "Importazione dati da file upload" -1 -1 78 6
PAGE "Importazione dati da file upload" -1 -1 78 7
STRING F_INPUT_PATH 256 45
BEGIN
@ -14,9 +14,22 @@ BEGIN
FLAGS "D"
END
STRING F_CONC_PATH 256 45
BEGIN
PROMPT 1 3 "Cartella concentratore "
FLAGS "D"
END
STRING F_TRANS_PATH 256 45
BEGIN
PROMPT 1 4 "Cartella file transazione "
FLAGS "D"
END
BOOLEAN F_DEFINITIVO
BEGIN
PROMPT 1 4 "Elaborazione definitiva (scrittura sul database)"
PROMPT 1 6 "Elaborazione definitiva (scrittura sul database)"
FIELD Definitiva
END
ENDPAGE

View File

@ -164,7 +164,7 @@ void TInserimento_storico::elabora(const TMask& mask)
//..per quanto riguarda il progressivo)
if (err != NOERR)
{
codtab = get_next_att_key(codart);
codtab = hd_get_next_att_key(codart);
tab_att.put("CODTAB", codtab);
tab_att.put("S0", str_s0);
}

View File

@ -516,7 +516,7 @@ void hd_key2conto(const TString& key, int& gr, int& co, long& so)
so = atoi(key.mid(5,3));
}
const TString& get_next_att_key(const TString& codart)
const TString& hd_get_next_att_key(const TString& codart)
{
if (codart.full())
{
@ -538,4 +538,4 @@ const TString& get_next_att_key(const TString& codart)
return EMPTY_STRING;
}
}

View File

@ -244,4 +244,4 @@ const TDate upload_format_date6(const TString& str_data);
long hd_key2cli(const TString& key);
long hd_key2forn(const TString& key);
void hd_key2conto(const TString& key, int& gr, int& co, long& so);
const TString& get_next_att_key(const TString& codart);
const TString& hd_get_next_att_key(const TString& codart);