Merge branch 'R_10_00' of http://10.65.20.33/sirio/CAMPO/campo into R_10_00

This commit is contained in:
smen 2021-10-05 11:57:51 +02:00
commit 2afd197cd3
57 changed files with 2577 additions and 1622 deletions

View File

@ -233,6 +233,7 @@
<ClInclude Include="..\src\include\spool.h" />
<ClInclude Include="..\src\include\sqlset.h" />
<ClInclude Include="..\src\include\stack.h" />
<ClInclude Include="..\src\include\transaction.h" />
<ClInclude Include="..\src\include\tsdb.h" />
<ClInclude Include="..\src\include\ttools.h" />
<ClInclude Include="..\xvaga\statbar.h" />
@ -648,6 +649,7 @@
</ClCompile>
<ClCompile Include="..\src\include\textset.cpp" />
<ClCompile Include="..\src\include\toolfld.cpp" />
<ClCompile Include="..\src\include\transaction.cpp" />
<ClCompile Include="..\src\include\Tree.cpp">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>

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

@ -0,0 +1,3 @@
ba3.exe
Importazione Bee Store

33
cd/test/ba1086a.ini Normal file
View File

@ -0,0 +1,33 @@
[Main]
Demo=0
[ba3]
Edit_4 = ba3 -0
Edit_5 = ba3 -0
File(475) = ba3.exe|X
Patch = 1086
Versione = 21511200
[ba99]
Kill(0) = wxmsw240.dll|x
Kill(1) = batbsce.txt|x
Kill(2) = bastfsc.rep|x
Kill(3) = bastfsc.msk|x
Kill(4) = bastcms.msk|x
Kill(5) = bastcms.rep|x
Kill(6) = bastuue.rep|x
Kill(7) = bastuue.msk|x
[ba]
Data = 04-10-2021
Descrizione = Base
Dischi = 1
Moduli = sy
OEM =
Patch = 1086
PostProcess = bainst -0 BA
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ba1086a1.zip Normal file

Binary file not shown.

4
cd/test/bs1086.txt Normal file
View File

@ -0,0 +1,4 @@
bs0.exe
bs0500a.msk
Importazione Bee Store

26
cd/test/bs1086a.ini Normal file
View File

@ -0,0 +1,26 @@
[Main]
Demo=0
[bs0]
File(0) = bs0.exe|X
Patch = 1086
Versione = 21511200
[bs1]
File(6) = bs0500a.msk|X
Patch = 1086
Versione = 21511200
[bs]
Data = 04-10-2021
Descrizione = Bee Store
Dischi = 1
Moduli = ve
OEM =
Patch = 1086
PostProcess =
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/bs1086a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
cg0.exe
Importazione Bee Store

98
cd/test/cg1086a.ini Normal file
View File

@ -0,0 +1,98 @@
[Main]
Demo=0
[cg0]
File(0) = cg0.exe|X
Patch = 1086
Versione = 21511200
[cg99]
Kill(0) = batbins.msk|x
Kill(1) = bastpor.rep|x
Kill(2) = batbcfi.msk|x
Kill(3) = batbntb.msk|x
Kill(4) = bastleg.msk|x
Kill(5) = batbdel.msk|x
Kill(6) = bastnot.msk|x
Kill(7) = bastvet.rep|x
Kill(8) = bastpor.msk|x
Kill(9) = bastcve.msk|x
Kill(10) = batbpdb.msk|x
Kill(11) = batbpor.msk|x
Kill(12) = bastivd.msk|x
Kill(13) = batbind.msk|x
Kill(14) = batblbu.msk|x
Kill(15) = bastdpn.msk|x
Kill(16) = batbleg.msk|x
Kill(17) = bastcfi.msk|x
Kill(18) = batbdpn.msk|x
Kill(19) = bastcam.msk|x
Kill(20) = bastcco.msk|x
Kill(21) = batbvet.msk|x
Kill(22) = bastarb.msk|x
Kill(23) = bastesc.rep|x
Kill(24) = cg2fppro.msk|x
Kill(25) = bastver.msk|x
Kill(26) = batbtit.msk|x
Kill(27) = batbcco.msk|x
Kill(28) = bastzon.rep|x
Kill(29) = bastndo.msk|x
Kill(30) = bastreg.rep|x
Kill(31) = batbndo.msk|x
Kill(32) = bastscc.rep|x
Kill(33) = batbnot.msk|x
Kill(34) = batbscc.msk|x
Kill(35) = bastntb.rep|x
Kill(36) = batbivd.msk|x
Kill(37) = bastnot.rep|x
Kill(38) = batbtra.msk|x
Kill(39) = bastver.rep|x
Kill(40) = bastcam.rep|x
Kill(41) = batbmsp.msk|x
Kill(42) = bastmsp.rep|x
Kill(43) = bastvet.msk|x
Kill(44) = batbesc.msk|x
Kill(45) = bastpdb.msk|x
Kill(46) = bastleg.rep|x
Kill(47) = batblia.msk|x
Kill(48) = bastpdb.rep|x
Kill(49) = bastarb.rep|x
Kill(50) = bastcfi.rep|x
Kill(51) = bastntb.msk|x
Kill(52) = cgtbcon.msk|x
Kill(53) = bastcve.rep|x
Kill(54) = batbver.msk|x
Kill(55) = batbzon.msk|x
Kill(56) = batbcve.msk|x
Kill(57) = batbcam.msk|x
Kill(58) = bastesc.msk|x
Kill(59) = batbinl.msk|x
Kill(60) = bastivd.rep|x
Kill(61) = batbarb.msk|x
Kill(62) = bastmsp.msk|x
Kill(63) = bastscc.msk|x
Kill(64) = bastndo.rep|x
Kill(65) = bastdpn.rep|x
Kill(66) = bastzon.msk|x
Kill(67) = batblia.msk|x
Kill(68) = batbreg.msk|x
Kill(69) = bastreg.msk|x
Kill(70) = bastcco.rep|x
[cg]
Data = 04-10-2021
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 = 1086
PostProcess = bainst -0 CG
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/cg1086a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
xvaga.dll
Importazione Bee Store

24
cd/test/sy1086a.ini Normal file
View File

@ -0,0 +1,24 @@
[Main]
Demo=0
[sy1]
File(55) = xvaga.dll|X
Patch = 1086
Versione = 21511200
[sy99]
Kill(0) = setup\teamviewerqs_it.exe|x
[sy]
Data = 04-10-2021
Descrizione = Sistema
Dischi = 1
Moduli =
OEM =
Patch = 1086
PostProcess =
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/sy1086a1.zip Normal file

Binary file not shown.

4
cd/test/ve1086.txt Normal file
View File

@ -0,0 +1,4 @@
ve0.exe
ve2.exe
Importazione Bee Store

137
cd/test/ve1086a.ini Normal file
View File

@ -0,0 +1,137 @@
[Main]
Demo=0
[ve0]
Edit_163 = ve0 -6
Edit_4 = ve0 -4
Edit_5 = ve0 -4
File(20) = ve0.exe|X
Patch = 1086
Versione = 21511200
[ve2]
File(230) = ve2.exe|X
Patch = 1086
Versione = 21511200
[ve99]
Kill(0) = batbimb.msk|x
Kill(1) = batbacr.msk|x
Kill(2) = batbprv.msk|x
Kill(3) = bastgmc.rep|x
Kill(4) = ve7.exe|x
Kill(5) = bastums.rep|x
Kill(6) = efstbnp.rep|x
Kill(7) = bastgcg.rep|x
Kill(8) = bastctr.rep|x
Kill(9) = basttip.msk|x
Kill(10) = bastimb.msk|x
Kill(11) = batbmre.msk|x
Kill(12) = bastfca.rep|x
Kill(13) = bastgca.rep|x
Kill(14) = basteld.msk|x
Kill(15) = bastimb.rep|x
Kill(16) = batbfrd.msk|x
Kill(17) = bastnum.msk|x
Kill(18) = batbstd.msk|x
Kill(19) = batbfrm.msk|x
Kill(20) = batbfca.msk|x
Kill(21) = bastubi.msk|x
Kill(22) = bastgmc.msk|x
Kill(23) = batbprs.msk|x
Kill(24) = basteld.rep|x
Kill(25) = bastcau.msk|x
Kill(26) = bastrfa.rep|x
Kill(27) = ve7300a.msk|x
Kill(28) = bastprs.msk|x
Kill(29) = batbubi.msk|x
Kill(30) = bastgcg.msk|x
Kill(31) = batbtip.msk|x
Kill(32) = bastnum.rep|x
Kill(33) = batbabe.msk|x
Kill(34) = batbgsa.msk|x
Kill(35) = ve7600a.msk|x
Kill(36) = bastabe.msk|x
Kill(37) = bastubi.rep|x
Kill(38) = batbfrr.msk|x
Kill(39) = ve7400conf.ini|x
Kill(40) = batbcau.msk|x
Kill(41) = ve7200a.frm|x
Kill(42) = batbgmc.msk|x
Kill(43) = bastcaa.rep|x
Kill(44) = batbfid.msk|x
Kill(45) = bastfrd.msk|x
Kill(46) = bastcaa.msk|x
Kill(47) = batbtag.msk|x
Kill(48) = bastums.msk|x
Kill(49) = ve7300a.frm|x
Kill(50) = ve7100a.msk|x
Kill(51) = bastcau.rep|x
Kill(52) = bastabe.rep|x
Kill(53) = bastrfc.msk|x
Kill(54) = bastfca.msk|x
Kill(55) = batbcaa.msk|x
Kill(56) = eftbbnp.msk|x
Kill(57) = batbums.msk|x
Kill(58) = bastbnp.msk|x
Kill(59) = bastfrm.msk|x
Kill(60) = baststd.rep|x
Kill(61) = baststd.msk|x
Kill(62) = basttag.rep|x
Kill(63) = basttri.msk|x
Kill(64) = basttip.rep|x
Kill(65) = ve7701a.ini|x
Kill(66) = batbctr.msk|x
Kill(67) = batbspp.msk|x
Kill(68) = basttri.rep|x
Kill(69) = bastfrm.rep|x
Kill(70) = bastrfc.rep|x
Kill(71) = bastasf.msk|x
Kill(72) = batbfsa.msk|x
Kill(73) = bastfrr.rep|x
Kill(74) = batbnum.msk|x
Kill(75) = batbpro.msk|x
Kill(76) = bastcra.msk|x
Kill(77) = bastfrr.msk|x
Kill(78) = bastrfa.msk|x
Kill(79) = bastfrd.rep|x
Kill(80) = ve7400a.msk|x
Kill(81) = batbspt.msk|x
Kill(82) = bastprs.rep|x
Kill(83) = basttag.msk|x
Kill(84) = bastspp.msk|x
Kill(85) = batbbnp.msk|x
Kill(86) = batbgcg.msk|x
Kill(87) = bastgca.msk|x
Kill(88) = batbasf.msk|x
Kill(89) = ve7700a.msk|x
Kill(90) = ve7200a.msk|x
Kill(91) = bastcra.rep|x
Kill(92) = ve7400a.ini|x
Kill(93) = bastctr.msk|x
Kill(94) = batbtri.msk|x
Kill(95) = batbeld.msk|x
Kill(96) = batbcra.msk|x
Kill(97) = ve7500a.msk|x
Kill(98) = bastspp.rep|x
Kill(99) = batbcld.msk|x
Kill(100) = batbrfa.msk|x
Kill(101) = batbrfc.msk|x
Kill(102) = bastbnp.rep|x
Kill(103) = bastasf.rep|x
Kill(104) = efstbnp.msk|x
Kill(105) = batbgca.msk|x
[ve]
Data = 04-10-2021
Descrizione = Vendite
Dischi = 1
Moduli = ba,cg9,pr9,mg9,sv9,in9,ef9
OEM =
Patch = 1086
PostProcess = bainst -0 VE
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ve1086a1.zip Normal file

Binary file not shown.

4
cd/test/ve1088.txt Normal file
View File

@ -0,0 +1,4 @@
Aggiunto report e maschera con "Stampa clienti dato un metodo di pagamento"
ve19001.rep
ve1900a.msk

130
cd/test/ve1088a.ini Normal file
View File

