Merge branch 'R_10_00' of http://10.65.20.17:7990/scm/campo/campo into R_10_00

This commit is contained in:
AlexBonazzi 2019-01-15 11:50:11 +01:00
commit 4d17750b34
62 changed files with 1316 additions and 180 deletions

View File

@ -168,10 +168,11 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\fp\fplib01.h" />
<ClInclude Include="..\src\fp\fplib.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\fp\fplib01.cpp" />
<ClCompile Include="..\src\fp\fplib02.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">

View File

@ -8,14 +8,17 @@
<UniqueIdentifier>{afa0f493-bfe6-4bd2-add2-3256306ed9c5}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\fp\fplib01.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\fp\fplib01.cpp">
<Filter>Sources</Filter>
</ClCompile>
<ClCompile Include="..\src\fp\fplib02.cpp">
<Filter>Sources</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\fp\fplib.h">
<Filter>Headers</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -13,15 +13,18 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{B184942F-568D-4B21-BD89-16908381BF8F}</ProjectGuid>
<RootNamespace>mg0</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -99,6 +102,9 @@
<Xdcmake>
<OutputFile>$(IntDir)</OutputFile>
</Xdcmake>
<PostBuildEvent>
<Command>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "$(TargetPath)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Midl>
@ -148,6 +154,9 @@
<Xdcmake>
<OutputFile>$(IntDir)</OutputFile>
</Xdcmake>
<PostBuildEvent>
<Command>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "$(TargetPath)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\cg\cglib01.cpp">
@ -267,7 +276,9 @@
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="campo.rc" />
<ResourceCompile Include="campo.rc">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="AgaLib.vcxproj">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -13,15 +13,18 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{28F3586B-D475-4355-818D-8B1184179848}</ProjectGuid>
<RootNamespace>mg1</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -96,6 +99,9 @@
<Xdcmake>
<OutputFile>Shout Out To My Ex</OutputFile>
</Xdcmake>
<PostBuildEvent>
<Command>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "$(TargetPath)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
@ -145,6 +151,10 @@
<Xdcmake>
<OutputFile>Shout Out To My Ex</OutputFile>
</Xdcmake>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\cg\cglib01.cpp">
@ -241,7 +251,9 @@
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="campo.rc" />
<ResourceCompile Include="campo.rc">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\mg\mg1400.h" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -12,15 +12,18 @@
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{39CE744C-B605-40BD-BB78-0DEFE6E7C7F5}</ProjectGuid>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -95,6 +98,9 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<OutputFile>.\..\release/mg3.bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "$(TargetPath)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
@ -142,6 +148,10 @@
<SuppressStartupBanner>true</SuppressStartupBanner>
<OutputFile>.\..\debug/mg3.bsc</OutputFile>
</Bscmake>
<PostBuildEvent>
<Command>
</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\src\ba\ba8500.cpp">
@ -284,7 +294,9 @@
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="campo.rc" />
<ResourceCompile Include="campo.rc">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="AgaLib.vcxproj">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -13,15 +13,18 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{6652496B-7D18-4A1A-956A-21220B61956F}</ProjectGuid>
<RootNamespace>mg4</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
@ -100,6 +103,9 @@
<Xdcmake>
<OutputFile>$(IntDir)</OutputFile>
</Xdcmake>
<PostBuildEvent>
<Command>"C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64\signtool.exe" sign /a /s MY /n "Sirio Informatica e Sistemi SPA" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /v "$(TargetPath)"</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Midl>
@ -234,7 +240,9 @@
</CustomBuildStep>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="campo.rc" />
<ResourceCompile Include="campo.rc">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="AgaLib.vcxproj">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
@ -13,17 +13,20 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{7B861319-83F5-414C-A8D6-2A8B0D2F8919}</ProjectGuid>
<RootNamespace>mg_masktab</RootNamespace>
<WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Utility</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>v141</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">

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

@ -0,0 +1,4 @@
recdesc\f111.trr
recdesc\f111.dir
- Aggiunta del numero di riga di riferimento alla riga del movimento di magazzino

32
cd/test/ba0670a.ini Normal file
View File

@ -0,0 +1,32 @@
[Main]
Demo=0
[ba2]
File(236) = recdesc\f111.dir|X
File(237) = recdesc\f111.trr|X
Patch = 670
Versione = 21511200
[ba99]
Kill(0) = batbsce.txt|x
Kill(1) = wxmsw240.dll|x
Kill(2) = bastcms.rep|x
Kill(3) = bastcms.msk|x
Kill(4) = bastfsc.msk|x
Kill(5) = bastfsc.rep|x
Kill(6) = bastuue.msk|x
Kill(7) = bastuue.rep|x
[ba]
Data = 08-01-2019
Descrizione = Base
Dischi = 1
Moduli = sy
OEM =
Patch = 670
PostProcess = bainst -0 BA
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/ba0670a1.zip Normal file

Binary file not shown.

10
cd/test/fp0666.txt Normal file
View File

@ -0,0 +1,10 @@
fp0.exe
fp0100a.msk
fp0200a.msk
fp0300a.msk
- Aggiunta di 3 nuovi parametri: esportazione clienti senza cod sdi nè pec (0000000), esportazione esteri, codice destinatario per esteri
- La qta adesso è una stringa (così non viene arrotondata)
- Aggiunto salvataggio campi maschera al riempimento dello sheet per salvare le configurazioni necessarie in esportazione
- Sistemata scrittura conai per chi ha azzerato il record in ditta.ini
- Aggiunta ricerca per ragione sociale nel programma di immissione massiva cod sdi e pec

22
cd/test/fp0666a.ini Normal file
View File

@ -0,0 +1,22 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
File(1) = fp0100a.msk|X
File(2) = fp0200a.msk|X
File(3) = fp0300a.msk|X
Patch = 666
Versione = 21511200
[fp]
Data = 02-01-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 0666
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0666a1.zip Normal file

Binary file not shown.

7
cd/test/fp0668.txt Normal file
View File

@ -0,0 +1,7 @@
fp0.exe
fp0100a.msk
fp0300a.msk
- Aggiunta gestione F8: con il flag attivo viene data la possibilità di segnare gli XML in uscita in errore
- Aggiunto flag F8 in impostazione
- Corretta lettura causale 770

21
cd/test/fp0668a.ini Normal file
View File

@ -0,0 +1,21 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
File(1) = fp0100a.msk|X
File(3) = fp0300a.msk|X
Patch = 0668
Versione = 21511200
[fp]
Data = 07-01-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 668
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0668a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,4 @@
fp0.exe
- Nuova gestione sheet di selezione documenti
- Sistemata divisa estera

19
cd/test/fp0672a.ini Normal file
View File

@ -0,0 +1,19 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
Patch = 672
Versione = 21511200
[fp]
Data = 10-01-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 672
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0672a1.zip Normal file

Binary file not shown.

5
cd/test/fp0674.txt Normal file
View File

@ -0,0 +1,5 @@
fp0.exe
Aggiunto prefisso e postfisso sul numero di fattura fp dal codice numerazione
Ottimizzata gestione qta e prezzo
Sistemato controllo codice sdi con aggiunta per stranieri con P.IVA italiana

19
cd/test/fp0674a.ini Normal file
View File

