Patch level : 12.0 740
Files correlati : fp0500, fplib Commento : Aggiunta possibilità di aggiungere nota in piede fattura
This commit is contained in:
parent
6e7d8ab89a
commit
71aad42a8a
@ -23,4 +23,5 @@
|
||||
#define S_TIPORIGA 102
|
||||
#define S_QTA 103
|
||||
#define S_PREZZO 104
|
||||
#define S_IMPONIBILE 105
|
||||
#define S_IMPONIBILE 105
|
||||
#define S_NOTAPF 106
|
@ -99,6 +99,7 @@ BEGIN
|
||||
ITEM "Qta"
|
||||
ITEM "Prezzo"
|
||||
ITEM "Imponibile"
|
||||
ITEM "Nota piede\nFattura@15"
|
||||
END
|
||||
|
||||
|
||||
@ -155,11 +156,11 @@ ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
PAGE "Elementi spredsheet" 0 2 0 0
|
||||
PAGE "Elementi spredsheet" -1 -1 60 12
|
||||
|
||||
STRING S_TIPODOC 4
|
||||
BEGIN
|
||||
PROMPT 15 1 "Tipo doc "
|
||||
PROMPT 1 1 "Tipo doc "
|
||||
HELP "Lasciare libero per tutti i tipo documento"
|
||||
USE %TIP
|
||||
SELECT S3[37,40]!=""
|
||||
@ -173,7 +174,7 @@ END
|
||||
|
||||
STRING S_TIPORIGA 4
|
||||
BEGIN
|
||||
PROMPT 15 1 "Tipo riga "
|
||||
PROMPT 1 2 "Tipo riga "
|
||||
USE %TRI
|
||||
INPUT CODTAB S_TIPORIGA
|
||||
DISPLAY "Codice@10" CODTAB
|
||||
@ -184,12 +185,12 @@ END
|
||||
|
||||
STRING S_QTA 10
|
||||
BEGIN
|
||||
PROMPT 0 2 "Qta"
|
||||
PROMPT 1 3 "Qta"
|
||||
END
|
||||
|
||||
STRING S_PREZZO 10
|
||||
BEGIN
|
||||
PROMPT 0 2 "Prezzo"
|
||||
PROMPT 1 4 "Prezzo"
|
||||
USE %FRR
|
||||
INPUT CODTAB S_PREZZO
|
||||
DISPLAY "Codice@10" CODTAB
|
||||
@ -199,7 +200,7 @@ END
|
||||
|
||||
STRING S_IMPONIBILE 10
|
||||
BEGIN
|
||||
PROMPT 0 2 "Imponibile"
|
||||
PROMPT 1 5 "Imponibile"
|
||||
USE %FRR
|
||||
INPUT CODTAB S_IMPONIBILE
|
||||
DISPLAY "Codice" CODTAB
|
||||
@ -207,6 +208,11 @@ BEGIN
|
||||
OUTPUT S_IMPONIBILE CODTAB
|
||||
END
|
||||
|
||||
MEMO S_NOTAPF 0 0
|
||||
BEGIN
|
||||
PROMPT 1 6 "Nota piede fattura"
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
TOOLBAR "Riga" 0 0 0 2
|
||||
|
@ -361,6 +361,38 @@ public:
|
||||
|
||||
void TMancati_app::main_loop()
|
||||
{
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// TEST PER TDB_recordset
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
TString qq;
|
||||
qq << "CONNECT(localhost@fp_cortelezzi, fp, fp, MSSQL)\n\
|
||||
SELECT PZ_TIPOPROT AS TIPO_PROT, YEAR(P7_DATA) AS ANNO, P7_TIPODOC AS[TIPO_SDI], P7_NUMERO AS[NUM_DOC], P7_DATA AS[DATA_DOC], PQ_IMPTOTDOC AS[TOT_DOC], P2_ANADENOMIN AS[RAG_SOC], P2_ANANOME AS NOME, P2_ANACOGNOME AS COGNOME, P2_FISCIVACOD AS[P_IVA], P2_CODFISCALE AS[COD_FISC], P2_FISCIVAPAESE AS[COD_PAESE],\n\
|
||||
COUNT(PP_ATTACHMENT) AS ATTACHMENT, P1_CODDEST AS[COD_SDI], PU_PEC AS PEC, P1_KEYPRGINVIO AS KEYPROG, P1_KEYHEADERFATT AS KEYHEAD, P1_KEYBODYFATT AS KEYFATT, PZ_TIPOPROT AS[TIPO_PROT], PZ_NUMPROT AS[NUM_PROT], PZ_ANNOPROT AS[ANNO_PROT], PZ_TIPOCF AS[TIPO_CF], PZ_CLIFOR AS[COD_CLIFOR]\n\
|
||||
FROM PAA0100F PAA01\n\
|
||||
JOIN PAA0200F PAA02 ON P1_KEYPRGINVIO = P2_KEYPRGINVIO and P1_KEYHEADERFATT = P2_KEYHEADERFATT and P1_KEYBODYFATT = P2_KEYBODYFATT\n\
|
||||
JOIN PAA0700F PAA07 ON P1_KEYPRGINVIO = P7_KEYPRGINVIO and P1_KEYHEADERFATT = P7_KEYHEADERFATT and P1_KEYBODYFATT = P7_KEYBODYFATT\n\
|
||||
JOIN PAA2700F PAA27 ON P1_KEYPRGINVIO = PQ_KEYPRGINVIO and P1_KEYHEADERFATT = PQ_KEYHEADERFATT and P1_KEYBODYFATT = PQ_KEYBODYFATT\n\
|
||||
LEFT JOIN PAA2600F PAA26 ON P1_KEYPRGINVIO = PP_KEYPRGINVIO and P1_KEYHEADERFATT = PP_KEYHEADERFATT and P1_KEYBODYFATT = PP_KEYBODYFATT\n\
|
||||
LEFT JOIN PAA3200F PAA32 ON P1_KEYPRGINVIO = PU_KEYPRGINVIO and P1_KEYHEADERFATT = PU_KEYHEADERFATT and P1_KEYBODYFATT = PU_KEYBODYFATT\n\
|
||||
LEFT JOIN FPPRO00F FPPRO ON P1_KEYPRGINVIO = PZ_KEYPRGINVIO and P1_KEYHEADERFATT = PZ_KEYHEADERFATT and P1_KEYBODYFATT = PZ_KEYBODYFATT\n\
|
||||
WHERE P7_DATA >= '20190301' AND P7_DATA <= '20190315'\n\
|
||||
GROUP BY YEAR(P7_DATA), P7_TIPODOC, P7_NUMERO, P7_DATA, PQ_IMPTOTDOC, P2_ANADENOMIN, P2_ANANOME, P2_ANACOGNOME, P2_FISCIVACOD, P2_CODFISCALE, P2_FISCIVAPAESE,\n\
|
||||
P1_CODDEST, PU_PEC, P1_KEYPRGINVIO, P1_KEYHEADERFATT, P1_KEYBODYFATT, PZ_TIPOPROT, PZ_NUMPROT, PZ_ANNOPROT, PZ_TIPOCF, PZ_CLIFOR\n\
|
||||
ORDER BY PZ_ANNOPROT DESC, PZ_TIPOPROT ASC, PZ_NUMPROT DESC;";
|
||||
|
||||
TDB_recordset my_rec(qq, true);
|
||||
my_rec.set("SELECT * FROM PAA0100F;");
|
||||
int n = my_rec.items();
|
||||
my_rec.move_to(0);
|
||||
TRecordset_column_info info = my_rec.column_info(1);
|
||||
bool conn = my_rec.is_connected();
|
||||
int col = my_rec.columns();
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
TMancati_mask mask;
|
||||
while (mask.run() == K_ENTER)
|
||||
{
|
||||
|
@ -15,6 +15,47 @@
|
||||
|
||||
#define SQL_FLD "sql/"
|
||||
#define MANCATA_SEND "S" // Se la mail di mancata consegna è già stata inviata P1_ERRINT è segnato con "S"
|
||||
|
||||
// Typedef per aiutare a capire cosa sono le chiavi
|
||||
typedef TString MCodice_riga;
|
||||
typedef TString MTipo_documento;
|
||||
|
||||
// Mannaggia il fruttivendolo
|
||||
class TFP_righe_custom : public TObject
|
||||
{
|
||||
bool _loaded;
|
||||
|
||||
struct TCustCol
|
||||
{
|
||||
TString _col_qta;
|
||||
// Le colonne prezzo e imp non sono lette se di default
|
||||
TString _col_prezzo;
|
||||
TString _col_imponibile;
|
||||
TString _col_nota_piede;
|
||||
};
|
||||
|
||||
// Mappa con in chiave COD_RIGA, TIPO_DOC
|
||||
std::map<MCodice_riga, std::map<MTipo_documento, TCustCol>> _custom_table;
|
||||
|
||||
void load_map();
|
||||
static TCustCol& get_no_custom();
|
||||
TCustCol& get(const TString& codriga, const TString& tipodoc);
|
||||
|
||||
public:
|
||||
|
||||
static void write_ini_npf(TToken_string* r);
|
||||
static TString get_ini_npf(TString codnum, TString tipodoc);
|
||||
static void save_sheet(TSheet_field& sheet_field);
|
||||
static void load_sheet(TSheet_field& sheet_field);
|
||||
|
||||
const TString& get_qta(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_qta; }
|
||||
const TString& get_prezzo(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_prezzo; }
|
||||
const TString& get_imponibile(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_imponibile; }
|
||||
const TString& get_nota_piede(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_nota_piede; }
|
||||
|
||||
TFP_righe_custom();
|
||||
};
|
||||
|
||||
enum { no_pdf = -1, pdf_ok = 0, no_alleg = -2};
|
||||
|
||||
// Ritorna la connessione al DB paf secondo i parametri impostati nel programma di configurazione
|
||||
@ -137,6 +178,7 @@ private:
|
||||
TPaf_container _paf_container;
|
||||
int _count_r_conai;
|
||||
bool _nascondi_sconti_righe_fatt;
|
||||
TFP_righe_custom _righe_custom;
|
||||
|
||||
// Classe interna per gestire righe aggiuntive in riepilogo
|
||||
class TRiepilogo_agg
|
||||
@ -195,7 +237,7 @@ protected:
|
||||
bool add_row_art(long& riga_art, const TString& codice_tipo, const TString& codice_valore, TPaf_record& paf);
|
||||
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
|
||||
const TString& converti_prezzo(const real& prezzo) const;
|
||||
void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const;
|
||||
void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc);
|
||||
void add_ritenuta(const TDocumentoEsteso& doc, const TSpesa_prest& sp, TPaf_record& paf0700f) const;
|
||||
bool add_riepilogo_iva(TPaf_record& paf2200f, const TCodiceIVA& cod_iva, const char* eiva, const real& imponibile = ZERO, const real& imposta = ZERO);
|
||||
bool add_cassa_previdenziale(TRiga_documento& rdoc);
|
||||
@ -246,6 +288,7 @@ public:
|
||||
const bool is_f8() const;
|
||||
const bool get_check_not_block() const;
|
||||
const TString& get_body_mail(int idx = -1) const;
|
||||
const TString& get_npf(const char* codnum, const char* tipodoc, int idx) const;
|
||||
const bool get_no_sconti_fatt() const;
|
||||
|
||||
// Setters
|
||||
@ -264,9 +307,12 @@ public:
|
||||
void set_f8(bool f8) const;
|
||||
void set_check_not_block(bool not_block) const;
|
||||
void set_body_mail(const char* msg, int idx = -1) const;
|
||||
void set_npf(const char * codnum, const char * tipodoc, const char* msg, int idx) const;
|
||||
void set_no_sconti_fatt(const bool no_sconti_fatt) const;
|
||||
|
||||
void remove_para_ini(int idx);
|
||||
void remove_npf_ini(const char* codnum, const char* tipodoc, int idx);
|
||||
void remove_line_npf(const char* codnum, const char* tipodoc, int idx) const;
|
||||
};
|
||||
|
||||
inline TFP_settings& fp_settings()
|
||||
@ -296,42 +342,6 @@ public:
|
||||
TFP_selected_docs();
|
||||
};
|
||||
|
||||
// Typedef per aiutare a capire cosa sono le chiavi
|
||||
typedef TString MCodice_riga;
|
||||
typedef TString MTipo_documento;
|
||||
|
||||
// Mannaggia il fruttivendolo
|
||||
class TFP_righe_custom : public TObject
|
||||
{
|
||||
bool _loaded;
|
||||
|
||||
struct TCustCol
|
||||
{
|
||||
TString _col_qta;
|
||||
// Le colonne prezzo e imp non sono lette se di default
|
||||
TString _col_prezzo;
|
||||
TString _col_imponibile;
|
||||
};
|
||||
|
||||
// Mappa con in chiave COD_RIGA, TIPO_DOC
|
||||
std::map<MCodice_riga, std::map<MTipo_documento, TCustCol>> _custom_table;
|
||||
|
||||
void load_map();
|
||||
static TCustCol& get_no_custom();
|
||||
TCustCol& get(const TString& codriga, const TString& tipodoc);
|
||||
|
||||
public:
|
||||
|
||||
static void save_sheet(TSheet_field& sheet_field);
|
||||
static void load_sheet(TSheet_field& sheet_field);
|
||||
|
||||
const TString& get_qta(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_qta; }
|
||||
const TString& get_prezzo(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_prezzo; }
|
||||
const TString& get_imponibile(const TString& codriga, const TString& tipodoc) { return get(codriga, tipodoc)._col_imponibile; }
|
||||
|
||||
TFP_righe_custom();
|
||||
};
|
||||
|
||||
class TFp_mail_sender
|
||||
{
|
||||
int _anno;
|
||||
|
@ -1161,16 +1161,14 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
|
||||
ret << prezzo;
|
||||
return ret;
|
||||
}
|
||||
void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const
|
||||
void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc)
|
||||
{
|
||||
// Setto l'unità di misura
|
||||
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
|
||||
|
||||
static TFP_righe_custom righe_custom;
|
||||
|
||||
const TString& field_qta = righe_custom.get_qta(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
const TString& field_prezzo = righe_custom.get_prezzo(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
const TString& field_imponibile = righe_custom.get_imponibile(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
const TString& field_qta = _righe_custom.get_qta(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
const TString& field_prezzo = _righe_custom.get_prezzo(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
const TString& field_imponibile = _righe_custom.get_imponibile(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
|
||||
const bool custom_prezzo = field_prezzo.full();
|
||||
|
||||
@ -2014,6 +2012,22 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
|
||||
}
|
||||
}
|
||||
|
||||
const TString& nota_piede_fatt = _righe_custom.get_nota_piede(rdoc->tipo().codice(), rdoc->doc().tipo().codice());
|
||||
if(nota_piede_fatt.full())
|
||||
{
|
||||
reset(paf1800f);
|
||||
paf1800f.set("PI_NUMEROLINEA", riga);
|
||||
reset(paf3000f);
|
||||
paf3000f.set("PT_RIFNUMLINEA", riga);
|
||||
paf3000f.set("PT_COMMENTO", nota_piede_fatt.left(900));
|
||||
paf1800f.set("PI_QUANTITA", UNO);
|
||||
paf1800f.set("PI_PREZZOUNIT", ZERO);
|
||||
paf1800f.set("PI_PRZTOTALE", ZERO);
|
||||
set_IVA(_codivadefault, paf1800f);
|
||||
ok &= insert(paf1800f) && insert(paf3000f);
|
||||
riga++;
|
||||
}
|
||||
|
||||
// </DatiBeniServizi>
|
||||
// <DatiDDT>
|
||||
// Metto qua i dati DDT per capire se la fattura è accompagnatoria o deriva da bolla
|
||||
|
@ -21,6 +21,7 @@
|
||||
#define FP_F8 "f8"
|
||||
#define FP_CHECK_NOT_BLOCK "checknotblock"
|
||||
#define FP_MAIL "mail"
|
||||
#define FP_NOTA_PIEDE_F "npf" // Nota piede fattura
|
||||
#define FP_CHECK_NO_SCONTI_FATT "noscontifatt"
|
||||
|
||||
// Sheet fp0300
|
||||
@ -125,6 +126,12 @@ const TString& TFP_settings::get_body_mail(int idx) const
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, "STOpsTOP", idx);
|
||||
}
|
||||
|
||||
const TString& TFP_settings::get_npf(const char * codnum, const char * tipodoc, int idx) const
|
||||
{
|
||||
TString name; name << FP_NOTA_PIEDE_F << "_" << codnum << "-" << tipodoc;
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, name, "FERMATIostrega", idx);
|
||||
}
|
||||
|
||||
const bool TFP_settings::get_no_sconti_fatt() const
|
||||
{
|
||||
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, false);
|
||||
@ -205,6 +212,13 @@ void TFP_settings::set_body_mail(const char* msg, int idx) const
|
||||
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_MAIL, msg, idx);
|
||||
}
|
||||
|
||||
// Set nota piede fattura
|
||||
void TFP_settings::set_npf(const char * codnum, const char * tipodoc, const char* msg, int idx) const
|
||||
{
|
||||
TString name; name << FP_NOTA_PIEDE_F << "_" << codnum << "-" << tipodoc;
|
||||
ini_set_string(FILE_CONFIG, FILE_SECTION, name, msg, idx);
|
||||
}
|
||||
|
||||
void TFP_settings::set_no_sconti_fatt(const bool no_sconti_fatt) const
|
||||
{
|
||||
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_CHECK_NO_SCONTI_FATT, no_sconti_fatt);
|
||||
@ -215,6 +229,19 @@ void TFP_settings::remove_para_ini(int idx)
|
||||
ini_remove(FILE_CONFIG, FILE_SECTION, FP_MAIL, idx);
|
||||
}
|
||||
|
||||
void TFP_settings::remove_npf_ini(const char * codnum, const char * tipodoc, int idx)
|
||||
{
|
||||
TString name; name << FP_NOTA_PIEDE_F << "_" << codnum << "-" << tipodoc;
|
||||
ini_remove(FILE_CONFIG, FILE_SECTION, name, idx);
|
||||
}
|
||||
|
||||
// Rimuove linea ini in eccesso per nota piede fattura
|
||||
void TFP_settings::remove_line_npf(const char * codnum, const char * tipodoc, int idx) const
|
||||
{
|
||||
TString name; name << FP_NOTA_PIEDE_F << "_" << codnum << "-" << tipodoc;
|
||||
ini_remove(FILE_CONFIG, FILE_SECTION, name, idx);
|
||||
}
|
||||
|
||||
TRectype TFP_selected_docs::fill_rectype() const
|
||||
{
|
||||
TRectype r(LF_TABMOD);
|
||||
@ -307,6 +334,44 @@ TFP_righe_custom::TCustCol& TFP_righe_custom::get(const TString& codriga, const
|
||||
return get_no_custom();
|
||||
}
|
||||
|
||||
void TFP_righe_custom::write_ini_npf(TToken_string* r)
|
||||
{
|
||||
// Prendo memo di ogni riga e la suddivido per gli a capo
|
||||
TToken_string msg(r->get(5), '\n');
|
||||
/* Vado a salvare in un config .ini tipo-riga/tipo-doc/messaggio su piu righe */
|
||||
int indx = 0;
|
||||
TString codnum, tipodoc; codnum << r->get(1); tipodoc << r->get(0);
|
||||
|
||||
// Conto quanti ne avevo salvati prima nel file ini per poi controllare
|
||||
// che non sto salvando meno di quelli che ci sono già
|
||||
int previous_indx = 0;
|
||||
for (TString row = fp_settings().get_npf(codnum, tipodoc, previous_indx); row != "FERMATIostrega"; row = fp_settings().get_npf(codnum, tipodoc, previous_indx))
|
||||
previous_indx++;
|
||||
// Vado a salvare ogni riga nel file ini
|
||||
for (const char* row = msg.get(); row; row = msg.get())
|
||||
fp_settings().set_npf(codnum, tipodoc, row, indx++);
|
||||
|
||||
if (indx < previous_indx)
|
||||
{
|
||||
for (int i = indx; i < previous_indx; i++)
|
||||
fp_settings().remove_npf_ini(codnum, tipodoc, indx);
|
||||
}
|
||||
}
|
||||
|
||||
TString TFP_righe_custom::get_ini_npf(TString codnum, TString tipodoc)
|
||||
{
|
||||
TString msg; msg.cut(0);
|
||||
|
||||
int indx = 0;
|
||||
for (TString row = fp_settings().get_npf(codnum, tipodoc, indx); row != "FERMATIostrega"; row = fp_settings().get_npf(codnum, tipodoc, indx))
|
||||
{
|
||||
if(indx++ > 0)
|
||||
msg << '\n';
|
||||
msg << row;
|
||||
}
|
||||
return msg;
|
||||
}
|
||||
|
||||
void TFP_righe_custom::load_map()
|
||||
{
|
||||
TRelation rel(LF_TABMOD);
|
||||
@ -321,6 +386,7 @@ void TFP_righe_custom::load_map()
|
||||
app._col_qta = rec.get(FP_SHT_COL_QTA).full() ? rec.get(FP_SHT_COL_QTA) : FP_SHT_DEF_QTA;
|
||||
app._col_prezzo = rec.get(FP_SHT_COL_PREZZO).full() ? rec.get(FP_SHT_COL_PREZZO) : FP_SHT_DEF_PREZZO;
|
||||
app._col_imponibile = rec.get(FP_SHT_COL_IMPONIBILE).full() ? rec.get(FP_SHT_COL_IMPONIBILE) : FP_SHT_DEF_IMPONIBILE;
|
||||
app._col_nota_piede = rec.get(FP_NOTA_PIEDE_F);
|
||||
}
|
||||
|
||||
_loaded = true;
|
||||
@ -362,6 +428,8 @@ void TFP_righe_custom::save_sheet(TSheet_field& sheet_field)
|
||||
rec.put(FP_SHT_COL_IMPONIBILE, r->get());
|
||||
|
||||
rec.write(tabmod);
|
||||
|
||||
write_ini_npf(r);
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,6 +449,7 @@ void TFP_righe_custom::load_sheet(TSheet_field& sheet_field)
|
||||
row.add(cur_rec.get(FP_SHT_COL_QTA));
|
||||
row.add(cur_rec.get(FP_SHT_COL_PREZZO));
|
||||
row.add(cur_rec.get(FP_SHT_COL_IMPONIBILE));
|
||||
row.add(get_ini_npf(cur_rec.get(FP_SHT_TIPORIGA), cur_rec.get(FP_SHT_TIPODOC)));
|
||||
}
|
||||
sheet_field.force_update();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user