@ -0,0 +1,130 @@
[Main]
Demo=0
[ve1]
File(64) = ve19001.rep|X
File(65) = ve1900a.msk|X
Patch = 1088
Versione = 21511200
[ve99]
Kill(0) = batbimb.msk|x
Kill(1) = batbacr.msk|x
Kill(2) = bastcra.msk|x
Kill(3) = bastbnp.rep|x
Kill(4) = bastfrr.msk|x
Kill(5) = bastasf.rep|x
Kill(6) = bastctr.rep|x
Kill(7) = basttip.msk|x
Kill(8) = batbpro.msk|x
Kill(9) = efstbnp.msk|x
Kill(10) = bastfrm.rep|x
Kill(11) = batbgca.msk|x
Kill(12) = batbnum.msk|x
Kill(13) = batbrfa.msk|x
Kill(14) = basttri.rep|x
Kill(15) = batbrfc.msk|x
Kill(16) = batbgmc.msk|x
Kill(17) = bastabe.msk|x
Kill(18) = bastrfa.msk|x
Kill(19) = bastfrd.rep|x
Kill(20) = bastprs.rep|x
Kill(21) = bastgcg.msk|x
Kill(22) = bastubi.msk|x
Kill(23) = basttag.msk|x
Kill(24) = basteld.rep|x
Kill(25) = bastimb.rep|x
Kill(26) = batbabe.msk|x
Kill(27) = batbfca.msk|x
Kill(28) = ve7300a.msk|x
Kill(29) = basteld.msk|x
Kill(30) = ve7400a.ini|x
Kill(31) = bastcau.msk|x
Kill(32) = batbgcg.msk|x
Kill(33) = batbfrm.msk|x
Kill(34) = ve7400a.msk|x
Kill(35) = batbstd.msk|x
Kill(36) = batbspt.msk|x
Kill(37) = batbtip.msk|x
Kill(38) = ve7200a.msk|x
Kill(39) = bastspp.msk|x
Kill(40) = bastctr.msk|x
Kill(41) = bastgca.msk|x
Kill(42) = basttri.msk|x
Kill(43) = batbfrr.msk|x
Kill(44) = bastabe.rep|x
Kill(45) = batbums.msk|x
Kill(46) = bastcau.rep|x
Kill(47) = bastcaa.msk|x
Kill(48) = ve7100a.msk|x
Kill(49) = ve7600a.msk|x
Kill(50) = batbfid.msk|x
Kill(51) = batbubi.msk|x
Kill(52) = bastfrr.rep|x
Kill(53) = bastums.msk|x
Kill(54) = basttag.rep|x
Kill(55) = batbspp.msk|x
Kill(56) = baststd.msk|x
Kill(57) = eftbbnp.msk|x
Kill(58) = baststd.rep|x
Kill(59) = bastfrd.msk|x
Kill(60) = bastfca.msk|x
Kill(61) = ve7400conf.ini|x
Kill(62) = bastimb.msk|x
Kill(63) = bastbnp.msk|x
Kill(64) = batbfsa.msk|x
Kill(65) = batbmre.msk|x
Kill(66) = bastasf.msk|x
Kill(67) = batbctr.msk|x
Kill(68) = bastrfc.rep|x
Kill(69) = batbcaa.msk|x
Kill(70) = basttip.rep|x
Kill(71) = ve7300a.frm|x
Kill(72) = bastnum.rep|x
Kill(73) = batbprs.msk|x
Kill(74) = bastfca.rep|x
Kill(75) = bastrfa.rep|x
Kill(76) = bastnum.msk|x
Kill(77) = bastgca.rep|x
Kill(78) = bastgmc.msk|x
Kill(79) = ve7701a.ini|x
Kill(80) = batbfrd.msk|x
Kill(81) = bastfrm.msk|x
Kill(82) = bastcaa.rep|x
Kill(83) = bastubi.rep|x
Kill(84) = bastrfc.msk|x
Kill(85) = bastprs.msk|x
Kill(86) = batbtag.msk|x
Kill(87) = ve7200a.frm|x
Kill(88) = batbcau.msk|x
Kill(89) = batbgsa.msk|x
Kill(90) = efstbnp.rep|x
Kill(91) = bastgcg.rep|x
Kill(92) = ve7.exe|x
Kill(93) = bastums.rep|x
Kill(94) = batbprv.msk|x
Kill(95) = bastgmc.rep|x
Kill(96) = bastcra.rep|x
Kill(97) = batbbnp.msk|x
Kill(98) = bastspp.rep|x
Kill(99) = batbcld.msk|x
Kill(100) = batbtri.msk|x
Kill(101) = batbasf.msk|x
Kill(102) = batbeld.msk|x
Kill(103) = ve7700a.msk|x
Kill(104) = batbcra.msk|x
Kill(105) = ve7500a.msk|x
[ve]
Data = 05-10-2021
Descrizione = Vendite
Dischi = 1
Moduli = ba,cg9,pr9,mg9,sv9,in9,ef9
OEM =
Patch = 1088
PostProcess = bainst -0 VE
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ve1088a1.zip Normal file

Binary file not shown.

View File

@ -9,7 +9,7 @@ int main(int argc, char** argv)
case 1: bs0200(argc, argv); break; // Importazioni Beestore
case 2: bs0300(argc, argv); break; // Importazione da SKNET
case 3: bs0400(argc, argv); break; // Tabelle di transazione
case 4: bs0500(argc, argv); break; // Importazioni BeeStore Inmaven
case 4: bs0500(argc, argv); break; // Importazioni BeeStore Inmaven
default: bs0100(argc, argv); break; // Trasferimento Beestore Impostazione
}
return 0;

View File

