diff --git a/cg/cg3200.cpp b/cg/cg3200.cpp index e6c20fa70..67a733af9 100755 --- a/cg/cg3200.cpp +++ b/cg/cg3200.cpp @@ -1,1818 +1,1818 @@ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cg3.h" -#include "cg3200.h" -#include "cg3401.h" -#include "cglib.h" - -const MAXSTR = 128; -static char __tmp [MAXSTR]; -static TFixed_string tmp (__tmp, MAXSTR); - -class CG3200_application : public TPrintapp -{ - TDociva_array _b; - TRelation* _rel; - TRelation* _rel_clifo; - TMask* _msk; - TTable* _tabivd, * _tabtpd, * _tabreg, * _tabesc; - TLocalisamfile* _mov; - TLocalisamfile* _nditte; - TLocalisamfile* _unloc; - TLocalisamfile* _comuni; - TLocalisamfile* _clifo; - TLocalisamfile* _caus; - Saldo _sld; - - TDate _data_ini,_data_fine,_data_finese,_data_finesesucc,_ultima_data_reg; - TDate _datareg,_datadoc,_data_inizioese; - int _cur1,_cur2,_cur3,_gruppo,_conto,_numcarat,_stampanum,_numivd; - int _numrig,_natdoc,_tipo,_tipostampa; - real _progredare,_progreavere,_totprogre_dare_al,_totprogre_avere_al; - real _totprogre_dare,_totprogre_avere,_importo; - real _riporto_dare,_riporto_avere,_riporto_parziale_dare,_riporto_parziale_avere; - real _totale_periodo_dare,_totale_periodo_avere,_totale_prima_dare,_totale_prima_avere; - real _saldo_periodo,_saldo_progre,_saldo_progre_al,_saldo_progre_prec; - real _saldo_movimenti,_saldo_progressivi,_totale_saldo; - TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; - long _codice_ditta; - TString _sezivd,_lettivd,_tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva; - TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd; - TString _dataregs, _datadocs,_gruppocontr,_contocontr,_sottocontocontr; - - bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov; - - long _annomsk,_annoesmsk,_sottoc,_numreg,_annoes; - long _annomsksucc,_numgio,_protiva; - bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare; - int _tipocf; - char _ricerca; - - TDate _dataregrmov; - int _gruppof,_contof; - long _sottocf; - TString _dataregrmovstring,_importo_str,_saldo_movimenti_str,_saldo_progressivi_str; - -protected: - virtual void user_create() ; - virtual void user_destroy(); - virtual bool set_print(int m); - - virtual bool preprocess_page (int,int); - virtual print_action postprocess_page (int,int); - virtual void preprocess_header(); - virtual void set_page(int,int); - virtual void process_link(int id, const char* txt); - -public: - bool preprocess_pconti(int file, int counter); - bool preprocess_clifo(int file, int counter); - void set_page_pconti(int file, int counter); - void set_page_clifo(int file, int counter); - void ricerca_clifo(); - void ricerca_gruppo(); - void calcola_progressivi(); - void calcola_progressivi_al(); - void documenti_iva(); - void ricerca_regiva(); - void descrizione_causale(); - void saldi_zero(); - void crea_intestazione(); - void fai_stampa132(); - void fai_stampa198(); - void stampa_totali132(); - void stampa_totali198(); - void stampa_totaliiva(); - void data_fine_esercizio(); - void data_fine_esercizio_succ(); - const char* descrizione_gruppo(); - const char* descrizione_conto(); - const char* descrizione_gruppo_clifo(); - const char* descrizione_conto_clifo(); - bool almeno_un_record(); - void ricerca_dati_ditta(); - - CG3200_application(); -}; - -void CG3200_application::process_link(int id, const char* txt) -{ - TToken_string ss(10); - - ss.add("1"); - ss.add(txt); - const TString app("cg2"); - TMessage fs(cmd2name(app,""), MSG_LN, ss); - TMailbox m; - m.send(fs); - - TExternal_app pn(app); - - if (pn.run()) beep(); -} - -//Questa funzione restituisce vero se il record su piano dei conti ha almeno un -//record figlio (e che soddisfa la condizione riguardante la data di registr.). -//Viene successivamente utilizzata per stampare l'intestazione (e i totali) -//oppure no - -bool CG3200_application::almeno_un_record() -{ - bool trovato=FALSE; - long record,sottoc; - int gruppo,conto; - TDate datareg; - TLocalisamfile* rmov; - - rmov = current_cursor()->file(LF_RMOV); - - if (current_cursor()->is_first_match(LF_RMOV)) - { - record = rmov->recno(); - rmov->zero(); - rmov->put(RMV_GRUPPO,_gruppo); - rmov->put(RMV_CONTO,_conto); - rmov->put(RMV_SOTTOCONTO,_sottoc); - for (rmov->read(); ;rmov->next()) - { - long annoes = rmov->get_long(RMV_ANNOES); - datareg = rmov->get_date(RMV_DATAREG); - gruppo = rmov->get_int(RMV_GRUPPO); - conto = rmov->get_int(RMV_CONTO); - sottoc = rmov->get_long(RMV_SOTTOCONTO); - if ((gruppo != _gruppo)&&(conto != _conto)&&(sottoc != _sottoc)) - break; - else - if (((annoes==_annomsk)||(_annomsk==0))&&((datareg>=_data_ini)&&(datareg<=_data_fine))) - { - trovato = TRUE; - break; - } - } - rmov->readat(record); - } - return trovato; -} - -HIDDEN bool our_handler(TMask_field& field, KEY key) -{ - if (key == K_TAB) - { - const long anno = atol(field.get()); - field.mask().enable(F_COMPESE); - } - return TRUE; -} - -void CG3200_application::saldi_zero() -{ - TLocalisamfile* rmov; - real saldo_dare, saldo_avere; - long record; - - saldo_dare = saldo_avere = 0; - - rmov = current_cursor()->file(LF_RMOV); - if (current_cursor()->is_first_match(LF_RMOV)) - { - record = rmov->recno(); - - while (!rmov->eof()) - { - rmov->read(); -// char sezione = *(_rmov->curr().get(RMV_SEZIONE)); - TString sezione = rmov->curr().get(RMV_SEZIONE); - real importo = rmov->curr().get_real(RMV_IMPORTO); - int gruppo = atoi(rmov->get(RMV_GRUPPO)); - int conto = atoi(rmov->get(RMV_CONTO)); - long sottoc = atol(rmov->get(RMV_SOTTOCONTO)); - - if ((gruppo == _gruppo)&&(conto == _conto)&&(sottoc == _sottoc)) - if (sezione == "D") - saldo_dare += importo; - else if (sezione == "A") - saldo_avere += importo; - rmov->next(); - } - rmov->readat(record); - } - _totale_saldo = saldo_dare - saldo_avere; -} - -void CG3200_application::fai_stampa132() -{ - set_row (1,"@0g#t", &_dataregs); - if (_stampanum == 1) - set_row (1,"@11g#7d", &_numreg); - else if (_stampanum == 2) - { - set_row (1,"@11g#7d", &_numgio); - } - set_row (1,"@19g#t", &_datadocs); - set_row (1,"@30g#7t", &_numdoc); - set_row (1,"@38g#3t", &_codcaus); - - _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); - if (_sezione == "D") - set_row (1,"@85g#t", &_importo_str); - else if (_sezione == "A") - set_row (1,"@101g#t", &_importo_str); - - set_row (1,"@117g#3t", &_gruppocontr); - set_row (1,"@120g#3t", &_contocontr); - set_row (1,"@123g#6t", &_sottocontocontr); -} - -void CG3200_application::fai_stampa198() -{ - TLocalisamfile* rmov; - long rec; - TDate datasucc; - TString datasuccstring,dataregrmovstring; - int gruppof,contof; - long sottocf; - - set_row (1,"@0g#t", &_dataregs); - if (_stampanum == 1) - set_row (1,"@11g$[r]#7d$[n]", &_numreg); - else if (_stampanum == 2) - set_row (1,"@11g#7d", &_numgio); - set_row (1,"@19g#t", &_datadocs); - set_row (1,"@30g#7t", &_numdoc); - set_row (1,"@38g#3t", &_codcaus); - - _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); - if (_sezione == "D") - set_row (1,"@102g#t", &_importo_str); - else if (_sezione == "A") - set_row (1,"@119g#t", &_importo_str); - -// Stampa saldo movimenti - - set_row (1,"@153g#t", &_saldo_movimenti_str); - - set_row (1,"@169g#3t", &_gruppocontr); - set_row (1,"@172g#3t", &_contocontr); - set_row (1,"@175g#6t", &_sottocontocontr); - - if (_tipo < 3) - set_row (1,"@185g#t" , &_regiva); - set_row (1,"@194g#5d", &_protiva); - _dataregrmov = current_cursor()->curr(LF_RMOV).get_date(RMV_DATAREG); - dataregrmovstring=_dataregrmov.string(); - -//Gestire la stampa di saldo_progressivi nella postprocess_page di RMOV - - rmov = current_cursor()->file(LF_RMOV); - rec = rmov->recno(); - rmov->next(); - gruppof = rmov->get_int(RMV_GRUPPO); - contof = rmov->get_int(RMV_CONTO); - sottocf = rmov->get_int(RMV_SOTTOCONTO); - datasucc = rmov->get_date(RMV_DATAREG); - datasuccstring=datasucc.string(); - if (((gruppof!=_gruppo)||(contof!=_conto)||(sottocf!=_sottoc))||(rmov->eof())) - datasucc = (""); - if (datasucc != _dataregrmov) - set_row (1,"@136g#t", &_saldo_progressivi_str); - rmov->readat(rec); -} - -void CG3200_application::stampa_totali132() -{ - TString sep(132); - - sep.fill('-'); //Stampa 132 - (sep(132)) - set_row(2,"@0g%s", (const char *) sep); - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; - _saldo_progre = _totprogre_dare - _totprogre_avere; - _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; - set_row (3,"@32gTOTALI PERIODO@69g%15.0r", &_saldo_periodo); - set_row (3,"@85g%15.0r", &_totale_periodo_dare); - set_row (3,"@101g%15.0r", &_totale_periodo_avere); - set_row (4,"@32gTOTALI PROGRESSIVI@69g%15.0r", &_saldo_progre); - set_row (4,"@85g%15.0r", &_totprogre_dare); - set_row (4,"@101g%15.0r", &_totprogre_avere); - if (_stampaprogre) //Progressivi attuali - { - set_row (5,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); - set_row (5,"@69g%15.0r", &_saldo_progre_al); - set_row (5,"@85g%15.0r", &_totprogre_dare_al); - set_row (5,"@101g%r", &_totprogre_avere_al); - } -} - -void CG3200_application::stampa_totali198() -{ - TString sep(198); - - sep.fill('-'); //Stampa 132 - (sep(132)) - set_row(2,"@0g%s", (const char *) sep); - - _totprogre_dare=_progredare+_totale_periodo_dare; - _totprogre_avere=_progreavere+_totale_periodo_avere; - set_row (3,"@32gTOTALI PERIODO@102g%15.0r", &_totale_periodo_dare); - set_row (3,"@119g%15.0r", &_totale_periodo_avere); - set_row (3,"@153g%15.0r", &_saldo_movimenti); - set_row (4,"@32gTOTALI PROGRESSIVI@102g%15.0r", &_totprogre_dare); - set_row (4,"@119g%15.0r", &_totprogre_avere); - set_row (4,"@136g%15.0r", &_saldo_progressivi); - if (_stampaprogre) //Progressivi attuali - { - set_row(5,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); - set_row (5,"@102g%15.0r", &_totprogre_dare_al); - set_row (5,"@119g%15.0r", &_totprogre_avere_al); - set_row (5,"@136g%15.0r", &_saldo_progressivi); - } -} - -bool CG3200_application::preprocess_pconti(int file, int counter) -{ - TLocalisamfile* rmov; - long record; - TString provvis = ""; - - if (counter) - return TRUE; - - switch (file) - { - case LF_PCON: -// Usati in crea_intestazione() - _gruppo = atoi(current_cursor()->curr(LF_PCON).get(PCN_GRUPPO)); - _conto = atoi(current_cursor()->curr(LF_PCON).get(PCN_CONTO)); - _sottoc = atol(current_cursor()->curr(LF_PCON).get(PCN_SOTTOCONTO)); - - _saldo_periodo =0; - _totale_periodo_dare =0; - _totale_periodo_avere =0; - _saldo_progre =0; - _totprogre_dare =0; - _totprogre_avere =0; - _saldo_progre_al =0; - _totprogre_dare_al =0; - _totprogre_avere_al =0; - _progredare =0; - _progreavere =0; - _totale_prima_dare =0; - _totale_prima_avere =0; - _saldo_movimenti =0; - _saldo_progressivi =0; - _saldo_progre_prec =0; - if (_tipostampa == 2) - saldi_zero(); - else - _totale_saldo = 1; - - if ((_tipostampa == 1) || (_tipostampa == 2)) - if ((almeno_un_record()) && (_totale_saldo != 0)) - _puoi_stampare = TRUE; - else - { - _puoi_stampare = FALSE; - return FALSE; - } - break; - - case LF_RMOV: - { - // Ricerca la contropartita di quel movimento - - _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); - - int rcontr = atoi(current_cursor()->curr(LF_RMOV).get(RMV_RCONTR)); - rmov = current_cursor()->file(LF_RMOV); - record = rmov->recno(); - rmov->setkey(1); - rmov->curr().zero(); - rmov->curr().put(RMV_NUMREG,_numreg); - rmov->curr().put(RMV_NUMRIG,rcontr); - rmov->read(); - if (rmov->bad()) - rmov->curr().zero(); - _gruppocontr = rmov->curr().get(RMV_GRUPPO); - _contocontr = rmov->curr().get(RMV_CONTO); - _sottocontocontr = rmov->curr().get(RMV_SOTTOCONTO); - rmov->setkey(2); - rmov->readat(record); - - // Stampa solo quelli che hanno anno esercizio uguale a quello specificato - // nella maschera. Se non viene specificato li stampa tutti - - _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); - _importo_str = _importo.string("###############"); - _mov->setkey(1); - _mov->curr().zero(); - _mov->curr().put(MOV_NUMREG,_numreg); - _mov->read(); - if (_mov->bad()) - _mov->zero(); - _annoes = atol(_mov->curr().get(MOV_ANNOES)); - _regiva = _mov->curr().get(MOV_REG); - - // Controlla se saldo e' diverso da 0 - - if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) - { - _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); - - _datareg = (_mov->curr().get(MOV_DATAREG)); - provvis = _mov->curr().get(MOV_PROVVIS); - - _dataregs = _datareg.string(); - - if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) - { - if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) - { - _codcaus = _mov->curr().get(MOV_CODCAUS); - _tipodoc = _mov->curr().get(MOV_TIPODOC); - if (_stampatotiva) - { - documenti_iva(); - _b.add_riga(_descrdociva,_importo, _natdoc); - } - _datadoc = (_mov->curr().get(MOV_DATADOC)); - _datadocs = _datadoc.string(); - _numdoc = _mov->curr().get(MOV_NUMDOC); - descrizione_causale(); - _descrizionemov = _mov->curr().get(MOV_DESCR); - _numgio = atol(_mov->curr().get(MOV_NUMGIO)); - - _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); - - if (_numcarat == 1) // Stampa 132 caratteri - { - if (_descrizione != "") - { - if (_descrizionemov != "") - { - set_row (1,"@42g%.18s", (const char*) _descrizionemov); - set_row (1,"@61g%.23s", (const char*) _descrizione); - } - else if (_descrizionemov == "") - { - set_row (1,"@42g%.18s", (const char*) _descrcaus); - set_row (1,"@61g%.23s", (const char*) _descrizione); - } - } - else if (_descrizione == "") - { - set_row (1,"@42g%.18s", (const char*) _descrcaus); - set_row (1,"@61g%.23s", (const char*) _descrizionemov); - } - } - else - if (_numcarat == 2) // Stampa 198 caratteri - { - if (_descrizione != "") - { - if (_descrizionemov != "") - { - set_row (1,"@42g%.25s", (const char*) _descrizionemov); - set_row (1,"@68g%.32s", (const char*) _descrizione); - } - else if (_descrizionemov == "") - { - set_row (1,"@42g%.25s", (const char*) _descrcaus); - set_row (1,"@68g%.32s", (const char*) _descrizione); - } - } - else if (_descrizione == "") - { - set_row (1,"@42g%.25s", (const char*) _descrcaus); - set_row (1,"@68g%.32s", (const char*) _descrizionemov); - } - } - - if (_sezione == "D") - { - _totale_periodo_dare += _importo; - _riporto_parziale_dare += _importo; - if (_numcarat == 2) - { - _saldo_progressivi += _importo; - _saldo_movimenti += _importo; - } - } - else if (_sezione == "A") - { - _totale_periodo_avere += _importo; - _riporto_parziale_avere += _importo; - if (_numcarat == 2) - { - _saldo_progressivi -= _importo; - _saldo_movimenti -= _importo; - } - } - _saldo_progressivi_str=_saldo_progressivi.string("###############"); - _saldo_movimenti_str=_saldo_movimenti.string("###############"); - if (_numcarat == 2) - { - ricerca_regiva(); - _protiva = atol(_mov->curr().get(MOV_PROTIVA)); - } - return TRUE; - } - else - return FALSE; - } - else - return FALSE; - } - break; - } - default: - break; - } - return TRUE; -} - -bool CG3200_application::preprocess_clifo(int file, int counter) -{ - TLocalisamfile* rmov; - long record; - TString provvis = ""; - - if (counter) - return TRUE; - - switch (file) - { - case LF_CLIFO: -// Usati in crea_intestazione() - _gruppo = atoi(current_cursor()->curr(LF_CLIFO).get(CLI_GRUPPO)); - _conto = atoi(current_cursor()->curr(LF_CLIFO).get(CLI_CONTO)); - _sottoc = atol(current_cursor()->curr(LF_CLIFO).get(CLI_CODCF)); - - _saldo_periodo =0; - _totale_periodo_dare =0; - _totale_periodo_avere =0; - _saldo_progre =0; - _totprogre_dare =0; - _totprogre_avere =0; - _saldo_progre_al =0; - _totprogre_dare_al =0; - _totprogre_avere_al =0; - _progredare =0; - _progreavere =0; - _totale_prima_dare =0; - _totale_prima_avere =0; - _saldo_movimenti =0; - _saldo_progressivi =0; - _saldo_progre_prec =0; - if (_tipostampa == 2) - saldi_zero(); - else - _totale_saldo = 1; - - if ((_tipostampa == 1) || (_tipostampa == 2)) - if ((almeno_un_record()) && (_totale_saldo != 0)) - _puoi_stampare = TRUE; - else - { - _puoi_stampare = FALSE; - return FALSE; - } - break; - - case LF_RMOV: - { - // Ricerca la contropartita di quel movimento - - _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); - - int rcontr = atoi(current_cursor()->curr(LF_RMOV).get(RMV_RCONTR)); - rmov = current_cursor()->file(LF_RMOV); - record = rmov->recno(); - rmov->setkey(1); - rmov->curr().zero(); - rmov->curr().put(RMV_NUMREG,_numreg); - rmov->curr().put(RMV_NUMRIG,rcontr); - rmov->read(); - if (rmov->bad()) - rmov->curr().zero(); - _gruppocontr = rmov->curr().get(RMV_GRUPPO); - _contocontr = rmov->curr().get(RMV_CONTO); - _sottocontocontr = rmov->curr().get(RMV_SOTTOCONTO); - rmov->setkey(2); - rmov->readat(record); - - - // Stampa solo quelli che hanno anno esercizio uguale a quello specificato - // nella maschera. Se non viene specificato li stampa tutti - - _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); - _importo_str = _importo.string("###############"); - _mov->setkey(1); - _mov->curr().zero(); - _mov->curr().put(MOV_NUMREG,_numreg); - _mov->read(); - if (_mov->bad()) - _mov->zero(); - _annoes = atol(_mov->curr().get(MOV_ANNOES)); - _regiva = _mov->curr().get(MOV_REG); - - // Controlla se saldo e' diverso da 0 - - if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) - { - _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); - - _datareg = (_mov->curr().get(MOV_DATAREG)); - provvis = _mov->curr().get(MOV_PROVVIS); - - _dataregs = _datareg.string(); - - if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) - { - if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) - { - _codcaus = _mov->curr().get(MOV_CODCAUS); - _tipodoc = _mov->curr().get(MOV_TIPODOC); - if (_stampatotiva) - { - documenti_iva(); - _b.add_riga(_descrdociva,_importo, _natdoc); - } - _datadoc = (_mov->curr().get(MOV_DATADOC)); - _datadocs = _datadoc.string(); - _numdoc = _mov->curr().get(MOV_NUMDOC); - descrizione_causale(); - _descrizionemov = _mov->curr().get(MOV_DESCR); - _numgio = atol(_mov->curr().get(MOV_NUMGIO)); - - _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); - - if (_numcarat == 1) // Stampa 132 caratteri - { - if (_descrizione != "") - { - if (_descrizionemov != "") - { - set_row (1,"@42g%.18s", (const char*) _descrizionemov); - set_row (1,"@61g%.23s", (const char*) _descrizione); - } - else if (_descrizionemov == "") - { - set_row (1,"@42g%.18s", (const char*) _descrcaus); - set_row (1,"@61g%.23s", (const char*) _descrizione); - } - } - else if (_descrizione == "") - { - set_row (1,"@42g%.18s", (const char*) _descrcaus); - set_row (1,"@61g%.23s", (const char*) _descrizionemov); - } - } - else - if (_numcarat == 2) // Stampa 198 caratteri - { - if (_descrizione != "") - { - if (_descrizionemov != "") - { - set_row (1,"@42g%.25s", (const char*) _descrizionemov); - set_row (1,"@68g%.32s", (const char*) _descrizione); - } - else if (_descrizionemov == "") - { - set_row (1,"@42g%.25s", (const char*) _descrcaus); - set_row (1,"@68g%.32s", (const char*) _descrizione); - } - } - else if (_descrizione == "") - { - set_row (1,"@42g%.25s", (const char*) _descrcaus); - set_row (1,"@68g%.32s", (const char*) _descrizionemov); - } - } - - if (_sezione == "D") - { - _totale_periodo_dare += _importo; - _riporto_parziale_dare += _importo; - if (_numcarat == 2) - { - _saldo_progressivi += _importo; - _saldo_movimenti += _importo; - } - } - else if (_sezione == "A") - { - _totale_periodo_avere += _importo; - _riporto_parziale_avere += _importo; - if (_numcarat == 2) - { - _saldo_progressivi -= _importo; - _saldo_movimenti -= _importo; - } - } - _saldo_progressivi_str=_saldo_progressivi.string("###############"); - _saldo_movimenti_str=_saldo_movimenti.string("###############"); - if (_numcarat == 2) - { - ricerca_regiva(); - _protiva = atol(_mov->curr().get(MOV_PROTIVA)); - } - return TRUE; - } - else - return FALSE; - } - else - return FALSE; - } - break; - } - default: - break; - } - return TRUE; -} - -bool CG3200_application::preprocess_page(int file, int counter) -{ - if (_ricerca == 'P') - { - if (preprocess_pconti(file,counter)) - return TRUE; - else - return FALSE; - } - else - { - if ((_ricerca == 'C') || (_ricerca == 'F')) - { - if (preprocess_clifo(file,counter)) - return TRUE; - else - return FALSE; - } - } - return TRUE; -} - -void CG3200_application::set_page(int file, int counter) -{ - if (_ricerca == 'P') - set_page_pconti(file,counter); - else - if ((_ricerca == 'C') || (_ricerca == 'F')) - set_page_clifo(file,counter); -} - -void CG3200_application::set_page_pconti(int file, int counter) -{ - switch (file) - { - case LF_PCON: - reset_print(); - break; - - case LF_RMOV: - reset_print(); - if (_numcarat == 1) - fai_stampa132(); - else if (_numcarat == 2) - fai_stampa198(); - break; - default: - break; - } -} - -void CG3200_application::set_page_clifo(int file, int counter) -{ - switch (file) - { - case LF_CLIFO: - reset_print(); - break; - - case LF_RMOV: - reset_print(); - if (_numcarat == 1) - fai_stampa132(); - else if (_numcarat == 2) - fai_stampa198(); - break; - default: - break; - } -} - -print_action CG3200_application::postprocess_page(int file, int counter) -{ - if (_ricerca == 'P') - { - if (counter) - { - printer().formfeed(); - reset_print(); // per evitare che stampi di nuovo il totale prec. - return NEXT_PAGE; - } - - switch (file) - { - case LF_PCON: - if (_tipostampa == 3) - { - reset_print(); - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 2) - { - reset_print(); - if ((_totale_saldo != 0) && (_puoi_stampare)) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 1) - { - reset_print(); - if (_puoi_stampare) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - _stampa_progressivi_si = TRUE; - _prima_volta = TRUE; - return REPEAT_PAGE; - case LF_RMOV: - force_setpage(); - break; - default: - break; - } - } - else - { - if ((_ricerca == 'C') || (_ricerca == 'F')) - { - if (counter) - { - printer().formfeed(); - reset_print(); // per evitare che stampi di nuovo il totale prec. - return NEXT_PAGE; - } - - switch (file) - { - case LF_CLIFO: - if (_tipostampa == 3) - { - reset_print(); - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 2) - { - reset_print(); - if ((_totale_saldo != 0) && (_puoi_stampare)) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - else if (_tipostampa == 1) - { - reset_print(); - if (_puoi_stampare) - if (_numcarat == 1) - stampa_totali132(); - else if (_numcarat == 2) - stampa_totali198(); - if (_stampatotiva) - stampa_totaliiva(); - } - _stampa_progressivi_si = TRUE; - _prima_volta = TRUE; - return REPEAT_PAGE; - case LF_RMOV: - force_setpage(); - break; - default: - break; - } - } - } - return NEXT_PAGE; -} - -// Stampa dei totali documenti iva se richiesta - -void CG3200_application::stampa_totaliiva() -{ - - if (_stampatotiva) - for (int j = 0; j < _b.items(); j++) - { - TDociva& riga = (TDociva&)_b[j]; - set_row(7+j, "@0g%-50s",(const char*) riga._descrdoc); - set_row(7+j, "@61g%15.0r", &riga._totdociva); - } - _b.destroy(); -} - -// Ricerca della descrizione relativa al codice causale di MOV.dta -// sull'archivio CAUS.dta - -void CG3200_application::descrizione_causale() -{ - _caus->setkey(1); - _caus->curr().zero(); - _caus->curr().put(CAU_CODCAUS, _codcaus); - _caus->read(); - if (_caus->bad()) - _caus->zero(); - _descrcaus = _caus->curr().get(CAU_DESCR); -} - -// Ricerca sulla tabella dei tipi documento, la descrizione e la natura del -// documento, accedendovi tramite il tipo documento trovato su MOV.dta - -void CG3200_application::documenti_iva() -{ - TString dep; -// _tipodoc = _mov->curr().get(MOV_TIPODOC); - - _tabtpd->curr().zero(); - dep << format ("%2s",(const char*) _tipodoc); - _tabtpd->curr().put("CODTAB", (const char*) dep); - _tabtpd->read(); - _descrdociva = _tabtpd->curr().get("S0"); - _natdoc = atoi(_tabtpd->curr().get("I0")); -} - -void CG3200_application::ricerca_regiva() -{ - TString dep; - - _tabreg->curr().zero(); - dep << format("%04d", _annoes); - dep << format("%3s" , (const char*) _regiva); - _tabreg->curr().put("CODTAB", (const char*) dep); - _tabreg->read(); - _tipo = atoi(_tabreg->curr().get("I0")); -} - -CG3200_application::CG3200_application() -{ -} - -bool CG3200_application::set_print(int) -{ - KEY tasto; - int crt; - TLocalisamfile* fl; - TString data1,data2; - - _puoi_stampare = TRUE; - - tasto = _msk->run(); - - if (tasto == K_ENTER) - { - _data_ini = (_msk->get(F_DATAINI)); - _data_fine = (_msk->get(F_DATAFINE)); - - _annomsk = atol(_msk->get(F_ANNO)); - - if (_annomsk == 0) - if (_data_fine == botime) //Se data_fine e' vuota - _data_fine = eotime; - - if (_annomsk != 0) - { - _annoesmsk = _annomsk - 1; - data_fine_esercizio(); - if (_data_ini == botime) - _data_ini = _data_inizioese; - if (_data_fine == botime) - _data_fine = _data_finese; - } - - data1 = _data_ini.string(); - data2 = _data_fine.string(); - - _stampaprogre = (bool)(_msk->get(F_STAMPAPROGRE) == "X"); - _stampatotiva = (bool)(_msk->get(F_STAMPATOTIVA) == "X"); - _stampanum = atoi(_msk->get(F_STAMPANUM)); - _stampa_mov_prov = (bool)(_msk->get(F_STAMPAMOVPROV) == "X"); - int gruppoini = atoi(_msk->get(F_GRUPPOINI)); - int contoini = atoi(_msk->get(F_CONTOINI)); - long sottocontoini = atol(_msk->get(F_SOTTOCONTOINI)); - int gruppofine = atoi(_msk->get(F_GRUPPOFINE)); - int contofine = atoi(_msk->get(F_CONTOFINE)); - long sottocontofine = atol(_msk->get(F_SOTTOCONTOFINE)); - _competenza = (bool)(_msk->get(F_COMPESE) == "X"); - _tipostampa = atoi(_msk->get(F_TIPOSTAMPA)); - _numcarat = atoi(_msk->get(F_NUMCARAT)); - int formato = atoi(_msk->get(F_FORMATO)); - int nummast = atoi(_msk->get(F_NUMMAST)); - _ricerca = _msk->get(F_RICERCA)[0]; - _codice_ditta = get_firm(); - - ricerca_dati_ditta(); - -// Scelta del formato e del numero di mastrini per pagina 1 o 2 - - if (nummast == 1) - crt = formato; - else - crt = (formato / 2); - - printer().formlen(crt); - -//Crea il cursore su gruppo, conto e sottoconto del file RMOV - if (_ricerca == 'P') - { - reset_files(); //resetta l'albero di stampa - add_file(LF_PCON); - add_file(LF_RMOV,LF_PCON); - - select_cursor(_cur1); - fl = current_cursor()->file(LF_PCON); - TRectype da (fl->curr()); - TRectype a (fl->curr()); - - da.zero(); - a.zero(); - - da.put(PCN_GRUPPO,gruppoini); - da.put(PCN_CONTO,contoini); - da.put(PCN_SOTTOCONTO,sottocontoini); - - a.put(PCN_GRUPPO,gruppofine); - a.put(PCN_CONTO,contofine); - a.put(PCN_SOTTOCONTO,sottocontofine); - - current_cursor()->setregion(da, a); - } - else - { - if (_ricerca == 'C') - select_cursor(_cur2); - if (_ricerca == 'F') - select_cursor(_cur3); - - reset_files(); - add_file(LF_CLIFO); - add_file(LF_RMOV,LF_CLIFO); - - fl = current_cursor()->file(LF_CLIFO); - TRectype da (fl->curr()); - TRectype a (fl->curr()); - - da.zero(); - a.zero(); - - da.put(CLI_TIPOCF,_ricerca); - da.put(CLI_GRUPPO,gruppoini); - da.put(CLI_CONTO,contoini); - da.put(CLI_CODCF,sottocontoini); - - a.put(CLI_TIPOCF,_ricerca); - a.put(CLI_GRUPPO,gruppofine); - a.put(CLI_CONTO,contofine); - a.put(CLI_CODCF,sottocontofine); - - current_cursor()->setregion(da, a); - } - - if (_stampatotiva) - _b.destroy(); - - if (_competenza) - if (_data_fine == _data_finese) - { - TDate datafinesucc = _data_fine; - datafinesucc.addyear(1); - data_fine_esercizio_succ(); - if (datafinesucc == _data_finesesucc) - _data_fine = datafinesucc; - } - - switch (_tipostampa) - { - case 1: _totale_saldo = 1; - break; - case 2: _totale_saldo = 0; - break; - case 3: _totale_saldo = 1; - break; - default: break; - } - _prima_volta = TRUE; - - _stampa_progressivi_si = TRUE; - - enable_print_menu(); - - enable_link("Collegamento prima nota: ", 'r'); - - return TRUE; - } - else - return FALSE; -} - -void CG3200_application::data_fine_esercizio() -{ - TString dep; - - _tabesc->curr().zero(); - dep << format ("%04d",_annomsk); - _tabesc->curr().put("CODTAB", (const char*) dep); - _tabesc->read(); - _data_finese = _tabesc->curr().get("D1"); - _data_inizioese = _tabesc->curr().get("D0"); -} - -void CG3200_application::data_fine_esercizio_succ() -{ - TString dep; - - _annomsksucc = _annomsk + 1; - _tabesc->curr().zero(); - dep << format ("%04d",_annomsksucc); - _tabesc->curr().put("CODTAB", (const char*) dep); - _tabesc->read(); - _data_finesesucc = _tabesc->curr().get("D1"); -} - -void CG3200_application::preprocess_header() -{ - if (_tipostampa == 3) - crea_intestazione(); - else - if (_tipostampa == 2) - { - if ((_totale_saldo != 0) && (_puoi_stampare)) - crea_intestazione(); - } - else if (_tipostampa == 1) - if (_puoi_stampare) - crea_intestazione(); - -} - - -void CG3200_application::ricerca_dati_ditta() -{ - long app; - - _nditte->setkey(1); -// _codice_ditta << get_firm(); - _nditte->curr().zero(); - _nditte->curr().put(NDT_CODDITTA,_codice_ditta); - _nditte->read(); - app=_nditte->curr().get_long(NDT_CODDITTA); - _ragsoc=_nditte->curr().get(NDT_RAGSOC); - - _unloc->setkey(1); - _unloc->curr().zero(); - _unloc->curr().put(ULC_CODDITTA,app); - _unloc->curr().put(ULC_CODULC,"1"); - _unloc->read(); - _indulc=_unloc->curr().get(ULC_INDULC); - _civulc=_unloc->curr().get(ULC_CIVULC); - _capulc=_unloc->curr().get(ULC_CAPULC); - _comulc=_unloc->curr().get(ULC_COMULC); - - _comuni->setkey(1); - _comuni->curr().zero(); - _comuni->curr().put(COM_COM,_comulc); - _comuni->read(); - _com=_comuni->curr().get(COM_DENCOM); - _prov=_comuni->curr().get(COM_PROVCOM); - -} - -// Crea l'intestazione per la stampa a 132 e a 198 caratteri -void CG3200_application::crea_intestazione() -{ - TString sep(132),sep1(198); - - reset_header(); - - if (_numcarat == 1) - { - sep << "Pag. @#"; - sep.right_just(132); - set_header(1,(const char*) sep); - sep =""; - set_header(2,"@1g%s",(const char*) sep); - } - else if (_numcarat == 2) - { - sep1 << "Pagina @#"; - sep1.right_just(198); - set_header(1,(const char*) sep1); - sep1 =""; - set_header(2,"@1g%s",(const char*) sep1); - } - - set_header (1, "@0gDITTA@6g%5d", _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%-18s", (const char*) _com); - set_header (1, "@122g%-3s", (const char*) _prov); - - set_header (3, "@0gSottoconto@12g%d", _gruppo); - set_header (3, "@16g%d", _conto); - set_header (3, "@20g%d", _sottoc); - - TString tipocf = (_msk->get(F_RICERCA)); - if (tipocf == "C") - _tipocf = 1; - else if (tipocf == "F") - _tipocf = 2; - else if (tipocf == "P") - _tipocf = 3; - switch (_tipocf) - { - case 1: ricerca_clifo(); - break; - case 2: ricerca_clifo(); - break; - case 3: ricerca_gruppo(); - break; - default: break; - } - - if (_numcarat == 1) - { - sep.fill('-'); //Stampa 132 - (sep(132)) - set_header (6, (const char *) sep); - set_header (7,"Data@11gNumero@19gDocumento@117gContro@130gAn"); - set_header (8,"Registr.@11gregistr@19gData@30gNumero@38gCod.Causale@61gDescrizione@90gDare@106gAvere@117gPartita@130gCo"); - sep.fill('-'); - set_header (9, (const char *) sep); - } - else if (_numcarat == 2) - { - sep1.fill('-'); //Stampa 198 - (sep1(198)) - set_header (6,"@1g%s", (const char *) sep1); - set_header (7,"Data@11gNumero@19gData@30gNumero@172gContro@183gA@185gReg@193gNumero"); - set_header (8,"Registr.@11gregistr.@19gDocumento@38gCod.Causale@68gDescrizione@108gDare@124gAvere@136gSaldo progress.@154gSaldo movim.@172gPartita@183gC@185gIva@189gProtocollo"); - sep1.fill('-'); - set_header (9,"@1g%s", (const char *) sep1); - } - if (_stampa_progressivi_si) - { - calcola_progressivi(); - _riporto_dare = _progredare; - _riporto_avere = _progreavere; - _stampa_progressivi_si = FALSE; - } - else - { - _riporto_dare += _riporto_parziale_dare; - _riporto_avere += _riporto_parziale_avere; - if (_numcarat == 1) - { - TString string = _riporto_dare.string("###############"); - set_header (10,"@32gA RIPORTO@85g%15s",(const char*) string); - string = _riporto_avere.string("###############"); - set_header (10,"@101g%15s",(const char*) string); - } - if (_numcarat == 2) - { - TString string = _riporto_dare.string("###############"); - set_header (10,"@32gA RIPORTO@102g%15s",(const char*) string); - string = _riporto_avere.string("###############"); - set_header (10,"@119g%15s",(const char*) string); - } - _riporto_parziale_dare = 0; - _riporto_parziale_avere = 0; - } - if (_numcarat == 1) - { - sep =""; - set_header(11,"@1g%s",(const char*) sep); - } - else if (_numcarat == 2) - { - sep1 =""; - set_header(11,"@1g%s",(const char*) sep1); - } -} - -void CG3200_application::calcola_progressivi_al() -{ - long record,sottoc,annoes; - int gruppo,conto; - TDate datareg; - TLocalisamfile* rmov; - - rmov = current_cursor()->file(LF_RMOV); - - if (current_cursor()->is_first_match(LF_RMOV)) - { - record = rmov->recno(); - rmov->zero(); - rmov->put(RMV_GRUPPO, _gruppo); - rmov->put(RMV_CONTO, _conto); - rmov->put(RMV_SOTTOCONTO, _sottoc); - for (rmov->read(); ;rmov->next()) - { - annoes = rmov->get_long(RMV_ANNOES); - datareg = rmov->get_date(RMV_DATAREG); - gruppo = rmov->get_int(RMV_GRUPPO); - conto = rmov->get_int(RMV_CONTO); - sottoc = rmov->get_long(RMV_SOTTOCONTO); - if ((gruppo != _gruppo)&&(conto != _conto)&&(sottoc != _sottoc)) - break; - else if ((annoes==_annomsk)&&(_datareg < _data_ini)) //Legge movimenti con data < data iniziale - if (_sezione == "D") - _totale_prima_dare += _importo; - else if (_sezione == "A") - _totale_prima_avere += _importo; - } - rmov->readat(record); - } -} - -void CG3200_application::calcola_progressivi() -{ - TLocalisamfile pconti(LF_PCON); - TLocalisamfile saldi (LF_SALDI); - real pdaresca,paveresca,pdarescap,paverescap; - real progdare_attuale,progavere_attuale,progdare_prec,progavere_prec; - real saldo,progredare_eseprec,progreavere_eseprec,pdarep,paverep; - int indbil; - char salini; - TRectype record(saldi.curr()); - - saldo = 0.00; - pdarep = 0.00; - paverep = 0.00; - pdaresca = 0.00; - paveresca = 0.00; - pdarescap = 0.00; - paverescap = 0.00; -// Ricerca sull'archivio saldi dei record con gruppo,conto,sottoconto -// uguali a quelli di rmov per il calcolo dei progressivi precedenti - - record.zero(); - record.put(SLD_GRUPPO, _gruppo); - record.put(SLD_CONTO, _conto); - record.put(SLD_SOTTOCONTO, _sottoc); - - if (_ricerca == 'P') - indbil = atoi (current_cursor()->file(LF_PCON)->get(PCN_INDBIL)); - else - { - if ((_ricerca == 'C') || (_ricerca == 'F')) - { - pconti.setkey(1); - pconti.zero(); - pconti.put(PCN_GRUPPO, _gruppo); - pconti.put(PCN_CONTO , _conto); - pconti.read(); - if (pconti.good()) - indbil = atoi (pconti.get(PCN_INDBIL)); - else - indbil = 0; - } - } - - saldi.setkey(2); - - saldi.zero(); - saldi.put(SLD_GRUPPO, _gruppo); - saldi.put(SLD_CONTO, _conto); - saldi.put(SLD_SOTTOCONTO, _sottoc); - - for ( saldi.read(); - ((saldi.curr()==record) && !saldi.eof()); - saldi.next()) - { - long annoes_saldi = saldi.curr().get_long(SLD_ANNOES); - -//Calcola i progressivi dell'esercizio attuale - - if (annoes_saldi == _annomsk) - { - pdaresca = saldi.curr().get_real(SLD_PDARESCA); - paveresca = saldi.curr().get_real(SLD_PAVERESCA); - saldo = saldi.curr().get_real(SLD_SALDO); - salini = saldi.curr().get(SLD_FLAGSALINI)[0]; - } - -//Calcola i progressivi dell'esercizio precedente - - if (annoes_saldi == _annoesmsk) - { - pdarescap = saldi.curr().get_real(SLD_PDARESCA); - pdarep = saldi.curr().get_real(SLD_PDARE); - paverescap = saldi.curr().get_real(SLD_PAVERESCA); - paverep = saldi.curr().get_real(SLD_PAVERE); - -// Se il saldo dell'esercizio attuale e' diverso da 0 allora significa che -// quello corrisponde al saldo finale dell'esercizio precedente. Per ottenere -// i progressivi dell'esercizio precedente devo a questo punto sommare i -// progressivi dell'esercizio e i progressivi di quelli scaricati, tenendo -// conto del flag salini per sapere se il saldo e' dare oppure avere. - - if (saldo != 0) - { - if (salini == 'D') - { - progredare_eseprec = saldo + pdarescap + pdarep; - progreavere_eseprec = paverescap + paverep; - } - else if (salini == 'A') - { - progredare_eseprec = pdarescap + pdarep; - progreavere_eseprec = saldo + paverescap + paverep; - } - } - else - { - -//Se il saldo dell'esercizio attuale non e' diverso da zero, allora il saldo -// finale dell'esercizio precedente devo calcolarmelo tenendo conto dell'indbil - - if ((indbil == 1) || (indbil == 2) || (indbil == 5)) - { - saldo = _sld.saldofin_esprec(_annomsk,_gruppo,_conto,_sottoc); - - if (saldo.sign() > 0) - { - progredare_eseprec = saldo + pdarescap + pdarep; - progreavere_eseprec = paverescap + paverep; - } - else if (saldo.sign() < 0) - { - progredare_eseprec = pdarescap + pdarep; - progreavere_eseprec = saldo + paverescap + paverep; - } - } - } - } - -//Calcolo dei progressivi precedenti: somma di tutti quei movimenti di rmov -//che hanno la data di registrazione inferiore alla data di inizio stampa, -//dei progressivi dell'anno esercizio precedente, e dei progressivi dei -//movimenti scaricati dell'esercizio attuale. - - calcola_progressivi_al(); - - _progredare = pdaresca + progredare_eseprec + _totale_prima_dare; - _progreavere = paveresca + progreavere_eseprec + _totale_prima_avere; - _saldo_progre_prec = _progredare - _progreavere; - } // FOR - - if (_numcarat == 1) - { - TString string = _saldo_progre_prec.string("###############"); - set_header (10,"@32gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); - string = _progredare.string("###############"); - set_header (10,"@85g%15s",(const char*) string); - string = _progreavere.string("###############"); - set_header (10,"@101g%15s",(const char*) string); - } - - if (_numcarat == 2) - { - TString string = _progredare.string("###############"); - set_header (10,"@32gPROGRESSIVI PRECEDENTI@102g%15s",(const char*)string); - string = _progreavere.string("###############"); - set_header (10,"@119g%15s",(const char*) string); - } -//Calcolo dei progressivi al - - -//Se sulla maschera e' stato selezionato il controllo competenza esercizio -//Sommo i progressivi dell'esercizio precedente e quelli dell'esercizio attuale -//altrimenti solo quelli dell'esercizio attuale - - if (_competenza) - { - _totprogre_dare_al = progdare_attuale + progdare_prec; - _totprogre_avere_al = progavere_attuale + progavere_prec; - } - else - { - _totprogre_dare_al = progdare_attuale; - _totprogre_avere_al = progavere_attuale; - } -} - -// Se la ricerca selezionata nella maschera e' per clienti, oppure fornitori, // allora ricerco su CLIFO i relativi dati, e su PCON il relativo gruppo,conto,// sottoconto e IV direttiva CEE - -void CG3200_application::ricerca_clifo() -{ - TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; - TLocalisamfile pconti(LF_PCON); - TString dataini,datafine; - int numrivd; - - ragsoc = (current_cursor()->curr(LF_CLIFO).get(CLI_RAGSOC)); - paiv = (current_cursor()->curr(LF_CLIFO).get(CLI_PAIV)); - cofi = (current_cursor()->curr(LF_CLIFO).get(CLI_COFI)); - indcf = (current_cursor()->curr(LF_CLIFO).get(CLI_INDCF)); - capcf = (current_cursor()->curr(LF_CLIFO).get(CLI_CAPCF)); - ptel = (current_cursor()->curr(LF_CLIFO).get(CLI_PTEL)); - tel = (current_cursor()->curr(LF_CLIFO).get(CLI_TEL)); - statocf = (current_cursor()->curr(LF_CLIFO).get(CLI_STATOCF)); - comcf = (current_cursor()->curr(LF_CLIFO).get(CLI_COMCF)); - - _comuni->setkey(1); - _comuni->curr().zero(); - _comuni->curr().put(COM_STATO, statocf); - _comuni->curr().put(COM_COM, comcf); - _comuni->read(); - dencom = _comuni->curr().get(COM_DENCOM); - provcom = _comuni->curr().get(COM_PROVCOM); - - pconti.setkey(1); - pconti.curr().zero(); - pconti.curr().put(PCN_GRUPPO, _gruppo); - pconti.curr().put(PCN_CONTO, _conto); - pconti.curr().put(PCN_SOTTOCONTO, _sottoc); - pconti.read(); - _sezivd = pconti.curr().get(PCN_SEZIVD); - _lettivd = pconti.curr().get(PCN_LETTIVD); - numrivd = atoi(pconti.curr().get(PCN_NUMRIVD)); - _numrivd = itor(numrivd); - _numivd = atoi(pconti.curr().get(PCN_NUMIVD)); - - _tabivd->curr().zero(); - dep << format ("%1s%1s%-8d%2d",(const char*)_sezivd,(const char*)_lettivd,numrivd,_numivd); - _tabivd->curr().put("CODTAB", (const char*) dep); - _tabivd->read(); - if (_tabivd->bad()) - _tabivd->zero(); - TString descriz = _tabivd->curr().get("S0"); - - if (_ricerca == 'P') - { - set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); - set_header(3,"@59g%-30s",(const char*) descrizione_conto()); - } - else - if ((_ricerca == 'C')||(_ricerca == 'F')) - { - set_header(3,"@27g%-30s",(const char*) descrizione_gruppo_clifo()); - set_header(3,"@59g%-30s",(const char*) descrizione_conto_clifo()); - } - set_header(3, "@91g%-30s",(const char*) ragsoc); - set_header(4, "@1gClasse@8g%1s",(const char*) _lettivd); - set_header(4, "@10g%8s",(const char*) _numrivd); - if (_numivd != 0) - set_header(4, "@19g%2d", _numivd); - set_header(4,"@23g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - set_header (5, "@1gPeriodo@10g%s", (const char*) dataini); - if (_data_fine != eotime) - { - datafine = _data_fine.string(); - set_header (5, "@22g%s", (const char*) datafine); - } - set_header (5, "@34g%-11s",(const char*) paiv); - set_header (5, "@46g%-16s",(const char*) cofi); - set_header (5, "@63g%-25s",(const char*) indcf); - set_header (5, "@89g%-5s",(const char*) capcf); - set_header (5, "@95g%-30s",(const char*) dencom); - set_header (5,"@126g%-5s",(const char*) provcom); - - if (_numcarat == 2) - { - set_header (5,"@134g%-4s",(const char*) ptel); - set_header (5,"@138g/@139g%-10s",(const char*) tel); - } -} - -// Se la ricerca selezionata sulla maschera e' per gruppo, conto, sottoconto -// ricerca i corrispondenti su PCON, con relativa IV direttiva CEE - -void CG3200_application::ricerca_gruppo() -{ - TString descr,descriz,dep; - int numrivd; - TString dataini,datafine; - - descr = (current_cursor()->curr(LF_PCON).get(PCN_DESCR)); - _sezivd = (current_cursor()->curr(LF_PCON).get(PCN_SEZIVD)); - _lettivd = (current_cursor()->curr(LF_PCON).get(PCN_LETTIVD)); - numrivd = atoi(current_cursor()->curr(LF_PCON).get(PCN_NUMRIVD)); - _numrivd = itor(numrivd); - _numivd = atoi(current_cursor()->curr(LF_PCON).get(PCN_NUMIVD)); - - _tabivd->curr().zero(); - dep << format ("%1s%1s%-8d%2d",(const char*)_sezivd,(const char*)_lettivd, numrivd,_numivd); - _tabivd->curr().put("CODTAB", (const char*) dep); - _tabivd->read(); - if (_tabivd->bad()) - _tabivd->zero(); - descriz = _tabivd->curr().get("S0"); - - if (_ricerca == 'P') - { - set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); - set_header(3,"@59g%-30s",(const char*) descrizione_conto()); - } - else - if ((_ricerca == 'C')||(_ricerca == 'F')) - { - set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); - set_header(3,"@59g%-30s",(const char*) descrizione_conto()); - } - - set_header(3,"@91g%-30s",(const char*) descr); - set_header(4, "@0gClasse@12g%1s",(const char*) _lettivd); - set_header(4, "@14g%8s",(const char*) _numrivd); - if (_numivd != 0) - set_header(4, "@23g%d", _numivd); - set_header(4,"@27g%-50s",(const char*) descriz); - - dataini = _data_ini.string(); - set_header (5, "@0gPeriodo@12g%s", (const char*) dataini); - if (_data_fine != eotime) - { - datafine = _data_fine.string(); - set_header (5, "@24g%s", (const char*) datafine); - } -} - -//Ricerca la descrizione relativa al gruppo da stampare - -const char* CG3200_application::descrizione_gruppo() -{ - TLocalisamfile* pconti; - long record; - - pconti = current_cursor()->file(LF_PCON); - record = pconti->recno(); - pconti->curr().zero(); - pconti->curr().put(PCN_GRUPPO,_gruppo); - pconti->read(); - tmp = pconti->curr().get(PCN_DESCR); - pconti->readat(record); - return (tmp); -} - -// Ricerca la descrizione relativa al conto da stampare - -const char* CG3200_application::descrizione_conto() -{ - TLocalisamfile* pconti; - long record; - - pconti = current_cursor()->file(LF_PCON); - record = pconti->recno(); - pconti->curr().zero(); - pconti->curr().put(PCN_GRUPPO,_gruppo); - pconti->curr().put(PCN_CONTO,_conto); - pconti->read(); - tmp = pconti->curr().get(PCN_DESCR); - pconti->readat(record); - return (tmp); -} - -//Ricerca la descrizione relativa al gruppo da stampare - -const char* CG3200_application::descrizione_gruppo_clifo() -{ - TLocalisamfile pconti(LF_PCON); - - pconti.curr().zero(); - pconti.curr().put(PCN_GRUPPO,_gruppo); - pconti.read(); - tmp = pconti.curr().get(PCN_DESCR); - return (tmp); -} - -// Ricerca la descrizione relativa al conto da stampare - -const char* CG3200_application::descrizione_conto_clifo() -{ - TLocalisamfile pconti(LF_PCON); - - pconti.curr().zero(); - pconti.curr().put(PCN_GRUPPO,_gruppo); - pconti.curr().put(PCN_CONTO,_conto); - pconti.read(); - tmp = pconti.curr().get(PCN_DESCR); - return (tmp); -} - -void CG3200_application::user_create() -{ - TToken_string exp,exp1; - - _rel = new TRelation (LF_PCON); - - exp.add("GRUPPO=GRUPPO"); - exp.add("CONTO=CONTO"); - exp.add("SOTTOCONTO=SOTTOCONTO"); - _rel->add(LF_RMOV,exp,2,LF_PCON); - - _cur1=add_cursor(new TCursor(_rel,"((CONTO!=\"\")&&(SOTTOCONTO!=\"\"))",1)); - - _rel_clifo = new TRelation (LF_CLIFO); - - exp1.add("GRUPPO=GRUPPO"); - exp1.add("CONTO=CONTO"); - exp1.add("SOTTOCONTO=CODCF"); - _rel_clifo->add(LF_RMOV,exp1,2,LF_CLIFO); - - _cur2=add_cursor(new TCursor(_rel_clifo,"TIPOCF=\"C\"",3)); - - _cur3=add_cursor(new TCursor(_rel_clifo,"TIPOCF=\"F\"",3)); - - _nditte = new TLocalisamfile (LF_NDITTE); - _unloc = new TLocalisamfile (LF_UNLOC); - _comuni = new TLocalisamfile (LF_COMUNI); - _mov = new TLocalisamfile (LF_MOV); - _clifo = new TLocalisamfile (LF_CLIFO); - _caus = new TLocalisamfile (LF_CAUSALI); - _tabivd = new TTable (TAB_IVD); - _tabtpd = new TTable (TAB_TPD); - _tabreg = new TTable (TAB_REG); - _tabesc = new TTable (TAB_ESC); - - _msk = new TMask("cg3200a"); - _msk->set_handler(F_ANNO, our_handler); - - _inizio_stampa = TRUE; -} - -void CG3200_application::user_destroy() -{ - delete _msk; - delete _rel; - delete _rel_clifo; - delete _mov; - delete _nditte; - delete _unloc; - delete _comuni; - delete _clifo; - delete _caus; - delete _tabivd; - delete _tabtpd; - delete _tabreg; - delete _tabesc; - -} - -int cg3200(int argc, char* argv[]) -{ - - CG3200_application a; - - a.run(argc, argv, "Stampa Mastrini"); - - return 0; -} - - - - - +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cg3.h" +#include "cg3200.h" +#include "cg3401.h" +#include "cglib.h" + +const MAXSTR = 128; +static char __tmp [MAXSTR]; +static TFixed_string tmp (__tmp, MAXSTR); + +class CG3200_application : public TPrintapp +{ + TDociva_array _b; + TRelation* _rel; + TRelation* _rel_clifo; + TMask* _msk; + TTable* _tabivd, * _tabtpd, * _tabreg, * _tabesc; + TLocalisamfile* _mov; + TLocalisamfile* _nditte; + TLocalisamfile* _unloc; + TLocalisamfile* _comuni; + TLocalisamfile* _clifo; + TLocalisamfile* _caus; + Saldo _sld; + + TDate _data_ini,_data_fine,_data_finese,_data_finesesucc,_ultima_data_reg; + TDate _datareg,_datadoc,_data_inizioese; + int _cur1,_cur2,_cur3,_gruppo,_conto,_numcarat,_stampanum,_numivd; + int _numrig,_natdoc,_tipo,_tipostampa; + real _progredare,_progreavere,_totprogre_dare_al,_totprogre_avere_al; + real _totprogre_dare,_totprogre_avere,_importo; + real _riporto_dare,_riporto_avere,_riporto_parziale_dare,_riporto_parziale_avere; + real _totale_periodo_dare,_totale_periodo_avere,_totale_prima_dare,_totale_prima_avere; + real _saldo_periodo,_saldo_progre,_saldo_progre_al,_saldo_progre_prec; + real _saldo_movimenti,_saldo_progressivi,_totale_saldo; + TString _ragsoc,_indulc,_civulc,_capulc,_com,_prov,_comulc; + long _codice_ditta; + TString _sezivd,_lettivd,_tipodoc,_codcaus,_descrcaus,_descrdociva,_regiva; + TString _descrizione,_sezione,_numdoc,_descrizionemov,_numrivd; + TString _dataregs, _datadocs,_gruppocontr,_contocontr,_sottocontocontr; + + bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov; + + long _annomsk,_annoesmsk,_sottoc,_numreg,_annoes; + long _annomsksucc,_numgio,_protiva; + bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare; + int _tipocf; + char _ricerca; + + TDate _dataregrmov; + int _gruppof,_contof; + long _sottocf; + TString _dataregrmovstring,_importo_str,_saldo_movimenti_str,_saldo_progressivi_str; + +protected: + virtual void user_create() ; + virtual void user_destroy(); + virtual bool set_print(int m); + + virtual bool preprocess_page (int,int); + virtual print_action postprocess_page (int,int); + virtual void preprocess_header(); + virtual void set_page(int,int); + virtual void process_link(int id, const char* txt); + +public: + bool preprocess_pconti(int file, int counter); + bool preprocess_clifo(int file, int counter); + void set_page_pconti(int file, int counter); + void set_page_clifo(int file, int counter); + void ricerca_clifo(); + void ricerca_gruppo(); + void calcola_progressivi(); + void calcola_progressivi_al(); + void documenti_iva(); + void ricerca_regiva(); + void descrizione_causale(); + void saldi_zero(); + void crea_intestazione(); + void fai_stampa132(); + void fai_stampa198(); + void stampa_totali132(); + void stampa_totali198(); + void stampa_totaliiva(); + void data_fine_esercizio(); + void data_fine_esercizio_succ(); + const char* descrizione_gruppo(); + const char* descrizione_conto(); + const char* descrizione_gruppo_clifo(); + const char* descrizione_conto_clifo(); + bool almeno_un_record(); + void ricerca_dati_ditta(); + + CG3200_application(); +}; + +void CG3200_application::process_link(int id, const char* txt) +{ + TToken_string ss(10); + + ss.add("1"); + ss.add(txt); + const TString app("cg2"); + TMessage fs(cmd2name(app,""), MSG_LN, ss); + TMailbox m; + m.send(fs); + + TExternal_app pn(app); + + if (pn.run()) beep(); +} + +//Questa funzione restituisce vero se il record su piano dei conti ha almeno un +//record figlio (e che soddisfa la condizione riguardante la data di registr.). +//Viene successivamente utilizzata per stampare l'intestazione (e i totali) +//oppure no + +bool CG3200_application::almeno_un_record() +{ + bool trovato=FALSE; + long record,sottoc; + int gruppo,conto; + TDate datareg; + TLocalisamfile* rmov; + + rmov = current_cursor()->file(LF_RMOV); + + if (current_cursor()->is_first_match(LF_RMOV)) + { + record = rmov->recno(); + rmov->zero(); + rmov->put(RMV_GRUPPO,_gruppo); + rmov->put(RMV_CONTO,_conto); + rmov->put(RMV_SOTTOCONTO,_sottoc); + for (rmov->read(); ;rmov->next()) + { + long annoes = rmov->get_long(RMV_ANNOES); + datareg = rmov->get_date(RMV_DATAREG); + gruppo = rmov->get_int(RMV_GRUPPO); + conto = rmov->get_int(RMV_CONTO); + sottoc = rmov->get_long(RMV_SOTTOCONTO); + if ((gruppo != _gruppo)&&(conto != _conto)&&(sottoc != _sottoc)) + break; + else + if (((annoes==_annomsk)||(_annomsk==0))&&((datareg>=_data_ini)&&(datareg<=_data_fine))) + { + trovato = TRUE; + break; + } + } + rmov->readat(record); + } + return trovato; +} + +HIDDEN bool our_handler(TMask_field& field, KEY key) +{ + if (key == K_TAB) + { + const long anno = atol(field.get()); + field.mask().enable(F_COMPESE); + } + return TRUE; +} + +void CG3200_application::saldi_zero() +{ + TLocalisamfile* rmov; + real saldo_dare, saldo_avere; + long record; + + saldo_dare = saldo_avere = 0; + + rmov = current_cursor()->file(LF_RMOV); + if (current_cursor()->is_first_match(LF_RMOV)) + { + record = rmov->recno(); + + while (!rmov->eof()) + { + rmov->read(); + // char sezione = *(_rmov->curr().get(RMV_SEZIONE)); + TString sezione = rmov->curr().get(RMV_SEZIONE); + real importo = rmov->curr().get_real(RMV_IMPORTO); + int gruppo = atoi(rmov->get(RMV_GRUPPO)); + int conto = atoi(rmov->get(RMV_CONTO)); + long sottoc = atol(rmov->get(RMV_SOTTOCONTO)); + + if ((gruppo == _gruppo)&&(conto == _conto)&&(sottoc == _sottoc)) + if (sezione == "D") + saldo_dare += importo; + else if (sezione == "A") + saldo_avere += importo; + rmov->next(); + } + rmov->readat(record); + } + _totale_saldo = saldo_dare - saldo_avere; +} + +void CG3200_application::fai_stampa132() +{ + set_row (1,"@0g#t", &_dataregs); + if (_stampanum == 1) + set_row (1,"@11g#7d", &_numreg); + else if (_stampanum == 2) + { + set_row (1,"@11g#7d", &_numgio); + } + set_row (1,"@19g#t", &_datadocs); + set_row (1,"@30g#7t", &_numdoc); + set_row (1,"@38g#3t", &_codcaus); + + _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); + if (_sezione == "D") + set_row (1,"@85g#t", &_importo_str); + else if (_sezione == "A") + set_row (1,"@101g#t", &_importo_str); + + set_row (1,"@117g#3t", &_gruppocontr); + set_row (1,"@120g#3t", &_contocontr); + set_row (1,"@123g#6t", &_sottocontocontr); +} + +void CG3200_application::fai_stampa198() +{ + TLocalisamfile* rmov; + long rec; + TDate datasucc; + TString datasuccstring,dataregrmovstring; + int gruppof,contof; + long sottocf; + + set_row (1,"@0g#t", &_dataregs); + if (_stampanum == 1) + set_row (1,"@11g$[r]#7d$[n]", &_numreg); + else if (_stampanum == 2) + set_row (1,"@11g#7d", &_numgio); + set_row (1,"@19g#t", &_datadocs); + set_row (1,"@30g#7t", &_numdoc); + set_row (1,"@38g#3t", &_codcaus); + + _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); + if (_sezione == "D") + set_row (1,"@102g#t", &_importo_str); + else if (_sezione == "A") + set_row (1,"@119g#t", &_importo_str); + + // Stampa saldo movimenti + + set_row (1,"@153g#t", &_saldo_movimenti_str); + + set_row (1,"@169g#3t", &_gruppocontr); + set_row (1,"@172g#3t", &_contocontr); + set_row (1,"@175g#6t", &_sottocontocontr); + + if (_tipo < 3) + set_row (1,"@185g#t" , &_regiva); + set_row (1,"@194g#5d", &_protiva); + _dataregrmov = current_cursor()->curr(LF_RMOV).get_date(RMV_DATAREG); + dataregrmovstring=_dataregrmov.string(); + + //Gestire la stampa di saldo_progressivi nella postprocess_page di RMOV + + rmov = current_cursor()->file(LF_RMOV); + rec = rmov->recno(); + rmov->next(); + gruppof = rmov->get_int(RMV_GRUPPO); + contof = rmov->get_int(RMV_CONTO); + sottocf = rmov->get_int(RMV_SOTTOCONTO); + datasucc = rmov->get_date(RMV_DATAREG); + datasuccstring=datasucc.string(); + if (((gruppof!=_gruppo)||(contof!=_conto)||(sottocf!=_sottoc))||(rmov->eof())) + datasucc = (""); + if (datasucc != _dataregrmov) + set_row (1,"@136g#t", &_saldo_progressivi_str); + rmov->readat(rec); +} + +void CG3200_application::stampa_totali132() +{ + TString sep(132); + + sep.fill('-'); //Stampa 132 - (sep(132)) + set_row(2,"@0g%s", (const char *) sep); + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + _saldo_periodo = _totale_periodo_dare - _totale_periodo_avere; + _saldo_progre = _totprogre_dare - _totprogre_avere; + _saldo_progre_al = _totprogre_dare_al - _totprogre_avere_al; + set_row (3,"@32gTOTALI PERIODO@69g%15.0r", &_saldo_periodo); + set_row (3,"@85g%15.0r", &_totale_periodo_dare); + set_row (3,"@101g%15.0r", &_totale_periodo_avere); + set_row (4,"@32gTOTALI PROGRESSIVI@69g%15.0r", &_saldo_progre); + set_row (4,"@85g%15.0r", &_totprogre_dare); + set_row (4,"@101g%15.0r", &_totprogre_avere); + if (_stampaprogre) //Progressivi attuali + { + set_row (5,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); + set_row (5,"@69g%15.0r", &_saldo_progre_al); + set_row (5,"@85g%15.0r", &_totprogre_dare_al); + set_row (5,"@101g%r", &_totprogre_avere_al); + } +} + +void CG3200_application::stampa_totali198() +{ + TString sep(198); + + sep.fill('-'); //Stampa 132 - (sep(132)) + set_row(2,"@0g%s", (const char *) sep); + + _totprogre_dare=_progredare+_totale_periodo_dare; + _totprogre_avere=_progreavere+_totale_periodo_avere; + set_row (3,"@32gTOTALI PERIODO@102g%15.0r", &_totale_periodo_dare); + set_row (3,"@119g%15.0r", &_totale_periodo_avere); + set_row (3,"@153g%15.0r", &_saldo_movimenti); + set_row (4,"@32gTOTALI PROGRESSIVI@102g%15.0r", &_totprogre_dare); + set_row (4,"@119g%15.0r", &_totprogre_avere); + set_row (4,"@136g%15.0r", &_saldo_progressivi); + if (_stampaprogre) //Progressivi attuali + { + set_row(5,"@32gTOTALI PROGRESSIVI AL@55g%s",(const char*)_ultima_data_reg.string()); + set_row (5,"@102g%15.0r", &_totprogre_dare_al); + set_row (5,"@119g%15.0r", &_totprogre_avere_al); + set_row (5,"@136g%15.0r", &_saldo_progressivi); + } +} + +bool CG3200_application::preprocess_pconti(int file, int counter) +{ + TLocalisamfile* rmov; + long record; + TString provvis = ""; + + if (counter) + return TRUE; + + switch (file) + { + case LF_PCON: + // Usati in crea_intestazione() + _gruppo = atoi(current_cursor()->curr(LF_PCON).get(PCN_GRUPPO)); + _conto = atoi(current_cursor()->curr(LF_PCON).get(PCN_CONTO)); + _sottoc = atol(current_cursor()->curr(LF_PCON).get(PCN_SOTTOCONTO)); + + _saldo_periodo =0; + _totale_periodo_dare =0; + _totale_periodo_avere =0; + _saldo_progre =0; + _totprogre_dare =0; + _totprogre_avere =0; + _saldo_progre_al =0; + _totprogre_dare_al =0; + _totprogre_avere_al =0; + _progredare =0; + _progreavere =0; + _totale_prima_dare =0; + _totale_prima_avere =0; + _saldo_movimenti =0; + _saldo_progressivi =0; + _saldo_progre_prec =0; + if (_tipostampa == 2) + saldi_zero(); + else + _totale_saldo = 1; + + if ((_tipostampa == 1) || (_tipostampa == 2)) + if ((almeno_un_record()) && (_totale_saldo != 0)) + _puoi_stampare = TRUE; + else + { + _puoi_stampare = FALSE; + return FALSE; + } + break; + + case LF_RMOV: + { + // Ricerca la contropartita di quel movimento + + _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); + + int rcontr = atoi(current_cursor()->curr(LF_RMOV).get(RMV_RCONTR)); + rmov = current_cursor()->file(LF_RMOV); + record = rmov->recno(); + rmov->setkey(1); + rmov->curr().zero(); + rmov->curr().put(RMV_NUMREG,_numreg); + rmov->curr().put(RMV_NUMRIG,rcontr); + rmov->read(); + if (rmov->bad()) + rmov->curr().zero(); + _gruppocontr = rmov->curr().get(RMV_GRUPPO); + _contocontr = rmov->curr().get(RMV_CONTO); + _sottocontocontr = rmov->curr().get(RMV_SOTTOCONTO); + rmov->setkey(2); + rmov->readat(record); + + // Stampa solo quelli che hanno anno esercizio uguale a quello specificato + // nella maschera. Se non viene specificato li stampa tutti + + _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); + _importo_str = _importo.string("###############"); + _mov->setkey(1); + _mov->curr().zero(); + _mov->curr().put(MOV_NUMREG,_numreg); + _mov->read(); + if (_mov->bad()) + _mov->zero(); + _annoes = atol(_mov->curr().get(MOV_ANNOES)); + _regiva = _mov->curr().get(MOV_REG); + + // Controlla se saldo e' diverso da 0 + + if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) + { + _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); + + _datareg = (_mov->curr().get(MOV_DATAREG)); + provvis = _mov->curr().get(MOV_PROVVIS); + + _dataregs = _datareg.string(); + + if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) + { + if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) + { + _codcaus = _mov->curr().get(MOV_CODCAUS); + _tipodoc = _mov->curr().get(MOV_TIPODOC); + if (_stampatotiva) + { + documenti_iva(); + _b.add_riga(_descrdociva,_importo, _natdoc); + } + _datadoc = (_mov->curr().get(MOV_DATADOC)); + _datadocs = _datadoc.string(); + _numdoc = _mov->curr().get(MOV_NUMDOC); + descrizione_causale(); + _descrizionemov = _mov->curr().get(MOV_DESCR); + _numgio = atol(_mov->curr().get(MOV_NUMGIO)); + + _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); + + if (_numcarat == 1) // Stampa 132 caratteri + { + if (_descrizione != "") + { + if (_descrizionemov != "") + { + set_row (1,"@42g%.18s", (const char*) _descrizionemov); + set_row (1,"@61g%.23s", (const char*) _descrizione); + } + else if (_descrizionemov == "") + { + set_row (1,"@42g%.18s", (const char*) _descrcaus); + set_row (1,"@61g%.23s", (const char*) _descrizione); + } + } + else if (_descrizione == "") + { + set_row (1,"@42g%.18s", (const char*) _descrcaus); + set_row (1,"@61g%.23s", (const char*) _descrizionemov); + } + } + else + if (_numcarat == 2) // Stampa 198 caratteri + { + if (_descrizione != "") + { + if (_descrizionemov != "") + { + set_row (1,"@42g%.25s", (const char*) _descrizionemov); + set_row (1,"@68g%.32s", (const char*) _descrizione); + } + else if (_descrizionemov == "") + { + set_row (1,"@42g%.25s", (const char*) _descrcaus); + set_row (1,"@68g%.32s", (const char*) _descrizione); + } + } + else if (_descrizione == "") + { + set_row (1,"@42g%.25s", (const char*) _descrcaus); + set_row (1,"@68g%.32s", (const char*) _descrizionemov); + } + } + + if (_sezione == "D") + { + _totale_periodo_dare += _importo; + _riporto_parziale_dare += _importo; + if (_numcarat == 2) + { + _saldo_progressivi += _importo; + _saldo_movimenti += _importo; + } + } + else if (_sezione == "A") + { + _totale_periodo_avere += _importo; + _riporto_parziale_avere += _importo; + if (_numcarat == 2) + { + _saldo_progressivi -= _importo; + _saldo_movimenti -= _importo; + } + } + _saldo_progressivi_str=_saldo_progressivi.string("###############"); + _saldo_movimenti_str=_saldo_movimenti.string("###############"); + if (_numcarat == 2) + { + ricerca_regiva(); + _protiva = atol(_mov->curr().get(MOV_PROTIVA)); + } + return TRUE; + } + else + return FALSE; + } + else + return FALSE; + } + break; + } + default: + break; + } + return TRUE; +} + +bool CG3200_application::preprocess_clifo(int file, int counter) +{ + TLocalisamfile* rmov; + long record; + TString provvis = ""; + + if (counter) + return TRUE; + + switch (file) + { + case LF_CLIFO: + // Usati in crea_intestazione() + _gruppo = atoi(current_cursor()->curr(LF_CLIFO).get(CLI_GRUPPO)); + _conto = atoi(current_cursor()->curr(LF_CLIFO).get(CLI_CONTO)); + _sottoc = atol(current_cursor()->curr(LF_CLIFO).get(CLI_CODCF)); + + _saldo_periodo =0; + _totale_periodo_dare =0; + _totale_periodo_avere =0; + _saldo_progre =0; + _totprogre_dare =0; + _totprogre_avere =0; + _saldo_progre_al =0; + _totprogre_dare_al =0; + _totprogre_avere_al =0; + _progredare =0; + _progreavere =0; + _totale_prima_dare =0; + _totale_prima_avere =0; + _saldo_movimenti =0; + _saldo_progressivi =0; + _saldo_progre_prec =0; + if (_tipostampa == 2) + saldi_zero(); + else + _totale_saldo = 1; + + if ((_tipostampa == 1) || (_tipostampa == 2)) + if ((almeno_un_record()) && (_totale_saldo != 0)) + _puoi_stampare = TRUE; + else + { + _puoi_stampare = FALSE; + return FALSE; + } + break; + + case LF_RMOV: + { + // Ricerca la contropartita di quel movimento + + _numreg = atol (current_cursor()->curr(LF_RMOV).get(RMV_NUMREG)); + + int rcontr = atoi(current_cursor()->curr(LF_RMOV).get(RMV_RCONTR)); + rmov = current_cursor()->file(LF_RMOV); + record = rmov->recno(); + rmov->setkey(1); + rmov->curr().zero(); + rmov->curr().put(RMV_NUMREG,_numreg); + rmov->curr().put(RMV_NUMRIG,rcontr); + rmov->read(); + if (rmov->bad()) + rmov->curr().zero(); + _gruppocontr = rmov->curr().get(RMV_GRUPPO); + _contocontr = rmov->curr().get(RMV_CONTO); + _sottocontocontr = rmov->curr().get(RMV_SOTTOCONTO); + rmov->setkey(2); + rmov->readat(record); + + + // Stampa solo quelli che hanno anno esercizio uguale a quello specificato + // nella maschera. Se non viene specificato li stampa tutti + + _importo = current_cursor()->curr(LF_RMOV).get_real(RMV_IMPORTO); + _importo_str = _importo.string("###############"); + _mov->setkey(1); + _mov->curr().zero(); + _mov->curr().put(MOV_NUMREG,_numreg); + _mov->read(); + if (_mov->bad()) + _mov->zero(); + _annoes = atol(_mov->curr().get(MOV_ANNOES)); + _regiva = _mov->curr().get(MOV_REG); + + // Controlla se saldo e' diverso da 0 + + if (((_annoes == _annomsk) || (_annomsk == 0)) && (_totale_saldo != 0)) + { + _sezione = current_cursor()->curr(LF_RMOV).get(RMV_SEZIONE); + + _datareg = (_mov->curr().get(MOV_DATAREG)); + provvis = _mov->curr().get(MOV_PROVVIS); + + _dataregs = _datareg.string(); + + if ((_stampa_mov_prov)||((!_stampa_mov_prov)&&(provvis.trim().empty()))) + { + if ((_datareg >= _data_ini) && (_datareg <= _data_fine)) + { + _codcaus = _mov->curr().get(MOV_CODCAUS); + _tipodoc = _mov->curr().get(MOV_TIPODOC); + if (_stampatotiva) + { + documenti_iva(); + _b.add_riga(_descrdociva,_importo, _natdoc); + } + _datadoc = (_mov->curr().get(MOV_DATADOC)); + _datadocs = _datadoc.string(); + _numdoc = _mov->curr().get(MOV_NUMDOC); + descrizione_causale(); + _descrizionemov = _mov->curr().get(MOV_DESCR); + _numgio = atol(_mov->curr().get(MOV_NUMGIO)); + + _descrizione = current_cursor()->curr(LF_RMOV).get(RMV_DESCR); + + if (_numcarat == 1) // Stampa 132 caratteri + { + if (_descrizione != "") + { + if (_descrizionemov != "") + { + set_row (1,"@42g%.18s", (const char*) _descrizionemov); + set_row (1,"@61g%.23s", (const char*) _descrizione); + } + else if (_descrizionemov == "") + { + set_row (1,"@42g%.18s", (const char*) _descrcaus); + set_row (1,"@61g%.23s", (const char*) _descrizione); + } + } + else if (_descrizione == "") + { + set_row (1,"@42g%.18s", (const char*) _descrcaus); + set_row (1,"@61g%.23s", (const char*) _descrizionemov); + } + } + else + if (_numcarat == 2) // Stampa 198 caratteri + { + if (_descrizione != "") + { + if (_descrizionemov != "") + { + set_row (1,"@42g%.25s", (const char*) _descrizionemov); + set_row (1,"@68g%.32s", (const char*) _descrizione); + } + else if (_descrizionemov == "") + { + set_row (1,"@42g%.25s", (const char*) _descrcaus); + set_row (1,"@68g%.32s", (const char*) _descrizione); + } + } + else if (_descrizione == "") + { + set_row (1,"@42g%.25s", (const char*) _descrcaus); + set_row (1,"@68g%.32s", (const char*) _descrizionemov); + } + } + + if (_sezione == "D") + { + _totale_periodo_dare += _importo; + _riporto_parziale_dare += _importo; + if (_numcarat == 2) + { + _saldo_progressivi += _importo; + _saldo_movimenti += _importo; + } + } + else if (_sezione == "A") + { + _totale_periodo_avere += _importo; + _riporto_parziale_avere += _importo; + if (_numcarat == 2) + { + _saldo_progressivi -= _importo; + _saldo_movimenti -= _importo; + } + } + _saldo_progressivi_str=_saldo_progressivi.string("###############"); + _saldo_movimenti_str=_saldo_movimenti.string("###############"); + if (_numcarat == 2) + { + ricerca_regiva(); + _protiva = atol(_mov->curr().get(MOV_PROTIVA)); + } + return TRUE; + } + else + return FALSE; + } + else + return FALSE; + } + break; + } + default: + break; + } + return TRUE; +} + +bool CG3200_application::preprocess_page(int file, int counter) +{ + if (_ricerca == 'P') + { + if (preprocess_pconti(file,counter)) + return TRUE; + else + return FALSE; + } + else + { + if ((_ricerca == 'C') || (_ricerca == 'F')) + { + if (preprocess_clifo(file,counter)) + return TRUE; + else + return FALSE; + } + } + return TRUE; +} + +void CG3200_application::set_page(int file, int counter) +{ + if (_ricerca == 'P') + set_page_pconti(file,counter); + else + if ((_ricerca == 'C') || (_ricerca == 'F')) + set_page_clifo(file,counter); +} + +void CG3200_application::set_page_pconti(int file, int counter) +{ + switch (file) + { + case LF_PCON: + reset_print(); + break; + + case LF_RMOV: + reset_print(); + if (_numcarat == 1) + fai_stampa132(); + else if (_numcarat == 2) + fai_stampa198(); + break; + default: + break; + } +} + +void CG3200_application::set_page_clifo(int file, int counter) +{ + switch (file) + { + case LF_CLIFO: + reset_print(); + break; + + case LF_RMOV: + reset_print(); + if (_numcarat == 1) + fai_stampa132(); + else if (_numcarat == 2) + fai_stampa198(); + break; + default: + break; + } +} + +print_action CG3200_application::postprocess_page(int file, int counter) +{ + if (_ricerca == 'P') + { + if (counter) + { + printer().formfeed(); + reset_print(); // per evitare che stampi di nuovo il totale prec. + return NEXT_PAGE; + } + + switch (file) + { + case LF_PCON: + if (_tipostampa == 3) + { + reset_print(); + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 2) + { + reset_print(); + if ((_totale_saldo != 0) && (_puoi_stampare)) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 1) + { + reset_print(); + if (_puoi_stampare) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + _stampa_progressivi_si = TRUE; + _prima_volta = TRUE; + return REPEAT_PAGE; + case LF_RMOV: + force_setpage(); + break; + default: + break; + } + } + else + { + if ((_ricerca == 'C') || (_ricerca == 'F')) + { + if (counter) + { + printer().formfeed(); + reset_print(); // per evitare che stampi di nuovo il totale prec. + return NEXT_PAGE; + } + + switch (file) + { + case LF_CLIFO: + if (_tipostampa == 3) + { + reset_print(); + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 2) + { + reset_print(); + if ((_totale_saldo != 0) && (_puoi_stampare)) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + else if (_tipostampa == 1) + { + reset_print(); + if (_puoi_stampare) + if (_numcarat == 1) + stampa_totali132(); + else if (_numcarat == 2) + stampa_totali198(); + if (_stampatotiva) + stampa_totaliiva(); + } + _stampa_progressivi_si = TRUE; + _prima_volta = TRUE; + return REPEAT_PAGE; + case LF_RMOV: + force_setpage(); + break; + default: + break; + } + } + } + return NEXT_PAGE; +} + +// Stampa dei totali documenti iva se richiesta + +void CG3200_application::stampa_totaliiva() +{ + + if (_stampatotiva) + for (int j = 0; j < _b.items(); j++) + { + TDociva& riga = (TDociva&)_b[j]; + set_row(7+j, "@0g%-50s",(const char*) riga._descrdoc); + set_row(7+j, "@61g%15.0r", &riga._totdociva); + } + _b.destroy(); +} + +// Ricerca della descrizione relativa al codice causale di MOV.dta +// sull'archivio CAUS.dta + +void CG3200_application::descrizione_causale() +{ + _caus->setkey(1); + _caus->curr().zero(); + _caus->curr().put(CAU_CODCAUS, _codcaus); + _caus->read(); + if (_caus->bad()) + _caus->zero(); + _descrcaus = _caus->curr().get(CAU_DESCR); +} + +// Ricerca sulla tabella dei tipi documento, la descrizione e la natura del +// documento, accedendovi tramite il tipo documento trovato su MOV.dta + +void CG3200_application::documenti_iva() +{ + TString dep; + // _tipodoc = _mov->curr().get(MOV_TIPODOC); + + _tabtpd->curr().zero(); + dep << format ("%2s",(const char*) _tipodoc); + _tabtpd->curr().put("CODTAB", (const char*) dep); + _tabtpd->read(); + _descrdociva = _tabtpd->curr().get("S0"); + _natdoc = atoi(_tabtpd->curr().get("I0")); +} + +void CG3200_application::ricerca_regiva() +{ + TString dep; + + _tabreg->curr().zero(); + dep << format("%04d", _annoes); + dep << format("%3s" , (const char*) _regiva); + _tabreg->curr().put("CODTAB", (const char*) dep); + _tabreg->read(); + _tipo = atoi(_tabreg->curr().get("I0")); +} + +CG3200_application::CG3200_application() +{ +} + +bool CG3200_application::set_print(int) +{ + KEY tasto; + int crt; + TLocalisamfile* fl; + TString data1,data2; + + _puoi_stampare = TRUE; + + tasto = _msk->run(); + + if (tasto == K_ENTER) + { + _data_ini = (_msk->get(F_DATAINI)); + _data_fine = (_msk->get(F_DATAFINE)); + + _annomsk = atol(_msk->get(F_ANNO)); + + if (_annomsk == 0) + if (_data_fine == botime) //Se data_fine e' vuota + _data_fine = eotime; + + if (_annomsk != 0) + { + _annoesmsk = _annomsk - 1; + data_fine_esercizio(); + if (_data_ini == botime) + _data_ini = _data_inizioese; + if (_data_fine == botime) + _data_fine = _data_finese; + } + + data1 = _data_ini.string(); + data2 = _data_fine.string(); + + _stampaprogre = (bool)(_msk->get(F_STAMPAPROGRE) == "X"); + _stampatotiva = (bool)(_msk->get(F_STAMPATOTIVA) == "X"); + _stampanum = atoi(_msk->get(F_STAMPANUM)); + _stampa_mov_prov = (bool)(_msk->get(F_STAMPAMOVPROV) == "X"); + int gruppoini = atoi(_msk->get(F_GRUPPOINI)); + int contoini = atoi(_msk->get(F_CONTOINI)); + long sottocontoini = atol(_msk->get(F_SOTTOCONTOINI)); + int gruppofine = atoi(_msk->get(F_GRUPPOFINE)); + int contofine = atoi(_msk->get(F_CONTOFINE)); + long sottocontofine = atol(_msk->get(F_SOTTOCONTOFINE)); + _competenza = (bool)(_msk->get(F_COMPESE) == "X"); + _tipostampa = atoi(_msk->get(F_TIPOSTAMPA)); + _numcarat = atoi(_msk->get(F_NUMCARAT)); + int formato = atoi(_msk->get(F_FORMATO)); + int nummast = atoi(_msk->get(F_NUMMAST)); + _ricerca = _msk->get(F_RICERCA)[0]; + _codice_ditta = get_firm(); + + ricerca_dati_ditta(); + + // Scelta del formato e del numero di mastrini per pagina 1 o 2 + + if (nummast == 1) + crt = formato; + else + crt = (formato / 2); + + printer().formlen(crt); + + //Crea il cursore su gruppo, conto e sottoconto del file RMOV + if (_ricerca == 'P') + { + reset_files(); //resetta l'albero di stampa + add_file(LF_PCON); + add_file(LF_RMOV,LF_PCON); + + select_cursor(_cur1); + fl = current_cursor()->file(LF_PCON); + TRectype da (fl->curr()); + TRectype a (fl->curr()); + + da.zero(); + a.zero(); + + da.put(PCN_GRUPPO,gruppoini); + da.put(PCN_CONTO,contoini); + da.put(PCN_SOTTOCONTO,sottocontoini); + + a.put(PCN_GRUPPO,gruppofine); + a.put(PCN_CONTO,contofine); + a.put(PCN_SOTTOCONTO,sottocontofine); + + current_cursor()->setregion(da, a); + } + else + { + if (_ricerca == 'C') + select_cursor(_cur2); + if (_ricerca == 'F') + select_cursor(_cur3); + + reset_files(); + add_file(LF_CLIFO); + add_file(LF_RMOV,LF_CLIFO); + + fl = current_cursor()->file(LF_CLIFO); + TRectype da (fl->curr()); + TRectype a (fl->curr()); + + da.zero(); + a.zero(); + + da.put(CLI_TIPOCF,_ricerca); + da.put(CLI_GRUPPO,gruppoini); + da.put(CLI_CONTO,contoini); + da.put(CLI_CODCF,sottocontoini); + + a.put(CLI_TIPOCF,_ricerca); + a.put(CLI_GRUPPO,gruppofine); + a.put(CLI_CONTO,contofine); + a.put(CLI_CODCF,sottocontofine); + + current_cursor()->setregion(da, a); + } + + if (_stampatotiva) + _b.destroy(); + + if (_competenza) + if (_data_fine == _data_finese) + { + TDate datafinesucc = _data_fine; + datafinesucc.addyear(1); + data_fine_esercizio_succ(); + if (datafinesucc == _data_finesesucc) + _data_fine = datafinesucc; + } + + switch (_tipostampa) + { + case 1: _totale_saldo = 1; + break; + case 2: _totale_saldo = 0; + break; + case 3: _totale_saldo = 1; + break; + default: break; + } + _prima_volta = TRUE; + + _stampa_progressivi_si = TRUE; + + enable_print_menu(); + + enable_link("Collegamento prima nota: ", 'r'); + + return TRUE; + } +else + return FALSE; +} + +void CG3200_application::data_fine_esercizio() +{ + TString dep; + + _tabesc->curr().zero(); + dep << format ("%04d",_annomsk); + _tabesc->curr().put("CODTAB", (const char*) dep); + _tabesc->read(); + _data_finese = _tabesc->curr().get("D1"); + _data_inizioese = _tabesc->curr().get("D0"); +} + +void CG3200_application::data_fine_esercizio_succ() +{ + TString dep; + + _annomsksucc = _annomsk + 1; + _tabesc->curr().zero(); + dep << format ("%04d",_annomsksucc); + _tabesc->curr().put("CODTAB", (const char*) dep); + _tabesc->read(); + _data_finesesucc = _tabesc->curr().get("D1"); +} + +void CG3200_application::preprocess_header() +{ + if (_tipostampa == 3) + crea_intestazione(); + else + if (_tipostampa == 2) + { + if ((_totale_saldo != 0) && (_puoi_stampare)) + crea_intestazione(); + } + else if (_tipostampa == 1) + if (_puoi_stampare) + crea_intestazione(); + +} + + +void CG3200_application::ricerca_dati_ditta() +{ + long app; + + _nditte->setkey(1); + // _codice_ditta << get_firm(); + _nditte->curr().zero(); + _nditte->curr().put(NDT_CODDITTA,_codice_ditta); + _nditte->read(); + app=_nditte->curr().get_long(NDT_CODDITTA); + _ragsoc=_nditte->curr().get(NDT_RAGSOC); + + _unloc->setkey(1); + _unloc->curr().zero(); + _unloc->curr().put(ULC_CODDITTA,app); + _unloc->curr().put(ULC_CODULC,"1"); + _unloc->read(); + _indulc=_unloc->curr().get(ULC_INDULC); + _civulc=_unloc->curr().get(ULC_CIVULC); + _capulc=_unloc->curr().get(ULC_CAPULC); + _comulc=_unloc->curr().get(ULC_COMULC); + + _comuni->setkey(1); + _comuni->curr().zero(); + _comuni->curr().put(COM_COM,_comulc); + _comuni->read(); + _com=_comuni->curr().get(COM_DENCOM); + _prov=_comuni->curr().get(COM_PROVCOM); + +} + +// Crea l'intestazione per la stampa a 132 e a 198 caratteri +void CG3200_application::crea_intestazione() +{ + TString sep(132),sep1(198); + + reset_header(); + + if (_numcarat == 1) + { + sep << "Pag. @#"; + sep.right_just(132); + set_header(1,(const char*) sep); + sep =""; + set_header(2,"@1g%s",(const char*) sep); + } + else if (_numcarat == 2) + { + sep1 << "Pagina @#"; + sep1.right_just(198); + set_header(1,(const char*) sep1); + sep1 =""; + set_header(2,"@1g%s",(const char*) sep1); + } + + set_header (1, "@0gDITTA@6g%5d", _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%-18s", (const char*) _com); + set_header (1, "@122g%-3s", (const char*) _prov); + + set_header (3, "@0gSottoconto@12g%d", _gruppo); + set_header (3, "@16g%d", _conto); + set_header (3, "@20g%d", _sottoc); + + TString tipocf = (_msk->get(F_RICERCA)); + if (tipocf == "C") + _tipocf = 1; + else if (tipocf == "F") + _tipocf = 2; + else if (tipocf == "P") + _tipocf = 3; + switch (_tipocf) + { + case 1: ricerca_clifo(); + break; + case 2: ricerca_clifo(); + break; + case 3: ricerca_gruppo(); + break; + default: break; + } + + if (_numcarat == 1) + { + sep.fill('-'); //Stampa 132 - (sep(132)) + set_header (6, (const char *) sep); + set_header (7,"Data@11gNumero@19gDocumento@117gContro@130gAn"); + set_header (8,"Registr.@11gregistr@19gData@30gNumero@38gCod.Causale@61gDescrizione@90gDare@106gAvere@117gPartita@130gCo"); + sep.fill('-'); + set_header (9, (const char *) sep); + } + else if (_numcarat == 2) + { + sep1.fill('-'); //Stampa 198 - (sep1(198)) + set_header (6,"@1g%s", (const char *) sep1); + set_header (7,"Data@11gNumero@19gData@30gNumero@172gContro@183gA@185gReg@193gNumero"); + set_header (8,"Registr.@11gregistr.@19gDocumento@38gCod.Causale@68gDescrizione@108gDare@124gAvere@136gSaldo progress.@154gSaldo movim.@172gPartita@183gC@185gIva@189gProtocollo"); + sep1.fill('-'); + set_header (9,"@1g%s", (const char *) sep1); + } + if (_stampa_progressivi_si) + { + calcola_progressivi(); + _riporto_dare = _progredare; + _riporto_avere = _progreavere; + _stampa_progressivi_si = FALSE; + } + else + { + _riporto_dare += _riporto_parziale_dare; + _riporto_avere += _riporto_parziale_avere; + if (_numcarat == 1) + { + TString string = _riporto_dare.string("###############"); + set_header (10,"@32gA RIPORTO@85g%15s",(const char*) string); + string = _riporto_avere.string("###############"); + set_header (10,"@101g%15s",(const char*) string); + } + if (_numcarat == 2) + { + TString string = _riporto_dare.string("###############"); + set_header (10,"@32gA RIPORTO@102g%15s",(const char*) string); + string = _riporto_avere.string("###############"); + set_header (10,"@119g%15s",(const char*) string); + } + _riporto_parziale_dare = 0; + _riporto_parziale_avere = 0; + } + if (_numcarat == 1) + { + sep =""; + set_header(11,"@1g%s",(const char*) sep); + } + else if (_numcarat == 2) + { + sep1 =""; + set_header(11,"@1g%s",(const char*) sep1); + } +} + +void CG3200_application::calcola_progressivi_al() +{ + long record,sottoc,annoes; + int gruppo,conto; + TDate datareg; + TLocalisamfile* rmov; + + rmov = current_cursor()->file(LF_RMOV); + + if (current_cursor()->is_first_match(LF_RMOV)) + { + record = rmov->recno(); + rmov->zero(); + rmov->put(RMV_GRUPPO, _gruppo); + rmov->put(RMV_CONTO, _conto); + rmov->put(RMV_SOTTOCONTO, _sottoc); + for (rmov->read(); ;rmov->next()) + { + annoes = rmov->get_long(RMV_ANNOES); + datareg = rmov->get_date(RMV_DATAREG); + gruppo = rmov->get_int(RMV_GRUPPO); + conto = rmov->get_int(RMV_CONTO); + sottoc = rmov->get_long(RMV_SOTTOCONTO); + if ((gruppo != _gruppo)&&(conto != _conto)&&(sottoc != _sottoc)) + break; + else if ((annoes==_annomsk)&&(_datareg < _data_ini)) //Legge movimenti con data < data iniziale + if (_sezione == "D") + _totale_prima_dare += _importo; + else if (_sezione == "A") + _totale_prima_avere += _importo; + } + rmov->readat(record); + } +} + +void CG3200_application::calcola_progressivi() +{ + TLocalisamfile pconti(LF_PCON); + TLocalisamfile saldi (LF_SALDI); + real pdaresca,paveresca,pdarescap,paverescap; + real progdare_attuale,progavere_attuale,progdare_prec,progavere_prec; + real saldo,progredare_eseprec,progreavere_eseprec,pdarep,paverep; + int indbil; + char salini; + TRectype record(saldi.curr()); + + saldo = 0.00; + pdarep = 0.00; + paverep = 0.00; + pdaresca = 0.00; + paveresca = 0.00; + pdarescap = 0.00; + paverescap = 0.00; + // Ricerca sull'archivio saldi dei record con gruppo,conto,sottoconto + // uguali a quelli di rmov per il calcolo dei progressivi precedenti + + record.zero(); + record.put(SLD_GRUPPO, _gruppo); + record.put(SLD_CONTO, _conto); + record.put(SLD_SOTTOCONTO, _sottoc); + + if (_ricerca == 'P') + indbil = atoi (current_cursor()->file(LF_PCON)->get(PCN_INDBIL)); + else + { + if ((_ricerca == 'C') || (_ricerca == 'F')) + { + pconti.setkey(1); + pconti.zero(); + pconti.put(PCN_GRUPPO, _gruppo); + pconti.put(PCN_CONTO , _conto); + pconti.read(); + if (pconti.good()) + indbil = atoi (pconti.get(PCN_INDBIL)); + else + indbil = 0; + } + } + + saldi.setkey(2); + + saldi.zero(); + saldi.put(SLD_GRUPPO, _gruppo); + saldi.put(SLD_CONTO, _conto); + saldi.put(SLD_SOTTOCONTO, _sottoc); + + for ( saldi.read(); + ((saldi.curr()==record) && !saldi.eof()); + saldi.next()) + { + long annoes_saldi = saldi.curr().get_long(SLD_ANNOES); + + //Calcola i progressivi dell'esercizio attuale + + if (annoes_saldi == _annomsk) + { + pdaresca = saldi.curr().get_real(SLD_PDARESCA); + paveresca = saldi.curr().get_real(SLD_PAVERESCA); + saldo = saldi.curr().get_real(SLD_SALDO); + salini = saldi.curr().get(SLD_FLAGSALINI)[0]; + } + + //Calcola i progressivi dell'esercizio precedente + + if (annoes_saldi == _annoesmsk) + { + pdarescap = saldi.curr().get_real(SLD_PDARESCA); + pdarep = saldi.curr().get_real(SLD_PDARE); + paverescap = saldi.curr().get_real(SLD_PAVERESCA); + paverep = saldi.curr().get_real(SLD_PAVERE); + + // Se il saldo dell'esercizio attuale e' diverso da 0 allora significa che + // quello corrisponde al saldo finale dell'esercizio precedente. Per ottenere + // i progressivi dell'esercizio precedente devo a questo punto sommare i + // progressivi dell'esercizio e i progressivi di quelli scaricati, tenendo + // conto del flag salini per sapere se il saldo e' dare oppure avere. + + if (saldo != 0) + { + if (salini == 'D') + { + progredare_eseprec = saldo + pdarescap + pdarep; + progreavere_eseprec = paverescap + paverep; + } + else if (salini == 'A') + { + progredare_eseprec = pdarescap + pdarep; + progreavere_eseprec = saldo + paverescap + paverep; + } + } + else + { + + //Se il saldo dell'esercizio attuale non e' diverso da zero, allora il saldo + // finale dell'esercizio precedente devo calcolarmelo tenendo conto dell'indbil + + if ((indbil == 1) || (indbil == 2) || (indbil == 5)) + { + saldo = _sld.saldofin_esprec(_annomsk,_gruppo,_conto,_sottoc); + + if (saldo.sign() > 0) + { + progredare_eseprec = saldo + pdarescap + pdarep; + progreavere_eseprec = paverescap + paverep; + } + else if (saldo.sign() < 0) + { + progredare_eseprec = pdarescap + pdarep; + progreavere_eseprec = saldo + paverescap + paverep; + } + } + } + } + + //Calcolo dei progressivi precedenti: somma di tutti quei movimenti di rmov + //che hanno la data di registrazione inferiore alla data di inizio stampa, + //dei progressivi dell'anno esercizio precedente, e dei progressivi dei + //movimenti scaricati dell'esercizio attuale. + + calcola_progressivi_al(); + + _progredare = pdaresca + progredare_eseprec + _totale_prima_dare; + _progreavere = paveresca + progreavere_eseprec + _totale_prima_avere; + _saldo_progre_prec = _progredare - _progreavere; + } // FOR + + if (_numcarat == 1) + { + TString string = _saldo_progre_prec.string("###############"); + set_header (10,"@32gPROGRESSIVI PRECEDENTI@69g%15s",(const char*) string); + string = _progredare.string("###############"); + set_header (10,"@85g%15s",(const char*) string); + string = _progreavere.string("###############"); + set_header (10,"@101g%15s",(const char*) string); + } + + if (_numcarat == 2) + { + TString string = _progredare.string("###############"); + set_header (10,"@32gPROGRESSIVI PRECEDENTI@102g%15s",(const char*)string); + string = _progreavere.string("###############"); + set_header (10,"@119g%15s",(const char*) string); + } + //Calcolo dei progressivi al + + + //Se sulla maschera e' stato selezionato il controllo competenza esercizio + //Sommo i progressivi dell'esercizio precedente e quelli dell'esercizio attuale + //altrimenti solo quelli dell'esercizio attuale + + if (_competenza) + { + _totprogre_dare_al = progdare_attuale + progdare_prec; + _totprogre_avere_al = progavere_attuale + progavere_prec; + } + else + { + _totprogre_dare_al = progdare_attuale; + _totprogre_avere_al = progavere_attuale; + } +} + +// Se la ricerca selezionata nella maschera e' per clienti, oppure fornitori, // allora ricerco su CLIFO i relativi dati, e su PCON il relativo gruppo,conto,// sottoconto e IV direttiva CEE + +void CG3200_application::ricerca_clifo() +{ + TString ragsoc,paiv,cofi,indcf,capcf,ptel,tel,statocf,comcf,dencom,provcom,dep; + TLocalisamfile pconti(LF_PCON); + TString dataini,datafine; + int numrivd; + + ragsoc = (current_cursor()->curr(LF_CLIFO).get(CLI_RAGSOC)); + paiv = (current_cursor()->curr(LF_CLIFO).get(CLI_PAIV)); + cofi = (current_cursor()->curr(LF_CLIFO).get(CLI_COFI)); + indcf = (current_cursor()->curr(LF_CLIFO).get(CLI_INDCF)); + capcf = (current_cursor()->curr(LF_CLIFO).get(CLI_CAPCF)); + ptel = (current_cursor()->curr(LF_CLIFO).get(CLI_PTEL)); + tel = (current_cursor()->curr(LF_CLIFO).get(CLI_TEL)); + statocf = (current_cursor()->curr(LF_CLIFO).get(CLI_STATOCF)); + comcf = (current_cursor()->curr(LF_CLIFO).get(CLI_COMCF)); + + _comuni->setkey(1); + _comuni->curr().zero(); + _comuni->curr().put(COM_STATO, statocf); + _comuni->curr().put(COM_COM, comcf); + _comuni->read(); + dencom = _comuni->curr().get(COM_DENCOM); + provcom = _comuni->curr().get(COM_PROVCOM); + + pconti.setkey(1); + pconti.curr().zero(); + pconti.curr().put(PCN_GRUPPO, _gruppo); + pconti.curr().put(PCN_CONTO, _conto); + pconti.curr().put(PCN_SOTTOCONTO, _sottoc); + pconti.read(); + _sezivd = pconti.curr().get(PCN_SEZIVD); + _lettivd = pconti.curr().get(PCN_LETTIVD); + numrivd = atoi(pconti.curr().get(PCN_NUMRIVD)); + _numrivd = itor(numrivd); + _numivd = atoi(pconti.curr().get(PCN_NUMIVD)); + + _tabivd->curr().zero(); + dep << format ("%1s%1s%-8d%2d",(const char*)_sezivd,(const char*)_lettivd,numrivd,_numivd); + _tabivd->curr().put("CODTAB", (const char*) dep); + _tabivd->read(); + if (_tabivd->bad()) + _tabivd->zero(); + TString descriz = _tabivd->curr().get("S0"); + + if (_ricerca == 'P') + { + set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); + set_header(3,"@59g%-30s",(const char*) descrizione_conto()); + } + else + if ((_ricerca == 'C')||(_ricerca == 'F')) + { + set_header(3,"@27g%-30s",(const char*) descrizione_gruppo_clifo()); + set_header(3,"@59g%-30s",(const char*) descrizione_conto_clifo()); + } + set_header(3, "@91g%-30s",(const char*) ragsoc); + set_header(4, "@1gClasse@8g%1s",(const char*) _lettivd); + set_header(4, "@10g%8s",(const char*) _numrivd); + if (_numivd != 0) + set_header(4, "@19g%2d", _numivd); + set_header(4,"@23g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + set_header (5, "@1gPeriodo@10g%s", (const char*) dataini); + if (_data_fine != eotime) + { + datafine = _data_fine.string(); + set_header (5, "@22g%s", (const char*) datafine); + } + set_header (5, "@34g%-11s",(const char*) paiv); + set_header (5, "@46g%-16s",(const char*) cofi); + set_header (5, "@63g%-25s",(const char*) indcf); + set_header (5, "@89g%-5s",(const char*) capcf); + set_header (5, "@95g%-30s",(const char*) dencom); + set_header (5,"@126g%-5s",(const char*) provcom); + + if (_numcarat == 2) + { + set_header (5,"@134g%-4s",(const char*) ptel); + set_header (5,"@138g/@139g%-10s",(const char*) tel); + } +} + +// Se la ricerca selezionata sulla maschera e' per gruppo, conto, sottoconto +// ricerca i corrispondenti su PCON, con relativa IV direttiva CEE + +void CG3200_application::ricerca_gruppo() +{ + TString descr,descriz,dep; + int numrivd; + TString dataini,datafine; + + descr = (current_cursor()->curr(LF_PCON).get(PCN_DESCR)); + _sezivd = (current_cursor()->curr(LF_PCON).get(PCN_SEZIVD)); + _lettivd = (current_cursor()->curr(LF_PCON).get(PCN_LETTIVD)); + numrivd = atoi(current_cursor()->curr(LF_PCON).get(PCN_NUMRIVD)); + _numrivd = itor(numrivd); + _numivd = atoi(current_cursor()->curr(LF_PCON).get(PCN_NUMIVD)); + + _tabivd->curr().zero(); + dep << format ("%1s%1s%-8d%2d",(const char*)_sezivd,(const char*)_lettivd, numrivd,_numivd); + _tabivd->curr().put("CODTAB", (const char*) dep); + _tabivd->read(); + if (_tabivd->bad()) + _tabivd->zero(); + descriz = _tabivd->curr().get("S0"); + + if (_ricerca == 'P') + { + set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); + set_header(3,"@59g%-30s",(const char*) descrizione_conto()); + } + else + if ((_ricerca == 'C')||(_ricerca == 'F')) + { + set_header(3,"@27g%-30s",(const char*) descrizione_gruppo()); + set_header(3,"@59g%-30s",(const char*) descrizione_conto()); + } + + set_header(3,"@91g%-30s",(const char*) descr); + set_header(4, "@0gClasse@12g%1s",(const char*) _lettivd); + set_header(4, "@14g%8s",(const char*) _numrivd); + if (_numivd != 0) + set_header(4, "@23g%d", _numivd); + set_header(4,"@27g%-50s",(const char*) descriz); + + dataini = _data_ini.string(); + set_header (5, "@0gPeriodo@12g%s", (const char*) dataini); + if (_data_fine != eotime) + { + datafine = _data_fine.string(); + set_header (5, "@24g%s", (const char*) datafine); + } +} + +//Ricerca la descrizione relativa al gruppo da stampare + +const char* CG3200_application::descrizione_gruppo() +{ + TLocalisamfile* pconti; + long record; + + pconti = current_cursor()->file(LF_PCON); + record = pconti->recno(); + pconti->curr().zero(); + pconti->curr().put(PCN_GRUPPO,_gruppo); + pconti->read(); + tmp = pconti->curr().get(PCN_DESCR); + pconti->readat(record); + return (tmp); +} + +// Ricerca la descrizione relativa al conto da stampare + +const char* CG3200_application::descrizione_conto() +{ + TLocalisamfile* pconti; + long record; + + pconti = current_cursor()->file(LF_PCON); + record = pconti->recno(); + pconti->curr().zero(); + pconti->curr().put(PCN_GRUPPO,_gruppo); + pconti->curr().put(PCN_CONTO,_conto); + pconti->read(); + tmp = pconti->curr().get(PCN_DESCR); + pconti->readat(record); + return (tmp); +} + +//Ricerca la descrizione relativa al gruppo da stampare + +const char* CG3200_application::descrizione_gruppo_clifo() +{ + TLocalisamfile pconti(LF_PCON); + + pconti.curr().zero(); + pconti.curr().put(PCN_GRUPPO,_gruppo); + pconti.read(); + tmp = pconti.curr().get(PCN_DESCR); + return (tmp); +} + +// Ricerca la descrizione relativa al conto da stampare + +const char* CG3200_application::descrizione_conto_clifo() +{ + TLocalisamfile pconti(LF_PCON); + + pconti.curr().zero(); + pconti.curr().put(PCN_GRUPPO,_gruppo); + pconti.curr().put(PCN_CONTO,_conto); + pconti.read(); + tmp = pconti.curr().get(PCN_DESCR); + return (tmp); +} + +void CG3200_application::user_create() +{ + TToken_string exp,exp1; + + _rel = new TRelation (LF_PCON); + + exp.add("GRUPPO=GRUPPO"); + exp.add("CONTO=CONTO"); + exp.add("SOTTOCONTO=SOTTOCONTO"); + _rel->add(LF_RMOV,exp,2,LF_PCON); + + _cur1=add_cursor(new TCursor(_rel,"((CONTO!=\"\")&&(SOTTOCONTO!=\"\"))",1)); + + _rel_clifo = new TRelation (LF_CLIFO); + + exp1.add("GRUPPO=GRUPPO"); + exp1.add("CONTO=CONTO"); + exp1.add("SOTTOCONTO=CODCF"); + _rel_clifo->add(LF_RMOV,exp1,2,LF_CLIFO); + + _cur2=add_cursor(new TCursor(_rel_clifo,"TIPOCF=\"C\"",3)); + + _cur3=add_cursor(new TCursor(_rel_clifo,"TIPOCF=\"F\"",3)); + + _nditte = new TLocalisamfile (LF_NDITTE); + _unloc = new TLocalisamfile (LF_UNLOC); + _comuni = new TLocalisamfile (LF_COMUNI); + _mov = new TLocalisamfile (LF_MOV); + _clifo = new TLocalisamfile (LF_CLIFO); + _caus = new TLocalisamfile (LF_CAUSALI); + _tabivd = new TTable (TAB_IVD); + _tabtpd = new TTable (TAB_TPD); + _tabreg = new TTable (TAB_REG); + _tabesc = new TTable (TAB_ESC); + + _msk = new TMask("cg3200a"); + _msk->set_handler(F_ANNO, our_handler); + + _inizio_stampa = TRUE; +} + +void CG3200_application::user_destroy() +{ + delete _msk; + delete _rel; + delete _rel_clifo; + delete _mov; + delete _nditte; + delete _unloc; + delete _comuni; + delete _clifo; + delete _caus; + delete _tabivd; + delete _tabtpd; + delete _tabreg; + delete _tabesc; + +} + +int cg3200(int argc, char* argv[]) +{ + + CG3200_application a; + + a.run(argc, argv, "Stampa Mastrini"); + + return 0; +} + + + + + diff --git a/cg/cg3200a.uml b/cg/cg3200a.uml index badd45869..12e4cfa7b 100755 --- a/cg/cg3200a.uml +++ b/cg/cg3200a.uml @@ -1,561 +1,561 @@ -#include "cg3200.h" - -PAGE "" -1 -1 78 20 - - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 4 1 "Ditta " - FLAGS "FRD" - USE LF_NDITTE KEY 1 - CHECKTYPE REQUIRED - INPUT CODDITTA F_CODDITTA - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale @50" RAGSOC - OUTPUT F_CODDITTA CODDITTA - OUTPUT F_RAGSOC RAGSOC -END - -STRING F_RAGSOC 50 -BEGIN - PROMPT 4 2 "Ragione sociale " - FLAGS "D" -END - -NUMBER F_ANNO 4 -BEGIN - PROMPT 47 1 "Anno esercizio " - HELP "Inserire un anno esercizio presente nella tabella oppure niente: in quest'ultimo caso non e' possibile fare il controllo competenza esercizio" - USE ESC - INPUT CODTAB F_ANNO - DISPLAY "Anno Esercizio@50" CODTAB - OUTPUT F_ANNO CODTAB - CHECKTYPE NORMAL -END - -LIST F_RICERCA 25 -BEGIN - PROMPT 4 4 "Ricerca " - ITEM "C|Clienti" - MESSAGE HIDE,2@|HIDE,3@|RESET,2@|RESET,3@|SHOW,1@ - ITEM "F|Fornitori" - MESSAGE HIDE,1@|HIDE,3@|RESET,1@|RESET,3@|SHOW,2@ - ITEM "P|Gruppo/conto/sottoconto" - MESSAGE HIDE,1@|HIDE,2@|RESET,1@|RESET,2@|SHOW,3@ -END - -NUMBER F_GRUPPOINI 3 -BEGIN - PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " - USE LF_CLIFO SELECT TIPOCF="C" -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI GRUPPO - OUTPUT F_CONTOINI CONTO - OUTPUT F_SOTTOCONTOINI CODCF - OUTPUT F_DESCRINI RAGSOC - FLAGS "R" - GROUP 1 -END - -NUMBER F_CONTOINI 3 -BEGIN - PROMPT 41 5 "" - COPY USE F_GRUPPOINI -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI - INPUT CONTO F_CONTOINI - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI GRUPPO - OUTPUT F_CONTOINI CONTO - OUTPUT F_SOTTOCONTOINI CODCF - OUTPUT F_DESCRINI RAGSOC - FLAGS "R" - GROUP 1 -END - -NUMBER F_SOTTOCONTOINI 6 -BEGIN - PROMPT 47 5 "" - COPY USE F_GRUPPOINI -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI - INPUT CONTO F_CONTOINI - INPUT CODCF F_SOTTOCONTOINI - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI GRUPPO - OUTPUT F_CONTOINI CONTO - OUTPUT F_SOTTOCONTOINI CODCF - OUTPUT F_DESCRINI RAGSOC - FLAGS "R" - GROUP 1 -END - -STRING F_DESCRINI 50 -BEGIN - PROMPT 4 6 "Ragione sociale " - FLAGS "D" - GROUP 1 -END - -NUMBER F_GRUPPOFINE 3 -BEGIN - PROMPT 4 7 "A Gruppo - Conto - Sottoconto " - COPY USE F_GRUPPOINI -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE GRUPPO - OUTPUT F_CONTOFINE CONTO - OUTPUT F_SOTTOCONTOFINE CODCF - OUTPUT F_DESCRFINE RAGSOC - FLAGS "R" - GROUP 1 -END - -NUMBER F_CONTOFINE 3 -BEGIN - PROMPT 41 7 "" - COPY USE F_GRUPPOINI -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE - INPUT CONTO F_CONTOFINE - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE GRUPPO - OUTPUT F_CONTOFINE CONTO - OUTPUT F_SOTTOCONTOFINE CODCF - OUTPUT F_DESCRFINE RAGSOC - FLAGS "R" - GROUP 1 -END - -NUMBER F_SOTTOCONTOFINE 6 -BEGIN - PROMPT 47 7 "" - COPY USE F_GRUPPOINI -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE - INPUT CONTO F_CONTOFINE - INPUT CODCF F_SOTTOCONTOFINE - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE GRUPPO - OUTPUT F_CONTOFINE CONTO - OUTPUT F_SOTTOCONTOFINE CODCF - OUTPUT F_DESCRFINE RAGSOC - FLAGS "R" - GROUP 1 -END - -STRING F_DESCRFINE 50 -BEGIN - PROMPT 4 8 "Ragione sociale " - FLAGS "D" - GROUP 1 -END - -NUMBER F_GRUPPOINI2 3 -BEGIN - PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " - USE LF_CLIFO SELECT TIPOCF="F" -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI2 GRUPPO - OUTPUT F_CONTOINI2 CONTO - OUTPUT F_SOTTOCONTOINI2 CODCF - OUTPUT F_DESCRINI2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_GRUPPOINI -END - -NUMBER F_CONTOINI2 3 -BEGIN - PROMPT 41 5 "" - COPY USE F_GRUPPOINI2 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI2 - INPUT CONTO F_CONTOINI2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI2 GRUPPO - OUTPUT F_CONTOINI2 CONTO - OUTPUT F_SOTTOCONTOINI2 CODCF - OUTPUT F_DESCRINI2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_CONTOINI -END - -NUMBER F_SOTTOCONTOINI2 6 -BEGIN - PROMPT 47 5 "" - COPY USE F_GRUPPOINI2 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI2 - INPUT CONTO F_CONTOINI2 - INPUT CODCF F_SOTTOCONTOINI2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOINI2 GRUPPO - OUTPUT F_CONTOINI2 CONTO - OUTPUT F_SOTTOCONTOINI2 CODCF - OUTPUT F_DESCRINI2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_SOTTOCONTOINI -END - -STRING F_DESCRINI2 50 -BEGIN - PROMPT 4 6 "Ragione sociale " - FLAGS "D" - GROUP 2 -END - -NUMBER F_GRUPPOFINE2 3 -BEGIN - PROMPT 4 7 "A Gruppo - Conto - Sottoconto " - COPY USE F_GRUPPOINI2 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE2 GRUPPO - OUTPUT F_CONTOFINE2 CONTO - OUTPUT F_SOTTOCONTOFINE2 CODCF - OUTPUT F_DESCRFINE2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_GRUPPOFINE -END - -NUMBER F_CONTOFINE2 3 -BEGIN - PROMPT 41 7 "" - COPY USE F_GRUPPOINI2 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE2 - INPUT CONTO F_CONTOFINE2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE2 GRUPPO - OUTPUT F_CONTOFINE2 CONTO - OUTPUT F_SOTTOCONTOFINE2 CODCF - OUTPUT F_DESCRFINE2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_CONTOFINE -END - -NUMBER F_SOTTOCONTOFINE2 6 -BEGIN - PROMPT 47 7 "" - COPY USE F_GRUPPOINI2 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE2 - INPUT CONTO F_CONTOFINE2 - INPUT CODCF F_SOTTOCONTOFINE2 - DISPLAY "Tipo" TIPOCF - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Codice" CODCF - DISPLAY "Ragione sociale@50" RAGSOC - OUTPUT F_GRUPPOFINE2 GRUPPO - OUTPUT F_CONTOFINE2 CONTO - OUTPUT F_SOTTOCONTOFINE2 CODCF - OUTPUT F_DESCRFINE2 RAGSOC - FLAGS "R" - GROUP 2 - MESSAGE COPY,F_SOTTOCONTOFINE -END - -STRING F_DESCRFINE2 50 -BEGIN - PROMPT 4 8 "Ragione sociale " - FLAGS "D" - GROUP 2 -END - -NUMBER F_GRUPPOINI3 3 -BEGIN - PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " - USE LF_PCON -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOINI3 GRUPPO - OUTPUT F_CONTOINI3 CONTO - OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO - OUTPUT F_DESCRINI3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_GRUPPOINI -END - -NUMBER F_CONTOINI3 3 -BEGIN - PROMPT 41 5 "" - COPY USE F_GRUPPOINI3 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI3 - INPUT CONTO F_CONTOINI3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOINI3 GRUPPO - OUTPUT F_CONTOINI3 CONTO - OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO - OUTPUT F_DESCRINI3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_CONTOINI -END - -NUMBER F_SOTTOCONTOINI3 6 -BEGIN - PROMPT 47 5 "" - COPY USE F_GRUPPOINI3 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOINI3 - INPUT CONTO F_CONTOINI3 - INPUT SOTTOCONTO F_SOTTOCONTOINI3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOINI3 GRUPPO - OUTPUT F_CONTOINI3 CONTO - OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO - OUTPUT F_DESCRINI3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_SOTTOCONTOINI -END - -STRING F_DESCRINI3 50 -BEGIN - PROMPT 4 6 "Descrizione " - FLAGS "D" - GROUP 3 -END - -NUMBER F_GRUPPOFINE3 3 -BEGIN - PROMPT 4 7 "A Gruppo - Conto - Sottoconto " - COPY USE F_GRUPPOINI3 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOFINE3 GRUPPO - OUTPUT F_CONTOFINE3 CONTO - OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO - OUTPUT F_DESCRFINE3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_GRUPPOFINE -END - -NUMBER F_CONTOFINE3 3 -BEGIN - PROMPT 41 7 "" - COPY USE F_GRUPPOFINE3 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE3 - INPUT CONTO F_CONTOFINE3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOFINE3 GRUPPO - OUTPUT F_CONTOFINE3 CONTO - OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO - OUTPUT F_DESCRFINE3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_CONTOFINE -END - -NUMBER F_SOTTOCONTOFINE3 6 -BEGIN - PROMPT 47 7 "" - COPY USE F_GRUPPOFINE3 -// CHECKTYPE NORMAL - INPUT GRUPPO F_GRUPPOFINE3 - INPUT CONTO F_CONTOFINE3 - INPUT SOTTOCONTO F_SOTTOCONTOFINE3 - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione@50" DESCR - OUTPUT F_GRUPPOFINE3 GRUPPO - OUTPUT F_CONTOFINE3 CONTO - OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO - OUTPUT F_DESCRFINE3 DESCR - FLAGS "R" - GROUP 3 - MESSAGE COPY,F_SOTTOCONTOFINE -END - -STRING F_DESCRFINE3 50 -BEGIN - PROMPT 4 8 "Descrizione " - FLAGS "D" - GROUP 3 -END - -DATE F_DATAINI -BEGIN - PROMPT 4 10 "Data inizio " -END - -DATE F_DATAFINE -BEGIN - PROMPT 51 10 "Data fine " -END - -BOOLEAN F_COMPESE -BEGIN - PROMPT 4 12 "Controllo competenza esercizio" -END - -BOOLEAN F_STAMPAPROGRE -BEGIN - PROMPT 44 12 "Stampa progressivi attuali" -END - -BOOLEAN F_STAMPATOTIVA -BEGIN - PROMPT 4 13 "Stampa totali documenti IVA" -END - -BOOLEAN F_STAMPAMOVPROV -BEGIN - PROMPT 44 13 "Stampa movimenti provvisori" -END - -LIST F_STAMPANUM 15 -BEGIN - PROMPT 4 15 "Stampa numerazione " - ITEM "1|Registrazione" - ITEM "2|Riga giornale" -END - -LIST F_TIPOSTAMPA 34 -BEGIN - PROMPT 4 16 "Tipo stampa " - ITEM "1|Mastrini movimentati nel periodo" - ITEM "2|Mastrini con saldi diversi da 0" - ITEM "3|Completa" -END - - -BOOLEAN F_MEMORIZZA -BEGIN - PROMPT 4 17 "Memorizza scelte" -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -PAGE "" -1 -1 60 10 - -LIST F_NUMCARAT 10 -BEGIN - PROMPT 4 2 "Numero caratteri " - ITEM "1|132 crt." - ITEM "2|198 crt." -END - -LIST F_FORMATO 23 -BEGIN - PROMPT 4 4 "Formato modulo di stampa " - ITEM "66|11 pollici (27,94 cm)" - ITEM "72|12 pollici (30,48 cm)" -END - -LIST F_NUMMAST 5 -BEGIN - PROMPT 4 6 "Numero mastrini per pagina " - ITEM "1|Uno" - ITEM "2|Due" -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_QUIT 9 2 -BEGIN - PROMPT -22 -1 "" -END - - -ENDPAGE - -ENDMASK - - - - - - - +#include "cg3200.h" + +PAGE "" -1 -1 78 20 + + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 4 1 "Ditta " + FLAGS "FRD" + USE LF_NDITTE KEY 1 + CHECKTYPE REQUIRED + INPUT CODDITTA F_CODDITTA + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione sociale @50" RAGSOC + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC +END + +STRING F_RAGSOC 50 +BEGIN + PROMPT 4 2 "Ragione sociale " + FLAGS "D" +END + +NUMBER F_ANNO 4 +BEGIN + PROMPT 47 1 "Anno esercizio " + HELP "Inserire un anno esercizio presente nella tabella oppure niente: in quest'ultimo caso non e' possibile fare il controllo competenza esercizio" + USE ESC + INPUT CODTAB F_ANNO + DISPLAY "Anno Esercizio@50" CODTAB + OUTPUT F_ANNO CODTAB + CHECKTYPE NORMAL +END + +LIST F_RICERCA 25 +BEGIN + PROMPT 4 4 "Ricerca " + ITEM "C|Clienti" + MESSAGE HIDE,2@|HIDE,3@|RESET,2@|RESET,3@|SHOW,1@ + ITEM "F|Fornitori" + MESSAGE HIDE,1@|HIDE,3@|RESET,1@|RESET,3@|SHOW,2@ + ITEM "P|Gruppo/conto/sottoconto" + MESSAGE HIDE,1@|HIDE,2@|RESET,1@|RESET,2@|SHOW,3@ +END + +NUMBER F_GRUPPOINI 3 +BEGIN + PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " + USE LF_CLIFO SELECT TIPOCF="C" +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI GRUPPO + OUTPUT F_CONTOINI CONTO + OUTPUT F_SOTTOCONTOINI CODCF + OUTPUT F_DESCRINI RAGSOC + FLAGS "R" + GROUP 1 +END + +NUMBER F_CONTOINI 3 +BEGIN + PROMPT 41 5 "" + COPY USE F_GRUPPOINI +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI + INPUT CONTO F_CONTOINI + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI GRUPPO + OUTPUT F_CONTOINI CONTO + OUTPUT F_SOTTOCONTOINI CODCF + OUTPUT F_DESCRINI RAGSOC + FLAGS "R" + GROUP 1 +END + +NUMBER F_SOTTOCONTOINI 6 +BEGIN + PROMPT 47 5 "" + COPY USE F_GRUPPOINI +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI + INPUT CONTO F_CONTOINI + INPUT CODCF F_SOTTOCONTOINI + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI GRUPPO + OUTPUT F_CONTOINI CONTO + OUTPUT F_SOTTOCONTOINI CODCF + OUTPUT F_DESCRINI RAGSOC + FLAGS "R" + GROUP 1 +END + +STRING F_DESCRINI 50 +BEGIN + PROMPT 4 6 "Ragione sociale " + FLAGS "D" + GROUP 1 +END + +NUMBER F_GRUPPOFINE 3 +BEGIN + PROMPT 4 7 "A Gruppo - Conto - Sottoconto " + COPY USE F_GRUPPOINI +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE GRUPPO + OUTPUT F_CONTOFINE CONTO + OUTPUT F_SOTTOCONTOFINE CODCF + OUTPUT F_DESCRFINE RAGSOC + FLAGS "R" + GROUP 1 +END + +NUMBER F_CONTOFINE 3 +BEGIN + PROMPT 41 7 "" + COPY USE F_GRUPPOINI +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE + INPUT CONTO F_CONTOFINE + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE GRUPPO + OUTPUT F_CONTOFINE CONTO + OUTPUT F_SOTTOCONTOFINE CODCF + OUTPUT F_DESCRFINE RAGSOC + FLAGS "R" + GROUP 1 +END + +NUMBER F_SOTTOCONTOFINE 6 +BEGIN + PROMPT 47 7 "" + COPY USE F_GRUPPOINI +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE + INPUT CONTO F_CONTOFINE + INPUT CODCF F_SOTTOCONTOFINE + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE GRUPPO + OUTPUT F_CONTOFINE CONTO + OUTPUT F_SOTTOCONTOFINE CODCF + OUTPUT F_DESCRFINE RAGSOC + FLAGS "R" + GROUP 1 +END + +STRING F_DESCRFINE 50 +BEGIN + PROMPT 4 8 "Ragione sociale " + FLAGS "D" + GROUP 1 +END + +NUMBER F_GRUPPOINI2 3 +BEGIN + PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " + USE LF_CLIFO SELECT TIPOCF="F" +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI2 GRUPPO + OUTPUT F_CONTOINI2 CONTO + OUTPUT F_SOTTOCONTOINI2 CODCF + OUTPUT F_DESCRINI2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_GRUPPOINI +END + +NUMBER F_CONTOINI2 3 +BEGIN + PROMPT 41 5 "" + COPY USE F_GRUPPOINI2 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI2 + INPUT CONTO F_CONTOINI2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI2 GRUPPO + OUTPUT F_CONTOINI2 CONTO + OUTPUT F_SOTTOCONTOINI2 CODCF + OUTPUT F_DESCRINI2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_CONTOINI +END + +NUMBER F_SOTTOCONTOINI2 6 +BEGIN + PROMPT 47 5 "" + COPY USE F_GRUPPOINI2 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI2 + INPUT CONTO F_CONTOINI2 + INPUT CODCF F_SOTTOCONTOINI2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOINI2 GRUPPO + OUTPUT F_CONTOINI2 CONTO + OUTPUT F_SOTTOCONTOINI2 CODCF + OUTPUT F_DESCRINI2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_SOTTOCONTOINI +END + +STRING F_DESCRINI2 50 +BEGIN + PROMPT 4 6 "Ragione sociale " + FLAGS "D" + GROUP 2 +END + +NUMBER F_GRUPPOFINE2 3 +BEGIN + PROMPT 4 7 "A Gruppo - Conto - Sottoconto " + COPY USE F_GRUPPOINI2 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE2 GRUPPO + OUTPUT F_CONTOFINE2 CONTO + OUTPUT F_SOTTOCONTOFINE2 CODCF + OUTPUT F_DESCRFINE2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_GRUPPOFINE +END + +NUMBER F_CONTOFINE2 3 +BEGIN + PROMPT 41 7 "" + COPY USE F_GRUPPOINI2 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE2 + INPUT CONTO F_CONTOFINE2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE2 GRUPPO + OUTPUT F_CONTOFINE2 CONTO + OUTPUT F_SOTTOCONTOFINE2 CODCF + OUTPUT F_DESCRFINE2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_CONTOFINE +END + +NUMBER F_SOTTOCONTOFINE2 6 +BEGIN + PROMPT 47 7 "" + COPY USE F_GRUPPOINI2 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE2 + INPUT CONTO F_CONTOFINE2 + INPUT CODCF F_SOTTOCONTOFINE2 + DISPLAY "Tipo" TIPOCF + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Codice" CODCF + DISPLAY "Ragione sociale@50" RAGSOC + OUTPUT F_GRUPPOFINE2 GRUPPO + OUTPUT F_CONTOFINE2 CONTO + OUTPUT F_SOTTOCONTOFINE2 CODCF + OUTPUT F_DESCRFINE2 RAGSOC + FLAGS "R" + GROUP 2 + MESSAGE COPY,F_SOTTOCONTOFINE +END + +STRING F_DESCRFINE2 50 +BEGIN + PROMPT 4 8 "Ragione sociale " + FLAGS "D" + GROUP 2 +END + +NUMBER F_GRUPPOINI3 3 +BEGIN + PROMPT 4 5 "Da Gruppo - Conto - Sottoconto " + USE LF_PCON +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOINI3 GRUPPO + OUTPUT F_CONTOINI3 CONTO + OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO + OUTPUT F_DESCRINI3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_GRUPPOINI +END + +NUMBER F_CONTOINI3 3 +BEGIN + PROMPT 41 5 "" + COPY USE F_GRUPPOINI3 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI3 + INPUT CONTO F_CONTOINI3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOINI3 GRUPPO + OUTPUT F_CONTOINI3 CONTO + OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO + OUTPUT F_DESCRINI3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_CONTOINI +END + +NUMBER F_SOTTOCONTOINI3 6 +BEGIN + PROMPT 47 5 "" + COPY USE F_GRUPPOINI3 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOINI3 + INPUT CONTO F_CONTOINI3 + INPUT SOTTOCONTO F_SOTTOCONTOINI3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOINI3 GRUPPO + OUTPUT F_CONTOINI3 CONTO + OUTPUT F_SOTTOCONTOINI3 SOTTOCONTO + OUTPUT F_DESCRINI3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_SOTTOCONTOINI +END + +STRING F_DESCRINI3 50 +BEGIN + PROMPT 4 6 "Descrizione " + FLAGS "D" + GROUP 3 +END + +NUMBER F_GRUPPOFINE3 3 +BEGIN + PROMPT 4 7 "A Gruppo - Conto - Sottoconto " + COPY USE F_GRUPPOINI3 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOFINE3 GRUPPO + OUTPUT F_CONTOFINE3 CONTO + OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO + OUTPUT F_DESCRFINE3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_GRUPPOFINE +END + +NUMBER F_CONTOFINE3 3 +BEGIN + PROMPT 41 7 "" + COPY USE F_GRUPPOFINE3 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE3 + INPUT CONTO F_CONTOFINE3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOFINE3 GRUPPO + OUTPUT F_CONTOFINE3 CONTO + OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO + OUTPUT F_DESCRFINE3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_CONTOFINE +END + +NUMBER F_SOTTOCONTOFINE3 6 +BEGIN + PROMPT 47 7 "" + COPY USE F_GRUPPOFINE3 +// CHECKTYPE NORMAL + INPUT GRUPPO F_GRUPPOFINE3 + INPUT CONTO F_CONTOFINE3 + INPUT SOTTOCONTO F_SOTTOCONTOFINE3 + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione@50" DESCR + OUTPUT F_GRUPPOFINE3 GRUPPO + OUTPUT F_CONTOFINE3 CONTO + OUTPUT F_SOTTOCONTOFINE3 SOTTOCONTO + OUTPUT F_DESCRFINE3 DESCR + FLAGS "R" + GROUP 3 + MESSAGE COPY,F_SOTTOCONTOFINE +END + +STRING F_DESCRFINE3 50 +BEGIN + PROMPT 4 8 "Descrizione " + FLAGS "D" + GROUP 3 +END + +DATE F_DATAINI +BEGIN + PROMPT 4 10 "Data inizio " +END + +DATE F_DATAFINE +BEGIN + PROMPT 51 10 "Data fine " +END + +BOOLEAN F_COMPESE +BEGIN + PROMPT 4 12 "Controllo competenza esercizio" +END + +BOOLEAN F_STAMPAPROGRE +BEGIN + PROMPT 44 12 "Stampa progressivi attuali" +END + +BOOLEAN F_STAMPATOTIVA +BEGIN + PROMPT 4 13 "Stampa totali documenti IVA" +END + +BOOLEAN F_STAMPAMOVPROV +BEGIN + PROMPT 44 13 "Stampa movimenti provvisori" +END + +LIST F_STAMPANUM 15 +BEGIN + PROMPT 4 15 "Stampa numerazione " + ITEM "1|Registrazione" + ITEM "2|Riga giornale" +END + +LIST F_TIPOSTAMPA 34 +BEGIN + PROMPT 4 16 "Tipo stampa " + ITEM "1|Mastrini movimentati nel periodo" + ITEM "2|Mastrini con saldi diversi da 0" + ITEM "3|Completa" +END + + +BOOLEAN F_MEMORIZZA +BEGIN + PROMPT 4 17 "Memorizza scelte" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +PAGE "" -1 -1 60 10 + +LIST F_NUMCARAT 10 +BEGIN + PROMPT 4 2 "Numero caratteri " + ITEM "1|132 crt." + ITEM "2|198 crt." +END + +LIST F_FORMATO 23 +BEGIN + PROMPT 4 4 "Formato modulo di stampa " + ITEM "66|11 pollici (27,94 cm)" + ITEM "72|12 pollici (30,48 cm)" +END + +LIST F_NUMMAST 5 +BEGIN + PROMPT 4 6 "Numero mastrini per pagina " + ITEM "1|Uno" + ITEM "2|Due" +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_QUIT 9 2 +BEGIN + PROMPT -22 -1 "" +END + + +ENDPAGE + +ENDMASK + + + + + + + diff --git a/cg/cg4600.cpp b/cg/cg4600.cpp index 38f8037a5..cc392723e 100755 --- a/cg/cg4600.cpp +++ b/cg/cg4600.cpp @@ -1,1328 +1,1328 @@ -// Chiusura/Apertura Conti - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -bool mask_datac (TMask_field&, KEY); -bool mask_dataap (TMask_field&, KEY); -bool mask_distinti (TMask_field&, KEY); - -#define MAX 200 - -class CG4600_application : public TApplication -{ - friend bool mask_datac (TMask_field&, KEY); - friend bool mask_dataap (TMask_field&, KEY); - friend bool mask_distinti (TMask_field&, KEY); - - TTable* _esc, * _reg; - TRelation* _rel; - TMovimentoPN* _pn; - TLocalisamfile* _saldi; - TRectype* _rec; - TLocalisamfile* _mov; - TCursor* _cur; - TSaldo_agg* _sld; - Saldo* _sale; - TConto _tcbilch,_tcproper,_tcbilap,_tcutilp,_tcperdp,_tcutile,_tcperde, _conto_corrente; - - real _saldo, _totale_saldo; - int _annoesch, _annoesap; - long _numreg; - TDate _dataregap, _dataregch; - TString _codcausap, _codcausch; - -public: - virtual bool create(); - virtual bool destroy(); - virtual bool menu(MENU_TAG m); - void costi (); - void ricavi(); - void attivita(); - void passivita(); - void rmov_proper (int, long, TDate&, TRectype&, TConto&, real&, bool); - void ultima_registrazione(); - void compila_testata(int,TDate&,TString&); - void chiusura_conto_economico(); - void chiusura_conto_patrimoniale(); - bool set(); -// bool epilogo_conti(); - - CG4600_application() {} -}; - -HIDDEN CG4600_application* app() { return (CG4600_application *) MainApp(); } - -bool mask_datac (TMask_field& f, KEY k) -{ - TTable TabEs ("ESC"); - TTable TabReg("REG"); - TString annos (4); - int anno = 0;; - bool ok = TRUE; - - if ( (k == K_ENTER) && f.to_check(k) ) - { - TabEs.last(); - TDate inizio = TabEs.get_date("D0"); - TDate fine = TabEs.get_date("D1"); - TDate scarico = TabEs.get_date("D2"); - TabEs.prev(); - TDate iniziop = TabEs.get_date("D0"); - TDate finep = TabEs.get_date("D1"); - if (f.get() < finep) - { - f.warning_box ("La data di chiusura non puo' essere inferiore alla data di fine esercizio precedente"); - return FALSE; - } - if (f.get() > fine) - { - f.warning_box ("La data di chiusura non puo' essere superiore alla data di fine esercizio in corso"); - return FALSE; - } - if ( scarico.ok() && (f.get() <= scarico) ) - { - f.warning_box ("La data di chiusura non puo' essere inferiore o uguale alla data di scarico"); - return FALSE; - } - if ( (f.get() >= inizio) && (f.get() <= fine) ) //la data di chiusura e' cioe' relativa all'esercizio in corso - anno = fine.year(); - else if ( (f.get() >= iniziop) && (f.get() <= finep) ) //la data di chiusura e' cioe' relativa all'esercizio precedente - anno = finep.year(); - - TabReg.zero(); - annos = format ("%04d", anno); - TabReg.put ("CODTAB", annos); - TRectype r (TabReg.curr()); - TabReg.read(_isgteq); - for (; !TabReg.eof(); TabReg.next()) - { - if (TabReg.curr() != r) break; - - int tiporeg = TabReg.get_int("I0"); - if (tiporeg == 5) - { - TDate datast = TabReg.get_date("D3"); - if (f.get() < datast.string()) - { - ok = FALSE; - break; - } - } - } - if (!ok) - { - f.warning_box("La data di chiusura non puo' essere inferiore alla data ultima stampa bollato"); - return FALSE; - } - } - return TRUE; -} - -bool mask_dataap (TMask_field& f, KEY k) -{ - TTable TabEs ("ESC"); - TTable TabReg("REG"); - int anno = 0; - TString annos (4); - bool ok = TRUE; - - if ( (k == K_ENTER) && f.to_check(k) ) - { - TabEs.last(); - TDate inizio = TabEs.get_date("D0"); - TDate fine = TabEs.get_date("D1"); - TDate scarico = TabEs.get_date("D2"); - TabEs.prev(); - TDate iniziop = TabEs.get_date("D0"); - TDate finep = TabEs.get_date("D1"); - if (f.get() < inizio) - { - f.warning_box ("La data di apertura non puo' essere inferiore alla data di inizio esercizio in corso"); - return FALSE; - } - if (f.get() > fine) - { - f.warning_box ("La data di apertura non puo' essere superiore alla data di fine esercizio in corso"); - return FALSE; - } - if ( scarico.ok() && (f.get() <= scarico) ) - { - f.warning_box ("La data di apertura non puo' essere inferiore o uguale alla data di scarico"); - return FALSE; - } - - if ( (f.get() >= inizio) && (f.get() <= fine) ) //la data di apertura e' cioe' relativa all'esercizio in corso - anno = fine.year(); - else if( (f.get() >= iniziop) && (f.get() <= finep) ) //la data di apertura e' cioe' relativa all'esercizio precedente - anno = finep.year(); - - TabReg.zero(); - annos = format ("%04d", anno); - TabReg.put ("CODTAB", annos); - TRectype r (TabReg.curr()); - TabReg.read(_isgteq); - for (; !TabReg.eof(); TabReg.next()) - { - if (TabReg.curr() != r) break; - - int tiporeg = TabReg.get_int("I0"); - if (tiporeg == 5) - { - TDate datast = TabReg.get_date("D3"); - if (f.get() < datast) - { - ok = FALSE; - break; - } - } - } - if (!ok) - { - f.warning_box("La data di apertura non puo' essere inferiore alla data ultima stampa bollato"); - return FALSE; - } - } - return TRUE; -} - -bool mask_distinti (TMask_field& f, KEY k) -{ - int idg,idc,ids,idg1,idc1,ids1; - - if (k == K_ENTER) - { - idg = 108; - idc = 109; - ids = 110; - - for (int i = 0; i < 7; i++) - { - int g = f.mask().get_int(idg); - int c = f.mask().get_int(idc); - long s = f.mask().get_long(ids); - - idg1 = idg; - idc1 = idc; - ids1 = ids; - - for (int j = i+1; j < 7; j++) - { - idg1 = idg1 + 3; - idc1 = idc1 + 3; - ids1 = ids1 + 3; - - int gruppo = f.mask().get_int(idg1); - int conto = f.mask().get_int(idc1); - long sottoc = f.mask().get_long(ids1); - - if ((g == gruppo)&&(c == conto)&&(s == sottoc)) - { - f.warning_box("Nessun sottoconto puo' essere ripetuto!"); - return FALSE; - } - } - - idg = idg + 3; - idc = idc + 3; - ids = ids + 3; - - } - } - return TRUE; -} - -bool CG4600_application::create() -{ - TApplication::create(); - - _rel = new TRelation (LF_PCON); - - _cur = new TCursor(_rel,"((GRUPPO!=\"\")&&(CONTO!=\"\")&&(SOTTOCONTO==\"\"))",1); - - _pn = new TMovimentoPN(); - _saldi = new TLocalisamfile (LF_SALDI); - _rec = new TRectype(LF_SALDI); - _mov = new TLocalisamfile (LF_MOV); - _esc = new TTable ("ESC"); - _reg = new TTable ("REG"); - _sld = new TSaldo_agg(); - _sale = new Saldo(); - - dispatch_e_menu (BAR_ITEM(1)); - - return TRUE; -} - -bool CG4600_application::destroy() -{ - delete _saldi; - delete _sale; - delete _mov; - delete _esc; - delete _reg; - delete _pn; - delete _rel; - delete _cur; - delete _sld; - delete _rec; - - return TApplication::destroy(); -} - -void CG4600_application::ultima_registrazione() -{ - long numregmov; - - _mov->setkey(1); //Leggo il numero di registrazione - _mov->last(); //dell'ultimo record di mov, e lo - numregmov = _mov->get_long(MOV_NUMREG); //incremento di uno per ottenere - _numreg = numregmov + 1; //un numero di registrazione - //sicuramente non esistente. -} - -bool CG4600_application::set() -{ - TTable TabEs ("ESC"); - TMask m ("cg4600a"); - KEY tasto; - int gbilch, cbilch , gproper, cproper, gbilap, cbilap, gutilp; - int cutilp, gperdp, cperdp, gutile, cutile, gperde, cperde; - long sbilch, sproper, sbilap, sutilp, sperdp, sutile, sperde; - - - TConfig conf(CONFIG_DITTA); - - m.set(F_CHIUSURA, conf.get("CoCaCh")); - m.set(F_APERTURA, conf.get("CoCaAp")); - - TabEs.last(); - int annoap = TabEs.get_int ("CODTAB"); - TDate inizio = TabEs.get_date("D0"); //data inizio es. in corso - TabEs.prev(); - int annoch = TabEs.get_int ("CODTAB"); - TDate fine = TabEs.get_date("D1"); //data fine es. precedente - m.set(F_ANNO, annoap); - m.set(F_ANNOCH, annoch); - m.set(F_DATAC, fine.string()); - m.set(F_DATAAP,inizio.string()); - - m.set(F_BILCHG, conf.get("CsBiChG")); - m.set(F_BILCHC, conf.get("CsBiChC")); - m.set(F_BILCHS, conf.get("CsBiChS")); - m.set(F_PROPERG, conf.get("CsPrPeG")); - m.set(F_PROPERC, conf.get("CsPrPeC")); - m.set(F_PROPERS, conf.get("CsPrPeS")); - m.set(F_BILAPG, conf.get("CsBiApG")); - m.set(F_BILAPC, conf.get("CsBiApC")); - m.set(F_BILAPS, conf.get("CsBiApS")); - m.set(F_UTILPG, conf.get("CsUeCpG")); - m.set(F_UTILPC, conf.get("CsUeCpC")); - m.set(F_UTILPS, conf.get("CsUeCpS")); - m.set(F_PERDPG, conf.get("CsPeCpG")); - m.set(F_PERDPC, conf.get("CsPeCpC")); - m.set(F_PERDPS, conf.get("CsPeCpS")); - m.set(F_UTILEG, conf.get("CsUeCeG")); - m.set(F_UTILEC, conf.get("CsUeCeC")); - m.set(F_UTILES, conf.get("CsUeCeS")); - m.set(F_PERDEG, conf.get("CsPeCeG")); - m.set(F_PERDEC, conf.get("CsPeCeC")); - m.set(F_PERDES, conf.get("CsPeCeS")); - - m.set_handler (F_DATAC, mask_datac); - m.set_handler (F_DATAAP, mask_dataap); - m.set_handler (F_PERDES, mask_distinti); - - tasto = m.run(); - - if (tasto == K_ENTER) - { - _annoesch = m.get_int(F_ANNOCH); - _annoesap = m.get_int(F_ANNO); - _dataregch = m.get (F_DATAC); - _codcausch = m.get (F_CHIUSURA); - _dataregap = m.get (F_DATAAP); - _codcausap = m.get (F_APERTURA); - gbilch = m.get_int (F_BILCHG); - cbilch = m.get_int (F_BILCHC); - sbilch = m.get_long(F_BILCHS); - gproper = m.get_int (F_PROPERG); - cproper = m.get_int (F_PROPERC); - sproper = m.get_long(F_PROPERS); - gbilap = m.get_int (F_BILAPG); - cbilap = m.get_int (F_BILAPC); - sbilap = m.get_long(F_BILAPS); - gutilp = m.get_int (F_UTILPG); - cutilp = m.get_int (F_UTILPC); - sutilp = m.get_long(F_UTILPS); - gperdp = m.get_int (F_PERDPG); - cperdp = m.get_int (F_PERDPC); - sperdp = m.get_long(F_PERDPS); - gutile = m.get_int (F_UTILEG); - cutile = m.get_int (F_UTILEC); - sutile = m.get_long(F_UTILES); - gperde = m.get_int (F_PERDEG); - cperde = m.get_int (F_PERDEC); - sperde = m.get_long(F_PERDES); - - _tcbilch.set (gbilch,cbilch,sbilch); - _tcproper.set(gproper,cproper,sproper); - _tcbilap.set (gbilap,cbilap,sbilap); - _tcutilp.set (gutilp,cutilp,sutilp); - _tcperdp.set (gperdp,cperdp,sperdp); - _tcutile.set (gutile,cutile,sutile); - _tcperde.set (gperde,cperde,sperde); - - ultima_registrazione(); -// anno_ese_precedente(); - - (*_cur) = 0L; - - _sld->set_anno_es(_annoesch); - _sld->set_movprovv(FALSE); - _sld->set_movap(FALSE); - - costi (); - - _sld->reset(); //Azzera la tabella dei conti dell'oggetto TSaldo_agg - _pn->destroy_rows(); //Azzero l'oggetto pn. - ultima_registrazione(); - *_cur = 0l; - - ricavi(); - _sld->reset(); - - chiusura_conto_economico(); - _totale_saldo = ZERO; - _sld->reset(); - - _pn->destroy_rows(); //Azzero l'oggetto pn. - ultima_registrazione(); - *_cur = 0l; - - attivita(); - _sld->reset(); - - _pn->destroy_rows(); //Azzero l'oggetto pn. - ultima_registrazione(); - *_cur = 0l; - - passivita(); - _sld->reset(); - chiusura_conto_patrimoniale(); - - return TRUE; - } //K_ENTER - return FALSE; -} - -void CG4600_application::compila_testata(int annoes,TDate& datareg, TString& codcaus) -{ - _pn->lfile()->zero(); - _pn->lfile()->put(MOV_ANNOES, annoes); //Viene generato un mov - _pn->lfile()->put(MOV_DATAREG, datareg); //quando si incontra il - _pn->lfile()->put(MOV_CODCAUS, codcaus); //primo conto con indbil - _pn->lfile()->put(MOV_NUMREG, _numreg); -} - -void CG4600_application::rmov_proper(int anno,long numrig,TDate& datareg,TRectype& rmov, TConto& tc,real& tot_saldo, bool sezione_opposta) -{ - char sez_rmov = ' '; - char sezione = ' '; - real totale = tot_saldo; - - rmov.zero(); - rmov.put(RMV_ANNOES, anno); - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_NUMRIG, numrig); - rmov.put(RMV_DATAREG, datareg); - rmov.put(RMV_GRUPPO, tc.gruppo()); - rmov.put(RMV_CONTO, tc.conto()); - rmov.put(RMV_SOTTOCONTO, tc.sottoconto()); - - if (totale > ZERO) - { - sez_rmov = 'A'; - sezione = 'D'; - } - else - if (totale < ZERO) - { - sez_rmov = 'D'; - sezione = 'A'; - totale = -totale; - } - - if (sezione_opposta) - { - rmov.put(RMV_SEZIONE, sez_rmov); - _sld->aggiorna(tc,totale,sez_rmov);//Aggiorno anche i saldi con l'oggetto - //TSaldo_agg - } - else - { - rmov.put(RMV_SEZIONE, sezione); - _sld->aggiorna(tc,totale,sezione);//Aggiorno anche i saldi con l'oggetto - //TSaldo_agg - } - rmov.put(RMV_IMPORTO, totale); -} - -void CG4600_application::costi() -{ - bool compila_mov = TRUE; - long s; - char sez_rmov = ' ', sezione = ' '; - real tot_saldo; - long numrig = 0; - Saldo& sale = *_sale; - - _totale_saldo = ZERO; - tot_saldo = ZERO; - - TRecnotype items_pcon = _cur->items(); - - for (int i = 0; i < items_pcon; i++, ++(*_cur)) - { - int indbil = _cur->curr().get_int(PCN_INDBIL); - int g = _cur->curr().get_int(PCN_GRUPPO); - int c = _cur->curr().get_int(PCN_CONTO); - - if (indbil == 3) - { - if (compila_mov) - { - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 1 - compila_mov = FALSE; - } - _saldi->setkey(1); - _saldi->zero(); - _saldi->put(SLD_ANNOES, _annoesch); - _saldi->put(SLD_GRUPPO, g); - _saldi->put(SLD_CONTO, c); - - (*_rec) = _saldi->curr(); - - int j = 0; - - for (_saldi->read(); ; _saldi->next()) - { - TRectype& rmov = _pn->cg(j); - - _saldo = ZERO; - - if (_saldi->curr() > (*_rec) || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso conto, indicandola - // con una sezione opposta al risultato (della somma). - - if (j >= 1) - { - numrig++; - rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); - - tot_saldo = ZERO; - } - break; - } - - numrig++; - s = _saldi->get_long(SLD_SOTTOCONTO); - sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); - _saldo = sale.saldo(); - - if (_saldo.is_zero()) continue; - - if (_saldo > ZERO) - sezione = 'D'; - else - if (_saldo < ZERO) - { - sezione = 'A'; - _saldo = -_saldo; - } - - if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli - { // importi trovati sui saldi. Quando ho - sez_rmov = 'A'; // finito di leggere i sottoconti, oppure - tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 - _totale_saldo += _saldo; - } // righe di movimento, genero un' altra - else // riga con importo di sezione opposta - if (sezione == 'A') // alla somma, mandando a zero - { // il saldo di quel movimento. - sez_rmov = 'D'; - tot_saldo -= _saldo; - _totale_saldo -= _saldo; - } - - if (j == MAX || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso sottoconto, indicandola - // con una sezione opposta al risultato (della somma). - -// numrig++; - rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); - - tot_saldo = ZERO; - } - if (!_saldi->eof()) - { - - rmov.zero(); - rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento - rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo - rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste - rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 - rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la - rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a - rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_NUMRIG, numrig); - - TConto tc(g,c,s); - _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg - j++; - } - if (_saldi->eof()) break; - } //for saldi - if (j >= 1) - { - _pn->write(); - _sld->registra(); - j = 0; - _pn->destroy_rows(); //Azzero l'oggetto pn. - } - } // if (indbil == 3) - } // for pcon -} - -void CG4600_application::ricavi() -{ - bool compila_mov = TRUE; - long s; - char sez_rmov = ' ', sezione = ' '; - real tot_saldo; - long numrig = 0; - Saldo& sale = *_sale; - - tot_saldo = ZERO; - - TRecnotype items_pcon = _cur->items(); - - for (int i = 0; i < items_pcon; i++, ++(*_cur)) - { - int indbil = _cur->curr().get_int(PCN_INDBIL); - int g = _cur->curr().get_int(PCN_GRUPPO); - int c = _cur->curr().get_int(PCN_CONTO); - - if (indbil == 4) - { - if (compila_mov) - { - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 2 - compila_mov = FALSE; - } - _saldi->setkey(1); - _saldi->zero(); - _saldi->put(SLD_ANNOES, _annoesch); - _saldi->put(SLD_GRUPPO, g); - _saldi->put(SLD_CONTO, c); - - (*_rec) = _saldi->curr(); - - int j = 0; - - for (_saldi->read(); ; _saldi->next()) - { - TRectype& rmov = _pn->cg(j); - - _saldo = ZERO; - - if (_saldi->curr() > (*_rec) || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso conto, indicandola - // con una sezione opposta al risultato (della somma). - - if (j >= 1) - { - numrig++; - rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); - - tot_saldo = ZERO; - } - break; - } - - numrig++; - s = _saldi->get_long(SLD_SOTTOCONTO); - sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); - _saldo = sale.saldo(); - - if (_saldo.is_zero()) continue; - - if (_saldo > ZERO) - sezione = 'D'; - else - if (_saldo < ZERO) - { - sezione = 'A'; - _saldo = -_saldo; - } - - if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli - { // importi trovati sui saldi. Quando ho - sez_rmov = 'A'; // finito di leggere i sottoconti, oppure - tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 - _totale_saldo += _saldo; - } // righe di movimento, genero un' altra - else // riga con importo di sezione opposta - if (sezione == 'A') // alla somma, mandando a zero - { // il saldo di quel movimento. - sez_rmov = 'D'; - tot_saldo -= _saldo; - _totale_saldo -= _saldo; - } - - if (j == MAX || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso sottoconto, indicandola - // con una sezione opposta al risultato (della somma). - -// numrig++; - rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); - - tot_saldo = ZERO; - } - if (!_saldi->eof()) - { - - rmov.zero(); - rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento - rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo - rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste - rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 - rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la - rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a - rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_NUMRIG, numrig); - - TConto tc(g,c,s); - _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg - j++; - } - if (_saldi->eof()) break; - } //for saldi - if (j >= 1) - { - _pn->write(); - _sld->registra(); - j = 0; - _pn->destroy_rows(); //Azzero l'oggetto pn. - } - } // if (indbil == 4) - } // for pcon -} - -void CG4600_application::chiusura_conto_economico() -{ - if (_totale_saldo > ZERO) - { - int j; - -//Compilo la testata per perdite di es. c.economico a Profitti e Perdite -//Chiusura conto economico - - j = 0; - ultima_registrazione(); - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 3 - - TRectype& rmov1 = _pn->cg(j); - long numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcproper,_totale_saldo,TRUE); - numrig++; - j++; - TRectype& rmov2 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcperde,_totale_saldo,FALSE); - - _pn->write(); - _sld->registra(); - _sld->reset(); - -//Compilo la testata per perdite di es. c.patrimon. a Perdita di es. c. econom. -//Chiusura capitale netto - - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 4 - - TRectype& rmov3 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov3,_tcperde,_totale_saldo,TRUE); - numrig++; - j++; - TRectype& rmov4 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov4,_tcperdp,_totale_saldo,FALSE); - - _pn->write(); - _sld->registra(); - _sld->reset(); - - //Compilo la testata per Perdita es. c/to patrimoniale a Bilancio di apertura - //Apertura capitale netto - - _sld->set_anno_es(_annoesap); - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - - compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 10 - - TRectype& rmov5 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesap,numrig,_dataregap,rmov5,_tcbilap,_totale_saldo,TRUE); - numrig++; - j++; - TRectype& rmov6 = _pn->cg(j); - rmov_proper(_annoesap,numrig,_dataregap,rmov6,_tcperdp,_totale_saldo,FALSE); - - _pn->write(); - _sld->registra(); - _sld->set_anno_es(_annoesch); - } - else - if (_totale_saldo < ZERO) - { - int j; - -//Compilo la testata per Profitti e perdite a Utile di es. c.economico -//Chiusura conto economico - - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 3 - - TRectype& rmov1 = _pn->cg(j); - long numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcutile,_totale_saldo,FALSE); - numrig++; - j++; - TRectype& rmov2 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcproper,_totale_saldo,TRUE); - - _pn ->write(); - _sld->registra(); - _sld->reset(); - -//Compilo la testata per Utile di es. c.economico a Utile di es. c.patrimoniale -//Chiusura capitale netto - - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 4 - - TRectype& rmov3 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov3,_tcutilp,_totale_saldo,FALSE); - numrig++; - j++; - TRectype& rmov4 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov4,_tcutile,_totale_saldo,TRUE); - - _pn ->write(); - _sld->registra(); - _sld->reset(); - - //Compilo la testata per Bilancio di apertura a Utile es. c/to patrimoniale - //Apertura capitale netto - - _sld->set_anno_es(_annoesap); - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - - compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 10 - - TRectype& rmov5 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesap,numrig,_dataregap,rmov5,_tcbilap,_totale_saldo,TRUE); - numrig++; - j++; - TRectype& rmov6 = _pn->cg(j); - rmov_proper(_annoesap,numrig,_dataregap,rmov6,_tcutilp,_totale_saldo,FALSE); - - _pn->write(); - _sld->registra(); - _sld->set_anno_es(_annoesch); - - - } -} - -void CG4600_application::chiusura_conto_patrimoniale() -{ - int j; - long numrig; - - if (_totale_saldo > ZERO) - { -//Compilo la testata per Bilancio di chiusura a Perdita di es. c. patrimoniale -//Chiusura conto patrimoniale - - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 7 - - TRectype& rmov1 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcutilp,_totale_saldo,FALSE); - numrig++; - j++; - TRectype& rmov2 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcbilch,_totale_saldo,TRUE); - - _pn->write(); - _sld->registra(); - - } - else - if (_totale_saldo < ZERO) - { -//Compilo la testata per Utile di es. c.patrimon. a Bilancio di chiusura -//Chiusura conto patrimoniale - - _pn->destroy_rows(); //Azzero l'oggetto pn. - j = 0; - ultima_registrazione(); - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 7 - - TRectype& rmov1 = _pn->cg(j); - numrig = 1; - rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcbilch,_totale_saldo,TRUE); - numrig++; - j++; - TRectype& rmov2 = _pn->cg(j); - rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcperdp,_totale_saldo,FALSE); - - _pn ->write(); - _sld->registra(); - } -} - -void CG4600_application::attivita() -{ - bool compila_mov_ch = TRUE; - bool compila_mov_ap = TRUE; - long s; - char sez_rmov = ' ', sezione = ' '; - real tot_saldo; - long numrig = 0; - Saldo& sale = *_sale; - - tot_saldo = ZERO; - - TRecnotype items_pcon = _cur->items(); - - for (int i = 0; i < items_pcon; i++, ++(*_cur)) - { - _sld->set_anno_es(_annoesch); - - int indbil = _cur->curr().get_int(PCN_INDBIL); - int g = _cur->curr().get_int(PCN_GRUPPO); - int c = _cur->curr().get_int(PCN_CONTO); - - if (indbil == 1) - { - if (compila_mov_ch) - { - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 5 Chiusura - compila_mov_ch = FALSE; - } - _saldi->setkey(1); - _saldi->zero(); - _saldi->put(SLD_ANNOES, _annoesch); - _saldi->put(SLD_GRUPPO, g); - _saldi->put(SLD_CONTO, c); - - TRectype rec (_saldi->curr()); - - int j = 0; - - for (_saldi->read(); ; _saldi->next()) - { - TRectype& rmov = _pn->cg(j); - - if (_saldi->curr() > rec || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso conto, indicandola - // con una sezione opposta al risultato (della somma). - - if (j >= 1) - { - numrig++; - rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura - - tot_saldo = ZERO; - } - break; - } - - numrig++; - s = _saldi->get_long(SLD_SOTTOCONTO); - sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); - _saldo = sale.saldo(); - - if (_saldo == ZERO) continue; - - if (_saldo > ZERO) - sezione = 'D'; - else - if (_saldo < ZERO) - { - sezione = 'A'; - _saldo = -_saldo; - } - - if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli - { // importi trovati sui saldi. Quando ho - sez_rmov = 'A'; // finito di leggere i sottoconti, oppure - tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 - _totale_saldo += _saldo; - } // righe di movimento, genero un' altra - else // riga con importo di sezione opposta - if (sezione == 'A') // alla somma, mandando a zero - { // il saldo di quel movimento. - sez_rmov = 'D'; - tot_saldo -= _saldo; - _totale_saldo -= _saldo; - } - - if (j == MAX || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso sottoconto, indicandola - // con una sezione opposta al risultato (della somma). - -// numrig++; - rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura - - tot_saldo = ZERO; - } - if (!_saldi->eof()) - { - - rmov.zero(); - rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento - rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo - rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste - rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 - rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la - rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a - rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_NUMRIG, numrig); - - TConto tc(g,c,s); - _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg - - j++; - } - if (_saldi->eof()) break; - } //for saldi - if (j >= 1) - { - _pn->write(); - _sld->registra(); - _sld->reset(); - j = 0; - - long items_pn = _pn->cg_items(); - _sld->set_anno_es(_annoesap); - - if (compila_mov_ap) - { - ultima_registrazione(); - compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 8 Apertura - compila_mov_ap = FALSE; - } - - for (int i = 0; i < items_pn; i++) - { - char sez_rmov; - TRectype& rmov = _pn->cg(j); - - char sezione = rmov.get (RMV_SEZIONE)[0]; - int gruppo = rmov.get_int (RMV_GRUPPO); - int conto = rmov.get_int (RMV_CONTO); - long sottoc = rmov.get_long(RMV_SOTTOCONTO); - real importo = rmov.get_real(RMV_IMPORTO); - - if (sezione == 'D') - sez_rmov = 'A'; - else - if (sezione == 'A') - sez_rmov = 'D'; - - rmov.put(RMV_ANNOES, _annoesap); - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_DATAREG, _dataregap); - - if (i == (items_pn - 1)) //Quando incontro il conto - { - rmov.put(RMV_GRUPPO, _tcbilap.gruppo()); - rmov.put(RMV_CONTO, _tcbilap.conto()); - rmov.put(RMV_SOTTOCONTO, _tcbilap.sottoconto()); //bilancio di chiusura lo - rmov.put(RMV_SEZIONE, sez_rmov); //sostituisco con quello di - _sld->aggiorna(_tcbilap,importo,sez_rmov); //apertura, non girando l'importo - } //perche' non l'avevo girato - else //precedentemente, mentre per gli altri - { //conti l'importo deve essere girato, - rmov.put(RMV_SEZIONE, sez_rmov); //perche' erano gia' stati girati - TConto tc(gruppo,conto,sottoc); //precedentemente per fare la chiusura - _sld->aggiorna(tc,importo,sez_rmov); - } - j++; - } - - _pn->write(); - _sld->registra(); - j = 0; - _pn->destroy_rows(); //Azzero l'oggetto pn. - } - } // if (indbil == 1) - } // for pcon -} - -void CG4600_application::passivita() -{ - bool compila_mov_ch = TRUE; - bool compila_mov_ap = TRUE; - long s; - char sez_rmov = ' ', sezione = ' '; - real tot_saldo; - long numrig = 0; - Saldo& sale = *_sale; - - tot_saldo = ZERO; - - TRecnotype items_pcon = _cur->items(); - - for (int i = 0; i < items_pcon; i++, ++(*_cur)) - { - _sld->set_anno_es(_annoesch); - - int indbil = _cur->curr().get_int(PCN_INDBIL); - int g = _cur->curr().get_int(PCN_GRUPPO); - int c = _cur->curr().get_int(PCN_CONTO); - - if (indbil == 2) - { - if (compila_mov_ch) - { - compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 6 Chiusura - compila_mov_ch = FALSE; - } - _saldi->setkey(1); - _saldi->zero(); - _saldi->put(SLD_ANNOES, _annoesch); - _saldi->put(SLD_GRUPPO, g); - _saldi->put(SLD_CONTO, c); - - TRectype rec (_saldi->curr()); - - int j = 0; - - for (_saldi->read(); ; _saldi->next()) - { - TRectype& rmov = _pn->cg(j); - - if (_saldi->curr() > rec || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso conto, indicandola - // con una sezione opposta al risultato (della somma). - - if (j >= 1) - { - numrig++; - rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura - - tot_saldo = ZERO; - } - break; - } - - numrig++; - s = _saldi->get_long(SLD_SOTTOCONTO); - sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); - _saldo = sale.saldo(); - - if (_saldo.is_zero()) continue; - - if (_saldo > ZERO) - sezione = 'D'; - else - if (_saldo < ZERO) - { - sezione = 'A'; - _saldo = -_saldo; - } - - if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli - { // importi trovati sui saldi. Quando ho - sez_rmov = 'A'; // finito di leggere i sottoconti, oppure - tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 - _totale_saldo += _saldo; - } // righe di movimento, genero un' altra - else // riga con importo di sezione opposta - if (sezione == 'A') // alla somma, mandando a zero - { // il saldo di quel movimento. - sez_rmov = 'D'; - tot_saldo -= _saldo; - _totale_saldo -= _saldo; - } - - if (j == MAX || _saldi->eof()) - { - // Aggiungo un ulteriore riga di movimento contenente la somma - // di tutti i saldi aventi lo stesso sottoconto, indicandola - // con una sezione opposta al risultato (della somma). - -// numrig++; - rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura - - tot_saldo = ZERO; - } - if (!_saldi->eof()) - { - - rmov.zero(); - rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento - rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo - rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste - rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 - rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la - rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a - rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_NUMRIG, numrig); - - TConto tc(g,c,s); - _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg - - j++; - } - if (_saldi->eof()) break; - } //for saldi - if (j >= 1) - { - _pn->write(); - _sld->registra(); - _sld->reset(); - j = 0; - - long items_pn = _pn->cg_items(); - _sld->set_anno_es(_annoesap); - - if (compila_mov_ap) - { - ultima_registrazione(); - compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 9 Apertura - compila_mov_ap = FALSE; - } - - for (int i = 0; i < items_pn; i++) - { - char sez_rmov; - TRectype& rmov = _pn->cg(j); - - char sezione = rmov.get (RMV_SEZIONE)[0]; - int gruppo = rmov.get_int (RMV_GRUPPO); - int conto = rmov.get_int (RMV_CONTO); - long sottoc = rmov.get_long(RMV_SOTTOCONTO); - real importo = rmov.get_real(RMV_IMPORTO); - - if (sezione == 'D') - sez_rmov = 'A'; - else - if (sezione == 'A') - sez_rmov = 'D'; - - rmov.put(RMV_ANNOES, _annoesap); - rmov.put(RMV_NUMREG, _numreg); - rmov.put(RMV_DATAREG, _dataregap); - - if (i == (items_pn - 1)) //Quando incontro il conto - { - rmov.put(RMV_GRUPPO, _tcbilap.gruppo()); - rmov.put(RMV_CONTO, _tcbilap.conto()); - rmov.put(RMV_SOTTOCONTO, _tcbilap.sottoconto()); //bilancio di chiusura lo - rmov.put(RMV_SEZIONE, sez_rmov); //sostituisco con quello di - _sld->aggiorna(_tcbilap,importo,sez_rmov); //apertura, non girando l'importo - } //perche' non l'avevo girato - else //precedentemente, mentre per gli altri - { //conti l'importo deve essere girato, - rmov.put(RMV_SEZIONE, sez_rmov); //perche' erano gia' stati girati - TConto tc(gruppo,conto,sottoc); //precedentemente per fare la chiusura - _sld->aggiorna(tc,importo,sez_rmov); - } - j++; - } - - _pn->write(); - _sld->registra(); - j = 0; - _pn->destroy_rows(); - } - } // if (indbil == 2) - } // for pcon -} - -bool CG4600_application::menu(MENU_TAG m) -{ - if (m == BAR_ITEM(1)) - return set(); - return FALSE; -} - -int /*main */ cg4600 (int argc, char* argv[]) -{ - CG4600_application main_app; - main_app.run(argc, argv, "Chiusura Apertura Conti"); - return TRUE; -} - - - - - - - +// Chiusura/Apertura Conti + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +bool mask_datac (TMask_field&, KEY); +bool mask_dataap (TMask_field&, KEY); +bool mask_distinti (TMask_field&, KEY); + +#define MAX 200 + +class CG4600_application : public TApplication +{ + friend bool mask_datac (TMask_field&, KEY); + friend bool mask_dataap (TMask_field&, KEY); + friend bool mask_distinti (TMask_field&, KEY); + + TTable* _esc, * _reg; + TRelation* _rel; + TMovimentoPN* _pn; + TLocalisamfile* _saldi; + TRectype* _rec; + TLocalisamfile* _mov; + TCursor* _cur; + TSaldo_agg* _sld; + Saldo* _sale; + TConto _tcbilch,_tcproper,_tcbilap,_tcutilp,_tcperdp,_tcutile,_tcperde, _conto_corrente; + + real _saldo, _totale_saldo; + int _annoesch, _annoesap; + long _numreg; + TDate _dataregap, _dataregch; + TString _codcausap, _codcausch; + +public: + virtual bool create(); + virtual bool destroy(); + virtual bool menu(MENU_TAG m); + void costi (); + void ricavi(); + void attivita(); + void passivita(); + void rmov_proper (int, long, TDate&, TRectype&, TConto&, real&, bool); + void ultima_registrazione(); + void compila_testata(int,TDate&,TString&); + void chiusura_conto_economico(); + void chiusura_conto_patrimoniale(); + bool set(); +// bool epilogo_conti(); + + CG4600_application() {} +}; + +HIDDEN CG4600_application* app() { return (CG4600_application *) MainApp(); } + +bool mask_datac (TMask_field& f, KEY k) +{ + TTable TabEs ("ESC"); + TTable TabReg("REG"); + TString annos (4); + int anno = 0;; + bool ok = TRUE; + + if ( (k == K_ENTER) && f.to_check(k) ) + { + TabEs.last(); + TDate inizio = TabEs.get_date("D0"); + TDate fine = TabEs.get_date("D1"); + TDate scarico = TabEs.get_date("D2"); + TabEs.prev(); + TDate iniziop = TabEs.get_date("D0"); + TDate finep = TabEs.get_date("D1"); + if (f.get() < finep) + { + f.warning_box ("La data di chiusura non puo' essere inferiore alla data di fine esercizio precedente"); + return FALSE; + } + if (f.get() > fine) + { + f.warning_box ("La data di chiusura non puo' essere superiore alla data di fine esercizio in corso"); + return FALSE; + } + if ( scarico.ok() && (f.get() <= scarico) ) + { + f.warning_box ("La data di chiusura non puo' essere inferiore o uguale alla data di scarico"); + return FALSE; + } + if ( (f.get() >= inizio) && (f.get() <= fine) ) //la data di chiusura e' cioe' relativa all'esercizio in corso + anno = fine.year(); + else if ( (f.get() >= iniziop) && (f.get() <= finep) ) //la data di chiusura e' cioe' relativa all'esercizio precedente + anno = finep.year(); + + TabReg.zero(); + annos = format ("%04d", anno); + TabReg.put ("CODTAB", annos); + TRectype r (TabReg.curr()); + TabReg.read(_isgteq); + for (; !TabReg.eof(); TabReg.next()) + { + if (TabReg.curr() != r) break; + + int tiporeg = TabReg.get_int("I0"); + if (tiporeg == 5) + { + TDate datast = TabReg.get_date("D3"); + if (f.get() < datast.string()) + { + ok = FALSE; + break; + } + } + } + if (!ok) + { + f.warning_box("La data di chiusura non puo' essere inferiore alla data ultima stampa bollato"); + return FALSE; + } + } + return TRUE; +} + +bool mask_dataap (TMask_field& f, KEY k) +{ + TTable TabEs ("ESC"); + TTable TabReg("REG"); + int anno = 0; + TString annos (4); + bool ok = TRUE; + + if ( (k == K_ENTER) && f.to_check(k) ) + { + TabEs.last(); + TDate inizio = TabEs.get_date("D0"); + TDate fine = TabEs.get_date("D1"); + TDate scarico = TabEs.get_date("D2"); + TabEs.prev(); + TDate iniziop = TabEs.get_date("D0"); + TDate finep = TabEs.get_date("D1"); + if (f.get() < inizio) + { + f.warning_box ("La data di apertura non puo' essere inferiore alla data di inizio esercizio in corso"); + return FALSE; + } + if (f.get() > fine) + { + f.warning_box ("La data di apertura non puo' essere superiore alla data di fine esercizio in corso"); + return FALSE; + } + if ( scarico.ok() && (f.get() <= scarico) ) + { + f.warning_box ("La data di apertura non puo' essere inferiore o uguale alla data di scarico"); + return FALSE; + } + + if ( (f.get() >= inizio) && (f.get() <= fine) ) //la data di apertura e' cioe' relativa all'esercizio in corso + anno = fine.year(); + else if( (f.get() >= iniziop) && (f.get() <= finep) ) //la data di apertura e' cioe' relativa all'esercizio precedente + anno = finep.year(); + + TabReg.zero(); + annos = format ("%04d", anno); + TabReg.put ("CODTAB", annos); + TRectype r (TabReg.curr()); + TabReg.read(_isgteq); + for (; !TabReg.eof(); TabReg.next()) + { + if (TabReg.curr() != r) break; + + int tiporeg = TabReg.get_int("I0"); + if (tiporeg == 5) + { + TDate datast = TabReg.get_date("D3"); + if (f.get() < datast) + { + ok = FALSE; + break; + } + } + } + if (!ok) + { + f.warning_box("La data di apertura non puo' essere inferiore alla data ultima stampa bollato"); + return FALSE; + } + } + return TRUE; +} + +bool mask_distinti (TMask_field& f, KEY k) +{ + int idg,idc,ids,idg1,idc1,ids1; + + if (k == K_ENTER) + { + idg = 108; + idc = 109; + ids = 110; + + for (int i = 0; i < 7; i++) + { + int g = f.mask().get_int(idg); + int c = f.mask().get_int(idc); + long s = f.mask().get_long(ids); + + idg1 = idg; + idc1 = idc; + ids1 = ids; + + for (int j = i+1; j < 7; j++) + { + idg1 = idg1 + 3; + idc1 = idc1 + 3; + ids1 = ids1 + 3; + + int gruppo = f.mask().get_int(idg1); + int conto = f.mask().get_int(idc1); + long sottoc = f.mask().get_long(ids1); + + if ((g == gruppo)&&(c == conto)&&(s == sottoc)) + { + f.warning_box("Nessun sottoconto puo' essere ripetuto!"); + return FALSE; + } + } + + idg = idg + 3; + idc = idc + 3; + ids = ids + 3; + + } + } + return TRUE; +} + +bool CG4600_application::create() +{ + TApplication::create(); + + _rel = new TRelation (LF_PCON); + + _cur = new TCursor(_rel,"((GRUPPO!=\"\")&&(CONTO!=\"\")&&(SOTTOCONTO==\"\"))",1); + + _pn = new TMovimentoPN(); + _saldi = new TLocalisamfile (LF_SALDI); + _rec = new TRectype(LF_SALDI); + _mov = new TLocalisamfile (LF_MOV); + _esc = new TTable ("ESC"); + _reg = new TTable ("REG"); + _sld = new TSaldo_agg(); + _sale = new Saldo(); + + dispatch_e_menu (BAR_ITEM(1)); + + return TRUE; +} + +bool CG4600_application::destroy() +{ + delete _saldi; + delete _sale; + delete _mov; + delete _esc; + delete _reg; + delete _pn; + delete _rel; + delete _cur; + delete _sld; + delete _rec; + + return TApplication::destroy(); +} + +void CG4600_application::ultima_registrazione() +{ + long numregmov; + + _mov->setkey(1); //Leggo il numero di registrazione + _mov->last(); //dell'ultimo record di mov, e lo + numregmov = _mov->get_long(MOV_NUMREG); //incremento di uno per ottenere + _numreg = numregmov + 1; //un numero di registrazione + //sicuramente non esistente. +} + +bool CG4600_application::set() +{ + TTable TabEs ("ESC"); + TMask m ("cg4600a"); + KEY tasto; + int gbilch, cbilch , gproper, cproper, gbilap, cbilap, gutilp; + int cutilp, gperdp, cperdp, gutile, cutile, gperde, cperde; + long sbilch, sproper, sbilap, sutilp, sperdp, sutile, sperde; + + + TConfig conf(CONFIG_DITTA); + + m.set(F_CHIUSURA, conf.get("CoCaCh")); + m.set(F_APERTURA, conf.get("CoCaAp")); + + TabEs.last(); + int annoap = TabEs.get_int ("CODTAB"); + TDate inizio = TabEs.get_date("D0"); //data inizio es. in corso + TabEs.prev(); + int annoch = TabEs.get_int ("CODTAB"); + TDate fine = TabEs.get_date("D1"); //data fine es. precedente + m.set(F_ANNO, annoap); + m.set(F_ANNOCH, annoch); + m.set(F_DATAC, fine.string()); + m.set(F_DATAAP,inizio.string()); + + m.set(F_BILCHG, conf.get("CsBiChG")); + m.set(F_BILCHC, conf.get("CsBiChC")); + m.set(F_BILCHS, conf.get("CsBiChS")); + m.set(F_PROPERG, conf.get("CsPrPeG")); + m.set(F_PROPERC, conf.get("CsPrPeC")); + m.set(F_PROPERS, conf.get("CsPrPeS")); + m.set(F_BILAPG, conf.get("CsBiApG")); + m.set(F_BILAPC, conf.get("CsBiApC")); + m.set(F_BILAPS, conf.get("CsBiApS")); + m.set(F_UTILPG, conf.get("CsUeCpG")); + m.set(F_UTILPC, conf.get("CsUeCpC")); + m.set(F_UTILPS, conf.get("CsUeCpS")); + m.set(F_PERDPG, conf.get("CsPeCpG")); + m.set(F_PERDPC, conf.get("CsPeCpC")); + m.set(F_PERDPS, conf.get("CsPeCpS")); + m.set(F_UTILEG, conf.get("CsUeCeG")); + m.set(F_UTILEC, conf.get("CsUeCeC")); + m.set(F_UTILES, conf.get("CsUeCeS")); + m.set(F_PERDEG, conf.get("CsPeCeG")); + m.set(F_PERDEC, conf.get("CsPeCeC")); + m.set(F_PERDES, conf.get("CsPeCeS")); + + m.set_handler (F_DATAC, mask_datac); + m.set_handler (F_DATAAP, mask_dataap); + m.set_handler (F_PERDES, mask_distinti); + + tasto = m.run(); + + if (tasto == K_ENTER) + { + _annoesch = m.get_int(F_ANNOCH); + _annoesap = m.get_int(F_ANNO); + _dataregch = m.get (F_DATAC); + _codcausch = m.get (F_CHIUSURA); + _dataregap = m.get (F_DATAAP); + _codcausap = m.get (F_APERTURA); + gbilch = m.get_int (F_BILCHG); + cbilch = m.get_int (F_BILCHC); + sbilch = m.get_long(F_BILCHS); + gproper = m.get_int (F_PROPERG); + cproper = m.get_int (F_PROPERC); + sproper = m.get_long(F_PROPERS); + gbilap = m.get_int (F_BILAPG); + cbilap = m.get_int (F_BILAPC); + sbilap = m.get_long(F_BILAPS); + gutilp = m.get_int (F_UTILPG); + cutilp = m.get_int (F_UTILPC); + sutilp = m.get_long(F_UTILPS); + gperdp = m.get_int (F_PERDPG); + cperdp = m.get_int (F_PERDPC); + sperdp = m.get_long(F_PERDPS); + gutile = m.get_int (F_UTILEG); + cutile = m.get_int (F_UTILEC); + sutile = m.get_long(F_UTILES); + gperde = m.get_int (F_PERDEG); + cperde = m.get_int (F_PERDEC); + sperde = m.get_long(F_PERDES); + + _tcbilch.set (gbilch,cbilch,sbilch); + _tcproper.set(gproper,cproper,sproper); + _tcbilap.set (gbilap,cbilap,sbilap); + _tcutilp.set (gutilp,cutilp,sutilp); + _tcperdp.set (gperdp,cperdp,sperdp); + _tcutile.set (gutile,cutile,sutile); + _tcperde.set (gperde,cperde,sperde); + + ultima_registrazione(); +// anno_ese_precedente(); + + (*_cur) = 0L; + + _sld->set_anno_es(_annoesch); + _sld->set_movprovv(FALSE); + _sld->set_movap(FALSE); + + costi (); + + _sld->reset(); //Azzera la tabella dei conti dell'oggetto TSaldo_agg + _pn->destroy_rows(); //Azzero l'oggetto pn. + ultima_registrazione(); + *_cur = 0l; + + ricavi(); + _sld->reset(); + + chiusura_conto_economico(); + _totale_saldo = ZERO; + _sld->reset(); + + _pn->destroy_rows(); //Azzero l'oggetto pn. + ultima_registrazione(); + *_cur = 0l; + + attivita(); + _sld->reset(); + + _pn->destroy_rows(); //Azzero l'oggetto pn. + ultima_registrazione(); + *_cur = 0l; + + passivita(); + _sld->reset(); + chiusura_conto_patrimoniale(); + + return TRUE; + } //K_ENTER + return FALSE; +} + +void CG4600_application::compila_testata(int annoes,TDate& datareg, TString& codcaus) +{ + _pn->lfile()->zero(); + _pn->lfile()->put(MOV_ANNOES, annoes); //Viene generato un mov + _pn->lfile()->put(MOV_DATAREG, datareg); //quando si incontra il + _pn->lfile()->put(MOV_CODCAUS, codcaus); //primo conto con indbil + _pn->lfile()->put(MOV_NUMREG, _numreg); +} + +void CG4600_application::rmov_proper(int anno,long numrig,TDate& datareg,TRectype& rmov, TConto& tc,real& tot_saldo, bool sezione_opposta) +{ + char sez_rmov = ' '; + char sezione = ' '; + real totale = tot_saldo; + + rmov.zero(); + rmov.put(RMV_ANNOES, anno); + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_NUMRIG, numrig); + rmov.put(RMV_DATAREG, datareg); + rmov.put(RMV_GRUPPO, tc.gruppo()); + rmov.put(RMV_CONTO, tc.conto()); + rmov.put(RMV_SOTTOCONTO, tc.sottoconto()); + + if (totale > ZERO) + { + sez_rmov = 'A'; + sezione = 'D'; + } + else + if (totale < ZERO) + { + sez_rmov = 'D'; + sezione = 'A'; + totale = -totale; + } + + if (sezione_opposta) + { + rmov.put(RMV_SEZIONE, sez_rmov); + _sld->aggiorna(tc,totale,sez_rmov);//Aggiorno anche i saldi con l'oggetto + //TSaldo_agg + } + else + { + rmov.put(RMV_SEZIONE, sezione); + _sld->aggiorna(tc,totale,sezione);//Aggiorno anche i saldi con l'oggetto + //TSaldo_agg + } + rmov.put(RMV_IMPORTO, totale); +} + +void CG4600_application::costi() +{ + bool compila_mov = TRUE; + long s; + char sez_rmov = ' ', sezione = ' '; + real tot_saldo; + long numrig = 0; + Saldo& sale = *_sale; + + _totale_saldo = ZERO; + tot_saldo = ZERO; + + TRecnotype items_pcon = _cur->items(); + + for (int i = 0; i < items_pcon; i++, ++(*_cur)) + { + int indbil = _cur->curr().get_int(PCN_INDBIL); + int g = _cur->curr().get_int(PCN_GRUPPO); + int c = _cur->curr().get_int(PCN_CONTO); + + if (indbil == 3) + { + if (compila_mov) + { + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 1 + compila_mov = FALSE; + } + _saldi->setkey(1); + _saldi->zero(); + _saldi->put(SLD_ANNOES, _annoesch); + _saldi->put(SLD_GRUPPO, g); + _saldi->put(SLD_CONTO, c); + + (*_rec) = _saldi->curr(); + + int j = 0; + + for (_saldi->read(); ; _saldi->next()) + { + TRectype& rmov = _pn->cg(j); + + _saldo = ZERO; + + if (_saldi->curr() > (*_rec) || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso conto, indicandola + // con una sezione opposta al risultato (della somma). + + if (j >= 1) + { + numrig++; + rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); + + tot_saldo = ZERO; + } + break; + } + + numrig++; + s = _saldi->get_long(SLD_SOTTOCONTO); + sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); + _saldo = sale.saldo(); + + if (_saldo.is_zero()) continue; + + if (_saldo > ZERO) + sezione = 'D'; + else + if (_saldo < ZERO) + { + sezione = 'A'; + _saldo = -_saldo; + } + + if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli + { // importi trovati sui saldi. Quando ho + sez_rmov = 'A'; // finito di leggere i sottoconti, oppure + tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 + _totale_saldo += _saldo; + } // righe di movimento, genero un' altra + else // riga con importo di sezione opposta + if (sezione == 'A') // alla somma, mandando a zero + { // il saldo di quel movimento. + sez_rmov = 'D'; + tot_saldo -= _saldo; + _totale_saldo -= _saldo; + } + + if (j == MAX || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso sottoconto, indicandola + // con una sezione opposta al risultato (della somma). + +// numrig++; + rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); + + tot_saldo = ZERO; + } + if (!_saldi->eof()) + { + + rmov.zero(); + rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento + rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo + rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste + rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 + rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la + rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a + rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_NUMRIG, numrig); + + TConto tc(g,c,s); + _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg + j++; + } + if (_saldi->eof()) break; + } //for saldi + if (j >= 1) + { + _pn->write(); + _sld->registra(); + j = 0; + _pn->destroy_rows(); //Azzero l'oggetto pn. + } + } // if (indbil == 3) + } // for pcon +} + +void CG4600_application::ricavi() +{ + bool compila_mov = TRUE; + long s; + char sez_rmov = ' ', sezione = ' '; + real tot_saldo; + long numrig = 0; + Saldo& sale = *_sale; + + tot_saldo = ZERO; + + TRecnotype items_pcon = _cur->items(); + + for (int i = 0; i < items_pcon; i++, ++(*_cur)) + { + int indbil = _cur->curr().get_int(PCN_INDBIL); + int g = _cur->curr().get_int(PCN_GRUPPO); + int c = _cur->curr().get_int(PCN_CONTO); + + if (indbil == 4) + { + if (compila_mov) + { + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 2 + compila_mov = FALSE; + } + _saldi->setkey(1); + _saldi->zero(); + _saldi->put(SLD_ANNOES, _annoesch); + _saldi->put(SLD_GRUPPO, g); + _saldi->put(SLD_CONTO, c); + + (*_rec) = _saldi->curr(); + + int j = 0; + + for (_saldi->read(); ; _saldi->next()) + { + TRectype& rmov = _pn->cg(j); + + _saldo = ZERO; + + if (_saldi->curr() > (*_rec) || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso conto, indicandola + // con una sezione opposta al risultato (della somma). + + if (j >= 1) + { + numrig++; + rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); + + tot_saldo = ZERO; + } + break; + } + + numrig++; + s = _saldi->get_long(SLD_SOTTOCONTO); + sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); + _saldo = sale.saldo(); + + if (_saldo.is_zero()) continue; + + if (_saldo > ZERO) + sezione = 'D'; + else + if (_saldo < ZERO) + { + sezione = 'A'; + _saldo = -_saldo; + } + + if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli + { // importi trovati sui saldi. Quando ho + sez_rmov = 'A'; // finito di leggere i sottoconti, oppure + tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 + _totale_saldo += _saldo; + } // righe di movimento, genero un' altra + else // riga con importo di sezione opposta + if (sezione == 'A') // alla somma, mandando a zero + { // il saldo di quel movimento. + sez_rmov = 'D'; + tot_saldo -= _saldo; + _totale_saldo -= _saldo; + } + + if (j == MAX || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso sottoconto, indicandola + // con una sezione opposta al risultato (della somma). + +// numrig++; + rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcproper,tot_saldo,FALSE); + + tot_saldo = ZERO; + } + if (!_saldi->eof()) + { + + rmov.zero(); + rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento + rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo + rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste + rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 + rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la + rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a + rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_NUMRIG, numrig); + + TConto tc(g,c,s); + _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg + j++; + } + if (_saldi->eof()) break; + } //for saldi + if (j >= 1) + { + _pn->write(); + _sld->registra(); + j = 0; + _pn->destroy_rows(); //Azzero l'oggetto pn. + } + } // if (indbil == 4) + } // for pcon +} + +void CG4600_application::chiusura_conto_economico() +{ + if (_totale_saldo > ZERO) + { + int j; + +//Compilo la testata per perdite di es. c.economico a Profitti e Perdite +//Chiusura conto economico + + j = 0; + ultima_registrazione(); + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 3 + + TRectype& rmov1 = _pn->cg(j); + long numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcproper,_totale_saldo,TRUE); + numrig++; + j++; + TRectype& rmov2 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcperde,_totale_saldo,FALSE); + + _pn->write(); + _sld->registra(); + _sld->reset(); + +//Compilo la testata per perdite di es. c.patrimon. a Perdita di es. c. econom. +//Chiusura capitale netto + + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 4 + + TRectype& rmov3 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov3,_tcperde,_totale_saldo,TRUE); + numrig++; + j++; + TRectype& rmov4 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov4,_tcperdp,_totale_saldo,FALSE); + + _pn->write(); + _sld->registra(); + _sld->reset(); + + //Compilo la testata per Perdita es. c/to patrimoniale a Bilancio di apertura + //Apertura capitale netto + + _sld->set_anno_es(_annoesap); + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + + compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 10 + + TRectype& rmov5 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesap,numrig,_dataregap,rmov5,_tcbilap,_totale_saldo,TRUE); + numrig++; + j++; + TRectype& rmov6 = _pn->cg(j); + rmov_proper(_annoesap,numrig,_dataregap,rmov6,_tcperdp,_totale_saldo,FALSE); + + _pn->write(); + _sld->registra(); + _sld->set_anno_es(_annoesch); + } + else + if (_totale_saldo < ZERO) + { + int j; + +//Compilo la testata per Profitti e perdite a Utile di es. c.economico +//Chiusura conto economico + + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 3 + + TRectype& rmov1 = _pn->cg(j); + long numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcutile,_totale_saldo,FALSE); + numrig++; + j++; + TRectype& rmov2 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcproper,_totale_saldo,TRUE); + + _pn ->write(); + _sld->registra(); + _sld->reset(); + +//Compilo la testata per Utile di es. c.economico a Utile di es. c.patrimoniale +//Chiusura capitale netto + + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 4 + + TRectype& rmov3 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov3,_tcutilp,_totale_saldo,FALSE); + numrig++; + j++; + TRectype& rmov4 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov4,_tcutile,_totale_saldo,TRUE); + + _pn ->write(); + _sld->registra(); + _sld->reset(); + + //Compilo la testata per Bilancio di apertura a Utile es. c/to patrimoniale + //Apertura capitale netto + + _sld->set_anno_es(_annoesap); + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + + compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 10 + + TRectype& rmov5 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesap,numrig,_dataregap,rmov5,_tcbilap,_totale_saldo,TRUE); + numrig++; + j++; + TRectype& rmov6 = _pn->cg(j); + rmov_proper(_annoesap,numrig,_dataregap,rmov6,_tcutilp,_totale_saldo,FALSE); + + _pn->write(); + _sld->registra(); + _sld->set_anno_es(_annoesch); + + + } +} + +void CG4600_application::chiusura_conto_patrimoniale() +{ + int j; + long numrig; + + if (_totale_saldo > ZERO) + { +//Compilo la testata per Bilancio di chiusura a Perdita di es. c. patrimoniale +//Chiusura conto patrimoniale + + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 7 + + TRectype& rmov1 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcutilp,_totale_saldo,FALSE); + numrig++; + j++; + TRectype& rmov2 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcbilch,_totale_saldo,TRUE); + + _pn->write(); + _sld->registra(); + + } + else + if (_totale_saldo < ZERO) + { +//Compilo la testata per Utile di es. c.patrimon. a Bilancio di chiusura +//Chiusura conto patrimoniale + + _pn->destroy_rows(); //Azzero l'oggetto pn. + j = 0; + ultima_registrazione(); + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 7 + + TRectype& rmov1 = _pn->cg(j); + numrig = 1; + rmov_proper(_annoesch,numrig,_dataregch,rmov1,_tcbilch,_totale_saldo,TRUE); + numrig++; + j++; + TRectype& rmov2 = _pn->cg(j); + rmov_proper(_annoesch,numrig,_dataregch,rmov2,_tcperdp,_totale_saldo,FALSE); + + _pn ->write(); + _sld->registra(); + } +} + +void CG4600_application::attivita() +{ + bool compila_mov_ch = TRUE; + bool compila_mov_ap = TRUE; + long s; + char sez_rmov = ' ', sezione = ' '; + real tot_saldo; + long numrig = 0; + Saldo& sale = *_sale; + + tot_saldo = ZERO; + + TRecnotype items_pcon = _cur->items(); + + for (int i = 0; i < items_pcon; i++, ++(*_cur)) + { + _sld->set_anno_es(_annoesch); + + int indbil = _cur->curr().get_int(PCN_INDBIL); + int g = _cur->curr().get_int(PCN_GRUPPO); + int c = _cur->curr().get_int(PCN_CONTO); + + if (indbil == 1) + { + if (compila_mov_ch) + { + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 5 Chiusura + compila_mov_ch = FALSE; + } + _saldi->setkey(1); + _saldi->zero(); + _saldi->put(SLD_ANNOES, _annoesch); + _saldi->put(SLD_GRUPPO, g); + _saldi->put(SLD_CONTO, c); + + TRectype rec (_saldi->curr()); + + int j = 0; + + for (_saldi->read(); ; _saldi->next()) + { + TRectype& rmov = _pn->cg(j); + + if (_saldi->curr() > rec || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso conto, indicandola + // con una sezione opposta al risultato (della somma). + + if (j >= 1) + { + numrig++; + rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura + + tot_saldo = ZERO; + } + break; + } + + numrig++; + s = _saldi->get_long(SLD_SOTTOCONTO); + sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); + _saldo = sale.saldo(); + + if (_saldo == ZERO) continue; + + if (_saldo > ZERO) + sezione = 'D'; + else + if (_saldo < ZERO) + { + sezione = 'A'; + _saldo = -_saldo; + } + + if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli + { // importi trovati sui saldi. Quando ho + sez_rmov = 'A'; // finito di leggere i sottoconti, oppure + tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 + _totale_saldo += _saldo; + } // righe di movimento, genero un' altra + else // riga con importo di sezione opposta + if (sezione == 'A') // alla somma, mandando a zero + { // il saldo di quel movimento. + sez_rmov = 'D'; + tot_saldo -= _saldo; + _totale_saldo -= _saldo; + } + + if (j == MAX || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso sottoconto, indicandola + // con una sezione opposta al risultato (della somma). + +// numrig++; + rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura + + tot_saldo = ZERO; + } + if (!_saldi->eof()) + { + + rmov.zero(); + rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento + rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo + rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste + rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 + rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la + rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a + rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_NUMRIG, numrig); + + TConto tc(g,c,s); + _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg + + j++; + } + if (_saldi->eof()) break; + } //for saldi + if (j >= 1) + { + _pn->write(); + _sld->registra(); + _sld->reset(); + j = 0; + + long items_pn = _pn->cg_items(); + _sld->set_anno_es(_annoesap); + + if (compila_mov_ap) + { + ultima_registrazione(); + compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 8 Apertura + compila_mov_ap = FALSE; + } + + for (int i = 0; i < items_pn; i++) + { + char sez_rmov; + TRectype& rmov = _pn->cg(j); + + char sezione = rmov.get (RMV_SEZIONE)[0]; + int gruppo = rmov.get_int (RMV_GRUPPO); + int conto = rmov.get_int (RMV_CONTO); + long sottoc = rmov.get_long(RMV_SOTTOCONTO); + real importo = rmov.get_real(RMV_IMPORTO); + + if (sezione == 'D') + sez_rmov = 'A'; + else + if (sezione == 'A') + sez_rmov = 'D'; + + rmov.put(RMV_ANNOES, _annoesap); + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_DATAREG, _dataregap); + + if (i == (items_pn - 1)) //Quando incontro il conto + { + rmov.put(RMV_GRUPPO, _tcbilap.gruppo()); + rmov.put(RMV_CONTO, _tcbilap.conto()); + rmov.put(RMV_SOTTOCONTO, _tcbilap.sottoconto()); //bilancio di chiusura lo + rmov.put(RMV_SEZIONE, sez_rmov); //sostituisco con quello di + _sld->aggiorna(_tcbilap,importo,sez_rmov); //apertura, non girando l'importo + } //perche' non l'avevo girato + else //precedentemente, mentre per gli altri + { //conti l'importo deve essere girato, + rmov.put(RMV_SEZIONE, sez_rmov); //perche' erano gia' stati girati + TConto tc(gruppo,conto,sottoc); //precedentemente per fare la chiusura + _sld->aggiorna(tc,importo,sez_rmov); + } + j++; + } + + _pn->write(); + _sld->registra(); + j = 0; + _pn->destroy_rows(); //Azzero l'oggetto pn. + } + } // if (indbil == 1) + } // for pcon +} + +void CG4600_application::passivita() +{ + bool compila_mov_ch = TRUE; + bool compila_mov_ap = TRUE; + long s; + char sez_rmov = ' ', sezione = ' '; + real tot_saldo; + long numrig = 0; + Saldo& sale = *_sale; + + tot_saldo = ZERO; + + TRecnotype items_pcon = _cur->items(); + + for (int i = 0; i < items_pcon; i++, ++(*_cur)) + { + _sld->set_anno_es(_annoesch); + + int indbil = _cur->curr().get_int(PCN_INDBIL); + int g = _cur->curr().get_int(PCN_GRUPPO); + int c = _cur->curr().get_int(PCN_CONTO); + + if (indbil == 2) + { + if (compila_mov_ch) + { + compila_testata(_annoesch,_dataregch,_codcausch); //Reg. 6 Chiusura + compila_mov_ch = FALSE; + } + _saldi->setkey(1); + _saldi->zero(); + _saldi->put(SLD_ANNOES, _annoesch); + _saldi->put(SLD_GRUPPO, g); + _saldi->put(SLD_CONTO, c); + + TRectype rec (_saldi->curr()); + + int j = 0; + + for (_saldi->read(); ; _saldi->next()) + { + TRectype& rmov = _pn->cg(j); + + if (_saldi->curr() > rec || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso conto, indicandola + // con una sezione opposta al risultato (della somma). + + if (j >= 1) + { + numrig++; + rmov_proper(_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura + + tot_saldo = ZERO; + } + break; + } + + numrig++; + s = _saldi->get_long(SLD_SOTTOCONTO); + sale.calcola_ultima_immissione(_annoesch,0,g,c,s,indbil); + _saldo = sale.saldo(); + + if (_saldo.is_zero()) continue; + + if (_saldo > ZERO) + sezione = 'D'; + else + if (_saldo < ZERO) + { + sezione = 'A'; + _saldo = -_saldo; + } + + if (sezione == 'D') // ---> Tengo una variabile in cui salvo gli + { // importi trovati sui saldi. Quando ho + sez_rmov = 'A'; // finito di leggere i sottoconti, oppure + tot_saldo += _saldo; // quando ho raggiunto un massimo di 200 + _totale_saldo += _saldo; + } // righe di movimento, genero un' altra + else // riga con importo di sezione opposta + if (sezione == 'A') // alla somma, mandando a zero + { // il saldo di quel movimento. + sez_rmov = 'D'; + tot_saldo -= _saldo; + _totale_saldo -= _saldo; + } + + if (j == MAX || _saldi->eof()) + { + // Aggiungo un ulteriore riga di movimento contenente la somma + // di tutti i saldi aventi lo stesso sottoconto, indicandola + // con una sezione opposta al risultato (della somma). + +// numrig++; + rmov_proper (_annoesch,numrig,_dataregch,rmov,_tcbilch,tot_saldo,FALSE); //Chiusura + + tot_saldo = ZERO; + } + if (!_saldi->eof()) + { + + rmov.zero(); + rmov.put(RMV_ANNOES, _annoesch); //Compilo una riga di movimento + rmov.put(RMV_DATAREG, _dataregch); //per ogni sottoconto che leggo + rmov.put(RMV_GRUPPO, g); //sui saldi. Siccome queste + rmov.put(RMV_CONTO, c); //righe servono per mandare a 0 + rmov.put(RMV_SOTTOCONTO, s); //il saldo dei movimenti, la + rmov.put(RMV_SEZIONE, sez_rmov); //sezione sara' opposta a + rmov.put(RMV_IMPORTO, _saldo); //quella letta sui saldi. + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_NUMRIG, numrig); + + TConto tc(g,c,s); + _sld->aggiorna(tc,_saldo,sez_rmov); //l'oggetto TSaldo_agg + + j++; + } + if (_saldi->eof()) break; + } //for saldi + if (j >= 1) + { + _pn->write(); + _sld->registra(); + _sld->reset(); + j = 0; + + long items_pn = _pn->cg_items(); + _sld->set_anno_es(_annoesap); + + if (compila_mov_ap) + { + ultima_registrazione(); + compila_testata(_annoesap,_dataregap,_codcausap); //Reg. 9 Apertura + compila_mov_ap = FALSE; + } + + for (int i = 0; i < items_pn; i++) + { + char sez_rmov; + TRectype& rmov = _pn->cg(j); + + char sezione = rmov.get (RMV_SEZIONE)[0]; + int gruppo = rmov.get_int (RMV_GRUPPO); + int conto = rmov.get_int (RMV_CONTO); + long sottoc = rmov.get_long(RMV_SOTTOCONTO); + real importo = rmov.get_real(RMV_IMPORTO); + + if (sezione == 'D') + sez_rmov = 'A'; + else + if (sezione == 'A') + sez_rmov = 'D'; + + rmov.put(RMV_ANNOES, _annoesap); + rmov.put(RMV_NUMREG, _numreg); + rmov.put(RMV_DATAREG, _dataregap); + + if (i == (items_pn - 1)) //Quando incontro il conto + { + rmov.put(RMV_GRUPPO, _tcbilap.gruppo()); + rmov.put(RMV_CONTO, _tcbilap.conto()); + rmov.put(RMV_SOTTOCONTO, _tcbilap.sottoconto()); //bilancio di chiusura lo + rmov.put(RMV_SEZIONE, sez_rmov); //sostituisco con quello di + _sld->aggiorna(_tcbilap,importo,sez_rmov); //apertura, non girando l'importo + } //perche' non l'avevo girato + else //precedentemente, mentre per gli altri + { //conti l'importo deve essere girato, + rmov.put(RMV_SEZIONE, sez_rmov); //perche' erano gia' stati girati + TConto tc(gruppo,conto,sottoc); //precedentemente per fare la chiusura + _sld->aggiorna(tc,importo,sez_rmov); + } + j++; + } + + _pn->write(); + _sld->registra(); + j = 0; + _pn->destroy_rows(); + } + } // if (indbil == 2) + } // for pcon +} + +bool CG4600_application::menu(MENU_TAG m) +{ + if (m == BAR_ITEM(1)) + return set(); + return FALSE; +} + +int /*main */ cg4600 (int argc, char* argv[]) +{ + CG4600_application main_app; + main_app.run(argc, argv, "Chiusura Apertura Conti"); + return TRUE; +} + + + + + + + diff --git a/cg/cg4600.h b/cg/cg4600.h index 82edfd0ee..5b5711e78 100755 --- a/cg/cg4600.h +++ b/cg/cg4600.h @@ -1,34 +1,34 @@ -#ifndef __CG4600_H -#define __CG4600_H - -#define F_CODDITTA 101 -#define F_RAGSOC 102 -#define F_CHIUSURA 103 -#define F_APERTURA 104 -#define F_DATAC 105 -#define F_DATAAP 106 -#define F_BILCHG 107 -#define F_BILCHC 108 -#define F_BILCHS 109 -#define F_PROPERG 110 -#define F_PROPERC 111 -#define F_PROPERS 112 -#define F_BILAPG 113 -#define F_BILAPC 114 -#define F_BILAPS 115 -#define F_UTILPG 116 -#define F_UTILPC 117 -#define F_UTILPS 118 -#define F_PERDPG 119 -#define F_PERDPC 120 -#define F_PERDPS 121 -#define F_UTILEG 122 -#define F_UTILEC 123 -#define F_UTILES 124 -#define F_PERDEG 125 -#define F_PERDEC 126 -#define F_PERDES 127 -#define F_ANNO 128 -#define F_ANNOCH 129 - -#endif // __CG4600_H +#ifndef __CG4600_H +#define __CG4600_H + +#define F_CODDITTA 101 +#define F_RAGSOC 102 +#define F_CHIUSURA 103 +#define F_APERTURA 104 +#define F_DATAC 105 +#define F_DATAAP 106 +#define F_BILCHG 107 +#define F_BILCHC 108 +#define F_BILCHS 109 +#define F_PROPERG 110 +#define F_PROPERC 111 +#define F_PROPERS 112 +#define F_BILAPG 113 +#define F_BILAPC 114 +#define F_BILAPS 115 +#define F_UTILPG 116 +#define F_UTILPC 117 +#define F_UTILPS 118 +#define F_PERDPG 119 +#define F_PERDPC 120 +#define F_PERDPS 121 +#define F_UTILEG 122 +#define F_UTILEC 123 +#define F_UTILES 124 +#define F_PERDEG 125 +#define F_PERDEC 126 +#define F_PERDES 127 +#define F_ANNO 128 +#define F_ANNOCH 129 + +#endif // __CG4600_H diff --git a/cg/cg4600a.uml b/cg/cg4600a.uml index 68f87b5c2..aa608ae69 100755 --- a/cg/cg4600a.uml +++ b/cg/cg4600a.uml @@ -1,58 +1,58 @@ -#include "cg4600.h" - -PAGE "" -1 -1 76 20 - -NUMBER F_CODDITTA 5 -BEGIN - PROMPT 2 1 "Ditta " - FLAGS "FRD" - USE LF_NDITTE KEY 1 - CHECKTYPE REQUIRED - INPUT CODDITTA F_CODDITTA - DISPLAY "Codice" CODDITTA - DISPLAY "Ragione sociale @50" RAGSOC - OUTPUT F_CODDITTA CODDITTA - OUTPUT F_RAGSOC RAGSOC -END - +#include "cg4600.h" -STRING F_RAGSOC 50 -BEGIN - PROMPT 2 2 "Ragione sociale " - FLAGS "D" -END - -STRING F_CHIUSURA 3 -BEGIN - PROMPT 2 4 "Codice causale chiusura " - USE LF_CAUSALI KEY 1 - DISPLAY "Codice" CODCAUS - DISPLAY "Descrizione @50" DESCR - OUTPUT F_CHIUSURA CODCAUS - INPUT CODCAUS F_CHIUSURA - CHECKTYPE REQUIRED -END - -STRING F_APERTURA 3 -BEGIN - PROMPT 2 5 "Codice causale apertura " - COPY USE F_CHIUSURA - COPY DISPLAY F_CHIUSURA - OUTPUT F_APERTURA CODCAUS - INPUT CODCAUS F_APERTURA -END - -DATE F_DATAC -BEGIN - PROMPT 36 4 "Data/Anno chiusura " -END - -DATE F_DATAAP -BEGIN - PROMPT 36 5 "Data/Anno apertura " - WARNING "Inserire una data non inferiore alla data di chiusura" - VALIDATE DATE_CMP_FUNC >= F_DATAC -END +PAGE "" -1 -1 76 20 + +NUMBER F_CODDITTA 5 +BEGIN + PROMPT 2 1 "Ditta " + FLAGS "FRD" + USE LF_NDITTE KEY 1 + CHECKTYPE REQUIRED + INPUT CODDITTA F_CODDITTA + DISPLAY "Codice" CODDITTA + DISPLAY "Ragione sociale @50" RAGSOC + OUTPUT F_CODDITTA CODDITTA + OUTPUT F_RAGSOC RAGSOC +END + + +STRING F_RAGSOC 50 +BEGIN + PROMPT 2 2 "Ragione sociale " + FLAGS "D" +END + +STRING F_CHIUSURA 3 +BEGIN + PROMPT 2 4 "Codice causale chiusura " + USE LF_CAUSALI KEY 1 + DISPLAY "Codice" CODCAUS + DISPLAY "Descrizione @50" DESCR + OUTPUT F_CHIUSURA CODCAUS + INPUT CODCAUS F_CHIUSURA + CHECKTYPE REQUIRED +END + +STRING F_APERTURA 3 +BEGIN + PROMPT 2 5 "Codice causale apertura " + COPY USE F_CHIUSURA + COPY DISPLAY F_CHIUSURA + OUTPUT F_APERTURA CODCAUS + INPUT CODCAUS F_APERTURA +END + +DATE F_DATAC +BEGIN + PROMPT 36 4 "Data/Anno chiusura " +END + +DATE F_DATAAP +BEGIN + PROMPT 36 5 "Data/Anno apertura " + WARNING "Inserire una data non inferiore alla data di chiusura" + VALIDATE DATE_CMP_FUNC >= F_DATAC +END NUMBER F_ANNOCH 4 BEGIN @@ -60,252 +60,252 @@ BEGIN FLAGS "D" END -NUMBER F_ANNO 4 -BEGIN - PROMPT 69 5 "" - FLAGS "D" -END - - -GROUPBOX DLG_NULL 60 10 -BEGIN - PROMPT 2 7 "Codici sottoconto" -END - -NUMBER F_BILCHG 3 -BEGIN - PROMPT 3 9 "Bilancio di chiusura " +NUMBER F_ANNO 4 +BEGIN + PROMPT 69 5 "" + FLAGS "D" +END + + +GROUPBOX DLG_NULL 60 10 +BEGIN + PROMPT 2 7 "Codici sottoconto" +END + +NUMBER F_BILCHG 3 +BEGIN + PROMPT 3 9 "Bilancio di chiusura " USE LF_PCON KEY 1 SELECT SOTTOCONTO!="" CHECKTYPE REQUIRED - DISPLAY "Gruppo" GRUPPO - DISPLAY "Conto" CONTO - DISPLAY "Sottoconto" SOTTOCONTO - DISPLAY "Descrizione @50" DESCR - OUTPUT F_BILCHG GRUPPO - OUTPUT F_BILCHC CONTO - OUTPUT F_BILCHS SOTTOCONTO - INPUT GRUPPO F_BILCHG - INPUT CONTO F_BILCHC - INPUT SOTTOCONTO F_BILCHS -END - -NUMBER F_BILCHC 3 -BEGIN - PROMPT 44 9 "" + DISPLAY "Gruppo" GRUPPO + DISPLAY "Conto" CONTO + DISPLAY "Sottoconto" SOTTOCONTO + DISPLAY "Descrizione @50" DESCR + OUTPUT F_BILCHG GRUPPO + OUTPUT F_BILCHC CONTO + OUTPUT F_BILCHS SOTTOCONTO + INPUT GRUPPO F_BILCHG + INPUT CONTO F_BILCHC + INPUT SOTTOCONTO F_BILCHS +END + +NUMBER F_BILCHC 3 +BEGIN + PROMPT 44 9 "" COPY ALL F_BILCHG - CHECKTYPE REQUIRED -END - -NUMBER F_BILCHS 6 -BEGIN - PROMPT 51 9 "" + CHECKTYPE REQUIRED +END + +NUMBER F_BILCHS 6 +BEGIN + PROMPT 51 9 "" COPY ALL F_BILCHG - CHECKTYPE REQUIRED -END - -NUMBER F_PROPERG 3 -BEGIN - PROMPT 3 10 "Profitti e perdite " - COPY USE F_BILCHG - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_PROPERG GRUPPO - OUTPUT F_PROPERC CONTO - OUTPUT F_PROPERS SOTTOCONTO - INPUT GRUPPO F_PROPERG - INPUT CONTO F_PROPERC - INPUT SOTTOCONTO F_PROPERS -END - -NUMBER F_PROPERC 3 -BEGIN - PROMPT 44 10 "" + CHECKTYPE REQUIRED +END + +NUMBER F_PROPERG 3 +BEGIN + PROMPT 3 10 "Profitti e perdite " COPY USE F_BILCHG - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - COPY OUTPUT F_PROPERG - COPY INPUT F_PROPERG -END - -NUMBER F_PROPERS 6 -BEGIN - PROMPT 51 10 "" - COPY ALL F_PROPERC - CHECKTYPE REQUIRED -END - -NUMBER F_BILAPG 3 -BEGIN - PROMPT 3 11 "Bilancio di apertura " - COPY USE F_BILCHG - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_BILAPG GRUPPO - OUTPUT F_BILAPC CONTO - OUTPUT F_BILAPS SOTTOCONTO - INPUT GRUPPO F_BILAPG - INPUT CONTO F_BILAPC - INPUT SOTTOCONTO F_BILAPS -END - -NUMBER F_BILAPC 3 -BEGIN - PROMPT 44 11 "" - COPY USE F_BILCHG - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - COPY OUTPUT F_BILAPG - COPY INPUT F_BILAPG -END - -NUMBER F_BILAPS 6 -BEGIN - PROMPT 51 11 "" - COPY ALL F_BILAPC - CHECKTYPE REQUIRED -END - -NUMBER F_UTILPG 3 -BEGIN - PROMPT 3 12 "Utile d'esercizio c/to patrim. " + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_PROPERG GRUPPO + OUTPUT F_PROPERC CONTO + OUTPUT F_PROPERS SOTTOCONTO + INPUT GRUPPO F_PROPERG + INPUT CONTO F_PROPERC + INPUT SOTTOCONTO F_PROPERS +END + +NUMBER F_PROPERC 3 +BEGIN + PROMPT 44 10 "" + COPY USE F_BILCHG + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + COPY OUTPUT F_PROPERG + COPY INPUT F_PROPERG +END + +NUMBER F_PROPERS 6 +BEGIN + PROMPT 51 10 "" + COPY ALL F_PROPERC + CHECKTYPE REQUIRED +END + +NUMBER F_BILAPG 3 +BEGIN + PROMPT 3 11 "Bilancio di apertura " + COPY USE F_BILCHG + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_BILAPG GRUPPO + OUTPUT F_BILAPC CONTO + OUTPUT F_BILAPS SOTTOCONTO + INPUT GRUPPO F_BILAPG + INPUT CONTO F_BILAPC + INPUT SOTTOCONTO F_BILAPS +END + +NUMBER F_BILAPC 3 +BEGIN + PROMPT 44 11 "" + COPY USE F_BILCHG + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + COPY OUTPUT F_BILAPG + COPY INPUT F_BILAPG +END + +NUMBER F_BILAPS 6 +BEGIN + PROMPT 51 11 "" + COPY ALL F_BILAPC + CHECKTYPE REQUIRED +END + +NUMBER F_UTILPG 3 +BEGIN + PROMPT 3 12 "Utile d'esercizio c/to patrim. " USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ((INDBIL="1")||(INDBIL="2")||(INDBIL="5")) - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_UTILPG GRUPPO - OUTPUT F_UTILPC CONTO - OUTPUT F_UTILPS SOTTOCONTO - INPUT GRUPPO F_UTILPG - INPUT CONTO F_UTILPC - INPUT SOTTOCONTO F_UTILPS -END - -NUMBER F_UTILPC 3 -BEGIN - PROMPT 44 12 "" + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_UTILPG GRUPPO + OUTPUT F_UTILPC CONTO + OUTPUT F_UTILPS SOTTOCONTO + INPUT GRUPPO F_UTILPG + INPUT CONTO F_UTILPC + INPUT SOTTOCONTO F_UTILPS +END + +NUMBER F_UTILPC 3 +BEGIN + PROMPT 44 12 "" COPY USE F_UTILPG - CHECKTYPE REQUIRED + CHECKTYPE REQUIRED COPY DISPLAY F_BILCHG COPY OUTPUT F_UTILPG COPY INPUT F_UTILPG -END - -NUMBER F_UTILPS 6 -BEGIN - PROMPT 51 12 "" +END + +NUMBER F_UTILPS 6 +BEGIN + PROMPT 51 12 "" COPY ALL F_UTILPC - CHECKTYPE REQUIRED -END - -NUMBER F_PERDPG 3 -BEGIN - PROMPT 3 13 "Perdita d'esercizio c/to patr. " - USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ((INDBIL="1")||(INDBIL="2")||(INDBIL="5")) - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_PERDPG GRUPPO - OUTPUT F_PERDPC CONTO - OUTPUT F_PERDPS SOTTOCONTO - INPUT GRUPPO F_PERDPG - INPUT CONTO F_PERDPC - INPUT SOTTOCONTO F_PERDPS -END - -NUMBER F_PERDPC 3 -BEGIN - PROMPT 44 13 "" + CHECKTYPE REQUIRED +END + +NUMBER F_PERDPG 3 +BEGIN + PROMPT 3 13 "Perdita d'esercizio c/to patr. " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ((INDBIL="1")||(INDBIL="2")||(INDBIL="5")) + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_PERDPG GRUPPO + OUTPUT F_PERDPC CONTO + OUTPUT F_PERDPS SOTTOCONTO + INPUT GRUPPO F_PERDPG + INPUT CONTO F_PERDPC + INPUT SOTTOCONTO F_PERDPS +END + +NUMBER F_PERDPC 3 +BEGIN + PROMPT 44 13 "" COPY USE F_PERDPG - CHECKTYPE REQUIRED + CHECKTYPE REQUIRED COPY DISPLAY F_BILCHG COPY OUTPUT F_PERDPG COPY INPUT F_PERDPG -END - -NUMBER F_PERDPS 6 -BEGIN +END + +NUMBER F_PERDPS 6 +BEGIN PROMPT 51 13 "" COPY ALL F_PERDPC - CHECKTYPE REQUIRED -END - -NUMBER F_UTILEG 3 -BEGIN - PROMPT 3 14 "Utile d'esercizio c/to econom. " - USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ((INDBIL="3")||(INDBIL="4")) - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_UTILEG GRUPPO - OUTPUT F_UTILEC CONTO - OUTPUT F_UTILES SOTTOCONTO - INPUT GRUPPO F_UTILEG - INPUT CONTO F_UTILEC - INPUT SOTTOCONTO F_UTILES -END - -NUMBER F_UTILEC 3 -BEGIN - PROMPT 44 14 "" + CHECKTYPE REQUIRED +END + +NUMBER F_UTILEG 3 +BEGIN + PROMPT 3 14 "Utile d'esercizio c/to econom. " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ((INDBIL="3")||(INDBIL="4")) + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_UTILEG GRUPPO + OUTPUT F_UTILEC CONTO + OUTPUT F_UTILES SOTTOCONTO + INPUT GRUPPO F_UTILEG + INPUT CONTO F_UTILEC + INPUT SOTTOCONTO F_UTILES +END + +NUMBER F_UTILEC 3 +BEGIN + PROMPT 44 14 "" COPY USE F_UTILEG - CHECKTYPE REQUIRED + CHECKTYPE REQUIRED COPY DISPLAY F_BILCHG COPY OUTPUT F_UTILEG COPY INPUT F_UTILEG -END - -NUMBER F_UTILES 6 -BEGIN - PROMPT 51 14 "" +END + +NUMBER F_UTILES 6 +BEGIN + PROMPT 51 14 "" COPY ALL F_UTILEC - CHECKTYPE REQUIRED -END - -NUMBER F_PERDEG 3 -BEGIN - PROMPT 3 15 "Perdita d'esercizio c/to econ. " - USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ( (INDBIL="3")||(INDBIL="4") ) - CHECKTYPE REQUIRED - COPY DISPLAY F_BILCHG - OUTPUT F_PERDEG GRUPPO - OUTPUT F_PERDEC CONTO - OUTPUT F_PERDES SOTTOCONTO - INPUT GRUPPO F_PERDEG - INPUT CONTO F_PERDEC - INPUT SOTTOCONTO F_PERDES -END - -NUMBER F_PERDEC 3 -BEGIN - PROMPT 44 15 "" + CHECKTYPE REQUIRED +END + +NUMBER F_PERDEG 3 +BEGIN + PROMPT 3 15 "Perdita d'esercizio c/to econ. " + USE LF_PCON KEY 1 SELECT (SOTTOCONTO!="") && ( (INDBIL="3")||(INDBIL="4") ) + CHECKTYPE REQUIRED + COPY DISPLAY F_BILCHG + OUTPUT F_PERDEG GRUPPO + OUTPUT F_PERDEC CONTO + OUTPUT F_PERDES SOTTOCONTO + INPUT GRUPPO F_PERDEG + INPUT CONTO F_PERDEC + INPUT SOTTOCONTO F_PERDES +END + +NUMBER F_PERDEC 3 +BEGIN + PROMPT 44 15 "" COPY USE F_PERDEG - CHECKTYPE REQUIRED + CHECKTYPE REQUIRED COPY DISPLAY F_BILCHG COPY OUTPUT F_PERDEG COPY INPUT F_PERDEG -END - -NUMBER F_PERDES 6 -BEGIN - PROMPT 51 15 "" +END + +NUMBER F_PERDES 6 +BEGIN + PROMPT 51 15 "" COPY ALL F_PERDEC - CHECKTYPE REQUIRED -END - -BUTTON DLG_OK 9 2 -BEGIN - PROMPT -12 -1 "" -END - -BUTTON DLG_CANCEL 9 2 -BEGIN - PROMPT -22 -1 "" -END - -ENDPAGE - -ENDMASK - - - - - - - + CHECKTYPE REQUIRED +END + +BUTTON DLG_OK 9 2 +BEGIN + PROMPT -12 -1 "" +END + +BUTTON DLG_CANCEL 9 2 +BEGIN + PROMPT -22 -1 "" +END + +ENDPAGE + +ENDMASK + + + + + + +