From 2c6da54e057b02d14562d52a13d6b13c83a6df7b Mon Sep 17 00:00:00 2001 From: luca83 Date: Tue, 17 Nov 2009 17:40:01 +0000 Subject: [PATCH] Patch level : 10.0 patch 421 Files correlati : lv2 Ricompilazione Demo : [ ] Commento : Corretta la generazione delle fatrture di solo nolo git-svn-id: svn://10.65.10.50/trunk@19643 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- lv/lv2500.cpp | 513 +++++++++++++++++++++++++++----------------------- 1 file changed, 274 insertions(+), 239 deletions(-) diff --git a/lv/lv2500.cpp b/lv/lv2500.cpp index c06c8a32f..4fd946f5a 100755 --- a/lv/lv2500.cpp +++ b/lv/lv2500.cpp @@ -134,7 +134,7 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) bool rifbol = contr.get_bool(LVCONDV_RIFBOL); bool riftest = ini_get_bool(CONFIG_DITTA, "lv", "RifTest"); - if (doc.physical_rows()>0 && doc[1].is_descrizione()) + if (doc.physical_rows() > 0 && doc[1].is_descrizione()) { if (elcons) { @@ -146,7 +146,7 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) else if (!rifbol) doc.destroy_row(1, true); - } + } //se devo mettere i riferimenti della bolla in testata, prendo la descrizione della prima riga //e la metto sulla testata del documento, poi cancello la prima riga del documento @@ -174,9 +174,9 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) if (ragart) { real totmerc; - const int rows=doc.physical_rows(); + const int rows = doc.physical_rows(); - for (int i=1; i<=rows; i++) //calcolo totale merce + for (int i=1; i <= rows; i++) //calcolo totale merce { const TRiga_documento& riga = doc[i]; if (riga.is_merce()) @@ -269,35 +269,26 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) switch (tipocanfix) { - case 0: - { - for (int k = rigamerce+1; k <= rows; k++) - { - doc.destroy_row(k); - } - } - break; - case 1: - { - for (int k = rigamerce+1; k <= rows; k++) - { - TRiga_documento& rout = doc[k]; - rout.zero(RDOC_PREZZO); - } - } - break; - case 2: - { - for (int k = rigamerce+1; k <= rows; k++) - { - TRiga_documento& rout = doc[k]; - rout.zero(RDOC_PREZZO); - rout.zero(RDOC_QTA); - } - } - break; - default: - break; + case 0: + for (int k = rigamerce+1; k <= rows; k++) + doc.destroy_row(k); + break; + case 1: + for (int k = rigamerce+1; k <= rows; k++) + { + TRiga_documento& rout = doc[k]; + rout.zero(RDOC_PREZZO); + } + break; + case 2: + for (int k = rigamerce+1; k <= rows; k++) + { + TRiga_documento& rout = doc[k]; + rout.zero(RDOC_PREZZO); + rout.zero(RDOC_QTA); + } + break; + default: break; } break; } @@ -325,219 +316,215 @@ void TFatturazione_lavanderie::post_process_output(TLista_documenti& doc_out) //dalle giacenze articolo per cliente, altrimenti leggo la dotazione odierna if (index >=0) { - if (tipodot=="I") - dot=artlav.clifomag(annoes)[index].get_real("DOTIN"); + if (tipodot == "I") + dot = artlav.clifomag(annoes)[index].get_real("DOTIN"); else - dot=artlav.clifomag(annoes)[index].get_real("DOTOD"); + dot = artlav.clifomag(annoes)[index].get_real("DOTOD"); } //leggo dalla riga contratto il tipo forfait const int tipoforf = rcont.get_int(LVRCONDV_TIPOFORF); switch (tipoforf) - { - case 0: //forfait = NESSUNO - break; - case 1: //forfait = A VALORE FISSO - { - rout.put(RDOC_QTA, UNO); //qta fissa a UNO - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); //prezzo letto dalla riga contratto - // gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente - } - break; - case 2: //forfait = NOLO - { - //aggiungo una riga tipo merce, che contiene tutti i dati della riga del documento - //di partenza, poi costruisco la descrizione in base alla periodicità di fatturazione, - //metto la qta uguale alla dotazione che ho appena letto - //e prendo il prezzo nolo dalla riga contratto - TRiga_documento& nolorow = doc.insert_row(++i, "01"); - doc.copy_data(nolorow, rout); - TString80 descr("Nolo"); - const int contrper = contr.get_int(LVCONDV_PERFAT); + { + case 0: break;//forfait = NESSUNO + + case 1: //forfait = A VALORE FISSO + { + rout.put(RDOC_QTA, UNO); //qta fissa a UNO + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); //prezzo letto dalla riga contratto + // gestione in base codice per valore fisso ??? tolta la scelta dell'articolo o del cliente + } + break; + case 2: //forfait = NOLO + { + //aggiungo una riga tipo merce, che contiene tutti i dati della riga del documento + //di partenza, poi costruisco la descrizione in base alla periodicità di fatturazione, + //metto la qta uguale alla dotazione che ho appena letto + //e prendo il prezzo nolo dalla riga contratto + TRiga_documento& nolorow = doc.insert_row(++i, "01"); + doc.copy_data(nolorow, rout); + TString80 descr("Nolo"); + const int contrper = contr.get_int(LVCONDV_PERFAT); - switch (contrper) - { - case 0: - descr << " per il giorno"; - break; - case 1: - descr << " per la settimana"; - break; - case 2: - descr << " per la quindicina"; - break; - case 3: - descr << " per il mese"; - break; - default: - break; - } - nolorow.put(RDOC_DESCR,descr); + switch (contrper) + { + case 0: descr << " per il giorno"; break; + case 1: descr << " per la settimana"; break; + case 2: descr << " per la quindicina"; break; + case 3: descr << " per il mese"; break; + default: break; + } + nolorow.put(RDOC_DESCR,descr); - nolorow.put(RDOC_QTA, dot); - nolorow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZNOL)); - } - break; - case 3: //forfait = CICLAGGIO - { - //leggo la quantità consegnata e calcolo consumo e ciclaggio secondo le formule - //CONSUMO = QTA * PREZZO(dalla riga documento) - //CLICLAGGIO = DOT * PREZZO(dalla riga contratto) * MINIMO CICLAGGIO - const real qta = rout.get_real(RDOC_QTA); - const real consumo = qta * rout.get_real(RDOC_PREZZO); - const real ciclaggio = dot * rcont.get_real(LVRCONDV_PREZZO) * rcont.get_real(LVRCONDV_MINCIC); - //se il consumo è minore del ciclaggio, allora - if (consumo < ciclaggio) + nolorow.put(RDOC_QTA, dot); + nolorow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZNOL)); + rout.put(RDOC_QTA, 0); + } + break; + case 3: //forfait = CICLAGGIO + { + //leggo la quantità consegnata e calcolo consumo e ciclaggio secondo le formule + //CONSUMO = QTA * PREZZO(dalla riga documento) + //CLICLAGGIO = DOT * PREZZO(dalla riga contratto) * MINIMO CICLAGGIO + const real qta = rout.get_real(RDOC_QTA); + const real consumo = qta * rout.get_real(RDOC_PREZZO); + const real ciclaggio = dot * rcont.get_real(LVRCONDV_PREZZO) * rcont.get_real(LVRCONDV_MINCIC); + //se il consumo è minore del ciclaggio, allora + if (consumo < ciclaggio) + { + //leggo il flag del tipo ciclaggio + const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); + //calcolo il valore cicl secondo la formula CICL = MINIMO CICLAGGIO * DOT + const real cicl = rcont.get_real(LVRCONDV_MINCIC) * dot; + //se il ciclaggio è su due linee, allora aggiungo una riga merce, per pareggiare il minimo ciclaggio + //che ha come quantità la differenza tra la quantità di minimo cilcaggio + //e la quantità effettivamente consegnata e come prezzo il prezzo preso dalla riga contratto; + //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando + if (cicl2rig) + { + TRiga_documento& congrow = doc.insert_row(++i, "01"); + doc.copy_data(congrow,rout); + congrow.put(RDOC_DESCR,"Pareggio minimo ciclaggio"); + congrow.put(RDOC_QTA, cicl - qta); + congrow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); + } + else + { + rout.put(RDOC_QTA, cicl); + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); + } + } + } + break; + case 4: //forfait = % SUL VALORE CONVENZIONALE + { + //leggo dalla riga contratto la % sul val.conv su articolo o cliente + const char tipovalconv = rcont.get_char(LVRCONDV_VCARTCLI); + //se la percentuale sul valore convenzionale è sull'articolo, allora: + if (tipovalconv == 'A') + { + //leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule + //CONSUMO = QTA * PREZZO(dalla riga documento) + //IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE + const real qta = rout.get_real(RDOC_QTA); + const real consumo = qta * rout.get_real(RDOC_PREZZO); + const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / 100; + + //se il consumo è minore del ciclaggio, allora + if (consumo < impconv) + { + const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); + //se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene + //il conguaglio al valore convenzionale, che ha come quantità la costante UNO + //e come prezzo la differenza tra l'importo convenzionale e il consumo; + //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando + if (cicl2rig) { - //leggo il flag del tipo ciclaggio - const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); - //calcolo il valore cicl secondo la formula - //CICL = MINIMO CICLAGGIO * DOT - const real cicl = rcont.get_real(LVRCONDV_MINCIC) * dot; - //se il ciclaggio è su due linee, allora aggiungo una riga merce, per pareggiare il minimo ciclaggio - //che ha come quantità la differenza tra la quantità di minimo cilcaggio - //e la quantità effettivamente consegnata e come prezzo il prezzo preso dalla riga contratto; - //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando - if (cicl2rig) - { - TRiga_documento& congrow = doc.insert_row(++i, "01"); - doc.copy_data(congrow,rout); - congrow.put(RDOC_DESCR,"Pareggio minimo ciclaggio"); - congrow.put(RDOC_QTA, cicl - qta); - congrow.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - } - else - { - rout.put(RDOC_QTA, cicl); - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_PREZZO)); - } - } - } - break; - case 4: //forfait = % SUL VALORE CONVENZIONALE - { - //leggo dalla riga contratto la % sul val.conv su articolo o cliente - const char tipovalconv = rcont.get_char(LVRCONDV_VCARTCLI); - //se la percentuale sul valore convenzionale è sull'articolo, allora: - if (tipovalconv == 'A') - { - //leggo la quantità consegnata e calcolo consumo e importo convenzionale secondo le formule - //CONSUMO = QTA * PREZZO(dalla riga documento) - //IMPCONV = DOT * PREZZO(dalla riga contratto) * PERCENTUALE DI FORFAIT CLIENTE - const real qta = rout.get_real(RDOC_QTA); - const real consumo = qta * rout.get_real(RDOC_PREZZO); - const real impconv = dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL) / 100; - - //se il consumo è minore del ciclaggio, allora - if (consumo < impconv) - { - const bool cicl2rig = contr.get_bool(LVCONDV_CICLAGGIO); - //se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene - //il conguaglio al valore convenzionale, che ha come quantità la costante UNO - //e come prezzo la differenza tra l'importo convenzionale e il consumo; - //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando - if (cicl2rig) - { - TRiga_documento& congrow = doc.insert_row(++i, "01"); - doc.copy_data(congrow, rout); - congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale"); - congrow.put(RDOC_QTA, UNO); - congrow.put(RDOC_PREZZO, impconv - consumo); - } - else - { - rout.put(RDOC_QTA, UNO); - rout.put(RDOC_PREZZO, impconv); - } - } + TRiga_documento& congrow = doc.insert_row(++i, "01"); + doc.copy_data(congrow, rout); + congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale"); + congrow.put(RDOC_QTA, UNO); + congrow.put(RDOC_PREZZO, impconv - consumo); } else { - //se la percentuale sul valore convenzionale è sul cliente, allora se il flag valconvcli è false - if (!valconvcli) - { - //pongo valconvcli a true in modo da non tornare più in questo if - valconvcli = true; - //instanzio i due real che andranno a contenere l'importo covenzionale totale e il consumo totale - real impconvtot; - real consumotot; + rout.put(RDOC_QTA, UNO); + rout.put(RDOC_PREZZO, impconv); + } + } + } + else + { + //se la percentuale sul valore convenzionale è sul cliente, allora se il flag valconvcli è false + if (!valconvcli) + { + //pongo valconvcli a true in modo da non tornare più in questo if + valconvcli = true; + //instanzio i due real che andranno a contenere l'importo covenzionale totale e il consumo totale + real impconvtot; + real consumotot; - //scorro tutte le righe documento dalla riga in esame fino alla fine - for (int j = i; j < doc.physical_rows(); j++) + //scorro tutte le righe documento dalla riga in esame fino alla fine + for (int j = i; j < doc.physical_rows(); j++) + { + //instanzio la riga documento e sommo ai totali gli importi solo se + //la percentuale sul valore convenzionale è sul cliente + TRiga_documento& riga = doc[j]; + const TString80 codart = riga.get(RDOC_CODART); + const TRectype & rcont = contr.row(codart); + const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI); + if (tipvalconvcli == 'C') + { + impconvtot += dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL); + consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO); + } + } + //se il consumo è minore del ciclaggio, allora + if (consumotot < impconvtot) + { + const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO); + //se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene + //il conguaglio al valore convenzionale, che ha come quantità la costante UNO + //e come prezzo la differenza tra l'importo convenzionale totale e il consumo totale; + //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando + //e elimino tutte le righe che vanno a comporre il totale in modo che rimanga una riga sola + //per mostrare l'importo del conguaglio al valore convenzionale + if (cicl2rig) + { + TRiga_documento& congrow=doc.insert_row(++i, "01"); + doc.copy_data(congrow, rout); + congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale"); + congrow.put(RDOC_QTA, UNO); + congrow.put(RDOC_PREZZO, impconvtot - consumotot); + } + else + { + rout.put(RDOC_QTA, UNO); + rout.put(RDOC_PREZZO, impconvtot); + for (int k = doc.physical_rows(); k > i; k--) { - //instanzio la riga documento e sommo ai totali gli importi solo se - //la percentuale sul valore convenzionale è sul cliente - TRiga_documento& riga = doc[j]; - const TString80 codart = riga.get(RDOC_CODART); - const TRectype & rcont = contr.row(codart); + TRiga_documento& delrow = doc[k]; + const TString80 codart = delrow.get(RDOC_CODART); + const TRectype& rcont = contr.row(codart); const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI); if (tipvalconvcli == 'C') - { - impconvtot += dot * rcont.get_real(LVRCONDV_VALCONV) * rcont.get_real(LVRCONDV_FORFPERCL); - consumotot += riga.get_real(RDOC_QTA) * riga.get_real(RDOC_PREZZO); - } - } - //se il consumo è minore del ciclaggio, allora - if (consumotot < impconvtot) - { - const bool cicl2rig=contr.get_bool(LVCONDV_CICLAGGIO); - //se il ciclaggio è su due linee, allora aggiungo una riga merce, che contiene - //il conguaglio al valore convenzionale, che ha come quantità la costante UNO - //e come prezzo la differenza tra l'importo convenzionale totale e il consumo totale; - //altimenti correggo quantità e prezzo direttamente sulla riga documento che sto analizzando - //e elimino tutte le righe che vanno a comporre il totale in modo che rimanga una riga sola - //per mostrare l'importo del conguaglio al valore convenzionale - if (cicl2rig) - { - TRiga_documento& congrow=doc.insert_row(++i, "01"); - doc.copy_data(congrow, rout); - congrow.put(RDOC_DESCR, "Conguaglio valore convenzionale"); - congrow.put(RDOC_QTA, UNO); - congrow.put(RDOC_PREZZO, impconvtot - consumotot); - } - else - { - rout.put(RDOC_QTA, UNO); - rout.put(RDOC_PREZZO, impconvtot); - for (int k = doc.physical_rows(); k > i; k--) - { - TRiga_documento& delrow = doc[k]; - const TString80 codart = delrow.get(RDOC_CODART); - const TRectype& rcont = contr.row(codart); - const char tipvalconvcli = rcont.get_char(LVRCONDV_VCARTCLI); - if (tipvalconvcli == 'C') - doc.destroy_row(k, true); - } - } + doc.destroy_row(k, true); } } } - } - break; - case 5: //forfait = FISSO SU DOTAZIONE INIZIALE - { - - rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); - rout.put(RDOC_QTA, artlav.clifomag(annoes)[index].get_real("DOTIN")); - const TString80 codartorig=rout.get(RDOC_CODART); - - for (int h = doc.physical_rows(); h > i; h--) - { - TRiga_documento& delrow = doc[h]; - const TString80 codart=delrow.get(RDOC_CODART); - if ( codartorig == codart) - doc.destroy_row(h,true); - } } - break; - default: - break; - } - } + } + } + break; + case 5: //forfait = FISSO SU DOTAZIONE INIZIALE + { + rout.put(RDOC_PREZZO, rcont.get_real(LVRCONDV_IMPFISART)); + rout.put(RDOC_QTA, artlav.clifomag(annoes)[index].get_real("DOTIN")); + const TString80 codartorig=rout.get(RDOC_CODART); + + for (int h = doc.physical_rows(); h > i; h--) + { + TRiga_documento& delrow = doc[h]; + const TString80 codart=delrow.get(RDOC_CODART); + if ( codartorig == codart) + doc.destroy_row(h, true); + } + } + break; + default: break; + } } } - } + for(int h = doc.physical_rows(); h > 0; h--) + { + TRiga_documento& rdoc = doc[h]; + if (rdoc.get(RDOC_DESCR).empty()) + doc.destroy_row(h, true); + } + } +} + //ADD_ROWS: per adesso un segnaposto void TFatturazione_lavanderie::add_rows(TRiga_documento & rout, TRiga_documento & rin) @@ -789,7 +776,7 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion { TString4 codnum = ini_get_string(CONFIG_DITTA, "lv", "NUM_GEN"); TString4 tipodoc = ini_get_string(CONFIG_DITTA, "lv", "TIPODOC_GEN"); - char stato = cache().get("%TIP", tipodoc, "S2").left(1)[0]; + char stato = cache().get("%TIP", tipodoc, "S2").mid(1,1)[0]; //preparo la query sui contratti TString str; @@ -804,37 +791,84 @@ void TFatturazione_lav_app::genera_bolle_nolo(TAssoc_array& cliela, TFatturazion TISAM_recordset contr(str); TLista_documenti doc_in; - TLista_documenti doc_out; - - TDocumento doc('D', _msk->get_date(F_DATAFAT).year(), codnum, 0); - - doc.put(DOC_TIPODOC, tipodoc); - doc.put(DOC_STATO, stato); - doc.put(DOC_TIPOCF, 'C'); + TLista_documenti doc_out; for(bool ok = contr.move_first(); ok; ok = contr.move_next()) - { + { //scarto i contratti scaduti - if (_msk->get_date(F_DADATA) <= contr.get(LVCONDV_DATAIN).as_date() || _msk->get_date(F_ADATA) >= contr.get(LVCONDV_DATASC).as_date()) - continue; + if (contr.get(LVCONDV_DATASC).as_date().ok()) + if (_msk->get_date(F_DADATA) <= contr.get(LVCONDV_DATAIN).as_date() || _msk->get_date(F_ADATA) >= contr.get(LVCONDV_DATASC).as_date()) + continue; //scarto tutti quelli che non sono in periodo di fatturazione corretto if (contr.get(LVCONDV_PERFAT).as_int() > _msk->get_int(F_PERFAT)) continue; //sacrto tutti quelli a cui ho già fatturato - if(!cliela.is_key(contr.get(LVCONDV_CODCF).as_string())) + if(cliela.is_key(contr.get(LVCONDV_CODCF).as_string())) continue; + TDocumento *pdoc= new TDocumento('D', _msk->get_date(F_DATAFAT).year(), codnum, 0); + + doc_in.add(pdoc); + TDocumento& doc = *pdoc; + + doc.put(DOC_TIPODOC, tipodoc); + doc.put(DOC_STATO, stato); + doc.put(DOC_TIPOCF, 'C'); + doc.put(DOC_CODCF, contr.get(LVCONDV_CODCF).as_int()); - doc_in.add(doc); + TLaundry_contract contratto(contr.cursor()->curr()); + + const long codcf = contratto.get_long(LVCONDV_CODCF); + const int codcont = contratto.get_int(LVCONDV_CODCONT); + + TString str; + str << "USE LVRCONDV\n" + << "FROM CODCF=" << codcf << " CODCONT=" << codcont << "\n" + << "TO CODCF=" << codcf << " CODCONT=" << codcont; + + TISAM_recordset rcont(str); + + for(bool ok = rcont.move_first(); ok; ok = rcont.move_next()) + { + TRectype& riga = rcont.cursor()->curr(); + + if (riga.get_int(LVRCONDV_TIPOFORF) == 2) + { + TRiga_documento& rdoc = doc.new_row("21"); + + rdoc.put(RDOC_CODART, riga.get(LVRCONDV_CODART)); + rdoc.put(RDOC_CODARTMAG, riga.get(LVRCONDV_CODART)); + rdoc.put(RDOC_QTA, 1); + rdoc.put(RDOC_QTAGG1, 1); + rdoc.put(RDOC_PREZZO, riga.get_real(LVRCONDV_PREZNOL)); + rdoc.put(RDOC_CHECKED, true); + rdoc.put(RDOC_UMQTA, riga.get(LVRCONDV_UM)); + + TToken_string key; + key.add('C'); + key.add(codcf); + TString8 codiva = cache().get(LF_CFVEN, key, CFV_ASSFIS); + if (codiva.blank()) + codiva = cache().get(LF_ANAMAG, riga.get(LVRCONDV_CODART), ANAMAG_CODIVA); + + rdoc.put(RDOC_CODIVA, codiva); + + rdoc.put(RDOC_CODAGG1, riga.get(LVRCONDV_CAUSLAV)); + } + } if (ini_get_bool(CONFIG_DITTA, "lv", "RifTest")) elab.put("B15", true); //forzo la descrizione abbreviata - elab.elabora(doc_in, doc_out, _msk->get_date(F_DATAFAT)); - - doc_out.write(); + + if (doc.rows() > 0) + { + elab.elabora(doc_in, doc_out, _msk->get_date(F_DATAFAT)); + doc_out.write(); + } + doc_out.destroy(-1); doc_in.destroy(-1); @@ -933,6 +967,7 @@ void TFatturazione_lav_app::main_loop() docsin.destroy(-1); } lastcli = clifo; + TString tmp; tmp << lastcli; cliela.add(tmp, tmp);