Patch level : 12.0 1059

Files correlati     : f135.dir f135.trr in0.exe in0500a.msk in0600a.msk
                      in0700a.msk inmenu.men nstird.rep batbcpa.msk
                      bastcpa.msk bastcpa.rep

Commento        :

Aggiornamento intra fase 2

Interno :

Inserimento movimenti generazione riepiloghi
Mancano inserimento riepiloghi invii
This commit is contained in:
Alessandro Bonazzi 2021-04-28 23:24:58 +02:00
parent 510a8ef8fd
commit ce9c4477b8
17 changed files with 813 additions and 589 deletions

View File

@ -1,3 +1,3 @@
135
0
$rieprett|||174|0|Riepiloghi e rettifiche INTRA|||
$rieprett|1|1|174|0|Riepiloghi e rettifiche INTRA|||

View File

@ -1,6 +1,6 @@
135
30
TIPOINTRA|1|1|0|<B>eni o <S>ervizi
SEZIONE|2|1|0|<1> Beni, <2> Rettifiche beni, <3> Servizi, <4> Rettifiche servizi
TIPO|1|1|0|<A>cquisti o <C>essioni , rettifiche <B> acquisti o <D> cessioni
ANNO|2|4|0|Anno
PERIODO|9|2|0|Periodo (Mese[1,12] / Trimestre[1,4] / Anno [1.,1])
@ -28,7 +28,8 @@ FREQUENZA|1|1|0|Frequenza (<M>ensile, <T>rimestrale, <A>nnuale)
NUMREG|3|7|0|Eventuale movimento di prima nota collegato
CODSERV|1|5|0|Codice prestazione di servizio
MODEROG|1|1|0|Modalità di erogazione <I>mmediata o <R> a più riprese
MODINC|1|1|0|Modalità di incasso <B>onifico, <A>ccredito o <X> Altro
ISOPAG|1|2|0|Codice Iso Paese di pagamento
1
TIPO+ANNO+PERIODO+NUMRIG|
MODINCPAG|1|1|0|Modalità di incasso <B>onifico, <A>ccredito o <X> Altro
ISOINCPAG|1|2|0|Codice Iso Paese di pagamento
2
ANNO+PERIODO+NUMRIG|
ANNO+PERIODO+TIPO+SEZIONE+NUMRIG|X

View File

