Patch level : 12.0 412

Files correlati     : 
Commento            : 
- Sistemati tracciati tabelle
- Tolti tipi movimento non supportati
- Aggiornata grafica per togliere i tipi movimento
- Sistemata decodifica tipo movimento
- Aggiornata funzione var2str con nuove colonne dei prezzi
- Creata funzione filtro per le righe iva da leggere
- Tolta gestione modifica in "Autofattura"
- Aggiunto controllo se sono stati modificati dei filtri quando si preme "Elabora"
- Tolti i calcoli per stabilire la natura
- Rifatta funzione per il reverse charge
- Aggiunta durante la creazione il riempimento con un record per TFNUM00F (altrimenti l'AS piange poverino)
- sistemata funzione getBody(), adesso accetta un booleano per non incrementare ogni volta la chiave
- Sistemati tracciati tff0200f, tff0400f, tff0700f, tff2200f


git-svn-id: svn://10.65.10.50/branches/R_10_00@23883 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-06-28 13:09:56 +00:00
parent 2d0f23a121
commit 210cf6dc75
5 changed files with 210 additions and 235 deletions

View File

@ -30,24 +30,13 @@ TString getTipoDoc(int id)
case B_TIPO_AUTOFATT:
ret = "AF";
break;
case B_TIPO_BOLLADOG:
ret = "BD";
break;
case B_TIPO_CORRNINC:
ret = "CN";
break;
case B_TIPO_CORR:
ret = "CR";
break;
case B_TIPO_FATTACQ:
ret = "FA";
break;
case B_TIPO_FATTFISC:
ret = "FF";
break;
case B_TIPO_FATTSC:
ret = "FS";
break;
case B_TIPO_FATTVEN:
ret = "FV";
break;
@ -57,9 +46,26 @@ TString getTipoDoc(int id)
case B_TIPO_NOTD:
ret = "ND";
break;
case B_TIPO_STORDOC:
ret = "ST";
break;
/*
case B_TIPO_BOLLADOG:
ret = "BD";
break;
case B_TIPO_CORRNINC:
ret = "CN";
break;
case B_TIPO_CORR:
ret = "CR";
break;
case B_TIPO_FATTSC:
ret = "FS";
break;
case B_TIPO_RICFIS:
ret = "RF";
break;
case B_TIPO_RICFISNI:
ret = "RN";
break;
@ -69,8 +75,9 @@ TString getTipoDoc(int id)
case B_TIPO_SCONTNI:
ret = "SN";
break;
case B_TIPO_STORDOC:
ret = "ST";
*/
default:
ret = "ERR";
break;
}
return ret;
@ -80,19 +87,19 @@ int getTipoDoc(TString id)
{
int ret = -1;
if(id == "AF") ret = B_TIPO_AUTOFATT;
else if(id == "BD") ret = B_TIPO_BOLLADOG;
else if(id == "CN") ret = B_TIPO_CORRNINC;
else if(id == "CR") ret = B_TIPO_CORR;
// else if(id == "BD") ret = B_TIPO_BOLLADOG;
// else if(id == "CN") ret = B_TIPO_CORRNINC;
// else if(id == "CR") ret = B_TIPO_CORR;
else if(id == "FA") ret = B_TIPO_FATTACQ;
else if(id == "FF") ret = B_TIPO_FATTFISC;
else if(id == "FS") ret = B_TIPO_FATTSC;
// else if(id == "FS") ret = B_TIPO_FATTSC;
else if(id == "FV") ret = B_TIPO_FATTVEN;
else if(id == "NC") ret = B_TIPO_NOTC;
else if(id == "ND") ret = B_TIPO_NOTD;
else if(id == "RF") ret = B_TIPO_RICFIS;
else if(id == "RN") ret = B_TIPO_RICFISNI;
else if(id == "SC") ret = B_TIPO_SCONT;
else if(id == "SN") ret = B_TIPO_SCONTNI;
// else if(id == "RF") ret = B_TIPO_RICFIS;
// else if(id == "RN") ret = B_TIPO_RICFISNI;
// else if(id == "SC") ret = B_TIPO_SCONT;
// else if(id == "SN") ret = B_TIPO_SCONTNI;
else if(id == "ST") ret = B_TIPO_STORDOC;
return ret;
}
@ -157,9 +164,12 @@ static const char* decodTipo(TToken_string* strarr)
{
TRectype mov = cache().get(LF_MOV, strarr->get(_numero));
TCausale caus(mov.get("CODCAUS"), mov.get_int("ANNOIVA"));
switch(caus.tipomov())
TString tipodoc; tipodoc << strarr->get(_codnum);
// Le autofatture possono essere solo di tipo TDO1
if(tipodoc == "AF")
return "TD01";
else if(tipodoc == "FA" || tipodoc == "FV")
{
case tm_fattura:
// Potrebbe essere normale o intra
if(!caus.intra())
return "TD01";
@ -211,16 +221,13 @@ static const char* decodTipo(TToken_string* strarr)
else
return "TD10";
}
break;
case tm_nota_credito:
if(caus.tipodoc() == "NC")
return "TD04";
else
return "TD05";
break;
default:
return "";
}
else if(tipodoc == "NC")
return "TD04";
else if(tipodoc == "ND")
return "TD05";
else
return tipodoc;
}
/* Salvo il record modificato in TFCustom */
@ -344,10 +351,11 @@ const TString& TTrFa_record::var2str(const TString& fldname, const TVariant& var
const TFieldtypes vt = var.type();
if (vt == _realfld)
{
const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ")>0 || fldname.find("PREZZO")>0);
const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0);
TString& tmp = get_tmp_string();
tmp << '\'' << v.string() << '\''; tmp.replace(',','.');
return tmp;
tmp << '\'' << v.string() << '\'';
tmp.replace(',','.');
return tmp;
}
if (vt == _datefld)
{
@ -558,13 +566,11 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
{
// Controllo se ho cambiato movimento
_newMov = numMov != c_rmoviva->get("23.NUMREG").as_string();
codiva = c_rmoviva->get("25.CODIVA").as_string();
}
} // Ciclo finchè non trovo un nuovo movimento o trovo cod IVA già presi da cust
while(TCodiceIVA(codiva).tipo() == "NS" || (!_newMov && _alqCust.get_pos(codiva) > -1));
while(!checkRecord(c_rmoviva) || (!_newMov && _alqCust.get_pos(codiva) > -1));
}
// Se ho cambiato movimento ritorno, leggerò poi al prossimo giro
if(_newMov)
{
@ -586,7 +592,7 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
retRec.put("CODCF", c_rmoviva->get("23.CODCF").as_string());
retRec.put("OCCAS", c_rmoviva->get("23.OCFPI").as_string());
retRec.put("TIPODOC", c_rmoviva->get("23.TIPODOC").as_string());
retRec.put("NUMDOC", c_rmoviva->get("23.NUMDOC").as_int());
retRec.put("NUMDOC", c_rmoviva->get("23.NUMDOC").as_string());
retRec.put("DATAREG", c_rmoviva->get("23.DATAREG").as_date());
retRec.put("DATADOC", c_rmoviva->get("23.DATADOC").as_date());
retRec.put("IMPONIBILE", c_rmoviva->get("25.IMPONIBILE").as_real());
@ -602,6 +608,31 @@ TRectype TTrFa_cursors::_next(return_code& code, TString& tipocf, TString& codcf
return retRec;
}
/* Utilizzo questa funzione per filtrare al meglio i record, tutti i casi che devo omettere verranno rilevati e ritorneranno false
* Nota bene: viene sfruttato un puntatore di TISA_Recordset per non creare nuovi oggetti e velocizzare la chiamata
* a questo punto il programma non ha ancora creato un record di $trasfatt con i dati che mi interessano
*/
bool TTrFa_cursors::checkRecord(TISAM_recordset* rec)
{
TString codiva = rec->get("25.CODIVA").as_string();
// Tolgo i non soggetti
TCodiceIVA cod(codiva);
if(cod.tipo() == "NS")
return false;
// Clienti
if(rec->get("23.TIPO").as_string() == "C")
{
// Tolgo tutti i movimenti di sola IVA e in reverse charge o di tipo 3 (Acquisto di beni e servizi di soggetti non residenti)
TCausale caus(rec->get("23.CODCAUS").as_string());
if(caus.soloiva() && (caus.reverse_charge() || caus.regime_speciale() == 3))
return false;
}
return true;
}
int TTrFa_cursors::updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod)
{
TString query = "USE RMOVIVA\n";
@ -755,37 +786,6 @@ bool TTrFa_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
}
}
break;
case A_AUTOFATT:
if(e == fe_modify)
{
TString piva, cofi;
// Se ha impostato un autofattura metto cf e piva dell'azienda
if(o.get() == "X")
{
TString key; key << prefix().firm().get("TIPOA") << "|" << prefix().firm().get("CODANAGR");
piva = cache().get(LF_ANAG, key, "PAIV");
cofi = cache().get(LF_ANAG, key, "COFI");
}
// Altrimenti provo a prenderli da clifo
else
{
TString tipocf, codcf;
// Controllo se è un cliente occasionale
tipocf = "O";
codcf = o.mask().get(A_OCFPI);
if(codcf.empty())
{
tipocf = o.mask().get(A_TIPOCF);
codcf = o.mask().get(A_CODCF);
}
TRectype app = getCli(tipocf, codcf);
piva = app.get("PAIV");
cofi = app.get("COFI");
}
o.mask().set(A_PAIV, piva);
o.mask().set(A_COFI, cofi);
}
break;
case A_ALIQUOTA:
if(e == fe_modify)
{
@ -1062,9 +1062,16 @@ bool TTrFa_mask::checkRec(TPrinter* stampa, TToken_string rec)
bool TTrFa_mask::checkNotEmpty()
{
TSheet_field& sheet = sfield(F_RIGHE);
TString msg("La tabella dei movimenti è vuota, vuoi caricarla con i filtri selezionati?");
if(sheet.empty() && yesno_box(msg))
TString msg;
if(sheet.empty())
msg = "La tabella dei movimenti è vuota, vuoi caricarla con i filtri selezionati?";
else if(_filter_changed)
msg = "I filtri sono stati cambiati, vuoi ricaricare la tabella con i nuovi filtri selezionati?";
if(msg.full() && yesno_box(msg))
{
_filter_changed = false;
load_sheet();
}
return sheet.full();
@ -1132,7 +1139,7 @@ void TTrFa_mask::load_sheet()
row->add(cli.get("CODRFSO"), _rfso); // Codice RF/SO
row->add(getRFSO(cli.get("CODRFSO")), _ragsocrfso); // Ragione Sociale RF/SO
row->add(movimento.get("TIPODOC"), _codnum); // Tipo documento
row->add(movimento.get_long("NUMDOC"), _numdoc); // Numero documento
row->add(movimento.get("NUMDOC"), _numdoc); // Numero documento
row->add(movimento.get_date("DATADOC"), _datadoc); // Data documento
row->add(natura(iva), _natura); // NATURA!
row->add(iva, _aliquota); // Codice aliquota!
@ -1179,29 +1186,6 @@ const char * TTrFa_mask::natura(const TString& codiva) const
TString & natura = get_tmp_string(4);
natura = ai.get("S12");
if(natura.blank())
{
const int tipo_iva11 = ai.get_int("S2");
const bool revcharge = tipo_iva11 >= 31 && tipo_iva11 <= 38;
const TString& tipo = ai.get("S1");
const int tipo_vendite = ai.get_int("S7");
// N1 escluse ex art 15
if (tipo_vendite == 5)
natura = "N5"; // regime del margine
else
if (revcharge)
natura = "N6"; // Inversione contabile (REVERSE CHARGE)
else
if (tipo == "NS")
natura = "N2"; // Non soggetto
else
if (tipo == "NI")
natura = "N3"; // Non imponibile
else
if (tipo == "ES")
natura = "N4"; // Esente
}
return natura;
}
@ -1213,8 +1197,10 @@ real TTrFa_mask::get_IVA(const TString& codiva) const
TString TTrFa_mask::revCharge(TString numreg) const
{
TString key = numreg; key << "|1";
return cache().get(LF_RMOV, key).empty() ? "X" : "";
// Controllo se la causale ha il reverse charge, se il cliente non l'ha impostata giusta sono ARAZZI suoi
TString key = numreg;
TCausale caus(cache().get(LF_MOV, key, "CODCAUS"));
return caus.reverse_charge() ? "X" : "";
}
TString TTrFa_mask::getRFSO(TString codrfso) const
@ -1440,7 +1426,14 @@ bool TTrFa_app::createDB()
ok = create_table(TFF, table);
}
}
if(ok)
{
// Aggiungo il valore di default in TFNUM
TTrFa_record tfnum("TFNUM00F");
tfnum.set("PJNKEY", "00001");
tfnum.set("PJNINV", "0000000000");
ok = tfnum.insert();
}
if (ok)
xvt_sql_commit(_db);
else
@ -1541,7 +1534,7 @@ TString TTrFa_app::getHeader(TToken_string* strarr)
return header;
}
TString TTrFa_app::getBody(TToken_string* strarr)
TString TTrFa_app::getBody(TToken_string* strarr, bool add)
{
/*
// Chiave body (20): TIPODOC(2) + DATADOC[YEAR](4) + NUMDOC(7) + AAA(3) + CODALIQUOTA(4)
@ -1556,7 +1549,8 @@ TString TTrFa_app::getBody(TToken_string* strarr)
TString keyMap; keyMap << strarr->get_char(_tipocf) << strarr->get_int(_codcf);
clifoDoc app = mCliDoc[keyMap];
app.countDoc += 1;
if(add)
app.countDoc += 1;
mCliDoc[keyMap] = app;
TString body; body.format("%010d%010d", app.contCliFo, app.countDoc);
@ -1645,8 +1639,9 @@ bool TTrFa_app::tff0200(TString key)
tff0200f.set("P2_SEDENRCIVICO", _ditta.civico_residenza());
tff0200f.set("P2_SEDECAP", _ditta.CAP_residenza());
tff0200f.set("P2_SEDECOMUNE", _ditta.comune_residenza());
tff0200f.set("P2_SEDEPROV", _ditta.provincia_residenza());
tff0200f.set("P2_SEDENAZ", _ditta.localita_residenza());
if(_ditta.italiano()) // Campo ritornerebbe "EE" se estero
tff0200f.set("P2_SEDEPROV", _ditta.provincia_residenza());
tff0200f.set("P2_SEDENAZ", _ditta.stato_residenza());
myrfso = "";
if(haveRFSO(myrfso))
@ -1715,8 +1710,12 @@ bool TTrFa_app::tff0400(TSheet_field& sheet)
continue;
TAnagrafica cedeprest(LF_CLIFO, strarr->get_char(_tipocf), strarr->get_long(_codcf));
TRectype r_cedeprest = cache().get(LF_CLIFO, TString(strarr->get_char(_tipocf)) << "|" << strarr->get_long(_codcf));
TString statocli = cache().get("%STA", r_cedeprest.get("STATOCF"), "S2");
TString keyCedPrest; keyCedPrest << strarr->get_char(_tipocf) << "|" << strarr->get_long(_codcf);
TRectype r_cedeprest = cache().get(LF_CLIFO, keyCedPrest);
TString statocli = cache().get("%STA", r_cedeprest.get("STATOCF"), "S10");
// Se rimane vuoto è italiano
if(statocli == "")
statocli = "IT";
TTrFa_record tff0400f("TFF0400F");
tff0400f.set("P4_KEYPRGINVIO", getKey(strarr));
@ -1786,13 +1785,16 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
// Mentre per i clienti è una porcata per le fatture non posso fare altrimenti, potrebbe essere che i clienti mettono righe in fondo customizzate spezzando fatture
TToken_string fattSent = "";
bool ok = true;
TProgress_monitor p(sheet.items(),"Caricamento Fatture");
TProgress_monitor p(sheet.items(), "Caricamento Fatture");
TString oldKey = "";
int numRiga;
FOR_EACH_SHEET_ROW(sheet, r, strarr)
{
if(!p.add_status())
return false;
if(strcmp(strarr->get(_invio), "X") != 0) continue; // Non mi interessa se non è selezionata
TString checkFatt; checkFatt << strarr->get_char(_tipocf) << strarr->get_long(_codcf) << strarr->get(_numdoc);
if(fattSent.get_pos(checkFatt) < 0)
@ -1806,17 +1808,25 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
tff0700f.set("P7_KEYBODYFATT", getBody(strarr));
tff0700f.set("P7_TIPODOC", decodTipo(strarr));
tff0700f.set("P7_DATA", strarr->get(_datadoc));
tff0700f.set("P7_DATA", toDate(strarr->get(_datadoc)));
tff0700f.set("P7_NUMERO", strarr->get(_numdoc));
tff0700f.set("P7_DATAREG", toDate(strarr->get(_datareg))); // Obbligatoria nei DTR
tff0700f.set("P7_GESTIONE", "");
ok = tff0700f.insert();
// Controllo dopo l'inserimento del tff0700f
if(!ok) return false;
}
// In qualsiasi caso va messa la riga
ok = tff2200(strarr);
// In qualsiasi caso va messa la riga ma prima elaboro il numero della riga!
TString newKey = getBody(strarr, false);
if(oldKey != newKey)
{
numRiga = 1;
oldKey = newKey;
}
else
numRiga++;
ok = tff2200(strarr, numRiga);
// E dopo l'inserimento del tff2200
if(!ok) return false;
@ -1824,15 +1834,17 @@ bool TTrFa_app::tff0700(TSheet_field& sheet)
return ok;
}
bool TTrFa_app::tff2200(TToken_string* strarr)
bool TTrFa_app::tff2200(TToken_string* strarr, int nriga)
{
TTrFa_record tff2200f("TFF2200F");
tff2200f.set("PL_KEYPRGINVIO", getKey(strarr));
tff2200f.set("PL_KEYHEADERFATT", getHeader(strarr));
tff2200f.set("PL_KEYBODYFATT", getBody(strarr));
tff2200f.set("PL_KEYBODYFATT", getBody(strarr, false));
TString numriga; numriga.format("%020d", nriga);
tff2200f.set("PL_KEYBODYDETT", numriga);
tff2200f.set("PL_IMPONIBILE", strarr->get(_imponibile));
tff2200f.set("PL_IMPOSTA", strarr->get(_importoIVA));
tff2200f.set("PL_IMPONIBILE", real(strarr->get(_imponibile))); // Se li converto in real una volta passati vengono parsati da var2str nel formato che vuole l'agenzia delle entrate
tff2200f.set("PL_IMPOSTA", real(strarr->get(_importoIVA)));
tff2200f.set("PL_ALIQUOTAIVA", strarr->get(_aliquota));
tff2200f.set("PL_NATURA", strarr->get(_natura));
real det(strarr->get(_detraibile));
@ -1840,7 +1852,7 @@ bool TTrFa_app::tff2200(TToken_string* strarr)
det /= CENTO;
if(det > ZERO)
{
tff2200f.set("PL_DETRAIBILE", det.stringa(6,2));
tff2200f.set("PL_DETRAIBILE", det);
}
else if(false) // Sempre disabilitato!
{
@ -1910,7 +1922,7 @@ bool TTrFa_app::setEsportato(TSheet_field& sheet)
{
TRectype row = cache().get(LF_RMOV, TString(strarr->get(_numero)));
row.put("TFINVIO", "X");
row.put("TFDATA", TDate(TODAY));
row.put("TFDATA", TDate(TODAY).string());
ok = row.rewrite(TLocalisamfile(LF_RMOV)) == NOERR;
if(!ok) return false;
}

View File

@ -10,22 +10,14 @@
#define START_BOOLEAN 407
#define B_TIPO_AUTOFATT 407
#define B_TIPO_BOLLADOG 408
#define B_TIPO_CORRNINC 409
#define B_TIPO_CORR 410
#define B_TIPO_FATTACQ 411
#define B_TIPO_FATTFISC 412
#define B_TIPO_FATTSC 413
#define B_TIPO_FATTVEN 414
#define B_TIPO_NOTC 415
#define B_TIPO_NOTD 416
#define B_TIPO_RICFIS 417
#define B_TIPO_RICFISNI 418
#define B_TIPO_SCONT 419
#define B_TIPO_SCONTNI 420
#define B_TIPO_STORDOC 421
#define B_TIPO_FATTACQ 408
#define B_TIPO_FATTFISC 409
#define B_TIPO_FATTVEN 410
#define B_TIPO_NOTC 411
#define B_TIPO_NOTD 412
#define B_TIPO_STORDOC 413
#define END_BOOLEAN 421
#define END_BOOLEAN 413
#define END_MASK 421

View File

@ -19,10 +19,10 @@ BEGIN
PICTURE TOOL_SAVEREC
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT 3 1 "E~xcel"
PICTURE TOOL_EXCEL
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT 3 1 "E~xcel"
PICTURE TOOL_EXCEL
END
#include <elabar.h>
@ -51,7 +51,7 @@ END
NUMBER F_CODCF 6
BEGIN
PROMPT 18 4 "Codice:"
PROMPT 18 3 "Codice:"
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_CODCF
@ -69,7 +69,7 @@ END
STRING F_RAGSOC 50 49
BEGIN
PROMPT 18 5 "R.Soc: "
PROMPT 18 4 "R.Soc: "
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_RAGSOC
@ -86,96 +86,53 @@ END
RADIOBUTTON F_FATTSEL 25
BEGIN
PROMPT 1 7 "Fatture da visualizzare"
PROMPT 1 6 "Fatture da visualizzare"
ITEM "0|Da inviare"
ITEM "1|Inviate"
ITEM "2|Tutti"
END
GROUPBOX DLG_NULL 65 6
GROUPBOX DLG_NULL 65 4
BEGIN
PROMPT 30 7 "Tipi documento selezionati"
PROMPT 30 6 "Tipi documento selezionati"
END
BOOLEAN B_TIPO_AUTOFATT
BEGIN
PROMPT 31 8 "Autofattura"
FLAGS ""
END
BOOLEAN B_TIPO_BOLLADOG
BEGIN
PROMPT 45 8 "Bolla dog"
FLAGS ""
END
BOOLEAN B_TIPO_CORRNINC
BEGIN
PROMPT 60 8 "Corr non inc"
FLAGS ""
END
BOOLEAN B_TIPO_CORR
BEGIN
PROMPT 75 8 "Corrispettivo"
PROMPT 31 7 "Autofattura"
FLAGS ""
END
BOOLEAN B_TIPO_FATTACQ
BEGIN
PROMPT 31 9 "Fatt d'Acq"
PROMPT 45 7 "Fatt d'Acq"
FLAGS ""
END
BOOLEAN B_TIPO_FATTFISC
BEGIN
PROMPT 45 9 "Fatt Fisc"
FLAGS ""
END
BOOLEAN B_TIPO_FATTSC
BEGIN
PROMPT 60 9 "Fatt Scontr"
PROMPT 60 7 "Fatt Fisc"
FLAGS ""
END
BOOLEAN B_TIPO_FATTVEN
BEGIN
PROMPT 75 9 "Fatt Ven"
PROMPT 75 7 "Fatt Ven"
FLAGS ""
END
BOOLEAN B_TIPO_NOTC
BEGIN
PROMPT 31 10 "Nota Cred"
PROMPT 31 8 "Nota Cred"
FLAGS ""
END
BOOLEAN B_TIPO_NOTD
BEGIN
PROMPT 45 10 "Nota Deb"
FLAGS ""
END
BOOLEAN B_TIPO_RICFIS
BEGIN
PROMPT 60 10 "Ric fis"
FLAGS ""
END
BOOLEAN B_TIPO_RICFISNI
BEGIN
PROMPT 75 10 "Ric Fis NI"
FLAGS ""
END
BOOLEAN B_TIPO_SCONT
BEGIN
PROMPT 31 11 "Scontrino"
FLAGS ""
END
BOOLEAN B_TIPO_SCONTNI
BEGIN
PROMPT 45 11 "Scontrino NI"
PROMPT 45 8 "Nota Deb"
FLAGS ""
END
BOOLEAN B_TIPO_STORDOC
BEGIN
PROMPT 60 11 "Storno Doc"
PROMPT 60 8 "Storno Doc"
FLAGS ""
END
ENDPAGE
PAGE "Trasferimento Fatture" 0 2 0 0
@ -418,6 +375,7 @@ BOOLEAN A_AUTOFATT
BEGIN
PROMPT 25 9 "Autofattura"
FIELD AUTOFATT
FLAGS "D"
END
STRING A_PAIV 12

View File

@ -41,9 +41,13 @@ enum filter_fatt
#define MOV_CUSTOM 10000000
#define SHEET_GAP 101
#define DTE_PROVV "DTE0000001"
#define DTR_PROVV "DTR0000001"
#ifdef DBG
#define DTE_PROVV "000001"
#define DTR_PROVV "000002"
#else
#define DTE_PROVV "DTE"
#define DTR_PROVV "DTR"
#endif
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
* per avere l'inserimento nello sheet corretto */
enum spesometroFields{
@ -92,6 +96,8 @@ static bool haveRFSO(TString& codrfso);
static const char* decodTipo(TToken_string* strarr);
// Salvo un singolo record
bool saveRec(TToken_string row, bool esportato = false);
// Ritorno una data in formato ANSI
TDate toDate(const char * date) { return TDate(date).string(); }
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_record
@ -150,7 +156,7 @@ class TTrFa_cursors : TObject
bool filOk(bool alreadySent) { return (filFat == all) || (filFat == sent && alreadySent) || (filFat == toSend && !alreadySent); }
TRectype _next(return_code& code, TString& tipocf, TString& codcf); // Si sposta avanti di un elemento
bool checkRecord(TISAM_recordset* rec);
public:
TTrFa_cursors() : filFat(all) {};
~TTrFa_cursors();
@ -234,13 +240,13 @@ private:
bool create_table(TScanner& TFF, const TString& table);
TString getKey(TToken_string* strarr);
TString getHeader(TToken_string* strarr);
TString getBody(TToken_string* strarr);
TString getBody(TToken_string* strarr, bool add = true);
bool tff0100(TSheet_field& sheet); // Header esportazione
bool tff0200(TString key); // Anagrafica ditta
bool tff0300(TString key, TRectype r_ana); // Rappresentante fiscale ditta
bool tff0400(TSheet_field& sheet); // Anagrafica clifo
bool tff0700(TSheet_field& sheet); // Testata documento
bool tff2200(TToken_string* strarr); // Riepilogo aliquote
bool tff2200(TToken_string* strarr, int nriga); // Riepilogo aliquote
bool tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo
bool setEsportato(TSheet_field& sheet);
//const TRectype* find_parent_row(const TRectype& rdoc) const;

View File

@ -1,3 +1,9 @@
[TFNUM00F]
PJNKEY = CHAR(5)
PJNINV = CHAR(10)
INDEX_1 = PJNKEY
[TFF0100F]
P1_KEYPRGINVIO = CHAR(10)
P1_TRASMITTPAESE = CHAR(2)
@ -33,19 +39,19 @@ P2_DTISCRIZEALBO = DATE
P2_REGFISCALE = CHAR(4)
P2_SEDEIND = CHAR(60)
P2_SEDENRCIVICO = CHAR(8)
P2_SEDECAP = NUMERIC(5, 0)
P2_SEDECAP = CHAR(5)
P2_SEDECOMUNE = CHAR(60)
P2_SEDEPROV = CHAR(2)
P2_SEDENAZ = CHAR(2)
P2_STABORGIND = CHAR(60)
P2_STABORGNRCIVICO = CHAR(8)
P2_STABORGCAP = NUMERIC(5, 0)
P2_STABORGCAP = CHAR(5)
P2_STABORGCOMUNE = CHAR(60)
P2_STABORGPROV = CHAR(2)
P2_STABORGNAZ = CHAR(2)
P2_ISCRREAUFF = CHAR(2)
P2_ISCRREANUM = CHAR(20)
P2_ISCRREACAP = VARNUMERIC(15, 2)
P2_ISCRREACAP = CHAR(5)
P2_ISCRREASOCIOU = CHAR(2)
P2_ISCRREASLIQUID = CHAR(2)
P2_CONTATTITELEF = CHAR(12)
@ -59,41 +65,41 @@ P2_ERREST = CHAR(1)
INDEX_1 = P2_KEYPRGINVIO
[TFF0300F]
P3_KEYPRGINVIO = CHAR(10)
P3_FISCIVAPAESE = CHAR(2)
P3_FISCIVACODICE = CHAR(28)
P3_CODFISC = CHAR(16)
P3_ANADENOMI = CHAR(80)
P3_ANANOME = CHAR(60)
P3_ANACOGNOME = CHAR(60)
P3_ANATITOLO = CHAR(10)
P3_ANACODEORI = CHAR(17)
P3_GESTIONE = CHAR(1)
P3_ERRINT = CHAR(1)
P3_ERREST = CHAR(1)
P3_KEYPRGINVIO = CHAR(10)
P3_FISCIVAPAESE = CHAR(2)
P3_FISCIVACODICE = CHAR(28)
P3_CODFISC = CHAR(16)
P3_ANADENOMI = CHAR(80)
P3_ANANOME = CHAR(60)
P3_ANACOGNOME = CHAR(60)
P3_ANATITOLO = CHAR(10)
P3_ANACODEORI = CHAR(17)
P3_GESTIONE = CHAR(1)
P3_ERRINT = CHAR(1)
P3_ERREST = CHAR(1)
INDEX_1 = P3_KEYPRGINVIO
[TFF0400F]
P4_KEYPRGINVIO = CHAR(10)
P4_KEYHEADERFATT = CHAR(20)
P4_FISCIVAPAESE = CHAR(2)
P4_FISCIVACOD = CHAR(28)
P4_CODFISC = CHAR(16)
P4_ANADENOM = CHAR(80)
P4_ANANOME = CHAR(60)
P4_ANACOGNOME = CHAR(60)
P4_ANATITOLO = CHAR(10)
P4_ANACODEORI = CHAR(17)
P4_SEDEIND = CHAR(60)
P4_SEDENRCIVICO = CHAR(8)
P4_SEDECAP = CHAR(5)
P4_SEDECOMUNE = CHAR(60)
P4_SEDEPROV = CHAR(2)
P4_SEDENAZ = CHAR(2)
P4_GESTIONE = CHAR(1)
P4_ERRINT = CHAR(1)
P4_ERREST = CHAR(1)
P4_KEYPRGINVIO = CHAR(10)
P4_KEYHEADERFATT = CHAR(20)
P4_FISCIVAPAESE = CHAR(2)
P4_FISCIVACOD = CHAR(28)
P4_CODFISC = CHAR(16)
P4_ANADENOM = CHAR(80)
P4_ANANOME = CHAR(60)
P4_ANACOGNOME = CHAR(60)
P4_ANATITOLO = CHAR(10)
P4_ANACODEORI = CHAR(17)
P4_SEDEIND = CHAR(60)
P4_SEDENRCIVICO = CHAR(8)
P4_SEDECAP = CHAR(5)
P4_SEDECOMUNE = CHAR(60)
P4_SEDEPROV = CHAR(2)
P4_SEDENAZ = CHAR(2)
P4_GESTIONE = CHAR(1)
P4_ERRINT = CHAR(1)
P4_ERREST = CHAR(1)
INDEX_1 = P4_KEYPRGINVIO,P4_KEYHEADERFATT
@ -128,6 +134,7 @@ INDEX_1 = P7_KEYPRGINVIO,P7_KEYHEADERFATT,P7_KEYBODYFATT
PL_KEYPRGINVIO = CHAR(10)
PL_KEYHEADERFATT = CHAR(20)
PL_KEYBODYFATT = CHAR(20)
PL_KEYBODYDETT = CHAR(20)
PL_ALIQUOTAIVA = NUMERIC(6,2)
PL_NATURA = CHAR(2)
PL_SPESEACCESS = NUMERIC(15,2)
@ -137,19 +144,19 @@ PL_IMPOSTA = NUMERIC(15,2)
PL_ESIGIVA = CHAR(1)
PL_RIFNORMATIVO = CHAR(100)
PL_DETRAIBILE = NUMERIC(6, 2)
PD_DEDUCIBILE = CHAR(2)
PL_DEDUCIBILE = CHAR(2)
PL_GESTIONE = CHAR(1)
PL_ERRINT = CHAR(1)
PL_ERREST = CHAR(1)
INDEX_1 = PL_KEYPRGINVIO,PL_KEYHEADERFATT,PL_KEYBODYFATT
INDEX_1 = PL_KEYPRGINVIO,PL_KEYHEADERFATT,PL_KEYBODYFATT,PL_KEYBODYDETT
[TFF3100F]
PH_KEYPRGINVIO = CHAR(10)
PH_KEYHEADERFATT = CHAR(20)
PH_STABORGIND = CHAR(60)
PH_STABORGNRCIVICO = CHAR(8)
PH_STABORGCAP = NUMERIC(5)
PH_STABORGCAP = CHAR(5)
PH_STABORGCOMUNE = CHAR(60)
PH_STABORGPROV = CHAR(2)
PH_STABORGNAZ = CHAR(2)