132452fd50
Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione P@rtners 2.0 patch 349 git-svn-id: svn://10.65.10.50/trunk@10573 c028cbd2-c16b-5b4b-a496-9718f37d4682
1842 lines
51 KiB
C++
Executable File
1842 lines
51 KiB
C++
Executable File
#include <mask.h>
|
|
#include <printapp.h>
|
|
#include <tabutil.h>
|
|
#include <utility.h>
|
|
#include <sort.h>
|
|
|
|
#include <comuni.h>
|
|
#include <nditte.h>
|
|
#include <unloc.h>
|
|
#include <clifo.h>
|
|
#include <pconti.h>
|
|
#include <anagr.h>
|
|
|
|
#include "ba3.h"
|
|
#include "ba3800.h"
|
|
|
|
class BA3800_application : public TPrintapp
|
|
{
|
|
struct bil_ivd
|
|
{
|
|
char sez;
|
|
char let;
|
|
char numr[5];
|
|
char num[4];
|
|
char gruppo[4];
|
|
char conto[4];
|
|
char sottoc[8];
|
|
};
|
|
|
|
bil_ivd* _bil;
|
|
TTable* _tabivd;
|
|
TLocalisamfile* _nditte;
|
|
TLocalisamfile* _comuni;
|
|
TLocalisamfile* _unloc;
|
|
TLocalisamfile* _anag;
|
|
TLocalisamfile* _pconti;
|
|
TLocalisamfile* _clifo;
|
|
TParagraph_string _descr;
|
|
const char* _buff;
|
|
TSort* _sort;
|
|
|
|
TDate _datastampa;
|
|
bool _diffprod_fatto,_risimp_fatto;
|
|
TString _numr_tot,_num_tot,_numr,_numr_da_stamp,_num_da_stamp,_numr_stamp,_num_stamp;;
|
|
char _sez_da_stamp,_let_da_stamp,_sez_stamp,_let_stamp,_sez_tot,_let_tot,_let,_sez;
|
|
int _cont_let,_cont_numr,_cont_num,_cont_gcs,_num,_i;
|
|
bool _reset_righe_stampa,_statopatr_no_stamp,_sbilancio_ordine;
|
|
bool _totale_attivita_gia_stampato,_totale_passivita_gia_stampato;
|
|
bool _sbilancio_patr_gia_stampato,_attivo_o_passivo;
|
|
TString _causale_ap, _causale_chi, _totale;
|
|
char _liv;
|
|
TString tmp;
|
|
|
|
public:
|
|
|
|
bool menu (MENU_TAG m) { return TPrintapp::menu(m) ; }
|
|
virtual bool user_create() ;
|
|
virtual bool user_destroy();
|
|
virtual bool set_print(int);
|
|
|
|
virtual bool preprocess_page (int,int);
|
|
virtual print_action postprocess_page (int,int);
|
|
virtual void postclose_print ();
|
|
|
|
virtual void set_page(int,int);
|
|
|
|
void intestazione_ditta();
|
|
void intestazione_studio();
|
|
void stampa_totali_studio();
|
|
void stampa_totali_ditta();
|
|
bool preprocess_ditta(int);
|
|
bool preprocess_studio(int);
|
|
|
|
void setta_righe_studio(const char*);
|
|
void setta_righe_ditta(const char*);
|
|
void totale_numero_arabo();
|
|
void totale_numero_romano();
|
|
void totale_lettera();
|
|
void init_sort();
|
|
void crea_sort_tabella();
|
|
void crea_sort_piano_conti();
|
|
void scrivi_record(const TString&,const TString&,const TString&,int,int,int,long);
|
|
void riempi_record(const TString&,const TString&,const TString&,int,int,int,long);
|
|
void set_bil_key(bil_ivd* b, char sezione, char lettera,
|
|
const char* numero_romano, int numero,
|
|
bool conti_ordine = TRUE, int conto = 0,
|
|
int gruppo = 0, long sottoconto = 0L);
|
|
const char* descrizione_lettera(char, char);
|
|
const char* descrizione_numeroromano(char, char, int);
|
|
const char* descrizione_numero(char, char, int, int);
|
|
const char* descrizione_sottoconto(int, int, long);
|
|
void setta_righe_descr(TParagraph_string&,const TString&,const TString&);
|
|
|
|
BA3800_application(char livello) : _liv(toupper(livello)), _descr("", 40) {}
|
|
};
|
|
|
|
void BA3800_application::postclose_print()
|
|
{
|
|
if (_liv == 'D')
|
|
delete _sort;
|
|
}
|
|
|
|
void BA3800_application::set_bil_key(bil_ivd* b, char sezione, char lettera,
|
|
const char* numero_romano, int numero,
|
|
bool conti_ordine, int gruppo, int conto,
|
|
long sottoconto)
|
|
|
|
{
|
|
b->sez = sezione;
|
|
|
|
//Se esiste solamente la sezione,significa che e' un conto d'ordine
|
|
//Forzo la lettera della classe a Z, per ottenere, grazie
|
|
//all'ordinamento del sort, i record dei conti d'ordine per ultimi
|
|
|
|
b->let = (conti_ordine && lettera == '\0' && sezione < '3') ? 'Z' : lettera;
|
|
strcpy(b->numr, numero_romano);
|
|
sprintf(b->num , "%2d", numero);
|
|
if (gruppo < 0)
|
|
{
|
|
strcpy(b->gruppo, "ZZZ");
|
|
strcpy(b->conto, "ZZZ");
|
|
strcpy(b->sottoc, "ZZZZZZ");
|
|
}
|
|
else
|
|
if (gruppo == 0)
|
|
{
|
|
strcpy(b->gruppo, " ");
|
|
strcpy(b->conto, " ");
|
|
strcpy(b->sottoc, " ");
|
|
}
|
|
else
|
|
{
|
|
sprintf(b->gruppo , "%3d", gruppo);
|
|
sprintf(b->conto , "%3d", conto);
|
|
sprintf(b->sottoc , "%6ld", sottoconto);
|
|
}
|
|
}
|
|
|
|
void BA3800_application::scrivi_record(const TString& sez,
|
|
const TString& let, const TString& numerorom,int numero,
|
|
int g,int c,long s)
|
|
{
|
|
|
|
//Se esiste solamente la sezione,significa che e' un conto d'ordine
|
|
//Forzo la lettera della classe a Z, per ottenere, grazie
|
|
//all'ordinamento del sort, i record dei conti d'ordine per ultimi
|
|
|
|
set_bil_key(_bil, sez[0], let[0], numerorom, numero, TRUE, g, c, s);
|
|
_sort->sort ((const char*) _bil);
|
|
}
|
|
|
|
void BA3800_application::riempi_record(const TString& sez,
|
|
const TString& let, const TString& numerorom,int numero,
|
|
int g,int c,long s)
|
|
{
|
|
set_bil_key(_bil, sez[0], let[0], numerorom, numero, FALSE, g, c, s);
|
|
_sort->sort ((const char*) _bil);
|
|
}
|
|
|
|
void BA3800_application::crea_sort_tabella()
|
|
{
|
|
TRecnotype recno_prec=0l, recno_curr=0l;
|
|
TString codtab_prec;
|
|
TTable tabivd(TAB_IVD);
|
|
TRecfield codtab_curr(tabivd.curr(),"CODTAB");
|
|
TRecfield sezione (tabivd.curr(),"CODTAB",0,0);
|
|
TRecfield lettera (tabivd.curr(),"CODTAB",1,1);
|
|
TRecfield numerorom (tabivd.curr(),"CODTAB",2,5);
|
|
TRecfield numero (tabivd.curr(),"CODTAB",6,7);
|
|
int preclen;
|
|
bool FINITO=FALSE;
|
|
|
|
tabivd.first();
|
|
codtab_prec = tabivd.get("CODTAB");
|
|
|
|
// Compilo tanti record quante sono le classi IV direttiva trovate sulla
|
|
// tabella %IVD, usando dei gruppi, conti e sottoconti fittizi. Successivamente
|
|
// nel caso di stampa completa verranno stampati anche questi record; nel caso
|
|
// di stampa non completa non verranno stampati.
|
|
|
|
do
|
|
{
|
|
recno_prec = tabivd.recno();
|
|
tabivd.next();
|
|
if (tabivd.eof())
|
|
{
|
|
tabivd.zero();
|
|
FINITO=TRUE;
|
|
}
|
|
recno_curr = tabivd.recno();
|
|
preclen = codtab_prec.len();
|
|
if (!strncmp(codtab_curr,codtab_prec,preclen))
|
|
codtab_prec = (const char *)codtab_curr;
|
|
else
|
|
{
|
|
tabivd.readat(recno_prec);
|
|
const char sez = *((const char*) sezione);
|
|
const char let = *((const char*) lettera);
|
|
TString16 nrom((const char*)numerorom);
|
|
const int nu = (int) numero;
|
|
|
|
set_bil_key(_bil, sez, let,(const char*)nrom, nu, FALSE,-1);
|
|
_sort->sort ((const char*) _bil);
|
|
tabivd.readat(recno_curr);
|
|
codtab_prec = (const char *)codtab_curr;
|
|
}
|
|
} while (!FINITO);
|
|
}
|
|
|
|
// Passo al sort tutti i record presenti su piano dei conti, aventi la classe
|
|
// IV direttiva CEE.
|
|
|
|
void BA3800_application::crea_sort_piano_conti()
|
|
{
|
|
TLocalisamfile pconti(LF_PCON);
|
|
TString sez,let,numerorom;
|
|
TString sez_conto,let_conto,numr_conto;
|
|
int num_conto, indbil;
|
|
char sezione,lettera,tmcf;
|
|
int numero,g,c;
|
|
long s;
|
|
bool classe_conto = FALSE;
|
|
bool conto_dettagliato = FALSE;
|
|
bool stsottbil;
|
|
c = 0;
|
|
num_conto = 0;
|
|
tmcf = ' ';
|
|
indbil = 0;
|
|
|
|
for (pconti.first(); !pconti.eof(); pconti.next())
|
|
{
|
|
// _prog->addstatus(1);
|
|
g = pconti.get_int (PCN_GRUPPO);
|
|
c = pconti.get_int (PCN_CONTO);
|
|
s = pconti.get_long(PCN_SOTTOCONTO);
|
|
sez = pconti.get(PCN_SEZIVD);
|
|
let = pconti.get(PCN_LETTIVD);
|
|
sezione = sez[0];
|
|
lettera = let[0];
|
|
numerorom = pconti.get(PCN_NUMRIVD);
|
|
numero = pconti.get_int (PCN_NUMIVD);
|
|
|
|
// Se si tratta di un conto e contiene la classe, allora lo passo al sort.
|
|
// Gli eventuali sottoconti avranno la stessa classe.
|
|
|
|
if ((g != 0) && (c != 0) && (s == 0))
|
|
{
|
|
stsottbil = pconti.get_bool(PCN_STSOTTBIL);
|
|
tmcf = pconti.get (PCN_TMCF)[0];
|
|
indbil = pconti.get_int (PCN_INDBIL);
|
|
|
|
//Se sono nello stesso gruppo, ma ho un conto diverso da quello precedentemente
|
|
//analizzato, e se questi contiene la classe IV dir. CEE,
|
|
//allore devo controllare se va dettagliato (se STSOTTBIL e' TRUE il conto non
|
|
//va dettagliato, se FALSE va dettagliato)
|
|
|
|
if (sez != "0")
|
|
{
|
|
if (stsottbil || tmcf == 'C' || tmcf == 'F')
|
|
conto_dettagliato = FALSE;
|
|
else
|
|
conto_dettagliato = TRUE;
|
|
|
|
sez_conto = sez;
|
|
|
|
if (let != "")
|
|
let_conto = let;
|
|
else
|
|
if ((sez == "1")||(sez == "2"))
|
|
let_conto = "Z";
|
|
else
|
|
let_conto = let;
|
|
|
|
numr_conto = numerorom;
|
|
num_conto = numero;
|
|
|
|
riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,0);
|
|
|
|
classe_conto = TRUE;
|
|
}
|
|
else
|
|
{
|
|
classe_conto = FALSE; // Metto conto dettagliato = TRUE perche' potrebbero esserci dei sottoconti
|
|
conto_dettagliato = TRUE; // di questo conto che hanno la classe e quindi vanno stampati.
|
|
}
|
|
}
|
|
|
|
// Se si tratta di un sottoconto e contiene la classe, allora lo passo al sort.
|
|
|
|
if ((g != 0) && (c != 0) && (s != 0))
|
|
{
|
|
// classe_conto indica se il conto precedentemente letto conteneva
|
|
// la classe. In caso affermativo anche questo sottoconto appena
|
|
// letto avra' la stessa classe del conto.
|
|
|
|
if (classe_conto)
|
|
{
|
|
if (conto_dettagliato)
|
|
riempi_record(sez_conto,let_conto,numr_conto,num_conto,g,c,s);
|
|
}
|
|
else
|
|
if (sez != "0")
|
|
riempi_record(sez,let,numerorom,numero,g,c,s);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool BA3800_application::set_print(int)
|
|
{
|
|
TMask msk("ba3800a");
|
|
|
|
const KEY tasto= msk.run();
|
|
|
|
if (tasto == K_ENTER)
|
|
{
|
|
_datastampa = msk.get(F_DATASTAMPA);
|
|
|
|
_cont_let = 0;
|
|
_cont_numr = 0;
|
|
_cont_num = 0;
|
|
_cont_gcs = 0;
|
|
|
|
_totale = "XXXXXXXXXXX";
|
|
|
|
_sez_stamp = ' ';
|
|
_let_stamp = ' ';
|
|
_numr_stamp = "";
|
|
_num_stamp = "";
|
|
_sez_tot = ' ';
|
|
_let_tot = ' ';
|
|
_numr_tot = "";
|
|
_num_tot = "";
|
|
|
|
_statopatr_no_stamp = TRUE;
|
|
_diffprod_fatto = TRUE;
|
|
_risimp_fatto = TRUE;
|
|
_totale_attivita_gia_stampato = FALSE;
|
|
_totale_passivita_gia_stampato = FALSE;
|
|
_sbilancio_ordine = FALSE;
|
|
_sbilancio_patr_gia_stampato = FALSE;
|
|
_attivo_o_passivo = FALSE;
|
|
|
|
printer().footerlen(5);
|
|
|
|
if (_liv == 'S')
|
|
intestazione_studio();
|
|
else
|
|
if (_liv == 'D')
|
|
{
|
|
init_sort();
|
|
crea_sort_tabella();
|
|
crea_sort_piano_conti();
|
|
_sort->endsort();
|
|
intestazione_ditta();
|
|
delete _bil;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
void BA3800_application::totale_numero_arabo()
|
|
{
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i,FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
|
|
void BA3800_application::totale_numero_romano()
|
|
{
|
|
if (_cont_num != 0)//(_cont_num >= 2)
|
|
{
|
|
//Fai il totale del numero romano e stampalo
|
|
int numeror = atoi(_numr);
|
|
TString numrom = itor(numeror);
|
|
if (numrom != "")
|
|
{
|
|
set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
|
|
void BA3800_application::totale_lettera()
|
|
{
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let != ' ')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
|
|
void BA3800_application::stampa_totali_studio()
|
|
{
|
|
bool gia_stampato_conto_ord = FALSE;
|
|
TString16 diff_prod;
|
|
TString16 ris_imp;
|
|
|
|
diff_prod.format("%c%c",'9','B');
|
|
ris_imp.format ("%c%c%8s%2s",'9','E',"","21");
|
|
|
|
_num = atoi(_num_tot);
|
|
_numr = _numr_tot;
|
|
_let = _let_tot;
|
|
|
|
if (_tabivd->eof())
|
|
{
|
|
_num_tot = "";
|
|
_numr_tot = "";
|
|
_let_tot = ' ';
|
|
_sez_tot = ' ';
|
|
}
|
|
|
|
if (_num_da_stamp!=_num_tot)
|
|
{
|
|
totale_numero_arabo();
|
|
|
|
if (_sez_stamp == '9')
|
|
{
|
|
TString16 classe;
|
|
|
|
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
|
|
|
|
if (classe > ris_imp && _risimp_fatto)
|
|
{
|
|
if (_num_tot == "20" || _num_tot == "21")
|
|
{
|
|
set_row (_i, FR("@4gTotale delle partite straordinarie"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
set_row (_i,FR("@4gRisultato prima delle imposte"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_risimp_fatto = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
_cont_gcs = 0;
|
|
}
|
|
if (_numr_da_stamp!=_numr_tot)
|
|
{
|
|
totale_numero_arabo();
|
|
totale_numero_romano();
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
}
|
|
if (_let_da_stamp!=_let_tot)
|
|
{
|
|
if (_sez_stamp == '9')
|
|
{
|
|
TString16 classe;
|
|
|
|
classe.format("%c%c%8s%2s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp);
|
|
|
|
totale_numero_arabo();
|
|
totale_numero_romano();
|
|
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let_stamp == 'D')
|
|
set_row (_i,FR("@4gTotale delle rettifiche"));
|
|
else
|
|
if (_let != ' ')
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
set_row (_i, FR("@3gTotale@10g%c@12g)"), _let);
|
|
else
|
|
if (_sez_stamp != '9')
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
if (_let != ' ')
|
|
{
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
else
|
|
if (_sez_stamp != '9')
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
|
|
if (classe > diff_prod && _diffprod_fatto)
|
|
{
|
|
if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere
|
|
{
|
|
set_row (_i++,FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
|
|
_diffprod_fatto = FALSE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
totale_numero_arabo();
|
|
totale_numero_romano();
|
|
totale_lettera();
|
|
}
|
|
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
_cont_numr = 0;
|
|
}
|
|
if (_sez_da_stamp != _sez_tot)
|
|
{
|
|
totale_numero_arabo();
|
|
totale_numero_romano();
|
|
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let != ' ')
|
|
{
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
else
|
|
if (_sez_stamp != '9')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
if (_sez_stamp == '1')
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE ATTIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if (_sez_stamp == '2') //&& (_let_stamp != 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE PASSIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if (_sez_stamp == '2')
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
|
|
set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if (_sez_stamp == '9')
|
|
{
|
|
if (_tabivd->eof())
|
|
{
|
|
if ((_let_stamp == 'A' || _let_stamp == 'B') && _diffprod_fatto)//Solo se esiste una delle due lettere
|
|
{
|
|
set_row (_i++, FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
|
|
_diffprod_fatto = FALSE;
|
|
}
|
|
if (_risimp_fatto)
|
|
{
|
|
set_row (_i, FR("@4gRisultato prima delle imposte"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gRISULTATO CONTO ECONOMICO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
_cont_numr = 0;
|
|
_cont_let = 0;
|
|
}
|
|
}
|
|
|
|
void BA3800_application::stampa_totali_ditta()
|
|
{
|
|
bool gia_stampato_conto_ord = FALSE;
|
|
TString16 diff_prod;
|
|
TString16 ris_imp;
|
|
|
|
diff_prod.format("%c%c",'9','B');
|
|
ris_imp.format ("%c%c%8s%2s",'9','E',"","21");
|
|
|
|
_num = atoi(_num_tot);
|
|
_numr = _numr_tot;
|
|
_let = _let_tot;
|
|
|
|
if (_buff == NULL)
|
|
{
|
|
_num_tot = "";
|
|
_numr_tot = "";
|
|
_let_tot = ' ';
|
|
_sez_tot = ' ';
|
|
}
|
|
|
|
if ((_sez_stamp == '1' || _sez_stamp == '2') && _let_stamp != 'Z')
|
|
_attivo_o_passivo = TRUE;
|
|
|
|
if (_num_da_stamp!=_num_tot)
|
|
{
|
|
if (_let_stamp != 'Z')
|
|
{
|
|
if (_sez_stamp != '5')
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i, FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
if (_sez_stamp == '9')
|
|
{
|
|
TString16 classe;
|
|
|
|
classe.format("%c%c%8s%2s", _sez_da_stamp,_let_da_stamp,(const char*)_numr_da_stamp,(const char*)_num_da_stamp);
|
|
|
|
if (classe > ris_imp && _risimp_fatto)
|
|
{
|
|
if (_num_tot == "20" || _num_tot == "21")
|
|
{
|
|
set_row (_i, FR("@4gTotale delle partite straordinarie"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
set_row (_i, FR("@4gRisultato prima delle imposte"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_risimp_fatto = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
_cont_gcs = 0;
|
|
}
|
|
if (_numr_da_stamp!=_numr_tot)
|
|
{
|
|
if (_let_stamp != 'Z')
|
|
{
|
|
if (_sez_stamp != '5')
|
|
{
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i, FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_num != 0)//(_cont_num >= 2)
|
|
{
|
|
//Fai il totale del numero romano e stampalo
|
|
int numeror = atoi(_numr);
|
|
TString numrom = itor(numeror);
|
|
if (numrom != "")
|
|
{
|
|
set_row (_i,FR("@14gTotale@21g%s"), (const char*) numrom);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
}
|
|
if (_let_da_stamp!=_let_tot)
|
|
{
|
|
if (_sez_stamp == '9')
|
|
{
|
|
TString16 classe;
|
|
|
|
classe.format("%c%c%8s%2s",_sez_stamp,_let_stamp,(const char*)_numr_stamp,(const char*)_num_stamp);
|
|
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i,FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_num != 0)//(_cont_num >= 2)
|
|
{
|
|
//Fai il totale del numero romano e stampalo
|
|
int numeror = atoi(_numr);
|
|
TString numrom = itor(numeror);
|
|
if (numrom != "")
|
|
{
|
|
set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let_stamp == 'D')
|
|
set_row (_i, FR("@4gTotale delle rettifiche"));
|
|
else
|
|
if (_let != ' ')
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
else
|
|
if (_sez_stamp != '9')
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
if (_let != ' ')
|
|
{
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
else
|
|
if (_sez_stamp != '9')
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
|
|
if (classe > diff_prod && _diffprod_fatto)
|
|
{
|
|
if (_let_tot == 'A' || _let_tot == 'B') //Solo se esiste una delle due lettere
|
|
{
|
|
set_row (_i++, FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*)_totale);
|
|
_diffprod_fatto = FALSE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_let_stamp != 'Z')
|
|
{
|
|
if (_sez_stamp != '5')
|
|
{
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i,FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_num != 0)//(_cont_num >= 2)
|
|
{
|
|
//Fai il totale del numero romano e stampalo
|
|
int numeror = atoi(_numr);
|
|
TString numrom = itor(numeror);
|
|
if (numrom != "")
|
|
{
|
|
set_row (_i,FR("@14gTotale@21g%s"), (const char*) numrom);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let != ' ')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((_sez_stamp == '1')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gTOTALE ATTIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_totale_attivita_gia_stampato = TRUE;
|
|
}
|
|
|
|
if ((_sez_stamp == '2')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gTOTALE PASSIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_totale_passivita_gia_stampato = TRUE;
|
|
}
|
|
|
|
if ((_sez_stamp == '1')&&(_let_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE CONTI D' ORDINE ATTIVI"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
gia_stampato_conto_ord = TRUE;
|
|
}
|
|
|
|
if ((_sez_stamp == '2')&&(_let_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE CONTI D' ORDINE PASSIVI"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_i++;
|
|
gia_stampato_conto_ord = TRUE;
|
|
if (!_attivo_o_passivo)
|
|
{
|
|
set_row (_i++,FR("@0gSALDO CONTI D' ORDINE"));
|
|
set_row (_i,FR("@0gSBILANCIO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_sbilancio_ordine = TRUE;
|
|
_sbilancio_patr_gia_stampato = TRUE;
|
|
}
|
|
}
|
|
}
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
_cont_numr = 0;
|
|
}
|
|
if (_sez_da_stamp != _sez_tot)
|
|
{
|
|
if (_let_stamp != 'Z')
|
|
{
|
|
if (_sez_stamp != '5')
|
|
{
|
|
if (_cont_gcs != 0)//(_cont_gcs >= 2)
|
|
{
|
|
//Fai il totale del numero arabo e stampalo
|
|
if (_num != 0)
|
|
{
|
|
set_row (_i,FR("@18gTotale@25g%2d@27g)"), _num);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_num != 0)//(_cont_num >= 2)
|
|
{
|
|
//Fai il totale del numero romano e stampalo
|
|
int numeror = atoi(_numr);
|
|
TString numrom = itor(numeror);
|
|
if (numrom != "")
|
|
{
|
|
set_row (_i, FR("@14gTotale@21g%s"), (const char*) numrom);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_cont_numr != 0)//(_cont_numr >= 2)
|
|
{
|
|
//Fai il totale della lettera e stampalo
|
|
if (_let != ' ')
|
|
{
|
|
if (_sez_stamp == '9' && _let_stamp != 'E')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
else
|
|
if (_sez_stamp != '9')
|
|
{
|
|
set_row (_i,FR("@3gTotale@10g%c@12g)"), _let);
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!_totale_attivita_gia_stampato)
|
|
if ((_sez_stamp == '1') && (_let_stamp != 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gTOTALE ATTIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if (!_totale_passivita_gia_stampato)
|
|
if ((_sez_stamp == '2') && (_let_stamp != 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gTOTALE PASSIVO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if (!gia_stampato_conto_ord)
|
|
{
|
|
if (_sez_stamp == '2')
|
|
{
|
|
if (!_sbilancio_patr_gia_stampato)
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
|
|
set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_sbilancio_patr_gia_stampato = TRUE;
|
|
}
|
|
}
|
|
if ((_sez_stamp == '1')&&(_let_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE CONTI D' ORDINE ATTIVI"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
|
|
if ((_sez_stamp == '2')&&(_let_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gTOTALE CONTI D' ORDINE PASSIVI"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_i++;
|
|
if (!_sbilancio_ordine)
|
|
{
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gSALDO CONTI D' ORDINE"));
|
|
set_row (_i, FR("@0gSBILANCIO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
_sbilancio_ordine = TRUE;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_sez_stamp == '2')
|
|
{
|
|
char app = ' ';
|
|
if (!_sbilancio_patr_gia_stampato)
|
|
{
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gSALDO STATO PATRIMONIALE"));
|
|
set_row (_i, FR("@0gSBILANCIO (ATTIVO - PASSIVO)"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
if (!_sbilancio_ordine)
|
|
{
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gSALDO CONTI D' ORDINE"));
|
|
set_row (_i, FR("@0gSBILANCIO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
if (_sez_stamp == '5')
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i, FR("@0gTOTALE CONTI D' ORDINE"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
if (_sez_stamp == '9')
|
|
{
|
|
if (_tabivd->eof())
|
|
{
|
|
if ((_let_stamp == 'A' || _let_stamp == 'B') && _diffprod_fatto)//Solo se esiste una delle due lettere
|
|
{
|
|
set_row (_i++,FR("@4gDifferenza tra valore e costi della produzione@86g%s"), (const char*) _totale);
|
|
_diffprod_fatto = FALSE;
|
|
}
|
|
if (_risimp_fatto)
|
|
{
|
|
set_row (_i, FR("@4gRisultato prima delle imposte"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
}
|
|
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i,FR("@0gRISULTATO CONTO ECONOMICO"));
|
|
set_row (_i++,"@86g%s", (const char*) _totale);
|
|
}
|
|
_cont_gcs = 0;
|
|
_cont_num = 0;
|
|
_cont_numr = 0;
|
|
_cont_let = 0;
|
|
}
|
|
}
|
|
|
|
print_action BA3800_application::postprocess_page(int file, int counter)
|
|
{
|
|
if (_liv == 'S')
|
|
{
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
if (_sez_da_stamp == '9')
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
setta_righe_studio(TR("CONTO ECONOMICO"));
|
|
_reset_righe_stampa = FALSE;
|
|
}
|
|
}
|
|
|
|
set_auto_ff(FALSE);
|
|
|
|
if (_tabivd->eof())
|
|
return NEXT_PAGE;
|
|
}
|
|
else
|
|
if (_liv == 'D')
|
|
{
|
|
struct bil_ivd* bil = (struct bil_ivd*) _buff;
|
|
|
|
bil = (struct bil_ivd*) _buff;
|
|
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
if (_sez_da_stamp == '5')
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
setta_righe_ditta(TR("CONTI D' ORDINE"));
|
|
_reset_righe_stampa = FALSE;
|
|
}
|
|
if (_sez_da_stamp == '9')
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
setta_righe_ditta(TR("CONTO ECONOMICO"));
|
|
_reset_righe_stampa = FALSE;
|
|
}
|
|
}
|
|
|
|
set_auto_ff(FALSE);
|
|
|
|
if (_buff == NULL)
|
|
return NEXT_PAGE;
|
|
}
|
|
|
|
return REPEAT_PAGE;
|
|
}
|
|
|
|
bool BA3800_application::preprocess_page(int file, int counter)
|
|
{
|
|
if (_liv == 'S')
|
|
{
|
|
if (preprocess_studio(counter))
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
else if (_liv == 'D')
|
|
{
|
|
if (preprocess_ditta(counter))
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool BA3800_application::preprocess_studio(int counter)
|
|
{
|
|
bool fai = TRUE;
|
|
TString saldostr,saldo_rafstr;
|
|
bool conto_dettagliato = TRUE;
|
|
|
|
if (counter == 0)
|
|
{
|
|
_tabivd->setkey(1);
|
|
_tabivd->zero();
|
|
_tabivd->first();
|
|
reset_print();
|
|
_i = 1;
|
|
}
|
|
else
|
|
_tabivd->next();
|
|
|
|
if (_reset_righe_stampa)
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
}
|
|
else
|
|
_reset_righe_stampa = TRUE;
|
|
|
|
if (counter)
|
|
{
|
|
_sez_stamp = _sez_da_stamp;
|
|
_let_stamp = _let_da_stamp;
|
|
_numr_stamp = _numr_da_stamp;
|
|
_num_stamp = _num_da_stamp;
|
|
_sez_tot = _sez_da_stamp;
|
|
_let_tot = _let_da_stamp;
|
|
_numr_tot = _numr_da_stamp;
|
|
_num_tot = _num_da_stamp;
|
|
}
|
|
|
|
if (_tabivd->eof())
|
|
{
|
|
stampa_totali_studio();
|
|
_sez_da_stamp = ' ';
|
|
_sez_stamp = ' ';
|
|
return TRUE;
|
|
}
|
|
|
|
if (!_tabivd->eof())
|
|
{
|
|
TString16 codtab;
|
|
|
|
// _classe_da_stampare = format ("%1c%1c%8s%2d",bil->sez,bil->let,(const char*) bil->numr,bil->num);
|
|
|
|
codtab = _tabivd->get("CODTAB");
|
|
_sez_da_stamp = codtab[0];
|
|
_let_da_stamp = codtab[1];
|
|
_numr_da_stamp = codtab.mid(2,4);
|
|
_numr_da_stamp.ltrim();
|
|
_num_da_stamp = codtab.mid(6,2);
|
|
_num_da_stamp.ltrim();
|
|
|
|
if (counter)
|
|
stampa_totali_studio();
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
bool BA3800_application::preprocess_ditta(int counter)
|
|
{
|
|
struct bil_ivd* bil = (struct bil_ivd*) _buff;
|
|
int g,c;
|
|
long s;
|
|
bool conto_dettagliato = TRUE;
|
|
|
|
if (!counter)
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
}
|
|
|
|
if (_reset_righe_stampa)
|
|
{
|
|
reset_print();
|
|
_i = 1;
|
|
}
|
|
else
|
|
_reset_righe_stampa = TRUE;
|
|
|
|
if (counter)
|
|
{
|
|
_sez_stamp = bil->sez;
|
|
_let_stamp = bil->let;
|
|
_numr_stamp = bil->numr;
|
|
_numr_stamp.ltrim();
|
|
_num_stamp = bil->num;
|
|
_num_stamp.ltrim();
|
|
_sez_tot = bil->sez;
|
|
_let_tot = bil->let;
|
|
_numr_tot = bil->numr;
|
|
_numr_tot.ltrim();
|
|
_num_tot = bil->num;
|
|
_num_tot.ltrim();
|
|
}
|
|
|
|
_buff = _sort->retrieve();
|
|
|
|
if (_buff == NULL)
|
|
{
|
|
stampa_totali_ditta();
|
|
_sez_da_stamp = ' ';
|
|
_sez_stamp = ' ';
|
|
return TRUE;
|
|
}
|
|
|
|
if (_buff != NULL)
|
|
{
|
|
bil = (struct bil_ivd*) _buff;
|
|
_sez_da_stamp = bil->sez;
|
|
_let_da_stamp = bil->let;
|
|
_numr_da_stamp = bil->numr;
|
|
_numr_da_stamp.ltrim();
|
|
_num_da_stamp = bil->num;
|
|
_num_da_stamp.ltrim();
|
|
g = atoi(bil->gruppo);
|
|
c = atoi(bil->conto);
|
|
s = atol(bil->sottoc);
|
|
|
|
if (counter)
|
|
stampa_totali_ditta();
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
void BA3800_application::set_page(int file, int counter)
|
|
{
|
|
if (_liv == 'S')
|
|
{
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp)))
|
|
{
|
|
setta_righe_studio(TR("STATO PATRIMONIALE"));
|
|
_statopatr_no_stamp = FALSE;
|
|
}
|
|
if (_sez_da_stamp == '2')
|
|
setta_righe_studio("");
|
|
if (_sez_da_stamp == '9')
|
|
set_auto_ff(TRUE);
|
|
}
|
|
else
|
|
{
|
|
if (!_tabivd->eof())
|
|
setta_righe_studio("");
|
|
}
|
|
}
|
|
else if (_liv == 'D')
|
|
{
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
if ((_sez_da_stamp=='1')||((_sez_da_stamp=='2')&&(_statopatr_no_stamp)))
|
|
{
|
|
setta_righe_ditta (TR("STATO PATRIMONIALE"));
|
|
_statopatr_no_stamp = FALSE;
|
|
}
|
|
if (_sez_da_stamp == '2')
|
|
setta_righe_ditta("");
|
|
if ((_sez_da_stamp == '5') || (_sez_da_stamp == '9'))
|
|
set_auto_ff(TRUE);
|
|
}
|
|
else
|
|
{
|
|
if (_buff != NULL)
|
|
setta_righe_ditta("");
|
|
}
|
|
}
|
|
}
|
|
|
|
void BA3800_application::setta_righe_studio(const char * titolo)
|
|
{
|
|
int numeror, numero;
|
|
TString numrom;
|
|
TString descr_let,descr_numr,descr_num;
|
|
bool stampa_classe = TRUE;
|
|
TString lettera = "@1g)@3g%s";
|
|
TString lettera2 = "@3g%s";
|
|
TString numr = "@12g-@14g%s";
|
|
TString numr2 = "@14g%s";
|
|
TString num = "@15g)@18g%s";
|
|
TString num2 = "@18g%s";
|
|
numeror = atoi(_numr_da_stamp);
|
|
numrom = itor(numeror);
|
|
numero = atoi(_num_da_stamp);
|
|
|
|
|
|
descr_let = descrizione_lettera(_sez_da_stamp,_let_da_stamp);
|
|
descr_numr = descrizione_numeroromano(_sez_da_stamp,_let_da_stamp,numeror);
|
|
descr_num = descrizione_numero(_sez_da_stamp,_let_da_stamp,numeror,numero);
|
|
|
|
//Se la classe prelevata dal record corrente del sort e' diversa dalla classe
|
|
//prelevata dal record precedente, allora stampo la nuova classe con i relativi
|
|
//sottoconti. In caso contrario continuo a stampare solo i sottoconti.
|
|
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
set_row (_i++,"@0g%s", titolo);
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
|
|
if (_sez_da_stamp == '1')
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gATTIVO"));
|
|
set_row (_i++,"@0g%c", app);
|
|
}
|
|
else
|
|
if (_sez_da_stamp == '2')
|
|
{
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gPASSIVO"));
|
|
set_row(_i++,"@0g%c", app);
|
|
}
|
|
|
|
if (stampa_classe)
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9'))
|
|
{
|
|
_cont_let = 1;
|
|
_cont_numr = 1;
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
|
|
if (_let_da_stamp != ' ')
|
|
{
|
|
set_row(_i,"@0g%c", _let_da_stamp);
|
|
_descr = (const char*) descr_let;
|
|
setta_righe_descr(_descr,lettera,lettera2);
|
|
// set_row(_i++,"@1g)@3g%s", (const char*) descr_let);
|
|
}
|
|
if (numrom != "")
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr,numr2);
|
|
// set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
}
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", (const char*) _num_da_stamp);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
// set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_let_da_stamp!=_let_stamp)&&(_sez_da_stamp==_sez_stamp))
|
|
{
|
|
if (stampa_classe)
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
_cont_numr = 1;
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
if (_let_da_stamp != ' ')
|
|
{
|
|
set_row(_i,"@0g%c", _let_da_stamp);
|
|
_descr = (const char*) descr_let;
|
|
setta_righe_descr(_descr,lettera,lettera2);
|
|
// set_row(_i++,"@1g)@3g%s", (const char*) descr_let);
|
|
}
|
|
if (numrom != "")
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr,numr2);
|
|
//set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
}
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", (const char*) _num_da_stamp);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_numr_da_stamp!=_numr_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp))
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
if (numrom != "")
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr,numr2);
|
|
//set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
}
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", (const char*) _num_da_stamp);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_num_da_stamp!=_num_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)&&(_numr_da_stamp==_numr_stamp))
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
set_row(_i,"@13g%s", (const char*) _num_da_stamp);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
_cont_gcs = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
void BA3800_application::setta_righe_ditta(const char* titolo)
|
|
{
|
|
struct bil_ivd* bil = (struct bil_ivd*) _buff;
|
|
int numeror, numero, gruppo, conto;
|
|
char sezione,lettera;
|
|
long sottoc;
|
|
TString numrom,numr;
|
|
TString descr_let,descr_numr,descr_num,descr_sottoc,descr_classe;
|
|
bool stampa_classe = TRUE;
|
|
TString lettera1 = "@1g)@3g%s";
|
|
TString lettera2 = "@3g%s";
|
|
TString numr1 = "@12g-@14g%s";
|
|
TString numr2 = "@14g%s";
|
|
TString num = "@15g)@18g%s";
|
|
TString num2 = "@18g%s";
|
|
|
|
sezione = bil->sez;
|
|
lettera = bil->let;
|
|
numr = bil->numr;
|
|
// numr.ltrim();
|
|
numeror = atoi(bil->numr);
|
|
numrom = itor(numeror);
|
|
numero = atoi(bil->num);
|
|
// num = bil->num;
|
|
gruppo = atoi(bil->gruppo);
|
|
conto = atoi(bil->conto);
|
|
sottoc = atoi(bil->sottoc);
|
|
descr_let = descrizione_lettera(sezione,lettera);
|
|
descr_numr = descrizione_numeroromano(sezione,lettera,numeror);
|
|
descr_num = descrizione_numero(sezione,lettera,numeror,numero);
|
|
descr_sottoc = descrizione_sottoconto(gruppo,conto,sottoc);
|
|
|
|
//Se la classe prelevata dal record corrente del sort e' diversa dalla classe
|
|
//prelevata dal record precedente, allora stampo la nuova classe con i relativi
|
|
//sottoconti. In caso contrario continuo a stampare solo i sottoconti.
|
|
|
|
if (_sez_da_stamp != _sez_stamp)
|
|
{
|
|
set_row (_i++,"@0g%s", titolo);
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
|
|
if ((_sez_da_stamp == '1')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++,FR("@0gCONTI D' ORDINE ATTIVI"));
|
|
set_row (_i++,"@0g%c", app);
|
|
stampa_classe = FALSE;
|
|
}
|
|
else
|
|
if ((_sez_da_stamp == '1')&&(_let_da_stamp != 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++,FR("@0gATTIVO"));
|
|
set_row (_i++,"@0g%c", app);
|
|
}
|
|
|
|
if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gCONTI D' ORDINE PASSIVI"));
|
|
set_row(_i++,"@0g%c", app);
|
|
stampa_classe = FALSE;
|
|
}
|
|
else
|
|
if ((_sez_da_stamp == '2')&&(_let_da_stamp != 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
set_row (_i++, FR("@0gPASSIVO"));
|
|
set_row(_i++,"@0g%c", app);
|
|
}
|
|
|
|
if (stampa_classe)
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp== '9'))
|
|
{
|
|
//set_row(_i++,"@0g%s", (const char*) _descr_sez);
|
|
_cont_let = 1;
|
|
_cont_numr = 1;
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
|
|
if (lettera != ' ')
|
|
{
|
|
set_row(_i,"@0g%c", bil->let);
|
|
_descr = (const char*) descr_let;
|
|
setta_righe_descr(_descr,lettera1,lettera2);
|
|
//set_row(_i++,"@1g)@3g%s", (const char*) descr_let);
|
|
}
|
|
if (numrom != "")
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr1,numr2);
|
|
//set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
}
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", bil->num);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_let_da_stamp!=_let_stamp)&&(_sez_da_stamp==_sez_stamp))
|
|
{
|
|
if ((_sez_da_stamp == '1')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row (_i++,"@0g%c", app);
|
|
set_row (_i++,FR("@0gCONTI D' ORDINE ATTIVI"));
|
|
set_row (_i++,"@0g%c", app);
|
|
stampa_classe = FALSE;
|
|
}
|
|
if ((_sez_da_stamp == '2')&&(_let_da_stamp == 'Z'))
|
|
{
|
|
char app = ' ';
|
|
set_row(_i++,"@0g%c", app);
|
|
set_row (_i++,FR("@0gCONTI D' ORDINE PASSIVI"));
|
|
set_row(_i++,"@0g%c", app);
|
|
stampa_classe = FALSE;
|
|
}
|
|
if (stampa_classe)
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
set_row(_i,"@0g%c", bil->let);
|
|
_descr = (const char*) descr_let;
|
|
setta_righe_descr(_descr,lettera1,lettera2);
|
|
//set_row(_i++,"@1g)@3g%s", (const char*) descr_let);
|
|
//_cont_let += 1;
|
|
_cont_numr = 1;
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
|
|
if (numrom != "")
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr1,numr2);
|
|
//set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
}
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", bil->num);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_numr_da_stamp!=_numr_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp))
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
set_row(_i,"@3g%8s", (const char*) numrom);
|
|
_descr = (const char*) descr_numr;
|
|
setta_righe_descr(_descr,numr1,numr2);
|
|
//set_row(_i++,"@12g-@14g%s", (const char*) descr_numr);
|
|
//_cont_numr += 1;
|
|
//_cont_numr = 1;
|
|
_cont_num = 1;
|
|
_cont_gcs = 1;
|
|
|
|
if (numero != 0)
|
|
{
|
|
set_row(_i,"@13g%s", bil->num);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
if ((_num_da_stamp!=_num_stamp)&&(_sez_da_stamp==_sez_stamp)&&(_let_da_stamp==_let_stamp)&&(_numr_da_stamp==_numr_stamp))
|
|
{
|
|
if ((_sez_da_stamp=='1')||(_sez_da_stamp=='2')||(_sez_da_stamp=='9'))
|
|
{
|
|
set_row(_i,"@13g%s", bil->num);
|
|
_descr = (const char*) descr_num;
|
|
setta_righe_descr(_descr,num,num2);
|
|
//set_row(_i++,"@15g)@18g%s", (const char*) descr_num);
|
|
//_cont_num += 1;
|
|
_cont_gcs = 1;
|
|
}
|
|
}
|
|
if (bil->gruppo[0] != 'Z')
|
|
{
|
|
_cont_gcs += 1;
|
|
set_row (_i,"@18g%s", bil->gruppo);
|
|
set_row (_i,"@22g%s", bil->conto);
|
|
if (sottoc != 0L) // Omette la stampa dello 0
|
|
set_row (_i,"@26g%s", bil->sottoc);
|
|
set_row (_i,"@33g%s", (const char*) descr_sottoc);
|
|
set_row (_i,"@86g%s", (const char*) _totale);
|
|
_i++;
|
|
}
|
|
}
|
|
|
|
void BA3800_application::setta_righe_descr(TParagraph_string& str,const TString& formato,const TString& formato2)
|
|
{
|
|
const char* r;
|
|
int i = 1;
|
|
|
|
while ((r = str.get()) != NULL)
|
|
{
|
|
if (i == 1)
|
|
set_row (_i,formato, r);
|
|
else
|
|
if (i > 1)
|
|
set_row (_i,formato2,r);
|
|
_i++;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
void BA3800_application::intestazione_ditta()
|
|
{
|
|
TString datastampastr;
|
|
TString sep(132),sep1(147);
|
|
|
|
TString app(8);
|
|
TLocalisamfile nditte (LF_NDITTE);
|
|
TLocalisamfile comuni (LF_COMUNI);
|
|
TLocalisamfile unloc (LF_UNLOC);
|
|
TLocalisamfile anag (LF_ANAG);
|
|
TString codice_ditta,ragsoc,indulc,civulc,capulc,com,prov,comulc;
|
|
TString cofi,paiv,tipoa,codanagr;
|
|
|
|
reset_header();
|
|
|
|
nditte.setkey(1);
|
|
codice_ditta << get_firm();
|
|
nditte.zero();
|
|
nditte.put(NDT_CODDITTA,codice_ditta);
|
|
nditte.read();
|
|
app = nditte.get(NDT_CODDITTA);
|
|
ragsoc = nditte.get(NDT_RAGSOC);
|
|
tipoa = nditte.get(NDT_TIPOA);
|
|
codanagr = nditte.get(NDT_CODANAGR);
|
|
|
|
unloc.setkey(1);
|
|
unloc.zero();
|
|
unloc.put(ULC_CODDITTA,app);
|
|
unloc.put(ULC_CODULC,"1");
|
|
unloc.read();
|
|
indulc = unloc.get(ULC_INDULC);
|
|
civulc = unloc.get(ULC_CIVULC);
|
|
capulc = unloc.get(ULC_CAPULC);
|
|
comulc = unloc.get(ULC_COMULC);
|
|
|
|
comuni.setkey(1);
|
|
comuni.zero();
|
|
comuni.put(COM_COM,comulc);
|
|
comuni.read();
|
|
com = comuni.get(COM_DENCOM);
|
|
prov = comuni.get(COM_PROVCOM);
|
|
|
|
anag.setkey(1);
|
|
anag.zero();
|
|
anag.put(ANA_TIPOA,tipoa);
|
|
anag.put(ANA_CODANAGR,codanagr);
|
|
anag.read();
|
|
cofi = anag.curr().get(ANA_COFI);
|
|
paiv = anag.curr().get(ANA_PAIV);
|
|
|
|
set_header (1, FR("@0gDITTA@6g%-5s"), (const char*) codice_ditta);
|
|
set_header (1, "@12g%-45s", (const char*) ragsoc);
|
|
set_header (1, "@59g%-25s", (const char*) indulc);
|
|
set_header (1, "@86g%-9s", (const char*) civulc);
|
|
set_header (1, "@97g%-5s", (const char*) capulc);
|
|
set_header (1, "@103g%-25s", (const char*) com);
|
|
set_header (1, "@129g%-3s", (const char*) prov);
|
|
|
|
sep << FR("Pag. @#");
|
|
sep.right_just(132);
|
|
set_header(2,(const char*) sep);
|
|
|
|
datastampastr = _datastampa.string();
|
|
|
|
set_header (2,FR("@0gPartita iva@12g%-11s"), (const char*) paiv);
|
|
set_header (2,FR("@30gCodice fiscale@45g%-16s"), (const char*) cofi);
|
|
set_header (2,FR("@105gData@110g%s"),(const char*) datastampastr);
|
|
set_header (3,FR("@0gSTAMPA TABELLA IV DIRETTIVA"));
|
|
|
|
sep.fill('-'); //Stampa 132 - (sep(132))
|
|
set_header (4, (const char *) sep);
|
|
}
|
|
|
|
void BA3800_application::intestazione_studio()
|
|
{
|
|
TString sep(132);
|
|
TString datastampastr;
|
|
|
|
reset_header();
|
|
|
|
sep << FR("Pag. @#");
|
|
sep.right_just(132);
|
|
set_header(1,(const char*) sep);
|
|
|
|
set_header (1,FR("@0gStudio"));
|
|
//set_header (1,"Nome dello studio");
|
|
|
|
datastampastr = _datastampa.string();
|
|
|
|
set_header (1,FR("@105gData@110g%s"),(const char*) datastampastr);
|
|
set_header (2,FR("@0gSTAMPA TABELLA IV DIRETTIVA"));
|
|
|
|
sep.fill('-'); //Stampa 132 - (sep(132))
|
|
set_header (3, (const char *) sep);
|
|
}
|
|
|
|
const char* BA3800_application::descrizione_lettera(char sezione, char lettera)
|
|
{
|
|
TTable tabivd(TAB_IVD);
|
|
TString16 dep, dep2;
|
|
|
|
tabivd.zero();
|
|
dep.format("%1c%1c", sezione, lettera);
|
|
tabivd.put("CODTAB", dep);
|
|
tabivd.read();
|
|
dep2 = tabivd.get("CODTAB");
|
|
if (dep == dep2)
|
|
tmp = tabivd.get("S0");
|
|
else
|
|
tmp = "";
|
|
return tmp;
|
|
}
|
|
|
|
const char* BA3800_application::descrizione_numeroromano(char sezione, char lettera, int numr)
|
|
{
|
|
TTable tabivd(TAB_IVD);
|
|
TString16 dep, dep2;
|
|
|
|
tabivd.zero();
|
|
if (numr != 0)
|
|
dep.format("%1c%1c%04d", sezione, lettera, numr);
|
|
else
|
|
dep.format("%c%c ", sezione, lettera);
|
|
|
|
tabivd.put("CODTAB", dep);
|
|
tabivd.read();
|
|
dep2 = tabivd.get("CODTAB");
|
|
if (dep == dep2)
|
|
tmp = tabivd.get("S0");
|
|
else
|
|
tmp = "";
|
|
return tmp;
|
|
}
|
|
|
|
const char* BA3800_application::descrizione_numero(char sezione, char lettera, int numr, int numero)
|
|
{
|
|
TTable tabivd(TAB_IVD);
|
|
TString16 dep,dep2;
|
|
|
|
tabivd.zero();
|
|
if (numr != 0)
|
|
dep.format("%1c%1c%04d%02d",sezione, lettera, numr, numero);
|
|
else
|
|
dep.format("%c%c %02d",sezione,lettera,numero);
|
|
tabivd.put("CODTAB", dep);
|
|
tabivd.read();
|
|
dep2 = tabivd.get("CODTAB");
|
|
if (dep == dep2)
|
|
tmp = tabivd.get("S0");
|
|
else
|
|
tmp = "";
|
|
return tmp;
|
|
}
|
|
|
|
const char* BA3800_application::descrizione_sottoconto(int gruppo, int conto, long sottoc)
|
|
{
|
|
TLocalisamfile pconti (LF_PCON);
|
|
|
|
pconti.zero();
|
|
pconti.put(PCN_GRUPPO , gruppo);
|
|
if (conto != 0)
|
|
pconti.put(PCN_CONTO , conto );
|
|
if (sottoc != 0)
|
|
pconti.put(PCN_SOTTOCONTO, sottoc);
|
|
pconti.read();
|
|
if (pconti.bad())
|
|
pconti.zero();
|
|
tmp = pconti.get(PCN_DESCR);
|
|
return tmp;
|
|
}
|
|
|
|
void BA3800_application::init_sort()
|
|
{
|
|
_bil = new bil_ivd;
|
|
_sort = new TSort (sizeof(bil_ivd));
|
|
|
|
_sort -> addsortkey ((char*)&(_bil->sez) - (char*)&(_bil->sez),1);
|
|
_sort -> addsortkey ((char*)&(_bil->let) - (char*)&(_bil->sez),1);
|
|
_sort -> addsortkey ((char*)&(_bil->numr) - (char*)&(_bil->sez),4);
|
|
_sort -> addsortkey ((char*)&(_bil->num) - (char*)&(_bil->sez),2);
|
|
_sort -> addsortkey ((char*)&(_bil->gruppo) - (char*)&(_bil->sez),3);
|
|
_sort -> addsortkey ((char*)&(_bil->conto) - (char*)&(_bil->sez),3);
|
|
_sort -> addsortkey ((char*)&(_bil->sottoc) - (char*)&(_bil->sez),6);
|
|
_sort->init();
|
|
}
|
|
|
|
bool BA3800_application::user_create()
|
|
{
|
|
_nditte = new TLocalisamfile (LF_NDITTE);
|
|
_comuni = new TLocalisamfile (LF_COMUNI);
|
|
_unloc = new TLocalisamfile (LF_UNLOC);
|
|
_anag = new TLocalisamfile (LF_ANAG);
|
|
if (_liv == 'D')
|
|
{
|
|
_pconti = new TLocalisamfile (LF_PCON);
|
|
_clifo = new TLocalisamfile (LF_CLIFO);
|
|
}
|
|
|
|
_tabivd = new TTable (TAB_IVD);
|
|
return TRUE;
|
|
}
|
|
|
|
bool BA3800_application::user_destroy()
|
|
{
|
|
delete _tabivd;
|
|
delete _nditte;
|
|
delete _comuni;
|
|
delete _unloc;
|
|
delete _anag;
|
|
if (_liv == 'D')
|
|
{
|
|
delete _pconti;
|
|
delete _clifo;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
int ba3800 (int argc, char* argv[])
|
|
{
|
|
if (argc > 3)
|
|
{
|
|
BA3800_application a(*argv[2]);
|
|
a.run(argc, argv, TR("Stampa Tabella IV Direttiva CEE"));
|
|
}
|
|
else
|
|
error_box("Usage: BA3 -7 {D|S}");
|
|
return 0;
|
|
}
|
|
|