Gestione corretta di righe con importi nulli o conti inesistenti.

git-svn-id: svn://10.65.10.50/trunk@170 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-09-06 13:25:51 +00:00
parent 3ff1658643
commit 290aedd115
8 changed files with 375 additions and 94 deletions

View File

@ -833,23 +833,23 @@ bool CG0500_application::descr2array(TMask& m, bool fromHandler)
void CG0500_application::togli_dal_file(const TString& cau)
{
long i;
TLocalisamfile *rcaus = _rel->lfile(LF_RCAUSALI);
long last = _righe_gia_presenti.last_one();
long start = _righe_gia_presenti.first_one();
for (i=start; i<=last; i++)
{
if (_righe_gia_presenti[i])
const long start = _righe_gia_presenti.first_one();
const long last = _righe_gia_presenti.last_one();
if (start > 0L)
for (long i=start; i<=last; i++)
{
rcaus->zero();
rcaus->put(RCA_CODCAUS,cau);
rcaus->put(RCA_NRIGA, i);
if (rcaus->read() == NOERR)
rcaus->remove();
_righe_gia_presenti.reset(i);
if (_righe_gia_presenti[i])
{
rcaus->zero();
rcaus->put(RCA_CODCAUS,cau);
rcaus->put(RCA_NRIGA, i);
if (rcaus->read() == NOERR)
rcaus->remove();
_righe_gia_presenti.reset(i);
}
}
}
}
int CG0500_application::write(const TMask& m)

View File

@ -368,6 +368,13 @@ bool TPrimanota_application::get_conto(int r, TConto& c) const
return c.ok();
}
void TPrimanota_application::put_conto(TRectype& r, const TConto& c) const
{
r.put("TIPOC", c.tipo());
r.put("GRUPPO", c.gruppo());
r.put("CONTO", c.conto());
r.put("SOTTOCONTO", c.sottoconto());
}
bool TPrimanota_application::test_swap(bool ritsoc)
{
@ -464,7 +471,7 @@ int TPrimanota_application::read(TMask& m)
ivas.reset();
const bool to_swap = test_swap(FALSE);
for (i = 0; i < _rel->iva_items(); i++)
{
TRectype& r = _rel->iva(i);
@ -496,7 +503,16 @@ int TPrimanota_application::read(TMask& m)
rigaimp = 0;
}
}
if (rigaimp < 1) riga.add(" | | | | ");
else
{
riga.add(r.get("TIPOC")); // TIPO 106
riga.add(r.get("GRUPPO")); // GRUPPO 107
riga.add(r.get("CONTO")); // CONTO 108
riga.add(r.get("SOTTOCONTO")); // SOTTOCONTO 109
rigaimp = -1;
}
if (rigaimp != 0) riga.add(" | | | | ");
ivas.row(i) = riga;
}
@ -549,11 +565,8 @@ void TPrimanota_application::mask2rel(const TMask& m)
r.put("ANNOES", annoes);
r.put("DATAREG", datareg);
r.put("NUMRIG", cur);
r.put("TIPOC", conto.tipo()); // Conto
r.put("GRUPPO", conto.gruppo());
r.put("CONTO", conto.conto());
r.put("SOTTOCONTO", conto.sottoconto());
put_conto(r, conto); // Conto
row.get(); // Codice descrizione
r.put("DESCR", row.get()); // Descrizione riga
@ -633,6 +646,8 @@ void TPrimanota_application::mask2rel(const TMask& m)
const TConto c(row, -1, 0x1);
const int rimp = bill2pos(c, 'I')+1;
r.put("RIGAIMP", rimp);
put_conto(r, c);
cur++;
}

View File

