Patch level :2.2 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :stampa pagato analitica in corso d'opera (un casino pauroso!)


git-svn-id: svn://10.65.10.50/trunk@13585 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2005-12-06 17:35:10 +00:00
parent 0bd4accb45
commit 3e93550834
3 changed files with 401 additions and 167 deletions

View File

@ -13,7 +13,6 @@
#include "..\cg\cg2103.h"
#include "..\ve\velib.h"
#include "panapdc.h"
#include "pconana.h"
#include "movana.h"
#include "rmovana.h"
@ -105,7 +104,7 @@ bool TPag_per_cms_mask::on_field_event(TOperable_field& o, TField_event e, long
if (e == fe_button)
{
config_setter(sfield(F_PDCC), "Pdcc");
config_setter(sfield(F_PDCA), "Pdca");
// config_setter(sfield(F_PDCA), "Pdca"); ***per ora solo Pdcc***
}
break;
default:
@ -121,9 +120,9 @@ TPag_per_cms_mask::TPag_per_cms_mask()
// creazione dei campi della pagina della maschera con lo sheet di cdc/cms/fasi
create_sheet(F_RIGHE);
//Seconda pagina (sheets dei conti)
//Seconda pagina (sheets dei conti) ***per ora solo Pdcc***
//Controllo sul tipo di piano dei conti da utilizzare (Analitico/Contabile)
TConfig& cfg = ca_config();
/* TConfig& cfg = ca_config();
const bool use_pdcc = cfg.get_bool("UsePdcc");
set(F_PIANO, use_pdcc ? "Contabile" : "Analitico");
@ -145,8 +144,9 @@ TPag_per_cms_mask::TPag_per_cms_mask()
sfield(F_PDCA).sheet_mask().hide(-1);
config_loader(sfield(F_PDCA), "Pdca");
}
}*/
//carica i parametri dei conti per lo sheet dei conti contabili
config_loader(sfield(F_PDCC), "Pdcc");
// setta gli handlers a tutti i campi generati della maschera;senza questa chiamata la on_field_event
// non puo' funzionare sui campi generati!!!
set_handlers();
@ -200,6 +200,8 @@ protected:
long _codfor;
TString8 _campodata;
TString _codcosto, _codcms, _codfas;
TAssoc_array _costi,_pagamenti,_fiscali,_sociali; //array che contengono i conti letti dal .ini
protected: //da libreria
// virtual const TVariant& get(const char* column_name) const;
@ -210,6 +212,12 @@ protected:
static bool mov_callback(const TRelation& rel, void* pJolly);
long find_movimento(const TRectype& riga_pag) const;
void find_commesse(const long nreg, const TRectype& riga_pag);
bool check_cms_cdc_fsc(const TRectype& rec_analriga);
void lettura_conti(TAssoc_array& assoc, const char tipoconto);
int cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag);
real totale_documento(const TRectype& mov) const;
real calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag);
bool test_swap(TCausale& caus, bool ritsoc) const;
public:
virtual void set_filter(const TPag_per_cms_mask& msk, const int cms_row, const long codfor);
@ -278,6 +286,100 @@ void TPag_per_cms_recordset::crea_trr(const TFilename& trr) const
of << "CONTO+NREG+DATAPAG" << endl;
}
void TPag_per_cms_recordset::lettura_conti(TAssoc_array& assoc, const char tipoconto)
{
TConfig conti("ca3600.ini","Pdcc"); //paragrafo da scandire nell'ini (solo conti contabili!!)
TAssoc_array& vars = conti.list_variables();
FOR_EACH_ASSOC_STRING(vars, h, k, val) //riempie l'assoc con i soli valori del paragrafo dell'ini
{
if (*val == tipoconto) //mette nell'assocarray solo i conti corrispondenti al tipoconto passato
assoc.add(val);
}
}
// Controlla sulla causale se il segno del totale documento (ritsoc=FALSE)
// o quello delle ritenute sociali (ritsoc=TRUE) e' invertito rispetto al normale
bool TPag_per_cms_recordset::test_swap(TCausale& caus, bool ritsoc) const
{
const char sez = ritsoc ? caus.sezione_ritsoc() : caus.sezione_clifo();
const bool s = (caus.iva() == iva_vendite) ^ (sez == 'D');
return s;
}
// Calcola il totale del documento tenendo conto del segno della prima riga e di quella delle
// ritenute sociali sulla causale
real TPag_per_cms_recordset::totale_documento(const TRectype& mov) const
{
real tot = mov.get_real(MOV_TOTDOC); // Legge totale
const real ritfis = mov.get_real(MOV_RITFIS);
tot += ritfis; // Somma ritenute fiscali
const real ritsoc = mov.get_real(MOV_RITSOC);
if (!ritsoc.is_zero())
{
TCausale caus(mov.get(MOV_CODCAUS));
const bool swapt = test_swap(caus, false); // Totale invertito ?
const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ?
if (swapt ^ swaps) // Somma ritenute sociali con segno
tot -= ritsoc;
else
tot += ritsoc;
}
return tot;
}
int TPag_per_cms_recordset::cerca_riga_fattura_origine(const TPartita& match, const TRectype& riga_pag)
{
//scansione delle righe partita passata, precedenti alla riga_pag
const int k = riga_pag.get_int(PART_NRIGA);
for (int i = match.pred(k); i > 0; i = match.pred(i))
{
const TRiga_partite& riga_part = match.riga(i);
if (riga_part.is_fattura())
{
for (int j = riga_part.rate(); j > 0; j--)
{
if (match.esiste(i, j, k)) //se esiste il pagamento k della rata j della riga partita i contenente la fattura
return i;
}
}
}
return 0;
}
real TPag_per_cms_recordset::calcola_pagato_prec(const TPartita& match, const int riga_fatt, const TRectype& riga_pag)
{
real pagato = ZERO;
if (riga_fatt > 0)
{
const int k = riga_pag.get_int(PART_NRIGA);
const TDate data_rif = riga_pag.get(_campodata); //data di riferimento selezionata sulla maschera
const TRiga_partite& riga_part = match.riga(riga_fatt);
for (int i = riga_part.rate(); i > 0; i--)
{
TRiga_scadenze& sc = riga_part.rata(i);
for (int j = sc.last(); j > 0; j = sc.pred(j))
{
const TRiga_partite& pag = match.riga(j);
const TDate datapag = pag.get_date(_campodata);
const long cmp = datapag - data_rif;
//la riga pagamento e' da considerare quando ha data anteriore a quella di riferimento oppur
//ha data uguale ma numero di registrazione inferiore (insomma, il pagamento e' precedente
//a quello di riga_pag)
if (cmp < 0 || (cmp == 0 && j <= k))
{
pagato += pag.get_real(PAGSCA_IMPORTO);
}
}
}
}
return pagato;
}
long TPag_per_cms_recordset::find_movimento(const TRectype& riga_pag) const
{
int n_fatture = 0; //numero di fatture trovate
@ -376,189 +478,304 @@ void TPag_per_cms_recordset::scan_movs(const TPag_per_cms_mask& msk)
crea_righe_stampa(_righesociali, 4);*/
}
bool TPag_per_cms_recordset::check_cms_cdc_fsc(const TRectype& rec_analriga)
{
if (_codcosto.not_empty() && _codcosto != rec_analriga.get(RMOVANA_CODCCOSTO))
return false;
if (_codcms.not_empty() && _codcms != rec_analriga.get(RMOVANA_CODCMS))
return false;
if (_codfas.not_empty() && _codfas != rec_analriga.get(RMOVANA_CODFASE))
return false;
return true;
}
//prepara l'assoc con tutte le righe da mandare in stampa per quanto riguarda i movimenti con
//saldaconto (siano essi con o senza iva)
void TPag_per_cms_recordset::find_commesse(const long nreg, const TRectype& riga_pag)
{
/* TMovimentoPN pn;
pn.curr().put(MOV_NUMREG, nreg);
if (pn.read() == NOERR)
//cerca un record di MOVANA che abbia numregcg = nreg;usa il nuovo metodo fighissimo..
//..con la isam query
TString query, strnreg;
strnreg.format("%07ld", nreg);
query << "USE MOVANA KEY 3\n";
query << "WHERE NUMREGCG=";
query << strnreg;
query << "\n";
TISAM_recordset movana(query);
for (TRecnotype i = 0; movana.move_to(i); i++)
{
const TRectype& movfat = pn.curr();
const long numregcg = movana.get(MOVANA_NUMREGCG).as_int();
//se trova il record cercato in RMOVANA...
if (numregcg == nreg)
{
//prepara il record tmpcurr sul file temporaneo _tmp su cui registrare i dati da stampare
TRectype& tmpcurr = _tmp->curr();
tmpcurr.zero();
real totdoc_cms;
real totdoc, totdoc_netto;
TAssoc_array commesse;
//crea un movimento p.n. con il numero reg che viene passato al metodo (nreg relativo..
//..ad un movimento della fattura originaria)
TMovimentoPN pn;
pn.curr().put(MOV_NUMREG, nreg);
if (pn.read() == NOERR)
{
const TRectype& movfat = pn.curr();
//Movimenti CON SALDACONTO
//se movimento IVA..
if (pn.iva_items() > 0)
{
for (int i = 0; i < pn.iva_items(); i++)
{
const TRectype& rmoviva = pn.iva(i);
const TString& codcms = rmoviva.get(RMI_CODCMS);
const TString& codfase = rmoviva.get(RMI_FASCMS);
real totdoc_cms;
real totdoc, totdoc_netto;
TAssoc_array commesse;
const TBill conto(rmoviva);
//Movimenti CON SALDACONTO
//se movimento IVA..
if (pn.iva_items() > 0)
{
for (int i = 0; i < pn.iva_items(); i++)
{
const TRectype& rmoviva = pn.iva(i);
const TBill zio(rmoviva);
//il tutto si fa solo se l'indicatore del conto nella riga iva e' != 5
if (zio.indicatore_bilancio() != 5)
{
const int gruppo_iva = zio.gruppo();
const int conto_iva = zio.conto();
const long sottoconto_iva = zio.sottoconto();
if (cms_in_range(codcms, codfase) && conto.indicatore_bilancio() != 5)
{
TToken_string cms_fsc = codcms;
if (codfase.not_empty())
cms_fsc.add(codfase);
//trova le RMOVANA del MOVANA corrente che hanno il conto = a quello della i-esima rigaiva
TAnal_mov anal_mov(nreg);
TRecord_array& anal_rows = anal_mov.body();
const real importo = rmoviva.get_real(RMI_IMPONIBILE);
real imposta = rmoviva.get_real(RMI_IMPOSTA);
real* imp = (real*)commesse.objptr(cms_fsc);
if (imp == NULL)
{
imp = new real;
commesse.add(cms_fsc, imp);
}
*imp += importo;
totdoc_cms += importo;
if (anal_rows.rows() > 0) //se il movana ha righe...
{
for (i = 1; i <= anal_rows.rows(); i++)
{
if (imposta != ZERO)
{
//controllo prorata
const TRectype& pla = cache().get("CMS", codcms);
const bool prorata = pla.get_bool("B4");
if (prorata)
{
const TDate datareg = pn.curr().get_date(MOV_DATAREG);
const int anno = datareg.year();
TRegistro registro(pn.curr().get(MOV_REG), anno);
//prende il conto sulla riga analitica e lo confronta con quello della riga iva
const int gruppo_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).left(3));
const int conto_anal = atoi(anal_rows[i].get(RMOVANA_CODCONTO).mid(3,3));
const long sottoconto_anal = atol(anal_rows[i].get(RMOVANA_CODCONTO).mid(6,6));
imposta *= (CENTO - registro.prorata(anno))/CENTO;
imposta.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta
}
//il codconto anale e iva coincidono?
if (gruppo_iva == gruppo_anal && conto_iva == conto_anal && sottoconto_iva == sottoconto_anal)
{
*imp += imposta;
totdoc_cms += imposta;
}
const real imponibile_iva = rmoviva.get_real(RMI_IMPONIBILE);
real imposta_iva = rmoviva.get_real(RMI_IMPOSTA);
}
}
//commessa,cdc,fase della riga analitica devono essere coincidenti con quelle dello sheet
if (check_cms_cdc_fsc(anal_rows[i]))
{
//costruzione dell'assoc_array con cms/cdc/fsc ed importi
TToken_string cms_cdc_fsc;
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCMS));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODCCOSTO));
cms_cdc_fsc.add(anal_rows[i].get(RMOVANA_CODFASE));
totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare)
totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo
}
else //..movimento NON iva (sempre con saldaconto)
{
for (int i = 0; i < pn.cg_items(); i++)
{
const TRectype& rmov = pn.cg(i);
const TBill conto(rmov);
real* imp = (real*)commesse.objptr(cms_cdc_fsc);
if (imp == NULL)
{
imp = new real;
commesse.add(cms_cdc_fsc, imp);
}
*imp += imponibile_iva;
totdoc_cms += imponibile_iva;
TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO));
importo.normalize('D');
if (imposta_iva != ZERO)
{
//controllo prorata
const TRectype& pla = cache().get(LF_COMMESSE, anal_rows[i].get(RMOVANA_CODCMS));
const bool prorata = pla.get_bool("PRORATA");
if (prorata)
{
const TDate datareg = pn.curr().get_date(MOV_DATAREG);
const int anno = datareg.year();
TRegistro registro(pn.curr().get(MOV_REG), anno);
if (conto.tipo() > ' ')
{
totdoc -= importo.valore();
totdoc_netto -= importo.valore(); //valore per il calcolo del residuo
continue;
}
imposta_iva *= (CENTO - registro.prorata(anno))/CENTO;
imposta_iva.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta
}
if (cerca_fiscali(conto) || cerca_sociali(conto))
{
totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute
continue;
}
*imp += imposta_iva;
totdoc_cms += imposta_iva;
}
const TString& codcms = rmov.get(RMV_CODCMS);
const TString& codfase = rmov.get(RMV_FASCMS);
/* TGeneric_distrib agip(imponibile_iva, TCurrency::get_firm_dec());
FOR_EACH_ASSOC_OBJECT(commesse, h, k, importo)
{
const real& impcms = *(real*)importo;
agip.add(impcms);
agip_prec.add(impcms); //distributore di importo pagato sulle commesse
}*/
}
if (cms_in_range(codcms,codfase) && conto.indicatore_bilancio() != 5)
{
TToken_string cms_fsc = codcms;
if (codfase.not_empty())
cms_fsc.add(codfase);
} //if(gruppo_iva==..
real* imp = (real*)commesse.objptr(cms_fsc);
if (imp == NULL)
{
imp = new real;
commesse.add(cms_fsc, imp);
}
*imp += importo.valore();
totdoc_cms += importo.valore();
}
} //for (anal_rows...
} //if anal_rows() > 0...
} //if indicatore_bilancio!=5..
}
}
//aggiungi le slice con gli importi delle righe di analitica
//estrai gli importi risultanti e aggiungili a commesse (come sotto) solo se la commessa coincide
//con quella selezionata
//ricordarsi di considerare l'indetraibilita'
//parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali
//e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento
//(quindi non si puo' in questo caso applicare la totale_documento()
//Le ritenute fiscali vanno sempre sommate..
real totpagato = riga_pag.get_real(PART_IMPORTO) + riga_pag.get_real(PART_RITENUTE);
//Le ritenute sociali invece vanno testate con la test_swap..
const real ritsoc = riga_pag.get_real(PART_RITSOC);
if (!ritsoc.is_zero())
{
const TRectype& mov = pn.curr();
TCausale caus(mov.get(MOV_CODCAUS));
const bool swapt = test_swap(caus, false); // Totale invertito ?
const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ?
if (swapt ^ swaps) // Somma ritenute sociali con segno
totpagato -= ritsoc;
else
totpagato += ritsoc;
}
const real percentuale = totpagato / totdoc_netto;
//calcolo del residuo (solo movimenti saldacontati)
//mi servono,dalla riga partita che viene passata,i valori dei campi per la chiave del
//file delle scadenze
const TPartita match(riga_pag);
//ci serve la riga di fattura che origina la nostra riga pagamento
const int riga_fatt = cerca_riga_fattura_origine(match, riga_pag);
//quanto era stato pagato del documento prima della attuale riga_pag
const real totpagato_prec = calcola_pagato_prec(match, riga_fatt, riga_pag);
const real perc_prec = totpagato_prec / totdoc_netto;
TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec());
TGeneric_distrib distributore_prec(totdoc_cms * perc_prec, TCurrency::get_firm_dec());
{
FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
distributore.add(impcms);
distributore_prec.add(impcms); //distributore di importo pagato sulle commesse
}
}
/* if (conto.indicatore_bilancio() != 5)
{
const real importo = rmoviva.get_real(RMI_IMPONIBILE);
real imposta = rmoviva.get_real(RMI_IMPOSTA);
real* imp = (real*)commesse.objptr(cms_fsc);
if (imp == NULL)
{
imp = new real;
commesse.add(cms_fsc, imp);
}
*imp += importo;
totdoc_cms += importo;
FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
TPag_per_cms_struct* ppcs = new TPag_per_cms_struct;
if (imposta != ZERO)
{
//controllo prorata
const TRectype& pla = cache().get("CMS", codcms);
const bool prorata = pla.get_bool("B4");
if (prorata)
{
const TDate datareg = pn.curr().get_date(MOV_DATAREG);
const int anno = datareg.year();
TRegistro registro(pn.curr().get(MOV_REG), anno);
// campi del pagamento
ppcs->_tipo = 0; //movimenti da saldaconto
ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO);
ppcs->_datapag = riga_pag.get_date(_campodata);
ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita
ppcs->_importopagato_prec.set_num(distributore_prec.get()); //pagamenti precedenti al
ppcs->_descrpagamento = riga_pag.get(PART_DESCR);
// campi della fattura
ppcs->_nreg = nreg;
ppcs->_numfat = movfat.get(MOV_NUMDOC);
ppcs->_datafat = movfat.get_date(MOV_DATADOC);
ppcs->_protiva = movfat.get_long(MOV_PROTIVA);
ppcs->_totfat = totdoc; //questo e' quello che viene stampato in Tot.fattura
imposta *= (CENTO - registro.prorata(anno))/CENTO;
imposta.round(TCurrency::get_firm_dec()); //ci vanno i decimali della ditta
}
TToken_string cms_fsc = k;
*imp += imposta;
totdoc_cms += imposta;
}
ppcs->_commessa = cms_fsc.get(0);
ppcs->_fase = cms_fsc.get(1);
ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura
}*/
}
_righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti
}
}*/
// totdoc = totale_documento(pn.curr()); //tot doc con ritenute fiscali + ritenute sociali (da stampare)
totdoc_netto = pn.curr().get_real(MOV_TOTDOC); //questo si usa solo per il calcolo del residuo
}
else //..movimento NON iva (sempre con saldaconto)
{
for (int i = 0; i < pn.cg_items(); i++)
{
const TRectype& rmov = pn.cg(i);
const TBill conto(rmov);
TImporto importo(rmov.get_char(RMV_SEZIONE), rmov.get_real(RMV_IMPORTO));
importo.normalize('D');
if (conto.tipo() > ' ')
{
totdoc -= importo.valore();
totdoc_netto -= importo.valore(); //valore per il calcolo del residuo
continue;
}
/* if (cerca_fiscali(conto) || cerca_sociali(conto))
{
totdoc -= importo.valore(); //valore da stampare nella colonna Tot.fattura con ritenute
continue;
}
const TString& codcms = rmov.get(RMV_CODCMS);
const TString& codfase = rmov.get(RMV_FASCMS);
if (conto.indicatore_bilancio() != 5)
{
real* imp = (real*)commesse.objptr(cms_fsc);
if (imp == NULL)
{
imp = new real;
commesse.add(cms_fsc, imp);
}
*imp += importo.valore();
totdoc_cms += importo.valore();
}*/
}
} //else...
//parte comune a movimenti IVA e non (vengono anche qui considerate le ritenute fiscali
//e sociali perche' possono essere state inserite direttamente nella partita e non nel movimento
//(quindi non si puo' in questo caso applicare la totale_documento()
//Le ritenute fiscali vanno sempre sommate..
real totpagato = riga_pag.get_real(PART_IMPORTO) + riga_pag.get_real(PART_RITENUTE);
//Le ritenute sociali invece vanno testate con la test_swap..
const real ritsoc = riga_pag.get_real(PART_RITSOC);
if (!ritsoc.is_zero())
{
const TRectype& mov = pn.curr();
TCausale caus(mov.get(MOV_CODCAUS));
const bool swapt = test_swap(caus, false); // Totale invertito ?
const bool swaps = test_swap(caus, true); // Ritenute sociali invertite ?
if (swapt ^ swaps) // Somma ritenute sociali con segno
totpagato -= ritsoc;
else
totpagato += ritsoc;
}
const real percentuale = totpagato / totdoc_netto;
//calcolo del residuo (solo movimenti saldacontati)
//mi servono,dalla riga partita che viene passata,i valori dei campi per la chiave del
//file delle scadenze
const TPartita match(riga_pag);
//ci serve la riga di fattura che origina la nostra riga pagamento
const int riga_fatt = cerca_riga_fattura_origine(match, riga_pag);
//quanto era stato pagato del documento prima della attuale riga_pag
const real totpagato_prec = calcola_pagato_prec(match, riga_fatt, riga_pag);
const real perc_prec = totpagato_prec / totdoc_netto;
TGeneric_distrib distributore(totdoc_cms * percentuale, TCurrency::get_firm_dec());
TGeneric_distrib distributore_prec(totdoc_cms * perc_prec, TCurrency::get_firm_dec());
{
FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
distributore.add(impcms);
distributore_prec.add(impcms); //distributore di importo pagato sulle commesse
}
}
/* FOR_EACH_ASSOC_OBJECT(commesse, h, k, imp)
{
const real& impcms = *(real*)imp;
TPag_per_cms_struct* ppcs = new TPag_per_cms_struct;
// campi del pagamento
ppcs->_tipo = 0; //movimenti da saldaconto
ppcs->_codforn = riga_pag.get_long(PART_SOTTOCONTO);
ppcs->_datapag = riga_pag.get_date(_campodata);
ppcs->_importopagato.set_num(distributore.get()); //pagamento nella partita
ppcs->_importopagato_prec.set_num(distributore_prec.get()); //pagamenti precedenti al
ppcs->_descrpagamento = riga_pag.get(PART_DESCR);
// campi della fattura
ppcs->_nreg = nreg;
ppcs->_numfat = movfat.get(MOV_NUMDOC);
ppcs->_datafat = movfat.get_date(MOV_DATADOC);
ppcs->_protiva = movfat.get_long(MOV_PROTIVA);
ppcs->_totfat = totdoc; //questo e' quello che viene stampato in Tot.fattura
TToken_string cms_fsc = k;
ppcs->_commessa = cms_fsc.get(0);
ppcs->_fase = cms_fsc.get(1);
ppcs->_importocommessa.set_num(impcms); //importo da pagare scritto sulla fattura
_righe.add(ppcs); //aggiunge il pagamento all'array dei pagamenti
}*/
} //pn.read()...
} //if (numregcg==nreg)...
} //for TRecnotype...
}
bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly)
@ -567,8 +784,8 @@ bool TPag_per_cms_recordset::part_callback(const TRelation& rel, void* pJolly)
const TRectype& riga_part_pag = rel.curr();
const long nreg = recordset->find_movimento(riga_part_pag); //prima cerco un movimento della fattura...
/* if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente
recordset->find_commesse(nreg, riga_part_pag);*/
if (nreg > 0) //..se ne trovo almeno uno cerco la commessa corrispondente
recordset->find_commesse(nreg, riga_part_pag);
return true;
}
@ -651,6 +868,13 @@ void TPag_per_cms_recordset::set_filter(const TPag_per_cms_mask& msk, const int
_dadata = msk.get_date(F_DATAINI);
_adata = msk.get_date(F_DATAFIN);
//carica i conti memorizzati nel ca3600.ini
lettura_conti(_costi, 'C');
lettura_conti(_pagamenti, 'P');
lettura_conti(_fiscali, 'F');
lettura_conti(_sociali, 'S');
//scansione movimenti con saldaconto
scan_pags(msk);
@ -766,6 +990,15 @@ void TPag_per_cms::stampa_per_commessa(const TPag_per_cms_mask& mask, TReport_bo
void TPag_per_cms::main_loop()
{
//il programma si puo' usare SOLO se in contabilita' analitica si usa il piano dei conti contabile
TConfig& cfg = ca_config();
const bool use_pdcc = cfg.get_bool("UsePdcc");
if (!use_pdcc)
{
error_box(TR("Programma funzionante SOLO se in contabilita' analitica si usa il piano dei conti contabile"));
return;
}
TPag_per_cms_mask mask;
while (mask.run() == K_ENTER)
{

View File

@ -16,7 +16,7 @@
//sheets conti e righe relative
#define F_PDCC 301
#define F_PDCA 302
//#define F_PDCA 302 ***per ora solo Pdcc***
#define F_PIANO 319
#define S_TIPO 101

View File

@ -160,7 +160,7 @@ BEGIN
GROUP 5
END
TEXT -1
/*TEXT -1 ***per ora solo Pdcc***
BEGIN
PROMPT 1 5 "@bPiano dei conti analitico"
GROUP 6
@ -175,7 +175,7 @@ BEGIN
ITEM "Cdc4"
ITEM "Cdc5"
GROUP 6
END
END*/
BUTTON DLG_SAVEREC 12 2
BEGIN
@ -402,7 +402,8 @@ ENDMASK
//----------------------Piano dei conti analitico------------------------------//
//-----------Pagina di riga dello sheet PDCA----------------------//
PAGE "Riga Piano dei conti analitico" -1 -1 78 8
//***per ora solo Pdcc***
/*PAGE "Riga Piano dei conti analitico" -1 -1 78 8
LIST S_TIPO 1 18
BEGIN
@ -462,4 +463,4 @@ END
ENDPAGE
ENDMASK
ENDMASK*/