@ -1061,13 +1061,13 @@ void TBeeStore_sync::sync_mov(int tipotestata, const TDate& dal, const TDate& al
{
str << " AND DataMov";
if (dal.ok() && al.ok())
str << " BETWEEN " << date2sql(dal) << " AND " << date2sql(al);
str << " BETWEEN " << date2sql(dal, 1) << " AND " << date2sql(al, 2);
else
{
if (dal.ok())
str << ">=" << date2sql(dal);
str << ">=" << date2sql(dal, 1);
else
str << "<=" << date2sql(al);
str << "<=" << date2sql(al, 2);
}
}
str << "\nORDER BY NumMov,NumRiga";

View File

@ -492,7 +492,6 @@ void TSknet_sync::sync_anamag()
}
}
}
{
// Controllo se esistono varianti e le aggiungo
query.cut(0) << "SELECT * FROM tieArtVarianti where origine=" << their_origin() << " AND " << where_time_import() << ";";
@ -637,57 +636,11 @@ void TSknet_sync::sync_anamag()
if (!flag)
flag = yesno_box("Attenzione trovato articolo con categoria CONAI vuota: %s\nSopprimere eventuali prossimi messaggi?", (const char*)codart);
}
/*
art.first(); // Useless??
rart.zero();
rart.put(ANAMAG_CODART, odbc.get("Cod_PK").as_string());
if (odbc.get("Cod_PK").as_string().blank())
continue;
if (rart.read(art, _isequal) == NOERR)
{
static TString catCON;
// Metodo del cazzo, format crasha e non ho tempo, magari in un futuro sistemarlo (se non ho visto male funziona solo su linux)
TString a = odbc.get("CatAC").as_string().left(4); a.lpad(4);
TString b = odbc.get("CatAL").as_string().left(4); b.lpad(4);
TString c = odbc.get("CatCA").as_string().left(4); c.lpad(4);
TString d = odbc.get("CatLE").as_string().left(4); d.lpad(4);
TString e = odbc.get("CatPL").as_string().left(4); e.lpad(4);
TString f = odbc.get("CatVE").as_string().left(4); f.lpad(4);
catCON.cut(0) << a << b << c << d << e << f;
/ *
catCON.format("%4 s%4 s%4 s%4 s%4 s%4 s",
odbc.get("CatAC").as_string().left(4), // Categoria Acciaio
odbc.get("CatAL").as_string().left(4), // Categoria Alluminio
odbc.get("CatCA").as_string().left(4), // Categoria Carta
odbc.get("CatLE").as_string().left(4), // Categoria Legno
odbc.get("CatPL").as_string().left(4), // Categoria Plastica
odbc.get("CatVE").as_string().left(4) // Categoria Vetro
);
* /
rart.put(ANAMAG_CONAISC, catCON);
rart.put(ANAMAG_CONACC, odbc.get("PesoAC").as_real()); // Peso Acciaio
rart.put(ANAMAG_CONALL, odbc.get("PesoAL").as_real()); // Peso Alluminio
rart.put(ANAMAG_CONCAR, odbc.get("PesoCA").as_real()); // Peso Carta
rart.put(ANAMAG_CONLEG, odbc.get("PesoLE").as_real()); // Peso Legno
rart.put(ANAMAG_CONPLA, odbc.get("PesoPL").as_real()); // Peso Plastica
rart.put(ANAMAG_CONVET, odbc.get("PesoVE").as_real()); // Peso Vetro
art.rewrite(rart);
}
else
// EROR! EROR!
{
bool tolla = true;
}
*/
}
}
}
static bool ClifoEvaluator(const TISAM_recordset& rec, const char* fldname, const char* expr, TVariant& var)
/*static bool ClifoEvaluator(const TISAM_recordset& rec, const char* fldname, const char* expr, TVariant& var)
{
const TAnagrafica& a = _anagr.anag(rec);
@ -804,7 +757,7 @@ static bool ClifoEvaluator(const TISAM_recordset& rec, const char* fldname, cons
}
return false;
}
} */
const TString& TSknet_sync::comune(const TRecordset& recset, const char* fld_cap, const char* fld_den) const
{
@ -910,12 +863,12 @@ void TSknet_sync::load_clifo(const char tipocf)
cfv.put(CFV_PADESTIN, odbc.get("CodDest").as_string());
const int tipo = odbc.get("Tipo").as_int(); // 1=Fisica; 2=Giuridica; 3=Altro
if (tipo == 1)
{
clifo.put(CLI_SESSO, odbc.get("Sesso").as_string());
clifo.put(CLI_DATANASC, odbc.get("DTNascita").as_date());
clifo.put(CLI_COMNASC, comune(odbc, "", "ComuneNascita"));
clifo.put(CLI_TIPOPERS, 'F');
clifo.put(CLI_COMNASC, comune(odbc, "", "ComuneNascita"));(CLI_TIPOPERS, 'F');
}
else
clifo.put(CLI_TIPOPERS, 'G');
@ -1375,54 +1328,7 @@ void TSknet_sync::sync_val()
sync_table("%VAL", "tieValute", fields);
}
//auto find_codalt_sknet = [](TRectype& rcodcor, TLocalisamfile& codcor, const TString& tipocf, long codcf, const TString& codart, TString& codartmag, bool& checked)
//{
// // Testo quanti sono. Non ho altro modo?
// const bool items = rcodcor.next(codcor) == NOERR && rcodcor.get(CODCORR_CODARTALT) == codart;
// if (items)
// {
// rcodcor.prev(codcor);
// // Prima cerco subito se ho un codice per questo cliente.
// // Altrimenti prendo quello che non e' un codice di pack, se c'e' altrimenti riprendo sempre il primo.
// TSQL_recordset codici(TString() << "SELECT * FROM CODCORR WHERE CODARTALT = '" << codart << "' AND TIPOCF = '" << tipocf << "' AND CODCF = '" << codcf << "'");
// if (codici.items() == 1)
// {
// codartmag = codici.get(codici.find_column(CODCORR_CODART)).as_string();
// checked = true;
// }
// else
// {
// TString last_cod = rcodcor.get(CODCORR_CODART);
//
// // Codice di PACK di cinque cifre.
// static auto is_pack_code = [&]()
// {
// bool flag = last_cod.len() == 5;
// for (int i = 0; i < 5 && flag; ++i) flag &= xvt_chr_is_digit(last_cod[i]);
// return flag;
// };
//
// checked = true; // Se va tutto bene ho il nuovo codartmag.
// while (is_pack_code())
// {
// if (rcodcor.next(codcor) == NOERR && rcodcor.get(CODCORR_CODARTALT) == codart)
// {
// last_cod = rcodcor.get(CODCORR_CODART);
// continue;
// }
// checked = false;
// break;
// }
// if (checked)
// {
// if (rcodcor.next(codcor) != NOERR || rcodcor.get(CODCORR_CODARTALT) != codart) // Controllo che sia effettivamente l'unico altrimenenti ciaone.
// codartmag = last_cod;
// else
// checked = false;
// }
// }
// }
//};
void TSknet_sync::sync_doc()
{

File diff suppressed because it is too large Load Diff

View File

@ -1,38 +1,43 @@
#define F_DAL 101
#define F_AL 102
#define F_DAL 201
#define F_AL 202
#define F_UMS 103
#define F_IVA 104
#define F_LINEART 105
#define F_CATMER 106
#define F_ART 107
#define F_LIST 108
#define F_SCONTRINI 109
#define F_CORRISPETTIVI 110
#define F_DOCUMENTI 111
#define F_CARSCAR 112
#define F_GENERICI 113
#define F_VALUTE 114
#define F_CLIENTI 115
#define F_FORNITORI 116
#define F_BARCODE 117
#define F_UMS 203
#define F_IVA 204
#define F_LINEART 205
#define F_CATMER 206
#define F_ART 207
#define F_SCONTRINI 209
#define F_CORRISPETTIVI 210
#define F_DOCUMENTI 211
#define F_CARSCAR 212
#define F_GENERICI 213
#define F_VALUTE 214
#define F_CLIENTI 215
#define F_FORNITORI 216
#define F_FATTURE 121
#define F_BOLLE 122
#define F_ORDINI 123
#define F_IMPPARTDOC 124
#define F_CANCART 125
#define F_TIPODOC 126
#define F_UNITADEFAULT 127
#define F_FATTURE 221
#define F_BOLLE 222
#define F_ORDINI 223
#define F_IMPPARTDOC 224
#define F_CANCART 225
#define F_TIPODOC 226
#define F_UNITADEFAULT 227
#define F_IMPTYPE 228
#define F_C_CARSCAR 201
#define F_D_CARSCAR 202
#define F_C_DOCUMENTI 203
#define F_D_DOCUMENTI 204
#define F_C_SCONTRINI 205
#define F_D_SCONTRINI 206
#define F_C_GENERICI 207
#define F_D_GENERICI 208
#define F_CODNUM 240
#define F_C_CORRISPETTIVI 301
#define F_D_CORRISPETTIVI 302
#define F_SUFFISSO 101
#define F_COD_FATTURE 102
#define F_DES_FATTURE 302
#define F_COD_NOTE 103
#define F_DES_NOTE 303
#define F_COD_BOLLE 104
#define F_DES_BOLLE 304
#define F_COD_CARSCAR 105
#define F_DES_CARSCAR 305
#define F_COD_SCONTRINI 106
#define F_DES_SCONTRINI 306
#define F_COD_GENERICI 107
#define F_DES_GENERICI 307
#define F_COD_ORDCLI 108
#define F_DES_ORDCLI 308

View File

@ -6,7 +6,7 @@ ENDPAGE
PAGE "Importazioni da BeeStore" 0 2 0 0
GROUPBOX DLG_NULL 78 9
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 1 "@bArchivi"
END
@ -14,279 +14,286 @@ END
BOOLEAN F_UMS
BEGIN
PROMPT 2 2 "Unità di misura "
FIELD SyncUMS
FIELD ImpUMS
END
BOOLEAN F_IVA
BEGIN
PROMPT 2 3 "Codici IVA "
FIELD SyncIVA
FIELD ImpIVA
END
BOOLEAN F_LINEART
BEGIN
PROMPT 2 4 "Linee Articolo "
FIELD SyncLinee
END
BOOLEAN F_CATMER
BEGIN
PROMPT 2 5 "Categorie Merceologiche"
FIELD SyncCatMer
END
BOOLEAN F_ART
BEGIN
PROMPT 2 6 "Articoli "
FIELD SyncAnamag
END
STRING F_LIST 3
BEGIN
PROMPT 40 6 "Listino "
USE LF_CONDV
INPUT TIPO "L"
INPUT CATVEN ""
INPUT TIPOCF ""
INPUT CODCF ""
INPUT COD 148
DISPLAY "Codice" COD
DISPLAY "Descrizione@50" DESCR
DISPLAY "Valuta@5" CODVAL
DISPLAY "Inizio@10" VALIN
DISPLAY "Fine@10" VALFIN
OUTPUT 148 COD
FIELD SyncListino
END
BOOLEAN F_SCONTRINI
BEGIN
PROMPT 2 7 "Scontrini "
FIELD SyncScontr
END
BOOLEAN F_CORRISPETTIVI
BEGIN
PROMPT 2 8 "Corrispettivi "
FIELD SyncCorr
END
BOOLEAN F_CARSCAR
BEGIN
PROMPT 40 7 "Carichi/scarichi "
FIELD SyncCarScar
END
BOOLEAN F_GENERICI
BEGIN
PROMPT 40 8 "Mov.generici "
FIELD SyncGenerici
END
BOOLEAN F_VALUTE
BEGIN
PROMPT 40 2 "Valute"
FIELD SyncVAL
END
BOOLEAN F_CLIENTI
BEGIN
PROMPT 40 3 "Clienti"
FIELD SyncClienti
END
BOOLEAN F_FORNITORI
BEGIN
PROMPT 40 4 "Fornitori "
FIELD SyncFornitori
END
BOOLEAN F_BARCODE
BEGIN
PROMPT 40 5 "Codici a barre"
FIELD SyncBarCode
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 10 "@bDocumenti"
FIELD ImpLinee
END
BOOLEAN F_DOCUMENTI
BEGIN
PROMPT 2 11 "Documenti "
FIELD SyncDoc
PROMPT 2 5 "Documenti "
FIELD ImpDoc
MESSAGE FALSE CLEAR,F_TIPODOC
MESSAGE TRUE ENABLE,F_TIPODOC
END
LISTBOX F_TIPODOC 1 15
LISTBOX F_TIPODOC 2 20
BEGIN
PROMPT 2 12 "Tipo Documento"
PROMPT 20 5 "Tipo Documento"
ITEM "2|Fatture"
ITEM "6|Note di credito"
ITEM "1|Bolle"
ITEM "9|Ordini"
FIELD SyncTIPODOC
ITEM "11|Carichi e scarichi"
ITEM "13|Scontrini"
ITEM "14|Generici"
FIELD ImpTIPODOC
END
GROUPBOX DLG_NULL 78 3
BOOLEAN F_CATMER
BEGIN
PROMPT 1 14 "@bFiltri"
PROMPT 30 2 "Categorie Merceologiche"
FIELD ImpCatMer
END
BOOLEAN F_ART
BEGIN
PROMPT 30 3 "Articoli "
FIELD ImpAnamag
END
BOOLEAN F_VALUTE
BEGIN
PROMPT 30 4 "Valute"
FIELD ImpVAL
END
BOOLEAN F_CLIENTI
BEGIN
PROMPT 60 2 "Clienti"
FIELD ImpClienti
END
BOOLEAN F_FORNITORI
BEGIN
PROMPT 60 3 "Fornitori "
FIELD ImpFornitori
END
DATE F_DAL
BEGIN
PROMPT 2 15 "Dalla data di modifica "
FIELD SyncDateFrom
PROMPT 2 7 "Dalla data di modifica "
FIELD ImpDateFrom
END
DATE F_AL
BEGIN
PROMPT 42 15 " al "
FIELD SyncDateTo
END
ENDPAGE
PAGE "Parametri" 0 2 0 0
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 1 "@bParametri"
PROMPT 42 7 " al "
FIELD ImpDateTo
END
BOOLEAN F_IMPPARTDOC
BEGIN
PROMPT 2 2 "Importazione Articoli da Documenti"
FIELD SyncIMPPARTDOC
PROMPT 2 9 "Importazione Articoli da Documenti"
FIELD ImpIMPPARTDOC
MESSAGE TRUE CLEAR,F_CANCART|CLEAR,F_ART
MESSAGE FALSE ENABLE,F_CANCART|ENABLE,F_ART
END
BOOLEAN F_UNITADEFAULT
BEGIN
PROMPT 2 3 "Unità di Misura (Default)"
FIELD SyncUNITADEFAULT
END
BOOLEAN F_CANCART
BEGIN
PROMPT 40 2 "Elimina Articoli Sospesi"
FIELD SyncCANCART
PROMPT 40 9 "Elimina Articoli Sospesi"
FIELD ImpCANCART
END
GROUPBOX DLG_NULL 78 6
BOOLEAN F_UNITADEFAULT
BEGIN
PROMPT 1 5 "@bMovimenti"
PROMPT 2 10 "Unità di Misura (Default)"
FIELD ImpUNITADEFAULT
END
STRING F_C_CARSCAR 4
LIST F_IMPTYPE 1 20
BEGIN
PROMPT 2 6 "Causale magazzino car./scar. "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_CARSCAR
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_CARSCAR CODTAB
OUTPUT F_D_CARSCAR S0
CHECKTYPE NORMAL
FIELD CODCAUS(1)
ADD RUN mg0 -0 %CAU
PROMPT 40 10 "Importa "
FIELD ImpTYPE
ITEM "1|Elementi nuovi"
ITEM "2|Elementi esistenti"
ITEM "3|Tutto"
END
STRING F_D_CARSCAR 50 36
SPREADSHEET F_CODNUM 80 10
BEGIN
PROMPT 40 6 ""
FLAGS "D"
END
STRING F_C_DOCUMENTI 4
BEGIN
PROMPT 2 7 "Causale magazzino documenti "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_DOCUMENTI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_DOCUMENTI CODTAB
OUTPUT F_D_DOCUMENTI S0
CHECKTYPE NORMAL
FIELD CODCAUS(2)
ADD RUN mg0 -0 %CAU
END
STRING F_D_DOCUMENTI 50 36
BEGIN
PROMPT 40 7 ""
FLAGS "D"
END
STRING F_C_SCONTRINI 4
BEGIN
PROMPT 2 8 "Causale magazzino scontrini "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_SCONTRINI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_SCONTRINI CODTAB
OUTPUT F_D_SCONTRINI S0
CHECKTYPE NORMAL
FIELD CODCAUS(3)
ADD RUN mg0 -0 %CAU
END
STRING F_D_SCONTRINI 50 36
BEGIN
PROMPT 40 8 ""
FLAGS "D"
END
STRING F_C_GENERICI 4
BEGIN
PROMPT 2 9 "Causale magazzino mov.generici "
USE %CAU SELECT (S2[8,8]=1)&&(S6="P")
INPUT CODTAB F_C_GENERICI
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_C_GENERICI CODTAB
OUTPUT F_D_GENERICI S0
CHECKTYPE NORMAL
FIELD CODCAUS(4)
ADD RUN mg0 -0 %CAU
END
STRING F_D_GENERICI 50 36
BEGIN
PROMPT 40 9 ""
FLAGS "D"
END
GROUPBOX DLG_NULL 78 3
BEGIN
PROMPT 1 11 "@bCorrispettivi"
END
STRING F_C_CORRISPETTIVI 4
BEGIN
PROMPT 2 12 "Causale contabile "
USE LF_CAUSALI SELECT TIPODOC="CR"
INPUT CODCAUS F_C_CORRISPETTIVI
DISPLAY "Codice" CODCAUS
DISPLAY "Descrizione@50" DESCR
OUTPUT F_C_CORRISPETTIVI CODCAUS
OUTPUT F_D_CORRISPETTIVI DESCR
CHECKTYPE NORMAL
FIELD CODCAUSC
ADD RUN cg0 -4
END
STRING F_D_CORRISPETTIVI 50 36
BEGIN
PROMPT 40 12 ""
FLAGS "D"
PROMPT 2 13 "Numerazioni"
ITEM "Suffisso"
ITEM "Fatture"
ITEM "Note di\ncredito@6"
ITEM "Bolle@6"
ITEM "Carichi\nScarichi"
ITEM "Scontrini"
ITEM "Generici"
ITEM "Ordini\nClienti"
END
ENDPAGE
ENDMASK
PAGE "Numerazioni" -1 -1 78 19
STRING F_SUFFISSO 5
BEGIN
PROMPT 1 1 "Suffisso numer."
END
STRING F_COD_FATTURE 4
BEGIN
PROMPT 1 3 "Num.Fatture "
USE %NUM SELECT I1=="2"
INPUT CODTAB F_COD_FATTURE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_COD_FATTURE CODTAB
OUTPUT F_DES_FATTURE S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_FATTURE 50
BEGIN
PROMPT 25 3 ""
FLAGS "D"
END
STRING F_COD_NOTE 4
BEGIN
PROMPT 1 5 "Num.Note cred. "
COPY USE F_COD_FATTURE
INPUT CODTAB F_COD_NOTE
DISPLAY "Codice" CODTAB
DISPLAY "Descrizione@50" S0
OUTPUT F_COD_NOTE CODTAB
OUTPUT F_DES_NOTE S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_NOTE 50
BEGIN
PROMPT 25 5 ""
FLAGS "D"
END
STRING F_COD_BOLLE 4
BEGIN
PROMPT 1 7 "Num.Bolle "
USE %NUM SELECT I1=="1"
INPUT CODTAB F_COD_BOLLE
COPY DISPLAY F_COD_FATTURE
OUTPUT F_COD_BOLLE CODTAB
OUTPUT F_DES_BOLLE S0
FLAG "UPA"
WARNING "Numerazione assente"
END
STRING F_DES_BOLLE 50
BEGIN
PROMPT 25 7 ""
FLAGS "D"
END
STRING F_COD_CARSCAR 4
BEGIN
PROMPT 1 9 "Num.Car.Scar. "
USE %NUM SELECT I1=="0"
INPUT CODTAB F_COD_CARSCAR
COPY DISPLAY F_COD_FATTURE
OUTPUT F_COD_CARSCAR CODTAB
OUTPUT F_DES_CARSCAR S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_CARSCAR 50
BEGIN
PROMPT 25 9 ""
FLAGS "D"
END
STRING F_COD_SCONTRINI 4
BEGIN
PROMPT 1 11 "Num.Scontrini "
COPY USE F_COD_CARSCAR
INPUT CODTAB F_COD_SCONTRINI
COPY DISPLAY F_COD_FATTURE
OUTPUT F_COD_SCONTRINI CODTAB
OUTPUT F_DES_SCONTRINI S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_SCONTRINI 50
BEGIN
PROMPT 25 11 ""
FLAGS "D"
END
STRING F_COD_GENERICI 4
BEGIN
PROMPT 1 13 "Num.Scontrini "
COPY USE F_COD_CARSCAR
INPUT CODTAB F_COD_GENERICI
COPY DISPLAY F_COD_FATTURE
OUTPUT F_COD_GENERICI CODTAB
OUTPUT F_DES_GENERICI S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_GENERICI 50
BEGIN
PROMPT 25 13 ""
FLAGS "D"
END
STRING F_COD_ORDCLI 4
BEGIN
PROMPT 1 15 "Num.Ordini Cli."
USE %NUM SELECT I1=="3"
INPUT CODTAB F_COD_ORDCLI
COPY DISPLAY F_COD_FATTURE
OUTPUT F_COD_ORDCLI CODTAB
OUTPUT F_DES_ORDCLI S0
FLAG "UPA"
CHECKTYPE NORMAL
WARNING "Numerazione assente"
END
STRING F_DES_ORDCLI 50
BEGIN
PROMPT 25 15 ""
FLAGS "D"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_DELREC 10 2
BEGIN
PROMPT -23 -1 ""
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
ENDMASK

View File

@ -136,6 +136,8 @@ long TApplication::task_eh(WINDOW win, EVENT *ep)
{
// Setta il vero menu principale se diverso dal default
const int meno = _application->argc() > 1 ? atoi(_application->argv(1)+1) : 0;
xvt_vobj_hide(win);
ignore_xvt_errors(TRUE);
MENU_ITEM* menu = xvt_res_get_menu(MENU_BAR_ID(meno));
ignore_xvt_errors(FALSE);
@ -187,6 +189,10 @@ long TApplication::handler(WINDOW win, EVENT* ep)
_create_ok = create();
if (_create_ok)
{
if (task_win_shown())
xvt_vobj_show(TASK_WIN);
if (task_win_iconized())
xvt_vobj_minimize(TASK_WIN);
on_firm_change();
on_config_change();
return 1;
@ -296,12 +302,11 @@ void TApplication::stop_run()
{
if (_savefirm)
prefix().set_codditta(_savefirm);
terminate();
terminate();
xvt_app_destroy();
}
bool TApplication::add_menu(TString_array& menu, MENU_TAG id)
{
TTemp_window tw(TASK_WIN);
@ -316,15 +321,13 @@ bool TApplication::remove_menu(MENU_TAG id)
TApplication::TApplication()
: _god_vars(NULL),_savefirm(0), _running(FALSE), _create_ok(FALSE)
: _god_vars(nullptr),_savefirm(0), _running(false), _create_ok(false), _force(false)
{
}
TApplication::~TApplication()
{
if (_god_vars != NULL)
delete _god_vars;
SAFE_DELETE(_god_vars);
}
bool TApplication::create()
@ -341,7 +344,8 @@ void TApplication::terminate()
if (_create_ok)
destroy(); // Distruzione files e maschere
do_events();
if(!_force)
do_events();
if (use_files())
{
@ -371,7 +375,8 @@ const char* TApplication::get_module_name() const
const TDongle& d = dongle();
const TString4 modname = _name.left(2);
word aut = d.module_name2code(modname);
if (aut == 0xFFFF && modname == "ps")
if (aut == 0xFFFF && modname == "ps")
{
aut = 0;
module = TR("Personalizzazioni");
@ -404,19 +409,12 @@ const char* TApplication::get_module_name() const
}
}
}
if (!ok)
{
if(is_power_station())
{
warning_box("Attenzione! Non sei abilitato per l'utilizzo del modulo %s", static_cast<const char*>(module));
}
else
{
cantaccess_box(module);
module.cut(0);
}
}
}
if (!ok && !is_power_station())
{
cantaccess_box(module);
module.cut(0);
}
}
}
return module;
}
@ -769,7 +767,7 @@ void TApplication::open_files(int logicnum, ...)
va_start(marker, logicnum);
while (logicnum >= LF_USER && logicnum < LF_EXTERNAL)
{
if (_used_files.objptr(logicnum) == NULL)
if (_used_files.objptr(logicnum) == nullptr)
_used_files.add(new TLocalisamfile(logicnum), logicnum);
logicnum = va_arg(marker, int);
}
@ -880,9 +878,8 @@ bool TApplication::get_next_mail(TToken_string& to, TToken_string& cc, TToken_st
bool TSkeleton_application::create()
{
// dispatch_e_menu(BAR_ITEM_ID(1));
// return TApplication::create();
const bool ok = TApplication::create();
if (ok) dispatch_e_menu(BAR_ITEM_ID(1));
return ok;
}

View File

@ -1,4 +1,3 @@
#pragma once
#ifndef __APPLICATION_H
#define __APPLICATION_H
@ -51,6 +50,9 @@ class TApplication
// @cmember:(INTERNAL) Codice della ditta
long _savefirm;
// @cmember:(INTERNAL) Chiusura forzata per programmi senza interfaccia
bool _force;
// @cmember:(INTERNAL) Indica se l'applicazione e' partita
bool _running;
@ -59,7 +61,7 @@ class TApplication
// @cmember:(INTERNAL) Termine dell'applicazione
void terminate();
// @access Protected Member
protected:
// @cmember Ritorna il nome del modulo dell'applicazione
@ -101,7 +103,7 @@ protected:
void open_files(int logicnum, ...);
// @cmember Percorso documenti archiviati
bool get_spotlite_path(TFilename& path) const;
bool get_spotlite_path(TFilename& path) const;
// @access Public Member
public:
@ -135,6 +137,8 @@ public:
// @cmember Forza la chiusura dell'applicazione
void stop_run();
void TApplication::force_stop() {_force = true;}
// @cmember Mette il segno Check a fianco di una voce di menu
void check_menu_item(MENU_TAG item, bool on = true);
@ -188,6 +192,10 @@ public:
bool add_menu(TString_array& menu, MENU_TAG id = 0);
// @cmember Elimina il menu' <p id> (Ritorna se ce l'ha fatta???)
bool remove_menu(MENU_TAG id);
// @cmember imposta la visibità della finestra principale
virtual bool task_win_shown() const { return true; }
// @cmember imposta la riduzione a icona della finestra principale
virtual bool task_win_iconized() const { return false; }
// @cmember Costruttore
TApplication();

View File

@ -230,7 +230,7 @@ TArray& objptr2array(TObject* obj);
class TToken_string;
#endif
#define STRING_TOKEN(obj) (obj == nullptr ? EMPTY_STRING : *(TToken_string *) obj)
#define STRING_TOKEN(obj) ((TToken_string &)(obj == nullptr ? EMPTY_STRING : *(TToken_string *) obj))
// @doc EXTERNAL

View File

@ -1,19 +1,25 @@
#include <stdlib.h>
#include <assoc.h>
#include <utility.h>
// @ccost:(INTERNAL) HASH_SIZE | 883 | Dimensione della tabella hash
const int HASH_SIZE = 883;
THash_object::~THash_object()
{
if (_obj != NULL)
delete _obj;
safe_delete(_obj);
}
// @doc EXTERNAL
// @class TAssoc_array | Tabella hash di oggetti generici
//
// @base public |TObject
TArray& TAssoc_array::bucket(int index)
{
TArray* arr = (TArray*)_bucket.objptr(index);
if (arr == NULL)
if (arr == nullptr)
{
arr = new TArray;
_bucket.add(arr, index);
@ -41,7 +47,7 @@ THash_object* TAssoc_array::_lookup(
const TFixed_string key(k);
const word hv = key.hash() % HASH_SIZE;
TArray& arr = bucket(hv);
THash_object* o = NULL;
THash_object* o = nullptr;
isnew = false;
int i;
@ -54,7 +60,7 @@ THash_object* TAssoc_array::_lookup(
break;
}
if (o == NULL)
if (o == nullptr)
{
if (insert)
{
@ -85,7 +91,7 @@ TObject* TAssoc_array::last_item()
{
_rowitem = _bucket.last();
if( _rowitem < 0 )
return NULL;
return nullptr;
_colitem = bucket(_rowitem).items() - 1;
return pred_item( );
}
@ -105,9 +111,9 @@ TObject* TAssoc_array::succ_item()
}
}
if (_rowitem >= HASH_SIZE)
return NULL;
return nullptr;
THash_object* o = (THash_object*)arr->objptr(_colitem++);
return (o == NULL || o->_obj == NULL) ? NULL : o->_obj;
return (o == nullptr || o->_obj == nullptr) ? nullptr : o->_obj;
}
TObject* TAssoc_array::pred_item()
@ -125,28 +131,28 @@ TObject* TAssoc_array::pred_item()
}
}
if (_rowitem < 0 )
return NULL;
return nullptr;
THash_object* o = (THash_object*)arr->objptr(_colitem--);
return (o == NULL || o->_obj == NULL) ? NULL : o->_obj;
return (o == nullptr || o->_obj == nullptr) ? nullptr : o->_obj;
}
THash_object* TAssoc_array::random_hash_object()
{
THash_object* o = NULL;
THash_object* o = nullptr;
if (items() > 0)
{
int bucket = rand() % _bucket.size();
if (_bucket.objptr(bucket) == NULL)
if (_bucket.objptr(bucket) == nullptr)
bucket = _bucket.succ(bucket);
if (_bucket.objptr(bucket) == NULL)
if (_bucket.objptr(bucket) == nullptr)
bucket = _bucket.pred(bucket);
const TArray* arr = (const TArray*)_bucket.objptr(bucket);
if (arr != NULL)
if (arr != nullptr)
{
const int item = rand() % arr->size();
o = (THash_object*)arr->objptr(item);
if (o != NULL)
if (o != nullptr)
{
_rowitem = bucket;
_colitem = item;
@ -162,7 +168,7 @@ THash_object* TAssoc_array::random_hash_object()
// @rdesc Ritorna TRUE se esisteva gia' un elemento con la stessa chiave
bool TAssoc_array::add(
const char* key, // @parm Chiave d'ordinamento
TObject* obj, // @parm Oggetto da inserire (default=NULL)
TObject* obj, // @parm Oggetto da inserire (default=nullptr)
bool force) // @parm Permette di forzare l'inserimento se esiste gia'
// un oggetto con la stessa chiave
@ -185,7 +191,7 @@ bool TAssoc_array::add(
{
if (force)
{
if (o->_obj != NULL)
if (o->_obj != nullptr)
delete o->_obj;
o->_obj = obj;
}
@ -197,6 +203,27 @@ bool TAssoc_array::add(
return false;
}
bool TAssoc_array::add(const char* key, // @parm Chiave d'ordinamento
const char * str, // @parm stringa da inserire
bool force) // @parm Permette di forzare l'inserimento se esiste gia'
{
bool isnew = false;
THash_object* o = _lookup(key, isnew, true);
if (!isnew)
{
if (force)
{
if (o->_obj != nullptr)
delete o->_obj;
o->_obj = new TString(str);
}
return true;
}
o->_obj = new TString(str);
return false;
}
bool TAssoc_array::add(const char* key, const TObject& obj, bool force)
{
/*
@ -216,7 +243,7 @@ bool TAssoc_array::add(const char* key, const TObject& obj, bool force)
}
if (force && o->_obj != &obj) // Tolla 2017: Aggiunto controllo sugli indirizzi, perchè c'è questo problema?
{
if (o->_obj != NULL)
if (o->_obj != nullptr)
delete o->_obj;
o->_obj = obj.dup();
}
@ -239,7 +266,7 @@ bool TAssoc_array::remove(
const TFixed_string key(k);
const word hv = key.hash() % HASH_SIZE;
TArray& arr = bucket(hv);
THash_object* o = NULL;
THash_object* o = nullptr;
int i;
for (i = 0; i < arr.items(); i++)
@ -250,7 +277,7 @@ bool TAssoc_array::remove(
if (ob->_key > key)
break;
}
if (o != NULL)
if (o != nullptr)
{
arr.destroy(i,TRUE);
_cnt--;
@ -280,13 +307,13 @@ TObject& TAssoc_array::find(
// @doc EXTERNAL
// @mfunc Ritorna l'oggetto con chiave <p key>
// @rdesc Se l'oggetto esiste ne ritorna il puntatore, altrimenti ritorna NULL
// @rdesc Se l'oggetto esiste ne ritorna il puntatore, altrimenti ritorna nullptr
TObject* TAssoc_array::objptr(
const char* key) const // @parm Chiave dell'oggetto da ritornare
{
bool isnew = false;
THash_object* o = ((TAssoc_array*)this)->_lookup(key,isnew);
return o ? o->_obj : NULL;
return o ? o->_obj : nullptr;
}
// @doc EXTERNAL
@ -302,14 +329,14 @@ bool TAssoc_array::is_key(
{
bool isnew = FALSE;
THash_object* o = ((TAssoc_array *)this)->_lookup(key,isnew);
return o != NULL;
return o != nullptr;
}
// @doc EXTERNAL
// @mfunc Ritorna solo l'oggetto
//
// @rdesc Ritorna il puntatore all'oggetto (se diverso da NULL), altrimenti
// @rdesc Ritorna il puntatore all'oggetto (se diverso da nullptr), altrimenti
// ritorna error object
TObject* TAssoc_array::get()
// @xref <mf TAssoc_array::get_hashobj>
@ -326,17 +353,17 @@ TObject* TAssoc_array::get()
if (_row >= HASH_SIZE)
{
_row = 0;
return NULL;
return nullptr;
}
THash_object* o = (THash_object*)arr->objptr(_col++);
return (o == NULL || o->_obj == NULL) ? &error_object : o->_obj;
return (o == nullptr || o->_obj == nullptr) ? &error_object : o->_obj;
}
// @doc EXTERNAL
// @mfunc Ritorna l'oggetto e la relativa chiave
//
// @rdesc Se l'oggetto esiste ne ritorna il puntatore, altrimenti ritorna NULL
// @rdesc Se l'oggetto esiste ne ritorna il puntatore, altrimenti ritorna nullptr
THash_object* TAssoc_array::get_hashobj()
// @comm Se l'oggetto viene trovato viene richiamata la funzione
@ -356,7 +383,7 @@ THash_object* TAssoc_array::get_hashobj()
if (_row >= HASH_SIZE)
{
_row = 0;
return NULL;
return nullptr;
}
return (THash_object*)arr->objptr(_col++);
}
@ -368,11 +395,13 @@ int TAssoc_array::get_keys(TString_array& kl, bool add_values)
{
kl.destroy();
restart();
THash_object* o = NULL;
THash_object* o = nullptr;
TString tmp(80);
while ((o = get_hashobj()))
{
TToken_string* tt = new TToken_string(o->key());
if (add_values)
{
tmp = "";
@ -389,7 +418,7 @@ const TString& TAssoc_array::get_str(const char* key) const
{
bool isnew = false;
THash_object* o = ((TAssoc_array *)this)->_lookup(key,isnew);
if (o != NULL && o->obj().is_kind_of(CLASS_STRING))
if (o != nullptr && o->obj().is_kind_of(CLASS_STRING))
return (const TString&)o->obj();
return EMPTY_STRING;
}
@ -397,7 +426,7 @@ const TString& TAssoc_array::get_str(const char* key) const
bool TAssoc_array::get_bool(const char* key) const
{
const TString& str = get_str(key);
return str.full() && strchr("1XY", str[0]) != NULL;
return str.full() && strchr("1XY", str[0]) != nullptr;
}
int TAssoc_array::get_int(const char* key) const
@ -442,17 +471,18 @@ TObject* TCache::objptr(const TString& key)
{
const int hv = key.hash() % _data.size();
THash_object* ho = (THash_object*)_data.objptr(hv);
TObject* obj = NULL;
if (ho != NULL && ho->key() == key)
TObject* obj = nullptr;
if (ho != nullptr && ho->key() == key)
{
obj = &ho->obj();
}
else
{
obj = key2obj(key);
if (obj != NULL)
if (obj != nullptr)
{
if (ho != NULL)
if (ho != nullptr)
{
discarding(ho);
_data.destroy(hv);

View File

@ -14,6 +14,7 @@
// @class THash_object | Classe per la definizione degli elementi di una tabella hash.
//
// @base public | TObject
class THash_object : public TObject
// @author:(INTERNAL) Villa
{
@ -37,10 +38,10 @@ public:
TObject& obj() const
{ return *_obj; }
TObject* remove_obj() { TObject* o = _obj; _obj = NULL; return o; }
TObject* remove_obj() { TObject* o = _obj; _obj = nullptr; return o; }
// @cmember Costruttore (inizializza la chiave ed opzionalmente l'oggetto)
THash_object(const char* k, TObject* o = NULL) : _key(k), _obj(o)
THash_object(const char* k, TObject* o = nullptr) : _key(k), _obj(o)
{}
// @cmember Distruttore
virtual ~THash_object();
@ -109,6 +110,9 @@ public:
// @cmember Aggiunge una copia dell'oggetto
bool add(const char* key, const TObject& obj, bool force = false);
// @cmember Aggiunge una stringa. Se era gia' presente guarda il parametro force
bool add(const char* key, const char * str, bool force = false);
// @cmember Elimina un oggetto
bool remove(const char* key);

View File

@ -41,7 +41,7 @@ END
STRING F_KEYFIELD2 30
BEGIN
PROMPT 42 2 "Campo 2 "
PROMPT 44 2 "Campo 2 "
FLAGS "D"
END
@ -53,7 +53,7 @@ END
STRING F_KEYFIELD4 30
BEGIN
PROMPT 42 3 "Campo 4 "
PROMPT 44 3 "Campo 4 "
FLAGS "D"
END
@ -65,7 +65,7 @@ END
STRING F_KEYFIELD6 30
BEGIN
PROMPT 42 4 "Campo 6 "
PROMPT 44 4 "Campo 6 "
FLAGS "D"
END
@ -77,7 +77,7 @@ END
STRING F_KEYFIELD8 30
BEGIN
PROMPT 42 5 "Campo 8 "
PROMPT 44 5 "Campo 8 "
FLAGS "D"
END
@ -89,7 +89,7 @@ END
STRING F_KEYFIELD10 30
BEGIN
PROMPT 42 6 "Campo 10 "
PROMPT 44 6 "Campo 10 "
FLAGS "D"
END
@ -101,7 +101,7 @@ END
STRING F_KEYFIELD12 30
BEGIN
PROMPT 42 7 "Campo 12 "
PROMPT 44 7 "Campo 12 "
FLAGS "D"
END
@ -113,7 +113,7 @@ END
STRING F_KEYFIELD14 30
BEGIN
PROMPT 42 8 "Campo 14 "
PROMPT 44 8 "Campo 14 "
FLAGS "D"
END
@ -125,7 +125,7 @@ END
STRING F_KEYFIELD16 30
BEGIN
PROMPT 42 9 "Campo 16 "
PROMPT 44 9 "Campo 16 "
FLAGS "D"
END
@ -137,7 +137,7 @@ END
STRING F_KEYFIELD18 30
BEGIN
PROMPT 42 10 "Campo 18 "
PROMPT 44 10 "Campo 18 "
FLAGS "D"
END
@ -149,7 +149,7 @@ END
STRING F_KEYFIELD20 30
BEGIN
PROMPT 42 11 "Campo 20 "
PROMPT 44 11 "Campo 20 "
FLAGS "D"
END

View File

@ -52,7 +52,10 @@ bool fatal_box(
{
buildmsg();
if (__batch)
__errors.add(msg);
{
if (__errors.find(msg) < 0)
__errors.add(msg);
}
else
xvt_dm_post_fatal_exit(msg);
return false;
@ -69,7 +72,10 @@ bool error_box(
{
buildmsg();
if (__batch)
__errors.add(msg);
{
if (__errors.find(msg) < 0)
__errors.add(msg);
}
else
xvt_dm_post_error(msg);
return false;
@ -85,7 +91,10 @@ bool warning_box(
{
buildmsg();
if (__batch)
__warnings.add(msg);
{
if (__warnings.find(msg) < 0)
__warnings.add(msg);
}
else
xvt_dm_post_warning(msg);
return 0;
@ -117,7 +126,10 @@ bool message_box(
{
buildmsg();
if (__batch)
__warnings.add(msg);
{
if (__warnings.find(msg) < 0)
__warnings.add(msg);
}
else
xvt_dm_post_message(msg);
return false;
@ -133,7 +145,10 @@ bool sorry_box(
{
buildmsg();
if (__batch)
__warnings.add(msg);
{
if (__warnings.find(msg) < 0)
__warnings.add(msg);
}
else
xvt_dm_post_note(msg);
return false;
@ -147,7 +162,8 @@ bool noyes_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return true;
}
ASK_RESPONSE r = xvt_dm_post_ask("No", "Si", NULL, msg);
@ -162,7 +178,8 @@ int noyesall_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return K_NO;
}
ASK_RESPONSE r = xvt_dm_post_ask("No", "Si", "Si Tutti", msg);
@ -180,7 +197,8 @@ int custom_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return K_NO;
}
ASK_RESPONSE r = xvt_dm_post_ask(buttons, buttonc, buttond, msg);
@ -203,7 +221,8 @@ bool yesno_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return false;
}
ASK_RESPONSE r = xvt_dm_post_ask("Si", "No", NULL, msg);
@ -218,7 +237,8 @@ int yesnoall_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return K_NO;
}
ASK_RESPONSE r = xvt_dm_post_ask("No", "Si", "No Tutti", msg);
@ -277,7 +297,8 @@ int yesnocancel_box(
buildmsg();
if (__batch)
{
__errors.add(msg);
if (__errors.find(msg) < 0)
__errors.add(msg);
return K_NO;
}
ASK_RESPONSE r = xvt_dm_post_ask("Si", "No", "Annulla", msg);

View File

@ -25,6 +25,7 @@
#define CLASS_CONTAINER 100
#define CLASS_ARRAY 101
#define CLASS_STACK 102
#define CLASS_INDEXED_ARRAY 103
#define CLASS_WINDOW 200
#define CLASS_SHEET 201

View File

@ -255,17 +255,40 @@ bool TConfig::exist(
// @flag TRUE | Se la variabile esiteva
// @flag FALSE | Se la variabile non esiteva
bool TConfig::remove(
const char* var, // @parm Nome della variabile
int index) // @parm Indice dell'elemento dell'array (default -1)
const char* var, // @parm Nome della variabile
int index) // @parm Indice dell'elemento dell'array (default -1)
// @comm Se <p index> e' <gt>= 0 viene costruito il nome dell'elemento
// dell'array da cercare, diversamente viene cercata la variabile
// normale passata in <p var>.
{
const char* key = get_varkey(var, index);
const bool ok = _data.remove(key);
if (ok) _dirty = true;
return ok;
const char* key = get_varkey(var, index);
const bool ok = _data.remove(key);
if (ok) _dirty = true;
return ok;
}
// @mfunc Elimina una variabile dal paragrafo section
//
// @rdesc Ritorna i seguenti valori:
//
// @flag TRUE | Se la variabile esiteva
// @flag FALSE | Se la variabile non esiteva
bool TConfig::remove(
const char* var, // @parm Nome della variabile
const char* section, // @parm Sezione della variabile
int index) // @parm Indice dell'elemento dell'array (default -1)
// @comm Se <p index> e' <gt>= 0 viene costruito il nome dell'elemento
// dell'array da cercare, diversamente viene cercata la variabile
// normale passata in <p var>.
{
if (section && *section) // Cambia paragrafo se necessario
set_paragraph(section);
const char* key = get_varkey(var, index);
const bool ok = _data.remove(key);
if (ok) _dirty = true;
return ok;
}
// @doc EXTERNAL
@ -972,9 +995,14 @@ bool ini_set_string(const char* file, const char* paragraph, const char* name, c
bool ini_remove(const char* file, const char* para, const char* name, int idx)
{
TConfig c(file,para);
#ifndef DIRECT
DECLARE_VARNAME(name, idx);
return xvt_sys_remove_profile_string(file, para, varname) != 0;
#else
TConfig c(file, para);
return c.remove(name, idx);
#endif
}
bool ini_get_bool(const char* file, const char* para, const char* name, bool defval, int idx)

View File

@ -128,6 +128,9 @@ public:
// @cmember Elimina una variabile nel paragrafo attivo
bool remove(const char* var, int index = -1);
// @cmember Elimina una variabile nel paragrafo attivo
bool remove(const char* var, const char * section, int index = -1);
// @cmember Elimina una array di variabili nel paragrafo attivo
bool remove_array(const char* var);

View File

@ -86,7 +86,6 @@ TObject* TDowJones::rec2obj(const TRectype& rec) const
data->_chg = UNO;
}
}
if (codval.full())
{
data->_dec = rec.get_int("I0");

View File

@ -107,10 +107,14 @@ TDate::TDate(int day, int month, int year)
{
if (day >= 1 && day <= 31 && month >= 1 && month <= 12 && year > 0)
{
// 01/06/07 Tolla: Se passo il giorno 31 sicuramente voglio l'ultimo! Così passando 31/02/xx mi torna
if(day == 31)
/* // 01/06/07 Tolla: Se passo il giorno 31 sicuramente voglio l'ultimo! Così passando 31/02/xx mi torna che cazzata esiste last_day qui sotto
if (day == 31)
#ifdef DBG
error_box("Mattia sei un imbecille");
#else
_val = makedata(last_day(month,year), month, year);
else
#endif
else */
_val = makedata(day, month, year);
}
else

View File

@ -36,7 +36,7 @@ public:
// @cmember Controlla se l'utente puo' eseguire il programma
bool can_run() const;
// @cmember Esegue il processo
long run(bool async = FALSE, byte user = TRUE, bool iconizetask = true);
long run(bool async = false, byte user = true, bool iconizetask = true);
// @cmember Ritorna l'ultimo codice di uscita
int exitcode() const { return _exitcode; }

View File

@ -1230,7 +1230,7 @@ TCodesym TExpression::__factor(TCodesym startsym)
_code.add(_number, real(parms_found));
val = real(index);
_code.add(startsym, val);
_user_func_defined = TRUE;
_user_func_defined = true;
}
}
}

View File

@ -225,7 +225,7 @@ public:
// @cmember Ritorna una token string contenente la descrizione del campo
const char* fielddef(int fld) const;
// @cmember Ritorna una stringa contenente la chiave
const char* keydef(int key) const;
const char* keydef(int key = 0) const;
// @cmember Ritorna la lunghezza del record
int len() const;

View File

@ -6,6 +6,7 @@
#endif
/* @M */
#define K_UNDEF 0
#define K_BACKSPACE 8
#define K_TAB 9
#define K_ENTER 13

View File

@ -797,7 +797,7 @@ bool TMask::stop_run(
}
}
}
if (i >= last)
if (i >= last)
return false;
}
@ -2802,12 +2802,12 @@ void TMask::post_error_message(const char* msg, int sev)
}
}
// @comm Check_mask fatta per la relapp chiamate in modo batch verifica la consistenza della maschera senza visualizzare l'interfaccia.
// @comm Se la finestra non era aperta la apre in modo modale
KEY TMask::check_mask()
// @comm Se la finestra non era aperta la apre in modo modale
{
start_run();
return stop_run(K_ENTER) ? K_ENTER : K_ESC;
return stop_run(K_AUTO_ENTER) ? K_ENTER : K_QUIT;
}
// @cmember ritorna la posizione del primo campo di una cella di uno sheet

