diff --git a/tp/tp0.cpp b/tp/tp0.cpp
index 334eab9d1..058c83106 100755
--- a/tp/tp0.cpp
+++ b/tp/tp0.cpp
@@ -6,15 +6,9 @@ int main(int argc, char** argv)
const int n = argc > 1 ? argv[1][1]-'0' : 0;
switch (n)
{
- case 1:
- tp0200(argc, argv); //tabelle PACK
- break;
- case 8:
- tp0900(argc, argv); //dichiarazione CONAI
- break;
- default:
- tp0100(argc, argv); //trasferimento PACK
- break;
+ case 1: tp0200(argc, argv); break; //tabelle PACK
+ case 8: tp0900(argc, argv); break; //dichiarazione CONAI
+ default: tp0100(argc, argv); break; //trasferimento PACK
}
return 0;
}
\ No newline at end of file
diff --git a/tp/tp0900.cpp b/tp/tp0900.cpp
index 18260f8f5..cd5e00cb3 100755
--- a/tp/tp0900.cpp
+++ b/tp/tp0900.cpp
@@ -162,7 +162,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do
//quantita' totale conai (A + B) sul report
const real n = rdoc.calc_conai_qta(conai_specie);
- if (n != ZERO)
+ if (!n.is_zero())
{
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
@@ -361,9 +361,8 @@ void TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione
const bool addconai = clifo.vendite().get_bool(CFV_ADDCONAI);
#ifdef DBG
- //check del cliente e del documento
- const long cazzo_codclifo = clifo.codice();
- if (cazzo_codclifo == 200348 && numdoc == 740)
+ //check di debug
+ if (numdoc == 5)
const int cazzone = 1;
#endif
@@ -399,24 +398,24 @@ static int compare_csv_rows_specie(const TObject** o1, const TObject** o2)
TToken_string& s2 = *(TToken_string*)*o2;
//deve ordinare sul campo sottocat = codice specie conai (campo 8)
- const TString& c1 = s1.get(8);
- const TString& c2 = s2.get(8);
+ const TFixed_string c1 = s1.get(8);
+ const TFixed_string c2 = s2.get(8);
int cmp = c1.compare(c2);
// sotto ordinamento per codice cliente (campo 4)
if (cmp == 0)
{
- const TString& c1 = s1.get(4);
- const TString& c2 = s2.get(4);
- cmp = c1.compare(c2);
+ const long c1 = s1.get_long(4);
+ const long c2 = s2.get_long(4);
+ cmp = c1 - c2;
// sotto-sotto ordinamento per ndoc (campo 2)
if (cmp == 0)
{
- const TString& c1 = s1.get(2);
- const TString& c2 = s2.get(2);
- cmp = c1.compare(c2);
+ const long n1 = s1.get_long(2);
+ const long n2 = s2.get_long(2);
+ cmp = n1 - n2;
}
}
@@ -429,9 +428,25 @@ static int compare_csv_rows_cofi(const TObject** o1, const TObject** o2)
TToken_string& s2 = *(TToken_string*)*o2;
//deve ordinare sul campo cofi/piva (campo 5)
- const TString& c1 = s1.get(5);
- const TString& c2 = s2.get(5);
- int cmp = c1.compare(c2);
+ const TString& cf1 = s1.get(5);
+ const TString& cf2 = s2.get(5);
+ int cmp = cf1.compare(cf2);
+
+ // sotto ordinamento per codnum (campo 0)
+ if (cmp == 0)
+ {
+ const TString4 c1 = s1.get(0);
+ const TString4 c2 = s2.get(0);
+ cmp = c1.compare(c2);
+
+ // sotto-sotto ordinamento per ndoc (campo 2)
+ if (cmp == 0)
+ {
+ const long n1 = s1.get_long(2);
+ const long n2 = s2.get_long(2);
+ cmp = n1 - n2;
+ }
+ }
return cmp;
}
@@ -442,16 +457,24 @@ static int compare_csv_rows_datadoc(const TObject** o1, const TObject** o2)
TToken_string& s2 = *(TToken_string*)*o2;
//deve ordinare sul campo datadoc (campo 3)
- const TDate c1 = s1.get(3);
- const TDate c2 = s2.get(3);
- int cmp = c1 - c2;
+ const TDate d1 = s1.get(3);
+ const TDate d2 = s2.get(3);
+ int cmp = d1 - d2;
- // sotto-sotto ordinamento per ndoc (campo 2)
+ // sotto ordinamento per codnum (campo 0)
if (cmp == 0)
{
- const long c1 = s1.get_long(2);
- const long c2 = s2.get_long(2);
- cmp = c1 - c2;
+ const TString4 c1 = s1.get(0);
+ const TString4 c2 = s2.get(0);
+ cmp = c1.compare(c2);
+
+ // sotto-sotto ordinamento per ndoc (campo 2)
+ if (cmp == 0)
+ {
+ const long n1 = s1.get_long(2);
+ const long n2 = s2.get_long(2);
+ cmp = n1 - n2;
+ }
}
return cmp;
@@ -540,25 +563,21 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
default: break;
}
- //Adesso prende le numerazioni e i tipi documento
- TSheet_field& sf = mask.sfield(F_TIPI);
-
//la query e' sulle righe documento
//cerca le righe con numerazione e tipo indicate nello sheet;prende sia le righe che generano CONAI (per avere il codice conai,..
//..le quantita' etc) e le righe generate da CONAI (per avere i prezzi)
- TString query;
- TString scat_fieldname(conai_sottocat_name(conai_specie));
+ TString16 scat_fieldname = conai_sottocat_name(conai_specie);
if (scat_fieldname.blank())
return;
+ scat_fieldname.insert("RG1:");
- scat_fieldname.insert("RG1:");
-
+ TString query;
query << "USE RDOC";
- query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&(33.TIPODOC==#TIPODOC)&&(" << scat_fieldname <<"!=\"\")";
+ query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)&&(" << scat_fieldname <<"!=\"\")";
query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC";
- query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"";
- query << "\nTO CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"";
+ query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D";
+ query << "\nTO CODNUM=#CODNUM ANNO=#ANNO PROVV=D";
//crea il recordset principale relativo alle righe originali CONAI ed assegna subito i valori delle variabili che restano costanti al cambio..
//..numerazione/tipo: sono le date ed il codice articolo
@@ -572,18 +591,22 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
//creazione del csv recordset che verra' riempito dai record del recordset rdoc
TDichiarazione_CONAI_csv_recordset* csv = new TDichiarazione_CONAI_csv_recordset;
+ //Adesso prende le numerazioni e i tipi documento
+ TSheet_field& sf = mask.sfield(F_TIPI);
//Visto che e' possibile avere una secchiata di numerazioni, gli tocca fare un giro per ogni numerazione
FOR_EACH_SHEET_ROW(sf, r, row)
{
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
- rdoc.set_var("#CODNUM", TVariant(row->get(0)));
+ const TString4 last_codnum = row->get(0);
+ rdoc.set_var("#CODNUM", TVariant(last_codnum));
rdoc.set_var("#TIPODOC", TVariant(row->get(2)));
//quanti record validi ha trovato?
const long items = rdoc.items();
//E crea pure la progind..
- TProgind pi(items, TR("Generazione righe..."));
+ TString msg; msg << TR("Generazione righe ") << last_codnum << " ...";
+ TProgind pi(items, msg);
long last_ndoc = 0;
@@ -603,53 +626,56 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
} //for(bool ok = rdoc.move_first(..
} //FOR_EACH...
-
- //riordinamento del file secondo il tipo di stampa selezionato:
- switch (tipostampa)
+
+ if (!csv->empty())
{
- case 1:
- csv->sort(compare_csv_rows_specie); //Mod.6.1: specie conai, codice cliente, numero documento
- break;
- case 2:
- csv->sort(compare_csv_rows_datadoc); //Allegato 6.1: datadoc
- break;
- case 3:
- csv->sort(compare_csv_rows_cofi); //Mod.6.3: piva e cofi
- break;
- case 4:
- csv->sort(compare_csv_rows_cofi); //Lista clienti in esenzione: piva e cofi
- break;
- default:
- break;
+ //riordinamento del file secondo il tipo di stampa selezionato:
+ switch (tipostampa)
+ {
+ case 1:
+ csv->sort(compare_csv_rows_specie); //Mod.6.1: specie conai, codice cliente, numero documento
+ break;
+ case 2:
+ csv->sort(compare_csv_rows_datadoc); //Allegato 6.1: datadoc
+ break;
+ case 3:
+ csv->sort(compare_csv_rows_cofi); //Mod.6.3: piva e cofi
+ break;
+ case 4:
+ csv->sort(compare_csv_rows_cofi); //Lista clienti in esenzione: piva e cofi
+ break;
+ default:
+ break;
+ }
+
+ //se richiesto il file in formato excel...
+ if (mask.get_bool(F_EXCEL) && !mask.field(F_PATH).empty())
+ {
+ TFilename path = mask.get(F_PATH);
+ path.lower();
+ if (path.ends_with(".xls") || path.ends_with(".slk"))
+ csv->save_as(path, fmt_html);
+ else
+ csv->save_as(path);
+ if (path.exist())
+ xvt_sys_goto_url(path, "open");
+ }
+
+ //creazione del report di stampa
+ TDichiarazione_CONAI_report rep;
+ bool ok = rep.load(nome_report);
+
+ if (ok)
+ {
+ //setta il recordset...
+ //deve settare almeno un campo manualmente perche' funzioni la mask2report
+ csv->set_var("#EMAIL", TVariant(TR("Manca la email")), true);
+ rep.set_recordset(csv);
+ //..e poi carica i valori sulla maschera nel report!!!!
+ rep.mask2report(mask);
+ rep.print_or_preview();
+ }
}
-
- //se richiesto il file in formato excel...
- if (mask.get_bool(F_EXCEL))
- {
- TFilename path = mask.get(F_PATH);
- path.lower();
- if (path.ends_with(".xls") || path.ends_with(".slk"))
- csv->save_as(path, fmt_html);
- else
- csv->save_as(path);
- xvt_sys_goto_url(path, "open");
- }
-
- //creazione del report di stampa
- TDichiarazione_CONAI_report rep;
- bool ok = rep.load(nome_report);
-
- if (ok)
- {
- //setta il recordset...
- //deve settare almeno un campo manualmente perche' funzioni la mask2report
- csv->set_var("#EMAIL", TVariant(TR("Manca la email")), true);
- rep.set_recordset(csv);
- //..e poi carica i valori sulla maschera nel report!!!!
- rep.mask2report(mask);
- rep.print_or_preview();
- }
-
}
void TDichiarazione_CONAI::main_loop()
diff --git a/tp/tp0900a.uml b/tp/tp0900a.uml
index caf68510f..ec81459ee 100755
--- a/tp/tp0900a.uml
+++ b/tp/tp0900a.uml
@@ -41,39 +41,39 @@ BEGIN
PROMPT 1 0 "@bPeriodo da considerare"
END
-RADIOBUTTON F_PERIODO 39
+RADIOBUTTON F_PERIODO 44
BEGIN
PROMPT 2 0 ""
- ITEM "1|Annuale" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE
- ITEM "2|Trimestrale" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE
- ITEM "3|Mensile" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE
+ ITEM "1|Anno" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE
+ ITEM "2|Trimestre" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE
+ ITEM "3|Mese" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE
FIELD #PERIODO
FLAGS "Z"
END
NUMBER F_ANNO 4
BEGIN
- PROMPT 40 1 "Anno "
+ PROMPT 48 1 "Anno "
HELP "Anno per cui effettuare la dichiarazione"
CHECKTYPE REQUIRED
FIELD #ANNO
END
-LIST F_MESE 15
+LIST F_MESE 2 12
BEGIN
- PROMPT 52 1 "Periodo "
+ PROMPT 62 1 ""
HELP "Mese per cui effettuare la dichiarazione"
FLAGS "AM"
FIELD #MESE
END
-LIST F_TRIMESTRE 15
+LIST F_TRIMESTRE 2 12
BEGIN
- PROMPT 52 1 "Periodo "
+ PROMPT 62 1 ""
HELP "Trimestre di cui effettuare la dichiarazione"
- ITEM "3|1 Trimestre "
- ITEM "6|2 Trimestre "
- ITEM "9|3 Trimestre "
+ ITEM "3|1 Trimestre"
+ ITEM "6|2 Trimestre"
+ ITEM "9|3 Trimestre"
ITEM "12|4 Trimestre"
FIELD #TRIMESTRE
END
@@ -149,12 +149,11 @@ BEGIN
FIELD #INDIR
END
-RADIOBUTTON F_PRODUT 27
+RADIOBUTTON F_PRODUT 28
BEGIN
- PROMPT 51 14 "Iscritto in quanto:"
+ PROMPT 51 13 "Iscritto in quanto:"
ITEM "1|Produttore"
ITEM "2|Utilizzatore"
- FLAGS "Z"
FIELD #PRODUT
END
@@ -166,7 +165,7 @@ END
STRING F_TEL 26
BEGIN
- PROMPT 46 17 "Tel. "
+ PROMPT 47 17 "Tel."
FIELD TEL
END
@@ -180,6 +179,7 @@ END
STRING F_PATH 256 50
BEGIN
PROMPT 27 19 ""
+ CHECKTYPE REQUIRED
END
STRING DLG_PROFILE 50
@@ -194,7 +194,7 @@ ENDPAGE
ENDMASK
//maschera dello sheet sulle numerazioni/tipi documento
-PAGE "Tipi" -1 -1 68 9
+PAGE "Tipi" -1 -1 68 6
STRING 101 4
BEGIN
@@ -205,7 +205,7 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT 101 CODTAB
OUTPUT 102 S0
- CHECKTYPE NORMAL
+ CHECKTYPE REUIRED
FLAGS "U"
END
diff --git a/tp/tp0900sc.rep b/tp/tp0900sc.rep
index 416ee1013..bb1bd8c94 100755
--- a/tp/tp0900sc.rep
+++ b/tp/tp0900sc.rep
@@ -197,7 +197,7 @@
- C
+ A+C
MESSAGE RESET,F2