Patch level : 12.0 no-patch

Files correlati     : 
Commento            : 
- Primo commit di tf spesometro funzionante, implementate tutte le funzioni di base.
- Tolto messaggio di errore TF0200

git-svn-id: svn://10.65.10.50/branches/R_10_00@23875 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2017-06-23 13:30:54 +00:00
parent 68adb769c3
commit 92a00f4d80
6 changed files with 1810 additions and 837 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,31 +1,61 @@
#define F_DATAINI 401
#define F_DATAFIN 402
#define F_TIPOCF 403
#define F_CODCF 404
#define F_RAGSOC 405
#define F_FATTSEL 406
#define START_MASK 401
#define F_RIGHE 300
#define F_DATAINI 401
#define F_DATAFIN 402
#define F_TIPOCF 403
#define F_CODCF 404
#define F_RAGSOC 405
#define F_FATTSEL 406
/* Campi booleani documento */
#define START_BOOLEAN 407
#define A_SPEDITA 101
#define A_INVIO 102
#define A_FORZATA 103
#define A_NUMERO 104
#define A_NUMRIGA 105
#define A_TIPOCF 106
#define A_CODCF 107
#define A_OCFPI 108
#define A_RAGSOC 109
#define A_RFSO 110
#define A_TIPODOC 111
#define A_NUMDOC 112
#define A_DATADOC 113
#define A_NATURA 114
#define A_ALIQUOTA 115
#define A_DETRAIB 116
#define A_IMPONIBILE 117
#define A_IMPOSTA 118
#define A_REVERSE 119
#define A_AUTOFATT 120
#define A_PAIV 121
#define A_COFI 122
#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 END_BOOLEAN 421
#define END_MASK 421
#define F_RIGHE 301 // Sheet righe tf
#define START_SHEET 101
#define A_DATAREG 101
#define A_TIPODOC 102
#define A_NUMDOC 103
#define A_DATADOC 104
#define A_ALIQUOTA 105
#define A_IMPONIBILE 106
#define A_IMPOSTA 107
#define A_NATURA 108
#define A_DETRAIB 109
#define A_TIPOCF 110
#define A_CODCF 111
#define A_OCFPI 112
#define A_RAGSOC 113
#define A_RFSO 114
#define A_RAGSOCRFSO 115
#define A_PAIV 116
#define A_COFI 117
#define A_REVERSE 118
#define A_AUTOFATT 119
#define A_SPEDITA 120
#define A_INVIO 121
#define A_FORZATA 122
#define A_NUMERO 123
#define A_CODERR 124
#define END_SHEET 124

View File

