bozza nuova app import XML (copia da Excel Import)

This commit is contained in:
Samuele Locatelli
2023-04-06 19:41:14 +02:00
parent 6b3e5b8715
commit ee8a02c156
16 changed files with 781 additions and 100 deletions
+37
View File
@@ -0,0 +1,37 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.2.32516.85
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.Core", "EgwCApp.Core\EgwCApp.Core.csproj", "{DF02D478-2309-48B8-BF0D-90B02327AF02}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.XmlProc", "EgwCApp.XmlProc\EgwCApp.XmlProc.csproj", "{64BC5889-BE30-489A-B78F-8B3EE08819CB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EgwCApp.XmlTesting", "EgwCApp.XmlTesting\EgwCApp.XmlTesting.csproj", "{52D72303-ACAB-4289-8856-0F56A50474FC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DF02D478-2309-48B8-BF0D-90B02327AF02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF02D478-2309-48B8-BF0D-90B02327AF02}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF02D478-2309-48B8-BF0D-90B02327AF02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF02D478-2309-48B8-BF0D-90B02327AF02}.Release|Any CPU.Build.0 = Release|Any CPU
{64BC5889-BE30-489A-B78F-8B3EE08819CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{64BC5889-BE30-489A-B78F-8B3EE08819CB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{64BC5889-BE30-489A-B78F-8B3EE08819CB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{64BC5889-BE30-489A-B78F-8B3EE08819CB}.Release|Any CPU.Build.0 = Release|Any CPU
{52D72303-ACAB-4289-8856-0F56A50474FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52D72303-ACAB-4289-8856-0F56A50474FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52D72303-ACAB-4289-8856-0F56A50474FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52D72303-ACAB-4289-8856-0F56A50474FC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {2AF3181F-288A-47D5-8087-2AB660476D85}
EndGlobalSection
EndGlobal
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EgwCApp.Core\EgwCApp.Core.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="testConf.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
+378
View File
@@ -0,0 +1,378 @@
using EgwCApp.Core;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static EgwCApp.Core.WharehouseData;
namespace EgwCApp.XmlProc
{
public class ImportProc
{
#region Public Constructors
/// <summary>
/// Init oggetto per import
/// </summary>
/// <param name="confFileName"></param>
public ImportProc(string confFileName)
{
if (!string.IsNullOrEmpty(confFileName))
{
fileConfName = confFileName;
}
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Decodifica configurazione
/// </summary>
/// <returns></returns>
public bool decodeConfig()
{
bool answ = false;
if (!string.IsNullOrEmpty(fileConfName))
{
// deserializzo config
if (!File.Exists(fileConfName))
{
Console.WriteLine($"Error: ConfigFile not found | {fileConfName}");
}
else
{
string rawData = File.ReadAllText(fileConfName);
// se ho contenuto procedo
if (string.IsNullOrEmpty(rawData))
{
Console.WriteLine($"Error: ConfigFile empty! | {fileConfName}");
}
else
{
// deserializzo
taskConfig = JsonConvert.DeserializeObject<ConfigFile>(rawData);
answ = taskConfig != null;
}
}
}
return answ;
}
/// <summary>
/// Esegue import (se possibile)
/// </summary>
/// <returns></returns>
public bool doProcess()
{
bool answ = false;
if (taskConfig != null)
{
// verifico esista il file...
if (string.IsNullOrEmpty(taskConfig.FileInPath) && File.Exists(taskConfig.FileInPath))
{
// manca file ingresso!!! esco!
}
else
{
// verifico il tipo di process necessario...
switch (taskConfig.Type)
{
case ImportType.CSV:
fileReturnData = File.ReadAllText(taskConfig.FileInPath);
answ = true;
break;
case ImportType.Excel:
fileReturnData = processExcelImport(taskConfig.FileInPath);
answ = true;
break;
case ImportType.ND:
default:
break;
}
}
}
return answ;
}
/// <summary>
/// Esecuzione ritorno informazioni secondo configurazione...
/// </summary>
/// <returns></returns>
public bool doReturn()
{
bool answ = false;
if (taskConfig != null)
{
// verifico il tipo di return necessario...
switch (taskConfig.Return)
{
case ReturnMode.Console:
Console.WriteLine(fileReturnData);
answ = true;
break;
case ReturnMode.Redis:
break;
case ReturnMode.File:
// verifico path ci sia... sennò creo
string outPath = string.IsNullOrEmpty(taskConfig.FileOutPath) ? "FileOut.txt" : taskConfig.FileOutPath;
// verifico se vadano salvati in una folder differente...
if (!string.IsNullOrEmpty(taskConfig.ConvertDir))
{
if (!Directory.Exists(taskConfig.ConvertDir))
{
Directory.CreateDirectory(taskConfig.ConvertDir);
}
outPath = Path.Combine(taskConfig.ConvertDir, Path.GetFileName(outPath));
}
// salvo il file!
File.WriteAllText(outPath, fileReturnData);
answ = true;
break;
case ReturnMode.ND:
default:
break;
}
// se fatto eventualmente archivio
if (answ)
{
if (!string.IsNullOrEmpty(taskConfig.ArchiveDir))
{
// verifico cartella archivio
if (!Directory.Exists(taskConfig.ArchiveDir))
{
Directory.CreateDirectory(taskConfig.ArchiveDir);
}
// sposto file
string fName = Path.GetFileName(taskConfig.FileInPath);
File.Move(taskConfig.FileInPath, Path.Combine(taskConfig.ArchiveDir, fName), true);
}
}
}
return answ;
}
#endregion Public Methods
#region Protected Properties
/// <summary>
/// Nome del file config da processare
/// </summary>
protected string fileConfName { get; set; } = "";
/// <summary>
/// Contenuto del file da restituire come return data (serializzato)
/// </summary>
protected string fileReturnData { get; set; } = "";
/// <summary>
/// Configurazione del task da eseguire
/// </summary>
protected ConfigFile? taskConfig { get; set; } = new ConfigFile();
#endregion Protected Properties
#region Protected Methods
/// <summary>
/// Estrae da una riga l'i-esimo elemento
/// </summary>
/// <param name="riga"></param>
/// <param name="col"></param>
/// <returns></returns>
protected string getCellVal(System.Data.DataRow? riga, int col)
{
string answ = "";
if (riga != null)
{
try
{
answ = $"{riga.ItemArray[col]}".Trim();
}
catch
{ }
}
return answ;
}
/// <summary>
/// Cleanup stringa x impiego tipo ident da char dubbi
/// </summary>
/// <param name="origData"></param>
/// <returns></returns>
protected string strFixId(string origData)
{
return origData.Replace(".", "").Replace(" ", "_");
}
#endregion Protected Methods
#region Private Methods
/// <summary>
/// Importa un file excel e restituisce una
/// </summary>
/// <param name="fileItem"></param>
/// <returns></returns>
private string processExcelImport(string fileItem)
{
string outVal = "";
int numErr = 0;
// test procedura di import files excel x Giacovelli...
var currExcel = new ExcelMan(fileItem);
// creo lista dati in formato RegGiacenze...
Dictionary<string, BatchRec> listaGiac = new Dictionary<string, BatchRec>();
var dtSet = currExcel.getDataSet();
if (dtSet != null && dtSet.Tables != null && dtSet.Tables.Count > 0)
{
string nomeFile = Path.GetFileName(fileItem);
nomeFile = nomeFile.Substring(0, nomeFile.LastIndexOf("."));
var elSheet = dtSet.Tables;
int idxTab = 0;
// cerco lo sheet corretto se > 1
if (dtSet.Tables.Count > 1)
{
bool found = false;
for (int i = 0; i < dtSet.Tables.Count; i++)
{
if (nomeFile.Contains(dtSet.Tables[i].TableName))
{
idxTab = i;
found = true;
break;
}
// controllo parametro opzionale...
if (!found && taskConfig != null && !string.IsNullOrEmpty(taskConfig.TargetName))
{
if (dtSet.Tables[i].TableName == taskConfig.TargetName)
{
idxTab = i;
break;
}
}
}
}
var tabella = dtSet.Tables[idxTab];
int numRighe = tabella.Rows.Count;
int idxODL = taskConfig != null ? taskConfig.IdxODL : 0;
for (int i = 0; i < numRighe; i++)
{
if (taskConfig != null && taskConfig.ProcessParamInt != null && taskConfig.ProcessParamInt.Count > 5)
{
if (numErr < numRighe / 5)
{
try
{
// variabili di appoggio...
DateTime dtRif = DateTime.Today;
double qtyTot = 0;
int numPack = 0;
var riga = tabella.Rows[i];
if (riga != null)
{
string ddt = getCellVal(riga, taskConfig.ProcessParamInt["ExtDoc"]);
string sDate = getCellVal(riga, taskConfig.ProcessParamInt["DateRif"]);
string prod = getCellVal(riga, taskConfig.ProcessParamInt["Product"]);
// verifiche x import: header, data e DDT (vuoti o "-") --> SKIP!
bool checkHeaderKo = (ddt == "DDT" || prod == "PRODOTTO");
bool checkEmptyDdt = (string.IsNullOrEmpty(ddt) || ddt == "-");
bool checkEmptyDate = (string.IsNullOrEmpty(sDate) || sDate == "-");
if (checkHeaderKo)
{
//lgTrace($"SKIP header");
}
else if (checkEmptyDdt || checkEmptyDate)
{
//lgTrace($"SKIP linea vuota | i: {i} | ddt: {ddt} | date: {sDate} | prod: {prod}");
}
else
{
string variety = getCellVal(riga, taskConfig.ProcessParamInt["Variety"]);
string suppl = getCellVal(riga, taskConfig.ProcessParamInt["Supplier"]);
string sQty = getCellVal(riga, taskConfig.ProcessParamInt["QtyTot"]);
string sNum = getCellVal(riga, taskConfig.ProcessParamInt["NumPack"]);
string numPed = getCellVal(riga, taskConfig.ProcessParamInt["NumPed"]);
string packPed = getCellVal(riga, taskConfig.ProcessParamInt["PackPed"]);
string pesoPack = getCellVal(riga, taskConfig.ProcessParamInt["PesoPack"]);
DateTime.TryParse(sDate, out dtRif);
int.TryParse(sNum, out numPack);
double.TryParse(sQty, out qtyTot);
string identRG = ddt.Length > 2 ? $"{strFixId(ddt)}.{strFixId(prod)}.{strFixId(variety)}.{strFixId(suppl)}" : $"{dtRif:yyyyMMdd}.{strFixId(prod)}.{strFixId(variety)}.{strFixId(suppl)}";
string notes = $"{numPed}x{packPed}x{pesoPack}";
// verifico di avere dati per proseguire...
bool checkIdent = !string.IsNullOrEmpty($"{prod}{variety}{suppl}");
if (checkIdent)
{
BatchRec newRow = new BatchRec()
{
IdxODL = idxODL,
IdentRG = identRG,
DateRif = dtRif,
ExtDoc = ddt,
Product = prod,
Variety = variety,
Supplier = suppl,
NumPack = numPack,
QtyTot = qtyTot,
Notes = notes
};
// verifico: se manca aggiungo
if (!listaGiac.ContainsKey(identRG))
{
listaGiac.Add(identRG, newRow);
}
else
{
// altrimenti aggiorno giacenza con valori numerici
listaGiac[identRG].NumPack += newRow.NumPack;
listaGiac[identRG].QtyTot += newRow.QtyTot;
}
}
else
{
//lgError($"Errore verifica identità riga | prod: {prod} | variety: {variety} | suppl: {suppl}");
numErr++;
}
}
}
}
catch (Exception exc)
{
numErr++;
}
}
}
}
}
if (listaGiac.Count > 0)
{
// converto in una nuova lista...
int rCounter = 1;
Dictionary<int, BatchRec> list2Send = new Dictionary<int, BatchRec>();
foreach (var item in listaGiac)
{
list2Send.Add(rCounter, item.Value);
rCounter++;
}
// serializzo e restituisco file JSON...
var serVal = JsonConvert.SerializeObject(list2Send);
if (serVal != null && !string.IsNullOrEmpty(serVal))
{
outVal = serVal;
}
}
return outVal;
}
#endregion Private Methods
}
}
+62
View File
@@ -0,0 +1,62 @@
// See https://aka.ms/new-console-template for more information
// ExcImport: Excel Importer, per IobWin in logica lettura Giacenze
// parametri:
// $0: Path ConfigFile file per esecuzione
using EgwCApp.XmlProc;
string separator = "--------------------------------------";
string fileName = "";
// controllo args, se mancassero o incompleti mostro help
if (args.Length < 1)
{
Console.WriteLine(separator);
Console.WriteLine("- ExcelFileImporter - Core 6.0");
Console.WriteLine("- v.0.0.0.0 | @Egalware 2022+");
Console.WriteLine(separator);
Console.WriteLine();
Console.WriteLine("Mancano parametri per esecuzione:");
Console.WriteLine("");
Console.WriteLine("$0: ConfigFile da impiegare");
// provo a processare testConf...
fileName = "testConf.json";
}
else
{
fileName = args[0];
}
// ora processo se ho filename valido...
if (!string.IsNullOrEmpty(fileName))
{
// verifico se ho file...
if (File.Exists(fileName))
{
ImportProc importObj = new ImportProc(fileName);
bool stepOk = importObj.decodeConfig();
if (stepOk)
{
stepOk = importObj.doProcess();
if (!stepOk)
{
Console.WriteLine("Errore in processing file");
}
else
{
importObj.doReturn();
}
}
else
{
Console.WriteLine("Errore in processing config file");
}
}
else
{
Console.WriteLine("Errore file non trovato!");
}
}
+4
View File
@@ -0,0 +1,4 @@
@echo off
REM compilo in publish
dotnet publish EgwCApp.ExcImport.csproj -p:PublishSingleFile=true -r win-x64 -c Release --self-contained false
+25
View File
@@ -0,0 +1,25 @@
{
"ArchiveDir": "C:\\temp\\import\\archive",
"ConvertDir": "C:\\temp\\import\\convert",
"FileInPath": "C:\\temp\\import\\01.12.xlsx",
"FileOutPath": "01.12.json",
"IdxODL": 987654321,
"ProcessParamInt": {
"Product": 3,
"Variety": 9,
"Supplier": 8,
"ExtDoc": 2,
"DateRif": 14,
"QtyTot": 22,
"NumPack": 21,
"NumPed": 17,
"PackPed": 18,
"PesoPack": 20
},
"ProcessParamStr": {},
"RedisDB": 0,
"RedisOut": "",
"Return": "File",
"TargetName": "DB Loco",
"Type": "Excel"
}
+6
View File
@@ -0,0 +1,6 @@
{
"FilePath": "C:\\Temp\\test.log",
"ProcessParams": {},
"Return": "Console",
"Type": "Excel"
}
@@ -0,0 +1,25 @@
{
"ArchiveDir": "C:\\temp\\import\\archive",
"ConvertDir": "C:\\temp\\import\\convert",
"FileInPath": "C:\\temp\\import\\01.12.xlsx",
"FileOutPath": "01.12.json",
"IdxODL": 987654321,
"ProcessParamInt": {
"Product": 3,
"Variety": 9,
"Supplier": 8,
"ExtDoc": 2,
"DateRif": 14,
"QtyTot": 22,
"NumPack": 21,
"NumPed": 17,
"PackPed": 18,
"PesoPack": 20
},
"ProcessParamStr": {},
"RedisDB": 0,
"RedisOut": "",
"Return": "File",
"TargetName": "DB Loco",
"Type": "Excel"
}
+9
View File
@@ -0,0 +1,9 @@
echo ------------ Parametri compilazione ------------
echo OutDir: $(OutDir)
echo Configuration: $(ConfigurationName)
echo ProjectDir: $(ProjectDir)
echo AssemblyName: $(AssemblyName)
echo TargetDir: $(TargetDir)
echo ------------ Parametri compilazione ------------
preBuild.bat $(SolutionDir)EgwCApp.ExcImport\EgwCApp.ExcImport.csproj $(SolutionDir)EgwCApp.ExcImport\bin\Release\net6.0\publish\win-x64\ $(ProjectDir)Utils
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EgwCApp.Core\EgwCApp.Core.csproj" />
<ProjectReference Include="..\EgwCApp.XmlProc\EgwCApp.XmlProc.csproj" />
</ItemGroup>
<ItemGroup>
<None Update="Tools\ExcImport.exe">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
+120
View File
@@ -0,0 +1,120 @@
using System;
using System.Collections.Generic;
using EgwCApp.Core;
using Newtonsoft.Json;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EgwCApp.XmlTesting
{
public class FileProcMan
{
#region Public Constructors
public FileProcMan(string toolDir, string exeFileName)
{
this.confFileName = "conf.json";
this.baseDir = toolDir;
this.exeName = exeFileName;
appPath = $"./{baseDir}/{exeName}";
}
#endregion Public Constructors
#region Public Methods
/// <summary>
/// Processa il singolo file e riporta tempo esecuzione
/// </summary>
/// <returns></returns>
public TimeSpan doProcess(string fPath)
{
TimeSpan outVal = new TimeSpan();
Stopwatch sw = new Stopwatch();
// preparo file conf
createConfFile(fPath);
// avvio processing
Console.WriteLine("calling ext app with args:");
Console.WriteLine($"{appPath} {confFileName}");
Console.WriteLine();
ProcessStartInfo psi = new ProcessStartInfo
{
FileName = appPath,
Arguments = $"{confFileName}",
WindowStyle = ProcessWindowStyle.Minimized,
//WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
//CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardInput = true,
};
sw.Start();
Process p = Process.Start(psi);
string q = "";
while (!p.HasExited)
{
q += p.StandardOutput.ReadToEnd();
}
sw.Stop();
outVal = sw.Elapsed;
return outVal;
}
#endregion Public Methods
#region Protected Fields
protected string appPath = "";
protected string baseDir = "";
protected string confFileName = "";
protected string exeName = "";
#endregion Protected Fields
#region Private Methods
private void createConfFile(string item)
{
Dictionary<string, int> importParams = new Dictionary<string, int>();
importParams.Add("Product", 3);
importParams.Add("Variety", 9);
importParams.Add("Supplier", 8);
importParams.Add("ExtDoc", 2);
importParams.Add("DateRif", 14);
importParams.Add("QtyTot", 22);
importParams.Add("NumPack", 21);
importParams.Add("NumPed", 17);
importParams.Add("PackPed", 18);
importParams.Add("PesoPack", 20);
// calcolo nome file conf specifico
string outFileName = Path.GetFileName(item).Replace("xlsx", "json");
confFileName = $"conf_{outFileName}";
// calcolo outFIleName
var newConf = new ConfigFile()
{
ArchiveDir = @"C:\temp\import\archive\",
ConvertDir = @"C:\temp\import\convert\",
Type = ImportType.Excel,
FileInPath = item,
FileOutPath = outFileName,
Return = ReturnMode.File,
ProcessParamInt = importParams,
TargetName = "DB Loco"
};
// serializzo e salvo!
var rawData = JsonConvert.SerializeObject(newConf, Formatting.Indented);
File.WriteAllText(confFileName, rawData);
}
#endregion Private Methods
}
}
+65
View File
@@ -0,0 +1,65 @@
// See https://aka.ms/new-console-template for more information
using EgwCApp.Core;
using System.Diagnostics;
using Newtonsoft.Json;
using EgwCApp.XmlTesting;
Dictionary<string, TimeSpan> statsColl = new Dictionary<string, TimeSpan>();
Stopwatch sw = new Stopwatch();
string separator = "--------------------------------------";
Console.WriteLine(separator);
Console.WriteLine("Console Test Application");
Console.WriteLine(separator);
Console.WriteLine();
// creo il file di configurazione...
string fileName = "conf.json";
ConfigFile newConf = new ConfigFile();
string rawData = "";
// test CSV
//newConf = new ConfigFile()
//{
// Type = ImportType.CSV,
// FileInPath = @"C:\Temp\test.log",
// Return = ReturnMode.Console
//};
// svuoto eventuali conf vecchi
var listaConf = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.json");
if (listaConf != null && listaConf.Count() > 0)
{
foreach (var file2del in listaConf)
{
File.Delete(file2del);
}
}
// cerco file xlsx e ciclo...
var listaFiles = Directory.GetFiles(@"C:\temp\import\", "*.xlsx");
if (listaFiles != null && listaFiles.Count() > 0)
{
FileProcMan fpm = new FileProcMan("Tools", "ExcImport.exe");
foreach (var item in listaFiles)
{
TimeSpan timeElaps = fpm.doProcess(item);
statsColl.Add($"Ext prog executed for {item}", timeElaps);
}
}
Console.WriteLine(separator);
Console.WriteLine("press enter to proceed...");
Console.ReadLine();
foreach (var item in statsColl)
{
Console.WriteLine($"{item.Key} {item.Value.TotalMilliseconds} ms");
}
//Console.WriteLine($"Display executed in {timeElaps.TotalMilliseconds} ms");
Console.ReadLine();
Binary file not shown.
+6
View File
@@ -0,0 +1,6 @@
@echo off
REM recupero versione compilata
ROBOCOPY %1 %2 *.exe /MIR
echo Eseguito restore CApp!
-100
View File
@@ -472,106 +472,6 @@
<None Include="DATA\IobOpcUaClient.Config.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Content Include="DATA\RECIPE\FIMAT\001.xml" />
<Content Include="DATA\RECIPE\FIMAT\002.xml" />
<Content Include="DATA\RECIPE\FIMAT\003.xml" />
<Content Include="DATA\RECIPE\FIMAT\004.xml" />
<Content Include="DATA\RECIPE\FIMAT\005.xml" />
<Content Include="DATA\RECIPE\FIMAT\006.xml" />
<Content Include="DATA\RECIPE\FIMAT\007.xml" />
<Content Include="DATA\RECIPE\FIMAT\008.xml" />
<Content Include="DATA\RECIPE\FIMAT\009.xml" />
<Content Include="DATA\RECIPE\FIMAT\010.xml" />
<Content Include="DATA\RECIPE\FIMAT\011.xml" />
<Content Include="DATA\RECIPE\FIMAT\012.xml" />
<Content Include="DATA\RECIPE\FIMAT\013.xml" />
<Content Include="DATA\RECIPE\FIMAT\014.xml" />
<Content Include="DATA\RECIPE\FIMAT\015.xml" />
<Content Include="DATA\RECIPE\FIMAT\016.xml" />
<Content Include="DATA\RECIPE\FIMAT\017.xml" />
<Content Include="DATA\RECIPE\FIMAT\018.xml" />
<Content Include="DATA\RECIPE\FIMAT\019.xml" />
<Content Include="DATA\RECIPE\FIMAT\020.xml" />
<Content Include="DATA\RECIPE\FIMAT\021.xml" />
<Content Include="DATA\RECIPE\FIMAT\022.xml" />
<Content Include="DATA\RECIPE\FIMAT\023.xml" />
<Content Include="DATA\RECIPE\FIMAT\024.xml" />
<Content Include="DATA\RECIPE\FIMAT\025.xml" />
<Content Include="DATA\RECIPE\FIMAT\026.xml" />
<Content Include="DATA\RECIPE\FIMAT\027.xml" />
<Content Include="DATA\RECIPE\FIMAT\028.xml" />
<Content Include="DATA\RECIPE\FIMAT\029.xml" />
<Content Include="DATA\RECIPE\FIMAT\030.xml" />
<Content Include="DATA\RECIPE\FIMAT\031.xml" />
<Content Include="DATA\RECIPE\FIMAT\032.xml" />
<Content Include="DATA\RECIPE\FIMAT\033.xml" />
<Content Include="DATA\RECIPE\FIMAT\034.xml" />
<Content Include="DATA\RECIPE\FIMAT\035.xml" />
<Content Include="DATA\RECIPE\FIMAT\036.xml" />
<Content Include="DATA\RECIPE\FIMAT\037.xml" />
<Content Include="DATA\RECIPE\FIMAT\038.xml" />
<Content Include="DATA\RECIPE\FIMAT\039.xml" />
<Content Include="DATA\RECIPE\FIMAT\040.xml" />
<Content Include="DATA\RECIPE\FIMAT\041.xml" />
<Content Include="DATA\RECIPE\FIMAT\042.xml" />
<Content Include="DATA\RECIPE\FIMAT\043.xml" />
<Content Include="DATA\RECIPE\FIMAT\044.xml" />
<Content Include="DATA\RECIPE\FIMAT\045.xml" />
<Content Include="DATA\RECIPE\FIMAT\046.xml" />
<Content Include="DATA\RECIPE\FIMAT\047.xml" />
<Content Include="DATA\RECIPE\FIMAT\048.xml" />
<Content Include="DATA\RECIPE\FIMAT\049.xml" />
<Content Include="DATA\RECIPE\FIMAT\050.xml" />
<Content Include="DATA\RECIPE\FIMAT\051.xml" />
<Content Include="DATA\RECIPE\FIMAT\052.xml" />
<Content Include="DATA\RECIPE\FIMAT\053.xml" />
<Content Include="DATA\RECIPE\FIMAT\054.xml" />
<Content Include="DATA\RECIPE\FIMAT\055.xml" />
<Content Include="DATA\RECIPE\FIMAT\056.xml" />
<Content Include="DATA\RECIPE\FIMAT\057.xml" />
<Content Include="DATA\RECIPE\FIMAT\058.xml" />
<Content Include="DATA\RECIPE\FIMAT\059.xml" />
<Content Include="DATA\RECIPE\FIMAT\060.xml" />
<Content Include="DATA\RECIPE\FIMAT\061.xml" />
<Content Include="DATA\RECIPE\FIMAT\062.xml" />
<Content Include="DATA\RECIPE\FIMAT\063.xml" />
<Content Include="DATA\RECIPE\FIMAT\064.xml" />
<Content Include="DATA\RECIPE\FIMAT\065.xml" />
<Content Include="DATA\RECIPE\FIMAT\066.xml" />
<Content Include="DATA\RECIPE\FIMAT\067.xml" />
<Content Include="DATA\RECIPE\FIMAT\068.xml" />
<Content Include="DATA\RECIPE\FIMAT\069.xml" />
<Content Include="DATA\RECIPE\FIMAT\070.xml" />
<Content Include="DATA\RECIPE\FIMAT\071.xml" />
<Content Include="DATA\RECIPE\FIMAT\072.xml" />
<Content Include="DATA\RECIPE\FIMAT\073.xml" />
<Content Include="DATA\RECIPE\FIMAT\074.xml" />
<Content Include="DATA\RECIPE\FIMAT\075.xml" />
<Content Include="DATA\RECIPE\FIMAT\076.xml" />
<Content Include="DATA\RECIPE\FIMAT\077.xml" />
<Content Include="DATA\RECIPE\FIMAT\078.xml" />
<Content Include="DATA\RECIPE\FIMAT\079.xml" />
<Content Include="DATA\RECIPE\FIMAT\080.xml" />
<Content Include="DATA\RECIPE\FIMAT\081.xml" />
<Content Include="DATA\RECIPE\FIMAT\082.xml" />
<Content Include="DATA\RECIPE\FIMAT\083.xml" />
<Content Include="DATA\RECIPE\FIMAT\084.xml" />
<Content Include="DATA\RECIPE\FIMAT\085.xml" />
<Content Include="DATA\RECIPE\FIMAT\086.xml" />
<Content Include="DATA\RECIPE\FIMAT\087.xml" />
<Content Include="DATA\RECIPE\FIMAT\088.xml" />
<Content Include="DATA\RECIPE\FIMAT\089.xml" />
<Content Include="DATA\RECIPE\FIMAT\090.xml" />
<Content Include="DATA\RECIPE\FIMAT\091.xml" />
<Content Include="DATA\RECIPE\FIMAT\092.xml" />
<Content Include="DATA\RECIPE\FIMAT\093.xml" />
<Content Include="DATA\RECIPE\FIMAT\094.xml" />
<Content Include="DATA\RECIPE\FIMAT\095.xml" />
<Content Include="DATA\RECIPE\FIMAT\096.xml" />
<Content Include="DATA\RECIPE\FIMAT\097.xml" />
<Content Include="DATA\RECIPE\FIMAT\098.xml" />
<Content Include="DATA\RECIPE\FIMAT\099.xml" />
<Content Include="DATA\RECIPE\FIMAT\100.xml" />
<Content Include="DATA\RECIPE\FIMAT\101.xml" />
<Content Include="DATA\RECIPE\FIMAT\102.xml" />
<Content Include="DATA\RECIPE\FIMAT\103.xml" />
+3
View File
@@ -5768,6 +5768,8 @@ namespace IOB_WIN_NEXT
/// <summary>
/// Effettua eventuale file import, archiviando file importati
/// - es gestione file excel di Giacovelli
/// - es gestione ritorno ricette FIMAT
/// </summary>
/// <returns></returns>
protected virtual bool processFileImport()
@@ -5882,6 +5884,7 @@ namespace IOB_WIN_NEXT
return answ;
}
/// <summary>
/// Processa le richieste di scrittura memoria
/// </summary>