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];
//servono SOLO le righe CONAI!!!!!
const TString& codagg1 = rdoc.get(get_conai_cat_name(conai_specie));
//quantita' totale conai (A + B) sul report
const real n = rdoc.calc_conai_qta(conai_specie);
if (codagg1 == conai_codart)
{
//quantita' totale conai (A + B) sul report
const real n = rdoc.calc_conai_qta(conai_specie);
if (n != ZERO)
{
qta_AB_conai.add(n, j); //va calcolato con il metodo apposito
//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];
//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
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";
TString4 sottocat = rdoc.get(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("");
//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-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga
csv.set(0, TVariant(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)));
//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, TVariant(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)));
//codici conai
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...)
//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...)
//prezzo
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata
csv.set(10, TVariant(prezzo));
//prezzo
const real prezzo = riga_generata.get_real(RDOC_PREZZO); //va preso dalla riga generata
csv.set(10, TVariant(prezzo));
//um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta));
//um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = (real&)qta_AB_conai[i];
if (is_nac)
qta_tot_conai = -qta_tot_conai;
csv.set(15, TVariant(qta_tot_conai));
//quantita' totale conai (A + B) sul report (le NAC hanno segno rovesciato)
real qta_tot_conai = (real&)qta_AB_conai[i];
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)
real qta_assoggettata_conai = agip.get();
//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 == ZERO)
{
//se trova la % di esenzione al 100 non puo' assoggettare conai!
qta_assoggettata_conai = ZERO;
}
//se non trova un prezzo nella riga generata la % di esenzione CONAI e' 100
if (prezzo == 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, TVariant(qta_assoggettata_conai));
if (is_nac)
qta_assoggettata_conai = -qta_assoggettata_conai;
csv.set(13, TVariant(qta_assoggettata_conai));
//quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai;
csv.set(12, TVariant(qta_esente_conai));
//quantita' esente conai (A) sul report
const real qta_esente_conai = qta_tot_conai - qta_assoggettata_conai;
csv.set(12, TVariant(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));
//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 qtagg2
const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2);
csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in qtagg2
const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2);
csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai));
}
//percentuale di esenzione conai in cfven
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];
//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
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";
//se non e' stata definita la sottocategoria conai (maiali!!) va messa uguale a quella generica
TString4 sottocat = rdoc.get(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("");
//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-codagg2-prezzo-um-conai(AB)-conai(B)-conai(A)
//parte chiave della riga
csv.set(0, TVariant(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)));
//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, TVariant(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)));
//codici conai
csv.set(8, TVariant(codagg1)); //codice materiale conai (es. carta, legno...)
csv.set(9, TVariant(codagg2)); //sottocodice materiale (es. carta imballo, busta...)
//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...)
//prezzo
const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa
csv.set(10, TVariant(prezzo));
//prezzo
const real prezzo = rdoc.get_real(RDOC_PREZZO); //va preso dalla riga stessa
csv.set(10, TVariant(prezzo));
//um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta));
//um conai
const TString4 umqta = cache().get("SPP", conai_codart, "S7"); //unita' di misura dalla tabella SPP
csv.set(11, TVariant(umqta));
//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' 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));
//percentuale di esenzione conai al 100%?
const real rdoc_perc_conai = rdoc.get_real(RDOC_QTAGG2);
//percentuale di esenzione conai al 100%?
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..
//..in precedenza non deve fare nulla!)
real qta_assoggettata_conai = 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;
if (rdoc_perc_conai == CENTO)
qta_assoggettata_conai = ZERO;
if (rdoc_perc_conai == CENTO)
qta_assoggettata_conai = ZERO;
csv.set(13, TVariant(qta_assoggettata_conai));
csv.set(13, TVariant(qta_assoggettata_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));
//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));
//valore totale contributo (BxC) sul report
const real totale_contrib_conai = qta_assoggettata_conai * prezzo;
csv.set(14, TVariant(totale_contrib_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 qtagg2
csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in qtagg2
csv.set(16, TVariant(rdoc_perc_conai));
//percentuale di esenzione conai in cfven
csv.set(17, TVariant(cfven_perc_conai));
}
//percentuale di esenzione conai in cfven
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& 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& 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,..
//..le quantita' etc) e le righe generate da CONAI (per avere i prezzi)
TString query;
TString cat_fieldname(get_conai_cat_name(conai_specie));
TString scat_fieldname(get_conai_sottocat_name(conai_specie));
if (cat_fieldname!= "CODAGG1")
cat_fieldname.insert("RG1:");
if (scat_fieldname.blank())
return;
query << "USE RDOC KEY 1\n";
query << "SELECT (BETWEEN(DOC.DATADOC,#DADATA,#ADATA))&&(DOC.TIPODOC=#TIPODOC)&&(" << cat_fieldname << "=#CODART)\n";
scat_fieldname.insert("RG1:");
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 << "FROM 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("#DADATA", dataini);
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
TDichiarazione_CONAI_csv_recordset* csv = new TDichiarazione_CONAI_csv_recordset;