@ -1,6 +1,30 @@
#include "tf0100a.h"
TOOLBAR "topbar" 0 0 0 2
BUTTON DLG_RECALC 2 2
BEGIN
PROMPT 1 1 "Carica"
PICTURE TOOL_CONVERT
END
BUTTON DLG_ARCHIVE 2 2
BEGIN
PROMPT 2 1 "Controlla"
PICTURE TOOL_SMILE
END
BUTTON DLG_SAVEREC 2 2
BEGIN
PROMPT 3 1 "Salva"
PICTURE TOOL_SAVEREC
END
BUTTON DLG_EDIT 10 2
BEGIN
PROMPT 3 1 "E~xcel"
PICTURE TOOL_EXCEL
END
#include <elabar.h>
ENDPAGE
@ -8,20 +32,19 @@ PAGE "Impostazioni" 0 2 0 0
DATE F_DATAINI
BEGIN
PROMPT 1 0 "Data iniziale:"
PROMPT 1 1 "Data iniziale:"
CHECKTYPE REQUIRED
END
DATE F_DATAFIN
BEGIN
PROMPT 40 0 "Data Finale: "
PROMPT 40 1 "Data Finale: "
CHECKTYPE REQUIRED
END
RADIOBUTTON F_TIPOCF 15
BEGIN
PROMPT 1 2 "Tipo C/F"
ITEM "T|Tutti"
ITEM "C|Cliente"
ITEM "F|Fornitore"
END
@ -41,7 +64,7 @@ BEGIN
OUTPUT F_RAGSOC RAGSOC
CHEKTYPE NORMAL
GROUP 1
FLAGS "D"
FLAGS ""
END
STRING F_RAGSOC 50 49
@ -57,7 +80,7 @@ BEGIN
COPY OUTPUT F_CODCF
ADD RUN CG0 -1
GROUP 1
FLAGS "D"
FLAGS ""
END
@ -69,35 +92,121 @@ BEGIN
ITEM "2|Tutti"
END
GROUPBOX DLG_NULL 65 6
BEGIN
PROMPT 30 7 "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"
FLAGS ""
END
BOOLEAN B_TIPO_FATTACQ
BEGIN
PROMPT 31 9 "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"
FLAGS ""
END
BOOLEAN B_TIPO_FATTVEN
BEGIN
PROMPT 75 9 "Fatt Ven"
FLAGS ""
END
BOOLEAN B_TIPO_NOTC
BEGIN
PROMPT 31 10 "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"
FLAGS ""
END
BOOLEAN B_TIPO_STORDOC
BEGIN
PROMPT 60 11 "Storno Doc"
FLAGS ""
END
ENDPAGE
PAGE "Trasferimento Fatture" 0 2 0 0
SPREADSHEET F_RIGHE
BEGIN
PROMPT 0 0 ""
ITEM "Spedita@3F"
ITEM "Invio@3F"
ITEM "Mod.@3F"
ITEM "N.\nRegistraz.@7F"
ITEM "N.Riga@3F"
ITEM "C/F@2F"
ITEM "Codice@6F"
ITEM "Occas.@3"
ITEM "Ragione Sociale@35"
ITEM "RF/SO@6"
ITEM "Tipo\nDocum.@2"
ITEM "Numero\nDocum.@5"
PROMPT 0 0 "Righe movimenti"
ITEM "Data\n Reg.@8F"
ITEM "Tipo\nDocum.@2F"
ITEM "Numero\nDocum.@5F"
ITEM "Data\nDocum.@10"
ITEM "Natura\nIVA@4"
ITEM "Aliquota@4"
ITEM "% Detr.@6"
ITEM "Imponibile@10"
ITEM "Imposta@10"
ITEM "Rev.\nCharge@4"
ITEM "Auto\nfatt.@3"
ITEM "Natura\nIVA@4"
ITEM "% Detr.@6"
ITEM "C/F@2"
ITEM "Codice@6"
ITEM "Occas.@16"
ITEM "Ragione Sociale@35"
ITEM "RF/SO@16"
ITEM "Rag. Soc. RF/SO@35"
ITEM "Partita IVA@11"
ITEM "Codice Fiscale@15"
ITEM "Rev.\nCharge@4"
ITEM "Auto\nfatt.@3"
ITEM "Spedita@5"
ITEM "Invio@3"
ITEM "Mod.@3"
ITEM "N.\nRegistraz.@10"
ITEM "Codici Errori@10"
DEFAULT "*" // Impedisce il salvataggio su profilo .ini
END
@ -105,53 +214,54 @@ ENDPAGE
ENDMASK
PAGE "Riga" -1 -1 69 10
PAGE "Riga" -1 -1 -1 -1
BOOLEAN A_SPEDITA
BEGIN
PROMPT 40 9 "Gia' spedita"
PROMPT 52 10 "Gia' spedita"
FIELD SPEDITA
FLAGS "D"
END
BOOLEAN A_INVIO
LIST A_INVIO 1 10
BEGIN
PROMPT 40 9 "Da inviare"
PROMPT 1 10 "Da inviare"
ITEM "X|Da Inviare"
ITEM "E|Errore"
FIELD INVIO
END
BOOLEAN A_FORZATA
BEGIN
PROMPT 40 9 "Forzatura manuale"
PROMPT 25 10 "Forzatura manuale"
FIELD FORZATURA
END
NUMBER A_NUMERO 7
NUMBER A_NUMERO 10
BEGIN
PROMPT 1 0 "N.Movimento"
FLAGS "D"
FIELD PROGR
END
NUMBER A_NUMRIGA 3
DATE A_DATAREG
BEGIN
PROMPT 25 0 "N.Riga"
FLAGS "D"
FIELD PROGR
PROMPT 26 0 "Data reg."
FIELD DATAREG
CHEKTYPE REQUIRED
END
LIST A_TIPOCF 1 10
BEGIN
PROMPT 1 2 "Tipo C/F"
PROMPT 1 1 "Tipo C/F "
ITEM "C|Cliente"
ITEM "F|Fornitore"
FIELD TIPOCF
FLAGS "D"
END
NUMBER A_CODCF 6
BEGIN
PROMPT 23 2 "Cod. C/F"
PROMPT 26 1 "Cod. C/F"
USE LF_CLIFO
INPUT TIPOCF A_TIPOCF SELECT
INPUT CODCF A_CODCF
@ -160,16 +270,18 @@ BEGIN
DISPLAY "Occasionale@C" OCCAS
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice fiscale@16" COFI
OUTPUT A_CODCF CODCF
CHEKTYPE REQUIRED
OUTPUT A_CODCF CODCF
OUTPUT A_RAGSOC RAGSOC
OUTPUT A_PAIV PAIV
OUTPUT A_COFI COFI
ADD RUN cg0 -1
FIELD CODCF
FLAGS "DG"
FLAGS "G"
END
STRING A_OCFPI 16
BEGIN
PROMPT 43 2 "Occas."
PROMPT 44 1 "Occas."
USE LF_OCCAS
INPUT CFPI A_OCFPI
DISPLAY "Codice@16" CFPI
@ -177,51 +289,72 @@ BEGIN
DISPLAY "Partita IVA" PAIV
DISPLAY "Codice fiscale@16" COFI
OUTPUT A_OCFPI CFPI
OUTPUT A_RAGSOC RAGSOC
OUTPUT A_PAIV PAIV
OUTPUT A_COFI COFI
CHEKTYPE NORMAL
GROUP 3
ADD RUN cg0 -6
FIELD OCFPI
FLAGS "DG"
FLAGS "G"
END
STRING A_RAGSOC 50 47
BEGIN
FIELD RAGSOC
PROMPT 1 3 "Ragione Sociale "
PROMPT 1 2 "Ragione Sociale"
FLAGS "D"
END
STRING A_RFSO 6
BEGIN
FIELD RFSO
PROMPT 30 16 "Codice RF/SO:"
PROMPT 1 4 "Codice RF/SO: "
HELP "Codice Rappresentante Fiscale o Stabile Organizzazione"
FLAGS "D"
END
STRING A_RAGSOCRFSO 50 47
BEGIN
FIELD RAGSOCRFSO
PROMPT 1 5 "Rag. Soc. RF/SO"
HELP "Ragione Sociale RF/SO"
FLAGS "D"
END
STRING A_TIPODOC 2
BEGIN
PROMPT 23 5 "Tipo doc. "
FLAGS "U"
PROMPT 23 6 "Tipo doc. "
FIELD TIPODOC
USE %TPD
INPUT CODTAB A_TIPODOC
DISPLAY "Tipo " CODTAB
DISPLAY "Descrizione @50" S0
OUTPUT A_TIPODOC CODTAB
WARNING "Tipo documento errato"
CHECKTYPE REQUIRED
FLAGS "U"
ADD NONE
END
STRING A_NUMDOC 7
BEGIN
PROMPT 23 5 "Num. doc. "
PROMPT 42 6 "Num. doc. "
FLAGS "U"
FIELD NUMDOC
CHEKTYPE REQUIRED
END
DATE A_DATADOC
BEGIN
PROMPT 1 5 "Data doc. "
PROMPT 1 6 "Data doc."
FIELD DATADOC
CHEKTYPE REQUIRED
END
LIST A_NATURA 1 35
BEGIN
PROMPT 1 6 "Natura IVA"
PROMPT 20 7 "Natura IVA"
ITEM "|IVA ordinaria"
ITEM "N1|N1 - IVA esclusa ex art 15"
ITEM "N2|N2 - IVA non soggetta"
@ -233,16 +366,30 @@ BEGIN
FIELD S12
END
NUMBER A_ALIQUOTA 6 2
STRING A_ALIQUOTA 4
BEGIN
PROMPT 25 7 "Aliquota "
HELP "Percentuale di imposta"
FLAGS "D"
PROMPT 1 7 "Aliquota "
HELP "Codice aliquota"
FIELD CODTAB
KEY 1
USE %IVA
FLAGS "U"
INPUT CODTAB A_ALIQUOTA
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
DISPLAY "Tipo" S1
DISPLAY "%@5" R0
DISPLAY "Vent." S6
DISPLAY "Sospeso" B2
OUTPUT A_ALIQUOTA CODTAB
HELP "Codice IVA"
CHECKTYPE REQUIRED
VALIDATE ZEROFILL_FUNC 2
END
STRING A_DETRAIB 6
BEGIN
PROMPT 25 7 "% Detraibilita' "
PROMPT 1 8 "% Detraibilita'"
HELP "Percentuale di detraibilita'"
FLAGS "D"
END
@ -250,13 +397,14 @@ END
CURRENCY A_IMPONIBILE 12
BEGIN
PROMPT 1 7 "Imponibile"
PROMPT 42 8 "Imponibile"
FIELD IMPORTO
CHEKTYPE REQUIRED
END
CURRENCY A_IMPOSTA 12
BEGIN
PROMPT 45 7 "Imposta"
PROMPT 42 9 "Imposta "
FIELD IMPOSTA
END
@ -274,13 +422,19 @@ END
STRING A_PAIV 12
BEGIN
PROMPT 1 4 "Partita IVA "
PROMPT 1 3 "Partita IVA "
FLAGS "D"
END
STRING A_COFI 16
BEGIN
PROMPT 33 4 "Codice Fiscale "
PROMPT 33 3 "Codice Fiscale"
FLAGS "D"
END
STRING A_CODERR 10
BEGIN
PROMPT -1 -1 "Codice Fiscale"
FLAGS "D"
END
@ -293,12 +447,6 @@ BEGIN
PROMPT 1 1 ""
END
BUTTON DLG_USER 2 2
BEGIN
PROMPT 2 1 "Collega"
PICTURE TOOL_LINK
END
BUTTON DLG_CANCEL 2 2
BEGIN
PROMPT 4 1 ""

