diff --git a/ce/ce4300.cpp b/ce/ce4300.cpp index 402742f96..697644ba8 100755 --- a/ce/ce4300.cpp +++ b/ce/ce4300.cpp @@ -4,11 +4,13 @@ #include #include #include +#include #include #include "../cg/cglib01.h" #include "ammce.h" +#include "cespi.h" #include "movce.h" #include "salce.h" #include "celib.h" @@ -101,51 +103,182 @@ void TStampa_proiez_ammo_recordset::set_filter(const TStampa_proiez_ammo_mask& m { if (dacat == acat) - query << "&&(CODTAB[7,8]==" << dacat << ")"; + query << "&&(CODTAB[7,8]=='" << dacat << "')"; else { if (dacat.full()) - query << "&&(CODTAB[7,8]>=" << dacat << ")"; + query << "&&(CODTAB[7,8]>='" << dacat << "')"; if (acat.full()) - query << "&&(CODTAB[7,8]<=" << acat << ")"; + query << "&&(CODTAB[7,8]<='" << acat << "')"; } } query << "\nBY I0 CODTAB[7,8]"; - set(query); //setta la nuova query nel report (che avrebbe solo USE CESPI) + set(query); //setta la nuova query nel report } + //////////////////////////////////////////////////////// // REPORT //////////////////////////////////////////////////////// class TStampa_proiez_ammo_rep : public TReport { int _anno; + //Clamoroso TAssocarray che conterra' tutti i valori dei record di CESPI utili al completamento.. + //..della faticosa stampa.. + TAssoc_array _cat; + protected: virtual bool get_usr_val(const TString& name, TVariant& var) const; + void add_value (const int codcat, const char* field, const real& value); + real get_value (const int codcat, const char* field) const; + public: void set_filter(const TStampa_proiez_ammo_mask& msk); }; + +void TStampa_proiez_ammo_rep::add_value (const int codcat, const char* field, const real& value) +{ + TString4 key; + key << codcat; + + TAssoc_array* cat = (TAssoc_array*)_cat.objptr(key); + if (cat == NULL) + { + cat = new TAssoc_array; + _cat.add(key, cat); + } + real* val = (real*)cat->objptr(field); + if (val == NULL) + { + val = new real; + cat->add(field, val); + } + *val += value; +} + + +real TStampa_proiez_ammo_rep::get_value (const int codcat, const char* field) const +{ + TString4 key; + key << codcat; + + TAssoc_array* cat = (TAssoc_array*)_cat.objptr(key); + if (cat != NULL) + { + real* val = (real*)cat->objptr(field); + if (val != NULL) + return *val; + } + return ZERO; +} + + void TStampa_proiez_ammo_rep::set_filter(const TStampa_proiez_ammo_mask& msk) { _anno = msk.get_int(F_ESERCIZIO); ((TStampa_proiez_ammo_recordset*) recordset())->set_filter(msk); + + _cat.destroy(); + + //Si vuole creare una lista di tutti i cespiti che ricadono nei parametri gr/sp/cat della.. + //..maschera di selezione, che verra' poi utilizzato per calcolare i valori del costo di tali.. + //..cespiti riuniti nella categoria di appartenenza + TRelation rel_cespi(LF_CESPI); + TRectype darec_cespi(LF_CESPI), arec_cespi(LF_CESPI); + darec_cespi.put(CESPI_CODCGRA, msk.get(F_GRUPPO)); + darec_cespi.put(CESPI_CODSPA, msk.get(F_SPECIE)); + darec_cespi.put(CESPI_CODCAT, msk.get(F_FROM_CAT)); + + arec_cespi = darec_cespi; + arec_cespi.put(CESPI_CODCAT, msk.get(F_TO_CAT)); + + //Dalla lista cespiti deve risalire ai costi, agli ammortamenti e alle alienazioni;.. + //..quindi servono i files collegati.. + TLocalisamfile salce(LF_SALCE); + TLocalisamfile ammce(LF_AMMCE); + + //ISAM query per trovare su MOVCE i movimenti relativi al cespite corrente nell'esercizio selezionato + TString query; + TEsercizi_contabili esc; + const TDate& dataini = esc[_anno].inizio(); + const TDate& datafine = esc[_anno].fine(); + query.format("USE MOVCE KEY 2 SELECT NUM(ANSI(DTMOV)>=%ld)&&NUM(ANSI(DTMOV)<=%ld)\nFROM IDCESPITE=#CESPITE\nTO IDCESPITE=#CESPITE", + dataini.date2ansi(), datafine.date2ansi()); + TISAM_recordset movce(query); + + //Ciclo principale per riempire _cat, assoc_array di assoc_array che sara' poi scandito in fase di creazione report + //Il metodo add_value e' quello che effettivamente aggiunge i valori a _cat + TCursor cur_cespi(&rel_cespi, "", 2, &darec_cespi, &arec_cespi); + const TRecnotype num = cur_cespi.items(); + TProgind pi(num, "Calcolo proiezione ammortamenti..."); + for (cur_cespi = 0; cur_cespi.pos() < num; ++cur_cespi) + { + pi.addstatus(1); + + //Colonna COSTO + const TString& idcespite = rel_cespi.curr().get(CESPI_IDCESPITE); + const int codcat = rel_cespi.curr().get_int(CESPI_CODCAT); + salce.put(SALCE_IDCESPITE, idcespite); + salce.put(SALCE_CODES, _anno); + salce.put(SALCE_TPSALDO, 1); + if (salce.read() == NOERR) + add_value(codcat, SALCE_CSTO, salce.get_real(SALCE_CSTO)); + + //Colonna ALIENAZIONI + //cerca tutti i movimenti di vendita relativi al cespite corrente all'interno dell'esercizio.. + //..selezionato sulla maschera;somma i loro importi in modo da ricavare l'importo complessivo.. + //..di tutti + movce.set_var("#CESPITE", TVariant(idcespite)); //assegna il vero valore dell'idcespite alla query + for (TRecnotype i = 0; movce.move_to(i); i++) + { + const real vendita = movce.get(MOVCE_IMPVEN).as_real(); + add_value(codcat, MOVCE_IMPVEN, vendita); + } + + //Colonna FAMM (fondo ammortamento) + ammce.put(AMMCE_IDCESPITE, idcespite); + ammce.put(AMMCE_CODES, _anno); + ammce.put(AMMCE_TPSALDO, 1); //tiposaldo iniziale + ammce.put(AMMCE_TPAMM, 1); //tipoamm fiscale + if (ammce.read() == NOERR) + { + real famm; + famm += ammce.get_real(AMMCE_QNOR); + famm += ammce.get_real(AMMCE_QACC); + famm += ammce.get_real(AMMCE_QANT); + add_value(codcat, AMMCE_QNOR, famm); + } + + //Colonna PERCAMM (aliquota ammortamento) + //Colonna QAMM + //Per questi ci vuole un tiposaldo diverso + ammce.put(AMMCE_TPSALDO, 2); //tiposaldo finale + if (ammce.read() == NOERR) + { + real percamm; + percamm += ammce.get_real(AMMCE_PNOR); + percamm += ammce.get_real(AMMCE_PACC); + percamm += ammce.get_real(AMMCE_PANT); + add_value(codcat, AMMCE_PNOR, percamm); + + real qamm; + qamm += ammce.get_real(AMMCE_QNOR); + qamm += ammce.get_real(AMMCE_QACC); + qamm += ammce.get_real(AMMCE_QANT); + add_value(codcat, AMMCE_QACC, qamm); + } + + } //for(cur_cespi... + } //metodo per il calcolo dei campi da calcolare (ma va'!) nel report bool TStampa_proiez_ammo_rep::get_usr_val(const TString& name, TVariant& var) const { const TRecordset& recset = *recordset(); - const TString& idcespite = recset.get("IDCESPITE").as_string(); - if (name == "#DESCAT") //categoria (descrizione della categoria corrente) - { - const int gruppo = recset.get("CODCGRA").as_int(); - const TString& specie = recset.get("CODSPA").as_string(); - const int categoria = recset.get("CODCAT").as_int(); - const TRectype& rec_cac = ditta_cespiti().categoria(gruppo, specie, categoria); - var = rec_cac.get("S0"); - return true; - } + const int codcat = atoi(recset.get("CODTAB").as_string().mid(6, 2)); + if (name == "#ANNOES") { var.set(_anno); @@ -159,75 +292,29 @@ bool TStampa_proiez_ammo_rep::get_usr_val(const TString& name, TVariant& var) co var.set(dal - 1L); return true; } + if (name == "#COSTO") //costo + { + var = get_value(codcat, SALCE_CSTO); + return true; + } if (name == "#ALIENAZ") //movimenti di vendita { - //cerca tutti i movimenti di vendita relativi al cespite corrente all'interno dell'esercizio.. - //..selezionato sulla maschera;somma i loro importi in modo da ricavare l'importo complessivo.. - //..di tutti - TString query; - - TEsercizi_contabili esc; - const TDate& dataini = esc[_anno].inizio(); - const TDate& datafine = esc[_anno].fine(); - - query.format("USE MOVCE KEY 2 SELECT NUM(ANSI(DTMOV)>=%ld)&&NUM(ANSI(DTMOV)<=%ld)\nFROM IDCESPITE=%s\nTO IDCESPITE=%s", - dataini.date2ansi(), datafine.date2ansi(), (const char*)idcespite, (const char*)idcespite); - TISAM_recordset isam(query); - real somma_vendite; - for (TRecnotype i = 0; isam.move_to(i); i++) - { - const real vendita = isam.get(MOVCE_IMPVEN).as_real(); - somma_vendite += vendita; - } - var = somma_vendite; - - return true; - } - if (name == "#COSTO") //costo - { - TToken_string key; - key = idcespite; //cespite - key.add(_anno); //esercizio - key.add(1); //tiposaldo finale - const TRectype& rec_salce = cache().get(LF_SALCE, key); - const real costo = rec_salce.get_real(SALCE_CSTO); - var = costo; - return true; - } - if (name == "#PERCAMM") //percentuale ammortamento - { - TToken_string key; - key = idcespite; - key.add(_anno); - key.add(2); //tiposaldo finale - key.add(1); //tipoamm fiscale - const TRectype& rec_ammce = cache().get(LF_AMMCE, key); - const real percamm = rec_ammce.get_real(AMMCE_PNOR) + rec_ammce.get_real(AMMCE_PACC) + rec_ammce.get_real(AMMCE_PANT); - var = percamm; - return true; - } - if (name == "#QAMM") //fondo ammortamento esercizio corrente - { - TToken_string key; - key = idcespite; - key.add(_anno); - key.add(2); //tiposaldo finale - key.add(1); //tipoamm fiscale - const TRectype& rec_ammce = cache().get(LF_AMMCE, key); - const real quotamm = rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + rec_ammce.get_real(AMMCE_QANT); - var = quotamm; + var = get_value(codcat, MOVCE_IMPVEN); return true; } if (name == "#FAMM") //fondo ammortamento alla fine dell'esercizio precedente { - TToken_string key; - key = idcespite; - key.add(_anno); - key.add(1); //tiposaldo iniziale - key.add(1); //tipoamm fiscale - const TRectype& rec_ammce = cache().get(LF_AMMCE, key); - const real quotamm = rec_ammce.get_real(AMMCE_QNOR) + rec_ammce.get_real(AMMCE_QACC) + rec_ammce.get_real(AMMCE_QANT); - var = quotamm; + var = get_value(codcat, AMMCE_QNOR); + return true; + } + if (name == "#PERCAMM") //percentuale ammortamento + { + var = get_value(codcat, AMMCE_PNOR); + return true; + } + if (name == "#QAMM") //fondo ammortamento esercizio corrente + { + var = get_value(codcat, AMMCE_QACC); return true; } diff --git a/ce/ce4300a.rep b/ce/ce4300a.rep index 2bf015d34..c1fb53643 100755 --- a/ce/ce4300a.rep +++ b/ce/ce4300a.rep @@ -1,11 +1,21 @@ Proiezione ammortamenti cespiti - +
+ MESSAGE RESET,F1.101 +MESSAGE RESET,F1.102 +MESSAGE RESET,F1.103 +MESSAGE RESET,F1.104 +MESSAGE RESET,F1.105 +MESSAGE RESET,F1.106 +MESSAGE RESET,F1.107 +MESSAGE RESET,F1.108 +MESSAGE RESET,F1.109 +MESSAGE RESET,F1.110 @@ -23,107 +33,197 @@
I0 - + + MESSAGE RESET,F2.101 +MESSAGE RESET,F2.102 +MESSAGE RESET,F2.103 +MESSAGE RESET,F2.104 +MESSAGE RESET,F2.105 +MESSAGE RESET,F2.106 +MESSAGE RESET,F2.107 +MESSAGE RESET,F2.108 +MESSAGE RESET,F2.109 +MESSAGE RESET,F2.110 I0 + MESSAGE COPY,F2.100
  • - - - - - - - - - + + + + + + + + + - + #FINESCPREC - - + + #FINESCPREC - - - + + + #ANNOES - + #ANNOES+1 - + #ANNOES+2 - + #ANNOES+3 - + #ANNOES+4 - - + +
  • CODTAB[7,8] - + S0 - + #PERCAMM - - #QAMM - - - #QAMM - - - #QAMM - - - #QAMM - - - #QAMM - - - #RESAMM - - + #COSTO + MESSAGE ADD,F2.101 - + #ALIENAZ + MESSAGE ADD,F2.102 - + #FAMM + MESSAGE ADD,F2.103 - + #101-#102-#103 + + #QAMM + MESSAGE ADD,F2.105 + + + MESSAGE ADD,F2.106 + + + MESSAGE ADD,F2.107 + + + MESSAGE ADD,F2.108 + + + MESSAGE ADD,F2.109 + + + MESSAGE ADD,F2.110 +
    -
    -
    - USE CESPI KEY 2 -
    -
    -
    -
    +
    + + + + + + + + + + + + + + + + + #101-#102-#103 + + + MESSAGE ADD,F1.105 + + + MESSAGE ADD,F1.106 + + + MESSAGE ADD,F1.107 + + + MESSAGE ADD,F1.108 + + + MESSAGE ADD,F1.109 + + + MESSAGE ADD,F1.110 + +
    +
    + + + + + + + + +
  • +
  • +
  • + + + + MESSAGE ADD,F1.101 + + + MESSAGE ADD,F1.102 + + + MESSAGE ADD,F1.103 + + + #101-#102-#103 + + + MESSAGE ADD,F1.105 + + + MESSAGE ADD,F1.106 + + + MESSAGE ADD,F1.107 + + + MESSAGE ADD,F1.108 + + + MESSAGE ADD,F1.109 + + + MESSAGE ADD,F1.110 +
  • USE %CAC BY I0 CODTAB[7,8]