@ -0,0 +1,19 @@
[Main]
Demo=0
[fp1]
File(0) = fp0.exe|X
Patch = 0674
Versione = 21511200
[fp]
Data = 14-01-2019
Descrizione = Fattura Elettronica
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 674
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/fp0674a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
li0.exe
Sistemato inserimento lettere intento 2019

19
cd/test/li0668a.ini Normal file
View File

@ -0,0 +1,19 @@
[Main]
Demo=0
[li1]
File(0) = li0.exe|X
Patch = 0668
Versione = 21511200
[li]
Data = 07-01-2019
Descrizione = Dichiarazioni d'intento
Dischi = 1
Moduli = cg,ve
OEM =
Patch = 668
PostProcess =
PreProcess =
Versione = 21511200

BIN
cd/test/li0668a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
mg1.exe
Nella chiusura di magazzino provvisoria non azzerava le dotazioni che venivano raddoppiate

27
cd/test/mg0662a.ini Normal file
View File

@ -0,0 +1,27 @@
[Main]
Demo=0
[mg1]
Edit_110 = mg1 -0
File(2) = mg1.exe|X
Patch = 662
Versione = 21511200
[mg99]
Kill(0) = batbfcg.msk|x
Kill(1) = batbubi.msk|x
Kill(2) = efstbnp.rep|x
Kill(3) = efstbnp.msk|x
Kill(4) = eftbbnp.msk|x
Kill(5) = bastfcg.msk|x
[mg]
Data = 28-12-2018
Dischi = 1
Moduli = ba,cg9,ve9,pr9,ef9
OEM =
Patch = 662
PostProcess = bainst -0 MG
PreProcess =
Versione = 21511200

BIN
cd/test/mg0662a1.zip Normal file

Binary file not shown.

2
cd/test/mr0676.txt Normal file
View File

@ -0,0 +1,2 @@
mr0.exe
Corretta richiesta variabili esportazione compass

23
cd/test/mr0676a.ini Normal file
View File

@ -0,0 +1,23 @@
[Main]
Demo=0
[mr1]
Edit_4 = mr0 -1
Edit_5 = mr0 -1
File(1) = mr0.exe|X
Patch = 0676
Versione = 21511200
[mr]
Data = 15-01-2019
Descrizione = Manufacturing Resource Planning
Dischi = 1
Moduli = mg,db,ve
OEM =
Patch = 676
PostProcess =
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/mr0676a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
sc2600a.msk
Ridistribuita la maschera sc2600a.msk

21
cd/test/sc0666a.ini Normal file
View File

@ -0,0 +1,21 @@
[Main]
Demo=0
[sc1]
File(21) = sc2600a.msk|X
Patch = 666
Versione = 21511200
[sc]
Data = 02-01-2019
Descrizione = Saldaconto
Dischi = 1
Moduli = ba,cg
OEM =
Patch = 666
PostProcess =
PreProcess =
Prezzo(1) =
Prezzo(2) =
Versione = 21511200

BIN
cd/test/sc0666a1.zip Normal file

Binary file not shown.

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

@ -0,0 +1,3 @@
ve0.exe
Sistemata eliminazione di righe generate automaticamente, prima prendeva tutte le righe del documento (comprese quelle generate in automatico) e siccome le trovava piene non cancellava le altre.

134
cd/test/ve0664a.ini Normal file
View File

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

BIN
cd/test/ve0664a1.zip Normal file

Binary file not shown.

18
cd/test/ve0670.txt Normal file
View File

@ -0,0 +1,18 @@
ve5200.msk
ve1.exe
ve5.exe
ve0.exe
cg0200a.msk
cg1.exe
cg0.exe
cg0500a.msk
cg1500a.msk
cgtbbnp.msk
cgtbvet.msk
cgtbnot.msk
cg6.exe
cgmenu.men
cg1300m.msk
pr0.exe
- Aggiunta del numero di riga di riferimento alla riga del movimento di magazzino

167
cd/test/ve0670a.ini Normal file
View File

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

BIN
cd/test/ve0670a1.zip Normal file

Binary file not shown.

View File

