Patch level : 12.0 no-patch
Files correlati : ps6362.exe Commento : Personalizzazione x Major: Esportazione ddt in xml x Flexform
This commit is contained in:
parent
867eb4da44
commit
be0eb9486c
12
build/ps.sln
12
build/ps.sln
@ -53,6 +53,10 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ps1004", "ps1004.vcxproj",
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ps6215", "ps6215.vcxproj", "{42AC85CF-2D74-4ADB-8CC4-87CE816B1508}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ps6362", "ps6362.vcxproj", "{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ps0650", "ps0650.vcxproj", "{9934F14A-64EC-40BE-90C3-8FC4AB97F9AC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
@ -159,6 +163,14 @@ Global
|
||||
{42AC85CF-2D74-4ADB-8CC4-87CE816B1508}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{42AC85CF-2D74-4ADB-8CC4-87CE816B1508}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{42AC85CF-2D74-4ADB-8CC4-87CE816B1508}.Release|Win32.Build.0 = Release|Win32
|
||||
{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}.Release|Win32.Build.0 = Release|Win32
|
||||
{9934F14A-64EC-40BE-90C3-8FC4AB97F9AC}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9934F14A-64EC-40BE-90C3-8FC4AB97F9AC}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9934F14A-64EC-40BE-90C3-8FC4AB97F9AC}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{9934F14A-64EC-40BE-90C3-8FC4AB97F9AC}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
179
build/ps6362.vcxproj
Normal file
179
build/ps6362.vcxproj
Normal file
@ -0,0 +1,179 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{F3AA5A90-8D73-4C9E-B417-2EA5747884D6}</ProjectGuid>
|
||||
<WindowsTargetPlatformVersion>10.0.17763.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">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\exe\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
|
||||
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\exe\</OutDir>
|
||||
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\obj\$(SolutionName)\$(ProjectName)\</IntDir>
|
||||
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\..\release/ps1004.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
|
||||
<AdditionalIncludeDirectories>..\src\xvtdb\;..\src\cg;..\src\include;..\src\xvaga;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>NDEBUG;WIN32;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<PrecompiledHeaderOutputFile>.\..\release/ps1004.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\..\release/</AssemblerListingLocation>
|
||||
<ObjectFileName>.\..\release/</ObjectFileName>
|
||||
<ProgramDataBaseFileName>.\..\release/</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0410</Culture>
|
||||
<AdditionalIncludeDirectories>..\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<ProgramDatabaseFile>.\..\release/ps1004.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\..\release/ps1004.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" /t http://timestamp.verisign.com/scripts/timstamp.dll /v "$(TargetPath)"</Command>
|
||||
</PostBuildEvent>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Midl>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MkTypLibCompatible>true</MkTypLibCompatible>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<TargetEnvironment>Win32</TargetEnvironment>
|
||||
<TypeLibraryName>.\..\debug/ps1004.tlb</TypeLibraryName>
|
||||
<HeaderFileName>
|
||||
</HeaderFileName>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\src\xvtdb\;..\src\cg;..\src\include;..\src\xvaga;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_DEBUG;WIN32;__LONGDOUBLE__;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
|
||||
<PrecompiledHeaderOutputFile>.\..\debug/ps1004.pch</PrecompiledHeaderOutputFile>
|
||||
<AssemblerListingLocation>.\..\debug/</AssemblerListingLocation>
|
||||
<ObjectFileName>.\..\debug/</ObjectFileName>
|
||||
<ProgramDataBaseFileName>.\..\debug/</ProgramDataBaseFileName>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
</ClCompile>
|
||||
<ResourceCompile>
|
||||
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<Culture>0x0410</Culture>
|
||||
<AdditionalIncludeDirectories>..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>rpcrt4.lib;wsock32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<IgnoreSpecificDefaultLibraries>%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>.\..\debug/ps1004.pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
<AdditionalLibraryDirectories>
|
||||
</AdditionalLibraryDirectories>
|
||||
</Link>
|
||||
<Bscmake>
|
||||
<SuppressStartupBanner>true</SuppressStartupBanner>
|
||||
<OutputFile>.\..\debug/ps1004.bsc</OutputFile>
|
||||
</Bscmake>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="AgaLib.vcxproj">
|
||||
<Project>{2d38a763-3d74-4338-9362-b891784ec90e}</Project>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="campo.rc">
|
||||
<PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\libraries\wx28X\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\ps\ps6362.h" />
|
||||
<ClInclude Include="..\src\ps\ps6362100a.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\ps\ps6362.cpp" />
|
||||
<ClCompile Include="..\src\ps\ps6362100.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="..\src\ps\ps6362100a.uml">
|
||||
<FileType>Document</FileType>
|
||||
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">msk32 %(FullPath) $(TargetDir)%(Filename).msk</Command>
|
||||
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Compiling mask %(FullPath)...</Message>
|
||||
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(TargetDir)%(Filename).msk;%(Outputs)</Outputs>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
41
build/ps6362.vcxproj.filters
Normal file
41
build/ps6362.vcxproj.filters
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Sources">
|
||||
<UniqueIdentifier>{2aa15991-562d-4fba-afc5-a0fd3b06ec97}</UniqueIdentifier>
|
||||
<Extensions>cpp</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Masks">
|
||||
<UniqueIdentifier>{c41a2928-af62-4e3d-94cd-59438053b6e2}</UniqueIdentifier>
|
||||
<Extensions>uml</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Headers">
|
||||
<UniqueIdentifier>{ca21a647-c7c2-492c-bbbe-26d801e87179}</UniqueIdentifier>
|
||||
<Extensions>h</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="campo.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\src\ps\ps6362100.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\src\ps\ps6362.cpp">
|
||||
<Filter>Sources</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\src\ps\ps6362.h">
|
||||
<Filter>Headers</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\src\ps\ps6362100a.h">
|
||||
<Filter>Headers</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<CustomBuild Include="..\src\ps\ps6362100a.uml">
|
||||
<Filter>Masks</Filter>
|
||||
</CustomBuild>
|
||||
</ItemGroup>
|
||||
</Project>
|
15
src/ps/ps6362.cpp
Normal file
15
src/ps/ps6362.cpp
Normal file
@ -0,0 +1,15 @@
|
||||
#include <xvt.h>
|
||||
#include "ps6362.h"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
int rt = -1;
|
||||
const int r = (argc > 1) ? atoi(&argv[1][1]) : 1;
|
||||
|
||||
switch (r)
|
||||
{
|
||||
default:
|
||||
case 0: rt = ps6362100(argc, argv); break; // Esportrazione Major-Flexform
|
||||
}
|
||||
return rt;
|
||||
}
|
661
src/ps/ps6362100.cpp
Normal file
661
src/ps/ps6362100.cpp
Normal file
@ -0,0 +1,661 @@
|
||||
#include <rpc.h>
|
||||
#include <rpcdce.h>
|
||||
#include <comdef.h>
|
||||
#include <applicat.h>
|
||||
#include <automask.h>
|
||||
#include <tsdb.h>
|
||||
#include <relation.h>
|
||||
#include "ps6362.h"
|
||||
#include "ps6362100a.h"
|
||||
#include <vector>
|
||||
#include "tabutil.h"
|
||||
#include "sqlset.h"
|
||||
#include "doc.h"
|
||||
#include "rdoc.h"
|
||||
#include "progind.h"
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TXML_element
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
#define XML_ROOT_TAG nullptr
|
||||
|
||||
class TFlexform_xml_ordini;
|
||||
class TOrdini_riga_xml;
|
||||
|
||||
class TXML_element
|
||||
{
|
||||
vector<pair<TString, TString>> _attributes{};
|
||||
vector<TXML_element*> _childs{};
|
||||
TString _indent;
|
||||
TString _name;
|
||||
TXML_element* _parent;
|
||||
TString _value;
|
||||
|
||||
public:
|
||||
void add_attribute(const char* _Tag, const char* _Val) { _attributes.insert(_attributes.end(), { _Tag, _Val }); }
|
||||
void add_attribute(const char* _Tag, const TString& _Val) { _attributes.insert(_attributes.end(), { _Tag, _Val }); }
|
||||
void add_attribute(const char* _Tag, const TDate& _Val) { _attributes.insert(_attributes.end(), { _Tag, TString(_Val) }); }
|
||||
void add_child(TXML_element& child) { child._parent = this; _childs.insert(_childs.end(), &child); }
|
||||
|
||||
bool print_on_file(ofstream* fout, int deep = 0, const char* indent = "");
|
||||
|
||||
/** Imposta tab (use_tab = true) o spazi (false). Se spazi indicare n_spazi (1 - 8): se non specificato o troppo grande sara' di 4; */
|
||||
void set_indentation(bool use_tab, short n_spaces = -1);
|
||||
void set_parent(TXML_element& parent) { parent.add_child(*this); }
|
||||
void set_root() { _parent = XML_ROOT_TAG; }
|
||||
|
||||
TXML_element& operator<<(const char* _Val) { _value = _Val; return *this; }
|
||||
|
||||
explicit TXML_element(const char* name, const char* value = "") : _indent("\t"), _name(name), _parent(nullptr), _value(value) { }
|
||||
explicit TXML_element(const TString& name, const TString& value = "") : _name(name), _parent(nullptr), _value(value) { }
|
||||
};
|
||||
|
||||
bool TXML_element::print_on_file(ofstream* fout, const int deep, const char* indent)
|
||||
{
|
||||
const TString _indent = this->_parent == XML_ROOT_TAG ? this->_indent : indent;
|
||||
|
||||
if (fout == nullptr || !fout->is_open() || _name.empty())
|
||||
return false;
|
||||
|
||||
ofstream& out = *fout;
|
||||
bool ok = true;
|
||||
|
||||
// Stampo prima la riga con tag e attributi
|
||||
for (int i = 0; i < deep; ++i) // Indentazione
|
||||
out << _indent;
|
||||
// Apro riga del tag
|
||||
out << "<" << (const char*)_name;
|
||||
for (auto& it : _attributes) // Aggiungo eventuali attributi
|
||||
out << " " << (const char*)it.first << "=\"" << (const char*)it.second << "\"";
|
||||
out << ">";
|
||||
// Fine riga del tag
|
||||
|
||||
// Stampo figli
|
||||
if (!_childs.empty()) // O ha figli o ha tag con valore
|
||||
{
|
||||
out << endl;
|
||||
for (auto& child : _childs)
|
||||
ok &= child->print_on_file(fout, deep + 1, _indent);
|
||||
for (int i = 0; i < deep; ++i)
|
||||
out << _indent;
|
||||
}
|
||||
else
|
||||
out << (const char*)_value;
|
||||
|
||||
// Chiudo tag
|
||||
out << "</" << (const char*)_name << ">" << endl;
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TXML_element::set_indentation(bool use_tab, short n_spaces)
|
||||
{
|
||||
if (use_tab)
|
||||
_indent = "\t";
|
||||
else
|
||||
{
|
||||
const short to = n_spaces > 0 && n_spaces <= 8 ? n_spaces : (short)4;
|
||||
_indent.cut(0);
|
||||
for (short i = 0; i < to; ++i)
|
||||
_indent << " ";
|
||||
}
|
||||
}
|
||||
|
||||
class TEsa_import_xml : public TXML_element
|
||||
{
|
||||
public:
|
||||
void set_attributes(const TString& source, const TDate& creation_date, const TString& instance_guid, const TString& file_version);
|
||||
TEsa_import_xml() : TXML_element("ESA_IMPORT") { }
|
||||
};
|
||||
|
||||
void TEsa_import_xml::set_attributes(const TString& source, const TDate& creation_date, const TString& instance_guid, const TString& file_version)
|
||||
{
|
||||
TString date(creation_date); date.replace('-', '/');
|
||||
add_attribute("Source", source);
|
||||
add_attribute("CreationDate", date);
|
||||
add_attribute("InstanceGuid", instance_guid);
|
||||
add_attribute("FileVersion", file_version);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////
|
||||
// Flexform export xml
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
class TFlexform_xml
|
||||
{
|
||||
protected:
|
||||
TString _file_name;
|
||||
ofstream* _fout;
|
||||
TEsa_import_xml _esa_import;
|
||||
|
||||
static const char* generatre_GUID();
|
||||
void set_indentation(const bool use_tab, const short n_spaces) { _esa_import.set_indentation(use_tab, n_spaces); }
|
||||
virtual bool print() pure;
|
||||
|
||||
public:
|
||||
bool ok() const { return _fout != nullptr && _fout->is_open(); }
|
||||
|
||||
TFlexform_xml(const char* xml_name = "");
|
||||
virtual ~TFlexform_xml() { delete _fout; }
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// ORDINI
|
||||
/////////////////////////////////////////////////////////
|
||||
// Riga /////////////////////////////////////////////////
|
||||
class TOrdini_riga_xml : public TXML_element
|
||||
{
|
||||
TXML_element* _datarow; // Unico figlio di OR_ORDINIR contenenti i campi campi dell'ordine
|
||||
|
||||
// Figli di _datarow: campi dell'ordine
|
||||
|
||||
TXML_element* _tiporiga;
|
||||
TXML_element* _art;
|
||||
TXML_element* _des_articolo;
|
||||
TXML_element* _merce;
|
||||
TXML_element* _libero;
|
||||
|
||||
public:
|
||||
void set_datarow(const char* ind_tiporiga, const char* cod_art, const char* des_articolo_riga, const char* qta_merce, const char* des_campo_libero6);
|
||||
TOrdini_riga_xml() : TXML_element("OR_ORDINIR"), _datarow(nullptr), _tiporiga(nullptr), _art(nullptr), _des_articolo(nullptr), _merce(nullptr), _libero(nullptr) { }
|
||||
~TOrdini_riga_xml();
|
||||
};
|
||||
|
||||
// Testata //////////////////////////////////////////////
|
||||
class TOrdini_testata_xml : public TXML_element
|
||||
{
|
||||
TXML_element* _datarow;
|
||||
|
||||
// Figli di _datarow: campi della testata
|
||||
|
||||
TXML_element* _dat_doc;
|
||||
TXML_element* _des_num;
|
||||
TXML_element* _sig_serie;
|
||||
public:
|
||||
void add_row(TOrdini_riga_xml& riga) { add_child((TXML_element&)riga); }
|
||||
void set_testata(const char* data_doc, const char* num_doc, const char* str = "CCL");
|
||||
|
||||
TOrdini_testata_xml() : TXML_element("OR_ORDINIT"), _datarow(nullptr), _dat_doc(nullptr), _des_num(nullptr), _sig_serie(nullptr) { }
|
||||
~TOrdini_testata_xml();
|
||||
};
|
||||
|
||||
// TFlexform_xml_ordini /////////////////////////////////
|
||||
class TFlexform_xml_ordini : public TFlexform_xml
|
||||
{
|
||||
TXML_element _ordine_impegno; // Unico ordine, figlio di _esa_import
|
||||
TOrdini_testata_xml _testata; // _testata contiene i dati di testata, piu' tutte gli ordini riga come figli, figlio di _ordine_impegno
|
||||
|
||||
public:
|
||||
void add_row(TOrdini_riga_xml* riga) { riga->set_parent(_testata); }
|
||||
bool print() override;
|
||||
void set_testata(const char* data_doc, const char* num_doc, const char* str) { _testata.set_testata(data_doc, num_doc, str); }
|
||||
|
||||
TFlexform_xml_ordini(const char* xml_name = "");
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// DDT
|
||||
/////////////////////////////////////////////////////////
|
||||
// Riga /////////////////////////////////////////////////
|
||||
class TDDT_riga_xml : public TXML_element
|
||||
{
|
||||
TXML_element* _datarow; // Unico figlio di OR_ORDINIR contenenti i campi campi dell'ordine
|
||||
|
||||
// Figli di _datarow: campi dell'ordine
|
||||
|
||||
TXML_element* _tiporiga;
|
||||
TXML_element* _art;
|
||||
TXML_element* _des_articolo;
|
||||
TXML_element* _merce;
|
||||
TXML_element* _libero;
|
||||
|
||||
public:
|
||||
void set_datarow(const char* ind_tiporiga, const char* cod_art, const char* des_articolo_riga, const char* qta_merce, const char* des_campo_libero6);
|
||||
TDDT_riga_xml() : TXML_element("MG_MOVMAGR"), _datarow(nullptr), _tiporiga(nullptr), _art(nullptr),
|
||||
_des_articolo(nullptr), _merce(nullptr), _libero(nullptr) { }
|
||||
~TDDT_riga_xml();
|
||||
};
|
||||
|
||||
// Testata //////////////////////////////////////////////
|
||||
class TDDT_testata_xml : public TXML_element
|
||||
{
|
||||
TXML_element* _datarow;
|
||||
|
||||
// Figli di _datarow: campi della testata
|
||||
|
||||
TXML_element* _dat_doc;
|
||||
TXML_element* _des_num;
|
||||
public:
|
||||
void add_row(TDDT_riga_xml& riga) { add_child((TXML_element&)riga); }
|
||||
void set_testata(const char* data_doc, const char* num_doc);
|
||||
|
||||
TDDT_testata_xml() : TXML_element("MG_MOVMAGT"), _datarow(nullptr), _dat_doc(nullptr), _des_num(nullptr) { }
|
||||
~TDDT_testata_xml();
|
||||
};
|
||||
|
||||
// TFlexform_xml_ddt ///////////////////////////////////////
|
||||
class TFlexform_xml_ddt final : public TFlexform_xml
|
||||
{
|
||||
vector<TXML_element*> _docs_unico; // Tanti doc_unico, figli di _esa_import
|
||||
vector<TDDT_testata_xml*> _testate; // _testata contiene i dati di testata, piu' tutte gli ordini riga come figli
|
||||
|
||||
vector<TDDT_riga_xml*> _rows;
|
||||
public:
|
||||
int add_doc();
|
||||
/** Aggiungo la riga al documento n. \a which_riga, altrimenti se non specificato mette sull'ultimo doc presente.
|
||||
* \returns indice documento in cui e' stata inserita la riga.
|
||||
* \returns -1 se non e' mai stato inserito alcun documento o l'indice (\a which_doc) non e' corretto.
|
||||
*/
|
||||
int add_row(TDDT_riga_xml* riga, int which_doc = -1);
|
||||
bool print() override;
|
||||
TDDT_riga_xml* new_row() { _rows.push_back(new TDDT_riga_xml); return _rows.back(); }
|
||||
|
||||
/** Setto testata al documento n. \a which_riga, altrimenti se non specificato setta l'ultimo doc presente.
|
||||
* \returns indice documento settato.
|
||||
* \returns -1 se non e' mai stato inserito alcun documento o l'indice (\a which_doc) non e' corretto.
|
||||
*/
|
||||
int set_testata(const char* data_doc, const char* num_doc, int which_doc = -1);
|
||||
|
||||
TFlexform_xml_ddt(const char* xml_name = "") : TFlexform_xml(xml_name) { }
|
||||
~TFlexform_xml_ddt();
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Definizioni
|
||||
/////////////////////////////////////////////////////////
|
||||
// Flexform export xml
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
const char* TFlexform_xml::generatre_GUID()
|
||||
{
|
||||
static TString _guid;
|
||||
if(_guid.empty())
|
||||
{
|
||||
char cstr[39];
|
||||
size_t chars;
|
||||
GUID uuid;
|
||||
if (UuidCreate(&uuid) == RPC_S_OK)
|
||||
{
|
||||
LPOLESTR lpsz;
|
||||
StringFromCLSID(uuid, &lpsz);
|
||||
wcstombs_s(&chars, cstr, lpsz, wcslen(lpsz));
|
||||
_guid = cstr;
|
||||
}
|
||||
else
|
||||
_guid = "";
|
||||
}
|
||||
return _guid;
|
||||
}
|
||||
|
||||
TFlexform_xml::TFlexform_xml(const char* xml_name) : _file_name(xml_name), _fout(nullptr)
|
||||
{
|
||||
_esa_import.set_attributes(TConfig(CONFIG_DITTA, "Main").get("RAGSOC"), TDate(TODAY), generatre_GUID(), "1");
|
||||
_esa_import.set_root();
|
||||
_fout = new ofstream(xml_name);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// ORDINI
|
||||
/////////////////////////////////////////////////////////
|
||||
// Righe ////////////////////////////////////////////////
|
||||
|
||||
void TOrdini_riga_xml::set_datarow(const char* ind_tiporiga, const char* cod_art, const char* des_articolo_riga, const char* qta_merce, const char* des_campo_libero6)
|
||||
{
|
||||
_datarow = new TXML_element("datarow"); add_child(*_datarow);
|
||||
_tiporiga = new TXML_element("ind_tiporiga", ind_tiporiga); _datarow->add_child(*_tiporiga);
|
||||
_art = new TXML_element("cod_art", cod_art); _datarow->add_child(*_art);
|
||||
_des_articolo = new TXML_element("des_articolo_riga", des_articolo_riga); _datarow->add_child(*_des_articolo);
|
||||
_merce = new TXML_element("qta_merce", qta_merce); _datarow->add_child(*_merce);
|
||||
_libero = new TXML_element("des_campo_libero6", des_campo_libero6); _datarow->add_child(*_libero);
|
||||
}
|
||||
|
||||
TOrdini_riga_xml::~TOrdini_riga_xml()
|
||||
{
|
||||
delete _datarow;
|
||||
delete _tiporiga;
|
||||
delete _art;
|
||||
delete _des_articolo;
|
||||
delete _merce;
|
||||
delete _libero;
|
||||
}
|
||||
|
||||
// Testata //////////////////////////////////////////////
|
||||
|
||||
void TOrdini_testata_xml::set_testata(const char* data_doc, const char* num_doc, const char* str)
|
||||
{
|
||||
_datarow = new TXML_element("datarow"); add_child(*_datarow);
|
||||
_dat_doc = new TXML_element("dat_doc_esterno", data_doc); _datarow->add_child(*_dat_doc);
|
||||
_des_num = new TXML_element("des_num_esterno", num_doc); _datarow->add_child(*_des_num);
|
||||
_sig_serie = new TXML_element("sig_serie_esterno", str); _datarow->add_child(*_sig_serie);
|
||||
}
|
||||
|
||||
TOrdini_testata_xml::~TOrdini_testata_xml()
|
||||
{
|
||||
delete _datarow;
|
||||
delete _dat_doc;
|
||||
delete _des_num;
|
||||
delete _sig_serie;
|
||||
}
|
||||
|
||||
// TFlexform_xml_ordini /////////////////////////////////
|
||||
|
||||
bool TFlexform_xml_ordini::print()
|
||||
{
|
||||
ofstream& out = *_fout;
|
||||
out << R"(<?xml version="1.0" encoding="UTF-8"?>)" << endl;
|
||||
const bool ok = _esa_import.print_on_file(_fout);
|
||||
_fout->close();
|
||||
return ok;
|
||||
}
|
||||
|
||||
TFlexform_xml_ordini::TFlexform_xml_ordini(const char* xml_name) : TFlexform_xml(xml_name), _ordine_impegno("ORDINE_IMPEGNO")
|
||||
{
|
||||
_ordine_impegno.add_attribute("TipoOperazione", "Insert");
|
||||
_ordine_impegno.set_parent(_esa_import);
|
||||
_testata.set_parent(_ordine_impegno);
|
||||
_fout = new ofstream(_file_name);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// DDT
|
||||
/////////////////////////////////////////////////////////
|
||||
// Riga /////////////////////////////////////////////////
|
||||
|
||||
void TDDT_riga_xml::set_datarow(const char* ind_tiporiga, const char* cod_art, const char* des_articolo_riga, const char* qta_merce, const char* des_campo_libero6)
|
||||
{
|
||||
const TString _cod_art = cod_art; _cod_art.left(25);
|
||||
const TString _desc = des_articolo_riga; _desc.left(255);
|
||||
const TString _libero6 = des_campo_libero6; _libero6.left(30);
|
||||
_datarow = new TXML_element("datarow"); add_child(*_datarow);
|
||||
_tiporiga = new TXML_element("ind_tiporiga", ind_tiporiga); _datarow->add_child(*_tiporiga);
|
||||
_art = new TXML_element("cod_art", (const char*)_cod_art); _datarow->add_child(*_art);
|
||||
_des_articolo = new TXML_element("des_articolo_riga", (const char*)_desc); _datarow->add_child(*_des_articolo);
|
||||
_merce = new TXML_element("qta_merce", qta_merce); _datarow->add_child(*_merce);
|
||||
_libero = new TXML_element("des_campo_libero6", (const char*)_libero6); _datarow->add_child(*_libero);
|
||||
}
|
||||
|
||||
TDDT_riga_xml::~TDDT_riga_xml()
|
||||
{
|
||||
delete _datarow;
|
||||
delete _tiporiga;
|
||||
delete _art;
|
||||
delete _des_articolo;
|
||||
delete _merce;
|
||||
delete _libero;
|
||||
}
|
||||
|
||||
// Testata //////////////////////////////////////////////
|
||||
|
||||
void TDDT_testata_xml::set_testata(const char* data_doc, const char* num_doc)
|
||||
{
|
||||
_datarow = new TXML_element("datarow"); add_child(*_datarow);
|
||||
_dat_doc = new TXML_element("dat_doc", data_doc); _datarow->add_child(*_dat_doc);
|
||||
_des_num = new TXML_element("des_num_doc", num_doc); _datarow->add_child(*_des_num);
|
||||
}
|
||||
|
||||
TDDT_testata_xml::~TDDT_testata_xml()
|
||||
{
|
||||
delete _datarow;
|
||||
delete _dat_doc;
|
||||
delete _des_num;
|
||||
}
|
||||
|
||||
// TFlexform_xml_ddt ///////////////////////////////////////
|
||||
|
||||
int TFlexform_xml_ddt::add_doc()
|
||||
{
|
||||
TXML_element* doc = new TXML_element("DOC_UNICO");
|
||||
_docs_unico.insert(_docs_unico.end(), doc);
|
||||
_docs_unico.back()->set_parent(_esa_import);
|
||||
TDDT_testata_xml* test = new TDDT_testata_xml;
|
||||
_testate.insert(_testate.end(), test);
|
||||
_testate.back()->set_parent(*_docs_unico.back());
|
||||
return _docs_unico.size();
|
||||
}
|
||||
|
||||
int TFlexform_xml_ddt::add_row(TDDT_riga_xml* riga, int which_doc)
|
||||
{
|
||||
int i = which_doc < 0 ? (int)_testate.size() - 1 : which_doc;
|
||||
if (!_testate.empty() && i < (int)_testate.size())
|
||||
riga->set_parent(*_testate[i]);
|
||||
else
|
||||
i = -1;
|
||||
return i;
|
||||
}
|
||||
|
||||
bool TFlexform_xml_ddt::print()
|
||||
{
|
||||
ofstream& out = *_fout;
|
||||
out << R"(<?xml version="1.0" encoding="UTF-8"?>)" << endl;
|
||||
const bool ok = _esa_import.print_on_file(_fout);
|
||||
_fout->close();
|
||||
return ok;
|
||||
}
|
||||
|
||||
int TFlexform_xml_ddt::set_testata(const char* data_doc, const char* num_doc, const int which_doc)
|
||||
{
|
||||
int i = which_doc < 0 ? (int)_testate.size() - 1 : which_doc;
|
||||
if (!_testate.empty() && i < (int)_testate.size())
|
||||
_testate[i]->set_testata(data_doc, num_doc);
|
||||
else
|
||||
i = -1;
|
||||
return i;
|
||||
}
|
||||
|
||||
TFlexform_xml_ddt::~TFlexform_xml_ddt()
|
||||
{
|
||||
for (auto doc : _docs_unico)
|
||||
delete doc;
|
||||
for (auto testata : _testate)
|
||||
delete testata;
|
||||
for (auto row : _rows)
|
||||
delete row;
|
||||
}
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Main Mask
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TMajor_export_mask final : public TAutomask
|
||||
{
|
||||
protected:
|
||||
bool on_field_event(TOperable_field& o, TField_event e, long jolly) override;
|
||||
void load_all();
|
||||
public:
|
||||
void save_all() const;
|
||||
TMajor_export_mask();
|
||||
~TMajor_export_mask() { save_all(); }
|
||||
};
|
||||
|
||||
bool TMajor_export_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
TMajor_export_mask::TMajor_export_mask() : TAutomask("ps6362100a")
|
||||
{
|
||||
load_all();
|
||||
}
|
||||
|
||||
void TMajor_export_mask::save_all() const
|
||||
{
|
||||
ini_set_string(CONFIG_DITTA, "ps6362", "flddest", get(F_FLDDEST));
|
||||
ini_set_bool(CONFIG_DITTA, "ps6362", "fldroot_b", get(F_SUBFLD));
|
||||
ini_set_string(CONFIG_DITTA, "ps6362", "numddt", get(F_NUMDDT));
|
||||
ini_set_string(CONFIG_DITTA, "ps6362", "numord", get(F_NUMORD));
|
||||
}
|
||||
|
||||
void TMajor_export_mask::load_all()
|
||||
{
|
||||
TFilename temp;
|
||||
temp.tempdir();
|
||||
set(F_FLDDEST, ini_get_string(CONFIG_DITTA, "ps6362", "flddest", temp));
|
||||
set(F_SUBFLD, ini_get_bool(CONFIG_DITTA, "ps6362", "fldroot_b"));
|
||||
set(F_ANNO_ELAB, TDate(TODAY).year());
|
||||
set(F_NUMDDT, ini_get_string(CONFIG_DITTA, "ps6362", "numddt", ""));
|
||||
set(F_NUMORD, ini_get_string(CONFIG_DITTA, "ps6362", "numord", ""));
|
||||
if(get(F_NUMDDT).empty() || get(F_NUMORD).empty())
|
||||
{
|
||||
TTable num("%NUM");
|
||||
TString ord, ddt;
|
||||
for (num.first(); num.good(); num.next())
|
||||
{
|
||||
if (ddt.empty() && num.get("CODTAB").starts_with("B0"))
|
||||
ddt = num.get("CODTAB");
|
||||
else if (ord.empty() && num.get("CODTAB").starts_with("ORC"))
|
||||
ord = num.get("CODTAB");
|
||||
if (ord.full() && ddt.full())
|
||||
break;
|
||||
}
|
||||
if (get(F_NUMDDT).empty())
|
||||
set(F_NUMDDT, ddt);
|
||||
if (get(F_NUMORD).empty())
|
||||
set(F_NUMORD, ord);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Main Program
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
class TMajor_export_app : public TSkeleton_application
|
||||
{
|
||||
TString _fld_dest;
|
||||
|
||||
bool create() override;
|
||||
|
||||
static TFilename check_name_file(const TString& dir, bool sub_fld, int from, int to, bool ddt = true);
|
||||
static bool export_ddt(TMask& msk);
|
||||
static bool export_ordini() { return false; }
|
||||
void main_loop() override;
|
||||
public:
|
||||
TMajor_export_app() = default;
|
||||
};
|
||||
|
||||
bool TMajor_export_app::create()
|
||||
{
|
||||
return TSkeleton_application::create();
|
||||
}
|
||||
|
||||
TFilename TMajor_export_app::check_name_file(const TString& dir, const bool sub_fld, const int from, const int to, bool ddt)
|
||||
{
|
||||
TString cartella = dir; cartella << "/";
|
||||
if (sub_fld)
|
||||
cartella << "CAMPO_" << TDate(TODAY).date2ansi() << "/";
|
||||
TString da, a;
|
||||
da.format("%07d", from);
|
||||
a.format("%07d", to);
|
||||
|
||||
TString name; name << (ddt ? "ddt" : "ord") << TDate(TODAY).year() << da << a;
|
||||
TFilename xml(cartella);
|
||||
if (!xvt_fsys_dir_exists(xml))
|
||||
xvt_fsys_mkdir(xml);
|
||||
xml << name << ".xml";
|
||||
if (xml.exist())
|
||||
{
|
||||
const int key = yesnocancel_box("Esiste gia' un file per questa esportazione. Creare nuovo nome?\nCliccare 'No' se si vuole sostituire il file.");
|
||||
if (key == K_YES)
|
||||
{
|
||||
int i = 1;
|
||||
do
|
||||
{
|
||||
xml = cartella;
|
||||
xml << name << "_" << i++ << ".xml";
|
||||
} while (xml.exist() && i < 128);
|
||||
if (i == 128)
|
||||
fatal_box("Attenzione si sta cercando di generare troppi file per questa esportazione.");
|
||||
}
|
||||
else if (key != K_NO)
|
||||
xml = "";
|
||||
}
|
||||
return xml;
|
||||
}
|
||||
|
||||
bool TMajor_export_app::export_ddt(TMask& msk)
|
||||
{
|
||||
const TString& dir = msk.get(F_FLDDEST);
|
||||
const bool sub_fld = msk.get_bool(F_SUBFLD);
|
||||
const int year = msk.get_int(F_ANNO_ELAB);
|
||||
const int from = msk.get_int(F_NUMDDT_DA);
|
||||
const int to = msk.get_int(F_NUMDDT_A);
|
||||
const TString& codnum = msk.get(F_NUMDDT);
|
||||
|
||||
TFilename xml = check_name_file(dir, sub_fld, from, to);
|
||||
if (xml.empty())
|
||||
return false;
|
||||
TFlexform_xml_ddt ddt(xml);
|
||||
TString query_doc;
|
||||
query_doc << "SELECT * FROM doc WHERE CODNUM = \"" << codnum << "\" AND ANNO == " << year << " AND PROVV == \"D\" AND NDOC >= " << from << " AND NDOC <= " << to;
|
||||
TSQL_recordset doc(query_doc);
|
||||
TProgress_monitor bar(doc.items(), "Esportazione ddt");
|
||||
|
||||
for(bool ok_d = doc.move_first(); ok_d; ok_d = doc.move_next())
|
||||
{
|
||||
if (!bar.add_status())
|
||||
break;
|
||||
ddt.add_doc();
|
||||
TFormatted_date day(doc.get(doc.find_column(DOC_DATADOC)).as_date()); day.set_format("1444/");
|
||||
const TString& n_doc = doc.get(doc.find_column(DOC_NDOC)).as_string();
|
||||
ddt.set_testata(day.string(), n_doc);
|
||||
// Righe documento
|
||||
TString query_righe; query_righe << "SELECT * FROM rdoc WHERE CODNUM = \"" << codnum << "\" AND ANNO == " << year << " AND PROVV == \"D\" AND NDOC=" << n_doc;
|
||||
TSQL_recordset righe_doc(query_righe);
|
||||
for (bool ok_r = righe_doc.move_first(); ok_r; ok_r = righe_doc.move_next())
|
||||
{
|
||||
TDDT_riga_xml* riga = ddt.new_row();
|
||||
const TString& cod_art = righe_doc.get(righe_doc.find_column(RDOC_CODART)).as_string();
|
||||
TString descr = righe_doc.get(righe_doc.find_column(RDOC_DESCR)).as_string();
|
||||
if (righe_doc.get(righe_doc.find_column(RDOC_DESCLUNGA)).as_bool())
|
||||
descr << righe_doc.get(righe_doc.find_column(RDOC_DESCEST)).as_string();
|
||||
const TString& qta = righe_doc.get(righe_doc.find_column(RDOC_QTA)).as_string();
|
||||
|
||||
riga->set_datarow("C", cod_art, descr, qta, "");
|
||||
ddt.add_row(riga);
|
||||
}
|
||||
}
|
||||
bool ok = true;
|
||||
if (ok &= ddt.ok())
|
||||
ok &= ddt.print();
|
||||
return ok;
|
||||
}
|
||||
|
||||
void TMajor_export_app::main_loop()
|
||||
{
|
||||
TMajor_export_mask msk;
|
||||
while (msk.run() == K_ENTER)
|
||||
{
|
||||
bool ok = true;
|
||||
TString msg; msg << "Esportazione ";
|
||||
if (msk.get(F_TIPODOC) == "D")
|
||||
{
|
||||
ok &= export_ddt(msk);
|
||||
msg << "DDT";
|
||||
}
|
||||
else
|
||||
{
|
||||
ok &= export_ordini();
|
||||
msg << "ordini";
|
||||
}
|
||||
if (ok)
|
||||
message_box(msg << " eseguita correttamente.");
|
||||
else
|
||||
warning_box(msg << " non completata.");
|
||||
}
|
||||
}
|
||||
|
||||
int ps6362100(const int argc, char* argv[])
|
||||
{
|
||||
TMajor_export_app pe;
|
||||
pe.run(argc, argv, TR("Esportazione Major-Flexform"));
|
||||
return 0;
|
||||
}
|
8
src/ps/ps6362100a.h
Normal file
8
src/ps/ps6362100a.h
Normal file
@ -0,0 +1,8 @@
|
||||
#define F_FLDDEST 101
|
||||
#define F_SUBFLD 102
|
||||
#define F_TIPODOC 103
|
||||
#define F_NUMORD 104
|
||||
#define F_NUMDDT 105
|
||||
#define F_ANNO_ELAB 106
|
||||
#define F_NUMDDT_DA 107
|
||||
#define F_NUMDDT_A 108
|
113
src/ps/ps6362100a.uml
Normal file
113
src/ps/ps6362100a.uml
Normal file
@ -0,0 +1,113 @@
|
||||
#include "ps6362100a.h"
|
||||
|
||||
TOOLBAR "topbar" 0 0 0 2
|
||||
BUTTON DLG_OK 2 2
|
||||
BEGIN
|
||||
PROMPT 1 1 "~Conferma"
|
||||
PICTURE TOOL_OK
|
||||
END
|
||||
|
||||
#include <helpbar.h>
|
||||
ENDPAGE
|
||||
|
||||
PAGE "Configurazione Esportazione Major-Flexform" 0 2 0 0
|
||||
|
||||
GROUPBOX DLG_NULL 78 4
|
||||
BEGIN
|
||||
PROMPT 1 0 "@bPercorso salvataggio file"
|
||||
END
|
||||
|
||||
STRING F_FLDDEST 250 50
|
||||
BEGIN
|
||||
PROMPT 2 1 "Cartella di destinazione"
|
||||
DSELECT
|
||||
FLAGS ""
|
||||
CHECKTYPE REQUIRED
|
||||
END
|
||||
|
||||
BOOLEAN F_SUBFLD
|
||||
BEGIN
|
||||
PROMPT 2 2 "Crea sottocartella con data odierna"
|
||||
FLAGS ""
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 66 12
|
||||
BEGIN
|
||||
PROMPT 5 4 "@bEstremi dei documenti da elaborare:"
|
||||
END
|
||||
|
||||
RADIOBUTTON F_TIPODOC 64
|
||||
BEGIN
|
||||
PROMPT 6 5 "@bSelezionare tipo documento da esportare"
|
||||
ITEM "D|DDT"
|
||||
ITEM "O|Ordini"
|
||||
FLAG "ZD"
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 25 4
|
||||
BEGIN
|
||||
PROMPT 6 8 "@bSelezionare cod. numerazione"
|
||||
END
|
||||
|
||||
STRING F_NUMDDT 4
|
||||
BEGIN
|
||||
PROMPT 7 9 "DDT "
|
||||
FLAG "UZ"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NUMDDT
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_NUMDDT CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_NUMORD 4
|
||||
BEGIN
|
||||
PROMPT 7 10 "ORDINI"
|
||||
FLAG "UZD"
|
||||
USE %NUM
|
||||
INPUT CODTAB F_NUMORD
|
||||
DISPLAY "Codice" CODTAB
|
||||
DISPLAY "Descrizione@50" S0
|
||||
OUTPUT F_NUMORD CODTAB
|
||||
CHECKTYPE NORMAL
|
||||
END
|
||||
|
||||
STRING F_ANNO_ELAB 4
|
||||
BEGIN
|
||||
PROMPT 37 8 "Anno elaborazione"
|
||||
END
|
||||
|
||||
STRING F_NUMDDT_DA 7
|
||||
BEGIN
|
||||
PROMPT 37 9 "da num. doc. "
|
||||
USE LF_DOC
|
||||
JOIN %TIP ALIAS 104 INTO CODTAB=TIPODOC
|
||||
JOIN LF_CLIFO INTO TIPOCF=TIPOCF CODCF=CODCF
|
||||
INPUT PROVV "D"
|
||||
INPUT ANNO F_ANNO_ELAB SELECT
|
||||
INPUT CODNUM F_NUMDDT SELECT
|
||||
INPUT NDOC F_NUMDDT_DA
|
||||
DISPLAY "Numero" NDOC
|
||||
DISPLAY "Tipo@50" 104@->S0
|
||||
DISPLAY "Ragione sociale@50" LF_CLIFO->RAGSOC
|
||||
OUTPUT F_NUMDDT_DA NDOC
|
||||
ADD RUN ve0 -0
|
||||
END
|
||||
|
||||
STRING F_NUMDDT_A 7
|
||||
BEGIN
|
||||
PROMPT 37 10 "a "
|
||||
COPY USE F_NUMDDT_DA
|
||||
INPUT PROVV "D"
|
||||
INPUT ANNO F_ANNO_ELAB SELECT
|
||||
INPUT CODNUM F_NUMDDT SELECT
|
||||
INPUT NDOC F_NUMDDT_A
|
||||
COPY DISPLAY F_NUMDDT_DA
|
||||
OUTPUT F_NUMDDT_A NDOC
|
||||
NUM_EXPR (#THIS_FIELD==0)||(#THIS_FIELD>=#F_NUMDDT_DA)
|
||||
WARNING "Specificare un numero documento superiore a quello di partenza"
|
||||
ADD RUN ve0 -0
|
||||
END
|
||||
|
||||
ENDPAGE
|
Loading…
x
Reference in New Issue
Block a user