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:
guy 2013-03-03 21:49:23 +00:00
parent 583fd2a1b9
commit 4798589955
4 changed files with 127 additions and 107 deletions

View File

@ -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;
} }

View File

@ -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()

View File

@ -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

View File

@ -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">