@ -10,7 +10,7 @@
#include "recset.h"
#include "progind.h"
#include "../ve/velib.h"
#include "fplib01.h"
#include "fplib.h"
class TParametri_mask : public TAutomask
{
@ -34,28 +34,30 @@ TParametri_mask::TParametri_mask(const char * n) : TAutomask(n)
void TParametri_mask::save_all() const
{
ini_set_string(CONFIG_DITTA, "fp", "ip", get(F_INDIRIZZO));
ini_set_string(CONFIG_DITTA, "fp", "db", get(F_DATABASE));
ini_set_string(CONFIG_DITTA, "fp", "usr", get(F_USER));
ini_set_string(CONFIG_DITTA, "fp", "psw", encode(get(F_PASSWORD)));
ini_set_string(CONFIG_DITTA, "fp", "flddest", get(F_FLDDEST));
ini_set_string(CONFIG_DITTA, "fp", "fldusrdest", get(F_FLDUSRDEST));
ini_set_string(CONFIG_DITTA, "fp", "cofitras", get(F_COFI));
ini_set_bool(CONFIG_DITTA, "fp", "gestioneallegati", get_bool(F_ESPORTAALLEG));
ini_set_bool(CONFIG_DITTA, "fp", "allegafatt", get_bool(F_ESPORTADOC));
fp_settings().set_db_indirizzo(get(F_INDIRIZZO));
fp_settings().set_db_database(get(F_DATABASE));
fp_settings().set_db_user(get(F_USER));
fp_settings().set_db_password(get(F_PASSWORD));
fp_settings().set_fld_dest(get(F_FLDDEST));
fp_settings().set_fld_dest_usr(get(F_FLDUSRDEST));
fp_settings().set_cofi_tras(get(F_COFI));
fp_settings().set_gest_alleg(get_bool(F_ESPORTAALLEG));
fp_settings().set_allega_fat(get_bool(F_ESPORTADOC));
fp_settings().set_f8(get_bool(F_F8));
}
void TParametri_mask::load_all()
{
set(F_INDIRIZZO, ini_get_string(CONFIG_DITTA, "fp", "ip"));
set(F_DATABASE, ini_get_string(CONFIG_DITTA, "fp", "db"));
set(F_USER, ini_get_string(CONFIG_DITTA, "fp", "usr"));
set(F_PASSWORD, decode(ini_get_string(CONFIG_DITTA, "fp", "psw")));
set(F_FLDDEST, ini_get_string(CONFIG_DITTA, "fp", "flddest"));
set(F_FLDUSRDEST, ini_get_string(CONFIG_DITTA, "fp", "fldusrdest"));
set(F_COFI, ini_get_string(CONFIG_DITTA, "fp", "cofitras"));
set(F_ESPORTAALLEG, ini_get_bool(CONFIG_DITTA, "fp", "gestioneallegati"));
set(F_ESPORTADOC, ini_get_bool(CONFIG_DITTA, "fp", "allegafatt"));
set(F_INDIRIZZO, fp_settings().get_db_indirizzo());
set(F_DATABASE, fp_settings().get_db_database());
set(F_USER, fp_settings().get_db_user());
set(F_PASSWORD, fp_settings().get_db_password());
set(F_FLDDEST, fp_settings().get_fld_dest());
set(F_FLDUSRDEST, fp_settings().get_fld_dest_usr());
set(F_COFI, fp_settings().get_cofi_tras());
set(F_ESPORTAALLEG, fp_settings().get_gest_alleg());
set(F_ESPORTADOC, fp_settings().get_allega_fat());
set(F_F8, fp_settings().is_f8());
}
void TParametri_mask::tipi_import() const

View File

@ -7,6 +7,7 @@
#define F_COFI 107
#define F_ESPORTAALLEG 108
#define F_ESPORTADOC 109
#define F_F8 110
#define F_SETPATCH 201
#define F_ENPTYTABLE 202

View File

@ -3,16 +3,6 @@
TOOLBAR "topbar" 0 0 0 2
#include <stdbar.h>
/*
BUTTON DLG_ELABORA 2 2
BEGIN
PROMPT 1 1 "Imp. Tipi Doc"
PICTURE TOOL_ELABORA
FLAGS "HD"
END
*/
ENDPAGE
PAGE "Configurazione FP" 0 2 0 0
@ -62,6 +52,11 @@ BEGIN
CHECKTYPE REQUIRED
END
BOOLEAN F_F8
BEGIN
PROMPT 50 8 "Gestione F8"
END
GROUPBOX DLG_NULL 78 6
BEGIN
PROMPT 1 10 "@BConfigurazione Allegati"

View File

@ -1,7 +1,7 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include "fplib01.h"
#include "fplib.h"
#include <progind.h>
#include <cfven.h>
#include <doc.h>
@ -92,6 +92,7 @@ bool TCC_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
void TCC_mask::fill()
{
TSheet_field& righe = sfield(F_RIGHE);
righe.reset();
TString_array& sht = righe.rows_array();
TString query;

View File

@ -7,4 +7,6 @@
#define F_TIPOCF 201
#define F_DACODCF 202
#define F_ACODCF 203
#define F_RIGHE 204
#define F_DARAGSOC 204
#define F_ARAGSOC 205
#define F_RIGHE 206

View File

@ -37,13 +37,26 @@ BEGIN
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
OUTPUT F_DACODCF CODCF
OUTPUT F_DARAGSOC RAGSOC
CHEKTYPE NORMAL
FLAGS ""
END
STRING F_DARAGSOC 50
BEGIN
PROMPT 40 1 ""
KEY 2
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_DARAGSOC
COPY DISPLAY F_DACODCF
COPY OUTPUT F_DACODCF
CHECKTYPE NORMAL
END
NUMBER F_ACODCF 6
BEGIN
PROMPT 40 1 "A codice"
PROMPT 20 2 "A codice "
USE LF_CLIFO
INPUT TIPOCF F_TIPOCF SELECT
INPUT CODCF F_ACODCF
@ -53,10 +66,23 @@ BEGIN
DISPLAY "Codice Fiscale@16" COFI
DISPLAY "Partita IVA@15" PAIV
OUTPUT F_ACODCF CODCF
OUTPUT F_ARAGSOC RAGSOC
CHEKTYPE NORMAL
FLAGS ""
END
STRING F_ARAGSOC 50
BEGIN
PROMPT 40 2 ""
KEY 2
USE LF_CLIFO KEY 2
INPUT TIPOCF F_TIPOCF SELECT
INPUT RAGSOC F_ARAGSOC
COPY DISPLAY F_ACODCF
COPY OUTPUT F_ACODCF
CHECKTYPE NORMAL
END
SPREADSHEET F_RIGHE
BEGIN

View File

@ -1,7 +1,7 @@
#include <applicat.h>
#include <automask.h>
#include <config.h>
#include "fplib01.h"
#include "fplib.h"
#include <progind.h>
#include <cfven.h>
#include <doc.h>
@ -35,6 +35,7 @@ protected:
bool check_not_empty();
bool check_full_fields() const;
bool check_doc_filter(const TDocumentoEsteso& td) const;
void set_err_paf();
void fill();
void init();
bool is_fattura(const TRectype& doc) const;
@ -67,18 +68,14 @@ void TPA_mask::save_all_fields() const
ini_set_string(CONFIG_DITTA, "fp", "dataini", get(F_DATAINI));
ini_set_string(CONFIG_DITTA, "fp", "dataend", get(F_DATAEND));
TToken_string tipidocs(get_tmp_string(), ';');
FOR_EACH_SHEET_ROW(sfield(F_DOCUMENTI_TIPO), n, r)
{
TToken_string app;
// Prendo tutta la riga tranne il cod sdi
app.add(r->get(_codnum));
app.add(r->get(_tipodoc));
app.add(r->get(_dastato));
app.add(r->get(_astato));
tipidocs.add(app);
}
ini_set_string(CONFIG_DITTA, "fp", "accepted_docs", tipidocs);
// Salvo lo sheet
TFP_selected_docs selected_docs;
selected_docs.save_sheet(sfield(F_DOCUMENTI_TIPO));
// Salvo le impostazioni
fp_settings().set_esp_pri_empty(get_bool(F_SETDEFCOD));
fp_settings().set_esp_est(get_bool(F_SETCODEST));
fp_settings().set_esp_est_cod(get(F_VALCODEST));
}
void TPA_mask::load_all_fields()
@ -91,7 +88,14 @@ void TPA_mask::load_all_fields()
auto& sheet = sfield(F_DOCUMENTI_TIPO);
sheet.hide();
if(s_accepted_docs.full())
TFP_selected_docs selected_docs;
if (selected_docs.has_selected_docs())
{
// Super nuova gestione super avanzata!
selected_docs.fill_sheet(sheet);
}
else if(s_accepted_docs.full())
{
// Nuova gestione avanzata!
FOR_EACH_STR_TOKEN(s_accepted_docs, tok)
@ -119,6 +123,10 @@ void TPA_mask::load_all_fields()
}
sheet.force_update();
sheet.show();
set(F_SETDEFCOD, fp_settings().get_esp_pri_empty());
set(F_SETCODEST, fp_settings().get_esp_est());
set(F_VALCODEST, fp_settings().get_esp_est_cod());
}
TString& add_filter(const TString& field, const TString& from, const TString& to)
@ -144,6 +152,9 @@ TString& add_filter(const TString& field, const TString& from, const TString& to
void TPA_mask::fill()
{
// Salvo subito su file le impostazioni di esportazione, in fplib accedo ai file
save_all_fields();
TSheet_field& docs = sfield(F_DOCS);
TString_array& sht = docs.rows_array();
docs.hide();
@ -156,8 +167,10 @@ void TPA_mask::fill()
#ifdef DBG
enable(DLG_OK);
enable(DLG_SAVEREC);
#else
enable(DLG_OK, filter_selected != "X");
enable(DLG_SAVEREC, fp_settings().is_f8() && filter_selected == "X");
#endif
// Record di controllo per eventuali elaborazioni precedenti
@ -226,32 +239,22 @@ void TPA_mask::fill()
row.add(rec.get(DOC_DATADOC).as_date());
row.add(rec.get(CFV_CODCF).as_int());
row.add(rec.get("20." CLI_RAGSOC).as_string());
TString rif = rec.get("17." CFV_PADESTIN).as_string();
if (rif.empty())
rif = rec.get("20.PEC").as_string();
TString rif = get_dest_sdi(rec.get(CFV_TIPOCF).as_string()[0], rec.get(CFV_CODCF).as_int());
// Se è ancora vuoto potrebbe essere estero
if(rif.empty())
{
static TString codcf; codcf.cut(0) << "C|" << rec.get(CFV_CODCF).as_string();
TAnagrafica a(LF_CLIFO, codcf);
if (a.estero())
rif = "XXXXXXX";
else
{
// Segno la riga errata
if (first)
{
first = false;
// Abilito la colonna del codice ufficio per segnalare l'errore
docs.enable_column(docs.cid2index(S_UFFICIO));
}
docs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), docs.cid2index(S_UFFICIO));
fat_no_cod++;
}
// Segno la riga errata
if (first)
{
first = false;
// Abilito la colonna del codice ufficio per segnalare l'errore
docs.enable_column(docs.cid2index(S_UFFICIO));
}
docs.set_back_and_fore_color(COLOR_RED, COLOR_WHITE, rec.current_row(), docs.cid2index(S_UFFICIO));
fat_no_cod++;
}
if(rif.full())
docs.set_back_and_fore_color(COLOR_WHITE, COLOR_BLACK, rec.cursor()->pos(), docs.cid2index(S_UFFICIO));
;
row.add(rif);
row.add(rec.get("17." CFV_PARIFAMM).as_string());
row.add(rec.get("20." CLI_COFI).as_string());
@ -340,6 +343,12 @@ bool TPA_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
}
}
break;
case DLG_SAVEREC:
{
if (e == fe_button)
set_err_paf();
}
break;
default: break;
}
if((e == fe_modify || e >= se_enter) && jolly == 0)
@ -415,6 +424,64 @@ bool TPA_mask::check_doc_filter(const TDocumentoEsteso& d) const
return false;
}
void TPA_mask::set_err_paf()
{
// Vado a riportare sui paf l'errore
TSheet_field& sfld = sfield(F_DOCS);
TString_array& sht = sfld.rows_array();
TLocalisamfile fdoc(LF_DOC);
if (!sht.empty())
{
TProgress_monitor pi(sht.items(), "Cambio stato fatture");
FOR_EACH_ARRAY_ROW(sht, r, riga)
{
if (!pi.add_status())
break;
if (riga->starts_with("X"))
{
const int anno = riga->get_int(sfield(F_DOCS).cid2index(S_ANNO));
const long ndoc = riga->get_long(sfield(F_DOCS).cid2index(S_NDOC));
const TFixed_string codnum(riga->get(sfield(F_DOCS).cid2index(S_CODNUM))); // lascio sapientemente per ultima la get di una stringa
const TDoc_key key(anno, codnum, ndoc);
// Ricontrollo che la fattura sia presente in Campo prima di cambiare stato
fdoc.zero();
fdoc.put(DOC_PROVV, key.provv());
fdoc.put(DOC_ANNO, key.anno());
fdoc.put(DOC_CODNUM, key.codnum());
fdoc.put(DOC_NDOC, key.ndoc());
TString hfatt, bfatt;
TPaf_record paf0100f("PAF0100F");
if (fdoc.read() == NOERR && chiave_paf(fdoc.curr(), hfatt, bfatt) && paf0100f.search(nullptr, hfatt, bfatt))
{
TString query = "UPDATE PAF0100F SET P1_GESTIONE = 'E' WHERE P1_KEYHEADERFATT = '"; query << hfatt << "' AND P1_KEYBODYFATT = '" << bfatt << "';";
if(!fp_db().sq_set_exec(query))
{
TString err = "Impossibile salvare la fattura "; err << anno << " " << codnum << " " << ndoc << "\nVerrà saltata.";
error_box(err);
}
}
else
{
TString err = "Impossibile trovare la fattura "; err << anno << " " << codnum << " " << ndoc << "\nVerrà saltata.";
error_box(err);
}
}
}
fp_db().sq_commit();
}
// Mi sposto nella prima pagina, setto il flag di dirty sul filtro e mi risposto
// Lo faccio perchè eliminando la riga direttamente e chiamando la force_update() si crea un bug che cliccando sulla prima riga viene mostrata quella che c'era prima della eliminazione
TAutomask::next_page(0);
set_focus_field(F_DATAINI);
_filter_changed = true;
next_page(1);
}
/////////////////////////////////////////////////////////////////////////////////////
// TDoc2Paf
@ -470,18 +537,18 @@ void TDoc2Paf::main_loop()
if (elab.doc_to_paf(key))
ndocs++;
else
{
if (!yesno_box("L'ultima fattura non è stata esportata, continuare?"))
break;
}
}
}
}
}
if (ndocs > 0)
{
if (elab.commit() > 0)
{
mask.save_all_fields();
message_box(FR("Sono stati elaborati %d documenti"), ndocs);
}
else
if (elab.commit() <= 0)
error_box("Errore durante il salvataggio");
elab.show_log();
}

