// ------------------------------------------------------------ // Calcolo liquidazioni // Part 5: stampa // fv 21-1-94 // ------------------------------------------------------------ #include #include "cg4300.h" // flags per annuale #define IS_PRORATA 0x0001 // minchietta per prospetto ventilazione class _vDesc : public TObject { public: TString _codiva; real _acq; real _vnd; real _viv; _vDesc() : _codiva(5) {} virtual ~_vDesc() {} }; static char sep[] = "------------------------------------------------------------------" "------------------------------------------------------------------"; void TLiquidazione_app::set_page(int file, int cnt) { _DescrItem& d = (_DescrItem&)_descr_arr[cnt]; set_auto_ff(FALSE); reset_print(); switch(d._flags) { case CHG_PARMS: set_att(d); break; case SET_FIRM: set_firm(d); break; case PIM_ROW: set_pim(d); break; case PIM_HEAD: set_pim_head(d); break; case MISC_LIQ: set_pumpam(d); break; case TOT_ROW: set_plm(d); break; case PLAFOND: set_plafond(d); break; case VENTILA: set_ventila(d); break; case REGAGR: set_regagr(d); break; case REGVIA: set_viaggio(d); break; case THE_END: set_grand(d); break; case LIQACC: set_liqacc(d); break; case ACCONTO: set_acconto_p(d); break; case ACCHEAD: set_acchead_p(d); break; case DELDEB: set_deltab(d, FALSE); break; case DELCRED: set_deltab(d, TRUE); break; } } print_action TLiquidazione_app::postprocess_page(int file, int cnt) { if (_descr_arr.items() == 0 || cnt == _descr_arr.items()-1) return NEXT_PAGE; return REPEAT_PAGE; } bool TLiquidazione_app::preprocess_page(int file, int cnt) { return _descr_arr.items() != 0; } // ---------------------------------------------------------------- // Print description // ---------------------------------------------------------------- void TLiquidazione_app::describe_att(int month, const char* codatt, bool isresult, char flags) { TToken_string atts(codatt); if (_isprint && _canprint) { describe_name(month, atts, flags); if (atts.items() == 1 && _isplafond) describe_plafond(month, codatt); if (atts.items() == 1 && _isvent) describe_ventilation(month, codatt); if (atts.items() == 1 && _isagricolo) describe_agricolo(month, codatt); if (atts.items() == 1 && _isviaggio) describe_viaggio(month, codatt); if (/* isresult || month == 13 */ TRUE) describe_pims(month,codatt); if (atts.items() == 1) describe_consistence(codatt); } } void TLiquidazione_app::describe_name(int month, TToken_string& codatts, char flags) { _DescrItem* d = new _DescrItem(CHG_PARMS); d->_s0 = _nditte->curr().get("CODDITTA"); d->_s1 = _nditte->curr().get("RAGSOC"); d->_s2 = _nditte->curr(LF_ATTIV).get("CODATT"); d->_s3 = codatts.items() == 1 ? (const char*)_nditte->curr(LF_ATTIV).get("DESCR") : ""; d->_s4 = _freqviva; d->_f1 = month; d->_f2 = _isbenzinaro; d->_f3 = (word)flags; if (_mixed && codatts.items() == 1) d->_f0 = atoi(codatts.mid(5)); else d->_f0 = 0; _descr_arr.add(d); } void TLiquidazione_app::describe_firm(int month) { if (!_isprint || !_canprint) return; _DescrItem* d = new _DescrItem(SET_FIRM); d->_s0 = _nditte->curr().get("CODDITTA"); d->_s1 = _nditte->curr().get("RAGSOC"); d->_s2 = _freqviva; d->_f1 = month; _descr_arr.add(d); } void TLiquidazione_app::describe_liqacc() { if (!_isprint || !_canprint) return; if (!look_lia()) return; if (_lia->get("S8") != "A") return; _DescrItem* d = new _DescrItem(LIQACC); d->_r0 = _lia->get_real("R7"); d->_r1 = _lia->get_real("R13"); d->_r2 = _lia->get_real("R14"); d->_r3 = _lia->get_real("R9"); d->_r4 = _lia->get_real("R10"); d->_r5 = _lia->get_real("R8"); d->_r6 = _lia->get_real("R12"); d->_r7 = _lia->get_real("R11"); d->_r8 = _lia->get_real("R4"); TToken_string ff(_lia->get("S1"),'!'); real cre_pre (ff.get(0)); real acq_intr (ff.get(1)); d->_r9 = cre_pre; d->_r10 = acq_intr; _descr_arr.add(d); } void TLiquidazione_app::describe_plafond(int month, const char* codatt) { TString att(codatt); // prepara la descrizione del riepilogo da stampare e lo accoda real t1, t2, t3; _DescrItem* d = new _DescrItem(PLAFOND); if (month == 13) look_pla(codatt); for (int jj = 1; jj <= 3; jj++) // three types of plafond { t1 = 0.0; t2 = 0.0; t3 = 0.0; for (int m = 1; m <= month && m < 13; m++) { if (is_month_ok(m,month) && look_ppa(m,codatt,jj)) { t1 += _ppa->get_real("R0"); t2 += _ppa->get_real("R1"); if (month < 13) t3 = _ppa->get_real("R2"); } } switch (jj) { case 1: d->_r0 = t1; d->_r1 = t2; d->_r2 = month < 13 ? t3 : _pla->get_real("R5"); break; case 2: d->_r3 = t1; d->_r4 = t2; d->_r5 = month < 13 ? t3 : _pla->get_real("R6"); break; case 3: d->_r6 = t1; d->_r7 = t2; d->_r8 = month < 13 ? t3 : _pla->get_real("R7"); break; } } // for tipo esenzione plafond _descr_arr.add(d); // bookmark } void TLiquidazione_app::describe_ventilation(int month, const char* codatt) { if (!_isvent || _isagricolo || _isviaggio) return; _DescrItem* d = new _DescrItem(VENTILA); TString att(codatt); look_plm(month, att); for (_pim->first(); !_pim->eof(); _pim->next()) { if (strcmp(*_pim_codatt,att) != 0) continue; look_reg(*_pim_codreg); look_iva(*_pim_codiva); int tipocr = atoi(*_pim_tipocr); int tipodet = atoi(*_pim_tipodet); int mese = atoi(*_pim_mese); bool corrisp = _reg->get_bool("B0"); real imponibile = _pim->get_real("R0"); real imposta = _pim->get_real("R1"); tiporeg tipomov = (tiporeg)_reg->get_long("I0"); TString tipoiva = _iva->get("S1"); if (_year != *_pim_anno) continue; if (imponibile.is_zero() && imposta.is_zero()) continue; // questi non vanno in liquidazione, i totali sono // gia' calcolati altrove if (tipodet == 1 || (tipodet == 3 && tipocr == 5) || tipodet == 9) continue; // questi non si devono vedere perche' so' bbrutti if (tipoiva == "NS" || tipoiva == "ES" || tipoiva == "NI") continue; if (mese <= month) { if (tipocr == 1 && tipomov == acquisto) { // somma agli acquisti _vDesc* vd = NULL; for (int i = 0; i < d->_arr.items(); i++) { _vDesc* vv = (_vDesc*)&(d->_arr[i]); if (strcmp(vv->_codiva,*_pim_codiva) == 0) { vd = vv; break; } } if (vd == NULL) { vd = new _vDesc; } vd->_acq += (imponibile+imposta); d->_r0 += (imponibile+imposta); if (vd->_codiva.empty()) { vd->_codiva = *_pim_codiva; d->_arr.add(vd); } } else if ((is_month_ok(mese,month) || month == 13) && corrisp && _pim->get_bool("B1") && tipocr == 0 && tipomov == vendita) // non sono sicurissimo della above condition { // somma alle vendite _vDesc* vd = NULL; for (int i = 0; i < d->_arr.items(); i++) { _vDesc* vv = (_vDesc*)&(d->_arr[i]); if (strcmp(vv->_codiva,*_pim_codiva) == 0) { vd = vv; break; } } if (vd == NULL) { vd = new _vDesc; } vd->_vnd += imponibile; vd->_viv += imposta; d->_r1 += imponibile+imposta; if (vd->_codiva.empty()) { vd->_codiva = *_pim_codiva; d->_arr.add(vd); } } } } if (d->_r1.is_zero() || d->_r0.is_zero()) delete d; else _descr_arr.add(d); } void TLiquidazione_app::describe_agricolo(int month, const char* codatt) { _DescrItem* d = new _DescrItem(REGAGR); for (int mese = 1; mese <= month; mese++) { if (!is_month_ok(mese,month)) continue; if (!look_plm(mese, codatt)) continue; d->_r0 += _plm->get_real("R5"); d->_r1 += _plm->get_real("R6"); d->_r2 += _plm->get_real("R7"); d->_r3 += _plm->get_real("R8"); d->_r4 += _plm->get_real("R9"); d->_r5 += _plm->get_real("R10"); d->_r6 += _plm->get_real("R11"); d->_r7 += _pum->get_real("R10"); d->_r8 += _pum->get_real("R11"); } // Aggiungo anche questi per comodita' futura. // in caso di ditta a regime agricolo // alias: // _r9 mantiene la percentuale (gia' arrotondata!) // _r10 mantiene l'iva detraibile calcolata! d->_r9 = (d->_r8 / (d->_r7 + d->_r8)); d->_r9.round(2); d->_r10 = d->_r6 * d->_r9; d->_r9 *= CENTO; d->_r9.round(ROUND_LIRA); d->_r10.round(ROUND_LIRA); _descr_arr.add(d); } void TLiquidazione_app::describe_viaggio(int month, const char* codatt) { if (!look_lim(month)) return; _DescrItem* d = new _DescrItem(REGVIA); for (int mese = 1; mese <= month; mese++) { if (!is_month_ok(mese,month) || !look_plm(mese, codatt)) continue; d->_r0 += _plm->get_real("R5"); // corrispettivi CEE d->_r1 += _plm->get_real("R9"); // corrispettivi misti CEE d->_r2 += _plm->get_real("R6"); // corrispettivi fuori CE d->_r3 += _plm->get_real("R7"); // acquisti CEE d->_r4 += _plm->get_real("R10"); // acquisti misti parte CEE d->_r5 += _plm->get_real("R8"); // acquisti fuori CEE d->_r6 += _plm->get_real("R11"); // acquisti misti parte fuori CEE } // credito di costo precedente (CHECK annuale) d->_r8 = credito_costo_prec(month); // Solita minchiatina dell'arrotondamento alle 1000 lirette se siamo in annuale if (month == 13) { //d->_r0.round(ROUND_MILLELIRE); //d->_r1.round(ROUND_MILLELIRE); //d->_r2.round(ROUND_MILLELIRE); //d->_r3.round(ROUND_MILLELIRE); //d->_r4.round(ROUND_MILLELIRE); //d->_r5.round(ROUND_MILLELIRE); //d->_r6.round(ROUND_MILLELIRE); //d->_r8.round(ROUND_MILLELIRE); round_mille_lire(d->_r0); round_mille_lire(d->_r1); round_mille_lire(d->_r2); round_mille_lire(d->_r3); round_mille_lire(d->_r4); round_mille_lire(d->_r5); round_mille_lire(d->_r6); round_mille_lire(d->_r8); } d->_r7 = (d->_r4 * CENTO)/(d->_r4 + d->_r6); d->_r7.round(2); // percentuale d->_r9 = (d->_r1 * d->_r7)/CENTO; if (month==13) //d->_r9.round(ROUND_MILLELIRE); round_mille_lire(d->_r9); else d->_r9.round(ROUND_LIRA); // Calcola l'iva a debito, visto che servira' anche nel calcolo liquidazione (solo annuale) const real aliva = aliquota_agvia(); const real alcnt = aliva + CENTO; d->_r10 = (d->_r0 + d->_r9) - (d->_r3 + d->_r4 + d->_r8); // base imponibile lorda if (d->_r10.sign() > 0) { d->_r11 = (d->_r10/(alcnt/CENTO)) * (aliva/CENTO); // iva dovuta if (month == 13) //d->_r11.round(ROUND_MILLELIRE); round_mille_lire(d->_r11); else d->_r11.ceil(ROUND_LIRA); } if (month == 13) { look_plm(month,codatt); // Scrive l'iva dovuta, visto che la describe_pims() viene chiamata successivamente. _pom->put("R13",d->_r11); _pom->rewrite(); } _descr_arr.add(d); } void TLiquidazione_app::describe_pims(int month, const char* codatt) // le si passa una tokenstring (o un codatt) e lei, da brava, calcola // cumulando per tutte le attivita' nominatele // ogni riga riguarda un codiva ma tutti i registri // se il mese e' 13 si guarda tutto l'anno // se si tratta di una sola attivita' in att. mista evidenziata o servizievole, // stampa solo vendite e corrispettivi { TToken_string atts(codatt); TString ref(atts.items() == 1 ? codatt : "ALL"); const char* tmpatt; int last = _descr_arr.last(); bool isfirst = TRUE; real t0, t1, t2, t3, t4, t5; real autodafe, autodafe_iva, art40, art40_iva; bool skip_acq = atts.items() == 1 && _mixed; // descrittore riga autodafe' _DescrItem* ads = NULL; // descrittore riga iva dovuta ag. viaggio' _DescrItem* iads = NULL; // questa cazzata serve per far apparire l'intestazione delle colonne // anche se le colonne non ci sono; in tal modo si ottiene una peggior // chiarezza, una peggiore efficienza, una gran rottura di coglioni, // ma risulta identico al dio Sistema. _DescrItem* hea = new _DescrItem(PIM_HEAD); hea->_f0 = skip_acq; // cosi' non compare nemmeno la colonnina! contento? _descr_arr.add(hea); while ((tmpatt = atts.get()) != NULL) { TString att(tmpatt); for (_pim->first(); !_pim->eof(); _pim->next()) { _DescrItem* d = NULL; // compute bool ok = look_reg(*_pim_codreg); ok |= look_iva(*_pim_codiva); bool isnew = FALSE; if (!ok) continue; tiporeg tipomov = (tiporeg)_reg->get_long("I0"); bool corrisp = _reg->get_bool("B0"); TString tipoiva = _iva->get("S1"); int tipodet = atoi(*_pim_tipodet); TString codiva((const char*)(*_pim_codiva)); TString other = _pim->get("S4"); // ACHTUNG! Corrispettivi da ventileer possono ventilare // ad un altro codiva; in tal caso si scrive quello if (corrisp && !other.empty()) { look_iva(other); codiva = other; } // se e' corrispettivo da ventilare non // scrivo un cannolo ripieno visto che e' stato ventilato if (tipomov == vendita && tipoiva == "VE") continue; // se e' il dettaglio di una attivita' mista non stampa // gli acquisti, il perche' losalamadonna if (tipomov == acquisto && skip_acq) continue; // questi non vanno in liquidazione, i totali sono // gia' calcolati altrove if (tipodet == 1 || tipodet == 3 || tipodet == 9) continue; // se ha tutti gli importi nulli viene da un annullamento di // progressivi esistenti (achtung fatture con scontrino) if (_pim->get_real("R0").is_zero() && _pim->get_real("R1").is_zero() && _pim->get_real("R2").is_zero() && _pim->get_real("R5").is_zero() && _pim->get_real("R6").is_zero()) continue; if (strcmp((const char*)*_pim_codatt, att) == 0 && (is_month_ok(atoi(*_pim_mese),month)) && _year == (const char*)*_pim_anno) { // vedi se c'e' gia' un item corrispondente for(int i = last+1; i < _descr_arr.items(); i++) { d = (_DescrItem*)&_descr_arr[i]; if (d->_flags == PIM_ROW && d->_s0 == ref && d->_s1 == codiva) break; if (d->_s1 > codiva) { isnew = TRUE; _DescrItem* dd = new _DescrItem(PIM_ROW); // CicciaPrassi li vuole in ordine crescente _descr_arr.insert(dd,i); // che due maron stereofonic: se quello dopo // era il primo, quello prima va dopo if (d->_f0) { dd->_f0 = TRUE; d->_f0 = FALSE; } else if (isfirst) { d->_f0 = TRUE; isfirst = FALSE; } d = dd; break; } } if (!isnew && i == _descr_arr.items()) { isnew = TRUE; d = new _DescrItem(PIM_ROW); if (isfirst) { d->_f0 = TRUE; isfirst = FALSE; } _descr_arr.add(d); } if (tipomov == acquisto) { d->_r4 += _pim->get_real("R0"); d->_r5 += _pim->get_real("R1"); t4 += _pim->get_real("R0"); t5 += _pim->get_real("R1"); } else // vendita { // vedi corrispettivi veri e falsi real cvi = _pim->get_real("R0"); // imp. totale real cvv = _pim->get_real("R1"); // iva totale real cfi = _pim->get_real("R13"); // imp. falsi corrispettivi real cfv = _pim->get_real("R14"); // iva falsi corrispettivi // Qui comincia la modifica per l'errore MI3404... // Giochiamo sopra la particolarita' che se non e' un registro di corrispettivi // allora se R5 o R6 sono <> 0 significa che trattasi di documento FS, // che pertanto va stornato dal totale corrispettivi. (Cosi' vuole Vladimiro, // anche se sono sempre piu' convinto che sia una trojata). // Va beh, OBBEDISCO. real ifs(_pim->get_real("R5")); // imp. fatture con scontrino real vfs(_pim->get_real("R6")); // iva fatture con scontrino if (!corrisp) { d->_r2 -= ifs; // tolgo FS dai corrispettivi d->_r3 -= vfs; t2 -= ifs; // idem per i totali t3 -= vfs; } // ... E qui finisce. if (corrisp) { cvi -= cfi; cvv -= cfv; } if (corrisp) { // usa R0 e R1 visto che la ventilazione e' gia' // stata calcolata d->_r2 += (cvi /* - ifs */); // tolgo FS dai corrispettivi d->_r3 += (cvv /* - vfs */); d->_r0 += ifs; // aggiungo FS alle vendite d->_r1 += vfs; t2 += (cvi /* - ifs */); // idem per i totali t3 += (cvv /* - vfs */); // non sono molto convinto ma vogliono cio' t0 += ifs; // ...avevo ragione e infatti l'ho cambiato t1 += vfs; } if (!corrisp || (!cfv.is_zero() || !cfi.is_zero())) { real adf, adi; // autofatture non residenti art. 17 real a13i, a13v; // ammontare art 40 c. 5/6/8 real vendi = corrisp ? cfi : _pim->get_real("R0"); real vendv = corrisp ? cfv : _pim->get_real("R1"); // si scorporano solo per l'annuale, altrimenti // vengono normalmente considerati nelle vendite if (month == 13) { TToken_string kr(_pim->get("S0"),'!'); a13i = kr.get(0); a13v = kr.get(1); adf = _pim->get_real("R7"); adi = _pim->get_real("R8"); } d->_r0 += vendi - adf - a13i; d->_r1 += vendv - adi - a13v; t0 += vendi /* - adf */; t1 += vendv /* - adi */; autodafe += adf; autodafe_iva += adi; art40 += a13i; art40_iva += a13v; } } if (isnew) { d->_s0 = ref; d->_s1 = codiva; // flag per stampare l'intestazione colonne } } } look_plm(month,att); real iva74t = _pom->get_real("R13"); if (iva74t.sign() > 0) { if(iads == NULL) iads = new _DescrItem(PIM_ROW); iads->_s0 = "74TER"; // cosi' vollero iads->_s1 = "IVA "; // cosi' vollero iads->_s2 = " dovuta - 74 ter"; // cosi' vollero iads->_r1 += iva74t; t1 += iva74t; if (isfirst) { isfirst = FALSE; iads->_f0 = TRUE; } } } if (art40.sign() > 0 || art40_iva.sign() > 0) { _DescrItem* ads = new _DescrItem(PIM_ROW); ads->_s0 = ref; ads->_s1 = "A13"; ads->_r0 = art40; ads->_r1 = art40_iva; if (isfirst) { isfirst = FALSE; ads->_f0 = TRUE; } _descr_arr.add(ads); } if (autodafe.sign() > 0 || autodafe_iva.sign() > 0) { _DescrItem* ads = new _DescrItem(PIM_ROW); ads->_s0 = ref; ads->_s1 = "AF"; // cosi' vollero, inoltre non e' piu' A35 ma AF, come sul dio sistema ads->_r0 = autodafe; ads->_r1 = autodafe_iva; if (isfirst) { isfirst = FALSE; ads->_f0 = TRUE; } _descr_arr.add(ads); } // ag. viaggio: iva dovuta 74 ter la vogliono in mezzo ai progressivi if (iads != NULL) _descr_arr.add(iads); // prepara una bella riga di totali if (/* !isfirst */ TRUE) { _DescrItem* d = new _DescrItem(TOT_ROW); d->_r0 = t0; d->_r1 = t1; d->_r2 = t2; d->_r3 = t3; d->_r4 = t4; d->_r5 = t5; // aggiunge dati ptm _DescrItem* t = new _DescrItem(MISC_LIQ); t->_f1 = isfirst; // per il form feed TToken_string ttm("0|0|0"); for (int m = 1; m <= month && m < 13; m++) { if (!is_month_ok(m,month)) continue; atts.restart(); while ((tmpatt = atts.get()) != NULL) { TString att(tmpatt); look_plm(m, att); real ad1, ad2; d->_r6 += _pom->get_real("R0"); // acq. intracomunitari d->_r7 += _pom->get_real("R1"); // inded. art 19 d->_r8 += _pom->get_real("R2"); // IVA su inded. art. 19 t->_r0 += _pom->get_real("R3"); // acq. ammortizz. detr t->_r1 += _pom->get_real("R4"); // IVA acq. ammort. detr t->_r2 += _pum->get_real("R2"); // ammort. detr. 6% t->_r3 += _pum->get_real("R3"); // IVA ammort detr. 6% t->_r4 += _pom->get_real("R5"); // acq. beni rivendita t->_r5 += _pom->get_real("R6"); // IVA acq. beni rivendita t->_r6 += _pom->get_real("R7"); // acq. leasing t->_r7 += _pom->get_real("R8"); // IVA acq. leasing t->_r8 += _pum->get_real("R0"); // cessioni beni ammort. t->_r9 += _pum->get_real("R1"); // IVA su cessioni ammort. t->_r10 += _pum->get_real("R4"); // tot. esenti IVA t->_r11 += _plm->get_real("R2"); // pro-rata indetraibile ad1 = real(ttm.get(1)); ad2 = real(ttm.get(2)); ad1 += _pom->get_real("R11"); ad2 += _pom->get_real("R12"); ttm.add(_plm->get("R12"), 0); // % pro-rata ttm.add(ad1.string(),1); // imp. acq. amm. indetr. ttm.add(ad2.string(),2); // IVA acq. amm. indetr t->_s0 = ttm; t->_f0 = !_prorata.is_zero() && (month != 13); // flag per segnalare l'esistenza d->_r9 += _pom->get_real("R9"); // acq. inded. su ricavi esenti d->_r10 += _pom->get_real("R10"); // IVA acq. inded. su ricavi esenti // passaggi interni real aipip(d->_s0); // progressivo ... real aipivp(d->_s1); // ... (che mazzata sulle palle...) aipip += _pum->get_real("R8"); // acq. inded. per pass. int aipivp += _pum->get_real("R9"); // IVA acq. inded. per pass. int d->_s0 = aipip.string(); // risbatto ... d->_s1 = aipivp.string(); // .. // spese generali. real spgnp(t->_s2); // progressivo ... real spgnvp(t->_s3); // ... (che doppia mazzata sulle palle...) spgnp += _pam->get_real("R10"); // spese generali. spgnvp += _pam->get_real("R11"); // IVA spese generali. t->_s2 = spgnp.string(); // risbatto ... t->_s3 = spgnvp.string(); // .. // sospensione imposta: non piu' due palle, ma QUATTRO TToken_string tt(t->_s4); real aqsi(tt.get(0)); real aqsv(tt.get(1)); real vnsi(tt.get(2)); real vnsv(tt.get(3)); aqsi += _pam->get_real("R6"); aqsv += _pam->get_real("R7"); vnsi += _pam->get_real("R8"); vnsv += _pam->get_real("R9"); tt = ""; tt.add(aqsi.string()); tt.add(aqsv.string()); tt.add(vnsi.string()); tt.add(vnsv.string()); t->_s4 = tt; } // while (attivita') } // for (mese ok) // annual follows in _arr if (month == 13 && ref != "ALL") { // tutte quelle cose che vanno alla liquidazione annuale, come il // calcolo del prorata o del nuovo plafond o .... if (look_pla(codatt)) { real v1 = _pla->get_real("R14"); real v2(_pla->get("S1")); real ris = v1 + v2; real e1 = _pla->get_real("R1"); real e2 = _pla->get_real("R2"); real e3 = _pla->get_real("R3"); real am = _pla->get_real("R4"); real iaq = _pla->get_real("R11"); // IVA acquisti real ppg = _pla->get_real("R12"); // pro-rata pagato // calcola nuovo prorata per ogni attivita' (miste: 1+2) real pr(0.0); if (!ris.is_zero()) pr = (e1/ris) * CENTO; real co = 0.0; real topay = 0.0; pr.round(ROUND_LIRA); if (pr != _prorata) { // calcolo conguaglio -- se positivo e' a debito if (pr > 0.0) { topay = (iaq + ppg) * (pr / CENTO); //topay.round(ROUND_MILLELIRE); round_mille_lire(topay); } co = topay - ppg; //co.round(ROUND_MILLELIRE); round_mille_lire(co); } _DescrItem* dd = new _DescrItem(ANNUAL); // MonsterFish: arrotonda alle 1000 LIRE B1,B2,B3,B4 //e1.round(ROUND_MILLELIRE); //e2.round(ROUND_MILLELIRE); //e3.round(ROUND_MILLELIRE); //ris.round(ROUND_MILLELIRE); round_mille_lire(e1); round_mille_lire(e2); round_mille_lire(e3); round_mille_lire(ris); // prorata if (!pr.is_zero()) dd->_f0 |= IS_PRORATA; dd->_r0 = ris; dd->_r1 = e1; dd->_r2 = pr > 0.0 ? pr : 0.0 ; dd->_r3 = co; dd->_r4 = e2; dd->_r5 = e3; dd->_r6 = topay; t->_arr.add(dd); } } _descr_arr.add(d); _descr_arr.add(t); } } void TLiquidazione_app::describe_liq(int month, const char* codatts, _DescrItem* di) { if (!_isprint || !_canprint) return; if (!look_lim(month)) return; _DescrItem* d = new _DescrItem(THE_END); // gli diamo la stessa struttura di LIM d->_r0 = _lim->get_real("R0"); d->_r1 = _lim->get_real("R1"); d->_r2 = _lim->get_real("R2"); d->_r3 = _lim->get_real("R3"); d->_r4 = _lim->get_real("R4"); d->_r5 = _lim->get_real("R5"); d->_r6 = _lim->get_real("R6"); d->_r7 = _lim->get_real("R14"); d->_r9 = _lim->get_real("R9"); d->_r10 = _lim->get_real("R7"); // totale conguaglio prorata TToken_string tt(80); tt.add(_lam->get_real("R0").string()); tt.add(_lam->get_real("R1").string()); tt.add(_lam->get_real("R2").string()); tt.add(_lam->get_real("R3").string()); d->_s0 = tt; d->_s1 = _lim->get_real("R11").string(); d->_s2 = _lim->get_real("R12").string(); d->_s3 = _lim->get_real("R13").string(); // descrizione rettifiche if (month < 13) { d->_s4 = _lim->get("S0"); d->_s5 = _lim->get("S1"); } d->_r11 = (const char*)_lim->get("R10"); // tasso di interesse d->_f1 = is_first_month(month); // rispettiamo tutte le casistiche per i versamenti se non siamo in visualizzazione // analogamente in Visualizzazione ma solo nel caso dell'annuale. // In tutti gli altri casi va a cercare la delega d->_r8 = (_month == 13 || !_is_visliq) ? _lim->get_real("R8") : versamenti_IVA(_month, "1"); // aggiunge eventuale satellite per rimborso infraannuale if (di != NULL) { if (d->_r0.sign() < 0) d->_arr.add(di); else delete di; } if (!_is_visliq) { _DescrItem* dv = describe_deleghe(month); if (dv != NULL) d->_arr.add(dv); } _descr_arr.add(d); } _DescrItem* TLiquidazione_app::describe_deleghe(int month) { _stampa_vers = _stampa_acc = FALSE; if (_lim->get_real("R0") > ZERO) { real iva = _lim->get_real("R0") + _lim->get_real("R14"); if (month == 13) //iva.round(ROUND_MILLELIRE); round_mille_lire(iva); if (iva >= IVA_DA_RIPORTARE) _stampa_vers = TRUE; } /***13/02/1996 int mese = month; if (_freqviva == "T" && _isannual) mese = 12; if (!look_del(mese,7) && !stampa_vers) return NULL; ***/ _stampa_acc = (month == 12 && (_freqviva == "M" || (_isbenzinaro && _gest4))) ||(month == 13 && _freqviva == "T" && !(_isbenzinaro && _gest4)); if (!_stampa_vers && !(_stampa_acc && look_del(12,7))) return NULL; _DescrItem* d = new _DescrItem(DELEGA); d->_f0 = 0; //prospettino versamento if (_stampa_vers) //solo se sono a debito if (look_del(month,month == 13 ? 2 : 1)) { if (_del->get("S9").not_empty()) d->_f0 = 2; else d->_f0 = 1; if (_del->get_bool("B0")) { d->_s0 = _del->get("S2"); // ufficio iva/concessione d->_s1 = _del->get("S1"); // descrizione banca d->_s2 = _del->get("S7"); // ABI d->_s3 = _del->get("S8"); // CAB d->_r0 = _del->get_real("R0"); d->_d0 = _del->get_date("D0"); } // altrimenti lascia tutto in bianco e ci scriveranno i dati a mano } //prospettino acconto if ( (month == 12 && (_freqviva == "M" || (_isbenzinaro && _gest4))) || (month == 13 && _freqviva == "T" && !(_isbenzinaro && _gest4)) ) if (look_del(12,7)) //sia che sia a debito che a credito { d->_s4 = "ACC"; if (_del->get("S9").not_empty()) d->_f1 = 2; else d->_f1 = 1; TToken_string t; if (_del->get_bool("B0")) { t.add(_del->get("S2")); t.add(_del->get("S1")); t.add(_del->get("S7")); t.add(_del->get("S8")); t.add(_del->get_real("R0").string()); t.add(_del->get("D0")); } d->_s5 = t; } return d; } void TLiquidazione_app::describe_consistence(const char* codatt) { // controlla eventuali condizioni di conflitto con le normative // per la ditta e crea i messaggi appropriati // tutte le condizioni sono valutate sull'esercizio precedente int pryear = atoi(_year) - 1; TString att = codatt; _pla->zero(); *_pla_ditta = get_firm(); *_pla_anno = pryear; *_pla_codatt = att; if (_pla->read() == NOERR) { real va = _pla->get_real("R0"); // 1) consistenza volume d'affari <-> frequenza versamenti // deve essere: trimestrale ammesso solo se < 360.000.000 // per servizi, < 1.000.000.000 per altre imprese // a meno che non sia benzinaro che ha diritto comunque if (_freqviva == "T" && !_isbenzinaro) { bool err = FALSE; if (_isservizio) err = va > SOGLIA_TRIM_SERVIZI; else err = va > SOGLIA_TRIM_ALTRE; if (err) describe_error("Incoerenza volume affari/frequenza versamenti", att); } } } void TLiquidazione_app::describe_error(const char* err, const char* codatt) { //if (!_isprint || !_canprint) return; //06/12/1995 if (!_isprint || !_canprint || (_isregis && _isfinal)) return; //fine _errors.add(new _ErrItem(err,codatt,_nditte->curr().get("CODDITTA"))); } // ---------------------------------------------------------------- // Setrows // ---------------------------------------------------------------- void TLiquidazione_app::set_firm(_DescrItem& d) { TString tim_title(80); tim_title << "Liquidazione IVA"; if (d._f1 == 13) tim_title << format(": Riepilogo Annuale %s",(const char*)_year); else { if (d._s2 == "T") tim_title << format(" del %d° Trimestre %s", d._f1/3, (const char *) _year); else tim_title << format(" del mese di %s %s", itom(d._f1), (const char*)_year); } reset_header(); int soh = 1; if (!_isregis) { set_header(soh++,"Ditta %s %s@109gData @<@125gPag. @#", (const char*)(d._s0), (const char*)(d._s1)); set_header(soh++,""); } set_header(soh++,sep); set_header(soh++,"%s@102gFrequenza %s", (const char*)tim_title, d._s2 == "T" ? "Trimestrale" : "Mensile"); set_header(soh++,sep); set_header(soh++,""); // notify errors if any int j = 0; for (int i = 0; i < _errors.items(); i++) { _ErrItem& s = (_ErrItem&)_errors[i]; if (s._att == "ALL" && s._firm == d._s0) { j++; set_row(i+3, "@5g@b*** %s ***@r", (const char*)s._err); } } if (j) set_row(i+3,""); } void TLiquidazione_app::set_att(_DescrItem& d) { // set header TString tim_title(78); TString att_title(48); // Bookmark TString book_name(d._s3); char flags = (char)d._f3; if (flags == '1') book_name << " (servizi)"; else if (flags == '2') book_name << " (altre)"; else if (flags == 'M') book_name = "Riepilogo att. mista"; else if (flags == 'Q') book_name = "Riepilogo quater"; if (_firm_bookmark == -1) _firm_bookmark = set_bookmark(d._s1); _att_bookmark = set_bookmark(book_name, _firm_bookmark); tim_title << "Liquidazione IVA"; if (d._f1 == 13) { if (d._s4 == "T" && !(d._f2)) // trimestrale e non benzinaro tim_title << format(": Riepilogo Annuale %s",(const char*)_year); else tim_title << format(": Dichiarazione Annuale %s",(const char*)_year); } else { if (d._s4 == "T") tim_title << format(" del %d° Trimestre %s", d._f1/3, (const char *) _year); else tim_title << format(" del mese di %s %s", itom(d._f1), (const char*)_year); } TString tipatt; if (d._f0 > 0) tipatt.format(d._f0 == 1 ? "SERVIZI" : "ALTRE ATTIVITA'"); if (d._s3.empty()) { att_title = flags == 'M' ? "Riepilogo attivita' mista" : "Riepilogo quater"; // att_title << d._s2; } else att_title = format("Attivita' %s %s %s", (const char*)(d._s2), (const char*)(d._s3), (const char*)tipatt); reset_header(); int soh = 1; if (!_isregis) { set_header(soh++,"Ditta %s %s@109gData @<@125gPag. @#", (const char*)(d._s0), (const char*)(d._s1)); set_header(soh++,""); } set_header(soh++,sep); set_header(soh++,"%s@55g%s", (const char*)tim_title, (const char*)att_title); set_header(soh++,sep); set_header(soh++,""); // notify errors if any int j = 0; for (int i = 0; i < _errors.items(); i++) { _ErrItem& s = (_ErrItem&)_errors[i]; if (d._s2 == s._att && s._firm == d._s0) { j++; set_row(i+10, "@5g@b*** %s ***@r", (const char*)s._err); } } if (j) set_auto_ff(TRUE); } void TLiquidazione_app::set_plafond(_DescrItem& d) { //if (_isregis) return; if (_isregis && _isfinal) return; set_bookmark("Quadro plafond", _att_bookmark); real r1 = d._r2 - d._r1 - d._r0; real r2 = d._r5 - d._r4 - d._r3; real r3 = d._r8 - d._r7 - d._r6; set_print_zero(TRUE); set_row(1,"QUADRO RELATIVO ALLA DISPONIBILITA' ED ALL'UTILIZZO " "MENSILE DEI PLAFONDS"); set_row(2,""); set_row(3,""); set_row(4,"Art. 8 1° comma lettere a-b@31gDisponibile@48g%r", &(d._r2)); set_row(5,"Utilizzato all'interno@48g%r", &(d._r0)); set_row(6,"Utilizzato per l'importazione@48g%r@69gRiporto@78g%r", &(d._r1), &r1); set_row(7,""); set_row(8,"Art. 8bis 1° comma@31gDisponibile@48g%r", &(d._r5)); set_row(9,"Utilizzato all'interno@48g%r", &(d._r3)); set_row(10,"Utilizzato per l'importazione@48g%r@69gRiporto@78g%r", &(d._r4), &(r2)); set_row(11,""); set_row(12,"Art. 9 1° comma@31gDisponibile@48g%r", &(d._r8)); set_row(13,"Utilizzato all'interno@48g%r", &(d._r6)); set_row(14,"Utilizzato per l'importazione@48g%r@69gRiporto@78g%r", &(d._r7), &r3); set_print_zero(FALSE); set_auto_ff(); } void TLiquidazione_app::set_liqacc(_DescrItem& d) { real r1 = d._r0 + d._r1 + d._r2 + d._r4; real r2 = d._r5;// + d._r10; //MI2258 (A me sembra una cagata, ma con certa gente non si riesce a parlare) real r3 = r2 + d._r9 + d._r7; if ((d._r3).sign() > 0) r1 += d._r3; else r3 += abs(d._r3); set_row(1,""); set_row(2,""); set_row(3,""); set_row(4,""); set_row(5,"@11gCALCOLO ACCONTO SU OPERAZIONI EFFETTUATE"); set_row(6,""); set_row(7,"@72gCredito@90gDebito"); set_row(8,""); if (!_isdiffacc) set_row(9,"@11gIva sulle operazioni annotate fino al 20 Dicembre@81g%r", &(d._r0)); else set_row(9,"@11gIva sulle operazioni di vendita@81g%r", &(d._r0)); int i = 10; if (!_isdiffacc) { set_row(i++,"@11gIva su operazioni fino al 20 Dic., ma non fatturate@81g%r", &(d._r1)); set_row(i++,"@11gIva su operazioni fino al 20 Dic., ma non annotate@81g%r", &(d._r2)); } set_row(i,"@11gRettifiche iva a debito"); if (d._r3.sign() > 0) set_row(i,"@81g%r", &(d._r3)); i++; set_row(i++,"@11gIva chiesta a rimborso@81g%r", &(d._r4)); set_row(i++,"@11gRISULTATO@81g%r", &r1); if (!_isdiffacc) set_row(i++,"@11gIva sugli acquisti annotati fino al 20 Dicembre@64g%r", &r2); else set_row(i++,"@11gIva sulle operazioni di acquisto@64g%r", &r2); if (d._r6 != ZERO) set_row(i++,"@11gmeno perc. di prorata pari a lire %r", &(d._r6)); set_row(i++, "@11gCredito precedente@64g%r", &(d._r9)); set_row(i, "@11gRettifiche iva a credito"); if ((d._r3).sign() <= 0) { real ab = abs(d._r3); set_row(i,"@64g%r", &ab); } i++; set_row(i++,"@11gRISULTATO@64g%r", &r3); if ((d._r8).sign() < 0) { real ab = abs(d._r8); set_row(i++,"@23gCREDITO DA EVIDENZIARE@64g%r", &ab); } else if ((d._r8).sign() > 0 && d._r8 > _ver->get(I_ACCONTOIVA)) set_row(i++,"@23gACCONTO DA VERSARE@81g%r", &(d._r8)); else if ((d._r8).sign() > 0 && d._r8 <= _ver->get(I_ACCONTOIVA)) set_row(i++,"@23gACCONTO DA NON VERSARE@64g%r", &(d._r8)); set_auto_ff(); } void TLiquidazione_app::set_pim_head(_DescrItem& d) { set_bookmark("Riepilogo progressivi", _att_bookmark); if (d._f0) { set_row(1," Cod.@41gVENDITE@71gCORRISPETTIVI"); set_row(2," IVA Descrizione@30gImponibile@49gImposta@63gImponibile@82gImposta"); } else { set_row(1," Cod.@41gVENDITE@71gCORRISPETTIVI@106gACQUISTI"); set_row(2," IVA Descrizione@30gImponibile@49gImposta@63gImponibile" "@82gImposta@96gImponibile@115gImposta"); } set_row(3,""); } void TLiquidazione_app::set_pim(_DescrItem& d) { // succede con le autocazzate non residenti non movimentate eccetera const bool a = (d._r0 + d._r1) == ZERO; const bool b = (d._r2 + d._r3) == ZERO; const bool c = (d._r4 + d._r5) == ZERO; if (a && b && c) return; int rw = 1; if (d._s1 == "AF") //Il dio sistema colpisce ancora, non va bene A35, ma AF... d._s2 = "Artt.17c3/74c1"; // La descrizione non la metto uguale perche' cosi e' piu' fika else if (d._s1 == "A13") // Sempre per merito del dio sistema ho dovuto aggiungere A13. d._s2 = "Art.40c5/6/8 a.i."; else if (d._s0 == "74TER") rw++; else { look_iva(d._s1); d._s2 = _iva->get("S0"); if (d._s2.len() > 19) d._s2.cut(19); } if (d._f0) // e' il primo: non fa piu' nulla perche' l'intestazione // viene fatta comunque da set_pim_head {} set_row(rw++,"%4s %s@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r", (const char*)d._s1, (const char*)d._s2, &(d._r0), &(d._r1), &(d._r2), &(d._r3), &(d._r4), &(d._r5)); } void TLiquidazione_app::set_plm(_DescrItem& d) { int rw = 1; if (!(d._r0.is_zero() && d._r1.is_zero() && d._r2.is_zero() && d._r3.is_zero() && d._r4.is_zero() && d._r5.is_zero())) { set_row(rw++,""); set_row(rw++,""); set_row(rw++,"Totale@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r", &(d._r0), &(d._r1), &(d._r2), &(d._r3), &(d._r4), &(d._r5)); set_row(rw++,""); } if (!(d._r7.is_zero() && d._r8.is_zero())) { set_row(rw++,"Totali acquisti indeducibili per art.19@91g%r@107g%r", &(d._r7), &(d._r8)); } if (! (d._r9.is_zero() && d._r10.is_zero())) { set_row(rw++, "Totale acquisti indeducibili su ricavi esenti@91g%r@107g%r", &(d._r9), &(d._r10)); } real acq_pint(d._s0); real acq_pint_iva(d._s1); if (! (acq_pint.is_zero() && acq_pint_iva.is_zero())) { set_row(rw++, "Totale acquisti indeducibili per passaggi interni@91g%r@107g%r", &acq_pint, &acq_pint_iva); } real tot1 = d._r7 + d._r4 + d._r9 + acq_pint; real tot2 = d._r8 + d._r5 + d._r10 + acq_pint_iva; if (tot1 != d._r4 || tot2 != d._r5) { // i corrispettivi finiscono nelle vendite d._r0 += d._r2; d._r1 += d._r3; d._r2 = ZERO; d._r3 = ZERO; // per ora lascio r2 e r3 anche se sono sempre 0 set_row(rw++, ""); set_row(rw++,"Totale Generale IVA@25g%r@41g%r@58g%r@74g%r@91g%r@107g%r", &(d._r0), &(d._r1), &(d._r2), &(d._r3), &tot1, &tot2); } } void TLiquidazione_app::set_pumpam(_DescrItem& d) { bool printed = FALSE; // d._f1 dice se c'era qualcosa sopra nella stessa pagina real spgn(d._s2); real spgn_iva(d._s3); TToken_string tt(d._s4); // Token String TToken_string dp(d._s0); // Due Palle real aqsi(tt.get(0)); real aqsv(tt.get(1)); real vnsi(tt.get(2)); real vnsv(tt.get(3)); real ammindi(dp.get(1)); real ammindv(dp.get(2)); int row = 5; if (!(aqsi.is_zero() && aqsv.is_zero())) { printed = TRUE; set_row(row++, "Acquisti in sospensione di imposta@50g%r@69g%r", &aqsi, &aqsv); } if (!(vnsi.is_zero() && vnsv.is_zero())) { printed = TRUE; set_row(row++, "Vendite in sospensione di imposta@50g%r@69g%r", &vnsi, &vnsv); } if (!(d._r8.is_zero() && d._r9.is_zero())) { printed = TRUE; set_row(row++, "Cessione beni ammortizzabili@50g%r@69g%r", &(d._r8), &(d._r9)); } if (! (d._r4.is_zero() && d._r5.is_zero())) { printed = TRUE; set_row(row++, "Acquisto beni destinati alla rivendita@50g%r@69g%r", &(d._r4), &(d._r5)); } if (! (ammindi.is_zero() && ammindv.is_zero())) { printed = TRUE; set_row(row++, "Acquisto beni ammortizzabili IVA indetraibile@50g%r@69g%r", &ammindi, &ammindv); } if (! (d._r0.is_zero() && d._r1.is_zero())) { printed = TRUE; set_row(row++, "Acquisto beni ammortizzabili IVA detraibile@50g%r@69g%r", &(d._r0), &(d._r1)); } if (!(d._r6.is_zero() && d._r7.is_zero())) { printed = TRUE; set_row(row++, "Altri beni strumentali acquisiti in leasing@50g%r@69g%r", &(d._r6), &(d._r7)); } if (!(d._r2.is_zero() && d._r3.is_zero())) { printed = TRUE; real rn = d._r2 * real(DETRAZIONE_6PERCENTO); set_row(row++, "Acquisto beni soggetti a detrazione (6%%)" "@50g%r@69g%r@86g%r", &(d._r2), &(d._r3), &rn); } if (!(spgn.is_zero() && spgn_iva.is_zero())) { printed = TRUE; set_row(row++, "Spese generali@50g%r@69g%r", &spgn, &spgn_iva); } if (d._f0) { printed = TRUE; real prc(dp.get(0)); set_row(row++, "%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r", (const char*)prc.string(), &(d._r11)); } // items vari per dichiarazione annuale for (int i = 0; i < d._arr.items(); i++) { _DescrItem& dd = (_DescrItem&)d._arr[i]; printed |= set_annual(dd); } if (printed) { set_bookmark("Altri dati", _att_bookmark); set_row(1,""); set_row(2,""); set_row(3,"ALTRI DATI RELATIVI ALLA DICHIARAZIONE@55gimponibile" "@77gimposta@91gdetrazione"); set_row(4,""); } else /* if (!d._f1) */ set_row(1,""); // form feed /* if (printed || !d._f1) */ set_auto_ff(TRUE); } void TLiquidazione_app::set_grand(_DescrItem& d) { real& risultato = d._r0; real& rimborso = d._r1; real& cred_cost = d._r2; real& deb_mens = d._r3; real& rettifiche = d._r5; real& detrazioni = d._r6; real& interessi = d._r7; real& versamenti = d._r8; real& vers_int = d._r9; real& conguaglio = d._r10; TToken_string tt(d._s0); real iva_vend(tt.get(0)); real iva_acq(tt.get(1)); real cred_prec(tt.get(2)); real debt_prec(tt.get(3)); real acc_dec(d._s1); real res_cred(d._s2); real res_debt(d._s3); real rett_debt(0.0); real rett_cred(0.0); real& interesse = d._r11; if (rettifiche.sign() > 0) rett_debt = rettifiche; if (rettifiche.sign() < 0) rett_cred = -rettifiche; set_bookmark("Riepilogativo liquidazione", _firm_bookmark); set_row(1,""); set_row(2,""); set_row(3,""); set_row(4,""); set_row(5,"@11g@bCALCOLO LIQUIDAZIONE D'IMPOSTA@r"); set_row(6,""); int rw = 7; set_row(rw++," @66gCredito@84gDebito"); set_row(rw++,""); set_row(rw++,"@11gIva sulle operazioni di vendita@75g%r", &iva_vend); set_row(rw++,"%s@11gRettifiche IVA a debito%s@75g%r", _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rett_debt); set_row(rw++,"%s@11gIva chiesta a rimborso%s@75g%r", _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rimborso); // conguaglio prorata if (conguaglio.sign() > 0) set_row(rw++,"@11gConguaglio pro-rata@75g%r", &conguaglio); // debito liq. precedente < 50000 if (debt_prec > ZERO) set_row(rw++,"@11gDebito da liquidazione precedente@75g%r", &debt_prec); set_row(rw++,"@11gRISULTATO@75g%r", &res_debt); set_row(rw++,"@11gIva sulle operazioni di acquisto@58g%r", &iva_acq); if (_isannual || d._f1) set_row(rw++,"@11gCredito inizio anno@58g%r", &cred_prec); else set_row(rw++,"@11gCredito precedente@58g%r", &cred_prec); if (!acc_dec.is_zero()) set_row(rw++,"%s@11gVersamento acconto dicembre%s@58g%r", _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &acc_dec); if (!detrazioni.is_zero()) set_row(rw++,"@11gUlteriori detrazioni@58g%r", &detrazioni); set_row(rw++,"%s@11gRettifiche IVA a credito%s@58g%r", _is_visliq ? "$[r]" : "", _is_visliq ? "$[n]" : "", &rett_cred); // versamenti effettuati if (!versamenti.is_zero() && (_month==13 || !_is_visliq)) { set_row(rw++,"@11gVersamenti effettuati@58g%r", &versamenti); } // versamenti integrativi if (!vers_int.is_zero() && !_is_visliq) { set_row(rw++,"@11gVersamenti integrativi@58g%r", &vers_int); } if (conguaglio.sign() < 0) { real cg = conguaglio; cg = -cg; set_row(rw++,"@11gConguaglio pro-rata@58g%r", &cg); } set_row(rw++,"@11gRISULTATO@58g%r", &res_cred); // se non c'e' nulla da versare stampa solo una riga vuota // Serve, non toglierla, stronzo. if (risultato.is_zero()) set_row(rw++,""); else { if (risultato.sign() < 0) { real iva = abs(risultato); if (_isannual || _isriepilogo) //iva.round(ROUND_MILLELIRE); round_mille_lire(iva); set_row(rw++,"@23gCREDITO ATTUALE@58g%r",&iva); if (_is_visliq) { // se chiamata dalla visualizzazione mette 2 righe vuote se non vi sono interessi // poiche' con le rettifiche a credito/debito posso volerle visualizzare set_row(rw++,""); set_row(rw++,""); } } else { if (_month == 13) //interessi.round(ROUND_MILLELIRE); round_mille_lire(interessi); real iva = risultato + interessi; if (_isannual || _isriepilogo) // iva.round(ROUND_MILLELIRE); round_mille_lire(iva); if (!iva.is_zero()) { if (!interessi.is_zero()) { set_row(rw++,"@23gIVA DOVUTA@75g%r",&risultato); set_row(rw++,"@23gInteresse @33g%6.2r @41g%%@75g%r",&interesse, &interessi); } else if (_is_visliq) { // vedi sopra... set_row(rw++,""); set_row(rw++,""); } if (iva >= IVA_DA_RIPORTARE || _isannual || _isriepilogo) set_row(rw++,"@23gIVA DA VERSARE@75g%r",&iva); else set_row(rw++,"@23gIVA A DEBITO DA NON VERSARE@75g%r",&iva); } } } if (_is_visliq && _month != 13) { // stampa versamenti (anche 0) ad uso visualizzazione liquidazione IVA rw ++; set_row(rw++,"@11g$[r]Versamenti effettuati$[n]@58g%r", &versamenti); set_row(rw++, ""); set_row(rw++, ""); } if (!_is_visliq) { // descrizione rettifiche if (!(d._s4.empty() && d._s5.empty())) { rw++; set_row(rw++, "@11g@bDESCRIZIONE RETTIFICHE@r"); rw++; } if (!d._s4.empty()) { set_row(rw++, "@11g%t", &(d._s4)); } if (!d._s5.empty()) { set_row(rw++, "@11g%t", &(d._s5)); } } // rapportini per rimborso infraannuale // non si stampano se la stampa serve per la visualizz. //modifica del 07/07/1995 //*** solo in st.di prova in coda ai registri deve scendere // il prospetto di rimborso //*** sempre (cioe' in bollato e in prova) deve scendere // il prospettino versamento (boh???????????????????) //if (d._arr.items() > 0 && !_is_visliq && !_isregis) if (d._arr.items() > 0 && !_is_visliq) { for (int i = 0; i < d._arr.items(); i++) { _DescrItem& di = (_DescrItem&)d._arr[i]; if (di._flags == RIMBORSO) { if (!_isregis || (_isregis && !_isfinal)) { set_print_zero(TRUE); set_row(rw++,""); set_row(rw++,""); set_bookmark("Prospetto di rimborso", _firm_bookmark); set_row(rw++, " PROSPETTO DI RIMBORSO"); if (di._f0) { // esenti e non imponibili set_row(rw++,""); set_row(rw++,"1) Soggetto con quota di operazioni esenti e non" " imponibili superiore al 25%%"); real perc = (di._r0/di._r1); perc *= CENTO; perc.ceil(ROUND_LIRA); TString sep(strlen(REAL_PICTURE)+2); sep.fill('-'); set_row(rw++,""); set_row(rw++,"@26gTotale operazioni esenti e non imp.@66g%r", &(di._r0)); set_row(rw++,"@66g%t x 100 = %3r%%", &sep, &perc); set_row(rw++,"@26gVolume di affari lordo@66g%r", &(di._r1)); set_row(rw++,""); } if (di._f1) { set_row(rw++,""); set_row(rw++,"2) Soggetto con acquisti ad aliquota media " "superiore a quella delle vendite"); TString sep(strlen(REAL_PICTURE)+2); sep.fill('-'); set_row(rw++,""); set_row(rw++,"@26gTotale imposte sugli acquisti@66g%r", &(di._r5)); set_row(rw++,"@66g%t x 100 = %5.2r%%", &sep, &(di._r7)); set_row(rw++,"@26gTotale imponibili sugli acquisti@66g%r", &(di._r3)); set_row(rw++,""); set_row(rw++,"@26gTotale imposte sulle vendite@66g%r", &(di._r4)); set_row(rw++,"@66g%t x 100 = %5.2r%%", &sep, &(di._r6)); set_row(rw++,"@26gTotale imponibili sulle vendite@66g%r", &(di._r2)); } set_print_zero(FALSE); } } // prospettino versamento else if (di._flags == DELEGA) { int rr = rw; /* if (rw < (printer().formlen() - 10)) rw = printer().formlen() - 10; */ //11/10/1995 int cont = 10; if (di._s4 == "ACC") { TToken_string ac(di._s5); if (!ac.empty_items() && _stampa_vers) cont = 14; } if (rw < (printer().formlen() - cont)) rw = printer().formlen() - cont; //fine for (int i = rr; i < rw; i++) set_row(i,""); set_bookmark("Riepilogo versamenti", _firm_bookmark); TString dt = di._d0.string(); TString vr = di._r0.string("###.###.###.###"); // la cincia non vuole lo zero if (atof(vr) == 0.0 && vr[vr.len()-1] == '0') vr[vr.len()-1] = ' '; //11/10/1995 if (di._s4 == "ACC") { TToken_string ac(di._s5); if (!ac.empty_items()) { TString dt (ac.get(5)); real app (ac.get(4)); TString vr (app.string("###.###.###.###")); TString loc (ac.get(0)); TString ban (ac.get(1)); TString abi (ac.get(2)); TString cab (ac.get(3)); if (atof(vr) == 0.0 && vr[vr.len()-1] == '0') vr[vr.len()-1] = ' '; set_row(rw++, "- ACCONTO DICEMBRE -"); set_row(rw, " Versamento di L. %s effettuato il %s", (const char*)vr, (const char*)dt); if (di._f1 == 1) { set_row(rw++, "@68gdiretto all'ufficio IVA di %s", (const char*)loc); set_row(rw++, "@68gtramite %s", (const char*)ban); set_row(rw++, "@68gcodice azienda %s codice dipendenza %s", (const char*)abi, (const char*)cab); } else if (di._f1 == 2) { set_row(rw++, "@68gdiretto al Ministero delle Finanze"); set_row(rw++, "@68gConcessione %s", (const char*)loc); } } //if (_stampa_vers) set_row(rw++, "- SALDO -"); } if (_stampa_acc && _stampa_vers) set_row(rw++, "- SALDO -"); if (_stampa_vers) { set_row(rw, " Versamento di L. %s effettuato il %s", (const char*)vr, (const char*)dt); if (di._f0 == 1) { set_row(rw++, "@68gdiretto all'ufficio IVA di %s", (const char*)(di._s0)); set_row(rw++, "@68gtramite %s", (const char*)(di._s1)); set_row(rw++, "@68gcodice azienda %s codice dipendenza %s", (const char*)(di._s2), (const char*)(di._s3)); } else if (di._f0 == 2) { set_row(rw++, "@68gdiretto al Ministero delle Finanze"); set_row(rw++, "@68gConcessione %s", (const char*)(di._s0)); } else { set_row(rw++, "@68gdiretto"); set_row(rw++, "@68gtramite"); } } } } } if (!_is_visliq) set_auto_ff(TRUE); else set_auto_ff(FALSE); _firm_bookmark = -1; } bool TLiquidazione_app::set_annual(_DescrItem& d) { // chiamata internamente a set_pims bool ret = FALSE; int row = get_maxrow()+1; //14/12/1995. Correzione errore MI0952 if (row == 1) row = 4; //fine if (d._f0 & IS_PRORATA) { // non lo ha stampato prima se annuale, perche' vladimiro il nefido // pretende l'assurdo aggiornamento della perc. a quella nuova //set_row(++row, "%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r", // (const char*)(d._r2.string()), &(d._r6)); set_row(++row,"CALCOLO DELLA PERCENTUALE DI INDETRAIBILITA'"); row++; set_bookmark("Calcolo pro-rata", _att_bookmark); ret = TRUE; set_print_zero(TRUE); set_row(row++,""); //set_row(row++,"CALCOLO DELLA PERCENTUALE DI INDETRAIBILITA'"); set_row(row++, "%% PRO-RATA ed IVA non detraibile (%s%%)@69g%r", (const char*)(d._r2.string()), &(d._r6)); //set_row(row++,""); set_row(row++,"B1 - Operazioni esenti, escluse da nr. 1 a 9 e 11 art. 10 %r", &(d._r1)); set_row(row++,"B2 - Operazioni esenti, di cui nr. 11 art. 10 %r", &(d._r4)); set_row(row++,"B3 - Operazioni esenti da nr. 1 a 9 art. 10 %r", &(d._r5)); set_row(row++,"Volume d'affari - B3 %r", &(d._r0)); set_row(row++,"Indetraibilita'@30g%r%%", &(d._r2)); if (!(d._r3.is_zero())) { const char* sss = d._r3.sign() < 0 ? "credito" : "debito"; real ccc = abs(d._r3); set_row(row++,"Conguaglio a %s@30g%r", sss, &ccc); } set_print_zero(FALSE); } return ret; } void TLiquidazione_app::set_ventila(_DescrItem& d) { if (d._arr.items() == 0 || d._r0.is_zero()) return; set_bookmark("Prospetto ventilazione", _att_bookmark); set_row(1,"@54gPROSPETTO VENTILAZIONE"); set_row(2,""); set_row(3,""); set_row(4,"@10gTotale acquisti destinati alla rivendita@55g%r", &(d._r0)); set_row(5,"@10gTotale dei corrispettivi da ventilare@55g%r", &(d._r1)); real m = d._r1 / d._r0; set_row(6,"@10gMoltiplicatore@59g%3.9r",&m); set_row(7,""); set_row(8,"@10gCod."); set_row(9,"@10gIVA@17gDescrizione@48gAcquisti" "@65gImponibile vendite@89gImposta vendite"); set_row(10,""); int row = 11; real t1, t2, t3; for(int i = 0; i < d._arr.items(); i++) { _vDesc& vd = (_vDesc&)d._arr[i]; look_iva(vd._codiva); TString s0 = _iva->get("S0"); set_row(row+i,"@8g%5s@17g%s@41g%r@68g%r@89g%r", (const char*)vd._codiva, (const char*)s0, &(vd._acq), &(vd._vnd), &(vd._viv)); t1 += vd._acq; t2 += vd._vnd; t3 += vd._viv; } set_row(row+i+1,""); set_row(row+i+2,"@10gTotale@41g%r@68g%r@89g%r", &t1, &t2, &t3); set_auto_ff(TRUE); } void TLiquidazione_app::set_regagr(_DescrItem& d) { set_print_zero(TRUE); real& agr_1 = d._r0; real& agr_2 = d._r1; real& agr_3 = d._r2; real& agr_4 = d._r3; real& agr_5 = d._r4; real& agr_6 = d._r5; real& agr_7 = d._r6; real& agr_1i = d._r7; real& agr_2i = d._r8; real& pdetr = d._r9; real& ivadt = d._r10; real ara = agr_5 + agr_6; real arn = agr_3 + agr_4; // percentuale detraibilita' // real pdetr = (); set_bookmark("Prospetto regime agricolo", _att_bookmark); set_row(1,"@50gPROSPETTO REGIME AGRICOLO"); set_row(2,""); set_row(3, "Cessioni in regime agricolo (Tabella A/I)@54g%r",&agr_1); set_row(4, ""); set_row(5, "Cessioni non in regime agricolo@54g%r",&agr_2); set_row(6, ""); set_row(7, "Acquisti in regime agricolo@54g%r",&ara); set_row(8, ""); set_row(9, "Acquisti non in regime agricolo@54g%r",&arn); set_row(10, "... di cui beni ammortizzabili@54g%r",&agr_4); set_row(11, ""); set_row(12, "Acquisti ad uso promiscuo@54g%r",&agr_7); if (/*agr_7.sign() > 0*/ TRUE) { /* Il calcolo della percentuale e' stato spostato in describe_agricolo() */ TString up = agr_2i.string("."); up << " x 100"; TString dn = agr_1i.string("."); dn << " + " << agr_2i.string("."); int ln = max(up.len(), dn.len()) + 2; TString den(ln); den.fill('-'); up.center_just(ln); dn.center_just(ln); set_row(13, ""); set_row(14, "@31g%s", (const char*)up); set_row(15, "Percentuale di detraibilita'@31g%s = @54g%r", (const char*)den, &pdetr); set_row(16, "@31g%s", (const char*)dn); up = agr_7.string("."); up << " x " << pdetr.string("."); dn = "100"; if ((max(up.len(), dn.len()) + 2) > ln) ln = max(up.len(), dn.len()) + 2; TString den1(ln); den1.fill('-'); up.center_just(ln); dn.center_just(ln); set_row(17, ""); set_row(18, "@31g%s", (const char*)up); set_row(19, "Iva detraibile@31g%s = @54g%r", (const char*)den1, &ivadt); set_row(20, "@31g%s", (const char*)dn); } set_auto_ff(TRUE); set_print_zero(FALSE); } void TLiquidazione_app::set_viaggio(_DescrItem& d) { // the longest & stronzest // Nel corso della scrittura di questa funzione // Berlusconi + Fini + Bossi hanno vinto le elezioni // ... lungo commento cancellato real& corr_CEE = d._r0; real& corr_misCEE = d._r1; real& corr_noCEE = d._r2; real& acq_CEE = d._r3; real& acq_misCEE = d._r4; real& acq_noCEE = d._r5; real& acq_misnoCEE = d._r6; real& perc_r = d._r7; real& cred_cos = d._r8; real& ivm = d._r9; //real perc_r = (acq_misCEE * CENTO)/(acq_misCEE + acq_misnoCEE); perc_r.round(2); //real ivm = (corr_misCEE * perc_r)/CENTO; ivm.round(ROUND_LIRA); real tc = (corr_CEE + ivm); real ta = (acq_CEE + acq_misCEE); //real bi = tc - ta - cred_cos; real& bi = d._r10; real& dovuta = d._r11; real tcc = corr_CEE + corr_noCEE + corr_misCEE; real tco = acq_CEE + acq_noCEE + acq_misCEE + acq_misnoCEE; real tma = acq_CEE + acq_misCEE; // real rip = perc_r; rip.round(2); // real cim = (d._r1 * d._r7)/CENTO; cim.round(ROUND_LIRA); set_print_zero(TRUE); set_bookmark("Prospetto 74 ter", _att_bookmark); set_row(1,""); set_row(2,"@54gRIEPILOGO 74 TER"); set_row(3,""); set_row(4,"Ammontare dei corrispettivi relativi a viaggi eseguiti" " interamente nella CEE .....................@100g%r", &(corr_CEE)); set_row(5,"Ammontare dei corrispettivi relativi a viaggi misti (dentro" " e fuori CEE) ......................... @100g%r", &(corr_misCEE)); set_row(6,"Ammontare dei corrispettivi relativi a viaggi eseguiti" " interamente fuori CEE ..................... @100g%r", &(corr_noCEE)); set_row(7,""); set_row(8,"@56gTotale corrispettivi@100g%r", &tcc); set_row(9,""); set_row(10,"Ammontare dei costi relativi a viaggi interamente" " svolti nella CEE ............................... @100g%r", &(acq_CEE)); set_row(11,"Ammontare dei costi relativi a viaggi misti (per la" " parte CEE) ................................... @100g%r", &(acq_misCEE)); set_row(12,"Ammontare dei costi relativi a viaggi interamente" " svolti fuori CEE ............................... @100g%r", &(acq_noCEE)); set_row(13,"Ammontare dei costi relativi a viaggi misti (per la" " parte fuori CEE) .............................@100g%r", &(acq_misnoCEE)); set_row(14,""); set_row(15,"@64gTotale costi@100g%r", &tco); set_row(16,""); set_row(17,"DETERMINAZIONE CORRISPETTIVI IMPONIBILI " "RELATIVI A VIAGGI MISTI"); set_row(18,""); // la bella frazioncina della percentuale di ripartizione TString tmp(acq_misCEE.string(REAL_PICTURE)); tmp.ltrim(); TString up = tmp; up << " x 100"; TString dn = tmp; tmp = acq_misnoCEE.string(REAL_PICTURE); tmp.ltrim(); dn << " + " << tmp; int ln = max(up.len(), dn.len()) + 2; TString den(ln); den.fill('-'); up.center_just(ln); dn.center_just(ln); // la bella frazioncina degli imponibili viaggi misti TString tmp2 = corr_misCEE.string(REAL_PICTURE); tmp2.ltrim(); TString up2 = tmp2; up2 << " x " << perc_r.string(2); TString dn2 = "100"; int ln2 = max(up2.len(), 3) + 2; TString den2(ln2); den2.fill('-'); up2.center_just(ln2); dn2.center_just(ln2); // la gran frazionazza centrata e stupenda int tot = 35 + ln + ln2; int rem1 = (100 - tot)/2; if (rem1 < 0) rem1 = 0; int pos1 = rem1 + 13; int rem2 = pos1+ den.len() + 11; int pos2 = rem2 + 20; set_row(19,format("@%dg%%t@%dg%%t", pos1, pos2), &up, &up2); set_row(20,format("@%dgPerc. rip. = %%t = %%5.2r; @%dg" "Imp. viaggi misti = %%t = @100g%%r", rem1, rem2), &den, &perc_r, &den2, &ivm); set_row(21,format("@%dg%%t@%dg%%t", pos1, pos2), &dn, &dn2); real tmr = corr_CEE + ivm; // whew, come dicono su Topolino tmp = corr_CEE.string(REAL_PICTURE); tmp.ltrim(); up = "("; up << tmp << " + "; tmp = ivm.string(REAL_PICTURE); tmp.ltrim(); up << tmp << ")"; den.fill('.',59-up.len()); set_row(23,"Ammontare dei corrispettivi imponibili@40g%t %t@100g%r", &up, &den, &tmr); // se e' l'annuale non ha senso altro if (d._f1) return; tmp = acq_CEE.string(REAL_PICTURE); tmp.ltrim(); up = "("; up << tmp << " + "; tmp = acq_misCEE.string(REAL_PICTURE); tmp.ltrim(); up << tmp << ")"; den.fill('.',59-up.len()); set_row(24,"Ammontare dei costi deducibili@40g%t %t@100g%r", &up, &den, &tma); den.fill('.',60); set_row(25,"Credito di costo precedente @40g%t@100g%r", &den, &(cred_cos)); tmp = tmr.string(REAL_PICTURE); tmp.ltrim(); up = "["; up << tmp << " - ("; tmp = tma.string(REAL_PICTURE); tmp.ltrim(); up << tmp << " + "; tmp = d._r8.string(REAL_PICTURE); tmp.ltrim(); up << tmp << ")]"; den.fill('.',59-up.len()); set_row(26,"Base imponibile lorda@40g%t %t@100g%r", &up, &den, &bi); set_row(27,""); if (bi.sign() > 0) { real aliva = aliquota_agvia(); real alcnt = aliva + CENTO; //real dovuta = (bi/(alcnt/CENTO)) * (aliva/CENTO); //dovuta.ceil(ROUND_LIRA); // ceil voluto da MI3074 tmp = bi.string(REAL_PICTURE); tmp.ltrim(); up = tmp; up << " x " << aliva.string(5,2); dn = alcnt.string(); ln = max(up.len(), 3) + 2; den.fill('-',ln); up.center_just(ln); dn.center_just(ln); tmp.fill('.', 59 - den.len()); set_row(28,"@40g%t",&up); set_row(29,"IVA A DEBITO@40g%t %t@100g%r", &den, &tmp, &dovuta); set_row(30,"@40g%t", &dn); } else if (bi.sign() < 0) { bi = abs(bi); set_row(28,""); set_row(29,"CREDITO DI COSTO DA RIPORTARE@100g%r", &bi); } set_print_zero(FALSE); set_auto_ff(TRUE); } void TLiquidazione_app::set_acconto_p(_DescrItem& d) { //set_print_zero(TRUE); const char* errmsg[3] = { {"manca la tabella risultati liquidazione per l'anno corrente"}, {"manca la tabella risultati liquidazione per l'anno precedente"}, {"manca la tabella dichiarazione annuale per l'anno precedente"}}; set_row(1,"%t@7g%t",&(d._s0), &(d._s1)); if (d._f2) set_row(1,"@50g@b*** %s ***@r", errmsg[d._f2 -1]); else { if (d._f0) // base anno in corso { if (d._f1) // stampa base di calcolo { /*** real bc = d._r0; if (bc.sign() < 0) { bc = abs(bc); set_row(1,"@73g%r@86g%r@119g%s", &bc, &d._r1, d._f3 ? "Si" : "No"); } else set_row(1,"@55g%r@86g%r@119g%s", &bc, &(d._r1), d._f3 ? "Si" : "No"); ***/ set_row(1,"@58g%r@74g%r@96g%r@122g%s", &(d._r3), &(d._r2), &(d._r1), d._f3 ? "Si" : "No"); } else set_row(1,"@62g%r@91g%s", &(d._r1), d._f3 ? "Si" : "No"); } else //metodo storico { if (d._f1 && (d._r0).sign()>0) // stampa base di calcolo set_row(1,"@58g%r@88g%r", &(d._r0), &(d._r1)); else set_row(1,"@87g%r",&(d._r1)); } } //set_print_zero(FALSE); } void TLiquidazione_app::set_acchead_p(_DescrItem& d) { reset_header(); set_header(1,"Gestione IVA@109gData @<@125gPag. @#"); set_header(3,sep); if (d._f0) // base anno in corso { set_header(2,"@40gCALCOLO ACCONTI IVA DICEMBRE %s " "(base anno in corso)", (const char*) _year); if (d._f1) // stampa base calcolo { set_header(4,"@58g------- Base di calcolo -------"); set_header(5,"Ditta@7gDenominazione@62gDebito@78gCredito" "@94gACCONTO calcolato@115gLiq. differita"); set_header(6,sep); set_header(7,""); } else { set_header(4,"Ditta@7gDenominazione@60gACCONTO calcolato" "@84gLiq. differita"); set_header(5,sep); set_header(6,""); } } else { set_header(2,"@40gCALCOLO ACCONTI IVA DICEMBRE %s", (const char*) _year); set_header(5,sep); set_header(6,""); if (d._f1) set_header(4,"Ditta@7gDenominazione@58gBase di calcolo" "@86gACCONTO calcolato"); else set_header(4,"Ditta@7gDenominazione@85gACCONTO calcolato"); } } // --------------------------------------------------------------------- // Tabulato deleghe // --------------------------------------------------------------------- void TLiquidazione_app::set_deltab(_DescrItem& d, bool iscred) { reset_header(); int rw = 1; static bool credpr; if (iscred) { // set header set_header(1,"ELENCO DITTE A CREDITO@30g%s %s@109gData @<@125gPag. @#", d._f0 == 13 ? "Annuale " : itom(d._f0), (const char*)_year); set_header(2,sep); set_header(3,"@40gF@60gImporto a"); set_header(4,"Cod.@8gDenominazione@40gR@62gcredito"); set_header(5,sep); set_header(6,""); // set rows for (int i = 0; i < d._arr.items(); i++) { TToken_string& tt = (TToken_string&)(d._arr)[i]; TString cod(tt.get(0)); TParagraph_string rgs(tt.get(1), 30); TString diocantaro(rgs.get(0)); TString frq(tt.get(2)); real tp (tt.get(3)); real in (tt.get(4)); tp -= in; tp = -tp; set_row(rw++, "%-5s@8g%-30s@40g%1s@54g%r", (const char*)cod, (const char*)diocantaro, (const char*)frq, &tp); for (int i = 1; i < rgs.items(); i++) set_row(rw++, "@8g%-30s", (const char*)rgs.get(i)); } } else { // set header set_header(1,"ELENCO DITTE A DEBITO@30g%s %s@109gData @<@125gPag. @#", d._f0 == 13 ? "Annuale " : itom(d._f0), (const char*)_year); set_header(2,sep); set_header(3,"@40gF@60gImporto da@73gCodice@83gCod."); set_header(4,"Cod.@8gDenominazione@40gR Numero telefonico@63gversare Banca Dip. Con."); set_header(5,sep); set_header(6,""); // set rows for (int i = 0; i < d._arr.items(); i++) { TToken_string& tt = (TToken_string&)(d._arr)[i]; TString cod(tt.get(0)); TParagraph_string rgs(tt.get(1), 30); TString diocantaro(rgs.get(0)); TString frq(tt.get(2)); real tp (tt.get(3)); real in (tt.get(4)); TString abi(tt.get(5)); TString cab(tt.get(6)); TString con(tt.get(7)); TString tel(tt.get(8)); if (!tel.blank()) tel << '/'; tel << tt.get(9); TString desc(tt.get(10)); //tp += in; //comprendeva gia' gli interessi! set_row(rw++, "%-5s@8g%-30s@40g%1s %s @55g%r %5s %5s %3s %-.45s", (const char*)cod, (const char*)diocantaro, (const char*)frq, (const char*)tel, &tp, (const char*)abi, (const char*)cab, (const char*)con, (const char*)desc); for (int i = 1; i < rgs.items(); i++) set_row(rw++, "@8g%-30s", (const char*)rgs.get(i)); } } set_auto_ff(TRUE); }