View File

@ -32,8 +32,6 @@ class TMultiple_rectype : public TAuto_variable_rectype
protected:
const TArray & files() const { return _files;}
// @cmember Documento nuovo (non presente sul database).
bool nuovo() const { return _nuovo; }
// @cmember funzione per costruire la chiave delle righe
virtual void set_body_key(TRectype & rowrec);
// @cmember verifica se la chiave della testata e' completa
@ -73,7 +71,9 @@ public:
void set_nuovo(bool nuovo) { _nuovo = nuovo; }
// @cmember restituisce il record di testata
const TAuto_variable_rectype& head() const { return *this; } // Ritorna la testata del documento
// @cmember Documento nuovo (non presente sul database).
bool nuovo() const { return _nuovo; }
const TAuto_variable_rectype& head() const { return *this; } // Ritorna la testata del documento
// @cmember restituisce il record di testata
TAuto_variable_rectype& head() { return *this; } // Ritorna la testata del documento

View File

@ -707,6 +707,20 @@ void TODBC_recordset::remove_rec(const TISAM_recordset& dbfset)
upd.exec(query);
}
const char * TODBC_recordset::table_name()
{
TString & s = get_tmp_string(255);
int pos = _sql.find("FROM");
if (pos >= 0)
{
s = _sql.ltrim(pos + 5);
pos = s.find(" ");
if (pos > 0)
s = s.left(pos);
}
return s;
}
void TODBC_recordset::set(const char* sql)
{
if (not_frozen() || !_loaded || _sql != sql)

View File

@ -69,6 +69,7 @@ public:
void remove_rec(const TISAM_recordset& dbfset);
const TString& dsn() const { return _dsn; }
const char * table_name();
TODBC_recordset(const char* sql, const bool freezed = false);
virtual ~TODBC_recordset();

View File

@ -495,7 +495,7 @@ void TPostman::load_filters()
// Inserisce un elemento fasullo per segnalare l'avvenuta lettura
if (_expr.items() == 0)
_expr.add("", NULL);
_expr.add("", new TObject);
}
TExpression* TPostman::get_filter_expr(const char* flt)