View File

@ -1,8 +1,11 @@
#define START_MASK 301
#define F_DATAINI 401
#define F_DATAEND 402
#define F_FATTSEL 403
#define END_MASK 499
#define START_MASK 401
#define F_DATAINI 401
#define F_DATAEND 402
#define F_FATTSEL 403
#define F_SETDEFCOD 404
#define F_SETCODEST 405
#define F_VALCODEST 406
#define END_MASK 499
#define F_DOCUMENTI_TIPO 301

View File

@ -2,7 +2,28 @@
TOOLBAR "topbar" 0 0 0 2
#include <allbar.h>
BUTTON DLG_ALL 2 2
BEGIN
PROMPT 1 1 "~Tutti"
PICTURE TOOL_MULTISEL
END
BUTTON DLG_OK 2 2
BEGIN
PROMPT 1 1 "Elabora"
PICTURE TOOL_ELABORA
FLAGS "D"
END
BUTTON DLG_SAVEREC 2 2
BEGIN
PROMPT 1 1 "Elimina"
PICTURE TOOL_WARNING
FLAGS "D"
END
#include <helpbar.h>
ENDPAGE
PAGE "Fatturazione Elettronica" 0 2 0 0
@ -41,6 +62,32 @@ BEGIN
ITEM "Tipo SDI"
END
GROUPBOX DLG_NULL 78 4
BEGIN
PROMPT 1 12 "@BConfigurazione Esportazione"
END
BOOLEAN F_SETDEFCOD
BEGIN
PROMPT 2 13 "Esporta privati con codice '0000000' se privi sia di pec che di cod. destinatario"
END
BOOLEAN F_SETCODEST
BEGIN
PROMPT 2 14 "Esporta esteri con codice"
MESSAGE TRUE ENABLE,F_VALCODEST
MESSAGE FALSE DISABLE,F_VALCODEST
END
STRING F_VALCODEST 7
BEGIN
PROMPT 40 14 ""
CHECKTYPE REQUIRED
FLAG "D"
END
ENDPAGE
PAGE "Elenco Fatture" 0 2 0 0

View File

