Patch level : 10.0 418

Files correlati     : tp0.exe
Ricompilazione Demo : [ ]
Commento

Implementazione calcolo CONAI con un campo e le sottocategorie per ogni tipo di imballo, sulle righe documento.

Verificae che i profili personalizzati di documento e di riga continuino a funzionare.

Doceve necessita, bisogna:

per I profili documento personalizzati sostituire il campo 500 (sheet) con il campo seguente

SPREADSHEET 500
BE
PR 2 8 ""
IT "Lordo@5"
IT "Tipo riga@2"
IT "Mag. @3"
IT "Dep.@2"
IT "Codice Articolo@20"
IT "Codice\nLivello 1@9"
IT "Codice\nLivello 2@9"
IT "Codice\nLivello 3@9"
IT "Codice\nLivello 4@9"
IT "Descrizione@50"
IT "UM@2"
IT "Quantita'@11"
IT "Prezzo@18"
IT "Quantita'\nEvasa@11"
IT "Evasa@1"
IT "Tara@15"
IT "Peso Netto@15"
IT "N.Colli@7"
IT "Da evadere@1"
IT "Sconto@25"
IT "Perc.\nProvv.@5"
IT "Imp.Fisso unitario@1"
IT "Importo Fisso@18"
IT "Codice\nIVA@4"
IT "Addebito IVA@1"
IT "Aspetto beni@3"
IT "Causale\nMagazzino@12"
IT "Magazzino\nCollegato@9"
IT "Deposito\nCollegato@9"
IT "Data\nconsegna@10"
IT "Cod. Art. Mag.@20"
IT "Controllato@11"
IT "Quantita'\nagg. 1@13"
IT "Quantita'\nagg. 2@13"
IT "Quantita'\nagg. 3@13"
IT "Quantita'\nagg. 4@13"
IT "Quantita'\nagg. 5@13"
IT "Impianto@8"
IT "Linea@5"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "CDC 1@20"
IT "Codice aggiuntivo 1@20"
IT "Codice aggiuntivo 2@20"
IT "Detraibilità@12"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Jolly@20"
IT "Riduzione prezzo@18"
IT "2a Perc.\nProvv.@5"
IT "Sottocategoria\nACCIAIO@4"
IT "Peso unitario\nACCIAIO@13"
IT "Sottocategoria\nALLUMINIO@4"
IT "Peso unitario\nALLUMINIO@13"
IT "Sottocategoria\nCARTA@4"
IT "Peso unitario\nCARTA@13"
IT "Sottocategoria\nPLASTICA@4"
IT "Peso unitario\nPLASTIC...


git-svn-id: svn://10.65.10.50/trunk@19310 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 2009-09-20 23:40:35 +00:00
parent dbdb890a48
commit 6db459aef4

View File