@ -110,9 +110,8 @@ bool TPrimanota_application::detraibile(int tipodet)
if (app().iva() != iva_acquisti)
return TRUE;
const TSheet_field& iva = app().ivas();
TString16 chiave(iva.mask().get(F_ANNOIVA)); chiave << app().causale().reg().attivita();
TString16 chiave;
chiave << app().mask().get(F_ANNOIVA) << app().causale().reg().attivita();
TTable pla("PLA");
pla.put("CODTAB", chiave);
@ -176,17 +175,42 @@ int TPrimanota_application::bill2contr(const TConto& conto, char sezione) const
// Controlla se un conto e' usato nelle righe IVA
bool TPrimanota_application::bill_used(const TConto& conto) const
int TPrimanota_application::bill_used(const TConto& conto) const
{
int users = 0;
const TArray& rows = ivas().rows_array();
for (int i = 0; i < rows.items(); i++)
{
TToken_string& row = (TToken_string&)rows[i];
const TConto c(row, 6, 0x0);
if (conto == c)
return TRUE;
if (!row.empty_items())
{
const TConto c(row, 6, 0x0);
if (conto == c) users++;
}
}
return FALSE;
return users;
}
int TPrimanota_application::det_used(char det) const
{
int users = 0;
const bool detraib = det == 'D';
const TArray& rows = ivas().rows_array();
for (int i = 0; i < rows.items(); i++)
{
TToken_string& row = (TToken_string&)rows[i];
if (!row.empty_items())
{
const bool d = detraibile(row.get_int(4));
if (detraib == d) users++;
}
}
return users;
}
@ -594,9 +618,19 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
{
oldimp = real(row.get(0)); // Imponibile 0
oldiva = real(row.get(3)); // Imposta 3
oldposiva = type2pos(detraibile(row.get_int()) ? 'D' : 'N'); // Tipodet 4
const TConto oldconto(row, 5, 0x1); // t/g/c/s 5 6 7 8
const char tipod = detraibile(row.get_int()) ? 'D' : 'N';
oldposiva = type2pos(tipod); // Tipodet 4
if (oldposiva < 0 && oldiva != ZERO)
{
TConto c; app().causale().bill(tipod == 'D' ? 3 : 4, c);
oldposiva = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), c, "", tipod);
}
TConto oldconto(row, 5, 0x1); // t/g/c/s 5 6 7 8
oldpos = bill2pos(oldconto, 'I');
if (oldpos < 0 && oldconto.ok())
oldpos = app().set_cgs_row(-1, app().real2imp(ZERO, 'I'), oldconto, "", 'I');
}
if (k == K_DEL)
{
@ -609,7 +643,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
if (oldpos >= 0) // Il conto esisteva anche prima
{
app().sub_cgs_imp(oldpos, oldimp);
}
}
if (oldposiva >= 0) // Il conto IVA esisteva anche prima
{
app().sub_cgs_imp(oldposiva, oldiva);
@ -622,7 +656,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
if (newpos < 0)
{
const TImporto val(app().real2imp(oldpos >= 0 ? imp-oldimp : imp, 'I'));
const TImporto val(app().real2imp(imp, 'I'));
if (val.valore() != ZERO)
app().set_cgs_row(-1, val, conto, "", 'I');
}
@ -644,7 +678,7 @@ bool TPrimanota_application::iva_notify(int r, KEY k)
if (newposiva < 0)
{
const TImporto val(app().real2imp(oldposiva >= 0 ? imp-oldiva : imp, 'I'));
const TImporto val(app().real2imp(imp, 'I'));
if (val.valore() != ZERO)
app().set_cgs_row(-1, val, conto, "", tipod);
}
@ -974,7 +1008,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
const real imposta = scorpora(tot, iva.percentuale());
row.add(tot.string(), 0); // imponibile
row.add(iva.codice(), 1); // imposta
row.add(iva.codice(), 1); // codice IVA
row.add(imposta.string(), 3); // imposta
TConto bill; // Conto della prima riga IVA

View File

@ -94,6 +94,8 @@ protected:
TMask& occas_mask() { return *load_mask(3); }
bool get_conto(int r, TConto& c) const;
void put_conto(TRectype& r, const TConto& c) const;
void mask2rel(const TMask& m);
TipoIVA iva() const { return _iva; }
@ -114,8 +116,9 @@ protected:
static int date2esc(const TDate& d, int* prev = NULL);
static bool detraibile(int tipodet);
bool bill_used(const TConto& conto) const;
int bill2contr(const TConto& c, char sezione) const;
int bill_used(const TConto& conto) const;
int det_used(char detraib) const;
bool read_caus(const char* cod, int year);
TCausale& causale() { return _causale; }

View File

@ -60,10 +60,9 @@ class CG3200_application : public TPrintapp
bool _stampaprogre,_stampatotiva,_stampatot,_prima_volta,_stampa_mov_prov;
long _annomsk,_annoesmsk,_sottoc,_numreg,_annoes;
long _annomsksucc,_numgio,_protiva;
int _annomsk,_annoesmsk,_annomsksucc,_annoes;
long _numgio,_protiva,_sottoc,_numreg;
bool _stampa_progressivi_si,_competenza,_inizio_stampa,_puoi_stampare;
int _tipocf;
char _ricerca;
TDate _dataregrmov;
@ -437,7 +436,7 @@ bool CG3200_application::preprocess_pconti(int file, int counter)
_mov->curr().zero();
_mov->curr().put(MOV_NUMREG,_numreg);
_mov->read();
_annoes = atol(_mov->curr().get(MOV_ANNOES));
_annoes = _mov->curr().get_int(MOV_ANNOES);
_regiva = _mov->curr().get(MOV_REG);
// Controlla se saldo e' diverso da 0
@ -591,7 +590,7 @@ bool CG3200_application::preprocess_clifo(int file, int counter)
_mov->curr().zero();
_mov->curr().put(MOV_NUMREG,_numreg);
_mov->read();
_annoes = atol(_mov->curr().get(MOV_ANNOES));
_annoes = _mov->curr().get_int(MOV_ANNOES);
_regiva = _mov->curr().get(MOV_REG);
// Controlla se saldo e' diverso da 0
@ -928,7 +927,7 @@ bool CG3200_application::set_print(int)
_data_ini = (_msk->get(F_DATAINI));
_data_fine = (_msk->get(F_DATAFINE));
_annomsk = atol(_msk->get(F_ANNO));
_annomsk = _msk->get_int(F_ANNO);
if (_annomsk == 0)
if (_data_fine == botime) //Se data_fine e' vuota
@ -999,7 +998,7 @@ bool CG3200_application::set_print(int)
a.put(PCN_CONTO,contofine);
a.put(PCN_SOTTOCONTO,sottocontofine);
current_cursor()->setregion(&da, &a);
current_cursor()->setregion(da, a);
}
else
{
@ -1029,7 +1028,7 @@ bool CG3200_application::set_print(int)
a.put(CLI_CONTO,contofine);
a.put(CLI_CODCF,sottocontofine);
current_cursor()->setregion(&da, &a);
current_cursor()->setregion(da, a);
}
if (_stampatotiva)
@ -1177,23 +1176,12 @@ void CG3200_application::crea_intestazione()
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;
}
const char tipocf = toupper(_msk->get(F_RICERCA)[0]);
if (tipocf == 'P')
ricerca_gruppo();
else
ricerca_clifo();
if (_numcarat == 1)
{

View File

@ -1,3 +1,240 @@
<<<<<<< cg4400a.uml
// cg4400a.uml
// Stampa tabella registri
#include "cg4400a.h"
PAGE "Stampa registri IVA" -1 -1 56 19
/*
LISTBOX TIPO_STAMPA 2 27
BEGIN
PROMPT 2 1 "Tipo stampa "
ITEM "1|Libri bollati della ditta"
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
ITEM "2|Libri unici dello studio"
MESSAGE SHOW,2@|HIDE,1@|HIDE,3@
ITEM "3|Stampa di prova"
MESSAGE SHOW,3@|HIDE,1@|HIDE,2@|SHOW,CODICE_LIBRO
ITEM "4|Stampa libri con riferimenti al libro giornale"
MESSAGE SHOW,1@|HIDE,2@|HIDE,3@
END
*/
NUMBER TIPO_STAMPA 1
BEGIN
PROMPT 2 1 "Tipo stampa "
SHEET "Cod|Descrizione@50"
INPUT TIPO_STAMPA
OUTPUT TIPO_STAMPA
ITEM "1|Libri bollati della ditta"
ITEM "2|Libri unici dello studio"
ITEM "3|Stampa di prova"
ITEM "4|Stampa libri con riferimenti al libro giornale"
END
GROUPBOX DLG_NULL 35 5
BEGIN
PROMPT 20 1 "Scelta ditte"
END
NUMBER DA_CODICE 6
BEGIN
PROMPT 21 2 "Da codice "
HELP "Immettere codice ditta di partenza per la selezione"
USE LF_NDITTE KEY 1
CHECKTYPE NORMAL
INPUT CODDITTA DA_CODICE
DISPLAY "Codice" CODDITTA
DISPLAY "Ragione sociale@50" RAGSOC
OUTPUT DA_CODICE CODDITTA
END
NUMBER A_CODICE 6
BEGIN
PROMPT 21 3 "A codice "
HELP "Immettere codice ditta di fine selezione"
COPY USE DA_CODICE
CHECKTYPE NORMAL
INPUT CODDITTA A_CODICE
COPY DISPLAY DA_CODICE
OUTPUT A_CODICE CODDITTA
END
STRING F_SELECT 6
BEGIN
PROMPT 21 4 "Scelte n. "
FLAGS "D"
END
BUTTON DLG_SELECT 9
BEGIN
PROMPT 42 2 "Selezione"
//MESSAGE EXIT,DLG_SELECT
END
BUTTON F_ANNULLA 9
BEGIN
PROMPT 42 3 "Annulla"
//MESSAGE EXIT,F_ANNULLA
END
BUTTON F_VERIFICA 9
BEGIN
PROMPT 42 4 "Verifica"
//MESSAGE EXIT,F_VERIFICA
END
DATE DATA_STAMPA
BEGIN
PROMPT 2 6 "Data stampa "
FLAG "AH"
GROUP 3
END
NUMBER ANNO 4
BEGIN
PROMPT 2 7 "Anno "
FLAGS "A"
END
STRING CODICE_LIBRO 3
BEGIN
PROMPT 20 7 "Codice libro "
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 1
END
STRING CODICE_LIBRO_PROVA 3
BEGIN
PROMPT 20 7 "Codice libro "
HELP "Specificare il codice libro di cui si chiede la stampa; nel caso in cui non si indichi nessun codice verranno stampati tutti i libri delle ditte selezionate"
USE REG SELECT (I0<"3") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 1
END
STRING CODICE_LIB_UN 3
BEGIN
PROMPT 20 7 "Cod.libro unico "
HELP "Specificare il codice del libro unico su cui deve essere effettuata la stampa"
USE %LBU SELECT CODTAB[1,4]==#111
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIB_UN
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIB_UN CODTAB[5,7]
FLAGS "UR"
CHECKTYPE REQUIRED
GROUP 2
END
GROUPBOX DLG_NULL 52 3
BEGIN
PROMPT 2 9 "Stampa movimenti"
END
DATE DA_DATA
BEGIN
PROMPT 5 10 "Dalla data "
GROUP 3
END
DATE A_DATA
BEGIN
PROMPT 30 10 "Alla data "
GROUP 3
END
LISTBOX FINO_A_MESE 10
BEGIN
PROMPT 5 10 "Fino al mese "
FLAGS "M"
GROUP 1
END
LISTBOX MESE 10
BEGIN
PROMPT 5 10 "Mese "
FLAGS "M"
GROUP 2
END
LISTBOX TIPO_RIEPILOGATIVO 11
BEGIN
PROMPT 2 12 "Tipo riepilogativo "
HELP "Selezionare Del periodo/Annuale a seconda che si desideri la stampa della liquidazione periodica/annuale"
ITEM "P|Del periodo"
ITEM "A|Annuale"
GROUP 1
END
LISTBOX ULTIMO_MESE 10
BEGIN
PROMPT 2 13 "Ultimo mese stampa su libro unico "
FLAGS "MD"
GROUP 2
END
NUMBER ULTIMA_PAGINA 4
BEGIN
PROMPT 2 14 "Ultimo numero di pagina stampata libro unico "
FLAGS "R"
GROUP 2
END
STRING CODICE_LIBRO_IVA 3
BEGIN
PROMPT 2 15 "Eventuale codice libro IVA "
HELP "Se non viene indicato nessun cod. libro IVA, vengono stampati tutti i registri delle ditte selezionate"
USE REG SELECT (I0<"3") && (S6=="") && (CODTAB[1,4]==#111)
INPUT CODTAB[1,4] ANNO
INPUT CODTAB[5,7] CODICE_LIBRO_IVA
DISPLAY "Anno " CODTAB[1,4]
DISPLAY "Codice " CODTAB[5,7]
DISPLAY "Descrizione @40" S0
OUTPUT ANNO CODTAB[1,4]
OUTPUT CODICE_LIBRO_IVA CODTAB[5,7]
//CHECKTYPE NORMAL
FLAGS "UR"
GROUP 2
END
BUTTON DLG_OK 9 2
BEGIN
PROMPT -12 -1 ""
END
BUTTON DLG_CANCEL 9 2
BEGIN
PROMPT -22 -1 ""
END
ENDPAGE
ENDMASK
=======
// cg4400a.uml
// Stampa tabella registri
@ -233,3 +470,4 @@ ENDPAGE
ENDMASK
>>>>>>> 1.3

View File

@ -1,33 +1,35 @@
#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
#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

View File

@ -33,6 +33,7 @@ class Saldo
real _saldo, _saldo_iniziale, _prg_dare, _prg_avere;
int _indbil;
TLocalisamfile * _saldi, *_rmov, *_clifo, *_mov;
TRectype* _rec;
public:
bool causale_mov(long, const TDate&, const TDate&, TString&);