Merge branch 'R_10_00' of http://10.65.20.33/sirio/CAMPO/campo into R_10_00
This commit is contained in:
commit
2afd197cd3
@ -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
3
cd/test/ba1086.txt
Normal file
@ -0,0 +1,3 @@
|
||||
ba3.exe
|
||||
|
||||
Importazione Bee Store
|
33
cd/test/ba1086a.ini
Normal file
33
cd/test/ba1086a.ini
Normal 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
BIN
cd/test/ba1086a1.zip
Normal file
Binary file not shown.
4
cd/test/bs1086.txt
Normal file
4
cd/test/bs1086.txt
Normal file
@ -0,0 +1,4 @@
|
||||
bs0.exe
|
||||
bs0500a.msk
|
||||
|
||||
Importazione Bee Store
|
26
cd/test/bs1086a.ini
Normal file
26
cd/test/bs1086a.ini
Normal 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
BIN
cd/test/bs1086a1.zip
Normal file
Binary file not shown.
3
cd/test/cg1086.txt
Normal file
3
cd/test/cg1086.txt
Normal file
@ -0,0 +1,3 @@
|
||||
cg0.exe
|
||||
|
||||
Importazione Bee Store
|
98
cd/test/cg1086a.ini
Normal file
98
cd/test/cg1086a.ini
Normal 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
BIN
cd/test/cg1086a1.zip
Normal file
Binary file not shown.
3
cd/test/sy1086.txt
Normal file
3
cd/test/sy1086.txt
Normal file
@ -0,0 +1,3 @@
|
||||
xvaga.dll
|
||||
|
||||
Importazione Bee Store
|
24
cd/test/sy1086a.ini
Normal file
24
cd/test/sy1086a.ini
Normal 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
BIN
cd/test/sy1086a1.zip
Normal file
Binary file not shown.
4
cd/test/ve1086.txt
Normal file
4
cd/test/ve1086.txt
Normal file
@ -0,0 +1,4 @@
|
||||
ve0.exe
|
||||
ve2.exe
|
||||
|
||||
Importazione Bee Store
|
137
cd/test/ve1086a.ini
Normal file
137
cd/test/ve1086a.ini
Normal 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
BIN
cd/test/ve1086a1.zip
Normal file
Binary file not shown.
4
cd/test/ve1088.txt
Normal file
4
cd/test/ve1088.txt
Normal 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
130
cd/test/ve1088a.ini
Normal 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
BIN
cd/test/ve1088a1.zip
Normal file
Binary file not shown.
@ -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;
|
||||
|
@ -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";
|
||||
|
@ -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()
|
||||
{
|
||||
|
2416
src/bs/bs0500.cpp
2416
src/bs/bs0500.cpp
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -86,7 +86,6 @@ TObject* TDowJones::rec2obj(const TRectype& rec) const
|
||||
data->_chg = UNO;
|
||||
}
|
||||
}
|
||||
|
||||
if (codval.full())
|
||||
{
|
||||
data->_dec = rec.get_int("I0");
|
||||
|
@ -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
|
||||
|
@ -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; }
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -6,6 +6,7 @@
|
||||
#endif
|
||||
|
||||
/* @M */
|
||||
#define K_UNDEF 0
|
||||
#define K_BACKSPACE 8
|
||||
#define K_TAB 9
|
||||
#define K_ENTER 13
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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';
|
||||
}
|
||||
}
|
||||
|
@ -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); }
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user