Merge branch 'R12.00.1136' of http://10.65.20.33/sirio/CAMPO/campo into R12.00.1136

This commit is contained in:
smen 2022-05-04 12:33:06 +02:00
commit 890394ea0a
32 changed files with 1733 additions and 657 deletions

3
cd/test/ba1140.txt Normal file
View 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
View 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

Binary file not shown.

5
cd/test/cg1140.txt Normal file
View 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
View 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

Binary file not shown.

3
cd/test/ci1140.txt Normal file
View File

@ -0,0 +1,3 @@
ci1.exe
Corretta indicazione ore di assenza

21
cd/test/ci1140a.ini Normal file
View 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

Binary file not shown.

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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");

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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;
}

View File

@ -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()

View File

@ -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)

View File

@ -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;

View File

@ -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;
}

View File

@ -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_

View File

@ -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
View 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
View 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
View 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
View 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.datareg&#3E;=datetime(#ANNOSEL,#DAM,#DAG)) and (rmov.datareg&#3C;=datetime(#ANNOSEL,#AM,#AGIO))
ORDER BY rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC
HAVING mastro&#3E;=(#DGR*100+#DCNT) and mastro&#3C;=(#AGR*100+#ACNT)</sql>
</query>

View 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

View 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
View 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
View 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.datareg&#3E;=datetime(#ANNOSEL,#DAM,#DAG)) and (rmov.datareg&#3C;=datetime(#ANNOSEL,#AM,#AGIO))
ORDER BY rmov.GRUPPO,rmov.CONTO,rmov.SOTTOCONTO,rmov.TIPOCC,rmov.GRUPPOC,rmov.CONTOC,rmov.SOTTOCONTC
HAVING mastro&#3E;=(#DGR*100+#DCNT) and mastro&#3C;=(#AGR*100+#ACNT)</sql>
</query>