@ -1,5 +1,5 @@
#ifndef __FPLIB01_H
#define __FPLIB01_H
#ifndef __FPLIB_H
#define __FPLIB_H
#include <tsdb.h>
#include <utility.h>
@ -9,6 +9,7 @@
#include "../fe/felib.h"
#include <reputils.h>
#include <vector>
#include <memory>
#define SQL_FLD "sql/"
#define CARATTERI_SPECIALI "àèéìòù°'\\"
@ -20,6 +21,9 @@ bool check_tables();
// Genera la chiave per i paf
bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt);
bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt);
// Ritorna cod sdi, pec o vuoto. Chiama get_coddest()
TString get_dest_sdi(const char tipocf, const long codcf);
// Valorizza codice sdi e pec in base alle configurazioni del monitor
bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec);
inline const TString& no_special(char a);
const TString& tipo_doc_sdi(const TDocumento& doc);
@ -74,7 +78,7 @@ public:
};
// Gestione PAF
class TDoc_fp
class TDoc_fp : public TObject
{
private:
TRectype* _doc_rec;
@ -91,7 +95,9 @@ private:
bool _cache_insert;
vector<TString> _query;
TString8 _hfatt; // Codice univoco di 6 caratteri dell'ufficio P.A. o di 7 caratteri per un privato
TString20 _bfatt; // Codice univoco di 20 caratteri del documento
TString _bfatt; // Codice univoco di 20 caratteri del documento
TString _conai_str;
struct
{
bool _is_valuta_estera; // Se il documento è in valuta estera
@ -124,7 +130,7 @@ protected:
bool add_row_art(long& riga_art, const TString codice_tipo, const TString& codice_valore, TPaf_record& paf);
bool add_row_alleg(TFilename& file, long& nprogr, TPaf_record& paf);
const TString& converti_prezzo(const real& prezzo) const;
void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc);
void set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const;
public:
bool doc_to_paf(TDocumentoEsteso& doc);
@ -143,6 +149,66 @@ public:
~TDoc_fp();
};
class TFP_settings : public TObject
{
public:
// Getters
const TString& get_db_indirizzo() const;
const TString& get_db_database() const;
const TString& get_db_str_con() const;
const TString& get_db_user() const;
const TString& get_db_password() const;
const TString& get_fld_dest() const;
const TString& get_fld_dest_usr() const;
const TString& get_cofi_tras() const;
const bool get_gest_alleg() const;
const bool get_allega_fat() const;
const bool get_esp_pri_empty() const;
const bool get_esp_est() const;
const TString& get_esp_est_cod() const;
const bool is_f8() const;
// Setters
void set_db_indirizzo(const TString& ind) const;
void set_db_database(const TString& db) const;
void set_db_user(const TString& usr) const;
void set_db_password(const TString& psw) const;
void set_fld_dest(const TString& fld_dest) const;
void set_fld_dest_usr(const TString& fld_dest_usr) const;
void set_cofi_tras(const TString& cofi) const;
void set_gest_alleg(bool gest_alleg) const;
void set_allega_fat(bool allega_fatt) const;
void set_esp_pri_empty(bool esp_pri) const;
void set_esp_est(bool esp_est) const;
void set_esp_est_cod(const TString& esp_est_cod) const;
void set_f8(bool f8) const;
};
#endif // __FPLIB01_H
inline TFP_settings& fp_settings()
{
static TFP_settings* erbuggo = nullptr;
if(erbuggo == nullptr)
{
erbuggo = new TFP_settings();
}
return *erbuggo;
}
class TFP_selected_docs : public TObject
{
TRelation _r_tabmod;
TRectype _flt;
std::unique_ptr<TCursor> _cur;
TRectype fill_rectype() const;
enum { _codnum, _tipodoc, _dastato, _astato, _tiposdi };
public:
void fill_sheet(TSheet_field& sheet) const;
inline bool has_selected_docs() const { return _cur->items() > 0; }
void save_sheet(const TSheet_field& sheet) const;
TFP_selected_docs();
};
#endif // __FPLIB_H

View File