267
src/tf/tf0100b.h Normal file
View File

@ -0,0 +1,267 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include <execp.h>
#include <golem.h>
#include <progind.h>
#include <reputils.h>
#include <tabutil.h>
#include <utility.h>
#include <agasys.h>
#include <printer.h>
#include <map> // std::map
#include "../ve/velib05.h"
#include "../cg/cglib03.h"
#include "../fe/felib.h"
#include "tf0100a.h"
/////////////////////////////////////////////////////////////////////////////////////
// Globals
/////////////////////////////////////////////////////////////////////////////////////
static XVT_SQLDB _db = NULL; // TFF sqlite db
enum return_code
{
found, // Trovato
foundcust, // Trovato in trasfatt
nextmov, // Trovato ma cambiato movimento
eof, // EOF rmoviva
eofm, // EOF mov
after // File mov su un movimento dopo rispetto a rmoviva
};
enum filter_fatt
{
toSend, // Da inviare
sent, // Inviate
all // Tutte
};
#define MOV_CUSTOM 10000000
#define SHEET_GAP 101
#define DTE_PROVV "DTE0000001"
#define DTR_PROVV "DTR0000001"
/* Così facendo basta modificare la maschera (e le dichiarazioni di conseguenza)
* per avere l'inserimento nello sheet corretto */
enum spesometroFields{
_spedita = A_SPEDITA - SHEET_GAP,
_invio = A_INVIO - SHEET_GAP,
_forzata = A_FORZATA - SHEET_GAP,
_numero = A_NUMERO - SHEET_GAP,
_datareg = A_DATAREG - SHEET_GAP,
_tipocf = A_TIPOCF - SHEET_GAP,
_codcf = A_CODCF - SHEET_GAP,
_occas = A_OCFPI - SHEET_GAP,
_ragsoc = A_RAGSOC - SHEET_GAP,
_rfso = A_RFSO - SHEET_GAP,
_ragsocrfso = A_RAGSOCRFSO - SHEET_GAP,
_codnum = A_TIPODOC - SHEET_GAP,
_numdoc = A_NUMDOC - SHEET_GAP,
_datadoc = A_DATADOC - SHEET_GAP,
_natura = A_NATURA - SHEET_GAP,
_aliquota = A_ALIQUOTA - SHEET_GAP,
_detraibile = A_DETRAIB - SHEET_GAP,
_imponibile = A_IMPONIBILE - SHEET_GAP,
_importoIVA = A_IMPOSTA - SHEET_GAP, // Imposta è già preso
_reverse = A_REVERSE - SHEET_GAP,
_autofatt = A_AUTOFATT - SHEET_GAP,
_paiv = A_PAIV - SHEET_GAP,
_codfis = A_COFI - SHEET_GAP,
_coderr = A_CODERR - SHEET_GAP
};
/////////////////////////////////////////////////////////////////////////////////////
// Utilities
/////////////////////////////////////////////////////////////////////////////////////
// Da un id ritorna il tipo doc corrispondente
TString getTipoDoc(int id);
int getTipoDoc(TString id);
// Ritorna il record custom
TRectype getTrasFatt(TString reg, TString codiva);
// Ritorna il cliente in un record di $clifo, con tipocf = "O" lo cerca in $occas
TRectype getCli(TString tipocf, TString codcf);
// Cerca una stringa all'interno di una SLIST (Potrebbe diventare una funzione di XVT.h)
static SLIST_ELT xvt_slist_find_str(SLIST list, const char* str);
// Controlla se l'azienda ha un RFSO
static bool haveRFSO(TString& codrfso);
// Decodifica il tipo di documento per il trasferimento fatture
static const char* decodTipo(TToken_string* strarr);
// Salvo un singolo record
bool saveRec(TToken_string row, bool esportato = false);
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_record
/////////////////////////////////////////////////////////////////////////////////////
// Contenitore di campi di un record di database SQLite
class TTrFa_record : public TObject
{
TString8 _table;
TToken_string _key;
TAssoc_array _fields;
protected:
void copy(const TTrFa_record& rec) { _table = rec._table; _key = rec._key; _fields = rec._fields; }
const TString& var2str(const TString& fld, const TVariant& var) const;
public:
void reset() { _fields.destroy(); }
void set(const char* fld, const TVariant& var);
void set(const char* fld, long var);
void set(const char* fld, const char* var);
void set(const char* fld, const real& var);
void set(const char* fld, const TString& var);
void set(const char* fld, const TDate& var);
void set(const char* fld, bool var);
const TVariant& get(const char* fld) const;
bool insert();
bool remove();
bool search();
bool search(const char* k1, const char* k2, const char* k3 = NULL);
virtual TObject* dup() const { return new TTrFa_record(*this); }
virtual bool ok() const { return _table.not_empty(); }
TTrFa_record& operator=(const TTrFa_record& rec) { copy(rec); return *this; }
TTrFa_record(const TTrFa_record& rec) { copy(rec); }
TTrFa_record(const char* table);
};
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_cursors
/////////////////////////////////////////////////////////////////////////////////////
/*
* Classe per la gestione di RMOVIVA, MOV, TFCUST
*/
class TTrFa_cursors : TObject
{
friend class TCursor;
TISAM_recordset* c_rmoviva;
filter_fatt filFat;
bool _newMov;
// Se trovo un record custom devo saltare tutti quelli che trovo successivamente, per fare ciò utilizzo una TToken_string
TToken_string _alqCust;
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
public:
TTrFa_cursors() : filFat(all) {};
~TTrFa_cursors();
long int getIvaItems() { return c_rmoviva->items(); }
long int getIvaPos() { return c_rmoviva->cursor()->pos(); }
TRectype getIva() { return c_rmoviva->cursor()->curr(); }
int next(TAssoc_array& recimposte, bool& ok, TString& tipocf, TString& codcf); // Legge tutto il prossimo movimento, in importi mette per ogni codiva la somma
int updateFilters(const char tipocf, const long codcf, TDate dal, TDate al, int cod = toSend);
};
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_mask
/////////////////////////////////////////////////////////////////////////////////////
class TTrFa_mask : public TAutomask
{
friend class TTrFa_cursors;
TMaskmode _mode;
bool _sheet_dirty;
bool _filter_changed;
protected:
virtual void next_page(int p);
const char * natura(const TString& codiva) const;
real get_IVA(const TString& codiva) const;
TString findDetraib(TString tipodet) const;
TString revCharge(TString numreg) const;
TString getRFSO(TString codrfso) const;
TRecnotype nuovo_progr() const;
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
public:
void setFilterChanged() { _filter_changed = true; }
void load_sheet();
TTrFa_mask(TString msk);
~TTrFa_mask();
// Carico i tipi documento all'inizio
void loadConfig();
// Salvo i tipi documento
void saveConfig();
// Salvo tutti i records
bool saveAll();
// Controllo tutti i records
bool checkAll();
// Testo validità record
bool checkRec(TPrinter* stampa, TToken_string rec);
// Controllo che siano presenti records
bool checkNotEmpty();
};
// Funzione inline di stampa
inline void printError(TPrinter* stampa, TString movimento, TString documento, TString msgerr);
/////////////////////////////////////////////////////////////////////////////////////
// TTrFa_app
/////////////////////////////////////////////////////////////////////////////////////
struct clifoDoc
{
long contCliFo;
long countDoc;
};
class TTrFa_app : public TSkeleton_application
{
TAnagrafica _ditta;
TString16 _cofi;
TFilename _dbname;
TLog_report* _log;
TString _logTFF;
bool _append;
TString myrfso;
static long header;
// Solitamente nei programmi di campo cerco di sfruttare le classi interne ma per mancanza di tempo sono costretto a usare l'std::vector
std::map<TString, clifoDoc> mCliDoc;
private:
int parse_line(const TString& line, TString& var, TString& val) const;
bool create_table(TScanner& TFF, const TString& table);
TString getKey(TToken_string* strarr);
TString getHeader(TToken_string* strarr);
TString getBody(TToken_string* strarr);
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 tff3100(TToken_string* strarr, TRectype r_ana); // Rappresentante fiscale clifo
bool setEsportato(TSheet_field& sheet);
//const TRectype* find_parent_row(const TRectype& rdoc) const;
//int find_ancestors(const TRiga_documento& rdoc, TArray& ancestors) const;
protected:
//const char* descrizione(const TRiga_documento& rdoc) const;
//const TRectype& cco(const TRectype& doc) const; // Contratto/Convenzione/Offerta
void log(int severity, const char* msg);
bool show_log();
void set_IVA(const TString& codiva, TTrFa_record& TFF) const;
void set_IVA(const TRiga_documento& rdoc, TTrFa_record& TFF) const;
bool syncronizeDB();
bool createDB();
public:
virtual bool create();
virtual bool destroy();
virtual void main_loop();
bool send(TTrFa_mask* msk);
TTrFa_app() : _log(NULL) {}
};