View File

@ -789,6 +789,13 @@ TDirtype TFile_manager::get_dirtype(int logicnum)
return i.dir_type();
}
const char * TFile_manager::get_keydef(int logicnum, int key) const
{
TTrec r(logicnum);
return r.keydef(key - 1);
}
void TFile_manager::notify_change(TIsam_handle name)
{
TFile_info& i = fileinfo(name);
@ -1036,12 +1043,14 @@ void TPrefix::set(
{
const TString saved_prf = __ptprf; // Salvo __ptprf che viene cambiato da CGetPref
char* prfx = (char*)CGetPref(); // Safe non const cast for StPath cprefix
strcpy_s(__ptprf, saved_prf);
xvt_fsys_build_pathname(prfx, NULL, __ptprf, _prefix, NULL, NULL);
}
else
{
char* prfx = (char*)CGetPref(); // Safe non const cast for StPath cprefix
*prfx = '\0';
}
}

View File

@ -50,7 +50,7 @@ public:
TCodeb_handle get_handle(TIsam_handle name, int key);
int get_reclen(int logicnum);
const char * get_keydef(int logicnum, int key = 1) const ;
void notify_change(TIsam_handle name);
long last_change(TIsam_handle name) const;
@ -208,6 +208,9 @@ public:
const TFilename& get_filename(TIsam_handle name) const
{ return _manager.get_filename(name); }
const char * get_keyexpr(int logicnum, int key = 1) const
{ return TToken_string(_manager.get_keydef(logicnum, key)).get(); }
void notify_change(TIsam_handle name)
{ _manager.notify_change(name); }

View File

@ -1,3 +1,4 @@
#include <automask.h>
#include <colors.h>
#include <mailbox.h>
#include <msksheet.h>
@ -15,9 +16,10 @@
///////////////////////////////////////////////////////////
TRelation_application::TRelation_application()
: _mask(NULL), _search_id(-1), _lnflag(0),
: _mask(nullptr), _search_id(-1), _lnflag(0),
_autodelete(0), _navigating(false),
_locked(false)
_locked(false), _stop_on_error(0),
_curr_transaction(transaction_mode_interactive), _transaction_batch(false)
{ }
TRelation_application::~TRelation_application()
@ -29,7 +31,8 @@ bool TRelation_application::has_filtered_cursor() const
if (yes)
{
const TEdit_field& f = get_search_field();
yes = f.browse() != NULL;
yes = f.browse() != nullptr;
}
return yes;
}
@ -44,7 +47,7 @@ TCursor * TRelation_application::get_filtered_cursor() const
return f.browse()->cursor();
}
else
return NULL;
return nullptr;
}
void TRelation_application::setkey()
@ -103,7 +106,7 @@ void TRelation_application::set_limits(
if (has_filtered_cursor())
{
const TEdit_field& f = get_search_field();
if (f.browse() != NULL)
if (f.browse() != nullptr)
f.browse()->do_input(true);
TCursor* cur = get_filtered_cursor();
@ -267,7 +270,7 @@ void TRelation_application::enable_query()
if (c.is_edit())
{
TEdit_field& e = (TEdit_field&)c;
if (e.browse() != NULL)
if (e.browse() != nullptr)
e.enable_check(query);
}
}
@ -285,7 +288,7 @@ bool TRelation_application::can_I_read(const TRelation* rel) const
void TRelation_application::set_toolbar()
{
const int mode = _mask->mode();
const bool can_edit_some = can_I_write(NULL);
const bool can_edit_some = can_I_write(nullptr);
const bool can_nav = _lnflag == 0 && _curr_transaction != TRANSACTION_LINK;
bool enabsave = can_edit_some;
@ -337,7 +340,7 @@ void TRelation_application::set_toolbar()
{
// Prima: can_edit_some = can_I_write(NULL)
// Adesso: user_can_write() -> a me interessa che l'utente possa scrivere senza controllare che sia bloccato il record, si può sempre creare un record (se abilitati) nuovo anche in visualizzazione
bool enabins = (mode == MODE_QUERY || _lnflag == 0) && user_can_write(NULL);
bool enabins = (mode == MODE_QUERY || _lnflag == 0) && user_can_write(nullptr);
_mask->fld(pos).enable(enabins);
}
@ -359,7 +362,7 @@ bool TRelation_application::save_and_new() const
bool TRelation_application::save_and_quit() const
{
return (_autoins_caller.full() || _curr_transaction.not_empty()) && _curr_trans_mode != TM_REMAIN;
return (_autoins_caller.full() || _curr_transaction.not_empty()) && _curr_trans_mode != transaction_mode_remain;
}
int TRelation_application::set_mode(int mode)
@ -421,12 +424,12 @@ bool TRelation_application::autonum(
for (const char* n = k.get(0); n && *n; n = k.get())
{
TMask_field* fld = NULL;
TMask_field* fld = nullptr;
if (isdigit(*n))
fld = m->find_by_id(atoi(n));
else
fld = m->find_by_fieldname(n);
if (fld == NULL)
if (fld == nullptr)
{
NFCHECK("Identificatore di autonumerazione errato");
return false;
@ -454,7 +457,7 @@ void TRelation_application::query_mode(
// @flag FALSE | Entra in modo MODE_QUERY (default)
{
TMask* old = _mask;
const bool was_open = old != NULL && old->is_open();
const bool was_open = old != nullptr && old->is_open();
const bool changing = changing_mask(MODE_QUERY);
if (changing && was_open)
@ -721,7 +724,7 @@ int TRelation_application::delete_mode()
{
FOR_EACH_TOKEN(inplist, tok)
{
if (*tok != '"' && strchr(tok, '@') == NULL)
if (*tok != '"' && strchr(tok, '@') == nullptr)
{
TMask_field& e = _mask->field(short(atoi(tok)));
if (e.active())
@ -747,7 +750,7 @@ int TRelation_application::delete_mode()
FOR_EACH_TOKEN(inplist, tok)
{
if (*tok != '"' && strchr(tok, '@') == NULL)
if (*tok != '"' && strchr(tok, '@') == nullptr)
{
TMask_field& e = _mask->field(short(atoi(tok)));
if (!e.active())
@ -893,7 +896,7 @@ int TRelation_application::delete_mode()
{
cur = pos;
brw->do_output();
bool can_delete = FALSE;
bool can_delete = false;
if (find(1))
{
TRelation& r = *get_relation();
@ -909,14 +912,14 @@ int TRelation_application::delete_mode()
query_mode();
cur.freeze(true);
}
_autodelete = FALSE;
_autodelete = false;
}
if (!can_delete)
skipped++;
deleting--;
}
}
cur.freeze(FALSE);
cur.freeze(false);
set_limits(); // Riaggiorno il numero del primo/ultimo record
if (skipped > 0)
@ -930,9 +933,9 @@ int TRelation_application::delete_mode()
else
{
if (search_mode())
_autodelete = TRUE;
_autodelete = true;
}
return TRUE;
return true;
}
// @doc INTERNAL
@ -947,7 +950,7 @@ bool TRelation_application::test_key(
bool onereq = false, onefill = false;
for (TEditable_field* e = _mask->get_key_field(k, true);
e != NULL;
e != nullptr;
e = _mask->get_key_field(k, false))
{
if (e->required() && e->shown())
@ -962,7 +965,7 @@ bool TRelation_application::test_key(
#ifdef DBG
msg << "\nChiave " << int(k) << " - Campo " << e->dlg();
const TFieldref* fr = e->field();
if (fr != NULL)
if (fr != nullptr)
{
msg << " - " << fr->name();
if (fr->to() > 0)
@ -1163,6 +1166,9 @@ bool TRelation_application::save(bool check_dirty)
was_dirty = false;
TWait_cursor hourglass;
if (batch_transaction_in_error())
return true;
if (mode == MODE_INS)
{
bool changed = true;
@ -1268,6 +1274,7 @@ int TRelation_application::write(const TMask& m)
int TRelation_application::rewrite(const TMask& m)
{
TRelation& r = *get_relation();
m.autosave(r);
r.curr().set_modify_info();
@ -1356,13 +1363,19 @@ bool TRelation_application::remove()
bool TRelation_application::firm_change_enabled() const
{
bool ok = TApplication::firm_change_enabled();
ok &= (_mask == NULL || _mask->query_mode()) && _lnflag == 0;
ok &= (_mask == nullptr || _mask->query_mode()) && _lnflag == 0;
return ok;
}
void TRelation_application::main_loop()
{
KEY k;
KEY k = K_UNDEF;
TProgress_monitor * p = nullptr;
if (_prog_message.full())
p = new TProgress_monitor(_ntransactions, _prog_message);
if (_transaction_batch)
batch();
do {
// ciclo delle transazioni
_recins = -1;
@ -1381,11 +1394,14 @@ void TRelation_application::main_loop()
{
// la transazione necessita di autopremimento
_autodelete = _curr_transaction == TRANSACTION_DELETE;
if (_curr_transaction == TRANSACTION_INSERT )
_mask->send_key(K_CTRL+'N', 0);
if (_curr_transaction == TRANSACTION_INSERT)
_mask->send_key(K_CTRL + 'N', 0);
else
_mask->send_key(K_AUTO_ENTER, 0);
}
if (_transaction_batch)
do_events();
}
}
else // la transazione non è sul .ini
{
@ -1411,18 +1427,26 @@ void TRelation_application::main_loop()
_mask->send_key(K_CTRL+'E', 0);
else
error_box(TR("Elemento non eliminabile."));
_autodelete = FALSE;
_autodelete = false;
}
}
if (_curr_trans_mode == TM_BATCH)
if (is_transaction() && _transaction_batch)
{
batch();
k = _mask->check_mask();
batch(false);
KEY k_tmp = _mask->check_mask();
if (k_tmp == K_ENTER)
{
if (k != K_UNDEF)
k_tmp = K_SAVE;
}
else
if (_stop_on_error > 0)
_stop_on_error++;
k = k_tmp;
}
else
k = _mask->run();
k = _mask->run();
switch (k)
{
@ -1439,7 +1463,7 @@ void TRelation_application::main_loop()
}
break;
case K_QUIT:
if (!save(TRUE))
if (!is_batch_transaction() && !save(TRUE))
k = K_ENTER;
break;
case K_F1:
@ -1472,8 +1496,11 @@ void TRelation_application::main_loop()
else
insert_mode();
}
if (_curr_trans_mode == TM_AUTOMATIC || _curr_trans_mode == TM_BATCH)
_mask->send_key(K_CTRL+'R', 0);
if (_curr_trans_mode == transaction_mode_automatic && !_transaction_batch)
{
_mask->send_key(K_CTRL + 'R', 0);
do_events();
}
break;
case K_SAVE:
if (save(FALSE))
@ -1484,7 +1511,7 @@ void TRelation_application::main_loop()
}
else
{
if (save_and_new() && can_I_write(NULL))
if (save_and_new() && can_I_write(nullptr))
{
if (_mask->insert_mode())
insert_mode();
@ -1516,7 +1543,7 @@ void TRelation_application::main_loop()
else
insert_mode();
}
if (_curr_trans_mode == TM_AUTOMATIC || _curr_trans_mode == TM_BATCH)
if (_curr_trans_mode == transaction_mode_automatic || _transaction_batch)
_mask->send_key(K_CTRL+'R', 0);
break;
case K_DEL:
@ -1526,6 +1553,8 @@ void TRelation_application::main_loop()
}
else
{
if (batch_transaction_in_error())
break;
if (relation_remove())
{
query_mode();
@ -1559,7 +1588,7 @@ void TRelation_application::main_loop()
{
for (TEdit_field* e = (TEdit_field *) _mask->get_key_field(1, TRUE); e; e = (TEdit_field *) _mask->get_key_field(1, FALSE))
{
if (e->is_kind_of(CLASS_EDIT_FIELD) && e->shown() && e->browse() != NULL) // Ignora campi invisibili o senza check
if (e->is_kind_of(CLASS_EDIT_FIELD) && e->shown() && e->browse() != nullptr) // Ignora campi invisibili o senza check
{
TCursor* b = e->browse()->cursor();
@ -1574,7 +1603,7 @@ void TRelation_application::main_loop()
TCursor* cur = c ;
if (c == NULL)
if (c == nullptr)
cur = new TCursor(get_relation());
err = file().reread();
@ -1586,8 +1615,8 @@ void TRelation_application::main_loop()
file().curr() = cur->curr();
if (can_I_read(cur->relation()))
err = get_relation()->read(_isequal, _testandlock);
if (c == NULL)
delete cur;
if (c == nullptr)
safe_delete(cur);
}
break;
case K_PREV:
@ -1598,7 +1627,7 @@ void TRelation_application::main_loop()
{
for (TEdit_field* e = (TEdit_field *) _mask->get_key_field(1, TRUE); e; e = (TEdit_field *) _mask->get_key_field(1, FALSE))
{
if (e->is_kind_of(CLASS_EDIT_FIELD) && e->shown() && e->browse() != NULL) // Ignora campi invisibili o senza check
if (e->is_kind_of(CLASS_EDIT_FIELD) && e->shown() && e->browse() != nullptr) // Ignora campi invisibili o senza check
{
TCursor* b = e->browse()->cursor();
@ -1611,28 +1640,28 @@ void TRelation_application::main_loop()
}
}
TCursor* cur = c ;
TCursor* cur = c ;
if (c == NULL)
cur = new TCursor(get_relation());
if (c == nullptr)
cur = new TCursor(get_relation());
file().reread();
file().reread();
cur->curr() = file().curr();
cur->read();
--(*cur);
while (cur->pos() > 0 && !can_I_read(cur->relation()))
while (cur->pos() > 0 && !can_I_read(cur->relation()))
--(*cur);
file().curr() = cur->curr();
if (can_I_read(cur->relation()))
err = get_relation()->read(_isequal, _testandlock);
if (c == NULL)
delete cur;
err = get_relation()->read(_isequal, _testandlock);
if (c == nullptr)
safe_delete(cur);
}
break;
case K_END:
case K_END:
err = file().readat(_last, _testandlock);
break;
default:
default:
break;
}
if (err == NOERR || err == _islocked)
@ -1649,7 +1678,7 @@ void TRelation_application::main_loop()
} while (k != K_QUIT);
if (_mask->is_open())
_mask->close_modal();
_mask->close_modal();
_mask->set_mode(NO_MODE);
@ -1675,25 +1704,40 @@ void TRelation_application::main_loop()
else
{
const int err = get_relation()->status();
ini.set("Result", err == NOERR ? "CANCEL" : "ERROR");
ini.set("Error", err);
ini.set("Result", (err == NOERR && !is_batch_transaction()) ? "CANCEL" : "ERROR");
ini.set("Error", !is_batch_transaction() ? err : -1);
}
if (_curr_trans_mode == TM_BATCH)
if (_transaction_batch)
{
TString_array & errs = errors();
TString_array & errs = errors();
FOR_EACH_ARRAY_ROW(errs, r, s)
ini.set("ErrMsg", *s, "Main", false, r);
ini.set("ErrorMsg", *s, "Transaction", true, r);
for (int r = errs.items(); ini.exist("ErrorMsg", "Transaction", r); r++)
ini.remove("ErrorMsg", "Transaction", r);
TString_array & warns = warnings();
FOR_EACH_ARRAY_ROW(warns, r1, s1)
ini.set("WarningMsg", *s1, "Main", false, r1);
ini.set("WarningMsg", *s1, "Transaction", true, r1);
for (int r = warns.items(); ini.exist("WarningMsg", "Transaction", r); r++)
ini.remove("WarningMsg", "Transaction", r);
errs.destroy();
warns.destroy();
}
}
_trans_counter++;
if (p != nullptr)
p->addstatus(1L);
k = K_UNDEF;
} while ( _trans_counter < _ntransactions);
if (_transaction_batch)
{
batch(false);
force_stop();
}
safe_delete(p);
}
bool TRelation_application::filter()
@ -1720,7 +1764,7 @@ bool TRelation_application::filter()
TString80 t;
const char* s;
while((s = body.get()) != NULL)
while((s = body.get()) != nullptr)
{
t = s;
const int u = t.find('=');
@ -1732,12 +1776,12 @@ bool TRelation_application::filter()
_fixed.add(t);
const short fid = atoi(t.left(u));
const TFieldref* campo = _mask->field(fid).field();
if (campo != NULL)
if (campo != nullptr)
campo->write(t.mid(u+1), rec);
}
cur->setfilter("");
cur->setregion(rec, rec, 0x2);
if (s == NULL) id = 0;
if (s == nullptr) id = 0;
}
}
@ -1757,7 +1801,7 @@ bool TRelation_application::filter()
TString str, tmp;
const char* v = body.get();
for (int i = 0; v != NULL && i < _mask->fields(); i++)
for (int i = 0; v != nullptr && i < _mask->fields(); i++)
{
TMask_field& f = _mask->fld(i);
if (f.active() && f.dlg() > 0 && f.in_key(key))
@ -1785,7 +1829,7 @@ bool TRelation_application::filter()
const char * s;
TString t, v;
while((s = body.get()) != NULL)
while((s = body.get()) != nullptr)
{
t = s;
const int u = t.find('=');
@ -1816,7 +1860,7 @@ bool TRelation_application::filter()
const TString * v = (const TString *) field_values.objptr(field_name);
TString val;
if (v == NULL && to >= 0)
if (v == nullptr && to >= 0)
{
v = (const TString *)field_values.objptr(field->name());
if (v)
@ -1834,23 +1878,22 @@ bool TRelation_application::filter()
}
}
}
return TRUE;
return true;
}
void TRelation_application::set_link(TMask & m, const char * keyexpr)
{
CHECK(keyexpr != NULL, "Invalid expression");
CHECK(keyexpr != nullptr, "Invalid expression");
TToken_string body(keyexpr);
const int key = body.get_int();
_lnflag = TRUE;
_lnflag = true;
const char* v = body.get();
TString16 tmp;
const int max = m.fields();
for (int i = 0; i < max && v != NULL; i++)
for (int i = 0; i < max && v != nullptr; i++)
{
TMask_field& f = m.fld(i);
@ -1871,14 +1914,15 @@ bool TRelation_application::parse_command_line()
_trans_ini.destroy();
_trans_counter=0;
_curr_transaction = "";
_curr_trans_mode = 'I';
_curr_trans_mode = transaction_mode_interactive;
TFilename ini;
for (int i = argc()-1; i > 0; i--)
{
ini = argv(i);
if ((ini[0] == '-' || ini[0] == '/') && (ini[1] == 'I' || ini[1] == 'i'))
if ((ini[0] == '-' || ini[0] == '/') && ((toupper(ini[1]) == 'I') || (toupper(ini[1]) == 'B')))
{
_transaction_batch = (toupper(ini[1]) == 'B');
ini.ltrim(2);
if (ini.starts_with("="))
ini.ltrim(1);
@ -1895,6 +1939,16 @@ bool TRelation_application::parse_command_line()
else
cantread_box(ini);
}
TString msg = argv(i + 1);
if (msg.starts_with("-m") || msg.starts_with("-M"))
{
i++;
msg.ltrim(2);
msg.strip("\"");
_prog_message = msg;
}
break;
}
}
@ -1915,7 +1969,8 @@ bool TRelation_application::load_transaction()
TConfig cnf(_trans_ini.row(_trans_counter), "Transaction");
_curr_transaction = cnf.get("Action");
_curr_transaction.upper();
_curr_trans_mode = toupper(cnf.get("Mode")[0]);
_curr_trans_mode = (transaction_mode) toupper(cnf.get("Mode")[0]);
_stop_on_error = cnf.get_bool("StopOnError") ? 1 : 0;
_curr_trans_from = cnf.get("From");
const long firm = cnf.get_long("Firm");
if (firm > 0)
@ -1937,10 +1992,8 @@ bool TRelation_application::load_transaction()
void TRelation_application::on_firm_change()
{
TApplication::on_firm_change();
if (_mask != NULL)
{
if (_mask != nullptr)
set_limits(0x3);
}
}
void TRelation_application::ini2query_mask()
@ -1959,6 +2012,7 @@ void TRelation_application::ini2insert_mask()
{
TString8 n; n.format("%d", get_relation()->lfile().num());
TConfig ini(_trans_ini.row(_trans_counter), n);
ini2mask(ini, *_mask, FALSE);
}
}
@ -1994,6 +2048,7 @@ void TRelation_application::ini2mask(TConfig& ini, TMask& m, bool query)
if (!query && campo.is_sheet())
{
TSheet_field &sheet=(TSheet_field &)campo;
ini2sheet(ini, sheet);
}
}
@ -2017,7 +2072,7 @@ void TRelation_application::edit_mask2ini()
void TRelation_application::ini2sheet(TConfig& ini,TSheet_field &sheet)
{
if (sheet.record() != NULL)
if (sheet.record() != nullptr)
{
const int lognum = sheet.record()->logic_num();
const TMask& sm = sheet.sheet_mask();
@ -2027,8 +2082,17 @@ void TRelation_application::ini2sheet(TConfig& ini,TSheet_field &sheet)
for (int r = 1; ;r++)
{
bool found = false;
defpar.format("%d,%d", lognum, r);
if (ini.set_paragraph(defpar))
for (int i = 0; i < 3 && !(found = ini.set_paragraph(defpar)); i++)
{
const int pos = defpar.find(',');
if (pos > 0)
defpar.insert("0", pos + 1);
}
if (found)
{
TToken_string& row = sheet.row(r-1);
for (int sf = sm.fields()-1; sf >= 0; sf--)
@ -2051,7 +2115,7 @@ void TRelation_application::ini2sheet(TConfig& ini,TSheet_field &sheet)
void TRelation_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
{
if (sheet.record() != NULL)
if (sheet.record() != nullptr)
{
const int lognum = sheet.record()->logic_num();
const TMask& sm = sheet.sheet_mask();
@ -2063,25 +2127,38 @@ void TRelation_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
for (r = 1 ; r <= sheet.items(); r++)
{
bool found = false;
defpar.format("%d,%d", lognum, r);
for (int i = 0; i < 3 && !(found = ini.set_paragraph(defpar)); i++)
{
const int pos = defpar.find(',');
if (pos > 0)
defpar.insert("0", pos + 1);
}
if (found)
if (ini.set_paragraph(defpar))
ini.remove_all();
defpar.format("%d,%04d", lognum, r);
TMask_field* fkey;
sheet.restart_key();
while ((fkey = sheet.get_key(str)))
{
ini.set(str, fkey->get(), defpar);
}
TToken_string& row = sheet.row(r-1);
const char* value;
int i;
for (i = 0, value = row.get(0); value; i++, value = row.get())
{
const TMask_field& campo = sm.field(FIRST_FIELD+i);
const TFieldref* fr = campo.field();
if (fr)
{
if (value == NULL || *value == '\0')
if (value == nullptr || *value == '\0')
value = " ";
// ini.set(fr->name(), value, defpar);
fr->write(ini, defpar, value);
@ -2091,6 +2168,16 @@ void TRelation_application::sheet2ini(TSheet_field &sheet,TConfig& ini)
for (r = sheet.items()+1; ; r++)
{
defpar.format("%d,%d", lognum, r);
bool found = false;
defpar.format("%d,%d", lognum, r);
for (int i = 0; i < 3 && !(found = ini.set_paragraph(defpar)); i++)
{
const int pos = defpar.find(',');
if (pos > 0)
defpar.insert("0", pos + 1);
}
if (ini.set_paragraph(defpar))
ini.remove_all();
else
@ -2172,7 +2259,7 @@ bool TRelation_application::mask2mail(const TMask& m)
{
TConfig ini(ininame, "Transaction");
const char* action = "";
char mode[2] = { TM_AUTOMATIC, '\0' };
char mode[2] = { transaction_mode_automatic, '\0' };
switch (m.mode())
{
case NO_MODE:

View File

@ -13,19 +13,14 @@
#include <relation.h>
#endif
#ifndef __MASK_H
#include <mask.h>
#ifndef __AUTOMASK_H
#include <automask.h>
#endif
#ifndef __TRANSACTION_H
#include <transaction.h>
#endif
#define TRANSACTION_RUN "RUN" // Run application (eventually sets firm)
#define TRANSACTION_INSERT "INSERT" // Create a new record and fill it
#define TRANSACTION_MODIFY "MODIFY" // Load and modify an existing record
#define TRANSACTION_DELETE "DELETE" // Delete an existing record
#define TRANSACTION_LINK "LINK" // Load an existing record and interactively edit it
#define TM_INTERACTIVE 'I'
#define TM_AUTOMATIC 'A'
#define TM_REMAIN 'R'
#define TM_BATCH 'B'
// @doc EXTERNAL
// @class TRelation_application | Classe per la gestione di una applicazione di manutenzione di uno
@ -68,14 +63,20 @@ class TRelation_application : public TSkeleton_application
// @cmember:(INTERNAL) Azione della transazione corrente
TString _curr_transaction;
// @cmember:(INTERNAL) Modalità di esecuzione della transazione corrente (Automatica o interattiva)
char _curr_trans_mode;
transaction_mode _curr_trans_mode;
// @cmember:(INTERNAL) Modalità di esecuzione batch della transazione corrente
bool _transaction_batch;
// @cmember:(INTERNAL) Transazione ricevuta da .....
TString _curr_trans_from;
// @cmember:(INTERNAL) Messaggio progress monitor transazioni
TString _prog_message;
// @cmember:(INTERNAL) Flag di cancellazione automatica veloce
int _autodelete;
// @cmember:(INTERNAL) Flag di navigazione tramite toolbar
bool _navigating;
bool _locked;
// @cmember:(INTERNAL) Flag di controllo scritt ura su errore per le transizioni batch
int _stop_on_error;
private:
// @cmember:(INTERNAL) Carica la transazione corrente (protocollo via .ini)
@ -96,7 +97,7 @@ private:
void set_key_filter();
// @cmember:(INTERNAL) Posiziona l'applicazione in modo richiesta/inserimento (chiama <mf TRelation_application::query_mode>)
void query_insert_mode()
{ query_mode(TRUE); }
{ query_mode(true); }
// @cmember:(INTERNAL) Entra in modo inserimento
void insert_mode();
// @cmember:(INTERNAL) Cancella il record corrente
@ -283,9 +284,13 @@ public:
bool lnflag() const { return _lnflag != 0;}
// @cmember Ritorna TRUE se e' una transazione
virtual bool is_transaction() const { return _curr_transaction.not_empty(); }
virtual bool is_batch_transaction() const { return is_transaction() && _transaction_batch; }
virtual bool batch_transaction_in_error() const { return is_batch_transaction() && _stop_on_error > 1; }
virtual word class_id() const { return CLASS_RELATION_APPLICATION; }
virtual bool task_win_shown() const { return !_transaction_batch; }
// @cmember Costruttore
TRelation_application();
// @cmember Distruttore

View File

@ -727,8 +727,10 @@ bool file2app(TString & file ,TString& app)
return app.full();
}
void execute_transactions(TArray & transactions, TLog_report & log)
void execute_transactions(TArray & transactions, TLog_report & log, bool interactive, const char * msg)
{
TString prog_msg(msg);
if (transactions.items() > 0)
{
TBit_array processed;
@ -748,11 +750,14 @@ void execute_transactions(TArray & transactions, TLog_report & log)
break;
if (table.full())
{
TFilename path = t.name().path();
TFilename pref = t.name();
pref.ext("");
while (isdigit(pref[pref.len() - 1]))
pref.rtrim(1);
while (i >= 0)
{
if (t.executer() == table && path == t.name().path())
if (t.executer() == table && t.name().starts_with(pref))
{
t.write();
processed.set(i);
@ -768,11 +773,14 @@ void execute_transactions(TArray & transactions, TLog_report & log)
if (file2app(table, app))
{
TFilename filemask(path);
TFilename filemask(pref);
TString_array files;
filemask << "*" << "." << t.ext();
app << " -i" << filemask << " -u" << user();
app << (interactive ? " -i" : " -b") << filemask;
if (prog_msg.full())
app << " -m\"" << prog_msg << "\"";
app << " -u" << user();
TExternal_app cmd(app);
cmd.run();

View File

@ -186,6 +186,6 @@ public:
virtual ~TTransaction() {}
};
void execute_transactions(TArray & transactions, TLog_report & log);
void execute_transactions(TArray & transactions, TLog_report & log, bool interactive = true, const char * msg = nullptr);
#endif

View File

@ -517,8 +517,8 @@ HIDDEN bool _fixlen_val(TMask_field& f, KEY)
const int length = get_int_val_param(0);
const bool ok = s.len() == length;
if (!ok)
f.error_box(FR("La lunghezza del campo deve essere %d %s"),
length, f.is_kind_of(CLASS_REAL_FIELD) ? TR("cifre") : TR("caratteri"));
f.error_box(FR("La lunghezza del campo %s deve essere %d %s"),
f.prompt(), length, f.is_kind_of(CLASS_REAL_FIELD) ? TR("cifre") : TR("caratteri"));
return ok;
}
@ -703,7 +703,7 @@ HIDDEN bool _alpha_val(TMask_field& f, KEY k)
const TString& s = f.get();
for (int i = 0; s[i]; i++)
if (!isalpha(s[i]))
return f.error_box(TR("Sono ammessi solo caratteri alfabetici"));
return f.error_box(FR("Sono ammessi solo caratteri alfabetici nel campo %s"), f.prompt());
}
return true;
}
@ -822,7 +822,7 @@ HIDDEN bool _ora_val(TMask_field& f, KEY key)
if ( ok )
f.set( ora );
else
return f.error_box(TR("Ora errata o formato non valido"));
return f.error_box(FR("Ora errata o formato non valido nel campo %s"), f.prompt());
}
}
return true;

View File

@ -57,6 +57,7 @@ public:
bool GetEnclosedReal(const char* strAttr, real & r) const;
TXmlItem& SetAttr(const char* strAttr, const char* strVal);
void ListAttrs(TString_array & attrs) const { attrs.destroy(); if (m_Attributes) m_Attributes->get_keys(attrs); }
const TString& GetAttr(const char* strAttr) const;
TXmlItem& SetAttr(const char* strAttr, int n);
TXmlItem& SetColorAttr(const char* strAttr, COLOR rgb);

View File

@ -1173,10 +1173,7 @@ void TMotore_application::ini2mask(TConfig& ini, TMask& msk, bool query)
{
const TRectype& art = cache().get(LF_ANAMAG, codart);
if (art.empty())
{
error_box(FR("Articolo non valido sulla riga %d: %s"), f.items(), (const char*)codart);
rec.zero(RDOC_CODARTMAG);
}
}
}
else

View File

@ -3742,6 +3742,28 @@ BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, cons
#endif
}
XVTDLL BOOLEAN xvt_sys_remove_profile_string(const char* file, const char* paragraph, const char* name)
{
if (file == NULL || *file == '\0')
file = xvt_fsys_get_campo_ini();
if (paragraph == NULL || *paragraph == '\0')
paragraph = "Main";
#ifdef __WXMSW__
return ::WritePrivateProfileString(paragraph, name, nullptr, file) > 0;
#else
wxFileConfig ini("", "", file, "", wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_RELATIVE_PATH);
ini.SetUmask(0x0);
wxString path;
path << "/" << paragraph;
ini.SetPath(path);
return ini.DeleteEntry(name);
#endif
}
BOOLEAN xvt_sys_find_editor(const char* file, char* editor)
{
BOOLEAN ok = FALSE;

View File

@ -432,6 +432,7 @@ XVTDLL int xvt_sys_get_profile_string(const char* file, const char* paragra
const char* defval, char* value, int maxsize);
XVTDLL BOOLEAN xvt_sys_set_profile_int(const char* file, const char* paragraph, const char* name, long value);
XVTDLL BOOLEAN xvt_sys_set_profile_string(const char* file, const char* paragraph, const char* name, const char* value);
XVTDLL BOOLEAN xvt_sys_remove_profile_string(const char* file, const char* paragraph, const char* name);
XVTDLL int xvt_sys_get_session_id();
XVTDLL unsigned long xvt_sys_get_free_memory();