@ -157,13 +157,11 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(TDocumento& doc, con
{ {
const TRiga_documento& rdoc = doc[j]; const TRiga_documento& rdoc = doc[j];
//servono SOLO le righe CONAI!!!!! //quantita' totale conai (A + B) sul report
const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie)); const real n = rdoc.calc_conai_qta(conai_specie);
if (codagg1 == conai_codart) if (n != ZERO)
{ {
//quantita' totale conai (A + B) sul report
const real n = rdoc.calc_conai_qta(conai_specie);
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
//quantita' assoggettata (B) sul report //quantita' assoggettata (B) sul report
@ -177,80 +175,73 @@ void TDichiarazione_CONAI::scrivi_csv_doc_con_riga_generata(TDocumento& doc, con
const TRiga_documento& rdoc = doc[i]; const TRiga_documento& rdoc = doc[i];
//servono SOLO le righe CONAI!!!!! //servono SOLO le righe CONAI!!!!!
const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie));
if (codagg1 == conai_codart)
{
//se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
TString4 codagg2 = rdoc.get(get_conai_sottocat_name(conai_specie)); TString4 sottocat = rdoc.get(get_conai_sottocat_name(conai_specie));
if (codagg2.empty()) //puo' capitare che la sottocategoria sia stata troncata alla categoria
codagg2 = codagg1; if (sottocat.len() == 2)
//puo' capitare che la sottocategoria sia stata troncata alla categoria sottocat << "99";
if (codagg2 == codagg1)
codagg2 << "99";
//creazione di un nuovo record da esportare //creazione di un nuovo record da esportare
csv.new_rec(""); csv.new_rec("");
//riempie i campi del record del csv //riempie i campi del record del csv
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A) //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga //parte chiave della riga
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM))); csv.set(0, TVariant(rdoc.get(RDOC_CODNUM)));
csv.set(1, TVariant(rdoc.get(RDOC_ANNO))); csv.set(1, TVariant(rdoc.get(RDOC_ANNO)));
csv.set(2, TVariant(rdoc.get(RDOC_NDOC))); csv.set(2, TVariant(rdoc.get(RDOC_NDOC)));
csv.set(3, TVariant(datadoc)); csv.set(3, TVariant(datadoc));
csv.set(4, TVariant(clifo.codice())); csv.set(4, TVariant(clifo.codice()));
csv.set(5, TVariant(clifo_paiv)); csv.set(5, TVariant(clifo_paiv));
csv.set(6, TVariant(rdoc.get(RDOC_CODART))); csv.set(6, TVariant(rdoc.get(RDOC_CODART)));
csv.set(7, TVariant(rdoc.get(RDOC_NRIGA))); csv.set(7, TVariant(rdoc.get(RDOC_NRIGA)));
//codici conai //codici conai
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...) csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...) csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...)
//prezzo //prezzo
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata
csv.set(10, TVariant(prezzo)); csv.set(10, TVariant(prezzo));
//um conai //um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta)); csv.set(11, TVariant(umqta));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = (real&)qta_AB_conai[i]; real qta_tot_conai = (real&)qta_AB_conai[i];
if (is_nac) if (is_nac)
qta_tot_conai = -qta_tot_conai; qta_tot_conai = -qta_tot_conai;
csv.set(15, TVariant(qta_tot_conai)); csv.set(15, TVariant(qta_tot_conai));
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato) //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato)
real qta_assoggettata_conai = agip.get(); real qta_assoggettata_conai = agip.get();
//se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100 //se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100
if (prezzo == ZERO) if (prezzo == ZERO)
{ {
//se trova la % di esenzione al 100 non puo' assoggettare conai! //se trova la % di esenzione al 100 non puo' assoggettare conai!
qta_assoggettata_conai = ZERO; qta_assoggettata_conai = ZERO;
} }
if (is_nac) if (is_nac)
qta_assoggettata_conai = -qta_assoggettata_conai; qta_assoggettata_conai = -qta_assoggettata_conai;
csv.set(13, TVariant(qta_assoggettata_conai)); csv.set(13, TVariant(qta_assoggettata_conai));
//quantita' esente conai (A) sul report //quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai;
csv.set(12, TVariant(qta_esente_conai)); csv.set(12, TVariant(qta_esente_conai));
//valore totale contributo (BxC) sul report //valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo; const real totale_contrib_conai = qta_assoggettata_conai * prezzo;
csv.set(14, TVariant(totale_contrib_conai)); csv.set(14, TVariant(totale_contrib_conai));
//percentuale di esenzione conai in qtagg2 //percentuale di esenzione conai in qtagg2
const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2); const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2);
csv.set(16, TVariant(rdoc_perc_conai)); csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven //percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai)); csv.set(17, TVariant(cfven_perc_conai));
}
} }
} }
@ -278,78 +269,70 @@ void TDichiarazione_CONAI::scrivi_csv_doc_speciale(TDocumento& doc, TDichiarazio
{ {
const TRiga_documento& rdoc = doc[i]; const TRiga_documento& rdoc = doc[i];
//servono SOLO le righe CONAI!!!!! //se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie)); TString4 sottocat = rdoc.get(get_conai_sottocat_name(conai_specie));
//puo' capitare che la sottocategoria sia stata troncata alla categoria
if (codagg1 == conai_codart) if (sottocat.len() == 2)
{ sottocat << "99";
//se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
TString4 codagg2 = rdoc.get(get_conai_sottocat_name(conai_specie));
if (codagg2.empty())
codagg2 = codagg1;
//puo' capitare che la sottocategoria sia stata troncata alla categoria
if (codagg2 == codagg1)
codagg2 << "99";
//creazione di un nuovo record da esportare //creazione di un nuovo record da esportare
csv.new_rec(""); csv.new_rec("");
//riempie i campi del record del csv //riempie i campi del record del csv
//codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A) //codnum-anno-ndoc-datadoc-codcli-cofi-nriga-codagg1-sottocat-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga //parte chiave della riga
csv.set(0, TVariant(rdoc.get(RDOC_CODNUM))); csv.set(0, TVariant(rdoc.get(RDOC_CODNUM)));
csv.set(1, TVariant(rdoc.get(RDOC_ANNO))); csv.set(1, TVariant(rdoc.get(RDOC_ANNO)));
csv.set(2, TVariant(rdoc.get(RDOC_NDOC))); csv.set(2, TVariant(rdoc.get(RDOC_NDOC)));
csv.set(3, TVariant(datadoc)); csv.set(3, TVariant(datadoc));
csv.set(4, TVariant(clifo.codice())); csv.set(4, TVariant(clifo.codice()));
csv.set(5, TVariant(clifo_paiv)); csv.set(5, TVariant(clifo_paiv));
csv.set(6, TVariant(rdoc.get(RDOC_CODART))); csv.set(6, TVariant(rdoc.get(RDOC_CODART)));
csv.set(7, TVariant(rdoc.get(RDOC_NRIGA))); csv.set(7, TVariant(rdoc.get(RDOC_NRIGA)));
//codici conai //codici conai
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...) csv.set(8, TVariant(sottocat.left(2))); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...) csv.set(9, TVariant(sottocat)); //sottocodice materiale (es. carta imballo, busta...)
//prezzo //prezzo
const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa
csv.set(10, TVariant(prezzo)); csv.set(10, TVariant(prezzo));
//um conai //um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta)); csv.set(11, TVariant(umqta));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato) //quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = rdoc.get_real(RDOC_QTA); real qta_tot_conai = rdoc.get_real(RDOC_QTA);
if (is_nac) if (is_nac)
qta_tot_conai = -qta_tot_conai; qta_tot_conai = -qta_tot_conai;
csv.set(15, TVariant(qta_tot_conai)); csv.set(15, TVariant(qta_tot_conai));
//percentuale di esenzione conai al 100%? //percentuale di esenzione conai al 100%?
const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2); const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2);
//quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato.. //quantita' assoggettata (B) sul report (le NAC hanno segno rovesciato, ma avendolo gia' gia' rovesciato..
//..in precedenza non deve fare nulla!) //..in precedenza non deve fare nulla!)
real qta_assoggettata_conai = qta_tot_conai; real qta_assoggettata_conai = qta_tot_conai;
if (rdoc_perc_conai == CENTO) if (rdoc_perc_conai == CENTO)
qta_assoggettata_conai = ZERO; qta_assoggettata_conai = ZERO;
csv.set(13, TVariant(qta_assoggettata_conai)); csv.set(13, TVariant(qta_assoggettata_conai));
//quantita' esente conai (A) sul report //quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO! const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai; //deve essere sempre ZERO!
csv.set(12, TVariant(qta_esente_conai)); csv.set(12, TVariant(qta_esente_conai));
//valore totale contributo (BxC) sul report //valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo; const real totale_contrib_conai = qta_assoggettata_conai * prezzo;
csv.set(14, TVariant(totale_contrib_conai)); csv.set(14, TVariant(totale_contrib_conai));
//percentuale di esenzione conai in qtagg2 //percentuale di esenzione conai in qtagg2
csv.set(16, TVariant(rdoc_perc_conai)); csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven //percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai)); csv.set(17, TVariant(cfven_perc_conai));
}
} }
} }
@ -402,7 +385,7 @@ static int compare_csv_rows_specie(const TObject** o1, const TObject** o2)
TToken_string& s1 = *(TToken_string*)*o1; TToken_string& s1 = *(TToken_string*)*o1;
TToken_string& s2 = *(TToken_string*)*o2; TToken_string& s2 = *(TToken_string*)*o2;
//deve ordinare sul campo codagg2 = codice specie conai (campo 8) //deve ordinare sul campo sottocat = codice specie conai (campo 8)
const TString& c1 = s1.get(8); const TString& c1 = s1.get(8);
const TString& c2 = s2.get(8); const TString& c2 = s2.get(8);
@ -560,13 +543,15 @@ 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,.. //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 query;
TString cat_fieldname(get_conai_cat_name(conai_specie)); TString scat_fieldname(get_conai_sottocat_name(conai_specie));
if (cat_fieldname!= "CODAGG1") if (scat_fieldname.blank())
cat_fieldname.insert("RG1:"); return;
query << "USE RDOC KEY 1\n"; scat_fieldname.insert("RG1:");
query << "SELECT (BETWEEN(DOC.DATADOC,#DADATA,#ADATA))&&(DOC.TIPODOC=#TIPODOC)&&(" << cat_fieldname << "=#CODART)\n";
query << "USE RDOC\n";
query << "SELECT BETWEEN(33.DATADOC,#DADATA,#ADATA)&&(33.TIPODOC==#TIPODOC)&&(" << scat_fieldname <<"!=\"\")\n";
query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n"; query << "JOIN DOC INTO PROVV==PROVV ANNO==ANNO CODNUM==CODNUM NDOC==NDOC\n";
query << "FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n"; query << "FROM CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n";
query << "TO CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n"; query << "TO CODNUM=#CODNUM ANNO=#ANNO PROVV=\"D\"\n";
@ -578,7 +563,7 @@ void TDichiarazione_CONAI::elabora(const TMask& mask) const
rdoc.set_var("#ANNO", TVariant((long)anno)); rdoc.set_var("#ANNO", TVariant((long)anno));
rdoc.set_var("#DADATA", dataini); rdoc.set_var("#DADATA", dataini);
rdoc.set_var("#ADATA", datafin); rdoc.set_var("#ADATA", datafin);
rdoc.set_var("#CODART", codart); //rdoc.set_var("#CODART", codart);
//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;