diff --git a/src/tp/tp0900.cpp b/src/tp/tp0900.cpp index b2bd6b916..c0e118153 100755 --- a/src/tp/tp0900.cpp +++ b/src/tp/tp0900.cpp @@ -65,7 +65,7 @@ TDichiarazione_CONAI_csv_recordset::TDichiarazione_CONAI_csv_recordset() //crea le colonne e ci mette l'intestazione! Nella prima versione sulla 3.2.. //..invece inseriva a posteriori un record con le intestazioni poichè non.. //..esisteva la create column con il nome della column! - create_column("CODNUM"); + create_column("CODNUM"); // A create_column("ANNO", _intfld); create_column("NDOC", _longfld); create_column("DATADOC", _datefld); @@ -74,15 +74,16 @@ TDichiarazione_CONAI_csv_recordset::TDichiarazione_CONAI_csv_recordset() create_column("CODART"); create_column("NRIGA", _intfld); create_column("CLASSE"); - create_column("SOTTOCL"); - create_column("PREZZO", _realfld); + create_column("SOTTOCL"); // J + create_column("PREZZO", _realfld); create_column("UM"); - create_column("CONAI A", _realfld); - create_column("CONAI B", _realfld); - create_column("CONAI BxC", _realfld); - create_column("CONAI A+B", _realfld); + create_column("CONAIA", _realfld); // M + create_column("CONAIB", _realfld); + create_column("CONAIBxC", _realfld); + create_column("CONAIA+B", _realfld); create_column("INDETDOC", _realfld); - create_column("INDETCLI", _realfld); + create_column("INDETCLI", _realfld); + create_column("DESCR"); } @@ -92,15 +93,20 @@ TDichiarazione_CONAI_csv_recordset::TDichiarazione_CONAI_csv_recordset() class TDichiarazione_CONAI : public TSkeleton_application { + TLog_report * _log; + protected: - real clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv) const; + real clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv, const TDocumento & doc, const int n_riga_generata = 0) const; void elabora(const TMask& mask) const; bool scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, - const TCONAI_class conai_specie, const TString& conai_codart) const; + const TCONAI_class conai_specie, const TString & sottoclass, + const TString& conai_codart) const; void scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, - TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie) const; + TDichiarazione_CONAI_csv_recordset& csv, const TCONAI_class conai_specie, + const TString & sottoclass) const; void scrivi_csv_doc_speciale(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, - const TCONAI_class conai_specie, const TString& conai_codart) const; + const TCONAI_class conai_specie, const TString & sottoclass, + const TString& conai_codart) const; public: virtual bool create(); @@ -109,13 +115,28 @@ public: }; // Percentuale di esenzione CONAI di clifo -real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv) const +real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class conai_specie, TString& paiv, const TDocumento & doc, const int n_riga_generata) const { const TRectype& cfven_rec = clifo.vendite(); - real cfven_perces_conai = ZERO; - if (conai_configured_class(conai_specie)) - cfven_perces_conai = cfven_rec.get_real(conai_esenzione_name(conai_specie, LF_CFVEN)); + real cfven_perces_conai = ZERO; + if (conai_configured_class(conai_specie)) + { + if (n_riga_generata > 0) + { + const TRiga_documento& riga_generata = doc[n_riga_generata]; + cfven_perces_conai = riga_generata.get_real(RDOC_PERESCONAI); + } + if (cfven_perces_conai == ZERO) + { + const TDate datadoc = doc.data(); + const TDate dataies = doc.clifor().vendite().get_date(CFV_DATAICONAI); + const TDate dataees = doc.clifor().vendite().get_date(CFV_DATAECONAI); + + if ((datadoc >= dataies) && ((!dataees.ok()) || (datadoc <= dataees))) + cfven_perces_conai = cfven_rec.get_real(conai_esenzione_name(conai_specie, LF_CFVEN)); + } + } //nuovo metodo con logica rovesciata (fino al prossimo cambio di idea!) paiv = clifo.get(CLI_COFI); if (paiv.empty()) @@ -130,7 +151,7 @@ real TDichiarazione_CONAI::clifo_conai(const TCli_for& clifo, const TCONAI_class //riempie recordset con le righe CONAI del documento che contiene una riga generata CONAI void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& doc, const int n_riga_generata, TDichiarazione_CONAI_csv_recordset& csv, - const TCONAI_class conai_specie) const + const TCONAI_class conai_specie, const TString & sottoclass) const { //prende dalla riga i dati che gli servono per fare vari calcoli const TRiga_documento& riga_generata = doc[n_riga_generata]; @@ -150,21 +171,47 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do const TCli_for& clifo = doc.clifor(); TString80 clifo_paiv; // TString16 non va bene perchè viene agggiunto (PI) alla partita IVA //cerca la percentuale di esenzione conai sul cliente (controllo) - const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv); + const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc, n_riga_generata); //ciclo di creazione del distrib con le quote conai FOR_EACH_PHYSICAL_RDOC(doc, j, rdoc) { //quantita' totale conai (A + B) sul report - const real n = rdoc->calc_conai_qta(conai_specie); - if (!n.is_zero()) + for (int k = 1; k <= FR_CMAX; k++) { - qta_AB_conai.add(n, j); //va calcolato con il metodo apposito - //quantita' assoggettata (B) sul report - agip.add(n); - } + const TString4 sottocat = rdoc->get(conai_sottocat_name(k)); + + if (sottocat == sottoclass) + { + const real n = rdoc->calc_conai_qta(k); + + if (!n.is_zero()) + { + real * q = (real *)qta_AB_conai.objptr(j); + + if (q == NULL) + qta_AB_conai.add(q = new real, j); + *q += n; //va calcolato con il metodo apposito + //quantita' assoggettata (B) sul report + agip.add(n); + } + } + } } + if (doc.numero() == 441) + int i = 1; + const real qta_assoggettata_calcolata = agip.tot() * (CENTO - cfven_perc_conai) / CENTO; + + if (qta_assoggettata_calcolata != totale_qta_assogg) + { + TString msg(TR("Documento")); + + msg << ' ' << doc.anno() << ' ' << doc.numerazione() << ' ' << doc.numero() << ' ' + << " - quantità assoggettata " << totale_qta_assogg.stringa() + << " - quantità calcolata " << qta_assoggettata_calcolata.stringa(); + _log->log(2, msg); + } //ciclo di riempimento delle righe csv;scandisce solo l'array con i valori compilati FOR_EACH_ARRAY_ROW(qta_AB_conai, i, obj) { @@ -172,79 +219,88 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(const TDocumento& do //servono SOLO le righe CONAI!!!!! //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica - TString4 sottocat = rdoc.get(conai_sottocat_name(conai_specie)); - //puo' capitare che la sottocategoria sia stata troncata alla categoria - if (sottocat.len() == 2) - sottocat << "99"; - - //creazione di un nuovo record da esportare - csv.new_rec(""); - - //riempie i campi del record del csv - //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) - //parte chiave della riga - csv.set(0, rdoc.get(RDOC_CODNUM)); - csv.set(1, rdoc.get(RDOC_ANNO)); - csv.set(2, rdoc.get(RDOC_NDOC)); - csv.set(3, datadoc); - csv.set(4, clifo.codice()); - csv.set(5, clifo_paiv); - csv.set(6, rdoc.get(RDOC_CODART)); - csv.set(7, rdoc.get(RDOC_NRIGA)); - - //codici conai - csv.set(8, sottocat.left(2)); //codice materiale conai (es. carta, legno...) - csv.set(9, sottocat); //sottocodice materiale (es. carta imballo, busta...) - - //prezzo - const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata - csv.set(10, prezzo); - - //um conai - const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP - csv.set(11, umqta); - - //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) - real qta_tot_conai = (const real&)qta_AB_conai[i]; - if (is_nac) - qta_tot_conai = -qta_tot_conai; - csv.set(15, qta_tot_conai); - - //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) - real qta_assoggettata_conai = agip.get(); - - //se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100 - if (prezzo.is_zero()) + for (int k = 1; k <= FR_CMAX; k++) { - //se trova la % di esenzione al 100 non puo' assoggettare conai! - qta_assoggettata_conai = ZERO; + TString4 sottocat = rdoc.get(conai_sottocat_name(k)); + + if (sottocat == sottoclass) + { + //puo' capitare che la sottocategoria sia stata troncata alla categoria + if (sottocat.len() == 2) + sottocat << "99"; + + //creazione di un nuovo record da esportare + csv.new_rec(""); + + //riempie i campi del record del csv + //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) + //parte chiave della riga + csv.set(0, rdoc.get(RDOC_CODNUM)); + csv.set(1, rdoc.get(RDOC_ANNO)); + csv.set(2, rdoc.get(RDOC_NDOC)); + csv.set(3, datadoc); + csv.set(4, clifo.codice()); + csv.set(5, clifo_paiv); + csv.set(6, rdoc.get(RDOC_CODART)); + csv.set(7, rdoc.get(RDOC_NRIGA)); + + //codici conai + csv.set(8, sottocat.left(2)); //codice materiale conai (es. carta, legno...) + csv.set(9, sottocat); //sottocodice materiale (es. carta imballo, busta...) + + //prezzo + const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata + csv.set(10, prezzo); + + //um conai + const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP + csv.set(11, umqta); + + //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) + real qta_tot_conai = (const real&)qta_AB_conai[i]; + if (is_nac) + qta_tot_conai = -qta_tot_conai; + csv.set(15, qta_tot_conai); + + //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) + real qta_assoggettata_conai = agip.get(); + + //se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100 + if (prezzo.is_zero()) + { + //se trova la % di esenzione al 100 non puo' assoggettare conai! + qta_assoggettata_conai = ZERO; + } + + if (is_nac) + qta_assoggettata_conai = -qta_assoggettata_conai; + csv.set(13, qta_assoggettata_conai); + + //quantita' esente conai (A) sul report + const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; + csv.set(12, qta_esente_conai); + + //valore totale contributo (BxC) sul report + const real totale_contrib_conai = qta_assoggettata_conai * prezzo; + csv.set(14, TVariant(totale_contrib_conai)); + + //percentuale di esenzione conai + const TVariant rdoc_perc_conai = rdoc.get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); + csv.set(16, rdoc_perc_conai); + + //percentuale di esenzione conai in cfven + csv.set(17, TVariant(cfven_perc_conai)); + csv.set(18, cache().get("&VESCC", sottocat, "S0")); + } } - - if (is_nac) - qta_assoggettata_conai = -qta_assoggettata_conai; - csv.set(13, qta_assoggettata_conai); - - //quantita' esente conai (A) sul report - const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; - csv.set(12, qta_esente_conai); - - //valore totale contributo (BxC) sul report - const real totale_contrib_conai = qta_assoggettata_conai * prezzo; - csv.set(14, TVariant(totale_contrib_conai)); - - //percentuale di esenzione conai - const TVariant rdoc_perc_conai = rdoc.get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); - csv.set(16, rdoc_perc_conai); - - //percentuale di esenzione conai in cfven - csv.set(17, TVariant(cfven_perc_conai)); - } + } } //riempie recordset con le righe CONAI del documento che NON ha una riga generata CONAI; trattasi di documenti.. //..farlocchi costruiti ad arte per correggere le vaccate dei rompiscatolifici void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichiarazione_CONAI_csv_recordset& csv, - const TCONAI_class conai_specie, const TString& conai_codart) const + const TCONAI_class conai_specie, const TString & sottoclass, + const TString& conai_codart) const { //scopre se il doc e' una NAC const bool is_nac = doc.is_nota_credito(); @@ -256,7 +312,7 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichi const TCli_for& clifo = doc.clifor(); TString80 clifo_paiv; //cerca la percentuale di esenzione conai sul cliente (controllo - const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv); + const real cfven_perc_conai = clifo_conai(clifo, conai_specie, clifo_paiv, doc); const int nrighe = doc.rows(); @@ -265,82 +321,90 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(const TDocumento& doc, TDichi { const TRiga_documento& rdoc = doc[i]; - //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica - TString4 sottocat = rdoc.get(conai_sottocat_name(conai_specie)); - //puo' capitare che la sottocategoria sia stata troncata alla categoria - if (sottocat.len() == 2) - sottocat << "99"; + for (int j = 1; j <= FR_CMAX; j++) + { + TString4 sottocat = rdoc.get(conai_sottocat_name(j)); - //creazione di un nuovo record da esportare - csv.new_rec(""); + if (sottocat == sottoclass) + { + //puo' capitare che la sottocategoria sia stata troncata alla categoria + if (sottocat.len() == 2) + sottocat << "99"; - //riempie i campi del record del csv - //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) - //parte chiave della riga - csv.set(0, rdoc.get(RDOC_CODNUM)); - csv.set(1, TVariant(rdoc.get(RDOC_ANNO))); - csv.set(2, TVariant(rdoc.get(RDOC_NDOC))); - csv.set(3, TVariant(datadoc)); - csv.set(4, TVariant(clifo.codice())); - csv.set(5, TVariant(clifo_paiv)); - csv.set(6, TVariant(rdoc.get(RDOC_CODART))); - csv.set(7, TVariant(rdoc.get(RDOC_NRIGA))); + //creazione di un nuovo record da esportare + csv.new_rec(""); - //codici conai - csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) - csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) + //riempie i campi del record del csv + //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A) + //parte chiave della riga + csv.set(0, rdoc.get(RDOC_CODNUM)); + csv.set(1, TVariant(rdoc.get(RDOC_ANNO))); + csv.set(2, TVariant(rdoc.get(RDOC_NDOC))); + csv.set(3, TVariant(datadoc)); + csv.set(4, TVariant(clifo.codice())); + csv.set(5, TVariant(clifo_paiv)); + csv.set(6, TVariant(rdoc.get(RDOC_CODART))); + csv.set(7, TVariant(rdoc.get(RDOC_NRIGA))); - const TRectype& spp = cache().get("SPP", conai_codart); - //prezzo - const real prezzo = spp.get("R10"); // rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa - csv.set(10, TVariant(prezzo)); + //codici conai + csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...) + csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...) - //um conai - const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP - csv.set(11, TVariant(umqta)); + const TRectype& spp = cache().get("SPP", conai_codart); + //prezzo + const real prezzo = spp.get("R10"); // rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa + csv.set(10, TVariant(prezzo)); - //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) - real qta_tot_conai = rdoc.get_real(RDOC_QTA); - if (is_nac) - qta_tot_conai = -qta_tot_conai; - csv.set(15, TVariant(qta_tot_conai)); + //um conai + const TString4 umqta = spp.get("S7"); //unita' di misura dalla tabella SPP + csv.set(11, TVariant(umqta)); - //percentuale di esenzione conai al 100%? - const real rdoc_perc_conai = rdoc.get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 + //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) + real qta_tot_conai = rdoc.get_real(RDOC_QTA); + if (is_nac) + qta_tot_conai = -qta_tot_conai; + csv.set(15, TVariant(qta_tot_conai)); - //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. - //..in precedenza non deve fare nulla!) - real qta_assoggettata_conai = qta_tot_conai; + //percentuale di esenzione conai al 100%? + const real rdoc_perc_conai = rdoc.get_real(conai_esenzione_name(conai_specie, LF_RIGHEDOC)); // ex QTAGG2 - //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. - //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. - //..è personalizzato - if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% - qta_assoggettata_conai = ZERO; + //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. + //..in precedenza non deve fare nulla!) + real qta_assoggettata_conai = qta_tot_conai; - csv.set(13, TVariant(qta_assoggettata_conai)); + //segnalazione Sirio 1767: nelle righe fatte a mano, se la % di esenzione sul cliente è 100% -> la qta_assoggettata_conai.. + //..viene azzerata; questo perchè la rdoc_perc_conai può non essere modificabile a mano (ponendola = 100) se il verig non.. + //..è personalizzato + if (rdoc_perc_conai >= CENTO || cfven_perc_conai >= CENTO) // Guy: Mi pare strano gestire solo il caso 100% + qta_assoggettata_conai = ZERO; - //quantita' esente conai (A) sul report - const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! - csv.set(12, TVariant(qta_esente_conai)); + csv.set(13, TVariant(qta_assoggettata_conai)); - //valore totale contributo (BxC) sul report - const real totale_contrib_conai = qta_assoggettata_conai * prezzo; - csv.set(14, TVariant(totale_contrib_conai)); + //quantita' esente conai (A) sul report + const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! + csv.set(12, TVariant(qta_esente_conai)); - //percentuale di esenzione conai - csv.set(16, TVariant(rdoc_perc_conai)); + //valore totale contributo (BxC) sul report + const real totale_contrib_conai = qta_assoggettata_conai * prezzo; + csv.set(14, TVariant(totale_contrib_conai)); - //percentuale di esenzione conai in cfven - csv.set(17, TVariant(cfven_perc_conai)); - } + //percentuale di esenzione conai + csv.set(16, TVariant(rdoc_perc_conai)); + + //percentuale di esenzione conai in cfven + csv.set(17, TVariant(cfven_perc_conai)); + csv.set(18, cache().get("&VESCC", sottocat, "S0")); + } + } + } } //crea il documento che contiene la riga che gli viene passata,cerca la riga generata ed in base al risultato della ricerca chiama.. //..il metodo adatto bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione_CONAI_csv_recordset& csv, - const TCONAI_class conai_specie, const TString& conai_codart) const + const TCONAI_class conai_specie, const TString & sottoclass, + const TString& conai_codart) const { //crea la testata delle righedoc per poter fare vari calcoli (e intanto il tempo se ne va...) const int anno = prima_riga.get_int(RDOC_ANNO); @@ -380,10 +444,11 @@ bool TDichiarazione_CONAI::scrivi_csv(const TRectype& prima_riga, TDichiarazione } if (n_riga_generata > 0) - scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie); + scrivi_csv_doc_con_riga_generata(doc, n_riga_generata, csv, conai_specie, sottoclass); else - scrivi_csv_doc_speciale(doc, csv, conai_specie, conai_codart); - return true; + scrivi_csv_doc_speciale(doc, csv, conai_specie, sottoclass, conai_codart); + + return true; } @@ -393,8 +458,8 @@ 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 TFixed_string c1 = s1.get(8); - const TFixed_string c2 = s2.get(8); + const TFixed_string c1 = s1.get(9); + const TFixed_string c2 = s2.get(9); int cmp = c1.compare(c2, -1, true); @@ -513,33 +578,33 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const const TCONAI_class conai_specie = (TCONAI_class)mask.get_int(F_SPECIECONAI); TConfig ditta_ini(CONFIG_DITTA, "ve"); - TVariant codart; +// TString codart; const char* nome_report = ""; //report di tipo 6.1 scelto in base alla specie conai switch (conai_specie) { case CONAI_ACC: - codart = ditta_ini.get("CODACC"); //acciaio + // codart = ditta_ini.get("CODACC"); //acciaio nome_report = "tp0900ac.rep"; break; case CONAI_ALL: - codart = ditta_ini.get("CODALL"); //alluminio + // codart = ditta_ini.get("CODALL"); //alluminio nome_report = "tp0900al.rep"; break; case CONAI_CAR: - codart = ditta_ini.get("CODCAR"); //carta + // codart = ditta_ini.get("CODCAR"); //carta nome_report = "tp0900ca.rep"; break; case CONAI_PLA: - codart = ditta_ini.get("CODPLA"); //plastica + // codart = ditta_ini.get("CODPLA"); //plastica nome_report = "tp0900pl.rep"; break; case CONAI_LEG: - codart = ditta_ini.get("CODLEG"); //legno + // codart = ditta_ini.get("CODLEG"); //legno nome_report = "tp0900le.rep"; break; case CONAI_VET: - codart = ditta_ini.get("CODVET"); //vetro + // codart = ditta_ini.get("CODVET"); //vetro nome_report = "tp0900ve.rep"; break; default: @@ -562,7 +627,7 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const //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) - TString16 scat_fieldname = conai_sottocat_name(conai_specie); +/* TString16 scat_fieldname = conai_sottocat_name(conai_specie); if (scat_fieldname.blank()) return; @@ -571,12 +636,13 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const if (peso_fieldname.blank()) return; - peso_fieldname.insert("RG1:"); + peso_fieldname.insert("RG1:"); */ TString query; query << "USE RDOC"; - query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)&&((" << scat_fieldname <<"!=\"\")||(" << peso_fieldname << "!=0.00))"; - query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"; +// query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)&&((" << scat_fieldname << "!=\"\")||(" << peso_fieldname << "!=0.00))"; + query << "\nSELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&BETWEEN(33.TIPODOC,#TIPODOC,#TIPODOC)"; + query << "\nJOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC"; query << "\nFROM PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; query << "\nTO PROVV=D ANNO=#ANNO CODNUM=#CODNUM"; @@ -605,30 +671,46 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const rdoc.set_var("#CODNUM", cod); rdoc.set_var("#TIPODOC", tip); - TString msg; - msg << TR("Generazione righe ") << cod; - if (tip.full()) msg << " (" << tip << ')'; + TString str; + str << TR("Generazione righe ") << cod; + if (tip.full()) str << " (" << tip; - TProgress_monitor pi(1, msg); // Prima progresso indeterminato (1) ... - pi.set_max(rdoc.items()); // ... poi conteggio esatto (rdoc.items) + TString query_scc = "USE &VESCC SELECT CODTAB[1,2]=="; query_scc << '"' << conai_class2str(conai_specie) << '"'; + TISAM_recordset scc(query_scc); + for (bool ok_scc = scc.move_first(); ok_scc; ok_scc = scc.move_next()) + { + TString sottoclass(scc.get("CODTAB").as_string()); + TString codart(scc.get("S1").as_string()); + TString msg(str); - long last_ndoc = 0; + msg << " - Sottocategoria " << sottoclass << ')'; + TProgress_monitor pi(1, msg); // Prima progresso indeterminato (1) ... + pi.set_max(rdoc.items()); // ... poi conteggio esatto (rdoc.items) - //Scansione del recordset trovato - for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) - { - if (!pi.add_status()) - break; + long last_ndoc = 0; - const long ndoc = rdoc.get(RDOC_NDOC).as_int(); - if (ndoc != last_ndoc) - { - scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, codart.as_string()); - last_ndoc = ndoc; - } - } //for(bool ok = rdoc.move_first(.. + //Scansione del recordset trovato + for (bool ok = rdoc.move_first(); ok; ok = rdoc.move_next()) + { + if (!pi.add_status()) + break; + const long ndoc = rdoc.get(RDOC_NDOC).as_int(); + if (ndoc != last_ndoc) + { + scrivi_csv(rdoc.cursor()->curr(), *csv, conai_specie, sottoclass, codart); + last_ndoc = ndoc; + } + } //for(bool ok = rdoc.move_first(.. + } //for(bool ok = scc.move_first(.. } //FOR_EACH... + if (_log->errors() != 0) + { + _log->print_or_preview(); + if (!yesno_box("Ci sono errori. Vuoi continuare ugualmente ?")) + return; + } + if (!csv->empty()) { @@ -695,6 +777,8 @@ bool TDichiarazione_CONAI::create() if (!has_module(DCAUT)) return cantaccess_box(title()); + _log = new TLog_report("Errori Dichiarazione CONAI"); + return TSkeleton_application::create(); } diff --git a/src/tp/tp0900ac.png b/src/tp/tp0900ac.png index 13f06ef43..a746026e4 100755 Binary files a/src/tp/tp0900ac.png and b/src/tp/tp0900ac.png differ diff --git a/src/tp/tp0900ac.rep b/src/tp/tp0900ac.rep index f9f3a3528..355d6f002 100755 --- a/src/tp/tp0900ac.rep +++ b/src/tp/tp0900ac.rep @@ -2,7 +2,7 @@ Dichiarazione CONAI acciaio 6.1 -
+
- + IF(#PERIODO="1","X","") @@ -20,7 +20,7 @@ #ANNO - + IF(#PERIODO="2","X","") @@ -44,7 +44,7 @@ 2 IF(#TRIMESTRE="12","X","") - + IF(#PERIODO="3","X","") @@ -111,11 +111,11 @@ #SOCIO - + IF(#PRODUT="1","X","") - + IF(#PRODUT="2","X","") @@ -142,441 +142,171 @@ #EMAIL
-
-
+
+
+ J + 0 +#F2.101 ! +0 +#F2.102 ! +0 +#F2.103 ! +0 +#F2.104 ! +
+
"tp0900ac.png"
-
-