Corretto report CONAI
git-svn-id: svn://10.65.10.50/branches/R_10_00@22816 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
583fd2a1b9
commit
4798589955
12
tp/tp0.cpp
12
tp/tp0.cpp
@ -6,15 +6,9 @@ int main(int argc, char** argv)
|
|||||||
const int n = argc > 1 ? argv[1][1]-'0' : 0;
|
const int n = argc > 1 ? argv[1][1]-'0' : 0;
|
||||||
switch (n)
|
switch (n)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1: tp0200(argc, argv); break; //tabelle PACK
|
||||||
tp0200(argc, argv); //tabelle PACK
|
case 8: tp0900(argc, argv); break; //dichiarazione CONAI
|
||||||
break;
|
default: tp0100(argc, argv); break; //trasferimento PACK
|
||||||
case 8:
|
|
||||||
tp0900(argc, argv); //dichiarazione CONAI
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
tp0100(argc, argv); //trasferimento PACK
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
184
tp/tp0900.cpp
184
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
|
//quantita' totale conai (A + B) sul report
|
||||||
const real n = rdoc.calc_conai_qta(conai_specie);
|
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
|
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);
|
const bool addconai = clifo.vendite().get_bool(CFV_ADDCONAI);
|
||||||
|
|
||||||
#ifdef DBG
|
#ifdef DBG
|
||||||
//check del cliente e del documento
|
//check di debug
|
||||||
const long cazzo_codclifo = clifo.codice();
|
if (numdoc == 5)
|
||||||
if (cazzo_codclifo == 200348 && numdoc == 740)
|
|
||||||
const int cazzone = 1;
|
const int cazzone = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -399,24 +398,24 @@ static int compare_csv_rows_specie(const TObject** o1, const TObject** o2)
|
|||||||
TToken_string& s2 = *(TToken_string*)*o2;
|
TToken_string& s2 = *(TToken_string*)*o2;
|
||||||
|
|
||||||
//deve ordinare sul campo sottocat = codice specie conai (campo 8)
|
//deve ordinare sul campo sottocat = codice specie conai (campo 8)
|
||||||
const TString& c1 = s1.get(8);
|
const TFixed_string c1 = s1.get(8);
|
||||||
const TString& c2 = s2.get(8);
|
const TFixed_string c2 = s2.get(8);
|
||||||
|
|
||||||
int cmp = c1.compare(c2);
|
int cmp = c1.compare(c2);
|
||||||
|
|
||||||
// sotto ordinamento per codice cliente (campo 4)
|
// sotto ordinamento per codice cliente (campo 4)
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
{
|
{
|
||||||
const TString& c1 = s1.get(4);
|
const long c1 = s1.get_long(4);
|
||||||
const TString& c2 = s2.get(4);
|
const long c2 = s2.get_long(4);
|
||||||
cmp = c1.compare(c2);
|
cmp = c1 - c2;
|
||||||
|
|
||||||
// sotto-sotto ordinamento per ndoc (campo 2)
|
// sotto-sotto ordinamento per ndoc (campo 2)
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
{
|
{
|
||||||
const TString& c1 = s1.get(2);
|
const long n1 = s1.get_long(2);
|
||||||
const TString& c2 = s2.get(2);
|
const long n2 = s2.get_long(2);
|
||||||
cmp = c1.compare(c2);
|
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;
|
TToken_string& s2 = *(TToken_string*)*o2;
|
||||||
|
|
||||||
//deve ordinare sul campo cofi/piva (campo 5)
|
//deve ordinare sul campo cofi/piva (campo 5)
|
||||||
const TString& c1 = s1.get(5);
|
const TString& cf1 = s1.get(5);
|
||||||
const TString& c2 = s2.get(5);
|
const TString& cf2 = s2.get(5);
|
||||||
int cmp = c1.compare(c2);
|
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;
|
return cmp;
|
||||||
}
|
}
|
||||||
@ -442,16 +457,24 @@ static int compare_csv_rows_datadoc(const TObject** o1, const TObject** o2)
|
|||||||
TToken_string& s2 = *(TToken_string*)*o2;
|
TToken_string& s2 = *(TToken_string*)*o2;
|
||||||
|
|
||||||
//deve ordinare sul campo datadoc (campo 3)
|
//deve ordinare sul campo datadoc (campo 3)
|
||||||
const TDate c1 = s1.get(3);
|
const TDate d1 = s1.get(3);
|
||||||
const TDate c2 = s2.get(3);
|
const TDate d2 = s2.get(3);
|
||||||
int cmp = c1 - c2;
|
int cmp = d1 - d2;
|
||||||
|
|
||||||
// sotto-sotto ordinamento per ndoc (campo 2)
|
// sotto ordinamento per codnum (campo 0)
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
{
|
{
|
||||||
const long c1 = s1.get_long(2);
|
const TString4 c1 = s1.get(0);
|
||||||
const long c2 = s2.get_long(2);
|
const TString4 c2 = s2.get(0);
|
||||||
cmp = c1 - c2;
|
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;
|
return cmp;
|
||||||
@ -540,25 +563,21 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
|
|||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Adesso prende le numerazioni e i tipi documento
|
|
||||||
TSheet_field& sf = mask.sfield(F_TIPI);
|
|
||||||
|
|
||||||
//la query e' sulle righe documento
|
//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,..
|
//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)
|
//..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())
|
if (scat_fieldname.blank())
|
||||||
return;
|
return;
|
||||||
|
scat_fieldname.insert("RG1:");
|
||||||
|
|
||||||
scat_fieldname.insert("RG1:");
|
TString query;
|
||||||
|
|
||||||
query << "USE RDOC";
|
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 << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC";
|
||||||
query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"";
|
query << "\nFROM CODNUM=#CODNUM ANNO=#ANNO PROVV=D";
|
||||||
query << "\nTO 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..
|
//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
|
//..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
|
//creazione del csv recordset che verra' riempito dai record del recordset rdoc
|
||||||
TDichiarazione_CONAI_csv_recordset* csv = new TDichiarazione_CONAI_csv_recordset;
|
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
|
//Visto che e' possibile avere una secchiata di numerazioni, gli tocca fare un giro per ogni numerazione
|
||||||
FOR_EACH_SHEET_ROW(sf, r, row)
|
FOR_EACH_SHEET_ROW(sf, r, row)
|
||||||
{
|
{
|
||||||
//estrazione definitiva dei record che soddisfano il casino di parametri richiesti
|
//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)));
|
rdoc.set_var("#TIPODOC", TVariant(row->get(2)));
|
||||||
|
|
||||||
//quanti record validi ha trovato?
|
//quanti record validi ha trovato?
|
||||||
const long items = rdoc.items();
|
const long items = rdoc.items();
|
||||||
|
|
||||||
//E crea pure la progind..
|
//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;
|
long last_ndoc = 0;
|
||||||
|
|
||||||
@ -603,53 +626,56 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
|
|||||||
} //for(bool ok = rdoc.move_first(..
|
} //for(bool ok = rdoc.move_first(..
|
||||||
|
|
||||||
} //FOR_EACH...
|
} //FOR_EACH...
|
||||||
|
|
||||||
//riordinamento del file secondo il tipo di stampa selezionato:
|
if (!csv->empty())
|
||||||
switch (tipostampa)
|
|
||||||
{
|
{
|
||||||
case 1:
|
//riordinamento del file secondo il tipo di stampa selezionato:
|
||||||
csv->sort(compare_csv_rows_specie); //Mod.6.1: specie conai, codice cliente, numero documento
|
switch (tipostampa)
|
||||||
break;
|
{
|
||||||
case 2:
|
case 1:
|
||||||
csv->sort(compare_csv_rows_datadoc); //Allegato 6.1: datadoc
|
csv->sort(compare_csv_rows_specie); //Mod.6.1: specie conai, codice cliente, numero documento
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 2:
|
||||||
csv->sort(compare_csv_rows_cofi); //Mod.6.3: piva e cofi
|
csv->sort(compare_csv_rows_datadoc); //Allegato 6.1: datadoc
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 3:
|
||||||
csv->sort(compare_csv_rows_cofi); //Lista clienti in esenzione: piva e cofi
|
csv->sort(compare_csv_rows_cofi); //Mod.6.3: piva e cofi
|
||||||
break;
|
break;
|
||||||
default:
|
case 4:
|
||||||
break;
|
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()
|
void TDichiarazione_CONAI::main_loop()
|
||||||
|
@ -41,39 +41,39 @@ BEGIN
|
|||||||
PROMPT 1 0 "@bPeriodo da considerare"
|
PROMPT 1 0 "@bPeriodo da considerare"
|
||||||
END
|
END
|
||||||
|
|
||||||
RADIOBUTTON F_PERIODO 39
|
RADIOBUTTON F_PERIODO 44
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 2 0 ""
|
PROMPT 2 0 ""
|
||||||
ITEM "1|Annuale" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE
|
ITEM "1|Anno" MESSAGE HIDE,F_TRIMESTRE|HIDE,F_MESE
|
||||||
ITEM "2|Trimestrale" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE
|
ITEM "2|Trimestre" MESSAGE SHOW,F_TRIMESTRE|HIDE,F_MESE
|
||||||
ITEM "3|Mensile" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE
|
ITEM "3|Mese" MESSAGE HIDE,F_TRIMESTRE|SHOW,F_MESE
|
||||||
FIELD #PERIODO
|
FIELD #PERIODO
|
||||||
FLAGS "Z"
|
FLAGS "Z"
|
||||||
END
|
END
|
||||||
|
|
||||||
NUMBER F_ANNO 4
|
NUMBER F_ANNO 4
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 40 1 "Anno "
|
PROMPT 48 1 "Anno "
|
||||||
HELP "Anno per cui effettuare la dichiarazione"
|
HELP "Anno per cui effettuare la dichiarazione"
|
||||||
CHECKTYPE REQUIRED
|
CHECKTYPE REQUIRED
|
||||||
FIELD #ANNO
|
FIELD #ANNO
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST F_MESE 15
|
LIST F_MESE 2 12
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 52 1 "Periodo "
|
PROMPT 62 1 ""
|
||||||
HELP "Mese per cui effettuare la dichiarazione"
|
HELP "Mese per cui effettuare la dichiarazione"
|
||||||
FLAGS "AM"
|
FLAGS "AM"
|
||||||
FIELD #MESE
|
FIELD #MESE
|
||||||
END
|
END
|
||||||
|
|
||||||
LIST F_TRIMESTRE 15
|
LIST F_TRIMESTRE 2 12
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 52 1 "Periodo "
|
PROMPT 62 1 ""
|
||||||
HELP "Trimestre di cui effettuare la dichiarazione"
|
HELP "Trimestre di cui effettuare la dichiarazione"
|
||||||
ITEM "3|1 Trimestre "
|
ITEM "3|1 Trimestre"
|
||||||
ITEM "6|2 Trimestre "
|
ITEM "6|2 Trimestre"
|
||||||
ITEM "9|3 Trimestre "
|
ITEM "9|3 Trimestre"
|
||||||
ITEM "12|4 Trimestre"
|
ITEM "12|4 Trimestre"
|
||||||
FIELD #TRIMESTRE
|
FIELD #TRIMESTRE
|
||||||
END
|
END
|
||||||
@ -149,12 +149,11 @@ BEGIN
|
|||||||
FIELD #INDIR
|
FIELD #INDIR
|
||||||
END
|
END
|
||||||
|
|
||||||
RADIOBUTTON F_PRODUT 27
|
RADIOBUTTON F_PRODUT 28
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 51 14 "Iscritto in quanto:"
|
PROMPT 51 13 "Iscritto in quanto:"
|
||||||
ITEM "1|Produttore"
|
ITEM "1|Produttore"
|
||||||
ITEM "2|Utilizzatore"
|
ITEM "2|Utilizzatore"
|
||||||
FLAGS "Z"
|
|
||||||
FIELD #PRODUT
|
FIELD #PRODUT
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -166,7 +165,7 @@ END
|
|||||||
|
|
||||||
STRING F_TEL 26
|
STRING F_TEL 26
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 46 17 "Tel. "
|
PROMPT 47 17 "Tel."
|
||||||
FIELD TEL
|
FIELD TEL
|
||||||
END
|
END
|
||||||
|
|
||||||
@ -180,6 +179,7 @@ END
|
|||||||
STRING F_PATH 256 50
|
STRING F_PATH 256 50
|
||||||
BEGIN
|
BEGIN
|
||||||
PROMPT 27 19 ""
|
PROMPT 27 19 ""
|
||||||
|
CHECKTYPE REQUIRED
|
||||||
END
|
END
|
||||||
|
|
||||||
STRING DLG_PROFILE 50
|
STRING DLG_PROFILE 50
|
||||||
@ -194,7 +194,7 @@ ENDPAGE
|
|||||||
ENDMASK
|
ENDMASK
|
||||||
|
|
||||||
//maschera dello sheet sulle numerazioni/tipi documento
|
//maschera dello sheet sulle numerazioni/tipi documento
|
||||||
PAGE "Tipi" -1 -1 68 9
|
PAGE "Tipi" -1 -1 68 6
|
||||||
|
|
||||||
STRING 101 4
|
STRING 101 4
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -205,7 +205,7 @@ BEGIN
|
|||||||
DISPLAY "Descrizione@50" S0
|
DISPLAY "Descrizione@50" S0
|
||||||
OUTPUT 101 CODTAB
|
OUTPUT 101 CODTAB
|
||||||
OUTPUT 102 S0
|
OUTPUT 102 S0
|
||||||
CHECKTYPE NORMAL
|
CHECKTYPE REUIRED
|
||||||
FLAGS "U"
|
FLAGS "U"
|
||||||
END
|
END
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@
|
|||||||
</section>
|
</section>
|
||||||
<section type="Head" level="1" />
|
<section type="Head" level="1" />
|
||||||
<section type="Head" level="2">
|
<section type="Head" level="2">
|
||||||
<groupby>C</groupby>
|
<groupby>A+C</groupby>
|
||||||
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2</prescript>
|
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2</prescript>
|
||||||
</section>
|
</section>
|
||||||
<section type="Body">
|
<section type="Body">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user