@ -30,7 +30,7 @@ public:
void put(real num, int pos, int dim, int dec = 0);
void put(long num, int pos, int dim);
void put(char chr, int pos);
void genera_testata(const TIntra_context& ic);
void genera_testata(const TIntra_context& ic, long progr[], long tot[]);
void put(const TRectype& rec, TIntra_context& ic);
TRecord_intra();
};
@ -102,10 +102,14 @@ void TRecord_intra::reset(const TIntra_context& ic)
{
spaces();
put("EUROX", 1, 5);
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
TString16 cod;
cod.format("%c|%ld", ditta.get_char(NDT_TIPOA), ditta.get_long(NDT_CODANAGR));
const TRectype& anagr = cache().get(LF_ANAG, cod);
put(anagr.get(ANA_PAIV), 6, 11);
put(ic._progr, 17, 6);
}
@ -118,7 +122,7 @@ void TRecord_intra::reset_data()
}
// Scrive la testata con le informazioni della ditta
void TRecord_intra::genera_testata(const TIntra_context& ic)
void TRecord_intra::genera_testata(const TIntra_context& ic, long progr[], long tot[])
{
reset(ic);
@ -136,12 +140,13 @@ void TRecord_intra::genera_testata(const TIntra_context& ic)
put(cod, 35, 11);
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
put(ditta.get_bool("PRESELEN") ? '1' : '0', 46);
put(ditta.get_bool("CESSIVA") ? '1' : '0', 47);
put(ditta.get_bool(NDT_PRESELEN) ? '1' : '0', 46);
put(ditta.get_bool(NDT_CESSIVA) ? '1' : '0', 47);
cod.cut(0);
cod << ditta.get_char("TIPOSOGDEL") << '|';
cod << ditta.get("CODSOGDEL");
cod << ditta.get_char(NDT_TIPOSOGDEL) << '|';
cod << ditta.get(NDT_CODSOGDEL);
if (cod.len() >= 3)
{
const TRectype& sogdel = cache().get(LF_ANAG, cod);
@ -150,10 +155,11 @@ void TRecord_intra::genera_testata(const TIntra_context& ic)
else
put("", 48, 11, "Z");
put(ic._righe_riep, 59, 5);
put(ic._totale_riep, 64, 13, _ndec);
put(ic._righe_rett, 77, 5);
put(ic._totale_rett, 82, 13, _ndec);
for (int i = 0; i < 4; i++)
{
put(progr[i], 59 + i * 18, 5);
put(tot[i], 64 + i * 18, 13, _ndec);
}
}
// Scrive un intero record del file riepiloghi/rettifiche
@ -161,184 +167,190 @@ void TRecord_intra::put(const TRectype& rec, TIntra_context& ic)
{
reset_data();
put(rec.get_long("NUMRIG"), 24, 5);
const char tipointra = rec.get_char("TIPOINTRA");
const char tipo = rec.get_char("TIPO");
const int sezione = rec.get_int(RIEPINTRA_SEZIONE);
const TString & tipo = rec.get(RIEPINTRA_TIPO);
CHECK(tipointra == ic._tipointra, "Tipo Intra non previsto");
if (tipointra == 'B')
put((long) sezione, 23, 1);
put(rec.get_long(RIEPINTRA_NUMRIG), 24, 5); //?
if (tipo == "A")
{
switch (tipo)
switch (sezione)
{
case 'A':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
put(rec.get_char("NATURA"), 69);
put(rec.get("NOMENCL").mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4, 2), 74, 2, "Z");
put(rec.get("NOMENCL").mid(6, 2), 76, 2, "Z");
if (ic._freq == 'M')
{
put(rec.get_real("MASSAKG"), 78, 10, 0);
put(rec.get_real("MASSAUMS"), 88, 10, 0);
put(rec.get_real("VALSTAT"), 98, 13, _ndec);
put(rec.get_char("CONSEGNA"), 111);
put(rec.get_char("TRASPORTO"), 112);
put(rec.get("PAESE"), 113, 2);
put(rec.get("PAESEORIG"), 115, 2);
put(rec.get("PROV"), 117, 2);
}
else
put("", 78, 100);
case 1:
put(rec.get(RIEPINTRA_STATO), 29, 2);
put(rec.get(RIEPINTRA_PIVA), 31, 12);
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13);
put(rec.get_char(RIEPINTRA_NATURA), 69);
put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 70, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 74, 2, "Z");
put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 76, 2, "Z");
if (ic._freq == 'M')
{
put(rec.get_real(RIEPINTRA_MASSAKG), 78, 10, 0);
put(rec.get_real(RIEPINTRA_MASSAUMS), 88, 10, 0);
put(rec.get_real(RIEPINTRA_VALSTAT), 98, 13, _ndec);
put(rec.get_char(RIEPINTRA_CONSEGNA), 111);
put(rec.get_char(RIEPINTRA_TRASPORTO), 112);
put(rec.get(RIEPINTRA_PAESE), 113, 2);
put(rec.get(RIEPINTRA_PAESEORIG), 115, 2);
put(rec.get(RIEPINTRA_PROV), 117, 2);
}
else
put("", 78, 100);
break;
case 'B':
{
put('2', 23);
if (ic._freq == 'M')
put(rec.get("PERETT"), 29, 2, "RZ");
else
put("", 29, 2, "RZ");
if (ic._freq == 'T')
put(rec.get("PERETT")[1], 31);
else
put('0', 31);
put(rec.get("ANNORETT").right(2), 32, 2, "RZ");
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(rec.get_real("AMMLIRE"), 49, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 62, 13);
put(rec.get_char("NATURA"), 75);
put(rec.get("NOMENCL").mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get("NOMENCL").mid(4, 2), 80, 2, "Z");
put(rec.get("NOMENCL").mid(6, 2), 82, 2, "Z");
if (ic._freq == 'M')
put(rec.get_real("VALSTAT"), 84, 13, _ndec);
else
put("", 84, 13);
}
break;
case 'C':
put('1', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_char("NATURA"), 56);
put(rec.get("NOMENCL"), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
case 2:
{
put(rec.get_real("MASSAKG"), 65, 10);
put(rec.get_real("MASSAUMS"), 75, 10);
put(rec.get_real("VALSTAT"), 85, 13, _ndec);
put(rec.get_char("CONSEGNA"), 98);
put(rec.get_char("TRASPORTO"), 99);
put(rec.get("PAESE"), 100, 2);
put(rec.get("PROV"), 102, 2);
if (ic._freq == 'M')
put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ");
else
put("", 29, 2, "RZ");
if (ic._freq == 'T')
put(rec.get(RIEPINTRA_PERETT)[1], 31);
else
put('0', 31);
put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ");
put(rec.get(RIEPINTRA_STATO), 34, 2);
put(rec.get(RIEPINTRA_PIVA), 36, 12);
put(rec.get(RIEPINTRA_SEGNORETT), 48, 1);
put(rec.get_real(RIEPINTRA_AMMLIRE), 49, 13, _ndec);
put(rec.get_real(RIEPINTRA_AMMVALUTA), 62, 13);
put(rec.get_char(RIEPINTRA_NATURA), 75);
put(rec.get(RIEPINTRA_NOMENCL).mid(0, 4), 76, 4, "Z"); //il campo viene spezzato in 3 pezzi
put(rec.get(RIEPINTRA_NOMENCL).mid(4, 2), 80, 2, "Z");
put(rec.get(RIEPINTRA_NOMENCL).mid(6, 2), 82, 2, "Z");
if (ic._freq == 'M')
put(rec.get_real(RIEPINTRA_VALSTAT), 84, 13, _ndec);
else
put("", 84, 13);
}
else
put("", 65, 100);
break;
case 'D':
{
put('2', 23);
if (ic._freq == 'M')
put(rec.get("PERETT"), 29, 2, "RZ");
else
put("", 29, 2, "RZ");
if (ic._freq == 'T')
put(rec.get("PERETT")[1], 31);
else
put('0', 31);
put(rec.get("ANNORETT").right(2), 32, 2, "RZ");
put(rec.get("STATO"), 34, 2);
put(rec.get("PIVA"), 36, 12);
put(rec.get("SEGNORETT"), 48, 1);
put(abs(rec.get_real("AMMLIRE")), 49, 13, _ndec);
put(rec.get("NATURA"), 62, 1);
put(rec.get("NOMENCL"), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi
case 3:
put(rec.get(RIEPINTRA_STATO), 29, 2);
put(rec.get(RIEPINTRA_PIVA), 31, 12);
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
put(rec.get_real(RIEPINTRA_AMMVALUTA), 56, 13);
// put(numero fattura, 69, 15); facoltativo
// put(data fattura, 84, 6); facoltativo
put(rec.get(RIEPINTRA_CODSERV), 90, 6);
put(rec.get_char(RIEPINTRA_MODEROG), 96);
put(rec.get_char(RIEPINTRA_MODINCPAG), 97);
put(rec.get(RIEPINTRA_ISOINCPAG), 98, 2);
break;
case 4:
{
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
put(ditta.get(NDT_UFFDOG), 29, 6);
put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get(RIEPINTRA_STATO), 48, 2);
put(rec.get(RIEPINTRA_PIVA), 50, 12);
real ammlire = rec.get_real(RIEPINTRA_AMMLIRE);
if (ic._freq == 'M')
put(abs(rec.get_real("VALSTAT")), 71, 13, _ndec);
else
put("", 71, 13);
}
break;
default:
NFCHECK("Record di tipo sconosciuto: %c", tipo);
if (rec.get_real(RIEPINTRA_SEGNORETT) == "+")
ammlire = -ammlire;
put(rec.get_real(RIEPINTRA_AMMLIRE), 62, 13, _ndec);
put(rec.get_real(RIEPINTRA_AMMVALUTA), 75, 13);
// put(numero fattura, 88, 15); facoltativo
// put(data fattura, 103, 6); facoltativo
put(rec.get(RIEPINTRA_CODSERV), 109, 6);
put(rec.get_char(RIEPINTRA_MODEROG), 115);
put(rec.get_char(RIEPINTRA_MODINCPAG), 116);
put(rec.get(RIEPINTRA_ISOINCPAG), 117, 2);
}
break;
default:
NFCHECK("sezione sconosciuta: %d", sezione);
break;
}
}
else
{
switch (tipo)
switch (sezione)
{
case 'A':
put('3', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 56, 13);
// put(numero fattura, 69, 15);
// put(data fattura, 84, 6);
// put(codice servizio, 90, 6);
// put(modalità di erogazione, 96);
// put(modalità di incasso, 97);
// put(codice paese di pagamento, 98, 2);
case 1:
put(rec.get(RIEPINTRA_STATO), 29, 2);
put(rec.get(RIEPINTRA_PIVA), 31, 12);
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
put(rec.get_char(RIEPINTRA_NATURA), 56);
put(rec.get(RIEPINTRA_NOMENCL), 57, 8, "Z"); //il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
{
put(rec.get_real(RIEPINTRA_MASSAKG), 65, 10);
put(rec.get_real(RIEPINTRA_MASSAUMS), 75, 10);
put(rec.get_real(RIEPINTRA_VALSTAT), 85, 13, _ndec);
put(rec.get_char(RIEPINTRA_CONSEGNA), 98);
put(rec.get_char(RIEPINTRA_TRASPORTO), 99);
put(rec.get(RIEPINTRA_PAESE), 100, 2);
put(rec.get(RIEPINTRA_PROV), 102, 2);
}
else
put("", 65, 100);
break;
case 2:
{
if (ic._freq == 'M')
put(rec.get(RIEPINTRA_PERETT), 29, 2, "RZ");
else
put("", 29, 2, "RZ");
if (ic._freq == 'T')
put(rec.get(RIEPINTRA_PERETT)[1], 31);
else
put('0', 31);
put(rec.get(RIEPINTRA_ANNORETT).right(2), 32, 2, "RZ");
put(rec.get(RIEPINTRA_STATO), 34, 2);
put(rec.get(RIEPINTRA_PIVA), 36, 12);
put(rec.get(RIEPINTRA_SEGNORETT), 48, 1);
put(abs(rec.get_real(RIEPINTRA_AMMLIRE)), 49, 13, _ndec);
put(rec.get(RIEPINTRA_NATURA), 62, 1);
put(rec.get(RIEPINTRA_NOMENCL), 63, 8, "Z"); // il campo NON viene spezzato in 3 pezzi
if (ic._freq == 'M')
put(abs(rec.get_real(RIEPINTRA_VALSTAT)), 71, 13, _ndec);
else
put("", 71, 13);
}
break;
case 'B':
{
put('4', 23);
// put(sezione doganale, 29, 6);
put(rec.get("ANNORETT").right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get("STATO"), 48, 2);
put(rec.get("PIVA"), 50, 12);
put(rec.get_real("AMMLIRE"), 62, 13, _ndec);
put(rec.get_real("AMMVALUTA"), 75, 13);
// put(numero fattura, 88, 15);
// put(data fattura, 103, 6);
// put(codice servizio, 109, 6);
// put(modalità di erogazione, 115);
// put(modalità di incasso, 116);
// put(codice paese di pagamento, 117, 2);
}
break;
case 'C':
put('3', 23);
put(rec.get("STATO"), 29, 2);
put(rec.get("PIVA"), 31, 12);
put(rec.get_real("AMMLIRE"), 43, 13, _ndec);
// put(numero fattura, 56, 15);
// put(data fattura, 71, 6);
// put(codice servizio, 77, 6);
// put(modalità di erogazione, 83);
// put(modalità di incasso,84);
// put(codice paese di pagamento, 85, 2);
case 3:
put(rec.get(RIEPINTRA_STATO), 29, 2);
put(rec.get(RIEPINTRA_PIVA), 31, 12);
put(rec.get_real(RIEPINTRA_AMMLIRE), 43, 13, _ndec);
// put(numero fattura, 56, 15); facoltativo
// put(data fattura, 71, 6); facoltativo
put(rec.get(RIEPINTRA_CODSERV), 77, 6);
put(rec.get_char(RIEPINTRA_MODEROG), 83);
put(rec.get_char(RIEPINTRA_MODINCPAG), 84);
put(rec.get(RIEPINTRA_ISOINCPAG), 85, 2);
break;
case 4:
{
const TRectype& ditta = cache().get(LF_NDITTE, main_app().get_firm());
put(ditta.get(NDT_UFFDOG), 29, 6);
put(rec.get(RIEPINTRA_ANNORETT).right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get(RIEPINTRA_STATO), 48, 2);
put(rec.get(RIEPINTRA_PIVA), 50, 12);
real ammlire = rec.get_real(RIEPINTRA_AMMLIRE);
if (rec.get_real(RIEPINTRA_SEGNORETT) == "+")
ammlire = -ammlire;
put(ammlire, 2, 13, _ndec);
// put(numero fattura, 75, 15); facoltativo
// put(data fattura, 90, 6); facoltativo
put(rec.get(RIEPINTRA_CODSERV), 96, 6);
put(rec.get_char(RIEPINTRA_MODEROG), 102);
put(rec.get_char(RIEPINTRA_MODINCPAG), 103);
put(rec.get(RIEPINTRA_ISOINCPAG), 104, 2);
}
break;
case 'D':
{
put('4', 23);
// put(sezione doganale, 29, 6);
put(rec.get("ANNORETT").right(2), 35, 2, "RZ");
// put(protocollo rettifica, 37, 6, "RZ");
// put(progressivo rettifica, 43, 5, "RZ");
put(rec.get("STATO"), 48, 2);
put(rec.get("PIVA"), 50, 12);
put(rec.get_real("AMMLIRE"), 2, 13, _ndec);
// put(numero fattura, 75, 15);
// put(data fattura, 90, 6);
// put(codice servizio, 96, 6);
// put(modalità di erogazione, 102);
// put(modalità di incasso, 103);
}
break;
default:
NFCHECK("Record di tipo sconosciuto: %c", tipo);
default:
NFCHECK("sezione sconosciuta: %d", sezione);
break;
}
}
@ -362,17 +374,20 @@ TRecord_intra::TRecord_intra() : TString(132), _ndec(0)
class TInvioIntra1_2_mask : public TIntra_mask
{
long _progr[4];
long _totale[4];
protected:
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
virtual short type_field() const { return F_TIPO; }
virtual short period_field() const { return F_PERIODO_M; }
virtual int anno() const { return get_int(F_ANNO); }
TRecnotype calcola_totale(TCursor& cur, real& tot) const;
void calcola_repiloghi(const TRectype & rec);
void proponi_numero();
public:
void genera(char tipointra, char tipo);
void genera(char tipointra, char tipo, bool reset = false);
void update_testata(char tipo);
TInvioIntra1_2_mask::TInvioIntra1_2_mask() : TIntra_mask("in0200a") {}
};
@ -452,33 +467,21 @@ bool TInvioIntra1_2_mask::on_field_event(TOperable_field& o, TField_event e, lon
return TIntra_mask::on_field_event(o, e, jolly);
}
TRecnotype TInvioIntra1_2_mask::calcola_totale(TCursor& cur, real& tot) const
void TInvioIntra1_2_mask::calcola_repiloghi(const TRectype & rec)
{
TWait_cursor arrow;
const TRecnotype items = cur.items();
cur.freeze();
int sezione = rec.get_int(RIEPINTRA_SEZIONE);
real r = rec.get_real(RIEPINTRA_AMMLIRE).round(0); // Arrotonda all'Euro i valori intermedi
long val = atol(r.string());
tot = ZERO;
const TRectype& rec = cur.curr();
for (cur = 0L; cur.pos() < items; ++cur)
{
const char tipo = rec.get_char("TIPO");
const real val = rec.get_real("AMMLIRE").round(0); // Arrotonda all'Euro i valori intermedi
// Da chiarire: come sommare le rettifiche negative!
if ((tipo == 'B' || tipo == 'D') && rec.get_char("SEGNORETT") == '-')
tot -= val; // Rettifiche negative
else
tot += val;
}
return items;
if ((sezione == 2 || sezione == 4) && rec.get_char("SEGNORETT") == '-')
val = -val; // Rettifiche negative
_totale[--sezione] += val;
}
void TInvioIntra1_2_mask::genera(char tipointra, char tipo)
void TInvioIntra1_2_mask::genera(char tipointra, char tipo, bool reset)
{
TIntra_context ic;
ic._tipointra = tipointra;
ic._tipo = tipo;
ic._anno = anno();
ic._freq = frequenza(ic._anno);
@ -491,7 +494,7 @@ void TInvioIntra1_2_mask::genera(char tipointra, char tipo)
ird.put("CODTAB", codtab);
const bool exist = ird.read() == NOERR;
if (exist)
if (reset && exist)
{
const char* ac = tipo == 'A' ? TR("acquisti") : TR("cessioni");
if (!yesno_box(FR("Il file %s del periodo indicato è già stato generato:\n"
@ -502,71 +505,99 @@ void TInvioIntra1_2_mask::genera(char tipointra, char tipo)
TRelation rel(LF_RIEPRETT);
TRectype filter(LF_RIEPRETT);
filter.put("TIPOINTRA", ic._tipointra);
filter.put("TIPO", ic._tipo);
filter.put("ANNO", ic._anno);
filter.put("PERIODO", periodo_str());
TCursor riep(&rel, "", 1, &filter, &filter);
ic._righe_riep = calcola_totale(riep, ic._totale_riep);
filter.put("TIPO", char(ic._tipo+1));
TCursor rett(&rel, "", 1, &filter, &filter);
ic._righe_rett = calcola_totale(rett, ic._totale_rett);
TCursor riep(&rel, "", 2, &filter, &filter);
const TRectype & rieprec = riep.curr();
const long items = riep.items();
TFilename name = get(F_PATH);
TString filename(get(F_CODUA));
filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO));
name.add(filename);
if (name.exist() && yesno_box(FR("Il file %s esiste già: si desiderla sostituirlo ?\n"), (const char*)name))
return;
ofstream out(name, ios::out | ios::app);
if (!out)
if (!out.good())
{
cantwrite_box(name);
return;
}
if (reset)
{
_progr[0] = 0L;
_progr[1] = 0L;
_progr[2] = 0L;
_progr[3] = 0L;
_totale[0] = 0L;
_totale[1] = 0L;
_totale[2] = 0L;
_totale[3] = 0L;
}
TProgress_monitor pi(2 * items, TR("Generazione Intra 1/2"), false);
TRecord_intra rec;
for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep)
calcola_repiloghi(rieprec);
rec.genera_testata(ic, _progr, _totale);
out << rec;
for (riep = 0L; pi.add_status() && riep.pos() < items; ++riep)
{
rec.put(rieprec, ic);
out << rec;
}
}
void TInvioIntra1_2_mask::update_testata(char tipo)
{
TIntra_context ic;
ic._tipo = tipo;
ic._anno = anno();
ic._freq = frequenza(ic._anno);
ic._periodo = periodo();
ic._progr = get_long(F_NUMERO);
TFilename name = get(F_PATH);
TString filename(get(F_CODUA));
TRecord_intra rec;
filename << format("%02d%02d%02d", today.day(), today.month(), get_int(F_NUMERO));
name.add(filename);
ofstream out(name, ios::out | ios::ate);
if (!out.good())
{
cantwrite_box(name);
return;
}
const long total = ic._righe_riep + ic._righe_rett;
TProgress_monitor pi(total, TR("Generazione Intra 1/2"), false);
TRecord_intra rec;
rec.genera_testata(ic);
rec.genera_testata(ic, _progr, _totale);
out << rec;
rec.reset_data();
for (riep = 0L; riep.pos() < ic._righe_riep; ++riep)
{
pi.add_status();
rec.put(riep.curr(), ic);
out << rec;
}
rec.reset_data();
for (rett = 0L; rett.pos() < ic._righe_rett; ++rett)
{
pi.add_status();
rec.put(riep.curr(), ic);
out << rec;
}
TString8 codtab; codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
TTable ird("IRD");
set(F_NUMERO, ic._progr + 1);
codtab.format("%c%04d%02d", ic._tipo, ic._anno, ic._periodo);
ird.put("CODTAB", codtab);
ird.put("I2", ic._righe_riep);
ird.put("I3", ic._righe_rett);
ird.put("R0", ic._totale_riep);
ird.put("R1", ic._totale_rett);
ird.put("I0", ic._progr + 1);
ird.put("I2", _progr[0]);
ird.put("I3", _progr[1]);
ird.put("I4", _progr[2]);
ird.put("I5", _progr[3]);
ird.put("R2", _totale[0]);
ird.put("R3", _totale[1]);
ird.put("R4", _totale[2]);
ird.put("R5", _totale[3]);
ird.rewrite_write();
set(F_NUMERO, ic._progr + 1);
set(F_NUMERO, ic._progr + 1);
TString msg("Generato il file ");
msg << name;
message_box(name);
message_box(msg);
}
///////////////////////////////////////////////////////////
@ -589,17 +620,20 @@ void TInvioIntra1_2_app::main_loop()
while (m.run() == K_ENTER)
{
const char tip = m.tipo();
if (tip == 'T')
{
m.genera('B', 'C');
m.genera('B', 'C', true);
m.genera('B', 'A');
m.genera('S', 'C');
m.genera('S', 'A');
m.update_testata('A');
}
else
{
m.genera('B', tip);
m.genera('B', tip, true);
m.genera('S', tip);
m.update_testata('C');
}
}
m.save();

View File

@ -650,12 +650,12 @@ void TInvioIntra12_13_mask::genera()
rec_z.fill();
out << rec_z;
/* TString8 codtab; codtab.format("A%04d%01", get_int(F_ANNO));
TRectype & rird = (TRectype &)cache().get("IRD", codtab);
TString8 codtab; codtab.format("A%04d%01", get_int(F_ANNO));
TRectype & rird = (TRectype &)cache().get("IRD", codtab);
ic._progr = get_long(F_NUMERO);
rird.put("I4", ic._progr);
rird.rewrite_write(); */
rird.put("I6", ic._progr);
rird.rewrite_write();
TString msg("Generato il file ");

View File

@ -56,6 +56,14 @@ protected:
virtual bool changing_mask(int mode) { return FALSE; }
virtual bool user_destroy();
virtual bool protected_record(TRectype & rec);
// @cmember Inizializza la maschera per il modo ricerca
virtual void init_query_mode(TMask&);
// @cmember Inizializza la maschera per il modo ricerca ed inserimento (chiama <mf TRelation_application::init_query_mode>)
virtual void init_query_insert_mode(TMask& m);
// @cmember Inizializza la maschera per il modo inserimento
virtual void init_insert_mode(TMask&);
// @cmember Inizializza la maschera per il modo modifica
virtual void init_modify_mode(TMask&);
public:
};
@ -295,9 +303,13 @@ bool TImmissione_mask::on_sheet_field_event(TOperable_field& o, TField_event e,
if (e == fe_modify)
{
TMask& m = o.mask();
if (!o.empty())
const TString & val = o.get();
if (val.len() != 8)
return error_box(TR("La lunghezza del codice nomenclatura combinata deve essere 8"));
if (val.full())
{
const TRectype& nom = cache().get("%NOC", o.get());
const TRectype& nom = cache().get("%NOC", val);
m.set(F_UMS, nom.get("S5"), 0x1);
@ -333,6 +345,50 @@ TImmissione_mask::TImmissione_mask()
// Applicazione principale
///////////////////////////////////////////////////////////
void TImmissione_intra::init_query_mode(TMask& m)
{
TRelation_application::init_query_mode(m);
m.show(F_NUM_REG);
m.hide(F_NUM_REG_INS);
}
void TImmissione_intra::init_query_insert_mode(TMask& m)
{
m.hide(F_NUM_REG);
m.show(F_NUM_REG_INS);
}
void TImmissione_intra::init_insert_mode(TMask& m)
{
TRelation_application::init_insert_mode(m);
m.show(F_NUM_REG);
m.hide(F_NUM_REG_INS);
const TRectype & mov = cache().get(LF_MOV, m.get(F_NUM_REG));
const TString & tipocf = mov.get(MOV_TIPO);
const long codcf = mov.get_long(MOV_CODCF);
m.set(F_TIPO_MOV, tipocf == "F" ? "A" : "C");
m.set(F_CLIFO, codcf);
m.enable(F_TIPO_MOV, codcf == 0L);
m.enable(F_CLIFO, codcf == 0L);
m.enable(F_RAGSOC, codcf == 0L);
}
void TImmissione_intra::init_modify_mode(TMask& m)
{
TRelation_application::init_modify_mode(m);
m.show(F_NUM_REG);
m.hide(F_NUM_REG_INS);
const long codcf = m.get_long(F_CLIFO);
m.enable(F_TIPO_MOV, codcf == 0L);
m.enable(F_CLIFO, codcf == 0L);
m.enable(F_RAGSOC, codcf == 0L);
}
bool TImmissione_intra::protected_record(TRectype & rec)
{
const char tipo = rec.get_char("TIPOMOV");

View File

@ -2,26 +2,27 @@
#define F_DITTA_DESCR 302
#define F_NUM_REG 303
#define F_DATA_DOC 304
#define F_NUM_DOC 305
#define F_NUM_REG_INS 304
#define F_DATA_DOC 305
#define F_NUM_DOC 306
#define F_DATA_REG 306
#define F_DATA_INT 307
#define F_TIPO_MOV 308
#define F_DATA_REG 307
#define F_DATA_INT 308
#define F_TIPO_MOV 309
#define F_TIPO_CF 310
#define F_CLIFO 311
#define F_RAGSOC 312
#define F_TIPO_CF 320
#define F_CLIFO 321
#define F_RAGSOC 322
#define F_STATO 315
#define F_PARTITA_IVA 316
#define F_STATO 325
#define F_PARTITA_IVA 326
#define F_TOT_DOC 320
#define F_TOT_IMM 321
#define F_DIF 322
#define F_TOT_DOC 330
#define F_TOT_IMM 331
#define F_DIF 332
#define F_VALUTA 330
#define F_CAMBIO 331
#define F_VALUTA 340
#define F_CAMBIO 341
#define F_RIGHE 350

View File

@ -36,15 +36,37 @@ BEGIN
DISPLAY "Numero" NUMREG
DISPLAY "Data@10" DATAREG
DISPLAY "C/A" TIPOMOV
DISPLAY "Totale documento@R" TOTDOC
DISPLAY "Totale documento" TOTDOC
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NUM_REG NUMREG
OUTPUT F_NUM_REG_INS NUMREG
CHECKTYPE REQUIRED
FLAGS "G"
KEY 1
FIELD NUMREG
END
NUMBER F_NUM_REG_INS 7
BEGIN
PROMPT 1 3 "Numero registrazione "
USE MOV SELECT (LF_CAUSALI->INTRACOM=="X")&&(LF_INTRA->NUMREG="")
JOIN LF_INTRA INTO NUMREG==NUMREG
JOIN LF_CAUSALI INTO CODCAUS==CODCAUS
JOIN LF_CLIFO INTO TIPOCF==TIPO CODCF==CODCF
INPUT NUMREG F_NUM_REG
DISPLAY "Numero" NUMREG
DISPLAY "Data@10" DATAREG
DISPLAY "C/A" TIPOMOV
DISPLAY "Totale documento" TOTDOC
DISPLAY "Ragione Sociale@50" LF_CLIFO->RAGSOC
OUTPUT F_NUM_REG_INS NUMREG
OUTPUT F_NUM_REG NUMREG
CHECKTYPE REQUIRED
FLAGS "GH"
KEY 1
FIELD NUMREG
END
DATA F_DATA_DOC
BEGIN
PROMPT 34 3 "Documento numero "
@ -179,7 +201,7 @@ BEGIN
FIELD CAMBIO
END
SPREADSHEET F_RIGHE 78 -3
SPREADSHEET F_RIGHE -1 -3
BEGIN
PROMPT 0 10 ""
ITEM "Tipo@7"
@ -264,7 +286,6 @@ BEGIN
DISPLAY "Descrizione@50" S0
OUTPUT F_NOMENCLATURA CODTAB
FIELD NOMENCL
VALIDATE FIXLEN_FUNC 8
CHECKTYPE REQUIRED
GROUP GR_BENI
FLAGS "Z"

View File

@ -161,7 +161,7 @@ protected:
virtual void init_insert_mode(TMask& m);
virtual void init_modify_mode(TMask& m);
virtual bool save_and_new() const { return TRUE; };
virtual void check_existent_disk(const TMask& m);
// virtual void check_existent_disk(const TMask& m);
public:
};
@ -183,12 +183,12 @@ bool TRiepiloghi_intra::user_destroy()
bool TRiepiloghi_intra::get_next_key(TToken_string& k)
{
if (_msk->get(F_ANNO).empty() || _msk->get(F_PARTITA_IVA).empty())
if (_msk->get(F_ANNO).empty()) // || _msk->get(F_PARTITA_IVA).empty())
return false;
_msk->autosave(*_rel);
TRectype filter(_rel->curr());
filter.zero("NUMRIG");
filter.zero(RIEPINTRA_NUMRIG);
TCursor cur(_rel, "", 1, &filter, &filter);
const long r = cur.items();
@ -205,19 +205,19 @@ bool TRiepiloghi_intra::get_next_key(TToken_string& k)
void TRiepiloghi_intra::init_insert_mode(TMask& m)
{
check_existent_disk(m);
// check_existent_disk(m);
m.enable(F_VALUTA);
}
void TRiepiloghi_intra::init_modify_mode(TMask& m)
{
check_existent_disk(m);
// check_existent_disk(m);
m.enable(F_VALUTA);
}
int TRiepiloghi_intra::write(const TMask& m)
{
_rel->curr().put("FREQUENZA", ((TRiepiloghi_mask &) m).frequenza(m.get_int(F_ANNO)));
_rel->curr().put(RIEPINTRA_FREQUENZA, ((TRiepiloghi_mask &) m).frequenza(m.get_int(F_ANNO)));
return TRelation_application::write(m);
}
void TRiepiloghi_intra::init_query_mode(TMask& m)
@ -240,6 +240,7 @@ void TRiepiloghi_intra::init_query_mode(TMask& m)
m.disable(F_VALUTA);
}
/*
void TRiepiloghi_intra::check_existent_disk(const TMask& m)
{
int anno = m.get_int(F_ANNO);
@ -262,6 +263,7 @@ void TRiepiloghi_intra::check_existent_disk(const TMask& m)
warning_box(FR("E' già stato generato scambi.cee per il periodo %d dell'anno %d"), periodo,anno);
}
*/
int in0600(int argc, char* argv[])
{

View File

@ -1,17 +1,18 @@
#define F_DITTA 301
#define F_DITTA_DESCR 302
#define F_TIPO 303
#define F_ANNO 304
#define F_PERIODO_M 305
#define F_PERIODO_T 306
#define F_PERIODO_A 307
#define F_STATO 308
#define F_TIPO_CF 309
#define F_PARTITA_IVA 310
#define F_PARTITA_DESC 311
#define F_NUM_RIG 312
#define F_RIEPILOGHI 313
#define F_SEZIONE 303
#define F_TIPO 304
#define F_ANNO 305
#define F_PERIODO_M 306
#define F_PERIODO_T 307
#define F_PERIODO_A 308
#define F_STATO 309
#define F_TIPO_CF 310
#define F_PARTITA_IVA 311
#define F_PARTITA_DESC 312
#define F_NUM_RIG 313
#define F_RIEPILOGHI 314
#define F_NATURA_TRANS 321
#define F_NATURA_DESCR 322
@ -34,6 +35,12 @@
#define F_TRASPORTO_DESC 358
#define F_PERIODO_H 359
#define F_UMS 360
#define F_CODSERV 361
#define F_MODEROG 362
#define F_MODINCPAG 363
#define F_STATOINCPAG 364
#define GR_CESSIONI 1
#define GR_ACQUISTI 2
#define GR_BENI 3
#define GR_SERVIZI 4

View File

@ -101,32 +101,26 @@ BEGIN
WARNING "Anno non valido"
END
LIST F_TIPOINTRA 1 7
LIST F_SEZIONE 1 7
BEGIN
PROMPT 46 3 "Tipo Intra "
ITEM "B|Beni" MESSAGE ENABLE,-GR_BENI|DISABLE,GR_SERVIZI
ITEM "S|Servizi" MESSAGE DISABLE,-GR_BENI|ENABLE,GR_SERVIZI
KEY 1
FIELD TIPOINTRA
PROMPT 46 3 "Sezione "
ITEM "1|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@
ITEM "3|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@
FIELD SEZIONE
END
LIST F_TIPO 1 10
BEGIN
PROMPT 67 3 "Tipo riepilogo "
ITEM "C|Cessioni"
MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "A|Acquisti"
MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@
KEY 1
ITEM "C|Cessioni" MESSAGE "C",F_TIPO_CF|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "A|Acquisti" MESSAGE "F",F_TIPO_CF|SHOW,GR_ACQUISTI@|HIDE,GR_CESSIONI@
FIELD TIPO
END
NUBER F_NUM_RIG 7
BEGIN
PROMPT 1 4 "Riga di riepilogo "
USE LF_RIEPRETT
INPUT TIPOINTRA F_TIPO SELECT
INPUT TIPO F_TIPO SELECT
USE LF_RIEPRETT SELECT (SEZIONE=="1")||(SEZIONE=="3")
INPUT ANNO F_ANNO SELECT
INPUT PERIODO F_PERIODO_H SELECT
INPUT NUMRIG F_NUM_RIG
@ -192,7 +186,6 @@ BEGIN
FLAGS "D"
END
STRING F_NATURA_TRANS 1
BEGIN
PROMPT 1 8 "Natura transazione "
@ -205,6 +198,7 @@ BEGIN
OUTPUT F_NATURA_DESCR S0
CHECKTYPE REQUIRED
FIELD NATURA
GROUP GR_BENI
END
MEMO F_NATURA_DESCR 50 3
@ -238,6 +232,7 @@ BEGIN
MESSAGE DIRTY,F_NOMENCLATURA3
FIELD NOMENCL[1,4]
WARNING "Nomenclatura combinata assente"
GROUP GR_BENI
END
STRING F_NOMENCLATURA2 2
@ -248,6 +243,7 @@ BEGIN
VALIDATE REQIF_FUNC 1 F_NOMENCLATURA3
MESSAGE DIRTY,F_NOMENCLATURA3
WARNING "Nomenclatura combinata assente"
GROUP GR_BENI
END
NUMBER F_NOMENCLATURA3 2
@ -258,6 +254,7 @@ BEGIN
CHECKTYPE NORMAL
FIELD NOMENCL[7,8]
WARNING "Nomenclatura combinata assente"
GROUP GR_BENI
END
STRING F_NOMENCL_DESC 40
@ -279,6 +276,7 @@ BEGIN
CHECKTYPE REQUIRED
FIELD CONSEGNA
WARNING "Condizione di consegna assente"
GROUP GR_BENI
END
STRING F_CONSEGNA_DESC 50
@ -299,6 +297,7 @@ BEGIN
CHECKTYPE REQUIRED
FIELD TRASPORTO
WARNING "Modo di trasporto assente"
GROUP GR_BENI
END
STRING F_TRASPORTO_DESC 50
@ -311,13 +310,13 @@ END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Paese di destinazione"
GROUP GR_CESSIONI
GROUP GR_CESSIONI GR_BENI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 13 "Paese di provenienza"
GROUP GR_ACQUISTI
GROUP GR_ACQUISTI GR_BENI
END
STRING F_PAESE 2
@ -331,6 +330,7 @@ BEGIN
OUTPUT F_PAESE CODTAB
CHECKTYPE REQUIRED
FIELD PAESE
GROUP GR_BENI
WARNING "Paese assente"
END
@ -341,19 +341,20 @@ BEGIN
CHECKTYPE REQUIRED
FLAGS "U"
FIELD PAESEORIG
GROUP GR_BENI
WARNING "Paese di origine assente"
END
TEXT DLG_NULL
BEGIN
PROMPT 46 13 "Provincia d'origine "
GROUP GR_CESSIONI
GROUP GR_CESSIONI GR_BENI
END
TEXT DLG_NULL
BEGIN
PROMPT 46 13 "Prov. destinazione "
GROUP GR_ACQUISTI
GROUP GR_ACQUISTI GR_BENI
END
STRING F_PROV 2
@ -363,6 +364,7 @@ BEGIN
FIELD PROV
CHECTYPE REQUIRED
WARNING "Provincia assente"
GROUP GR_BENI
END
CURRENCY F_AMM_LIRE 18
@ -384,6 +386,7 @@ BEGIN
OUTPUT F_VALUTA CODTAB
FIELD CODVAL
FLAGS "GUZ"
GROUP GR_BENI
END
CURRENCY F_AMM_VALUTA 18
@ -392,12 +395,14 @@ BEGIN
DRIVENBY F_VALUTA
FIELD AMMVALUTA
WARNING "Inserire l'ammontare in valuta"
GROUP GR_BENI
END
CURRENCY F_VALORE_STAT 18
BEGIN
PROMPT 1 16 "Valore statistico "
FIELD VALSTAT
GROUP GR_BENI
END
NUMBER F_MASSA_KG 18 5
@ -405,6 +410,7 @@ BEGIN
PROMPT 1 17 "Massa netta in Kg "
PICTURE ".5"
FIELD MASSAKG
GROUP GR_BENI
END
STRING F_UMS 2
@ -419,6 +425,76 @@ BEGIN
PICTURE ".5"
FIELD MASSAUMS
WARNING "Inserire la massa in unità supplementare"
GROUP GR_BENI
END
STRING F_CODSERV 5
BEGIN
PROMPT 1 18
FIELD CODSERV
USE %CPA
INPUT CODTAB F_CODSERV
DISPLAY "Classificazione" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODSERV CODTAB
GROUP GR_SERVIZI
END
LIST F_MODEROG 1 15
BEGIN
PROMPT 1 19 "Modalità Erogazione"
ITEM "I|Unica soluzione"
ITEM "R|Più soluzioni"
FIELD MODEROG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Modalità di incasso "
GROUP GR_CESSIONI GR_SERVIZI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Modalità di pagamento"
GROUP GR_ACQUISTI GR_BENI
FLAGS "G"
END
LIST F_MODINCPAG 1 9
BEGIN
PROMPT 20 20 ""
ITEM "B|Bonifico"
ITEM "A|Accredito"
ITEM "X|Altro"
FIELD MODINCPAG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 21 "Stato di incasso "
GROUP GR_CESSIONI GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 21 "Stato di pagamento "
GROUP GR_ACQUISTI GR_BENI
END
STRING F_STATOINCPAG 2
BEGIN
PROMPT 20 21 ""
USE %SCE
INPUT CODTAB F_STATOINCPAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOINCPAG CODTAB
FIELD ISOINCPAG
GROUP GR_SERVIZI
END
BUTTON F_RIEPILOGHI 20 2

View File

@ -87,6 +87,7 @@ bool TRettifiche_mask::on_field_event(TOperable_field& o, TField_event e, long j
break;
default:
const int pos = id2pos(dlg);
if (pos >= 0)
set(dlg + F_STATO - O_STATO, fld(pos).get());
break;
@ -201,8 +202,7 @@ void TRettifiche_intra::init_modify_mode(TMask& m)
const char* TRettifiche_intra::get_next_key()
{
TRectype& curr = _rel->curr();
curr.put("TIPO", _msk->tipo());
curr.put("ANNO", _msk->anno());
curr.put("ANNO", _msk->anno());
curr.put("PERIODO", _msk->periodo_str());
TCursor cur(_rel, "", 1, &curr, &curr);
const long items = cur.items();
@ -213,8 +213,6 @@ const char* TRettifiche_intra::get_next_key()
last_row = curr.get_int("NUMRIG");
}
_str.cut(0);
_str.add(F_TIPO);
_str.add(curr.get("TIPO"));
_str.add(F_ANNO);
_str.add(curr.get("ANNO"));
_str.add(F_PERIODO_M);

View File

@ -11,6 +11,7 @@
#define O_PARTITA_IVA 110
#define O_PARTITA_DESC 111
#define O_NUM_RIG 112
#define O_SEZIONE 113
#define O_NATURA_TRANS 121
#define O_NOMENCLATURA 122
@ -37,3 +38,13 @@
#define F_VALUTA 225
#define F_VALORE_STAT 226
#define F_NUMREG 229
#define F_SEZIONE 230
#define F_CODSERV 231
#define F_MODEROG 232
#define F_MODINCPAG 233
#define F_STATOINCPAG 234
#define GR_CESSIONI 1
#define GR_ACQUISTI 2
#define GR_BENI 3
#define GR_SERVIZI 4

View File

@ -79,15 +79,24 @@ BEGIN
ITEM "01|Annuale"
END
NUBER O_NUM_RIG 7
LIST O_SEZIONE 1 7
BEGIN
PROMPT 46 4 "Sezione "
ITEM "1|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@
ITEM "3|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@
KEY 1
FLAGS "D"
END
NUMBER O_NUM_RIG 7
BEGIN
PROMPT 63 4 "Riga "
USE LF_RIEPRETT
INPUT TIPO O_TIPO SELECT
USE LF_RIEPRETT SELECT (SEZIONE==#OSEZIONE)&&(TIPO==#O_TIPO)
INPUT ANNO O_ANNO SELECT
INPUT PERIODO O_PERIODO_M
INPUT NUMRIG O_NUM_RIG
DISPLAY "Tipo" TIPO
DISPLAY "Sezione" SEZIONE
DISPLAY "Anno" ANNO
DISPLAY "Periodo" PERIODO
DISPLAY "Numero" NUMRIG
@ -102,6 +111,8 @@ BEGIN
OUTPUT O_PERIODO_T PERIODO
OUTPUT O_NUM_RIG NUMRIG
OUTPUT O_STATO STATO
// OUTPUT O_TIPO TIPO
OUTPUT O_SEZIONE SEZIONE
OUTPUT O_PARTITA_IVA PIVA
OUTPUT O_NATURA_TRANS NATURA
OUTPUT O_NOMENCLATURA NOMENCL
@ -199,11 +210,8 @@ END
LIST F_TIPO 1 10
BEGIN
PROMPT 2 12 "Tipo "
ITEM "D|Cessioni"
MESSAGE "C",F_TIPO_CF|"C",O_TIPO
ITEM "B|Acquisti"
MESSAGE "F",F_TIPO_CF|"A",O_TIPO
KEY 1
ITEM "A|Cessioni" MESSAGE "C",F_TIPO_CF|"C",O_TIPO|SHOW,GR_CESSIONI@|HIDE,GR_ACQUISTI@
ITEM "C|Acquisti" MESSAGE "F",F_TIPO_CF|"A",O_TIPO|HIDE,GR_CESSIONI@|SHOW,GR_ACQUISTI@
FIELD TIPO
END
@ -242,10 +250,19 @@ BEGIN
KEY 1
END
LIST F_SEZIONE 1 7
BEGIN
PROMPT 46 12 "Sezione"
ITEM "2|Beni" MESSAGE ENABLE,GR_BENI@|DISABLE,GR_SERVIZI@|"2",O_SEZIONE
ITEM "4|Servizi" MESSAGE DISABLE,GR_BENI@|ENABLE,GR_SERVIZI@|"4",O_SEZIONE
KEY 1
FIELD SEZIONE
END
NUBER F_NUM_RIG 7
BEGIN
PROMPT 63 12 "Riga "
USE LF_RIEPRETT
USE LF_RIEPRETT (SEZIONE=="2")||(SEZIONE=="4")
INPUT TIPO F_TIPO SELECT
INPUT ANNO F_ANNO SELECT
INPUT PERIODO F_PERIODO_M
@ -322,6 +339,7 @@ BEGIN
DISPLAY "Descrizione@70" S0
OUTPUT F_NATURA_TRANS CODTAB
FIELD NATURA
GROUP GR_BENI
END
NUMBER F_NOMENCLATURA 8
@ -334,6 +352,7 @@ BEGIN
OUTPUT F_NOMENCLATURA CODTAB
FIELD NOMENCL
WARNING "Nomenclatura combinata assente"
GROUP GR_BENI
END
LIST F_SEGNO 1
@ -361,6 +380,7 @@ BEGIN
OUTPUT F_VALUTA CODTAB
CHECKTYPE NORMAL
FIELD CODVAL
GROUP GR_BENI
END
CURRENCY F_AMM_VALUTA 18
@ -368,17 +388,88 @@ BEGIN
PROMPT 59 16 ""
DRIVENBY F_VALUTA
FIELD AMMVALUTA
GROUP GR_BENI
END
CURRENCY F_VALORE_STAT 18
BEGIN
PROMPT 2 17 "Valore statistico "
FIELD VALSTAT
GROUP GR_BENI
END
STRING F_CODSERV 5
BEGIN
PROMPT 1 18
FIELD CODSERV
USE %CPA
INPUT CODTAB F_CODSERV
DISPLAY "Classificazione" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_CODSERV CODTAB
GROUP GR_SERVIZI
END
LIST F_MODEROG 1 15
BEGIN
PROMPT 1 19 "Modalità Erogazione"
ITEM "I|Unica soluzione"
ITEM "R|Più soluzioni"
FIELD MODEROG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Modalità di incasso "
GROUP GR_CESSIONI GR_SERVIZI
FLAGS "G"
END
TEXT DLG_NULL
BEGIN
PROMPT 1 20 "Modalità di pagamento"
GROUP GR_ACQUISTI GR_BENI
FLAGS "G"
END
LIST F_MODINCPAG 1 9
BEGIN
PROMPT 20 20 ""
ITEM "B|Bonifico"
ITEM "A|Accredito"
ITEM "X|Altro"
FIELD MODINCPAG
GROUP GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 21 "Stato di incasso "
GROUP GR_CESSIONI GR_SERVIZI
END
TEXT DLG_NULL
BEGIN
PROMPT 1 21 "Stato di pagamento "
GROUP GR_ACQUISTI GR_BENI
END
STRING F_STATOINCPAG 2
BEGIN
PROMPT 20 21 ""
USE %SCE
INPUT CODTAB F_STATOINCPAG
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_STATOINCPAG CODTAB
FIELD ISOINCPAG
GROUP GR_SERVIZI
END
NUMBER F_NUMREG 7
BEGIN
PROMPT 53 17 "Numero movimento "
PROMPT 2 22 "Numero movimento "
FIELD NUMREG
FLAGS "D"
END

View File

@ -18,9 +18,8 @@
TIntra_context::TIntra_context()
{
_tipointra = 'B';
_tipo = 'C'; _freq = 'T'; _anno = 1999; _periodo = 1;
_progr = _righe_riep = _righe_rett = 0L;
_progr = 0L;
// Intra 12/13
_tInvioIntra = _Intra12;
@ -33,36 +32,25 @@ TIntra_context::TIntra_context()
// TIntra_frequency
///////////////////////////////////////////////////////////
char TIntra_frequency::frequenza(int a, char t) const
char TIntra_frequency::frequenza(int a, const char t) const
{
switch (t)
{
case 'A': break;
case 'C': break;
case 'B': t = 'A'; break; // Rettifiche su Acquisti
case 'D': t = 'C'; break; // Rettifiche su Cessioni
default : break;
}
const TDate d(TODAY);
if (a <= 0)
a = d.year();
if (a < d.year())
a = today.year();
if (a < today.year())
{
TLocalisamfile riep(LF_RIEPRETT);
riep.put("TIPO", t);
riep.put("ANNO", a);
if (riep.read(_isgteq) == NOERR)
{
if (riep.get_char("TIPO") == t && riep.get_int("ANNO") == a)
if (riep.get(RIEPINTRA_TIPO) == t && riep.get_int(RIEPINTRA_ANNO) == a)
{
const char freq = riep.get_char("FREQUENZA");
const char freq = riep.get_char(RIEPINTRA_FREQUENZA);
if (freq > ' ')
return freq;
return freq;
}
}
}
return (t == 'A') ? _freq_acq : _freq_ces;
}
@ -120,18 +108,12 @@ void TIntra_mask::on_firm_change()
_freq.update();
}
char TIntra_mask::tipo() const
{
short id = type_field();
char t = get(id)[0];
return t;
}
char TIntra_mask::frequenza(int a, char t) const
{
if (a <= 0)
a = anno();
if (t < 'A' || t > 'D')
if (t < 'A')
t = tipo();
return _freq.frequenza(a, t);
}
@ -188,166 +170,126 @@ TIntra_mask::TIntra_mask(const char* name)
on_firm_change();
}
///////////////////////////////////////////////////////////
// TDati_riepilogo
///////////////////////////////////////////////////////////
class TDati_riepilogo : public TSortable
{
TToken_string _key;
TCurrency _ammlire, _ammvaluta;
real _valstat, _massakg, _massaums;
long _numreg;
protected:
virtual TObject* dup() const { return new TDati_riepilogo(*this); }
virtual int compare(const TSortable& s) const;
public:
TDati_riepilogo& operator +=(const TDati_riepilogo& r);
void write(TRectype& rec) const;
const TString& tipo_intra(TString& c) const { _key.get(0, c); return c; }
const TString& stato(TString& c) const { _key.get(1, c); return c; }
const TString& partita_iva(TString& c) const { _key.get(2, c); return c; }
const TString& natura(TString& c) const { _key.get(4, c); return c; }
const TString& nomenclatura(TString& c) const { _key.get(5, c); return c; }
const TString& consegna(TString& c) const { _key.get(6, c); return c; }
const TString& trasporto(TString& c) const { _key.get(7, c); return c; }
const TString& paese(TString& c) const { _key.get(8, c); return c; }
const TString& paese_orig(TString& c) const { _key.get(9, c); return c; }
const TString& provincia(TString& c) const { _key.get(10, c); return c; }
TDati_riepilogo(const TDati_riepilogo& r);
TDati_riepilogo(const TToken_string& key, const TRectype& rec, const TString& codval);
virtual ~TDati_riepilogo() { }
};
int TDati_riepilogo::compare(const TSortable& s) const
{
const TDati_riepilogo& r = (const TDati_riepilogo&)s;
return _key.compare(r._key);
}
TDati_riepilogo& TDati_riepilogo::operator +=(const TDati_riepilogo& r)
{
_ammlire += r._ammlire;
_ammvaluta += r._ammvaluta;
_valstat += r._valstat;
_massakg += r._massakg;
_massaums += r._massaums;
return *this;
}
void TDati_riepilogo::write(TRectype& rec) const
{
TString str;
rec.put("TIPOINTRA", tipo_intra(str));
rec.put("STATO", stato(str));
rec.put("PIVA", partita_iva(str));
rec.put("NATURA", natura(str));
rec.put("NOMENCL", nomenclatura(str));
rec.put("CONSEGNA", consegna(str));
rec.put("TRASPORTO", trasporto(str));
rec.put("PAESE", paese(str));
rec.put("PAESEORIG", paese_orig(str));
rec.put("PROV", provincia(str));
rec.put("AMMLIRE", _ammlire.get_num());
if (_ammvaluta.is_zero() || _ammvaluta.is_firm_value())
{
rec.zero("CODVAL"); // Altrimenti genera falsi codici valuta EUR ...
rec.zero("AMMVALUTA"); // ... con importi nulli
}
else
{
rec.put("CODVAL", _ammvaluta.get_value());
rec.put("AMMVALUTA", _ammvaluta.get_num());
}
rec.put("VALSTAT", _valstat);
rec.put("MASSAKG", _massakg);
rec.put("MASSAUMS", _massaums);
rec.put("NUMREG", _numreg);
}
TDati_riepilogo::TDati_riepilogo(const TDati_riepilogo& r)
: _key(r._key), _valstat(r._valstat),
_ammlire(r._ammlire), _ammvaluta(r._ammvaluta),
_massakg(r._massakg), _massaums(r._massaums)
{ }
TDati_riepilogo::TDati_riepilogo(const TToken_string& key,
const TRectype& rec,
const TString& codval)
: _key(key), _ammlire(rec.get_real("AMMLIRE")),
_ammvaluta(rec.get_real("AMMVALUTA"), codval),
_valstat(rec.get_real("VALSTAT")),
_massakg(rec.get_real("MASSAKG")),
_massaums(rec.get_real("MASSAUMS")),
_numreg(rec.get_long("NUMREG"))
{ }
///////////////////////////////////////////////////////////
// TRiepiloghi
// TRiepiloghi_Intra
///////////////////////////////////////////////////////////
class TRiepiloghi : public TObject
class TRiepiloghi_Intra : public TObject
{
TPointer_array _arr;
TAssoc_array _ass;
public:
void destroy() { _arr.destroy(); _ass.destroy(); }
void add(const TRectype& row, const TRectype& head, const TRectype& mov);
void destroy() { _ass.destroy(); }
void add(const TRectype& row, const TRectype& head, int peri, char freq);
int items() const { return _arr.items(); }
int sort() { _arr.sort(); return items(); }
const TDati_riepilogo& operator[](int r) const
{ return (const TDati_riepilogo&)_arr[r]; }
};
int items() const { return _ass.items(); }
int write(int from = 1);
};
void TRiepiloghi::add(const TRectype& row, const TRectype& head, const TRectype& mov)
int TRiepiloghi_Intra::write(int from)
{
TString_array keys;
TLocalisamfile riep(LF_RIEPRETT);
TProgress_monitor pi(items(), TR("Scrittura riepiloghi intra..."), false);
_ass.get_keys(keys);
keys.sort();
FOR_EACH_ARRAY_ITEM(keys, r, k)
{
TString * key = (TString *) k;
TRectype * rec = (TRectype *) _ass.objptr(*key);
pi.addstatus(1L);
rec->put(RIEPINTRA_NUMRIG, r + from);
const int err = rec->write_rewrite(riep);
if (err != NOERR)
error_box(FR("Errore %d durante la scrittura dei riepiloghi riga %d"), err, r + from);
}
return from + items();
}
void TRiepiloghi_Intra::add(const TRectype& row, const TRectype& head, int peri, char freq)
{
TString8 cod; cod << head.get_char(INTRA_TIPOCF) << '|' << head.get(INTRA_CODCF);
const TRectype& clifo = cache().get(LF_CLIFO, cod);
TString4 codval = head.get(MOV_CODVAL);
const TString4 tipointra = row.get(RINTRA_TIPOINTRA);
TString4 codval = head.get(INTRA_CODVAL);
if (::is_euro_value(codval))
codval.cut(0);
TRectype rec(LF_RIEPRETT);
const TString4 tipointra = row.get(RINTRA_TIPOINTRA);
const TString4 tipo = head.get(INTRA_TIPOMOV);
TToken_string key;
key.add(head.get(INTRA_TIPOMOV));
key.add(tipointra);
key.add(clifo.get(CLI_STATOPAIV));
key.add(clifo.get(CLI_PAIV));
key.add(codval); // Non e' chiaro se raggruppare per valuta!
key.add(row.get(RINTRA_NATURA));
key.add(row.get(tipointra == "B" ? RINTRA_NOMENCL : RINTRA_CODSERV));
key.add(row.get(RINTRA_CONSEGNA));
key.add(row.get(RINTRA_TRASPORTO));
key.add(row.get(RINTRA_PAESE));
key.add(row.get(RINTRA_PAESEORIG)); // Campo solo per Acquisti
key.add(row.get(RINTRA_PROV));
TDati_riepilogo* data = (TDati_riepilogo*)_ass.objptr(key);
if (data == nullptr)
if (tipointra == "B")
{
data = new TDati_riepilogo(key, row, codval);
_ass.add(key, data);
_arr.add(data);
key.add(row.get(RINTRA_NOMENCL));
key.add(row.get(RINTRA_CONSEGNA));
key.add(row.get(RINTRA_TRASPORTO));
key.add(row.get(RINTRA_PAESE));
key.add(row.get(RINTRA_PAESEORIG)); // Campo solo per Acquisti
key.add(row.get(RINTRA_PROV));
}
else
{
const TDati_riepilogo dr(key, row, codval);
*data += dr;
key.add(row.get(RINTRA_CODSERV));
key.add(row.get(RINTRA_MODEROG));
key.add(row.get(RINTRA_MODINCPAG));
key.add(row.get(RINTRA_ISOINCPAG));
}
rec.put(RIEPINTRA_SEZIONE, tipointra == "B" ? 1 : 3);
rec.put(RIEPINTRA_TIPO, tipo);
rec.put(RIEPINTRA_ANNO, head.get_date(INTRA_DATAREG).year());
rec.put(RIEPINTRA_PERIODO, peri);
rec.zero(RIEPINTRA_NUMRIG);
rec.put(RIEPINTRA_STATO, clifo.get(CLI_STATOPAIV));
rec.put(RIEPINTRA_PIVA, clifo.get(CLI_PAIV));
rec.put(RIEPINTRA_NATURA, row.get(RINTRA_NATURA));
rec.put(RIEPINTRA_NOMENCL, row.get(RINTRA_NOMENCL));
rec.put(RIEPINTRA_CONSEGNA, row.get(RINTRA_CONSEGNA));
rec.put(RIEPINTRA_TRASPORTO, row.get(RINTRA_TRASPORTO));
rec.put(RIEPINTRA_PAESE, row.get(RINTRA_PAESE));
rec.put(RIEPINTRA_PAESEORIG, row.get(RINTRA_PAESEORIG));
rec.put(RIEPINTRA_PROV, row.get(RINTRA_PROV));
rec.put(RIEPINTRA_AMMLIRE, row.get(RINTRA_AMMLIRE));
rec.put(RIEPINTRA_AMMVALUTA, row.get(RINTRA_AMMVALUTA));
rec.put(RIEPINTRA_CODVAL, codval);
rec.put(RIEPINTRA_VALSTAT, row.get(RINTRA_VALSTAT));
rec.put(RIEPINTRA_MASSAKG, row.get(RINTRA_MASSAKG));
rec.put(RIEPINTRA_MASSAUMS, row.get(RINTRA_MASSAUMS));
rec.put(RIEPINTRA_FREQUENZA, freq);
rec.put(RIEPINTRA_CODSERV, row.get(RINTRA_CODSERV));
rec.put(RIEPINTRA_MODEROG, row.get(RINTRA_MODEROG));
rec.put(RIEPINTRA_MODINCPAG, row.get(RINTRA_MODINCPAG));
rec.put(RIEPINTRA_ISOINCPAG, row.get(RINTRA_ISOINCPAG));
TRectype * data = (TRectype *)_ass.objptr(key);
if (data == nullptr)
_ass.add(key, rec);
else
{
data->add(RIEPINTRA_AMMLIRE, row.get_real(RINTRA_AMMLIRE));
data->add(RIEPINTRA_AMMVALUTA, row.get_real(RINTRA_AMMVALUTA));
data->add(RIEPINTRA_VALSTAT, row.get_real(RINTRA_VALSTAT));
data->add(RIEPINTRA_MASSAKG, row.get_real(RINTRA_MASSAKG));
data->add(RIEPINTRA_MASSAUMS, row.get_real(RINTRA_MASSAUMS));
}
}
class TRettifiche : public TObject
class TRettifiche_Intra : public TObject
{
TArray _rett;
TIntra_frequency _freq;
@ -360,11 +302,10 @@ public:
long nc2ft(long numreg_nc) const;
int add(const TRectype& rintra, const TRectype& mov, long nr_fattura);
int load_manual_rett(char tipo, int anno, int periodo);
int sort();
const TRectype& operator[](int r) const { return (const TRectype&)_rett[r]; }
int write(int from = 1);
};
long TRettifiche::nc2ft(long numreg_nc) const
long TRettifiche_Intra::nc2ft(long numreg_nc) const
{
long numreg_ft = 0L;
@ -373,10 +314,6 @@ long TRettifiche::nc2ft(long numreg_nc) const
games.add_numreg(numreg_nc); // Carica le partite in cui è coinvolta questa nota di credito (sempre e solo una!)
for (TPartita* p = games.first(); p != nullptr && numreg_ft<=0; p = games.next())
{
#ifdef DBG
if (p->conto().codclifo() == 13201)
int farmoki = 1;
#endif
for (int r = p->prima_fattura(); r >= 0 && r <= p->last(); r = p->succ(r))
{
const TRiga_partite& partita = p->riga(r);
@ -396,7 +333,7 @@ long TRettifiche::nc2ft(long numreg_nc) const
return numreg_ft;
}
int TRettifiche::load_manual_rett(char tipo, int anno, int periodo)
int TRettifiche_Intra::load_manual_rett(char tipo, int anno, int periodo)
{
_rett.destroy();
tipo = tipo < 'C' ? 'B' : 'D'; // forzatura tipo = B o D
@ -413,7 +350,7 @@ int TRettifiche::load_manual_rett(char tipo, int anno, int periodo)
return _rett.items();
}
long TRettifiche::rett2riep(const TRectype& rett) const
long TRettifiche_Intra::rett2riep(const TRectype& rett) const
{
TString query, filter;
@ -429,22 +366,23 @@ long TRettifiche::rett2riep(const TRectype& rett) const
return nriga;
}
int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattura)
int TRettifiche_Intra::add(const TRectype& rintra, const TRectype& mov, long nr_fattura)
{
CHECKD(rintra.num() == LF_RINTRA, "Record non INTRA ", rintra.num());
const TDate datareg = mov.get(MOV_DATAREG);
TRectype rett(LF_RIEPRETT);
const char tipo = mov.get_char(MOV_TIPO)=='F' ? 'B' : 'D';
const char tipo = mov.get_char(INTRA_TIPOMOV);
const TString4 tipointra = rintra.get(RINTRA_TIPOINTRA);
rett.put(RIEPINTRA_TIPOINTRA, tipointra);
rett.put(RIEPINTRA_TIPO, tipo);
rett.put(RIEPINTRA_ANNO, datareg.year());
rett.put(RIEPINTRA_PERIODO, _freq.date2periodo(datareg, tipo));
rett.put(RIEPINTRA_NUMRIG, 0); // Auto
rett.zero(RIEPINTRA_NUMRIG); // Auto
TString8 cod; cod << mov.get_char(MOV_TIPO) << '|' << mov.get(MOV_CODCF);
rett.put(RIEPINTRA_SEZIONE, tipointra ? 2 : 4);
rett.put(RIEPINTRA_TIPO, tipo);
TString8 cod; cod << mov.get_char(INTRA_TIPOCF) << '|' << mov.get(INTRA_CODCF);
const TRectype& clifo = cache().get(LF_CLIFO, cod);
TString4 codval = mov.get(MOV_CODVALI);
@ -454,10 +392,7 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur
rett.put(RIEPINTRA_STATO, clifo.get(CLI_STATOPAIV));
rett.put(RIEPINTRA_PIVA, clifo.get(CLI_PAIV));
rett.put(RIEPINTRA_NATURA, rintra.get(RINTRA_NATURA));
if (tipointra == "B")
rett.put(RIEPINTRA_NOMENCL, rintra.get(RINTRA_NOMENCL));
else
rett.put(RIEPINTRA_CODSERV, rintra.get(RINTRA_CODSERV));
rett.put(RIEPINTRA_NOMENCL, rintra.get(RINTRA_NOMENCL));
rett.put(RIEPINTRA_CONSEGNA, rintra.get(RINTRA_CONSEGNA));
rett.put(RIEPINTRA_TRASPORTO, rintra.get(RINTRA_TRASPORTO));
rett.put(RIEPINTRA_PAESE, rintra.get(RINTRA_PAESE));
@ -467,20 +402,16 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur
rett.put(RIEPINTRA_PROV, rintra.get(RINTRA_PROV));
}
real euri = rintra.get_real(RINTRA_AMMLIRE);
const real euri = rintra.get_real(RINTRA_AMMLIRE);
rett.put(RIEPINTRA_SEGNORETT, ((tipointra == "S") || (euri > ZERO)) ? '+' : '-');
if (tipointra == "B")
euri = abs(euri);
rett.put(RIEPINTRA_AMMLIRE, euri);
rett.put(RIEPINTRA_SEGNORETT, euri > ZERO ? '+' : '-');
rett.put(RIEPINTRA_AMMLIRE, abs(euri));
if (codval.full())
{
rett.put(RIEPINTRA_CODVAL, codval);
real impval = rintra.get_real(RINTRA_AMMVALUTA);
const real impval = rintra.get_real(RINTRA_AMMVALUTA);
if (tipointra == "B")
impval = abs(impval);
rett.put(RIEPINTRA_AMMVALUTA, impval);
rett.put(RIEPINTRA_AMMVALUTA, abs(impval));
}
rett.put(RIEPINTRA_VALSTAT, abs(rintra.get_real(RINTRA_VALSTAT)));
@ -488,6 +419,7 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur
rett.put(RIEPINTRA_MASSAUMS, rintra.get(RINTRA_MASSAUMS));
rett.put(RIEPINTRA_NUMREG, mov.get(MOV_NUMREG));
rett.put(RIEPINTRA_CODSERV, rintra.get(RINTRA_CODSERV));
rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG));
rett.put(RIEPINTRA_MODINCPAG, rintra.get(RINTRA_MODINCPAG));
rett.put(RIEPINTRA_MODEROG, rintra.get(RINTRA_MODEROG));
@ -501,15 +433,24 @@ int TRettifiche::add(const TRectype& rintra, const TRectype& mov, long nr_fattur
return _rett.add(rett);
}
int TRettifiche::sort()
int TRettifiche_Intra::write(int from)
{
_rett.pack();
for (int i = 0; i < _rett.items(); i++)
const int items = _rett.items();
TLocalisamfile riep(LF_RIEPRETT);
FOR_EACH_ARRAY_ITEM(_rett, r, data)
{
TRectype* r = (TRectype*)_rett.objptr(i);
r->put(RIEPINTRA_NUMRIG, i+1);
TRectype* rec = (TRectype*) data;
rec->put(RIEPINTRA_NUMRIG, r + from);
const int err = rec->write_rewrite(riep);
if (err != NOERR)
error_box(FR("Errore %d durante la scrittura dei riepiloghi riga %d"), err, r + from);
}
return _rett.items();
return from + items;
}
///////////////////////////////////////////////////////////
@ -518,8 +459,8 @@ int TRettifiche::sort()
class TGenerazione_mask : public TIntra_mask
{
TRiepiloghi _riep;
TRettifiche _rett;
TRiepiloghi_Intra _riep;
TRettifiche_Intra _rett;
protected:
virtual short type_field() const { return R_TIPO; }
@ -626,7 +567,7 @@ bool TGenerazione_mask::genera_riepiloghi()
if (is_rettifica)
_rett.add(row, mov, numreg_ft);
else
_riep.add(row, head, mov);
_riep.add(row, head, peri, freq);
rowok = rel.next_match(LF_RINTRA);
}
}
@ -637,64 +578,29 @@ bool TGenerazione_mask::genera_riepiloghi()
TLocalisamfile riep(LF_RIEPRETT);
const int riepiloghi = _riep.sort();
if (riepiloghi > 0)
{
TProgress_monitor pi(riepiloghi, TR("Scrittura riepiloghi intra..."), false);
riep.put(RIEPINTRA_TIPO, tipo);
riep.put(RIEPINTRA_ANNO, anno_r);
riep.put(RIEPINTRA_PERIODO, peri);
riep.put(RIEPINTRA_NUMRIG, 1);
int err = riep.read();
for (int r = 0; pi.add_status() && r < riepiloghi; r++)
{
riep.put(RIEPINTRA_TIPO, tipo);
riep.put(RIEPINTRA_ANNO, anno_r);
riep.put(RIEPINTRA_PERIODO, peri);
riep.put(RIEPINTRA_NUMRIG, r+1);
_riep[r].write(riep.curr());
riep.put(RIEPINTRA_FREQUENZA, freq);
const int werr = err == NOERR ? riep.rewrite() : riep.write();
if (werr != NOERR)
return error_box(FR("Errore %d durante la scrittura dei riepiloghi"), werr);
if (err == NOERR)
{
err = riep.next();
if (err == NOERR && riep.get_long("NUMRIG") == 1)
err = _iseof;
}
}
}
const int riepiloghi = _riep.items();
int last_row = 0;
// Cancella eventuali altri riepiloghi del periodo
if (riepiloghi > 0)
last_row = _riep.write();
const int rettifiche = _rett.items();
if (rettifiche > 0)
last_row = _rett.write(last_row);
// cancella gli altri event
TString query;
query << "USE " << LF_RIEPRETT
<< "\nFROM TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(riepiloghi+1)
<< "\nFROM TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(last_row + 1)
<< "\nTO TIPO=" << tipo << " ANNO=" << anno_r << " PERIODO=" << peri;
TISAM_recordset riepset(query);
for (bool ok = riepset.move_first(); ok; ok = riepset.move_next())
riepset.cursor()->file().remove();
const int rettifiche = _rett.sort();
if (rettifiche > 0)
{
for (int r = 0; r < rettifiche; r++)
_rett[r].write_rewrite(riep);
}
// Cancella eventuali altre rettifiche del periodo
query.cut(0) << "USE " << LF_RIEPRETT
<< "\nFROM TIPO=" << char(tipo+1) << " ANNO=" << anno_r << " PERIODO=" << peri << " NUMRIG=" << long(rettifiche+1)
<< "\nTO TIPO=" << char(tipo+1) << " ANNO=" << anno_r << " PERIODO=" << peri;
TISAM_recordset rettset(query);
for (bool ok = rettset.move_first(); ok; ok = rettset.move_next())
rettset.cursor()->file().remove();
return true;
}

View File

@ -9,17 +9,11 @@ typedef enum { _Intra12, _Intra13 } Intratype;
struct TIntra_context
{
char _tipointra;
char _tipo;
long _progr;
char _freq;
int _anno;
int _periodo;
long _righe_riep;
real _totale_riep;
long _righe_rett;
real _totale_rett;
// Intra 12/13
Intratype _tInvioIntra;
int _nb;
@ -55,7 +49,7 @@ protected:
virtual int anno() const pure;
public:
char tipo() const;
const char tipo() const { return get(type_field())[0]; }
int periodo() const;
virtual char frequenza(int anno = 0, char tipo = '\0') const;
int date2periodo(const TDate& d) const;

View File

@ -13,11 +13,12 @@ Picture = <ba02>
Module = 0
Flags = ""
Item_01 = "Nomenclatura combinata", "ba3 -0 %noc", ""
Item_02 = "Stati CEE", "ba3 -0 %sce", ""
Item_03 = "Natura Transazione", "ba3 -0 %int", ""
Item_04 = "Condizioni di consegna", "ba3 -0 %icc", ""
Item_05 = "Modalita' di trasporto", "ba3 -0 %imt", ""
Item_06 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", ""
Item_02 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", ""
Item_03 = "Stati CEE", "ba3 -0 %sce", ""
Item_04 = "Natura Transazione", "ba3 -0 %int", ""
Item_05 = "Condizioni di consegna", "ba3 -0 %icc", ""
Item_06 = "Modalita' di trasporto", "ba3 -0 %imt", ""
Item_07 = "Classificazione prestazioni dei servizi", "ba3 -0 %cpa", ""
[INMENU_003]
Caption = "Stampa Tabelle"
@ -25,11 +26,12 @@ Picture = <ba03>
Module = 0
Flags = ""
Item_01 = "Nomenclatura combinata", "ba3 -1 %noc", ""
Item_02 = "Stati CEE", "ba3 -1 %sce", ""
Item_03 = "Natura Transazione", "ba3 -1 %int", ""
Item_04 = "Condizioni di consegna", "ba3 -1 %icc", ""
Item_05 = "Modalita' di trasporto", "ba3 -1 %imt", ""
Item_06 = "Classificazione prestazioni dei servizi", "ba3 -1 %cpa", ""
Item_02 = "Nomenclatura combinata", "ba3 -1 %noc", ""
Item_03 = "Stati CEE", "ba3 -1 %sce", ""
Item_04 = "Natura Transazione", "ba3 -1 %int", ""
Item_05 = "Condizioni di consegna", "ba3 -1 %icc", ""
Item_06 = "Modalita' di trasporto", "ba3 -1 %imt", ""
Item_07 = "Classificazione prestazioni dei servizi", "ba3 -1 %cpa", ""
[INMENU_004]
Caption = "Gestione movimenti"

View File

@ -19,22 +19,34 @@
<field x="12" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="Mese">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="20" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="Disco">
<field x="19" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="9" codval="" id="" pattern="2" hide_zero="" text="Intra 1&#2F;2">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="30" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe riep.">
<field x="30" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe sez.1">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="46" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. riepil.">
<field x="46" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. sez.1">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="61" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe rett.">
<field x="61" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe sez.2">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="78" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. rettif.">
<field x="78" y="4" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. sez.2">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="20" y="5.5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Intra 12&#2F;13">
<field x="18.5" y="5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Intra 12&#2F;13">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="30" y="5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe sez.3">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="46" y="5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. sez.3">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="61" y="5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="11" codval="" id="" pattern="2" hide_zero="" text="Righe sez.4">
<font face="Courier New" bold="1" size="10" />
</field>
<field x="78" y="5" deactivated="" type="Testo" hidden="" link="" dynamic_height="" shade_offset="" width="12" codval="" id="" pattern="2" hide_zero="" text="Amm. sez.4">
<font face="Courier New" bold="1" size="10" />
</field>
<field border="2" x="1" y="6.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />
@ -58,17 +70,29 @@
<source>I2</source>
</field>
<field x="43" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R0</source>
<source>R2</source>
</field>
<field x="67" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<field x="64" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<source>I3</source>
</field>
<field x="75" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R1</source>
<source>R3</source>
</field>
<field x="20" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="4" codval="" id="" pattern="2" hide_zero="" text="">
<source>I6</source>
</field>
<field x="35" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<source>I4</source>
</field>
<field x="43" y="1" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R4</source>
</field>
<field x="64" y="1" deactivated="" type="Numero" hidden="" align="right" link="" dynamic_height="" shade_offset="" width="5" codval="" id="" pattern="2" hide_zero="" text="">
<source>I5</source>
</field>
<field x="75" y="1" deactivated="" type="Stringa" hidden="" link="" dynamic_height="" shade_offset="" width="15" codval="" id="" pattern="2" hide_zero="" text="##@,@@">
<source>R5</source>
</field>
</section>
<section repeat="" keep_with_next="" deactivated="" hidden_if_needed="" type="Foot" level="" hidden="" height="3" page_break="" can_break="" pattern="1">
<field border="2" x="1" y="0.5" deactivated="" type="Linea" hidden="" link="" dynamic_height="" shade_offset="" width="93" codval="" height="0" id="" pattern="2" hide_zero="" text="" />