View File

@ -344,12 +344,6 @@ bool ComLiqPerIva_mask::on_field_event(TOperable_field& o, TField_event e, long
real creprec = ZERO; real appcreaprec;
calcolaCreditoPrec(creprec, appcreaprec, mensile, get_int(F_ANNO), get_int(F_MESE));
creaprec = appcreaprec + creaprec;
// Controllo che il credito non sia sforato sotto 0
if (creaprec < ZERO)
{
TString msg = "Attenzione! Capienza del credito dell'anno precedente esaurita di "; msg << (creaprec * - UNO).stringa(0,2) << "";
warning_box(msg);
}
}
real credito = get_real(F_IVADOVC) + get_real(F_CREPREC) + creaprec + get_real(F_VEAUE) + get_real(F_CREIMP) + get_real(F_ACCDOV);

View File

@ -1,70 +1,65 @@
[TFF0100F]
P1_KEYHEADERFATT = CHAR(20)
P1_KEYBODYFATT = CHAR(20)
P1_KEYPRGINVIO = CHAR(10)
P1_TRASMITTPAESE = CHAR(2)
P1_TRASMITTCOD = CHAR(28)
P1_TIPOINVIO = CHAR(4)
P1_FMTTRASMISS = CHAR(5)
P1_CODDEST = CHAR(7)
P1_TELEFONO = CHAR(12)
P1_MAIL = CHAR(256)
P1_GESTIONE = CHAR(1)
P1_CODFISCDICH = CHAR(16)
P1_CODCARICADICH = CHAR(2)
P1_PROTOCOLLO = CHAR(18)
P1_ERRINT = CHAR(1)
P1_ERREST = CHAR(1)
P1_TRASMITTPAESE = CHAR(2)
P1_TRASMITTCOD = CHAR(28)
P1_PRGINVIO = CHAR(10)
P1_FMTTRASMISS = CHAR(5)
P1_CODDEST = CHAR(6)
P1_TELEFONO = CHAR(12)
P1_MAIL = CHAR(256)
P1_GESTIONE = CHAR(1)
P1_ERRINT = CHAR(1)
P1_ERREST = CHAR(1)
INDEX_1 = P1_KEYHEADERFATT,P1_KEYBODYFATT
INDEX_1 = P1_KEYPRGINVIO
[TFF0200F]
P2_KEYHEADERFATT = CHAR(20)
P2_KEYBODYFATT = CHAR(20)
P2_KEYPRGINVIO = CHAR(20)
P2_FISCIVAPAESE = CHAR(2)
P2_FISCIVACOD = CHAR(28)
P2_CODFISCALE = CHAR(16)
P2_ANADENOMIN = CHAR(80)
P2_ANANOME = CHAR(60)
P2_ANACOGNOME = CHAR(60)
P2_ANATITOLO = CHAR(10)
P2_ANACODEORI = CHAR(17)
P2_ALBOPROFESS = CHAR(60)
P2_PROVALBO = CHAR(2)
P2_NRISCRIZALBO = CHAR(60)
P2_DTISCRIZEALBO = DATE
P2_REGFISCALE = CHAR(4)
P2_SEDEIND = CHAR(60)
P2_SEDENRCIVICO = CHAR(8)
P2_SEDECAP = NUMERIC(5, 0)
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_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_ISCRREASOCIOU = CHAR(2)
P2_ISCRREASLIQUID = CHAR(2)
P2_CONTATTITELEF = CHAR(12)
P2_CONTATTIFAX = CHAR(12)
P2_CONTATTIMAIL = CHAR(256)
P2_RIFAMMINISTR = CHAR(20)
P2_GESTIONE = CHAR(1)
P2_ERRINT = CHAR(1)
P2_ERREST = CHAR(1)
P2_FISCIVAPAESE = CHAR(2)
P2_FISCIVACOD = CHAR(28)
P2_CODFISCALE = CHAR(16)
P2_ANADENOMIN = CHAR(80)
P2_ANANOME = CHAR(60)
P2_ANACOGNOME = CHAR(60)
P2_ANATITOLO = CHAR(10)
P2_ANACODEORI = CHAR(17)
P2_ALBOPROFESS = CHAR(60)
P2_PROVALBO = CHAR(2)
P2_NRISCRIZALBO = CHAR(60)
P2_DTISCRIZEALBO = DATE
P2_REGFISCALE = CHAR(4)
P2_SEDEIND = CHAR(60)
P2_SEDENRCIVICO = CHAR(8)
P2_SEDECAP = NUMERIC(5, 0)
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_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_ISCRREASOCIOU = CHAR(2)
P2_ISCRREASLIQUID = CHAR(2)
P2_CONTATTITELEF = CHAR(12)
P2_CONTATTIFAX = CHAR(12)
P2_CONTATTIMAIL = CHAR(256)
P2_RIFAMMINISTR = CHAR(20)
P2_GESTIONE = CHAR(1)
P2_ERRINT = CHAR(1)
P2_ERREST = CHAR(1)
INDEX_1 = P2_KEYHEADERFATT,P2_KEYBODYFATT
INDEX_1 = P2_KEYPRGINVIO
[TFF0300F]
P3_KEYHEADERFATT = CHAR(20)
P3_KEYBODYFATT = CHAR(20)
P3_KEYPRGINVIO = CHAR(10)
P3_FISCIVAPAESE = CHAR(2)
P3_FISCIVACODICE = CHAR(28)
P3_CODFISC = CHAR(16)
@ -73,16 +68,15 @@ 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_KEYHEADERFATT,P3_KEYBODYFATT
INDEX_1 = P3_KEYPRGINVIO
[TFF0400F]
P4_KEYPRGINVIO = CHAR(10)
P4_KEYHEADERFATT = CHAR(20)
P4_KEYBODYFATT = CHAR(20)
P4_FISCIVAPAESE = CHAR(2)
P4_FISCIVACOD = CHAR(28)
P4_CODFISC = CHAR(16)
@ -91,71 +85,68 @@ 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_GESTIONE = CHAR(1)
P4_ERRINT = CHAR(1)
P4_ERREST = CHAR(1)
INDEX_1 = P4_KEYHEADERFATT,P4_KEYBODYFATT
INDEX_1 = P4_KEYPRGINVIO,P4_KEYHEADERFATT
[TFF0700F]
P7_KEYHEADERFATT = CHAR(20)
P7_KEYBODYFATT = CHAR(20)
P7_TIPODOC = CHAR(4)
P7_DIVISA = CHAR(3)
P7_DATA = DATE
P7_NUMERO = CHAR(20)
P7_KEYPRGINVIO = CHAR(10)
P7_KEYHEADERFATT = CHAR(20)
P7_KEYBODYFATT = CHAR(20)
P7_PROGRESSIVO = NUMERIC(7,0)
P7_TIPODOC = CHAR(4)
P7_DIVISA = CHAR(3)
P7_DATA = DATE
P7_NUMERO = CHAR(20)
P7_TIPORITENUTA = CHAR(4)
P7_IMPORTORIT = NUMERIC(15,2)
P7_ALIQUOTARIT = NUMERIC(6,2)
P7_CAUSPAGAM = CHAR(1)
P7_NUMEROBOLLO = CHAR(14)
P7_IMPORTOBOLLO = NUMERIC(15,2)
P7_GESTIONE = CHAR(1)
P7_ERRINT = CHAR(1)
P7_ERREST = CHAR(1)
P7_DATAREG = DATE
P7_NUMEROREG = NUMERIC(20,0)
P7_TIPOREG = CHAR(6)
P7_PROTOCOLLO = CHAR(18)
P7_POSIZIONE = NUMERIC(7,0)
P7_TIPORITENUTA = CHAR(4)
P7_IMPORTORIT = NUMERIC(15, 2)
P7_ALIQUOTARIT = NUMERIC(6, 2)
P7_CAUSPAGAM = CHAR(1)
P7_NUMEROBOLLO = CHAR(14)
P7_IMPORTOBOLLO = NUMERIC(15, 2)
INDEX_1 = P7_KEYPRGINVIO,P7_KEYHEADERFATT,P7_KEYBODYFATT
P7_DATAREG = DATE
P7_NUMEROREG = NUMERIC(20, 0)
P7_TIPOREG = CHAR(6)
P7_PROTOCOLLO = CHAR(18)
P7_POSIZIONE = NUMERIC(4, 0)
P7_GESTIONE = CHAR(1)
P7_ERRINT = CHAR(1)
P7_ERREST = CHAR(1)
INDEX_1 = P7_KEYHEADERFATT,P7_KEYBODYFATT
[TFF2200F]
PL_KEYHEADERFATT = CHAR(20)
PL_KEYBODYFATT = CHAR(20)
PL_KEYPRGINVIO = CHAR(10)
PL_KEYHEADERFATT = CHAR(20)
PL_KEYBODYFATT = CHAR(20)
PL_ALIQUOTAIVA = NUMERIC(6,2)
PL_NATURA = CHAR(2)
PL_SPESEACCESS = NUMERIC(15,2)
PL_ARROTONDAM = NUMERIC(15,2)
PL_IMPONIBILE = NUMERIC(15,2)
PL_IMPOSTA = NUMERIC(15,2)
PL_ESIGIVA = CHAR(1)
PL_RIFNORMATIVO = CHAR(100)
PL_DETRAIBILE = NUMERIC(6, 2)
PD_DEDUCIBILE = CHAR(2)
PL_GESTIONE = CHAR(1)
PL_ERRINT = CHAR(1)
PL_ERREST = CHAR(1)
PL_ALIQUOTAIVA = NUMERIC(6,2)
PL_NATURA = CHAR(2)
PL_SPESEACCESS = NUMERIC(15,2)
PL_ARROTONDAM = NUMERIC(15,2)
PL_IMPONIBILE = NUMERIC(15,2)
PL_IMPOSTA = NUMERIC(15,2)
PL_ESIGIVA = CHAR(1)
PL_RIFNORMATIVO = CHAR(100)
PL_DETRAIBILE = NUMERIC(6, 2)
PD_DEDUCIBILE = CHAR(2)
PL_GESTIONE = CHAR(1)
PL_ERRINT = CHAR(1)
PL_ERREST = CHAR(1)
INDEX_1 = PL_KEYHEADERFATT,PL_KEYBODYFATT
INDEX_1 = PL_KEYPRGINVIO,PL_KEYHEADERFATT,PL_KEYBODYFATT
[TFF3100F]
PH_KEYPRGINVIO = CHAR(10)
PH_KEYHEADERFATT = CHAR(20)
PH_KEYBODYFATT = CHAR(20)
PH_STABORGIND = CHAR(60)
PH_STABORGNRCIVICO = CHAR(8)
PH_STABORGCAP = NUMERIC(5)
@ -171,4 +162,4 @@ PH_GESTIONE = CHAR(1)
PH_ERRINT = CHAR(1)
PH_ERREST = CHAR(1)
INDEX_1 = PH_KEYHEADERFATT,PH_KEYBODYFATT
INDEX_1 = PH_KEYPRGINVIO,PH_KEYHEADERFATT