Merge branch 'R12.00.1136' of http://10.65.20.33/sirio/CAMPO/campo into R12.00.1136
This commit is contained in:
commit
890394ea0a
3
cd/test/ba1140.txt
Normal file
3
cd/test/ba1140.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ba8.exe
|
||||
|
||||
L'esecuzione delle query non mostrava più la maschera di selezione
|
31
cd/test/ba1140a.ini
Normal file
31
cd/test/ba1140a.ini
Normal file
@ -0,0 +1,31 @@
|
||||
[Main]
|
||||
Demo=0
|
||||
|
||||
[ba8]
|
||||
File(510) = ba8.exe|X
|
||||
Patch = 1140
|
||||
Versione = 21511200
|
||||
|
||||
[ba99]
|
||||
Kill(0) = batbsce.txt|x
|
||||
Kill(1) = wxmsw240.dll|x
|
||||
Kill(2) = bastcms.rep|x
|
||||
Kill(3) = bastcms.msk|x
|
||||
Kill(4) = bastfsc.msk|x
|
||||
Kill(5) = bastfsc.rep|x
|
||||
Kill(6) = bastuue.msk|x
|
||||
Kill(7) = bastuue.rep|x
|
||||
|
||||
[ba]
|
||||
Data = 11-04-2022
|
||||
Descrizione = Base
|
||||
Dischi = 1
|
||||
Moduli = sy
|
||||
OEM =
|
||||
Patch = 1140
|
||||
PostProcess = bainst -0 BA
|
||||
PreProcess =
|
||||
Prezzo(1) =
|
||||
Prezzo(2) =
|
||||
Versione = 21511200
|
||||
|
BIN
cd/test/ba1140a1.zip
Normal file
BIN
cd/test/ba1140a1.zip
Normal file
Binary file not shown.
5
cd/test/cg1140.txt
Normal file
5
cd/test/cg1140.txt
Normal file
@ -0,0 +1,5 @@
|
||||
cg2100c.msk
|
||||
cg2100t.msk
|
||||
cg2.exe
|
||||
|
||||
Nelle fatture intra l'identificativo SDI viene recuperato da FPPRO e scritto sulla fattura di acquisto e sulla regolarizzazione
|
100
cd/test/cg1140a.ini
Normal file
100
cd/test/cg1140a.ini
Normal file
@ -0,0 +1,100 @@
|
||||
[Main]
|
||||
Demo=0
|
||||
|
||||
[cg2]
|
||||
File(51) = cg2.exe|X
|
||||
File(54) = cg2100c.msk|X
|
||||
File(62) = cg2100t.msk|X
|
||||
Patch = 1140
|
||||
Versione = 21511200
|
||||
|
||||
[cg99]
|
||||
Kill(0) = bastesc.rep|x
|
||||
Kill(1) = bastcam.msk|x
|
||||
Kill(2) = bastivd.msk|x
|
||||
Kill(3) = bastscc.rep|x
|
||||
Kill(4) = bastcam.rep|x
|
||||
Kill(5) = batbcve.msk|x
|
||||
Kill(6) = batbndo.msk|x
|
||||
Kill(7) = bastmsp.msk|x
|
||||
Kill(8) = bastivd.rep|x
|
||||
Kill(9) = bastarb.msk|x
|
||||
Kill(10) = batbdel.msk|x
|
||||
Kill(11) = cgtbcon.msk|x
|
||||
Kill(12) = bastzon.msk|x
|
||||
Kill(13) = bastcco.msk|x
|
||||
Kill(14) = bastleg.msk|x
|
||||
Kill(15) = bastreg.rep|x
|
||||
Kill(16) = batbleg.msk|x
|
||||
Kill(17) = cg2fppro.msk|x
|
||||
Kill(18) = bastpdb.rep|x
|
||||
Kill(19) = bastdpn.rep|x
|
||||
Kill(20) = batbind.msk|x
|
||||
Kill(21) = bastzon.rep|x
|
||||
Kill(22) = bastesc.msk|x
|
||||
Kill(23) = batbzon.msk|x
|
||||
Kill(24) = bastpdb.msk|x
|
||||
Kill(25) = batbpdb.msk|x
|
||||
Kill(26) = batbreg.msk|x
|
||||
Kill(27) = batbarb.msk|x
|
||||
Kill(28) = batbnot.msk|x
|
||||
Kill(29) = bastarb.rep|x
|
||||
Kill(30) = bastvet.msk|x
|
||||
Kill(31) = batblbu.msk|x
|
||||
Kill(32) = batbinl.msk|x
|
||||
Kill(33) = bastpor.msk|x
|
||||
Kill(34) = batbdpn.msk|x
|
||||
Kill(35) = bastpor.rep|x
|
||||
Kill(36) = bastndo.rep|x
|
||||
Kill(37) = bastcfi.rep|x
|
||||
Kill(38) = bastcve.rep|x
|
||||
Kill(39) = bastver.rep|x
|
||||
Kill(40) = bastcco.rep|x
|
||||
Kill(41) = bastntb.msk|x
|
||||
Kill(42) = bastleg.rep|x
|
||||
Kill(43) = batbcam.msk|x
|
||||
Kill(44) = batbivd.msk|x
|
||||
Kill(45) = bastnot.msk|x
|
||||
Kill(46) = batblia.msk|x
|
||||
Kill(47) = batbcco.msk|x
|
||||
Kill(48) = bastreg.msk|x
|
||||
Kill(49) = bastndo.msk|x
|
||||
Kill(50) = bastscc.msk|x
|
||||
Kill(51) = batbmsp.msk|x
|
||||
Kill(52) = bastvet.rep|x
|
||||
Kill(53) = batbntb.msk|x
|
||||
Kill(54) = batbtit.msk|x
|
||||
Kill(55) = batbesc.msk|x
|
||||
Kill(56) = bastntb.rep|x
|
||||
Kill(57) = bastver.msk|x
|
||||
Kill(58) = batblia.msk|x
|
||||
Kill(59) = bastmsp.rep|x
|
||||
Kill(60) = batbpor.msk|x
|
||||
Kill(61) = bastcfi.msk|x
|
||||
Kill(62) = batbscc.msk|x
|
||||
Kill(63) = batbins.msk|x
|
||||
Kill(64) = bastdpn.msk|x
|
||||
Kill(65) = bastnot.rep|x
|
||||
Kill(66) = batbver.msk|x
|
||||
Kill(67) = bastcve.msk|x
|
||||
Kill(68) = batbvet.msk|x
|
||||
Kill(69) = batbtra.msk|x
|
||||
Kill(70) = batbcfi.msk|x
|
||||
|
||||
[cg]
|
||||
Data = 21-04-2022
|
||||
Descrizione = Contabilita' Generale
|
||||
Dischi = 1
|
||||
Edit_19 = cg0 -0
|
||||
Edit_20 = cg0 -1
|
||||
Edit_26 = cg0 -4
|
||||
Edit_5 = cg0 -5
|
||||
Moduli = ba
|
||||
OEM =
|
||||
Patch = 1140
|
||||
PostProcess = bainst -0 CG
|
||||
PreProcess =
|
||||
Prezzo(1) =
|
||||
Prezzo(2) =
|
||||
Versione = 21511200
|
||||
|
BIN
cd/test/cg1140a1.zip
Normal file
BIN
cd/test/cg1140a1.zip
Normal file
Binary file not shown.
3
cd/test/ci1140.txt
Normal file
3
cd/test/ci1140.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ci1.exe
|
||||
|
||||
Corretta indicazione ore di assenza
|
21
cd/test/ci1140a.ini
Normal file
21
cd/test/ci1140a.ini
Normal file
@ -0,0 +1,21 @@
|
||||
[Main]
|
||||
Demo=0
|
||||
|
||||
[ci1]
|
||||
File(7) = ci1.exe|X
|
||||
Patch = 1140
|
||||
Versione = 21511200
|
||||
|
||||
[ci]
|
||||
Data = 03-05-2022
|
||||
Descrizione = Contabilita' Industriale
|
||||
Dischi = 1
|
||||
Moduli = ve
|
||||
OEM =
|
||||
Patch = 1140
|
||||
PostProcess =
|
||||
PreProcess =
|
||||
Prezzo(1) =
|
||||
Prezzo(2) =
|
||||
Versione = 21511200
|
||||
|
BIN
cd/test/ci1140a1.zip
Normal file
BIN
cd/test/ci1140a1.zip
Normal file
Binary file not shown.
@ -1,6 +1,9 @@
|
||||
lv0600a.rep
|
||||
lv3.exe
|
||||
lv0.exe
|
||||
verig21.ini
|
||||
verig23.ini
|
||||
verig24.ini
|
||||
|
||||
Rifatta patch lv3 a seguito di una segnalazione del cliente "Servizi&Lavoro" sul mal funzionamento del programma "Buoni di Consegna" (lv3 - 0).
|
||||
In pratica i valori di "Ritiro" "Consegna" "Dotazione" restitiuivano risultati sballati.
|
||||
|
@ -5,6 +5,9 @@ Demo=0
|
||||
Edit_168 = lv0 -3
|
||||
File(0) = lv0.exe|X
|
||||
File(29) = lv0600a.rep|X
|
||||
File(104) = verig21.ini|X
|
||||
File(106) = verig22.ini|X
|
||||
File(108) = verig24.ini|X
|
||||
Patch = 1138
|
||||
Versione = 21511200
|
||||
|
||||
|
Binary file not shown.
@ -1486,7 +1486,7 @@ bool TSQL_recordset_app::create()
|
||||
{
|
||||
if (!has_module(RSAUT))
|
||||
return error_box(TR("Modulo non autorizzato"));
|
||||
|
||||
xvt_vobj_show(TASK_WIN);
|
||||
_msk = new TQuery_mask;
|
||||
xvt_sys_sleep(500); // Lasciamo il tempo di leggere il titolo
|
||||
|
||||
|
@ -50,6 +50,8 @@ public:
|
||||
TString4 _causale_originale;
|
||||
TipoIVA _iva_originale;
|
||||
TString_array _iva;
|
||||
TString _idsdi;
|
||||
TDate _datasdi;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -59,7 +61,7 @@ public:
|
||||
TPrimanota_application::TPrimanota_application()
|
||||
: _rel(nullptr), _mode(0), _iva(nessuna_iva), _causale(nullptr), _giornale(nullptr),
|
||||
_lastreg(0), _last_dreg(TODAY), _last_dcom(TODAY), _automatico(nullptr), _swap_mask(false), _is_set_fpcheck(false), _f1_ini(false), _f1_liq(false),
|
||||
_skip_giornale_check(false), _skip_bollato_check(false)
|
||||
_skip_giornale_check(false), _skip_bollato_check(false), _pro_mask(nullptr)
|
||||
{
|
||||
memset(_msk, 0, sizeof(_msk));
|
||||
}
|
||||
@ -439,7 +441,7 @@ bool TPrimanota_application::read_caus(const char* cod, int year)
|
||||
}
|
||||
|
||||
const char sezione = rcaus->get_char(RCA_SEZIONE);
|
||||
const TImporto zero('D', ZERO);
|
||||
TImporto zero('D', ZERO);
|
||||
const TString80 desc(causale().desc_agg(i));
|
||||
|
||||
if (nriga == 1) m->set(F_DESCR, desc);
|
||||
@ -697,7 +699,7 @@ void TPrimanota_application::init_mask(TMask& m)
|
||||
_sal_dirty = false; // Azzero il flag di modifica del saldaconto
|
||||
fill_sheet(m); // Riempe righe contabili coi conti della causale
|
||||
m.hide(F_LINKDOC);
|
||||
set_has_f1_db(&m);
|
||||
has_f1_db(m);
|
||||
}
|
||||
|
||||
void TPrimanota_application::init_query_mode(TMask& m)
|
||||
@ -736,7 +738,7 @@ void TPrimanota_application::init_query_mode(TMask& m)
|
||||
m.set(F_CODCAUS, ini.get(MOV_CODCAUS));
|
||||
m.send_key(K_SPACE, DLG_NEWREC);
|
||||
}
|
||||
set_has_f1_db(&m);
|
||||
has_f1_db(m);
|
||||
}
|
||||
|
||||
|
||||
@ -995,17 +997,19 @@ void TPrimanota_application::init_insert_mode(TMask& m)
|
||||
m.enable(F_BOLLACODCLI, causale().tipo_doc() == "BD");
|
||||
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
||||
}
|
||||
if (iva() != nessuna_iva)
|
||||
f1_init(m, m.get_date(F_DATAREG) >= get_data_start_fatt());
|
||||
}
|
||||
|
||||
void TPrimanota_application::f1_init_modify(TMask& m, const TRectype& mov)
|
||||
void TPrimanota_application::f1_init(TMask& m, const bool fe_enabled, const bool f1_linked)
|
||||
{
|
||||
const bool after_data_inizio_fe = mov.get_date(MOV_DATADOC) >= get_data_start_fatt();
|
||||
const bool reverse_charge = app().causale().reverse_charge_pubb();
|
||||
|
||||
m.field(F_IDDOCSDI).show(after_data_inizio_fe);
|
||||
m.field(F_DATADOCSDI).show(after_data_inizio_fe);
|
||||
m.field(F_COLFPPRO).show(after_data_inizio_fe);
|
||||
m.field(DLG_LINK).enable(after_data_inizio_fe);
|
||||
m.set(F_COLFPPRO, !after_data_inizio_fe || mov.get(MOV_KEYFPPRO).empty() ? " " : "X");
|
||||
m.field(F_IDDOCSDI).show(fe_enabled && reverse_charge);
|
||||
m.field(F_DATADOCSDI).show(fe_enabled && reverse_charge);
|
||||
m.field(F_COLFPPRO).show(fe_enabled);
|
||||
m.field(DLG_LINK).enable(fe_enabled);
|
||||
m.set(F_COLFPPRO, fe_enabled && f1_linked, 0x3);
|
||||
}
|
||||
|
||||
void TPrimanota_application::init_modify_mode(TMask& m)
|
||||
@ -1116,7 +1120,7 @@ void TPrimanota_application::init_modify_mode(TMask& m)
|
||||
m.enable(F_BOLLARAGCLI, causale().tipo_doc() == "BD");
|
||||
}
|
||||
if (iva() != nessuna_iva)
|
||||
f1_init_modify(m, mov);
|
||||
f1_init(m, mov.get_date(MOV_DATADOC) >= get_data_start_fatt(), mov.get(MOV_KEYFPPRO).full());
|
||||
}
|
||||
|
||||
// Controlla sulla causale se il segno del totale documento (ritsoc=false)
|
||||
@ -1488,18 +1492,14 @@ void TPrimanota_application::check_saldi()
|
||||
|
||||
void TPrimanota_application::write_fppro()
|
||||
{
|
||||
#ifdef DBG
|
||||
if (!ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
|
||||
if (main_app().has_module(FPAUT) && !ini_get_bool(CONFIG_INSTALL, "Main", "SkipFPPRO"))
|
||||
{
|
||||
#endif
|
||||
// Controllo se la registrazione ha avuto effetto anche su FPPRO allora salvo riferimento sul mov
|
||||
if (save_fppro() > 0 && !save_dbmov())
|
||||
message_box(
|
||||
"ATTENZIONE: non e' stato possibile salvare i riferimenti del documento in ingresso per questo movimento.\n"
|
||||
"Movimento registrato senza collegamento ai documenti in ingresso.");
|
||||
#ifdef DBG
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool TPrimanota_application::has_tot_doc(TToken_string& fppro_keys)
|
||||
@ -1556,7 +1556,7 @@ void TPrimanota_application::set_movcoll(const long movcoll, const long numreg)
|
||||
}
|
||||
int TPrimanota_application::controlli_f1(const TMask& m)
|
||||
{
|
||||
if (m.find_by_id(F_PROKEY) != nullptr && m.get(F_PROKEY).full() && has_f1_db((TMask*)&m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
|
||||
if (iva_mask(m) && m.get(F_PROKEY).full() && has_f1_db(m) && fp_db().sq_is_connect() && check_causale(m.get(F_CODCAUS)))
|
||||
{
|
||||
TToken_string keys(m.get(F_PROKEY), ';');
|
||||
const TDate dataoraric = fppro_db().set_keys(keys).get_dataorarioric();
|
||||
@ -1717,10 +1717,19 @@ int TPrimanota_application::rewrite(const TMask& m)
|
||||
|
||||
if (caus.reverse_charge_pubb())
|
||||
{
|
||||
const long movcoll = m.get_long(F_MOVCOLL);
|
||||
long movcoll = m.get_long(F_MOVCOLL);
|
||||
|
||||
if (movcoll == 0L)
|
||||
find_movcoll(_rel->file().get_long(MOV_NUMREG));
|
||||
movcoll = m.get_long(F_MOVCOLL);
|
||||
if (movcoll > 0L)
|
||||
{
|
||||
TRectype & reccoll = (TRectype &) cache().get(LF_MOV, movcoll);
|
||||
|
||||
reccoll.put(MOV_IDDOCSDI, m.get(F_IDDOCSDI));
|
||||
reccoll.put(MOV_DATADOCSDI, m.get(F_DATADOCSDI));
|
||||
reccoll.rewrite();
|
||||
}
|
||||
}
|
||||
mask2rel(m);
|
||||
|
||||
@ -1788,7 +1797,7 @@ void TPrimanota_application::clean_fppro()
|
||||
|
||||
// Controlli: solo in mod modifica; che abbia fp-f1 (no F8); che non sono in salvataggio
|
||||
if (_mode != MODE_MOD
|
||||
|| !has_f1_db(&msk)
|
||||
|| !has_f1_db(msk)
|
||||
|| last_key != K_DEL && last_key != K_SAVE && last_key != K_ELIMMAS && last_key != K_QUIT && !scollega())
|
||||
return;
|
||||
|
||||
@ -1803,27 +1812,17 @@ void TPrimanota_application::clean_fppro()
|
||||
fp_db().sq_commit();
|
||||
}
|
||||
|
||||
void TPrimanota_application::set_has_f1_db(TMask* m)
|
||||
bool TPrimanota_application::has_f1() const
|
||||
{
|
||||
if (m->find_by_id(F_DATAREG) != nullptr && !m->get(F_DATAREG).empty())
|
||||
{
|
||||
if (TDate(m->get(F_DATAREG)) >= TDate(get_data_start_fatt()))
|
||||
_isf1 = has_module(F1AUT) && !get_db_indirizzo().empty();
|
||||
else
|
||||
_isf1 = false;
|
||||
_is_set_fpcheck = true;
|
||||
}
|
||||
else if (!_is_set_fpcheck)
|
||||
{
|
||||
_isf1 = false;
|
||||
_is_set_fpcheck = true;
|
||||
}
|
||||
return has_module(F1AUT) && get_db_indirizzo().full();
|
||||
}
|
||||
|
||||
bool TPrimanota_application::has_f1_db(TMask* m)
|
||||
bool TPrimanota_application::has_f1_db(const TMask & m)
|
||||
{
|
||||
set_has_f1_db(m);
|
||||
return _isf1;
|
||||
const TDate datareg = m.get_date(F_DATAREG);
|
||||
|
||||
_is_set_fpcheck = true;
|
||||
return datareg.ok() && (datareg >= get_data_start_fatt()) && has_f1();
|
||||
}
|
||||
|
||||
bool TPrimanota_application::remove()
|
||||
@ -1892,6 +1891,8 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm)
|
||||
_automatico->_movcoll = m.get_long(F_NUMREG);
|
||||
_automatico->_iva.destroy();
|
||||
_automatico->_totale = ZERO;
|
||||
_automatico->_idsdi = m.get(F_IDDOCSDI);
|
||||
_automatico->_datasdi = m.get(F_DATADOCSDI);
|
||||
for (int i = 0; i < items; i++)
|
||||
{
|
||||
TToken_string row = iva.row(i);
|
||||
@ -1979,6 +1980,9 @@ void TPrimanota_application::genera_automatico(int tipo, const char* causimm)
|
||||
const TString& clnt = cache().get(LF_CLIFO, forn, CLI_CODCFASS);
|
||||
m.set(F_CODCLIFOR, clnt);
|
||||
}
|
||||
m.set(F_IDDOCSDI, _automatico->_idsdi);
|
||||
m.set(F_DATADOCSDI, _automatico->_datasdi);
|
||||
|
||||
TSheet_field & iva = m.sfield(F_SHEETIVA);
|
||||
const int items = _automatico->_iva.items();
|
||||
|
||||
@ -2672,7 +2676,7 @@ int TPrimanota_application::save_fppro()
|
||||
TMask& msk = curr_mask();
|
||||
|
||||
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
||||
if (!has_f1_db(&msk))
|
||||
if (!has_f1_db(msk))
|
||||
return pro_nofp;
|
||||
|
||||
// Anzitutto guardo la modalita' in cui sono
|
||||
@ -2737,7 +2741,7 @@ int TPrimanota_application::save_fppro()
|
||||
items = fp_db().sq_items();
|
||||
}
|
||||
|
||||
if(has_f1_db(&msk) && items != 1)
|
||||
if(has_f1_db(msk) && items != 1)
|
||||
{
|
||||
const bool forza = noyes_box("Attenzione, al movimento non e' stato abbinato nessun documento elettronico.\n"
|
||||
"Per consentire una corretta archiviazione sostitutiva si consiglia di provvedere al controllo della registrazione e di procedere\n"
|
||||
@ -2851,6 +2855,7 @@ bool TPrimanota_application::link_intra(const TMask& m, const char* action)
|
||||
|
||||
const BOOLEAN bModify = xvt_str_same(action, "Modify");
|
||||
|
||||
|
||||
TFilename intrini;
|
||||
intrini.tempdir();
|
||||
intrini.add("ActIntra.ini");
|
||||
|
@ -91,11 +91,11 @@
|
||||
#define F_REVCHARGE 184
|
||||
#define F_MOVCOLL 185
|
||||
#define F_GOCOLL 186
|
||||
#define F_IDDOCSDI 187
|
||||
#define F_DATADOCSDI 188
|
||||
#define F_IDDOCSDI 187
|
||||
#define F_DATADOCSDI 188
|
||||
|
||||
#define F_SHEETCG 190
|
||||
#define F_SHEETIVA 191
|
||||
#define F_SHEETIVA 191
|
||||
|
||||
|
||||
// Sheet contabile
|
||||
|
@ -569,7 +569,7 @@ END
|
||||
|
||||
STRING F_PROKEY 80
|
||||
BEGIN
|
||||
PROMPT 1 19 "db key"
|
||||
PROMPT 1 26 "DB key"
|
||||
HELP "Chiave database"
|
||||
FIELD KEYFPPRO
|
||||
FLAGS "H"
|
||||
|
@ -13,12 +13,14 @@ BEGIN
|
||||
PROMPT 2 1 "Contabilizzaz."
|
||||
PICTURE TOOL_EXPORT
|
||||
MODULE F1
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_LINK 2 2
|
||||
BEGIN
|
||||
PROMPT 3 1 "Collega in Prima nota"
|
||||
PICTURE TOOL_LINK
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_QUIT 2 2
|
||||
|
@ -219,7 +219,10 @@ TSheet_field& TPrimanota_application::cgs() const
|
||||
void TPrimanota_application::set_cgs_imp(int n, const TImporto& imp)
|
||||
{
|
||||
TSheet_field& s = cgs();
|
||||
imp.add_to(s.row(n), 0);
|
||||
TImporto i(imp);
|
||||
|
||||
i.normalize();
|
||||
i.add_to(s.row(n), 0);
|
||||
s.force_update(n);
|
||||
}
|
||||
|
||||
@ -371,7 +374,7 @@ void TPrimanota_application::reset_sheet_row(TSheet_field& s, int n)
|
||||
s.destroy(n); // Remove line n
|
||||
}
|
||||
|
||||
int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
|
||||
int TPrimanota_application::set_cgs_row(int n, TImporto& importo,
|
||||
const TBill& conto, const char* desc,
|
||||
char tipo, const char* cms, const char* fas)
|
||||
{
|
||||
@ -380,7 +383,8 @@ int TPrimanota_application::set_cgs_row(int n, const TImporto& imp,
|
||||
TToken_string& row = cg.row(n);
|
||||
|
||||
row.cut(0);
|
||||
imp.add_to(row, 0);
|
||||
importo.normalize();
|
||||
importo.add_to(row, 0);
|
||||
row.add(conto.string(0x3));
|
||||
row.add(""); // Codice decrizione
|
||||
row.add(desc); // Descrizione aggiuntiva
|
||||
@ -1536,7 +1540,7 @@ void TPrimanota_application::add2cg_row(TSheet_field& s, TToken_string & row, TS
|
||||
{
|
||||
const TBill conto(row, cid2index(IVA_TIPO), 0x1);
|
||||
const int pos = bill2pos(conto, cgrowtype_imponibile); // Riga in cui andra' l'imponibile
|
||||
const TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile
|
||||
TImporto imp = a.real2imp(d > 0 ? imp_det : imp_ind, tipod); // Imponibile
|
||||
|
||||
if (pos >= 0) // Se il conto esisteva anche prima ...
|
||||
{
|
||||
@ -1761,7 +1765,7 @@ bool TPrimanota_application::iva_notify(TSheet_field& s, int r, KEY k)
|
||||
real pimponibile(pag.imponibile(inv));
|
||||
|
||||
pimponibile.round(pag.round(inv));
|
||||
if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
||||
if ((pimposta != imposta || pimponibile != imponibile) && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||
a.set_scadenze(m); // Ricalcola rate
|
||||
}
|
||||
}
|
||||
@ -2842,7 +2846,7 @@ void TPrimanota_application::add_cgs_tot(TMask& m)
|
||||
|
||||
TImporto imp = real2imp(m.get_real(F_TOTALE), cgrowtype_totale);
|
||||
|
||||
set_cgs_row(riga_totale, imp.normalize(), nuovo, descr, cgrowtype_totale);
|
||||
set_cgs_row(riga_totale, imp, nuovo, descr, cgrowtype_totale);
|
||||
}
|
||||
calcola_imp(); // Ricalcola totale IVA
|
||||
calcola_saldo(); // Ricalcola sbilanci
|
||||
@ -3018,7 +3022,7 @@ bool TPrimanota_application::clifo_handler(TMask_field& f, KEY key)
|
||||
ixc->set(ic ? "X" : "");
|
||||
}
|
||||
if(m.get(F_PROKEY).empty() && app().has_module(F1AUT))
|
||||
fppro_mask(f, key);
|
||||
a.fppro_mask(f, key);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -3562,21 +3566,11 @@ HIDDEN void inventa_cambio_intra(TMask& m)
|
||||
{
|
||||
const TString& codval = m.get(F_VALUTAINTRA);
|
||||
|
||||
if (codval.not_empty() && TCurrency::get_firm_val() != codval)
|
||||
if (codval.full() && TCurrency::get_firm_val() != codval)
|
||||
{
|
||||
TTable cam("CAM");
|
||||
const TRectype & cam =cache().get("CAM", codval);
|
||||
|
||||
cam.put("CODTAB", codval);
|
||||
const int err = cam.read(_isgteq);
|
||||
bool yes = err != NOERR;
|
||||
if (!yes)
|
||||
{
|
||||
TString16 v = cam.get("CODTAB");
|
||||
|
||||
v.cut(3).rtrim();
|
||||
yes = v != codval;
|
||||
}
|
||||
if (yes)
|
||||
if (cam.full())
|
||||
m.set(F_CAMBIOINTRA, cache().get("%VAL", codval, "S4"));
|
||||
}
|
||||
}
|
||||
@ -3903,71 +3897,74 @@ bool TPrimanota_application::quadratura_handler(TMask_field& f, KEY key)
|
||||
return true;
|
||||
}
|
||||
|
||||
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||
|
||||
void TPrimanota_application::write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk)
|
||||
{
|
||||
TSheet_field& sf = cg_msk.sfield(F_SHEETIVA);
|
||||
const vector<TPro_msk::riga_iva_s>& righe = msk->get_righeiva();
|
||||
int i = 0;
|
||||
const TString_array& righe = msk.get_righeiva();
|
||||
|
||||
for (auto it = righe.begin(); it != righe.end(); ++it)
|
||||
FOR_EACH_ARRAY_ITEM( righe, r, obj)
|
||||
{
|
||||
if(it->imponibile != 0 || it->imposta != 0)
|
||||
{
|
||||
TToken_string& row = sf.row(i);
|
||||
TToken_string & riga = STRING_TOKEN(obj);
|
||||
const real imponibile = riga.get_real(FPRI_IMPONIBILE);
|
||||
const real imposta = riga.get_real(FPRI_IMPOSTA);
|
||||
|
||||
sf.notify(i, K_SPACE);
|
||||
row.add(it->imponibile, cid2index(IVA_IMPONIBILE));
|
||||
row.add(it->imposta, cid2index(IVA_IMPOSTA));
|
||||
row.add(it->aliquota, cid2index(IVA_PERCIVA));
|
||||
row.add(it->natura, cid2index(IVA_NATURIVA));
|
||||
sf.notify(i, K_ENTER);
|
||||
i++;
|
||||
if (imponibile != ZERO || imposta != ZERO)
|
||||
{
|
||||
TToken_string& row = sf.row(r);
|
||||
|
||||
sf.notify(r, K_SPACE);
|
||||
sf.set_row_cell(IVA_IMPONIBILE, imponibile, r);
|
||||
sf.set_row_cell(IVA_IMPOSTA, imposta, r);
|
||||
sf.set_row_cell(IVA_PERCIVA, riga.get(FPRI_ALIQUOTA), r);
|
||||
sf.set_row_cell(IVA_NATURIVA, riga.get(FPRI_NATURA), r);
|
||||
sf.notify(r, K_ENTER);
|
||||
}
|
||||
}
|
||||
}
|
||||
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||
bool TPrimanota_application::write_scad_f1(const TMask& cg_msk, const TPro_msk & msk)
|
||||
{
|
||||
TSheet_field& sf = cg_msk.sfield(FS_RATESHEET);
|
||||
const int items = sf.items();
|
||||
const vector<TPro_msk::scadenza_s>& righe = msk->get_scadenze();
|
||||
int i = 0;
|
||||
const TString_array & righe = msk.get_scadenze();
|
||||
|
||||
for (auto it = righe.begin(); it != righe.end(); ++it, ++i)
|
||||
FOR_EACH_ARRAY_ITEM(righe, r, obj)
|
||||
{
|
||||
TToken_string& row = app().pags().row(i);
|
||||
TToken_string& row = app().pags().row(r);
|
||||
TToken_string & riga = STRING_TOKEN(obj);
|
||||
|
||||
if(i >= items)
|
||||
pag_notify(sf, i, K_CTRL+K_INS);
|
||||
pag_notify(sf, i, K_SPACE);
|
||||
row.add(it->data, cid2index(101));
|
||||
row.add(it->importo, cid2index(102));
|
||||
pag_notify(sf, i, K_ENTER);
|
||||
if (r >= items)
|
||||
pag_notify(sf, r, K_CTRL+K_INS);
|
||||
pag_notify(sf, r, K_SPACE);
|
||||
sf.set_row_cell(101, riga.get_date(FPSC_DATA), r);
|
||||
sf.set_row_cell(102, riga.get_real(FPSC_IMPORTO), r);
|
||||
pag_notify(sf, r, K_ENTER);
|
||||
}
|
||||
return !righe.empty();
|
||||
return righe.items() > 0;
|
||||
}
|
||||
|
||||
void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||
void TPrimanota_application::write_clifo(TMask& cg_msk, const TPro_msk & msk)
|
||||
{
|
||||
bool ok = false;
|
||||
TLocalisamfile clifo(LF_CLIFO);
|
||||
TToken_string keys(msk->get_fpprokeys(), ';');
|
||||
TString codforn = TFppro(keys).get_codforn();
|
||||
TToken_string keys(msk.get_fpprokeys(), ';');
|
||||
long codforn = TFppro(keys).get_codforn();
|
||||
|
||||
if (codforn.empty())
|
||||
codforn = msk->get_codforn();
|
||||
if (codforn.empty())
|
||||
if (codforn == 0L)
|
||||
codforn = msk.get_codforn();
|
||||
if (codforn == 0L)
|
||||
{
|
||||
clifo.setkey(5);
|
||||
clifo.put(CLI_TIPOCF, "F");
|
||||
clifo.put(CLI_PAIV, msk->get_piva());
|
||||
clifo.put(CLI_PAIV, msk.get_piva());
|
||||
clifo.read();
|
||||
ok = clifo.get(CLI_PAIV) == msk->get_piva();
|
||||
ok = clifo.get(CLI_PAIV) == msk.get_piva();
|
||||
if(!ok)
|
||||
{
|
||||
clifo.zero();
|
||||
clifo.setkey(5);
|
||||
clifo.put(CLI_TIPOCF, "F");
|
||||
clifo.put(CLI_PAIV, msk->get_piva());
|
||||
clifo.put(CLI_PAIV, msk.get_piva());
|
||||
clifo.put(CLI_STATOPAIV, "IT");
|
||||
clifo.read();
|
||||
}
|
||||
@ -3979,8 +3976,8 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
|
||||
clifo.put(CLI_CODCF, codforn);
|
||||
clifo.read();
|
||||
}
|
||||
ok = clifo.get(CLI_PAIV) == msk->get_piva();
|
||||
if (ok && (cg_msk.get(F_CODCLIFOR).empty() || cg_msk.get(F_CODCLIFOR) != codforn))
|
||||
ok = clifo.get(CLI_PAIV) == msk.get_piva();
|
||||
if (ok && (cg_msk.get_long(F_CODCLIFOR) == 0 || cg_msk.get_long(F_CODCLIFOR) != codforn))
|
||||
{
|
||||
cg_msk.set(F_CODCLIFOR, clifo.get(CLI_CODCF));
|
||||
cg_msk.set(F_RAGSOCCF, clifo.get(CLI_RAGSOC));
|
||||
@ -3988,20 +3985,21 @@ void TPrimanota_application::write_clifo(TMask& cg_msk, const shared_ptr<TPro_ms
|
||||
cg_msk.set(F_PIVA, clifo.get(CLI_PAIV));
|
||||
cg_msk.set(F_COFI, clifo.get(CLI_COFI));
|
||||
cg_msk.set(F_CODPAG, clifo.get(CLI_CODPAG));
|
||||
TTable tab("%CPG"); tab.put("CODTAB", clifo.get(CLI_CODPAG));
|
||||
tab.read();
|
||||
|
||||
const TRectype & tab = cache().get("%CPG", clifo.get(CLI_CODPAG));
|
||||
|
||||
cg_msk.set(F_DESPAG, tab.get("S0"));
|
||||
}
|
||||
}
|
||||
|
||||
void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||
void TPrimanota_application::set_totale(TMask& cg_msk, TPro_msk & msk)
|
||||
{
|
||||
real totale = msk->get_totdoc();
|
||||
real totale = msk.get_totdoc();
|
||||
|
||||
if(totale == ZERO)
|
||||
if (totale == ZERO)
|
||||
totale = app().calcola_imp();
|
||||
|
||||
const real rit = msk->get_ritenute();
|
||||
const real rit = msk.get_ritenute();
|
||||
|
||||
if (rit != ZERO)
|
||||
{
|
||||
@ -4009,78 +4007,83 @@ void TPrimanota_application::set_totale(TMask& cg_msk, const shared_ptr<TPro_msk
|
||||
cg_msk.set(F_RITFIS, rit);
|
||||
app().add_cgs_ritenute(cgrowtype_ritfis);
|
||||
}
|
||||
else if (msk->is_doc_split())
|
||||
totale = msk->get_tot_imp_riva();
|
||||
else
|
||||
if (msk.is_doc_split())
|
||||
totale = msk.get_tot_imp_riva();
|
||||
cg_msk.set(F_TOTALE, totale);
|
||||
}
|
||||
|
||||
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk)
|
||||
void TPrimanota_application::riporta_dati_f1(TMask& cg_msk, TPro_msk & msk)
|
||||
{
|
||||
const bool bring = msk->should_bring_back();
|
||||
const bool bring = msk.da_riportare();
|
||||
|
||||
if (bring)
|
||||
{
|
||||
if (msk->get_numdoc().full() && cg_msk.get(F_CODCLIFOR).empty())
|
||||
write_clifo(cg_msk, msk);
|
||||
write_righe_iva_f1(cg_msk, msk);
|
||||
set_totale(cg_msk, msk);
|
||||
TPrimanota_application & a = app();
|
||||
|
||||
if (msk.get_numdoc() != 0L && cg_msk.get(F_CODCLIFOR).empty())
|
||||
a.write_clifo(cg_msk, msk);
|
||||
a.write_righe_iva_f1(cg_msk, msk);
|
||||
a.set_totale(cg_msk, msk);
|
||||
cg_msk.set(FS_RECALC, ""); cg_msk.disable(FS_RDIFFER); cg_msk.disable(FS_MCOMM); cg_msk.disable(FS_NRATE);
|
||||
if (write_scad_f1(cg_msk, msk))
|
||||
app().set_scad_f1(cg_msk);
|
||||
if (a.write_scad_f1(cg_msk, msk))
|
||||
a.set_scad_f1(cg_msk);
|
||||
}
|
||||
// Li riporto anche con il collega in prima nota, e in quel caso solo se i campi non sono gia valorizzati
|
||||
if (bring || cg_msk.get(F_NUMDOC).empty())
|
||||
if (bring || cg_msk.get(F_NUMDOCEXT) != msk.get_str_numdoc())
|
||||
{
|
||||
cg_msk.set(F_NUMDOCEXT, msk->get_numdoc());
|
||||
cg_msk.set(F_NUMDOC, msk->get_numdoc().right(7));
|
||||
|
||||
cg_msk.set(F_NUMDOCEXT, msk.get_str_numdoc());
|
||||
cg_msk.set(F_NUMDOC, format("%-7ld", msk.get_numdoc()));
|
||||
cg_msk.set(F_DATADOC, msk.get_datadoc());
|
||||
cg_msk.set(F_IDDOCSDI, msk.get_str_numdoc());
|
||||
cg_msk.set(F_DATADOCSDI, msk.get_datadoc());
|
||||
cg_msk.disable(F_IDDOCSDI);
|
||||
cg_msk.disable(F_DATADOCSDI);
|
||||
}
|
||||
|
||||
if (bring || cg_msk.get(F_DATADOC).empty())
|
||||
cg_msk.set(F_DATADOC, msk->get_datadoc());
|
||||
}
|
||||
|
||||
void TPrimanota_application::insert_part_scad(TConfig& ini)
|
||||
void TPrimanota_application::insert_part_scad(TConfig& ini) // che cazzo significa la partita 73/001
|
||||
{
|
||||
vector<TToken_string> rif_doc;
|
||||
int i = 0;
|
||||
ini.set_paragraph("23");
|
||||
TArray rif_doc;
|
||||
TString str = ini.get("NUMLINEA", "23", 0);
|
||||
|
||||
// Carico nel vettore
|
||||
while(true)
|
||||
for (int i = 0; str.full(); str = ini.get("NUMLINEA", "23", ++i))
|
||||
{
|
||||
TToken_string doc("", '|');
|
||||
TString str; str << ini.get("NUMLINEA", nullptr, i, "NULL");
|
||||
if (str != "NULL")
|
||||
{
|
||||
doc.add(str);
|
||||
doc.add(ini.get("DOCRIF", nullptr, i, "NULL"));
|
||||
doc.add(ini.get("DATADOCRIF", nullptr, i, "NULL"));
|
||||
|
||||
rif_doc.insert(rif_doc.end(), doc);
|
||||
i++;
|
||||
doc.add(str);
|
||||
doc.add(ini.get("DOCRIF", "23", i));
|
||||
doc.add(ini.get("DATADOCRIF", "23", i));
|
||||
rif_doc.add(doc);
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
// Agganciare alla partita del documento di riferimento
|
||||
if(!rif_doc.empty())
|
||||
if(rif_doc.items() > 0)
|
||||
{
|
||||
is_f1() = true;
|
||||
|
||||
TString query; query << "USE MOV\nSELECT (DATADOC==#DATADOC)";
|
||||
TISAM_recordset rec(query);
|
||||
rec.set_var("#DATADOC", TVariant(TDate(rif_doc[0].get(2))));
|
||||
TString part;
|
||||
do
|
||||
|
||||
FOR_EACH_ARRAY_ITEM(rif_doc, r, _obj)
|
||||
{
|
||||
if (rec.get(MOV_NUMDOC).as_string() == "73/001")
|
||||
if (part.blank())
|
||||
{
|
||||
part = rec.get(MOV_PROTIVA).as_string();
|
||||
rec.set_var("#DATADOC", ((TToken_string&)rif_doc[0]).get_date(2));
|
||||
|
||||
for (bool ok = rec.move_first(); ok; ok = rec.move_next())
|
||||
{
|
||||
if (rec.get_string(MOV_NUMDOC) == "73/001")
|
||||
{
|
||||
part = rec.get_string(MOV_PROTIVA);
|
||||
break;
|
||||
}
|
||||
} while (rec.move_next());
|
||||
|
||||
}
|
||||
}
|
||||
_num_doc_rif_partite = part;
|
||||
}
|
||||
}
|
||||
@ -4092,9 +4095,10 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
||||
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
|
||||
return true;
|
||||
|
||||
auto msk = std::make_shared<TPro_msk>(cg_msk);
|
||||
|
||||
app()._pro_mask = msk;
|
||||
TPro_msk * msk = app()._pro_mask;
|
||||
|
||||
if (msk == nullptr)
|
||||
app()._pro_mask = msk = new TPro_msk(cg_msk);
|
||||
|
||||
const TString datadoc = cg_msk.get(F_DATADOC);
|
||||
|
||||
@ -4104,16 +4108,13 @@ bool TPrimanota_application::fppro_mask(TMask_field& f, KEY key)
|
||||
msk->field(F_DATESEARCH).show();
|
||||
msk->set(F_DATESEARCH, datadoc);
|
||||
}
|
||||
if (msk->load_fppro_mask(msk.get()))
|
||||
{
|
||||
msk->run();
|
||||
// Riporto dati FPPRO su maschera Prima Nota (solo se hai F1)
|
||||
// Se non hai F1 collego senza riportarti i dati (solo le chiavi db)
|
||||
riporta_dati_f1(cg_msk, msk);
|
||||
riporta_dati_f1(cg_msk, *msk);
|
||||
cg_msk.set(F_PROKEY, msk->get_fpprokeys());
|
||||
is_collegato(cg_msk.field(F_COLFPPRO));
|
||||
cg_msk.set(F_COLFPPRO, cg_msk.get(F_PROKEY).full());
|
||||
cg_msk.set(F_ANNORIF, cg_msk.get(F_ANNOIVA));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -4132,11 +4133,11 @@ bool TPrimanota_application::scollega(const bool set)
|
||||
|
||||
bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
|
||||
{
|
||||
if (app().has_module(FPAUT) && f.running_check(key))
|
||||
{
|
||||
TMask& cg_msk = f.mask();
|
||||
|
||||
if (!app().has_module(FPAUT) || key != K_SPACE && key != K_TAB || !check_causale(cg_msk.get(F_CODCAUS)))
|
||||
return true;
|
||||
if (cg_msk.get_bool(F_COLFPPRO))
|
||||
if (check_causale(cg_msk.get(F_CODCAUS)) && cg_msk.get_bool(F_COLFPPRO))
|
||||
{
|
||||
scollega(true);
|
||||
app().clean_fppro();
|
||||
@ -4150,103 +4151,81 @@ bool TPrimanota_application::scollega_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
message_box("Il movimento e' stato scollegato dalla fattura elettronica\nin ingresso, precedentemente associata.");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPrimanota_application::is_collegato(TMask_field& f)
|
||||
{
|
||||
TMask& cg_msk = f.mask();
|
||||
const bool has_prokey = !cg_msk.get(F_PROKEY).empty();
|
||||
|
||||
f.set(has_prokey ? "X" : " ");
|
||||
return has_prokey;
|
||||
}
|
||||
|
||||
bool TPro_msk::load_fppro_mask(TMask* msk, KEY k)
|
||||
bool TPro_msk::load_fppro_mask(TMask & msk)
|
||||
{
|
||||
// Provo a vedere se hanno l'FP: se c'è l'indirizzo controllo che non sia F8 se non c'è non hanno l'FP
|
||||
if (k != 32)
|
||||
return false;
|
||||
if (!fp_db().sq_is_connect())
|
||||
{
|
||||
message_box("Attenzione connessione al database non riuscita.\nImpossibile collegarsi ai documenti in entrata.");
|
||||
return false;
|
||||
}
|
||||
|
||||
const int forn = msk->get_int(F_CODCLIFORS);
|
||||
const int forn = msk.get_int(F_CODCLIFORS);
|
||||
|
||||
if (forn == 0)
|
||||
{
|
||||
msk->set(F_ENABSEARCH, "X");
|
||||
abilita_piva(msk);
|
||||
msk.set(F_ENABSEARCH, "X");
|
||||
abilita_piva();
|
||||
//message_box("Inserire prima il fornitore");
|
||||
//return false;
|
||||
}
|
||||
|
||||
const TString& codfisc = msk->get(F_COFIS);
|
||||
const TString& stato_piva = msk->get(F_STATOPAIVS);
|
||||
const TString& piva = msk->get(F_PIVAS);
|
||||
const TString& codfisc = msk.get(F_COFIS);
|
||||
const TString& stato_piva = msk.get(F_STATOPAIVS);
|
||||
const TString& piva = msk.get(F_PIVAS);
|
||||
TString query;
|
||||
TString date = "";
|
||||
TDate date;
|
||||
|
||||
if (msk->get_bool(F_ENABDATE))
|
||||
date = msk->get_date(F_DATESEARCH);
|
||||
if(!msk->get_bool(F_ENABSEARCH))
|
||||
query = query_fppro(msk->get(F_CODCLIFORS), date);
|
||||
if (msk.get_bool(F_ENABDATE))
|
||||
date = msk.get_date(F_DATESEARCH);
|
||||
if(!msk.get_bool(F_ENABSEARCH))
|
||||
query = query_fppro(msk.get(F_CODCLIFORS), date);
|
||||
else
|
||||
query = query_fppro(stato_piva, piva, date);
|
||||
fp_db().sq_set_exec(query, false);
|
||||
|
||||
TSheet_field& sf = msk->sfield(F_SHEETFPPROS);
|
||||
TSheet_field& sf = msk.sfield(F_SHEETFPPROS);
|
||||
const bool show_all = msk.get_bool(F_SHOWALL);
|
||||
|
||||
sf.hide();
|
||||
if (sf.items() > 0)
|
||||
sf.destroy();
|
||||
sf.reset();
|
||||
while (fp_db().sq_next())
|
||||
{
|
||||
TString numreg = fp_db().sq_get("PZ_NUMREGCONT");
|
||||
const bool show_all = msk->get_bool(F_SHOWALL);
|
||||
const long numreg = fp_db().sq_get_long("PZ_NUMREGCONT");
|
||||
|
||||
if (numreg != "0" && !show_all)
|
||||
continue;
|
||||
|
||||
TToken_string& row = sf.row(-1);
|
||||
if (show_all || numreg == 0L)
|
||||
{
|
||||
TToken_string keys(fp_db().sq_get("PZ_KEYPRGINVIO"), ';');
|
||||
|
||||
keys.add(fp_db().sq_get("PZ_KEYHEADERFATT")); keys.add(fp_db().sq_get("PZ_KEYBODYFATT"));
|
||||
row.add("", 0);
|
||||
row.add(fp_db().sq_get("P7_TIPODOC"));
|
||||
row.add(TDate(fp_db().sq_get_date("P1_DATAORARIC")));
|
||||
row.add(TDate(fp_db().sq_get_date("PZ_DATA")));
|
||||
row.add(fp_db().sq_get("PQ_IMPTOTDOC"));
|
||||
row.add(fppro_db().set_keys(keys).get_ritenute());
|
||||
row.add(fp_db().sq_get("PZ_NUMERO"));
|
||||
row.add(fp_db().sq_get("P2_ANADENOMIN"));
|
||||
row.add(fp_db().sq_get("P2_FISCIVAPAESE"));
|
||||
row.add(fp_db().sq_get("P2_FISCIVACOD"));
|
||||
row.add(fp_db().sq_get("P2_CODFISCALE"));
|
||||
row.add(fp_db().sq_get("PZ_TIPOPROT"));
|
||||
row.add(fp_db().sq_get("PZ_NUMPROT"));
|
||||
row.add(keys);
|
||||
|
||||
const int r = sf.set_row_cell(F_SELFPPROS, "");
|
||||
|
||||
sf.set_row_cell(F_TIPODOCS, fp_db().sq_get("P7_TIPODOC"), r);
|
||||
sf.set_row_cell(F_DATAORARICS, fp_db().sq_get_date("P1_DATAORARIC"), r);
|
||||
sf.set_row_cell(F_DATAS, fp_db().sq_get_date("PZ_DATA"), r);
|
||||
sf.set_row_cell(F_IMPTOTDOCS, fp_db().sq_get("PQ_IMPTOTDOC"), r);
|
||||
sf.set_row_cell(F_RITENUTE, fppro_db().set_keys(keys).get_ritenute(), r);
|
||||
sf.set_row_cell(F_NUMEROS, fp_db().sq_get("PZ_NUMERO"), r);
|
||||
sf.set_row_cell(F_RAGXML, fp_db().sq_get("P2_ANADENOMIN"), r);
|
||||
sf.set_row_cell(F_FISCIVAPAESES, fp_db().sq_get("P2_FISCIVAPAESE"), r);
|
||||
sf.set_row_cell(F_FISCIVACODS, fp_db().sq_get("P2_FISCIVACOD"), r);
|
||||
sf.set_row_cell(F_CODFISCALES, fp_db().sq_get("P2_CODFISCALE"), r);
|
||||
sf.set_row_cell(F_TIPOPROTS, fp_db().sq_get("PZ_TIPOPROT"), r);
|
||||
sf.set_row_cell(F_PROGRESSS, fp_db().sq_get("PZ_NUMPROT"), r);
|
||||
sf.set_row_cell(F_KEYFPPROS, keys, r);
|
||||
}
|
||||
}
|
||||
sf.force_update();
|
||||
sf.show();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPro_msk::fppro_handler(TMask_field& f, KEY k)
|
||||
bool TPro_msk::riporta(TMask_field& f)
|
||||
{
|
||||
TMask& msk = f.mask();
|
||||
|
||||
const bool load = load_fppro_mask(&msk, k);
|
||||
return load;
|
||||
}
|
||||
|
||||
bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k != 32)
|
||||
return true;
|
||||
TMask& msk = f.mask();
|
||||
//if (msk.curr_page() != 3)
|
||||
//return true;
|
||||
bool ok = false;
|
||||
@ -4254,16 +4233,10 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
||||
|
||||
FOR_EACH_SHEET_ROW(sf, nr, row)
|
||||
{
|
||||
if(*row->get(0) == 'X')
|
||||
if(row->get_bool(0))
|
||||
{
|
||||
//TProtocollo protocollo(TDate(row->get(2)).year(), row->get(9), row->get(10));
|
||||
app()._pro_mask->set_doc(row->get(cid2index(F_NUMEROS)), row->get(cid2index(F_DATAS)),
|
||||
row->get(cid2index(F_IMPTOTDOCS)), row->get(cid2index(F_RITENUTE)), "", row->get(cid2index(F_KEYFPPROS)),
|
||||
msk.get(F_CODCLIFORS), row->get(cid2index(F_FISCIVACODS)));
|
||||
if (f.dlg() == DLG_OK)
|
||||
app()._pro_mask->_riporta = true;
|
||||
else
|
||||
app()._pro_mask->_riporta = false;
|
||||
app().pro_mask()->set_doc(sf, nr);
|
||||
_riporta = f.dlg() == DLG_OK;
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
@ -4277,67 +4250,56 @@ bool TPro_msk::riporta_handler(TMask_field& f, KEY k)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TPro_msk::collega_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
return riporta_handler(f, k);
|
||||
}
|
||||
|
||||
bool TPro_msk::piva_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
TMask& msk = f.mask();
|
||||
bool ok = true;
|
||||
|
||||
if(k == K_TAB && f.active() && f.focusdirty())
|
||||
{
|
||||
ok = load_fppro_mask(&msk, K_SPACE);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TPro_msk::date_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
TMask& msk = f.mask();
|
||||
bool ok = true;
|
||||
|
||||
if (k == K_TAB && f.active() && f.focusdirty())
|
||||
{
|
||||
ok = load_fppro_mask(&msk, K_SPACE);
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TPro_msk::fppro_selfatt() const
|
||||
{
|
||||
const TMask& mask = *this;
|
||||
TSheet_field& sf = mask.sfield(F_SHEETFPPROS);
|
||||
|
||||
sf.hide();
|
||||
FOR_EACH_SHEET_ROW(sf, nr, row)
|
||||
{
|
||||
if (*row->get(0) == 'X')
|
||||
row->add("", 0);
|
||||
}
|
||||
if (sf.get_bool_row_cell(nr, F_SELFPPROS))
|
||||
sf.set_row_cell(F_SELFPPROS, false, nr);
|
||||
sf.force_update();
|
||||
sf.show();
|
||||
}
|
||||
|
||||
bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
TMask & m = o.mask();
|
||||
|
||||
switch (o.dlg())
|
||||
{
|
||||
case DLG_CONFIG:
|
||||
if (e == fe_button)
|
||||
load_fppro_mask(m);
|
||||
break;
|
||||
case DLG_OK:
|
||||
if (e == fe_button)
|
||||
riporta(o);
|
||||
break;
|
||||
case DLG_LINK:
|
||||
if (e == fe_button)
|
||||
riporta(o);
|
||||
break;
|
||||
case F_PIVAS:
|
||||
if (e == fe_modify)
|
||||
load_fppro_mask(m);
|
||||
break;
|
||||
case F_DATESEARCH:
|
||||
if (e == fe_modify)
|
||||
load_fppro_mask(m);
|
||||
break;
|
||||
case F_SELFPPROS:
|
||||
if (e == fe_modify)
|
||||
fppro_selfatt();
|
||||
break;
|
||||
case F_SHOWALL:
|
||||
if (e == fe_modify)
|
||||
load_fppro_mask(this, K_SPACE);
|
||||
load_fppro_mask(m);
|
||||
break;
|
||||
case F_ENABSEARCH:
|
||||
if (e == fe_modify)
|
||||
{
|
||||
abilita_piva(this);
|
||||
load_fppro_mask(this);
|
||||
abilita_piva();
|
||||
load_fppro_mask(m);
|
||||
}
|
||||
break;
|
||||
case F_ENABDATE:
|
||||
@ -4345,7 +4307,7 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
field(F_DATESEARCH).show(o.mask().get_bool(F_ENABDATE));
|
||||
if (!o.mask().get_bool(F_ENABDATE))
|
||||
load_fppro_mask(this);
|
||||
load_fppro_mask(m);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -4356,9 +4318,11 @@ bool TPro_msk::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
|
||||
bool TPro_msk::is_doc_split()
|
||||
{
|
||||
for(riga_iva_s const& riga : _righe_iva)
|
||||
FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
|
||||
{
|
||||
if (riga.esigibilita == 'S')
|
||||
TToken_string & riga = STRING_TOKEN(obj);
|
||||
|
||||
if (riga.get(FPRI_ESIGIBILITA) == "S")
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -4395,53 +4359,71 @@ void TPro_msk::set_scadenze(const char* fpprokeys)
|
||||
}
|
||||
}
|
||||
|
||||
void TPro_msk::set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva)
|
||||
void TPro_msk::set_doc(TSheet_field & s, int nrow)
|
||||
//long numero, TDate datadoc, real totdoc, real ritenute, const char* protfppro, const char* fpprokeys, long codforn, const char* piva)
|
||||
{
|
||||
_numero = numero;
|
||||
_datadoc = datadoc;
|
||||
_totdoc = abs(totdoc);
|
||||
_ritenute = ritenute;
|
||||
_protfppro.sset(protfppro);
|
||||
_numero = s.get_long_row_cell(nrow, F_NUMEROS);
|
||||
_str_numero = s.get_str_row_cell(nrow, F_NUMEROS);
|
||||
_datadoc = s.get_date_row_cell(nrow, F_DATAS);
|
||||
_totdoc = abs(s.get_real_row_cell(nrow, F_IMPTOTDOCS));
|
||||
_ritenute = s.get_real_row_cell(nrow, F_RITENUTE);
|
||||
_protfppro.sset("");
|
||||
|
||||
const TString & fpprokeys = s.get_str_row_cell(nrow, F_KEYFPPROS);
|
||||
|
||||
_fpprokeys = fpprokeys;
|
||||
_codforn = codforn;
|
||||
_piva = piva;
|
||||
set_righeiva(fpprokeys);
|
||||
set_scadenze(fpprokeys);
|
||||
set_scadenze(fpprokeys);
|
||||
_codforn = s.get_long_row_cell(nrow, F_CODCLIFORS);
|
||||
_piva = s.get_str_row_cell(nrow, F_FISCIVACODS);
|
||||
|
||||
}
|
||||
|
||||
real TPro_msk::get_tot_imp_riva()
|
||||
{
|
||||
real tot = ZERO;
|
||||
real tot;
|
||||
|
||||
for(riga_iva_s const& riga : _righe_iva)
|
||||
FOR_EACH_ARRAY_ITEM(_righe_iva, r, obj)
|
||||
{
|
||||
if (riga.imposta > ZERO)
|
||||
tot += riga.imponibile;
|
||||
TToken_string & riga = STRING_TOKEN(obj);
|
||||
|
||||
tot += riga.get_real(FPRI_IMPONIBILE);
|
||||
}
|
||||
return tot;
|
||||
}
|
||||
|
||||
void TPro_msk::add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib)
|
||||
{
|
||||
_righe_iva.insert(_righe_iva.end(), { imponibile, imposta, aliquota, natura, esigib });
|
||||
TToken_string riga;
|
||||
|
||||
riga.add(imponibile, FPRI_IMPONIBILE);
|
||||
riga.add(imposta, FPRI_IMPOSTA);
|
||||
riga.add(aliquota, FPRI_ALIQUOTA);
|
||||
riga.add(natura, FPRI_NATURA);
|
||||
riga.add(esigib, FPRI_ESIGIBILITA);
|
||||
_righe_iva.add(riga);
|
||||
}
|
||||
|
||||
void TPro_msk::add_scad(const TDate& date, const real& importo)
|
||||
{
|
||||
_scadenze.insert(_scadenze.end(), { date, importo });
|
||||
TToken_string riga;
|
||||
|
||||
riga.add(date, FPSC_DATA);
|
||||
riga.add(importo, FPSC_IMPORTO);
|
||||
_scadenze.add(riga);
|
||||
}
|
||||
|
||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& date)
|
||||
TString& TPro_msk::query_fppro(const TString& codforn, const TDate& date)
|
||||
{
|
||||
return query_fppro(codforn, "", "", "", date, "", "", "", true, false);
|
||||
}
|
||||
|
||||
TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TString& date)
|
||||
TString& TPro_msk::query_fppro(const TString& stato_piva, const TString& piva, const TDate& date)
|
||||
{
|
||||
return query_fppro("", stato_piva, piva, "", date, "", "", "", true, true);
|
||||
}
|
||||
|
||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research)
|
||||
TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order, bool piva_research)
|
||||
{
|
||||
TString id_fornitore;
|
||||
TString keys;
|
||||
@ -4465,14 +4447,15 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
||||
id_fornitore << " (PZ_CLIFOR = '" << codforn << "') ";
|
||||
}
|
||||
|
||||
static TString query;
|
||||
query.cut(0) << query_string() << "WHERE ";
|
||||
TString & query = query_string();
|
||||
|
||||
query << "WHERE ";
|
||||
|
||||
if (!id_fornitore.empty())
|
||||
{
|
||||
query << id_fornitore << " ";
|
||||
if (!date.empty())
|
||||
query << " AND PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
||||
if (date.ok())
|
||||
query << " AND PZ_DATA = '" << date.date2ansi() << "' ";
|
||||
if (order)
|
||||
query << "\nORDER BY P1_DATAORARIC ASC";
|
||||
query << ";";
|
||||
@ -4484,9 +4467,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
||||
query << " AND " << where_str;
|
||||
query << ";";
|
||||
}
|
||||
else if (!date.empty())
|
||||
else if (date.ok())
|
||||
{
|
||||
query << " PZ_DATA = '" << TDate(date).date2ansi() << "' ";
|
||||
query << " PZ_DATA = '" << date.date2ansi() << "' ";
|
||||
if (order)
|
||||
query << "\nORDER BY P1_DATAORARIC ASC, PZ_TIPOPROT ASC, PZ_NUMPROT ASC";
|
||||
query << ";";
|
||||
@ -4501,9 +4484,9 @@ TString& TPro_msk::query_fppro(const TString& codforn, const TString& stato_piva
|
||||
|
||||
TString& TPro_msk::query_string()
|
||||
{
|
||||
static TString query;
|
||||
TString & query = get_tmp_string(512);
|
||||
|
||||
query.cut(0) << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
|
||||
query << "SELECT PZ_CLIFOR, PZ_DATA, CAST(P1_DATAORARIC AS DATE) AS P1_DATAORARIC, P7_TIPODOC, PQ_IMPTOTDOC, PZ_NUMERO, PZ_NUMREGCONT, PZ_TIPOPROT, " <<
|
||||
"PZ_NUMPROT, P2_ANADENOMIN, P2_FISCIVAPAESE, P2_FISCIVACOD, P2_CODFISCALE, PZ_KEYPRGINVIO, PZ_KEYHEADERFATT, PZ_KEYBODYFATT\n" <<
|
||||
"FROM PAA0200F \nJOIN FPPRO00F\n" << " ON P2_KEYPRGINVIO = PZ_KEYPRGINVIO AND P2_KEYHEADERFATT = PZ_KEYHEADERFATT AND P2_KEYBODYFATT = PZ_KEYBODYFATT\n" <<
|
||||
"JOIN PAA0100F \nON P2_KEYPRGINVIO = P1_KEYPRGINVIO AND P2_KEYHEADERFATT = P1_KEYHEADERFATT AND P2_KEYBODYFATT = P1_KEYBODYFATT\n" <<
|
||||
@ -4512,36 +4495,26 @@ TString& TPro_msk::query_string()
|
||||
return query;
|
||||
}
|
||||
|
||||
void TPro_msk::abilita_piva(TMask* msk)
|
||||
void TPro_msk::abilita_piva()
|
||||
{
|
||||
if (msk->get_bool(F_ENABSEARCH))
|
||||
{
|
||||
msk->enable(F_PIVAS);
|
||||
msk->enable(F_STATOPAIVS);
|
||||
}
|
||||
else
|
||||
{
|
||||
msk->enable(F_PIVAS, false);
|
||||
msk->enable(F_STATOPAIVS, false);
|
||||
}
|
||||
const bool on = get_bool(F_ENABSEARCH);
|
||||
|
||||
enable(F_PIVAS, on);
|
||||
enable(F_STATOPAIVS, on);
|
||||
enable(F_COFIS, on);
|
||||
}
|
||||
|
||||
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn("")
|
||||
TPro_msk::TPro_msk(TMask& cg_msk) : TAutomask("cg2100t"), _riporta(false), _codforn(0L), _numero(0L)
|
||||
{
|
||||
TMask::set_handler(DLG_CONFIG, fppro_handler);
|
||||
TMask::set_handler(DLG_OK, riporta_handler);
|
||||
if (!app().has_module(F1AUT))
|
||||
field(DLG_OK).disable();
|
||||
TMask::set_handler(DLG_LINK, collega_handler);
|
||||
TMask::set_handler(F_PIVAS, piva_handler);
|
||||
TMask::set_handler(F_DATESEARCH, date_handler);
|
||||
TMask::set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
|
||||
TMask::set(F_COFIS, cg_msk.get(F_COFI));
|
||||
TMask::set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
|
||||
TMask::set(F_PIVAS, cg_msk.get(F_PIVA));
|
||||
TMask::set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
||||
enable(DLG_OK, app().has_module(F1AUT));
|
||||
set(F_CODCLIFORS, cg_msk.get(F_CODCLIFOR));
|
||||
set(F_COFIS, cg_msk.get(F_COFI));
|
||||
set(F_STATOPAIVS, cg_msk.get(F_STATOPAIV));
|
||||
set(F_PIVAS, cg_msk.get(F_PIVA));
|
||||
set(F_RAGSOCS, cg_msk.get(F_RAGSOCCF));
|
||||
set(F_DATESEARCH, TDate(TODAY));
|
||||
_righe_iva.clear();
|
||||
_righe_iva.destroy();
|
||||
_scadenze.destroy();
|
||||
}
|
||||
|
||||
bool& is_f1()
|
||||
@ -4549,3 +4522,4 @@ bool& is_f1()
|
||||
static bool is_f1 = false;
|
||||
return is_f1;
|
||||
}
|
||||
|
||||
|
181
src/cg/cg2102.h
181
src/cg/cg2102.h
@ -27,15 +27,78 @@
|
||||
|
||||
#include <automask.h>
|
||||
#include "../f1/f1lib.h"
|
||||
#include <vector>
|
||||
|
||||
#define K_ELIMMAS 0 // Key per eliminazione massima
|
||||
|
||||
class TPro_msk;
|
||||
#define FPRI_IMPONIBILE 0
|
||||
#define FPRI_IMPOSTA 1
|
||||
#define FPRI_ALIQUOTA 2
|
||||
#define FPRI_NATURA 3
|
||||
#define FPRI_ESIGIBILITA 4
|
||||
|
||||
#define FPSC_DATA 0
|
||||
#define FPSC_IMPORTO 1
|
||||
|
||||
class TDati_mov_auto;
|
||||
|
||||
enum CGMaskType { _query = 0, _no_iva = 1, _iva = 2, _occas = 3};
|
||||
|
||||
class TPro_msk : public TAutomask
|
||||
{
|
||||
long _numero;
|
||||
TDate _datadoc;
|
||||
real _totdoc;
|
||||
real _ritenute;
|
||||
TProtocollo _protfppro;
|
||||
TString _fpprokeys;
|
||||
TString _piva;
|
||||
long _codforn;
|
||||
TString_array _righe_iva;
|
||||
TString_array _scadenze;
|
||||
bool _riporta;
|
||||
TString _str_numero;
|
||||
|
||||
// Non permette la selezione multipla
|
||||
void fppro_selfatt() const;
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
public:
|
||||
bool da_riportare() const { return _riporta; }
|
||||
bool is_doc_split() ;
|
||||
|
||||
void set_righeiva(const char* fpprokeys);
|
||||
void set_scadenze(const char* fpprokeys);
|
||||
void set_doc(TSheet_field & s, int nrow);
|
||||
|
||||
const long get_numdoc() const { return _numero; }
|
||||
const TString & get_str_numdoc() const { return _str_numero; }
|
||||
const TDate & get_datadoc() const { return _datadoc; }
|
||||
const real & get_totdoc() const { return _totdoc; }
|
||||
const real & get_ritenute() const { return _ritenute; }
|
||||
const TString & get_fpprokeys() const { return _fpprokeys; }
|
||||
const long get_codforn() const { return _codforn; }
|
||||
const TString & get_piva() const { return _piva; }
|
||||
const TString_array& get_righeiva() const { return _righe_iva; }
|
||||
const TProtocollo& get_protocollo() const { return _protfppro; }
|
||||
const TString_array& get_scadenze() const { return _scadenze; }
|
||||
real get_tot_imp_riva() ;
|
||||
|
||||
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
|
||||
void add_scad(const TDate& date, const real& importo);
|
||||
|
||||
static TString& query_fppro(const TString& codforn, const TDate& date);
|
||||
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TDate& date);
|
||||
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TDate& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
||||
static TString& query_string();
|
||||
|
||||
void abilita_piva();
|
||||
|
||||
// Carica documenti FPPRO sulla maschera
|
||||
bool riporta(TMask_field& f);
|
||||
bool load_fppro_mask(TMask & msk);
|
||||
|
||||
TPro_msk(TMask& cg_msk);
|
||||
};
|
||||
|
||||
class TPrimanota_application : public TRelation_application
|
||||
{
|
||||
TMovimentoPN* _rel; // Relazione principale
|
||||
@ -90,7 +153,7 @@ class TPrimanota_application : public TRelation_application
|
||||
|
||||
TAssoc_array _colori; // Colori delle righe
|
||||
bool _isf1;
|
||||
shared_ptr<TPro_msk> _pro_mask;
|
||||
TPro_msk * _pro_mask;
|
||||
bool _is_set_fpcheck;
|
||||
int _last_date;
|
||||
bool _f1_ini;
|
||||
@ -181,20 +244,19 @@ class TPrimanota_application : public TRelation_application
|
||||
|
||||
// Gestione F1
|
||||
|
||||
static void write_righe_iva_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||
static bool write_scad_f1(const TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||
static void write_clifo(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||
static void set_totale(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||
static void riporta_dati_f1(TMask& cg_msk, const shared_ptr<TPro_msk>& msk);
|
||||
void write_righe_iva_f1(TMask& cg_msk, const TPro_msk & msk);
|
||||
bool write_scad_f1(const TMask& cg_msk, const TPro_msk & msk);
|
||||
void write_clifo(TMask& cg_msk, const TPro_msk & msk);
|
||||
void set_totale(TMask& cg_msk, TPro_msk & msk);
|
||||
static void riporta_dati_f1(TMask& cg_msk, TPro_msk & msk);
|
||||
void insert_part_scad(TConfig& ini);
|
||||
// Handlers per aggancio FPPRO
|
||||
// Bottone per maschera FPPRO
|
||||
static bool fppro_mask(TMask_field& f, KEY key);
|
||||
static bool scollega_handler(TMask_field& f, KEY key);
|
||||
static bool is_collegato(TMask_field& f);
|
||||
static void fppromask_set_handl(TMask* msk);
|
||||
static void load_list(TMask* msk, KEY k);
|
||||
static void f1_init_modify(TMask& m, const TRectype& mov);
|
||||
void load_list(TMask* msk, KEY k);
|
||||
void f1_init(TMask& m, const bool fe_enabled, const bool f1_linked = false);
|
||||
|
||||
void reset_sheet_row(TSheet_field& s, int n);
|
||||
int crea_somma_spese(TImporto& imp);
|
||||
@ -223,9 +285,10 @@ protected: // TApplication
|
||||
static bool scollega(bool set = false);
|
||||
// Pulisce il mov e db dai firerimenti FPPRO (in MODE_MOD per edit/delete)
|
||||
void clean_fppro();
|
||||
// setta variabili prima del controllo has_f1_db
|
||||
void set_has_f1_db(TMask* m);
|
||||
bool has_f1_db(TMask* m);
|
||||
// Ha f1 ?
|
||||
bool has_f1() const;
|
||||
// controlla il db
|
||||
bool has_f1_db(const TMask & m);
|
||||
// Controlli prima di write e rewrite
|
||||
int controlli_f1(const TMask& m);
|
||||
|
||||
@ -321,7 +384,7 @@ protected:
|
||||
real calcola_imp() const;
|
||||
|
||||
void add_cgs_tot(TMask& m);
|
||||
int set_cgs_row(int n, const TImporto& importo, const TBill& conto, const char* desc, char tipo,
|
||||
int set_cgs_row(int n, TImporto& importo, const TBill& conto, const char* desc, char tipo,
|
||||
const char* cms = nullptr, const char* fas = nullptr);
|
||||
void set_cgs_imp(int n, const TImporto& importo);
|
||||
bool add_cgs_imp(int n, const TImporto& importo);
|
||||
@ -400,98 +463,18 @@ public:
|
||||
TString_array& pag_rows() { return _pag_rows; }
|
||||
TImporto get_cgs_imp(int n) const;
|
||||
|
||||
TPro_msk * pro_mask() const { return _pro_mask; }
|
||||
|
||||
TImporto imposte_split_pay() const;
|
||||
const TString& num_doc_rif() const { return _num_doc_rif_partite; }
|
||||
|
||||
TPrimanota_application();
|
||||
virtual ~TPrimanota_application() { }
|
||||
};
|
||||
|
||||
class TPro_msk : public TAutomask
|
||||
{
|
||||
public:
|
||||
struct riga_iva_s;
|
||||
struct scadenza_s;
|
||||
private:
|
||||
TString _numero;
|
||||
TDate _datadoc;
|
||||
real _totdoc;
|
||||
real _ritenute;
|
||||
TProtocollo _protfppro;
|
||||
TString _fpprokeys;
|
||||
TString _piva;
|
||||
TString _codforn;
|
||||
vector<riga_iva_s> _righe_iva;
|
||||
vector<scadenza_s> _scadenze;
|
||||
bool _riporta;
|
||||
|
||||
// Handlers per aggancio FPPRO
|
||||
// Bottone carica documenti in maschera FPPRO
|
||||
static bool fppro_handler(TMask_field& f, KEY k);
|
||||
// Bottone riporta doc FPPRO in testata Prima Nota
|
||||
static bool riporta_handler(TMask_field& f, KEY k);
|
||||
static bool collega_handler(TMask_field& f, KEY k);
|
||||
static bool piva_handler(TMask_field& f, KEY k);
|
||||
static bool date_handler(TMask_field& f, KEY k);
|
||||
// Non permette la selezione multipla
|
||||
void fppro_selfatt() const;
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
public:
|
||||
struct riga_iva_s
|
||||
{
|
||||
real imponibile;
|
||||
real imposta;
|
||||
real aliquota;
|
||||
TString4 natura;
|
||||
char esigibilita;
|
||||
};
|
||||
struct scadenza_s
|
||||
{
|
||||
TDate data;
|
||||
real importo;
|
||||
};
|
||||
|
||||
bool should_bring_back() const { return _riporta; }
|
||||
bool is_doc_split();
|
||||
|
||||
void set_righeiva(const char* fpprokeys);
|
||||
void set_scadenze(const char* fpprokeys);
|
||||
void set_doc(const char* numero, const char* datadoc, const char* totdoc, const char* ritenute, const char* protfppro, const char* fpprokeys, const char* codforn, const char* piva);
|
||||
|
||||
TString get_numdoc() const { return _numero; }
|
||||
TDate get_datadoc() const { return _datadoc; }
|
||||
real get_totdoc() const { return _totdoc; }
|
||||
real get_ritenute() const { return _ritenute; }
|
||||
TString get_fpprokeys() const { return _fpprokeys; }
|
||||
TString get_codforn() const { return _codforn; }
|
||||
TString get_piva() const { return _piva; }
|
||||
const vector<riga_iva_s>& get_righeiva() const { return _righe_iva; }
|
||||
TProtocollo& get_protocollo() { return _protfppro; }
|
||||
vector<scadenza_s>& get_scadenze() { return _scadenze; }
|
||||
real get_tot_imp_riva();
|
||||
|
||||
|
||||
void add_rigaiva(const real& imponibile, const real& imposta, const real& aliquota, const TString4& natura, char esigib);
|
||||
void add_scad(const TDate& date, const real& importo);
|
||||
|
||||
|
||||
static TString& query_fppro(const TString& codforn, const TString& date);
|
||||
static TString& query_fppro(const TString& stato_piva, const TString& piva, const TString& date);
|
||||
static TString& query_fppro(const TString& codforn, const TString& stato_piva, const TString& piva, const TString& where_str, const TString& date, const TString& keyprginvio, const TString& keyheaderfatt, const TString& keybodyfatt, bool order = true, bool piva_research = false);
|
||||
static TString& query_string();
|
||||
|
||||
static void abilita_piva(TMask* msk);
|
||||
|
||||
// Carica documenti FPPRO sulla maschera
|
||||
static bool load_fppro_mask(TMask* msk, KEY k = 32);
|
||||
|
||||
TPro_msk() = delete;
|
||||
TPro_msk(TMask& cg_msk);
|
||||
virtual ~TPrimanota_application() { safe_delete(_pro_mask); }
|
||||
};
|
||||
|
||||
bool& is_f1();
|
||||
TString& num_doc_rif();
|
||||
|
||||
|
||||
|
||||
#ifndef __EXTRA__
|
||||
inline TPrimanota_application& app()
|
||||
|
@ -329,7 +329,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
|
||||
TMask& m = f.mask();
|
||||
TPrimanota_application& a = app();
|
||||
const bool set_scad = a.is_fattura() && m.page_enabled(2); // E' attiva pagina 3
|
||||
if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
||||
if (key == K_ENTER && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||
{
|
||||
if (set_scad && f.empty())
|
||||
{
|
||||
@ -356,7 +356,7 @@ bool TPrimanota_application::codpag_handler(TMask_field& f, KEY key)
|
||||
}
|
||||
}
|
||||
|
||||
if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->should_bring_back())))
|
||||
if (key == K_TAB && f.focusdirty() && m.insert_mode() && set_scad && (!a._f1_ini && (a._pro_mask == nullptr || !a._pro_mask->da_riportare())))
|
||||
a.set_scadenze(m);
|
||||
|
||||
return ok;
|
||||
@ -1227,8 +1227,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
||||
// Aggiornamento contopartita
|
||||
const TImporto old_importo(controsez, old_pag.get_real(PAGSCA_IMPORTO));
|
||||
TBill old_conto; old_conto.get(old_pag, true);
|
||||
|
||||
const TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
|
||||
TImporto new_importo(controsez, new_pag.get_real(PAGSCA_IMPORTO));
|
||||
|
||||
if (old_importo != new_importo || old_conto != new_conto)
|
||||
{
|
||||
@ -1298,7 +1297,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
||||
const real new_ritenute(new_pag.get(PAGSCA_RITENUTE));
|
||||
if (old_ritenute != new_ritenute)
|
||||
{
|
||||
const TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute);
|
||||
TImporto grow_ritenute(causale().sezione_ritfis(), new_ritenute - old_ritenute);
|
||||
const int riga = type2pos(cgrowtype_ritfis);
|
||||
|
||||
if (riga < 0)
|
||||
@ -1319,7 +1318,7 @@ bool TPrimanota_application::notify_edit_pagamento(TPartita& p, TRectype& new_pa
|
||||
const real new_ritsoc(new_pag.get(PAGSCA_RITSOC));
|
||||
if (old_ritsoc != new_ritsoc)
|
||||
{
|
||||
const TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc);
|
||||
TImporto grow_ritenute(causale().sezione_ritsoc(), new_ritsoc-old_ritsoc);
|
||||
const int riga = type2pos(cgrowtype_ritsoc);
|
||||
|
||||
if (riga < 0)
|
||||
|
@ -220,13 +220,14 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
|
||||
rilore_recset.set_var("#TPRA", tiporisorsa);
|
||||
rilore_recset.set_var("#CODICE", curr_risorsa);
|
||||
|
||||
if (!ignore && calc_ore_lav && rep.field("F1.201") != nullptr)
|
||||
if (!ignore && calc_ore_lav)// && rep.field("F1.201") != nullptr)
|
||||
{
|
||||
for (int d = 1; d <= 31; ++d)
|
||||
{
|
||||
TString8 fld = "H0."; fld << 200 + d;
|
||||
|
||||
rep.field(fld)->set("");
|
||||
if (rep.exist(fld))
|
||||
rep.field(fld)->set("");
|
||||
}
|
||||
}
|
||||
//aggiunta Adolfica: lista di commesse da considerare separatamente più commessa borraccione..
|
||||
@ -281,9 +282,6 @@ void TRil_ore_ris_mask::elabora_risorsa(const TString& curr_risorsa, const int c
|
||||
const real tot_ore_uso_risorsa_nel_periodo = tot_ore * giorni_lavorativi / giorni_lavorativi_rilore;
|
||||
const TString8 tpora = rilore_recset.get_string(RILORE_TPORA);
|
||||
const TString8 tpassenza = cache().get("&ORE", tpora, "S2");
|
||||
|
||||
if (tpassenza == "OA")
|
||||
int i = 1;
|
||||
|
||||
//crea la chiave per l'assoc_array
|
||||
TToken_string key;
|
||||
|
333
src/f1/f1lib.cpp
333
src/f1/f1lib.cpp
@ -20,20 +20,14 @@ TFppro& fppro_db()
|
||||
return *fppro;
|
||||
}
|
||||
|
||||
bool TFppro::sql_inj(const TString& str)
|
||||
{
|
||||
TString appo; appo << str;
|
||||
appo.upper();
|
||||
return appo.contains("--") || appo.contains("SELECT") || appo.contains("DELETE") || appo.contains("DROP");
|
||||
}
|
||||
|
||||
bool TFppro::sql_inj(const keys_s& keys)
|
||||
bool TFppro::sql_inj(TToken_string& keys)
|
||||
{
|
||||
TToken_string str("", ';');
|
||||
str.add(keys.prginvio);
|
||||
str.add(keys.headerfatt);
|
||||
str.add(keys.bodyfatt);
|
||||
return sql_inj(str);
|
||||
|
||||
str.add(keys.get(0));
|
||||
str.add(keys.get(1));
|
||||
str.add(keys.get(2));
|
||||
return str.contains("--") || str.contains("SELECT") || str.contains("DELETE") || str.contains("DROP");
|
||||
}
|
||||
|
||||
bool TFppro::check_reg(TToken_string& keys, int numreg)
|
||||
@ -44,68 +38,74 @@ bool TFppro::check_reg(TToken_string& keys, int numreg)
|
||||
bool TFppro::guess_the_doc(const TLocalisamfile& mov)
|
||||
{
|
||||
// Prendo il fornitore del mov per controllare la p.iva
|
||||
TLocalisamfile clifo(LF_CLIFO);
|
||||
clifo.put(CLI_TIPOCF, "F");
|
||||
const TString& codforn = mov.get(MOV_CODCF);
|
||||
clifo.put(CLI_CODCF, codforn);
|
||||
clifo.read();
|
||||
TString cli_statopiva, cli_piva;
|
||||
cli_statopiva << clifo.get(CLI_STATOPAIV);
|
||||
cli_piva << clifo.get(CLI_PAIV);
|
||||
TCli_for forn = cached_clifor('F', mov.get_long(MOV_CODCF));
|
||||
|
||||
const TString4 statopiva(forn.get(CLI_STATOPAIV));
|
||||
|
||||
const real tot = mov.get_real(MOV_TOTDOC) + mov.get_real(MOV_RITFIS) + mov.get_real(MOV_RITSOC);
|
||||
TString numdoc = mov.get(MOV_NUMDOCEXT);
|
||||
|
||||
if (numdoc.empty())
|
||||
numdoc = mov.get(MOV_NUMDOC);
|
||||
// Controllo datadoc - numdoc - totdoc - p.iva
|
||||
|
||||
TString query;
|
||||
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" <<
|
||||
"\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
|
||||
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
|
||||
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
|
||||
"WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" <<
|
||||
"(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') AND \n" <<
|
||||
(cli_statopiva.full() ? TString("P2_FISCIVAPAESE = '") << cli_statopiva << "' AND " : "") <<
|
||||
"P2_FISCIVACOD = '" << cli_piva << "' AND \n" << "PQ_IMPTOTDOC = " << tot;
|
||||
|
||||
query << "SELECT PQ_KEYPRGINVIO AS KEYPRGINVIO, PQ_KEYHEADERFATT AS KEYHEADERFATT, PQ_KEYBODYFATT AS KEYBODYFATT, P7_DATA AS DATA,\n" <<
|
||||
"\tP7_NUMERO AS NUMDOC, PQ_IMPTOTDOC AS IMPTOTDOC, P2_FISCIVAPAESE AS STATOPIVA, P2_FISCIVACOD AS PIVA FROM PAA2700F\n" <<
|
||||
"JOIN PAA0700F ON PQ_KEYPRGINVIO = P7_KEYPRGINVIO AND PQ_KEYHEADERFATT = P7_KEYHEADERFATT AND PQ_KEYBODYFATT = P7_KEYBODYFATT\n" <<
|
||||
"JOIN PAA0200F ON PQ_KEYPRGINVIO = P2_KEYPRGINVIO AND PQ_KEYHEADERFATT = P2_KEYHEADERFATT AND PQ_KEYBODYFATT = P2_KEYBODYFATT\n" <<
|
||||
"WHERE P7_DATA = '" << mov.get_date(MOV_DATADOC).date2ansi() << "' AND \n" <<
|
||||
"(P7_NUMERO = '" << numdoc << "' OR P7_NUMERO LIKE '%" << numdoc << "%') \n";
|
||||
if (statopiva.full())
|
||||
query << "' AND \n" << "P2_FISCIVAPAESE = '" << statopiva;
|
||||
query << "' AND \n" << "P2_FISCIVACOD = '" << forn.get(CLI_PAIV);
|
||||
if (forn.gruppo_IVA())
|
||||
query << "' AND \n" "P2_COCAZZO = '" << forn.get(CLI_COFI); // cazzo;
|
||||
query << "PQ_IMPTOTDOC = " << tot;
|
||||
|
||||
if (_db->sq_set_exec(query) && _db->sq_items() == 1)
|
||||
{
|
||||
_keys = { _db->sq_get("KEYPRGINVIO"), _db->sq_get("KEYHEADERFATT"), _db->sq_get("KEYBODYFATT") };
|
||||
_keys = _db->sq_get("KEYPRGINVIO");
|
||||
_keys.add(_db->sq_get("KEYHEADERFATT"));
|
||||
_keys.add(_db->sq_get("KEYBODYFATT"));
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* TFppro::get_keys_fppro() const
|
||||
const char* TFppro::get_keys_fppro()
|
||||
{
|
||||
static TString keys;
|
||||
keys.cut(0) << _keys.prginvio << ";" << _keys.headerfatt << ";" << _keys.bodyfatt;
|
||||
return (const char*)keys;
|
||||
TString& keys = get_tmp_string(64);
|
||||
|
||||
keys.cut(0) << _keys.get(0) << ";" << _keys.get(1) << ";" << _keys.get(2);
|
||||
return keys;
|
||||
}
|
||||
|
||||
int TFppro::get_numreg()
|
||||
long TFppro::get_numreg()
|
||||
{
|
||||
if (!_is_set)
|
||||
{
|
||||
if (set_query())
|
||||
return _db->sq_get_int("PZ_NUMREGCONT");
|
||||
return _db->sq_get_long("PZ_NUMREGCONT");
|
||||
return -1;
|
||||
}
|
||||
return _db->sq_get_int("PZ_NUMREGCONT");
|
||||
return _db->sq_get_long("PZ_NUMREGCONT");
|
||||
}
|
||||
|
||||
int TFppro::get_numreg(TToken_string& keys)
|
||||
long TFppro::get_numreg(TToken_string& keys)
|
||||
{
|
||||
set_keys(keys);
|
||||
return get_numreg();
|
||||
}
|
||||
|
||||
TString TFppro::get_codforn() const
|
||||
long TFppro::get_codforn()
|
||||
{
|
||||
TString query;
|
||||
|
||||
query << "SELECT PZ_CLIFOR FROM FPPRO00F\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return _db->sq_get("PZ_CLIFOR");
|
||||
return _db->sq_get_long("PZ_CLIFOR");
|
||||
}
|
||||
|
||||
TDate TFppro::get_datareg()
|
||||
@ -127,12 +127,13 @@ TDate TFppro::get_datareg(TToken_string& keys)
|
||||
return TDate();
|
||||
}
|
||||
|
||||
real TFppro::get_ritenute() const
|
||||
real TFppro::get_ritenute()
|
||||
{
|
||||
real imp = ZERO;
|
||||
real imp;
|
||||
TString query;
|
||||
|
||||
query << "SELECT P7_IMPORTORIT AS IMPORTO FROM PAA0700F\n" <<
|
||||
"WHERE P7_KEYPRGINVIO = '" << _keys.prginvio << "' AND P7_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P7_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
||||
"WHERE P7_KEYPRGINVIO = '" << _keys.get(0) << "' AND P7_KEYHEADERFATT = '" << _keys.get(1) << "' AND P7_KEYBODYFATT = '" << _keys.get(2) << "'";
|
||||
_db->sq_set_exec(query, false);
|
||||
for(bool ok = _db->sq_next(); ok; ok = _db->sq_next())
|
||||
imp += _db->sq_get_real("IMPORTO");
|
||||
@ -140,66 +141,69 @@ real TFppro::get_ritenute() const
|
||||
}
|
||||
|
||||
TFppro& TFppro::set_keys(TToken_string& keys)
|
||||
{
|
||||
if (keys.items() == 3)
|
||||
{
|
||||
const keys_s k = { keys.get(0), keys.get(1), keys.get(2) };
|
||||
return set_keys(k);
|
||||
}
|
||||
_is_set = false;
|
||||
_keys_setted = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
TFppro& TFppro::set_keys(const keys_s& keys)
|
||||
{
|
||||
if (sql_inj(keys))
|
||||
{
|
||||
TString msg; msg << "Database error: Possibile SQL INJECTION:\n" << keys;
|
||||
//throw std::exception(msg);
|
||||
;
|
||||
error_box(msg);
|
||||
_last_error.cut(0) << msg;
|
||||
}
|
||||
else if (!keys.prginvio.empty() && !keys.headerfatt.empty() && !keys.bodyfatt.empty())
|
||||
{
|
||||
_keys = keys;
|
||||
_keys_setted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_last_error.cut(0) << "Chiavi settate non valide:\n" << keys;
|
||||
_keys_setted = false;
|
||||
TString prginvio = keys.get(0);
|
||||
TString headerfatt = keys.get(1);
|
||||
TString bodyfatt = keys.get(2);
|
||||
|
||||
if (prginvio.full() && headerfatt.full() && bodyfatt.full())
|
||||
{
|
||||
_keys = keys;
|
||||
_keys_setted = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
_last_error = "Chiavi settate non valide:\n";
|
||||
_last_error << keys;
|
||||
_keys_setted = false;
|
||||
}
|
||||
}
|
||||
_is_set = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool TFppro::associa_mov(const int numreg) const
|
||||
bool TFppro::associa_mov(const long numreg)
|
||||
{
|
||||
bool ok;
|
||||
TLocalisamfile mov(LF_MOV);
|
||||
mov.put(MOV_NUMREG, numreg);
|
||||
if ((ok = mov.read() == NOERR))
|
||||
TRectype & mov = (TRectype &) cache().get(LF_MOV, numreg);
|
||||
bool ok = mov.full();
|
||||
|
||||
if (ok)
|
||||
{
|
||||
mov.put(MOV_KEYFPPRO, get_keys_fppro());
|
||||
if ((ok = mov.rewrite() == NOERR)) // Scrivo sul movimento il riferimento al fppro
|
||||
TString query;
|
||||
query << "UPDATE FPPRO00F \nSET " <<
|
||||
"PZ_TIPOCF = 'F', PZ_CLIFOR = '" << mov.get(MOV_CODCF) << "', PZ_NUMREGCONT = '" <<
|
||||
mov.get(MOV_NUMREG) << "', PZ_DATAREGCONT = '" << mov.get_date(MOV_DATAREG).date2ansi() << "'\n" <<
|
||||
fppro_db().where_str() << ";";
|
||||
ok = _db->sq_set_exec(query) && _db->sq_commit();
|
||||
|
||||
if (ok) // Scrivo sul movimento il riferimento al fppro
|
||||
{
|
||||
TString query;
|
||||
query << "UPDATE FPPRO00F \nSET " <<
|
||||
"PZ_TIPOCF = 'F', PZ_CLIFOR = '" << mov.get(MOV_CODCF) << "', PZ_NUMREGCONT = '" <<
|
||||
mov.get(MOV_NUMREG) << "', PZ_DATAREGCONT = '" << mov.get_date(MOV_DATAREG).date2ansi() << "'\n" <<
|
||||
fppro_db().where_str() << ";";
|
||||
if (!((ok = _db->sq_set_exec(query) && _db->sq_commit()))) // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro
|
||||
{
|
||||
mov.put(MOV_KEYFPPRO, "");
|
||||
mov.rewrite();
|
||||
}
|
||||
mov.put(MOV_IDDOCSDI, fppro_db().get_numdoc());
|
||||
mov.put(MOV_DATADOCSDI, fppro_db().get_numdoc());
|
||||
mov.put(MOV_KEYFPPRO, get_keys_fppro());
|
||||
ok = mov.rewrite() == NOERR;
|
||||
}
|
||||
else // Se la scrittura sul db fallisce levo sul movimento il riferimento all'fppro
|
||||
{
|
||||
mov.zero(MOV_IDDOCSDI);
|
||||
mov.zero(MOV_DATADOCSDI);
|
||||
mov.zero(MOV_KEYFPPRO);
|
||||
mov.rewrite();
|
||||
}
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
|
||||
const char* TFppro::get_tipoprot() const
|
||||
const TString & TFppro::get_tipoprot()
|
||||
{
|
||||
TString query;
|
||||
|
||||
@ -208,80 +212,98 @@ const char* TFppro::get_tipoprot() const
|
||||
return _db->sq_get("TIPOPROT");
|
||||
}
|
||||
|
||||
const char* TFppro::get_numprot() const
|
||||
const TString & TFppro::get_numprot()
|
||||
{
|
||||
TString query;
|
||||
static TString num;
|
||||
|
||||
query << "SELECT PZ_NUMPROT AS NUMPROT FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return num.cut(0) = _db->sq_get("NUMPROT");
|
||||
|
||||
return _db->sq_get("NUMPROT");
|
||||
}
|
||||
|
||||
const char* TFppro::get_annoprot() const
|
||||
const TString & TFppro::get_annoprot()
|
||||
{
|
||||
TString query;
|
||||
static TString anno;
|
||||
|
||||
query << "SELECT PZ_ANNOPROT AS ANNOPROT FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return anno.cut(0) = _db->sq_get("ANNOPROT");
|
||||
return _db->sq_get("ANNOPROT");
|
||||
}
|
||||
|
||||
const char* TFppro::get_dataoraric() const
|
||||
const TString & TFppro::get_dataoraric()
|
||||
{
|
||||
TString query;
|
||||
static TString data;
|
||||
query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str();
|
||||
TString & data = get_tmp_string(16);
|
||||
|
||||
query << "SELECT PZ_DATAORARIC AS DATAORARIC FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return data.cut(0) << _db->sq_get_date("DATAORARIC").date2ansi();
|
||||
data << _db->sq_get_date("DATAORARIC").date2ansi();
|
||||
return data;
|
||||
}
|
||||
|
||||
const char* TFppro::get_tipodoc() const
|
||||
const TString & TFppro::get_tipodoc()
|
||||
{
|
||||
TString query;
|
||||
static TString tipodoc;
|
||||
|
||||
query << "SELECT PZ_TIPODOC AS TIPODOC FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return tipodoc.cut(0) << _db->sq_get("TIPODOC");
|
||||
return _db->sq_get("TIPODOC");
|
||||
}
|
||||
|
||||
const char* TFppro::get_numdoc() const
|
||||
const TString & TFppro::get_numdoc()
|
||||
{
|
||||
TString query;
|
||||
static TString numdoc;
|
||||
|
||||
query << "SELECT PZ_NUMERO AS NUMDOC FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return numdoc.cut(0) << _db->sq_get("NUMDOC");
|
||||
return _db->sq_get("NUMDOC");
|
||||
}
|
||||
|
||||
TDate TFppro::get_data_first_doc() const
|
||||
{
|
||||
TString query;
|
||||
|
||||
query << "SELECT min(a.DATA) AS DATA \nFROM( \n\tSELECT P7_DATA as DATA \n" <<
|
||||
"\tFROM PAA0700F \n\tUNION \n\tSELECT P7_DATA as DATA \n\tFROM PAF0700F \n) a";
|
||||
_db->sq_set_exec(query);
|
||||
return _db->sq_get_date("DATA");
|
||||
}
|
||||
|
||||
TDate TFppro::get_dataorarioric() const
|
||||
TDate TFppro::get_data_doc()
|
||||
{
|
||||
TString query;
|
||||
|
||||
query << "SELECT PZ_DATA FROM FPPRO00F\r\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return _db->sq_get_date("PZ_DATA");
|
||||
}
|
||||
|
||||
|
||||
TDate TFppro::get_dataorarioric()
|
||||
{
|
||||
TString query;
|
||||
|
||||
query << "SELECT P1_DATAORARIC \nFROM PAA0100F \n" <<
|
||||
"WHERE P1_KEYPRGINVIO = '" << _keys.prginvio << "' AND P1_KEYHEADERFATT = '" << _keys.headerfatt << "' AND P1_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
||||
"WHERE P1_KEYPRGINVIO = '" << _keys.get(0) << "' AND P1_KEYHEADERFATT = '" << _keys.get(1) << "' AND P1_KEYBODYFATT = '" << _keys.get(2) << "'";
|
||||
_db->sq_set_exec(query);
|
||||
return _db->sq_get_date("P1_DATAORARIC");
|
||||
}
|
||||
|
||||
int TFppro::get_numregcont() const
|
||||
long TFppro::get_numregcont()
|
||||
{
|
||||
TString query;
|
||||
|
||||
query << "SELECT PZ_NUMREGCONT FROM FPPRO00F\n" << where_str();
|
||||
_db->sq_set_exec(query);
|
||||
return _db->sq_get_int("PZ_NUMREGCONT");
|
||||
return _db->sq_get_long("PZ_NUMREGCONT");
|
||||
}
|
||||
|
||||
TString TFppro::get_last_error(bool clear)
|
||||
{
|
||||
TString l(_last_error);
|
||||
TString & l = get_tmp_string(128);
|
||||
|
||||
l = _last_error;
|
||||
if(clear)
|
||||
_last_error.cut(0);
|
||||
return l;
|
||||
@ -297,14 +319,14 @@ bool TFppro::set_query()
|
||||
return _is_set = false;
|
||||
}
|
||||
|
||||
const char* TFppro::where_str() const
|
||||
const char* TFppro::where_str()
|
||||
{
|
||||
static TString str;
|
||||
str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.prginvio << "' AND PZ_KEYHEADERFATT = '" << _keys.headerfatt << "' AND PZ_KEYBODYFATT = '" << _keys.bodyfatt << "'";
|
||||
str.cut(0) << " WHERE PZ_KEYPRGINVIO = '" << _keys.get(0) << "' AND PZ_KEYHEADERFATT = '" << _keys.get(1) << "' AND PZ_KEYBODYFATT = '" << _keys.get(2) << "'";
|
||||
return str;
|
||||
}
|
||||
|
||||
TFppro::TFppro() : _keys({ "\0", "\0", "\0" }), _keys_setted(false), _is_set(false)
|
||||
TFppro::TFppro() : _keys("", ';'), _keys_setted(false), _is_set(false)
|
||||
{
|
||||
_db = new SSimple_query();
|
||||
const bool ok = set_connection(*_db);
|
||||
@ -322,13 +344,14 @@ prot_s TProtocollo::get_prot()
|
||||
return prot;
|
||||
}
|
||||
|
||||
TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres)
|
||||
const TString& TProtocollo::prot_in(const int year, const char* tipoprot, const char* progres) const
|
||||
{
|
||||
static TString protocollo;
|
||||
TString & protocollo = get_tmp_string(128);
|
||||
TString tipo(tipoprot);
|
||||
|
||||
if (tipo.empty())
|
||||
tipo << "no_prot";
|
||||
protocollo.cut(0) << year << "-" << tipo << "/" << progres;
|
||||
protocollo << year << "-" << tipo << "/" << progres;
|
||||
return protocollo;
|
||||
}
|
||||
|
||||
@ -348,7 +371,7 @@ void TProtocollo::sset(const char* prot)
|
||||
_progres = p.get();
|
||||
}
|
||||
|
||||
TString& TProtocollo::get_prot() const
|
||||
const TString& TProtocollo::get_prot() const
|
||||
{
|
||||
return prot_in(_year, _tipoprot, _progres);
|
||||
}
|
||||
@ -363,29 +386,21 @@ const char* get_ini_codcaus()
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, F1_CAUS);
|
||||
}
|
||||
|
||||
const char* get_codcaus(const char * tipodoc, const long codcf)
|
||||
const char* get_codcaus(const char * tipodoc, long codcf)
|
||||
{
|
||||
TLocalisamfile cfven(LF_CFVEN);
|
||||
cfven.put(CFV_TIPOCF, "F");
|
||||
cfven.put(CFV_CODCF, codcf);
|
||||
const char* codcaus = "";
|
||||
const char* codcausnc = "";
|
||||
TCli_for f = cached_clifor('F', codcf);
|
||||
const bool nc = TString(tipodoc) == "TD04";
|
||||
|
||||
if (cfven.read() == NOERR)
|
||||
{
|
||||
codcaus = cfven.get(CFV_CODCAUS);
|
||||
codcausnc = cfven.get(CFV_CODCAUSNC);
|
||||
}
|
||||
|
||||
if (nc)
|
||||
{
|
||||
if (!TString(codcausnc).empty())
|
||||
return codcausnc;
|
||||
const TString & codcaus = f.vendite().get(CFV_CODCAUSNC);
|
||||
if (codcaus.full())
|
||||
return codcaus;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!TString(codcaus).empty())
|
||||
const TString & codcaus = f.vendite().get(CFV_CODCAUS);
|
||||
if (codcaus.full())
|
||||
return codcaus;
|
||||
}
|
||||
return get_ini_codcaus();
|
||||
@ -396,12 +411,12 @@ bool get_endatareg()
|
||||
return ini_get_bool(FILE_CONFIG, FILE_SECTION, "endatareg");
|
||||
}
|
||||
|
||||
TString get_datainireg()
|
||||
const TString & get_datainireg()
|
||||
{
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, "datainireg");
|
||||
}
|
||||
|
||||
TString get_dataendreg()
|
||||
const TString & get_dataendreg()
|
||||
{
|
||||
return ini_get_string(FILE_CONFIG, FILE_SECTION, "dataendreg");
|
||||
}
|
||||
@ -444,74 +459,42 @@ bool check_causale(const TString& cod_caus, bool acq)
|
||||
|
||||
bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq)
|
||||
{
|
||||
const TCausale& caus = cached_causale(cod_caus);
|
||||
const TCausale& c = cached_causale(cod_caus);
|
||||
|
||||
if(tipo_doc == "FA" || tipo_doc == "BD" || tipo_doc == "AF" || tipo_doc == "FF")
|
||||
return caus.tipo_doc() == tipo_doc;
|
||||
return c.tipo_doc() == tipo_doc;
|
||||
|
||||
if (tipo_doc == "NC" || tipo_doc == "ND")
|
||||
{
|
||||
bool nota;
|
||||
bool nota_iva = false;
|
||||
if ((nota = caus.tipo_doc() == tipo_doc))
|
||||
|
||||
if ((nota = c.tipo_doc() == tipo_doc))
|
||||
{
|
||||
if (acq)
|
||||
nota_iva = caus.reg().tipo() == iva_acquisti;
|
||||
nota_iva = c.reg().tipo() == iva_acquisti;
|
||||
else
|
||||
nota_iva = caus.reg().tipo() == iva_vendite;
|
||||
nota_iva = c.reg().tipo() == iva_vendite;
|
||||
}
|
||||
return nota && nota_iva;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool check_caus_has_rit(const TString& cod_caus, bool rit)
|
||||
bool check_caus_has_rit(const TString& cod_caus, int year)
|
||||
{
|
||||
TLocalisamfile causali(LF_CAUSALI);
|
||||
causali.put(CAU_CODCAUS, cod_caus);
|
||||
causali.read();
|
||||
return *causali.get(CAU_M770) != '\0';
|
||||
const TCausale & c = cached_causale(cod_caus, year);
|
||||
|
||||
return c.causale_770().full();
|
||||
}
|
||||
|
||||
void run_cont_ini(bool liq)
|
||||
{
|
||||
static TString run_string;
|
||||
#ifdef DBG
|
||||
run_string.cut(0) << "cg2 -0 -i" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq? " -liq" : " ") << " /u" << user();
|
||||
#else
|
||||
run_string.cut(0) << "cg2 -0 -i" << TFilename().tempdir() << "\\" << F1_INIREGCONT << "*" << ".ini" << " -f1" << (liq ? " -liq" : " ") << " /u" << user();
|
||||
#endif
|
||||
TExternal_app(run_string).run();
|
||||
TString cmd;
|
||||
|
||||
cmd.cut(0) << "cg2 -0 -i" << TFilename().temp("cg2CONTAB", "ini") << " -f1" << (liq ? " -liq" : " ") << " /u" << user();
|
||||
|
||||
TExternal_app app(cmd);
|
||||
|
||||
app.run();
|
||||
}
|
||||
|
||||
void TF1_log::log(int severity, const char* msg)
|
||||
{
|
||||
if (_log == nullptr)
|
||||
{
|
||||
_log = new TLog_report("Stato contabilizzazione:");
|
||||
// Tento l'eliminazione del file
|
||||
std::remove("f1_cg.log");
|
||||
}
|
||||
|
||||
static TString txt;
|
||||
txt.cut(0) << msg;
|
||||
_log->log(severity, txt);
|
||||
// Scrivo anche su file
|
||||
std::filebuf fb;
|
||||
fb.open("f1_cg.log", std::ios::out | std::ios::app);
|
||||
std::ostream os(&fb);
|
||||
os << txt << std::endl;
|
||||
fb.close();
|
||||
}
|
||||
|
||||
bool TF1_log::show_log()
|
||||
{
|
||||
if (_log)
|
||||
{
|
||||
_log->preview();
|
||||
delete _log;
|
||||
_log = nullptr;
|
||||
}
|
||||
return true;
|
||||
}
|
@ -7,8 +7,8 @@
|
||||
|
||||
#define FILE_CONFIG CONFIG_DITTA
|
||||
#define FILE_SECTION "f1"
|
||||
#define F1_INIREGCONT "cgreg"
|
||||
#define F1_CAUS "caus"
|
||||
#define F1_INIREGCONT "cg2CONTAB"
|
||||
#define LOG_MSG 0
|
||||
#define LOG_WARN 1
|
||||
#define LOG_ERR 2
|
||||
@ -39,63 +39,48 @@ typedef struct _prot_s
|
||||
*/
|
||||
class TFppro : public TObject
|
||||
{
|
||||
struct keys_s
|
||||
{
|
||||
TString prginvio;
|
||||
TString headerfatt;
|
||||
TString bodyfatt;
|
||||
|
||||
operator const char*() const
|
||||
{
|
||||
static TToken_string a("", ';');
|
||||
a.add(prginvio);
|
||||
a.add(headerfatt);
|
||||
a.add(bodyfatt);
|
||||
return a;
|
||||
}
|
||||
} _keys;
|
||||
|
||||
TToken_string _keys;
|
||||
SSimple_query* _db;
|
||||
bool _keys_setted;
|
||||
bool _is_set; // Query is setted
|
||||
TString _fppro_query;
|
||||
TString _last_error;
|
||||
|
||||
static bool sql_inj(const TString& str);
|
||||
static bool sql_inj(const keys_s& keys);
|
||||
bool sql_inj(TToken_string& keys);
|
||||
public:
|
||||
const char* where_str() const;
|
||||
const char* where_str();
|
||||
|
||||
bool check_reg(TToken_string& keys, int numreg);
|
||||
// Se un mov. registrato non e' collegato all'FPPRO cerco di capire qual'e`
|
||||
bool guess_the_doc(const TLocalisamfile& mov);
|
||||
// Getters
|
||||
const char* get_keys_fppro() const;
|
||||
int get_numreg();
|
||||
int get_numreg(TToken_string& keys);
|
||||
TString get_codforn() const;
|
||||
const char* get_keys_fppro();
|
||||
long get_numreg();
|
||||
long get_numreg(TToken_string& keys);
|
||||
long get_codforn();
|
||||
TDate get_datareg();
|
||||
TDate get_datareg(TToken_string& keys);
|
||||
real get_ritenute() const;
|
||||
real get_ritenute();
|
||||
TDate get_data_first_doc() const;
|
||||
TDate get_dataorarioric() const;
|
||||
int get_numregcont() const;
|
||||
TDate get_dataorarioric();
|
||||
long get_numregcont();
|
||||
|
||||
|
||||
TString get_last_error(bool clear = true);
|
||||
// Setters
|
||||
bool set_query();
|
||||
TFppro& set_keys(TToken_string& keys);
|
||||
TFppro& set_keys(const keys_s& keys);
|
||||
|
||||
bool associa_mov(int numreg) const;
|
||||
const char* get_tipoprot() const;
|
||||
const char* get_numprot() const;
|
||||
const char* get_annoprot() const;
|
||||
const char* get_dataoraric() const;
|
||||
const char* get_tipodoc() const;
|
||||
const char* get_numdoc() const;
|
||||
bool associa_mov(long numreg);
|
||||
const TString & get_tipoprot();
|
||||
const TString & get_numprot();
|
||||
const TString & get_annoprot();
|
||||
const TString & get_dataoraric();
|
||||
const TString & get_tipodoc();
|
||||
const TString & get_numdoc();
|
||||
TDate get_data_doc();
|
||||
|
||||
TFppro();
|
||||
TFppro();
|
||||
TFppro(TToken_string& keys) : TFppro() { set_keys(keys); }
|
||||
};
|
||||
|
||||
@ -111,37 +96,30 @@ public:
|
||||
|
||||
void set(const TProtocollo& prot);
|
||||
void sset(const char* prot);
|
||||
TString& get_prot() const;
|
||||
const TString& get_prot() const;
|
||||
prot_s get_prot();
|
||||
|
||||
int get_year() const { return _year; }
|
||||
TString& get_tipoprot() { return _tipoprot; }
|
||||
TString& get_progres() { return _progres; }
|
||||
|
||||
|
||||
static TString& prot_in(int year, const char* tipoprot, const char* progres);
|
||||
|
||||
operator const char*() const { return static_cast<const char*>(get_prot()); }
|
||||
|
||||
const TString& get_tipoprot() const { return _tipoprot; }
|
||||
const TString& get_progres() const { return _progres; }
|
||||
const TString& prot_in(int year, const char* tipoprot, const char* progres) const;
|
||||
};
|
||||
|
||||
class TF1_log : TObject
|
||||
class TF1_log : public TLog_report
|
||||
{
|
||||
TLog_report* _log;
|
||||
public:
|
||||
TF1_log() : _log(nullptr){}
|
||||
void log(int severity, const char* msg);
|
||||
bool show_log();
|
||||
TF1_log() : TLog_report("Stato contabilizzazione:") {}
|
||||
bool show_log() { export_text("f1_cg.log", 0, false); return preview(); }
|
||||
};
|
||||
|
||||
TFppro& fppro_db();
|
||||
|
||||
const char* get_ini_codcaus();
|
||||
const char* get_codcaus(const char * tipodoc, const long codcf);
|
||||
const char* get_codcaus(const char * tipodoc, long codcf);
|
||||
bool get_endatareg();
|
||||
TString get_datainireg();
|
||||
TString get_dataendreg();
|
||||
bool get_periodprec();
|
||||
const TString & get_datainireg();
|
||||
const TString & get_dataendreg();
|
||||
bool get_periodprec();
|
||||
|
||||
void set_ini_codcaus(const TString& codcaus);
|
||||
void set_endatareg(bool enable);
|
||||
@ -153,7 +131,7 @@ void set_periodprec(bool flag);
|
||||
bool check_causale(const TString& cod_caus, bool acq = true);
|
||||
// Controlla se il "cod_caus" ha come "tipo_doc" FA o NC (di acquisto)
|
||||
bool check_causale(const TString& cod_caus, const TString& tipo_doc, bool acq = true);
|
||||
bool check_caus_has_rit(const TString& cod_caus, bool rit);
|
||||
bool check_caus_has_rit(const TString& cod_caus, int year = 0);
|
||||
void run_cont_ini(bool liq);
|
||||
|
||||
#endif // _F1LIB_H_
|
||||
|
@ -690,7 +690,8 @@ public:
|
||||
TReport_field* curr_field() const { return _curr_field; }
|
||||
|
||||
int parse_field(const char* code, char& type, int& level, int& id) const;
|
||||
TReport_field* field(const char* code);
|
||||
TReport_field* field(const char* code);
|
||||
bool exist(const char* code) { return field(code) != nullptr; };
|
||||
|
||||
virtual bool set_var(const TString& name, const TVariant& var) { return set_usr_val(name, var); }
|
||||
|
||||
|
15
src/ps/cast/aa.qry
Normal file
15
src/ps/cast/aa.qry
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<query Name="aa">
|
||||
<description>
|
||||
</description>
|
||||
<tables>
|
||||
<table Name="CLIFO" Num="20" />
|
||||
</tables>
|
||||
<fields>
|
||||
<field Name="TIPOCF" ExprTo="F" Table="CLIFO" ExprFrom="F" />
|
||||
<field Name="CODCF" Table="CLIFO" />
|
||||
<field Name="RAGSOC" Table="CLIFO" />
|
||||
</fields>
|
||||
<sql>
|
||||
</sql>
|
||||
</query>
|
8
src/ps/cast/cgaddon.men
Normal file
8
src/ps/cast/cgaddon.men
Normal file
@ -0,0 +1,8 @@
|
||||
[CGADDON]
|
||||
Caption = "Personalizzazioni"
|
||||
Module = 0
|
||||
Flags = ""
|
||||
Item_01 = "Importazione Clienti", "cg0.exe -1 -iC:\TEMPprassi\CLIENTE*.ini /uADMIN"
|
||||
Item_02 = "Importazione Fatture", "cg2.exe -0 -iC:\TEMPprassiFatt\FATTUR*.ini /uADMIN"
|
||||
Item_03 = "Esp. Saldi per Contr. Cast", "ba8.exe -1 saldi_c X"
|
||||
Item_03 = "Esp. Saldi per Contr. Magazzino", "ba8.exe -1 saldi_m X"
|
258
src/ps/cast/saldi_c.msk
Normal file
258
src/ps/cast/saldi_c.msk
Normal file
@ -0,0 +1,258 @@
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
BU 24 2 2
|
||||
BE
|
||||
PR 1 1 "Elabora"
|
||||
PI 120
|
||||
EN
|
||||
BU 25 2 2
|
||||
BE
|
||||
PR 2 1 "Imposta"
|
||||
PI 165
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 1 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 33 2 2
|
||||
BE
|
||||
PR 1 1 "Info"
|
||||
ME EXIT,332
|
||||
PI 162
|
||||
EN
|
||||
BU 34 2 2
|
||||
BE
|
||||
PR 2 1 "Help"
|
||||
ME EXIT,331
|
||||
PI 163
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 0 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 9 2 2
|
||||
BE
|
||||
PR 3 1 "Fine"
|
||||
ME EXIT,20334
|
||||
PI 114
|
||||
EN
|
||||
EN
|
||||
PA "Stampa Saldi con Contropartita" -1 -1 76 16
|
||||
NU 101 5
|
||||
BE
|
||||
PR 2 1 "Ditta "
|
||||
FL "FRD"
|
||||
US 9 KE 1
|
||||
CH REQUIRED
|
||||
IN CODDITTA 101
|
||||
DI "Codice" CODDITTA
|
||||
DI "Ragione sociale @50" RAGSOC
|
||||
OU 101 CODDITTA
|
||||
OU 104 RAGSOC
|
||||
EN
|
||||
ST 104 50
|
||||
BE
|
||||
PR 2 2 "Ragione sociale "
|
||||
FL "D"
|
||||
EN
|
||||
|
||||
NU 106 4
|
||||
BE
|
||||
PR 2 3 "Codice esercizio "
|
||||
HE "Esercizio di cui si vuole ottenere il bilancio"
|
||||
US ESC
|
||||
IN CODTAB 106
|
||||
DI "Codice" CODTAB
|
||||
DI "Data inizio esercizio" D0
|
||||
DI "Data fine esercizio" D1
|
||||
OU 106 CODTAB
|
||||
FL "Z"
|
||||
CH NORMAL
|
||||
WA "L'esercizio non esiste"
|
||||
FI ANNOSEL
|
||||
ME 0 CLEAR,4@
|
||||
ME ENABLE,4@
|
||||
EN
|
||||
DA 109
|
||||
BE
|
||||
PR 2 4 "Periodo da Data "
|
||||
HE "Data dalla quale si vuole la stampa"
|
||||
FI DADATA
|
||||
EN
|
||||
NU 112 2
|
||||
BE
|
||||
PR 2 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #109[7,8]
|
||||
FI DAG
|
||||
DR 109
|
||||
EN
|
||||
NU 113 2
|
||||
BE
|
||||
PR 6 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #109[5,6]
|
||||
FI DAM
|
||||
DR 109
|
||||
EN
|
||||
|
||||
DA 110
|
||||
BE
|
||||
PR 35 4 "A Data "
|
||||
HE "Data fino alla quale si vuole la stampa"
|
||||
FI ADATA
|
||||
EN
|
||||
NU 114 2
|
||||
BE
|
||||
PR 42 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #110[7,8]
|
||||
FI AGIO
|
||||
DR 110
|
||||
EN
|
||||
NU 115 2
|
||||
BE
|
||||
PR 46 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #110[5,6]
|
||||
FI AM
|
||||
DR 110
|
||||
EN
|
||||
|
||||
|
||||
|
||||
GR -1 55 6
|
||||
BE
|
||||
PR 2 6 "@bSelezione sui conti"
|
||||
EN
|
||||
NU 132 3
|
||||
BE
|
||||
PR 3 7 "Da: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 132
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DGR
|
||||
EN
|
||||
NU 133 3
|
||||
BE
|
||||
PR 23 7 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DCNT
|
||||
EN
|
||||
NU 134 6
|
||||
BE
|
||||
PR 36 7 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
IN SOTTOCONTO 134
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 134 SOTTOCONTO
|
||||
OU 132 GRUPPO
|
||||
OU 133 CONTO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DSTCNT
|
||||
FL "H"
|
||||
EN
|
||||
ST 135 50
|
||||
BE
|
||||
PR 3 8 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 135
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 134 SOTTOCONTO
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
NU 136 3
|
||||
BE
|
||||
PR 3 9 "A: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 136
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI AGR
|
||||
EN
|
||||
NU 137 3
|
||||
BE
|
||||
PR 23 9 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ACNT
|
||||
EN
|
||||
NU 138 6
|
||||
BE
|
||||
PR 36 9 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
IN SOTTOCONTO 138
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 138 SOTTOCONTO
|
||||
OU 136 GRUPPO
|
||||
OU 137 CONTO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ASTCNT
|
||||
FL "H"
|
||||
EN
|
||||
ST 139 50
|
||||
BE
|
||||
PR 3 10 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 139
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 138 SOTTOCONTO
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
BO 401
|
||||
BE
|
||||
PR 3 12 "Stampa i Totali"
|
||||
FI SHOW_TOT
|
||||
FL "H"
|
||||
EN
|
||||
EN
|
||||
ENDMASK
|
10
src/ps/cast/saldi_c.qry
Normal file
10
src/ps/cast/saldi_c.qry
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<query Name="saldi_c">
|
||||
<description>Saldi per contropartita cast</description>
|
||||
<sql>ODBC(cast)
|
||||
SELECT rmov.datareg,mov.codcaus,caus.descr,mov.descr, rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.sezione,iif(rmov.sezione='A',-rmov.IMPORTO,rmov.IMPORTO),mov.numdoc,mov.datadoc,mov.protiva,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC,iif(rmov.tipocc='',pcon.descr,clifo.ragsoc),rmov.gruppo*100+rmov.conto as mastro
|
||||
FROM RMOV join mov on (rmov.numreg=mov.numreg) left join clifo on (rmov.tipocc=clifo.tipocf and rmov.sottocontc=clifo.codcf) left join pcon on (rmov.gruppoc=pcon.gruppo and rmov.contoc=pcon.conto and rmov.sottocontc=pcon.sottoconto) left join caus on (caus.codcaus=mov.codcaus)
|
||||
where rmov.annoes=#ANNOSEL and (rmov.dataregE;=datetime(#ANNOSEL,#DAM,#DAG)) and (rmov.dataregC;=datetime(#ANNOSEL,#AM,#AGIO))
|
||||
ORDER BY rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC
|
||||
HAVING mastroE;=(#DGR*100+#DCNT) and mastroC;=(#AGR*100+#ACNT)</sql>
|
||||
</query>
|
219
src/ps/cast/saldi_controp.msk
Normal file
219
src/ps/cast/saldi_controp.msk
Normal file
@ -0,0 +1,219 @@
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
BU 24 2 2
|
||||
BE
|
||||
PR 1 1 "Stampa"
|
||||
PI 118
|
||||
EN
|
||||
BU 25 2 2
|
||||
BE
|
||||
PR 2 1 "Imposta"
|
||||
PI 165
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 1 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 33 2 2
|
||||
BE
|
||||
PR 1 1 "Info"
|
||||
ME EXIT,332
|
||||
PI 162
|
||||
EN
|
||||
BU 34 2 2
|
||||
BE
|
||||
PR 2 1 "Help"
|
||||
ME EXIT,331
|
||||
PI 163
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 0 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 9 2 2
|
||||
BE
|
||||
PR 3 1 "Fine"
|
||||
ME EXIT,20334
|
||||
PI 114
|
||||
EN
|
||||
EN
|
||||
PA "Stampa Saldi con Contropartita" -1 -1 76 16
|
||||
NU 101 5
|
||||
BE
|
||||
PR 2 1 "Ditta "
|
||||
FL "FRD"
|
||||
US 9 KE 1
|
||||
CH REQUIRED
|
||||
IN CODDITTA 101
|
||||
DI "Codice" CODDITTA
|
||||
DI "Ragione sociale @50" RAGSOC
|
||||
OU 101 CODDITTA
|
||||
OU 104 RAGSOC
|
||||
EN
|
||||
ST 104 50
|
||||
BE
|
||||
PR 2 2 "Ragione sociale "
|
||||
FL "D"
|
||||
EN
|
||||
|
||||
NU 106 4
|
||||
BE
|
||||
PR 2 3 "Codice esercizio "
|
||||
HE "Esercizio di cui si vuole ottenere il bilancio"
|
||||
US ESC
|
||||
IN CODTAB 106
|
||||
DI "Codice" CODTAB
|
||||
DI "Data inizio esercizio" D0
|
||||
DI "Data fine esercizio" D1
|
||||
OU 106 CODTAB
|
||||
FL "Z"
|
||||
CH NORMAL
|
||||
WA "L'esercizio non esiste"
|
||||
FI ANNOSEL
|
||||
ME 0 CLEAR,4@
|
||||
ME ENABLE,4@
|
||||
EN
|
||||
DA 109
|
||||
BE
|
||||
PR 2 4 "Periodo da Data "
|
||||
HE "Data dalla quale si vuole la stampa"
|
||||
FI DADATA
|
||||
EN
|
||||
DA 110
|
||||
BE
|
||||
PR 35 4 "A Data "
|
||||
HE "Data fino alla quale si vuole la stampa"
|
||||
FI ADATA
|
||||
EN
|
||||
GR -1 55 6
|
||||
BE
|
||||
PR 2 6 "@bSelezione sui conti"
|
||||
EN
|
||||
NU 132 3
|
||||
BE
|
||||
PR 3 7 "Da: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 132
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DGR
|
||||
EN
|
||||
NU 133 3
|
||||
BE
|
||||
PR 23 7 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DCNT
|
||||
EN
|
||||
NU 134 6
|
||||
BE
|
||||
PR 36 7 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
IN SOTTOCONTO 134
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 134 SOTTOCONTO
|
||||
OU 132 GRUPPO
|
||||
OU 133 CONTO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DSTCNT
|
||||
EN
|
||||
ST 135 50
|
||||
BE
|
||||
PR 3 8 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 135
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 134 SOTTOCONTO
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
NU 136 3
|
||||
BE
|
||||
PR 3 9 "A: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 136
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI AGR
|
||||
EN
|
||||
NU 137 3
|
||||
BE
|
||||
PR 23 9 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ACNT
|
||||
EN
|
||||
NU 138 6
|
||||
BE
|
||||
PR 36 9 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
IN SOTTOCONTO 138
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 138 SOTTOCONTO
|
||||
OU 136 GRUPPO
|
||||
OU 137 CONTO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ASTCNT
|
||||
EN
|
||||
ST 139 50
|
||||
BE
|
||||
PR 3 10 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 139
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 138 SOTTOCONTO
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
BO 401
|
||||
BE
|
||||
PR 3 12 "Stampa i Totali"
|
||||
FI SHOW_TOT
|
||||
EN
|
||||
EN
|
||||
ENDMASK
|
206
src/ps/cast/saldi_controp.rep
Normal file
206
src/ps/cast/saldi_controp.rep
Normal file
@ -0,0 +1,206 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<report name="saldi_controp" orientation="2" lpi="6">
|
||||
<description>query saldi per contropartita</description>
|
||||
<font face="Courier New" size="10" />
|
||||
<section type="Head" pattern="1">
|
||||
<font face="Arial" bold="1" size="8" />
|
||||
<field x="9" type="Testo" align="right" width="6" pattern="1" text="STCN" />
|
||||
<field x="69" type="Testo" width="1" id="5" pattern="1" text="T" />
|
||||
<field x="1" type="Testo" align="right" width="3" id="10" pattern="1" text="GR" />
|
||||
<field x="70.5" type="Testo" align="right" width="3" id="10" pattern="1" text="GRC" />
|
||||
<field x="5" type="Testo" align="right" width="3" id="20" pattern="1" text="CN" />
|
||||
<field x="74.5" type="Testo" align="right" width="3" id="20" pattern="1" text="CNC" />
|
||||
<field x="78.5" type="Testo" align="right" width="6" id="30" pattern="1" text="STCNC" />
|
||||
<field x="16" type="Testo" width="40" id="40" pattern="1" text="DESCRIZIONE" />
|
||||
<field x="85" type="Testo" width="25" id="80" pattern="1" text="DESCRIZIONE CONTROPARTITA" />
|
||||
<field x="35" y="2" type="Stringa" hidden="1" align="right" bg_color="#80FF80" width="11" id="100" pattern="2">
|
||||
<source>"SALDO-" +(#ANNOSEL-1)</source>
|
||||
</field>
|
||||
<field x="57" type="Stringa" align="right" bg_color="#FF80C0" width="11" height="2" id="200" pattern="1">
|
||||
<source>"SALDO al " +#ADATA</source>
|
||||
</field>
|
||||
<field x="46" y="2" type="Testo" hidden="1" align="right" bg_color="#E8E8E8" width="11" id="300" pattern="2" text="TOTALE" />
|
||||
<field border="1" x="1" type="Rettangolo" width="132" height="2" id="1000" pattern="1" />
|
||||
</section>
|
||||
<section type="Head" level="1" pattern="1" />
|
||||
<section type="Head" level="2" hidden="1" pattern="1">
|
||||
<groupby>GRUPPO+CONTO+SOTTOCONTO</groupby>
|
||||
<prescript description="H2 PRESCRIPT">MESSAGE RESET,F2</prescript>
|
||||
<field type="Stringa" width="1" id="5" pattern="1">
|
||||
<source>RMOV.TIPOC</source>
|
||||
</field>
|
||||
<field x="1" type="Numero" align="right" width="3" id="10" pattern="1">
|
||||
<source>RMOV.GRUPPO</source>
|
||||
</field>
|
||||
<field x="5" type="Numero" align="right" width="3" id="20" pattern="1">
|
||||
<source>RMOV.CONTO</source>
|
||||
</field>
|
||||
<field x="9" type="Numero" align="right" width="6" id="30" pattern="1">
|
||||
<source>RMOV.SOTTOCONTO</source>
|
||||
</field>
|
||||
<field x="16" type="Stringa" width="50" id="40" pattern="1">
|
||||
<source>PCON.DESCR</source>
|
||||
</field>
|
||||
<field x="67" type="Stringa" width="50" id="50" pattern="1">
|
||||
<prescript description="H2.50 PRESCRIPT">MESSAGE ISAMREAD,20,TIPOCF=#5!CODCF=#30,RAGSOC</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Head" level="3" hidden="1" pattern="1">
|
||||
<groupby>GRUPPOC+CONTOC+SOTTOCONTC</groupby>
|
||||
<prescript description="H3 PRESCRIPT">MESSAGE RESET,F3</prescript>
|
||||
<field x="4" type="Stringa" width="1" id="5" pattern="1">
|
||||
<source>RMOV.TIPOCC</source>
|
||||
</field>
|
||||
<field x="6" type="Numero" align="right" width="3" id="10" pattern="1">
|
||||
<source>RMOV.GRUPPOC</source>
|
||||
</field>
|
||||
<field x="10" type="Numero" align="right" width="3" id="20" pattern="1">
|
||||
<source>RMOV.CONTOC</source>
|
||||
</field>
|
||||
<field x="14" type="Numero" align="right" width="6" id="30" pattern="1">
|
||||
<source>RMOV.SOTTOCONTC</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Body" pattern="1" />
|
||||
<section type="Body" level="1" hidden="1" pattern="1">
|
||||
<condition>ANNOES=(#ANNOSEL-1)</condition>
|
||||
<font face="Arial" size="8" />
|
||||
<field x="10" type="Data" width="10" pattern="1">
|
||||
<source>RMOV.DATAREG</source>
|
||||
</field>
|
||||
<field x="21" type="Numero" align="right" link="23.NUMREG" width="7" pattern="1">
|
||||
<source>RMOV.NUMREG</source>
|
||||
</field>
|
||||
<field x="30" type="Stringa" width="3" pattern="1">
|
||||
<source>MOV.CODCAUS</source>
|
||||
</field>
|
||||
<field x="93" type="Stringa" align="right" width="1" pattern="1">
|
||||
<source>RMOV.TIPOCC</source>
|
||||
</field>
|
||||
<field x="94.5" type="Numero" align="right" width="3" pattern="1">
|
||||
<source>RMOV.GRUPPOC</source>
|
||||
</field>
|
||||
<field x="98.5" type="Numero" align="right" width="3" pattern="1">
|
||||
<source>RMOV.CONTOC</source>
|
||||
</field>
|
||||
<field x="102.5" type="Numero" align="right" width="6" pattern="1">
|
||||
<source>RMOV.SOTTOCONTC</source>
|
||||
</field>
|
||||
<field x="55" type="Stringa" width="1" id="10" pattern="1">
|
||||
<source>RMOV.SEZIONE</source>
|
||||
</field>
|
||||
<field x="57" type="Valuta" align="right" bg_color="#80FF80" width="11" id="100" pattern="2" text="###.###.###,@@">
|
||||
<source>IF(NUM(RMOV.SEZIONE="A"),RMOV.IMPORTO,-RMOV.IMPORTO)</source>
|
||||
<prescript description="B1.100 PRESCRIPT">MESSAGE ADD,F3.100</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Body" level="2" hidden="1" pattern="1">
|
||||
<condition>ANNOES=#ANNOSEL</condition>
|
||||
<font face="Arial" size="8" />
|
||||
<field x="10" type="Data" width="10" pattern="1">
|
||||
<source>RMOV.DATAREG</source>
|
||||
</field>
|
||||
<field x="21" type="Numero" align="right" link="23.NUMREG" width="7" pattern="1">
|
||||
<source>RMOV.NUMREG</source>
|
||||
</field>
|
||||
<field x="30" type="Stringa" width="3" pattern="1">
|
||||
<source>MOV.CODCAUS</source>
|
||||
</field>
|
||||
<field x="67" type="Stringa" width="1" pattern="1">
|
||||
<source>RMOV.SEZIONE</source>
|
||||
</field>
|
||||
<field x="93" type="Stringa" align="right" width="1" pattern="1">
|
||||
<source>RMOV.TIPOCC</source>
|
||||
</field>
|
||||
<field x="94.5" type="Numero" align="right" width="3" pattern="1">
|
||||
<source>RMOV.GRUPPOC</source>
|
||||
</field>
|
||||
<field x="98.5" type="Numero" align="right" width="3" pattern="1">
|
||||
<source>RMOV.CONTOC</source>
|
||||
</field>
|
||||
<field x="102.5" type="Numero" align="right" width="6" pattern="1">
|
||||
<source>RMOV.SOTTOCONTC</source>
|
||||
</field>
|
||||
<field x="69" type="Valuta" align="right" bg_color="#FF80C0" width="11" id="200" pattern="1" text="###.###.###,@@">
|
||||
<source>IF(NUM(RMOV.SEZIONE="A"),RMOV.IMPORTO,-RMOV.IMPORTO)</source>
|
||||
<prescript description="B2.200 PRESCRIPT">MESSAGE ADD,F3.200</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" pattern="1" />
|
||||
<section type="Foot" level="1" pattern="1" />
|
||||
<section type="Foot" level="2" hidden="1" bg_color="#C0C0C0" pattern="1">
|
||||
<font face="Arial" bold="1" size="8" />
|
||||
<field type="Stringa" hidden="1" width="1" pattern="1">
|
||||
<source>#SHOW_TOT</source>
|
||||
<prescript description="F2.0 PRESCRIPT">MESSAGE EMPTY HIDE,F2
|
||||
MESSAGE SHOW,F2</prescript>
|
||||
</field>
|
||||
<field x="1" type="Numero" align="right" width="3" id="10" pattern="1">
|
||||
<source>#H2.10</source>
|
||||
</field>
|
||||
<field x="5" type="Numero" align="right" width="3" id="20" pattern="1">
|
||||
<source>#H2.20</source>
|
||||
</field>
|
||||
<field x="9" type="Numero" align="right" width="6" id="30" pattern="1">
|
||||
<source>#H2.30</source>
|
||||
</field>
|
||||
<field x="16" type="Stringa" width="40" id="40" pattern="1">
|
||||
<source>#H2.40</source>
|
||||
</field>
|
||||
<field x="45" y="1" type="Valuta" hidden="1" align="right" bg_color="#80FF80" width="11" id="100" pattern="2" hide_zero="1" text="###.###.###,@@" />
|
||||
<field x="57" type="Valuta" align="right" bg_color="#FF80C0" width="11" id="200" pattern="1" hide_zero="1" text="###.###.###,@@" />
|
||||
<field x="81" type="Valuta" hidden="1" align="right" bg_color="#E8E8E8" width="11" id="300" pattern="2" text="###.###.###,@@">
|
||||
<source>#100+#200</source>
|
||||
</field>
|
||||
</section>
|
||||
<section type="Foot" level="3" pattern="1">
|
||||
<field x="69" type="Stringa" width="1" id="5" pattern="1">
|
||||
<source>#H3.5</source>
|
||||
</field>
|
||||
<field x="1" type="Numero" align="right" width="3" id="10" pattern="1">
|
||||
<source>#H2.10</source>
|
||||
</field>
|
||||
<field x="70.5" type="Numero" align="right" width="3" id="10" pattern="1">
|
||||
<source>#H3.10</source>
|
||||
</field>
|
||||
<field x="5" type="Numero" align="right" width="3" id="20" pattern="1">
|
||||
<source>#H2.20</source>
|
||||
</field>
|
||||
<field x="74.5" type="Numero" align="right" width="3" id="20" pattern="1">
|
||||
<source>#H3.20</source>
|
||||
</field>
|
||||
<field x="9" type="Numero" align="right" width="6" id="30" pattern="1">
|
||||
<source>#H2.30</source>
|
||||
</field>
|
||||
<field x="78.5" type="Numero" align="right" width="6" id="30" pattern="1">
|
||||
<source>#H3.30</source>
|
||||
</field>
|
||||
<field x="16" type="Stringa" width="40" id="40" pattern="1">
|
||||
<source>#H2.40</source>
|
||||
<alt_source>#H2.50</alt_source>
|
||||
</field>
|
||||
<field x="85" type="Stringa" width="25" id="80" pattern="1">
|
||||
<prescript description="F3.80 PRESCRIPT">MESSAGE ISAMREAD,19,GRUPPO=#10!CONTO=#20!SOTTOCONTO=#30,DESCR</prescript>
|
||||
</field>
|
||||
<field x="85" type="Stringa" width="25" id="90" pattern="1">
|
||||
<prescript description="F3.90 PRESCRIPT">MESSAGE ISAMREAD,20,TIPOCF=#5!CODCF=#30,RAGSOC</prescript>
|
||||
</field>
|
||||
<field x="45" y="1" type="Valuta" hidden="1" align="right" bg_color="#80FF80" width="11" id="100" pattern="2" hide_zero="1" text="###.###.###,@@">
|
||||
<prescript description="F3.100 PRESCRIPT">MESSAGE ADD,F2.100</prescript>
|
||||
</field>
|
||||
<field x="57" type="Valuta" align="right" bg_color="#FF80C0" width="11" id="200" pattern="1" hide_zero="1" text="###.###.###,@@">
|
||||
<prescript description="F3.200 PRESCRIPT">MESSAGE ADD,F2.200</prescript>
|
||||
</field>
|
||||
<field x="57" y="1" type="Valuta" hidden="1" align="right" bg_color="#E8E8E8" width="11" id="300" pattern="2" text="###.###.###,@@">
|
||||
<source>#100+#200</source>
|
||||
<prescript description="F3.300 PRESCRIPT">MESSAGE EMPTY HIDE,F3
|
||||
MESSAGE SHOW,F3</prescript>
|
||||
</field>
|
||||
</section>
|
||||
<sql>USE RMOV KEY 2 SELECT (MOV.ANNOES=#ANNOSEL)||(#SHOW_TOT="M")
|
||||
BY GRUPPO CONTO SOTTOCONTO GRUPPOC CONTOC SOTTOCONTC
|
||||
JOIN MOV INTO NUMREG==NUMREG
|
||||
JOIN PCON INTO GRUPPO==GRUPPO CONTO==CONTO SOTTOCONTO==SOTTOCONTO
|
||||
FROM GRUPPO=#DGR CONTO=#DCNT SOTTOCONTO=#DSTCNT
|
||||
TO GRUPPO=#AGR CONTO=#ACNT SOTTOCONTO=#ASTCNT</sql>
|
||||
</report>
|
258
src/ps/cast/saldi_m.msk
Normal file
258
src/ps/cast/saldi_m.msk
Normal file
@ -0,0 +1,258 @@
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
BU 24 2 2
|
||||
BE
|
||||
PR 1 1 "Elabora"
|
||||
PI 120
|
||||
EN
|
||||
BU 25 2 2
|
||||
BE
|
||||
PR 2 1 "Imposta"
|
||||
PI 165
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 1 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 33 2 2
|
||||
BE
|
||||
PR 1 1 "Info"
|
||||
ME EXIT,332
|
||||
PI 162
|
||||
EN
|
||||
BU 34 2 2
|
||||
BE
|
||||
PR 2 1 "Help"
|
||||
ME EXIT,331
|
||||
PI 163
|
||||
EN
|
||||
BU -1 2 2
|
||||
BE
|
||||
PR -1 0 ""
|
||||
PI 0
|
||||
EN
|
||||
BU 9 2 2
|
||||
BE
|
||||
PR 3 1 "Fine"
|
||||
ME EXIT,20334
|
||||
PI 114
|
||||
EN
|
||||
EN
|
||||
PA "Stampa Saldi con Contropartita" -1 -1 76 16
|
||||
NU 101 5
|
||||
BE
|
||||
PR 2 1 "Ditta "
|
||||
FL "FRD"
|
||||
US 9 KE 1
|
||||
CH REQUIRED
|
||||
IN CODDITTA 101
|
||||
DI "Codice" CODDITTA
|
||||
DI "Ragione sociale @50" RAGSOC
|
||||
OU 101 CODDITTA
|
||||
OU 104 RAGSOC
|
||||
EN
|
||||
ST 104 50
|
||||
BE
|
||||
PR 2 2 "Ragione sociale "
|
||||
FL "D"
|
||||
EN
|
||||
|
||||
NU 106 4
|
||||
BE
|
||||
PR 2 3 "Codice esercizio "
|
||||
HE "Esercizio di cui si vuole ottenere il bilancio"
|
||||
US ESC
|
||||
IN CODTAB 106
|
||||
DI "Codice" CODTAB
|
||||
DI "Data inizio esercizio" D0
|
||||
DI "Data fine esercizio" D1
|
||||
OU 106 CODTAB
|
||||
FL "Z"
|
||||
CH NORMAL
|
||||
WA "L'esercizio non esiste"
|
||||
FI ANNOSEL
|
||||
ME 0 CLEAR,4@
|
||||
ME ENABLE,4@
|
||||
EN
|
||||
DA 109
|
||||
BE
|
||||
PR 2 4 "Periodo da Data "
|
||||
HE "Data dalla quale si vuole la stampa"
|
||||
FI DADATA
|
||||
EN
|
||||
NU 112 2
|
||||
BE
|
||||
PR 2 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #109[7,8]
|
||||
FI DAG
|
||||
DR 109
|
||||
EN
|
||||
NU 113 2
|
||||
BE
|
||||
PR 6 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #109[5,6]
|
||||
FI DAM
|
||||
DR 109
|
||||
EN
|
||||
|
||||
DA 110
|
||||
BE
|
||||
PR 35 4 "A Data "
|
||||
HE "Data fino alla quale si vuole la stampa"
|
||||
FI ADATA
|
||||
EN
|
||||
NU 114 2
|
||||
BE
|
||||
PR 42 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #110[7,8]
|
||||
FI AGIO
|
||||
DR 110
|
||||
EN
|
||||
NU 115 2
|
||||
BE
|
||||
PR 46 5 ""
|
||||
FL "DH"
|
||||
VA 14 1 #110[5,6]
|
||||
FI AM
|
||||
DR 110
|
||||
EN
|
||||
|
||||
|
||||
|
||||
GR -1 55 6
|
||||
BE
|
||||
PR 2 6 "@bSelezione sui conti"
|
||||
EN
|
||||
NU 132 3
|
||||
BE
|
||||
PR 3 7 "Da: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 132
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DGR
|
||||
EN
|
||||
NU 133 3
|
||||
BE
|
||||
PR 23 7 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DCNT
|
||||
EN
|
||||
NU 134 6
|
||||
BE
|
||||
PR 36 7 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 132
|
||||
IN CONTO 133
|
||||
IN SOTTOCONTO 134
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 134 SOTTOCONTO
|
||||
OU 132 GRUPPO
|
||||
OU 133 CONTO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
FI DSTCNT
|
||||
FL "H"
|
||||
EN
|
||||
ST 135 50
|
||||
BE
|
||||
PR 3 8 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 135
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 134 SOTTOCONTO
|
||||
OU 133 CONTO
|
||||
OU 132 GRUPPO
|
||||
OU 135 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
NU 136 3
|
||||
BE
|
||||
PR 3 9 "A: Gruppo "
|
||||
US 19 KE 1 SE (CONTO="")
|
||||
IN GRUPPO 136
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI AGR
|
||||
EN
|
||||
NU 137 3
|
||||
BE
|
||||
PR 23 9 "Conto "
|
||||
US 19 KE 1 SE (SOTTOCONTO="")
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ACNT
|
||||
EN
|
||||
NU 138 6
|
||||
BE
|
||||
PR 36 9 "Sottoconto "
|
||||
US 19
|
||||
IN GRUPPO 136
|
||||
IN CONTO 137
|
||||
IN SOTTOCONTO 138
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
DI "Descrizione@50" DESCR
|
||||
OU 138 SOTTOCONTO
|
||||
OU 136 GRUPPO
|
||||
OU 137 CONTO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
FI ASTCNT
|
||||
FL "H"
|
||||
EN
|
||||
ST 139 50
|
||||
BE
|
||||
PR 3 10 ""
|
||||
US 19 KE 2
|
||||
IN DESCR 139
|
||||
DI "Descrizione@50" DESCR
|
||||
DI "Gruppo" GRUPPO
|
||||
DI "Conto" CONTO
|
||||
DI "Sottoconto" SOTTOCONTO
|
||||
OU 138 SOTTOCONTO
|
||||
OU 137 CONTO
|
||||
OU 136 GRUPPO
|
||||
OU 139 DESCR
|
||||
CH NORMAL
|
||||
EN
|
||||
BO 401
|
||||
BE
|
||||
PR 3 12 "Stampa i Totali"
|
||||
FI SHOW_TOT
|
||||
FL "H"
|
||||
EN
|
||||
EN
|
||||
ENDMASK
|
10
src/ps/cast/saldi_m.qry
Normal file
10
src/ps/cast/saldi_m.qry
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<query Name="saldi_m">
|
||||
<description>Saldi per contropartita magaz</description>
|
||||
<sql>ODBC(magazzino)
|
||||
SELECT rmov.datareg,mov.codcaus,caus.descr,mov.descr, rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.sezione,iif(rmov.sezione='A',-rmov.IMPORTO,rmov.IMPORTO),mov.numdoc,mov.datadoc,mov.protiva,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC,iif(rmov.tipocc='',pcon.descr,clifo.ragsoc),rmov.gruppo*100+rmov.conto as mastro
|
||||
FROM RMOV join mov on (rmov.numreg=mov.numreg) left join clifo on (rmov.tipocc=clifo.tipocf and rmov.sottocontc=clifo.codcf) left join pcon on (rmov.gruppoc=pcon.gruppo and rmov.contoc=pcon.conto and rmov.sottocontc=pcon.sottoconto) left join caus on (caus.codcaus=mov.codcaus)
|
||||
where rmov.annoes=#ANNOSEL and (rmov.dataregE;=datetime(#ANNOSEL,#DAM,#DAG)) and (rmov.dataregC;=datetime(#ANNOSEL,#AM,#AGIO))
|
||||
ORDER BY rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC
|
||||
HAVING mastroE;=(#DGR*100+#DCNT) and mastroC;=(#AGR*100+#ACNT)</sql>
|
||||
</query>
|
Loading…
x
Reference in New Issue
Block a user