@ -1,4 +1,4 @@
#include "fplib01.h"
#include "fplib.h"
#include <prefix.h>
#include <config.h>
#include <utility.h>
@ -27,7 +27,7 @@
void set_connection(SSimple_query& s)
{
#ifdef DBG
TString ip = ini_get_string(CONFIG_DITTA, "fp", "ip");
TString ip = fp_settings().get_db_indirizzo();
if (ip.upper() != "TESTCAMPO2012")
{
if (s.sq_connect("TESTCAMPO2012@campo_fp",
@ -40,9 +40,9 @@ void set_connection(SSimple_query& s)
{
#endif
if (s.sq_connect(
TString() << ini_get_string(CONFIG_DITTA, "fp", "ip") << "@" << ini_get_string(CONFIG_DITTA, "fp", "db"),
ini_get_string(CONFIG_DITTA, "fp", "usr"),
decode(ini_get_string(CONFIG_DITTA, "fp", "psw")),
fp_settings().get_db_str_con(),
fp_settings().get_db_user(),
fp_settings().get_db_password(),
TSDB_MSSQL) != NOERR)
fatal_box("Impossibile connettersi al DB esterno");
#ifdef DBG
@ -150,7 +150,10 @@ bool chiave_paf(const TDocumento& doc, TString& hfatt, TString& bfatt)
CHECK(hfatt.full(), "Destinatario fattura P.A. non valido");
const TCodice_numerazione& codnum = doc.codice_numerazione();
bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '_' << tipo_doc_sdi(doc) << '_' << doc.numero();
TString full_num;
codnum.complete_num(doc.numero(), full_num);
//20180101_TD01_123456712345671234567
bfatt.cut(0) << doc.get_date(DOC_DATADOC).date2ansi() << '_' << tipo_doc_sdi(doc) << '_' << full_num;
return hfatt.full() && bfatt.full();
}
@ -162,28 +165,33 @@ bool chiave_paf(const TRectype& doc, TString& hfatt, TString& bfatt)
return hfatt.full();
}
TString get_dest_sdi(const char tipocf, const long codcf)
{
TString codsdi, pec;
get_coddest(tipocf, codcf, codsdi, pec);
return pec.full() ? pec : codsdi;
}
bool get_coddest(const char tipocf, const long codcf, TString& coddest, TString& pec)
{
TCli_for clifo(tipocf, codcf);
coddest = clifo.vendite().get("PADESTIN");
pec = clifo.get("PEC");
bool enapec = false;
TAnagrafica anag(LF_CLIFO, tipocf, codcf);
if (coddest.empty())
{
coddest = "0000000";
// Controllo se ha la pec
if (pec.full())
{
enapec = true;
}
if (pec.full() || fp_settings().get_esp_pri_empty())
coddest = "0000000";
// Controllo se è straniero
else if (TAnagrafica(LF_CLIFO, tipocf, codcf).estero())
else if (anag.estero() && anag.stato_partita_IVA() != "IT")
{
coddest = "XXXXXXX";
coddest = fp_settings().get_esp_est() ? fp_settings().get_esp_est_cod() : "";
}
}
else
pec = "";
// Dopo la versione 1.2 torna sempre true
return true;
return coddest.full();
}
inline const TString& no_special(char a)
@ -311,42 +319,42 @@ const TVariant& TPaf_record::get(const char* fld) const
// Converte un variant in una stringa valida per SQLite
const TString& TPaf_record::var2str(const TString& fldname, const TVariant& var) const
{
const TFieldtypes vt = var.type();
if (vt == _realfld)
{
const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ") > 0 || fldname.find("PREZZO") > 0);
TString& tmp = get_tmp_string();
tmp << '\'' << v.string() << '\'';
tmp.replace(',', '.');
return tmp;
}
if (vt == _datefld)
{
TString& tmp = get_tmp_string();
tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\'';
return tmp;
}
const TFieldtypes vt = var.type();
TString& tmp = get_tmp_string();
const TString& str = var.as_string();
if (vt == _realfld)
{
const TCurrency v(var.as_real(), "", ZERO, fldname.find("PRZ") > 0 || fldname.find("PREZZO") > 0);
tmp << '\'' << v.string() << '\'';
tmp.replace(',', '.');
return tmp;
}
bool apici = vt == _alfafld;
if (apici && str[0] != '0' && real::is_natural(str))
apici = false;
if (vt == _datefld)
{
tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\'';
return tmp;
}
if (!apici)
return str;
const TString& str = var.as_string();
// Parso i caratteri speciali
TString& tmp = get_tmp_string().cut(0);
for(int i = 0; i < str.len(); i++)
{
tmp << no_special(str[i]);
}
bool apici = vt == _alfafld;
if (apici && str[0] != '0' && real::is_natural(str))
apici = false;
// Parso i caratteri speciali
for(int i = 0; i < str.len(); i++)
{
tmp << no_special(str[i]);
}
if (apici)
{
// Aggiungo apici a inizio e fine riga
tmp.insert("'", 0);
tmp << '\'';
return tmp;
}
return tmp;
}
TString& TPaf_record::remove_string(bool id_riga)
@ -858,19 +866,37 @@ const TString& TDoc_fp::converti_prezzo(const real& prezzo) const
return ret;
}
void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc)
void TDoc_fp::set_qta_prezzo(TPaf_record& paf1800f, TRiga_documento* rdoc) const
{
const real qta = rdoc->get(RDOC_QTA);
// Setto l'unità di misura
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real& qta = rdoc->get_real(RDOC_QTA);
real prezzo_unit;
real prezzo_tot;
if (qta >= ZERO)
{
paf1800f.set("PI_QUANTITA", qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(rdoc->prezzo(false, false)));
if (qta == ZERO)
qta = UNO;
paf1800f.set("PI_QUANTITA", qta.string());
prezzo_unit = rdoc->prezzo(false, false);
prezzo_tot = rdoc->importo(true, false);
}
else
else if(qta < ZERO)
{
paf1800f.set("PI_QUANTITA", -qta);
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(-rdoc->prezzo(true, false)));
// Metto la qualità in positivo
paf1800f.set("PI_QUANTITA", abs(qta).string());
// E i prezzi in negativo
prezzo_unit = -rdoc->prezzo(false, false);
prezzo_tot = -rdoc->importo(true, false);
}
// Salvo tutto
paf1800f.set("PI_PREZZOUNIT", converti_prezzo(prezzo_unit));
paf1800f.set("PI_PRZTOTALE", converti_prezzo(prezzo_tot));
}
bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
@ -1078,10 +1104,11 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf0700f.set("P7_KEYBODYFATT", _bfatt);
remove(paf0700f);
paf0700f.set("P7_TIPODOC", tipo_doc_sdi(doc));
paf0700f.set("P7_DIVISA", _doc_cambio._cod_val.full() ? _doc_cambio._cod_val : "EUR");
paf0700f.set("P7_DIVISA", "EUR"); // Fisso su euro in quanto effettuiamo il cambio
paf0700f.set("P7_DATA", doc.data());
paf0700f.set("P7_NUMERO", doc.numero());
TString full_num;
doc.codice_numerazione().complete_num(doc.numero(), full_num);
paf0700f.set("P7_NUMERO", full_num);
paf0700f.set("P7_GESTIONE", "D");
// <DatiBollo>
@ -1366,16 +1393,13 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
}
else if (rdoc->is_merce())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
const real qta = rdoc->get(RDOC_QTA);
if (qta.is_zero())
if (rdoc->get(RDOC_QTA).is_zero())
{
TString msg;
msg.format("La riga merce %d ha quantità nulla", riga);
log(1, msg);
}
set_qta_prezzo(paf1800f, rdoc);
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f);
/*
@ -1505,19 +1529,26 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf0700f.set("P7_IMPORTORIT", converti_prezzo(doc.imponibile() * sp.perc() / CENTO));
paf0700f.set("P7_ALIQUOTARIT", TCodiceIVA(sp.cod_iva()).percentuale());
static TString caus770; caus770.cut(0); caus770.format("%02d", sp.caus_770());
paf0700f.set("P7_CAUSPAGAM", cache().get("CA7", caus770, "S2"));
paf0700f.set("P7_CAUSPAGAM", cache().get("%CA7", caus770, "S2"));
}
// </DatiRitenuta>
}
else if (rdoc->is_prestazione())
{
paf1800f.set("PI_UNITAMISURA", rdoc->get(RDOC_UMQTA));
real qta = rdoc->get(RDOC_QTA);
if (qta.is_zero()) qta = UNO;
set_qta_prezzo(paf1800f, rdoc);
paf1800f.set("PI_PRZTOTALE", converti_prezzo(rdoc->importo(true, false)));
set_IVA(*rdoc, paf1800f);
}
else if (rdoc->is_sconto() || rdoc->is_sconto_perc())
{
TString msg;
msg << "Il documento " << doc.codice_numerazione().codice() << " " << doc.tipo().codice() << " " << doc.numero() << " presenta una o più righe di tipo sconto o sconto percentuale.\n" \
"Esportazione impossibile";
log(2, msg);
return false;
}
else
{
// Salto tutte le altre righe
@ -1614,7 +1645,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
paf3000f.set("PT_KEYHEADERFATT", _hfatt);
paf3000f.set("PT_KEYBODYFATT", _bfatt);
paf3000f.set("PT_RIFNUMLINEA", riga);
paf3000f.set("PT_COMMENTO", ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS", "Contributo CONAI assolto ove dovuto"));
paf3000f.set("PT_COMMENTO", _conai_str);
paf1800f.set("PI_QUANTITA", UNO);
paf1800f.set("PI_PREZZOUNIT", ZERO);
@ -1818,7 +1849,7 @@ bool TDoc_fp::doc_to_paf(TDocumentoEsteso& doc)
}
pafw300f.set("PW_CDEST", coddest);
pafw300f.set("PW_RAGSOC", cliente.ragione_sociale());
pafw300f.set("PW_RAGSOC", cliente.ragione_sociale().left(35));
pafw300f.set("PW_PAESE", cliente.stato_residenza_ISO());
pafw300f.set("PW_CODICE", cliente.codice_fiscale_estero());
pafw300f.set("PW_CFISCA", cliente.codice_fiscale());
@ -1884,7 +1915,7 @@ TRectype& TDoc_fp::key_to_doc(const TDoc_key& key)
TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false)
{
_ditta.init(LF_NDITTE, prefix().get_codditta());
_cofi = ini_get_string(CONFIG_DITTA, "fp", "cofitras");
_cofi = fp_settings().get_cofi_tras();
if (_cofi.blank())
_cofi = _ditta.codice_fiscale();
@ -1892,17 +1923,17 @@ TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false)
#ifdef DBG
_gestioneallegati = _allegafattura = false;
#else
_gestioneallegati = ini_get_bool(CONFIG_DITTA, "fp", "gestioneallegati");
_allegafattura = ini_get_bool(CONFIG_DITTA, "fp", "allegafatt");
_gestioneallegati = fp_settings().get_gest_alleg();
_allegafattura = fp_settings().get_allega_fat();
#endif
_def_fld = ini_get_string(CONFIG_DITTA, "fp", "flddest");
_def_fld = fp_settings().get_fld_dest();
if (!_def_fld.ends_with("\\"))
{
_def_fld << "\\";
}
_def_usr_fld = ini_get_string(CONFIG_DITTA, "fp", "fldusrdest", "");
_def_usr_fld = fp_settings().get_fld_dest_usr();
if (_def_usr_fld.empty())
{
_def_usr_fld = _def_fld;
@ -1911,6 +1942,11 @@ TDoc_fp::TDoc_fp() : _doc_rec(nullptr), _log(nullptr), _cache_insert(false)
{
_def_usr_fld << "\\";
}
// Mi preparo la stringa del CONAI
_conai_str = ini_get_string(CONFIG_DITTA, "ve", "DESCCONAIASS");
if (_conai_str.empty())
_conai_str = "Contributo CONAI assolto ove dovuto";
}
TDoc_fp::~TDoc_fp()

221
src/fp/fplib02.cpp Normal file
View File

@ -0,0 +1,221 @@
#include "fplib.h"
#define FILE_CONFIG CONFIG_DITTA
#define FILE_SECTION "fp"
#define FP_TAB_MOD "FP"
#define FP_IP "ip"
#define FP_DB "db"
#define FP_USR "usr"
#define FP_PSW "psw"
#define FP_FLD_DEST "flddest"
#define FP_FLD_USR_DEST "fldusrdest"
#define FP_COFI_TRAS "cofitras"
#define FP_GEST_ALLEG "gestioneallegati"
#define FP_ALLEG_FAT "allegafatt"
#define FP_ESP_PRI "esppri"
#define FP_ESP_EST "espest"
#define FP_ESP_EST_COD "espestcod"
#define FP_F8 "f8"
#define FP_SLD_COD "SLD"
#define FP_SLD_CODTAB "CODTAB"
#define FP_SLD_CODNUM "S0"
#define FP_SLD_TIPODOC "S1"
#define FP_SLD_DASTATO "I0"
#define FP_SLD_ASTATO "I1"
const TString& TFP_settings::get_db_indirizzo() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_IP);
}
const TString& TFP_settings::get_db_database() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_DB);
}
const TString& TFP_settings::get_db_str_con() const
{
return get_tmp_string().cut(0) << get_db_indirizzo() << "@" << get_db_database();
}
const TString& TFP_settings::get_db_user() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_USR);
}
const TString& TFP_settings::get_db_password() const
{
return get_tmp_string().cut(0) << decode(ini_get_string(FILE_CONFIG, FILE_SECTION, FP_PSW));
}
const TString& TFP_settings::get_fld_dest() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_FLD_DEST);
}
const TString& TFP_settings::get_fld_dest_usr() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_FLD_USR_DEST, "");
}
const TString& TFP_settings::get_cofi_tras() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_COFI_TRAS);
}
const bool TFP_settings::get_gest_alleg() const
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_GEST_ALLEG);
}
const bool TFP_settings::get_allega_fat() const
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ALLEG_FAT);
}
const bool TFP_settings::get_esp_pri_empty() const
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_PRI);
}
const bool TFP_settings::get_esp_est() const
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_EST);
}
const TString& TFP_settings::get_esp_est_cod() const
{
return ini_get_string(FILE_CONFIG, FILE_SECTION, FP_ESP_EST_COD, "XXXXXXX");
}
const bool TFP_settings::is_f8() const
{
return ini_get_bool(FILE_CONFIG, FILE_SECTION, FP_F8);
}
void TFP_settings::set_db_indirizzo(const TString& ind) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_IP, ind);
}
void TFP_settings::set_db_database(const TString& db) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_DB, db);
}
void TFP_settings::set_db_user(const TString& usr) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_USR, usr);
}
void TFP_settings::set_db_password(const TString& psw) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_PSW, encode(psw));
}
void TFP_settings::set_fld_dest(const TString& fld_dest) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_FLD_DEST, fld_dest);
}
void TFP_settings::set_fld_dest_usr(const TString& fld_dest_usr) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_FLD_USR_DEST, fld_dest_usr);
}
void TFP_settings::set_cofi_tras(const TString& cofi) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_COFI_TRAS, cofi);
}
void TFP_settings::set_gest_alleg(const bool gest_alleg) const
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_GEST_ALLEG, gest_alleg);
}
void TFP_settings::set_allega_fat(const bool allega_fatt) const
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ALLEG_FAT, allega_fatt);
}
void TFP_settings::set_esp_pri_empty(const bool esp_pri) const
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_PRI, esp_pri);
}
void TFP_settings::set_esp_est(const bool esp_est) const
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_ESP_EST, esp_est);
}
void TFP_settings::set_esp_est_cod(const TString& esp_est_cod) const
{
ini_set_string(FILE_CONFIG, FILE_SECTION, FP_ESP_EST_COD, esp_est_cod);
}
void TFP_settings::set_f8(const bool f8) const
{
ini_set_bool(FILE_CONFIG, FILE_SECTION, FP_F8, f8);
}
TRectype TFP_selected_docs::fill_rectype() const
{
TRectype r(LF_TABMOD);
r.put("MOD", FP_TAB_MOD);
r.put("COD", FP_SLD_COD);
return r;
}
void TFP_selected_docs::fill_sheet(TSheet_field& sheet) const
{
for(*_cur = 0; _cur->pos() < _cur->items(); ++*_cur)
{
TRectype rec = _cur->curr();
TToken_string& row = sheet.row(-1);
row.add(rec.get(FP_SLD_CODNUM));
row.add(rec.get(FP_SLD_TIPODOC));
row.add(rec.get(FP_SLD_DASTATO));
row.add(rec.get(FP_SLD_ASTATO));
row.add(TTipo_documento(TString() << rec.get("S0") << "|" << rec.get("S1")).tipo_doc_sdi());
}
}
void TFP_selected_docs::save_sheet(const TSheet_field& sheet) const
{
// Svuoto il db
TLocalisamfile tabmod(LF_TABMOD);
TRectype rec(LF_TABMOD);
for (*_cur = 0; _cur->pos() < _cur->items(); ++*_cur)
{
rec = _cur->curr();
rec.remove(tabmod);
}
// Carico il db
FOR_EACH_SHEET_ROW(sheet, n, r)
{
// Chissene anche se copio ogni volta
rec = fill_rectype();
rec.put(FP_SLD_CODTAB, n);
// Prendo tutta la riga tranne il cod sdi
rec.put(FP_SLD_CODNUM, r->get(_codnum));
rec.put(FP_SLD_TIPODOC, r->get(_tipodoc));
rec.put(FP_SLD_DASTATO, r->get(_dastato));
rec.put(FP_SLD_ASTATO, r->get(_astato));
rec.write(tabmod);
}
}
TFP_selected_docs::TFP_selected_docs() : _r_tabmod(LF_TABMOD), _flt(fill_rectype())
{
_cur.reset(new TCursor(&_r_tabmod, "", 1, &_flt, &_flt));
}

View File

@ -84,7 +84,44 @@ bool TODBC_recordset::connect(const char* dsn, const char* usr, const char* pwd,
}
const TString& TODBC_recordset::query_text() const
{ return _sql; }
{
return _sql;
}
const TString& TODBC_recordset::query_text_var() const
{
// INSERT INTO POPPO (COL1, COL2) VALUES (SELECT COL3, COL4 FROM PAPPO WHERE COL5 = #VAR4)
// INSERT INTO POPPO (COL1, COL2) VALUES (SELECT COL3, COL4 FROM PAPPO WHERE COL5 = '#VAR4')
// #VAR4')
// Conto quanti separatori ho
int num_sep = 0;
int pos = _sql.find(query_text_separator());
for (; pos > 0; pos = _sql.find(query_text_separator(), pos + 1))
num_sep++;
if(num_sep == 0 || num_sep % 2 != 0)
{
return _sql;
}
// Se sono pari tolgo dalla mia query tutte le variabili all'interno dei separatori per non farle chiedere all'utente
TString& sql = get_tmp_string();
TString wrk_sql = _sql;
sql.cut(0);
// cerco il primo query_text_separator(), nel nostro caso è l'apice e mi sposto
for (int qts = wrk_sql.find(query_text_separator()); qts > 0; qts = wrk_sql.find(query_text_separator())) // Cerco tutti i separatori
{
sql << wrk_sql.left(qts - 1);
wrk_sql.ltrim(qts);
qts = wrk_sql.find(query_text_separator());
wrk_sql.ltrim(qts);
}
return sql;
}
const TString& TODBC_recordset::driver_version() const
{
@ -715,6 +752,7 @@ void TODBC_recordset::set(const char* sql)
TODBC_recordset::TODBC_recordset(const char* sql, const bool freezed) : _freezed(freezed), _loaded(false)
{
TRecordset::set_query_text_separator('\'');
set(sql);
}

View File

@ -40,6 +40,7 @@ public:
virtual TRecnotype current_row() const;
virtual void requery();
virtual const TString& query_text() const;
virtual const TString& query_text_var() const;
virtual const TString& driver_version() const;
virtual void freeze(const bool on) { _freezed = on; }

View File

@ -623,7 +623,7 @@ void TRecordset::find_and_reset_vars()
_var.destroy();
_varnames.destroy();
const TString& sql = query_text();
const TString& sql = query_text_var();
int diesis = sql.find('#'); // cerco il primo #
for ( ; diesis > 0; diesis = sql.find('#', diesis+1)) // Cerco tutti i #
{

View File

@ -63,6 +63,7 @@ class TRecordset : public TObject
TString_array _varnames;
const TRecordset* _parentset;
char _text_separator;
char _query_text_separator;
protected:
virtual bool save_as_html(const char* path);
@ -71,7 +72,7 @@ protected:
virtual bool save_as_csv(const char* path) { set_text_separator(';'); return save_as_text(path);}
virtual bool save_as_campo(const char* path);
virtual bool save_as_dbf(const char* table, int mode);
void find_and_reset_vars();
void parsed_text(TString& sql) const;
TVariant& get_tmp_var() const;
@ -83,11 +84,15 @@ public: // Absolutely needed methods
virtual TRecnotype current_row() const pure;
virtual void requery() pure;
bool empty() const { return items() == 0; }
virtual const TString& query_text() const pure;
virtual const TString& query_text() const pure;
virtual const TString& query_text_var() const { return query_text(); }
virtual const TString& driver_version() const;
virtual char text_separator() const { return _text_separator;}
virtual void set_text_separator(char sep) { _text_separator = sep;}
virtual char query_text_separator() const { return _query_text_separator; }
virtual void set_query_text_separator(char sep) { _query_text_separator = sep; }
virtual void freeze() {}
virtual bool move_first() { return move_to(0); }

View File

@ -83,9 +83,12 @@ bool TLetint_mask::on_field_event(TOperable_field& o, TField_event e, long jolly
if (get_date(F_DATAREG) < old_data)
return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*) old_data.string());
}
TDate ultima = ultima_stampa(anno);
if (get_date(F_DATAREG) <= ultima)
return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*) ultima.string());
else
{
TDate ultima = ultima_stampa(anno);
if (get_date(F_DATAREG) <= ultima)
return error_box(TR("La data di registrazione non puo' essere antecedente a %s"), (const char*)ultima.string());
}
}
}
else

View File

@ -1,3 +1,3 @@
111
0
$rmovmag|0|0|105|0|Righe movimenti di magazzino|||
$rmovmag|0|0|111|0|Righe movimenti di magazzino|||

View File

@ -1,5 +1,5 @@
111
13
14
NUMREG|3|7|0|Numero di registrazione
NRIG|2|4|0|Numero di riga
CODMAG|1|5|0|Codice magazzino e deposito
@ -13,6 +13,7 @@ IMPIANTO|1|5|0|Codice Impianto (MRP)
LINEA|1|5|0|Codice linea (MRP)
AUTOMATICA|1|1|0|Flag di riga automatica
ESPLOSA|8|1|0|Flag di riga esplosa (da DiBa)
NRRDOC|3|6|0|Numero di riga della riga del documento da cui deriva
2
NUMREG+NRIG|
CODART+LIVGIAC+CODMAG+NUMREG|X

View File

@ -14,5 +14,6 @@
#define RMOVMAG_ESPLOSA "ESPLOSA"
#define RMOVMAG_IMPIANTO "IMPIANTO"
#define RMOVMAG_LINEA "LINEA"
#define RMOVMAG_NRRDOC "NRRDOC"
#endif

View File

@ -517,7 +517,8 @@ int TMotore_application::write( const TMask& m ) // C 90
// Se ho attivato la creazione automatica delle righe allora cancello quelle vuote finali
if (d.tipo().auto_add())
{
for (int r = d.rows(); r > 0; r--)
// Non devo contare righe sconto o esenzione
for (int r = d.physical_rows(); r > 0; r--)
{
const TRiga_documento& dr = d[r];
if (dr.get(RDOC_CODART).empty() && dr.get(RDOC_DESCR).empty())

View File

@ -1417,7 +1417,10 @@ int TDocumento::write_rewrite(TBaseisamfile & f, bool re) const
prezzo.change_to_firm_val();
rm.put(RMOVMAG_PREZZO, prezzo.get_num());
rm.put(RMOVMAG_CODCAUS, cod_caus_riga);
rm.put(RMOVMAG_TIPORIGA, (char) riga_dadocumento);
rm.put(RMOVMAG_TIPORIGA, (char) riga_dadocumento);
// Aggiungo il riferimento alla riga del documento
rm.put(RMOVMAG_NRRDOC, r.get(RDOC_NRIGA));
}
if (main_app().has_module(LVAUT))