using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Linq; namespace CSVToTXT { public partial class frmCSVToTXT : Form { //valori costanti dell'xml //path destinazione è il perscorso dove verranno salvati i file xml generati. //viene letto nel file XmlConfigFile.xml dentro alla cartella bin del progetto public static string pathDestinazione = string.Empty; public frmCSVToTXT() { InitializeComponent(); ReadXML(); } #region METODI public void ReadXML() { try { //cicla gli elementi del file .xml passato al Load, guardando i nodi (Items) e relativi sottnodi del nodo padre (item) //foreach (var item in XElement.Load(@"XMLFile1.xml").Descendants("Items").Elements("Item")) foreach (var item in XElement.Load(@"XmlConfigFile.xml").Descendants("Items").Elements("Item")) { //se l'elemento non ha attributi if (!item.Attributes().Any()) { continue; } var nome = item.Attribute("name").Value; var valore = item.Attribute("value").Value; switch (nome) { case "diOutput": pathDestinazione = valore; //txtArea.Text = $"{pathDestinazione}"; break; default: txtArea.Text = $"nome: {nome} valore: {valore}"; break; } } } catch (Exception ex) { txtArea.Text = ex.Message; } } private void CercaNeiFile() { //creo oggetto openFileDialog1 OpenFileDialog openFileDialog1 = new OpenFileDialog(); //apro finestra per selezionare il file DialogResult res = openFileDialog1.ShowDialog(); if (res == DialogResult.OK) { string nomeFileTrovato = openFileDialog1.FileName; txtFile.Text = nomeFileTrovato; txtArea.Text = $"Premere Genera TXT per iniziare la procedura di conversione." + Environment.NewLine; } } private void ControllaDareAvere(List list) { decimal TotDare = 0; decimal TotAvere = 0; foreach (var item in list) { TotDare += item.DoubleImportoDare; TotAvere += item.DoubleImportoAvere; } var differenza = TotDare - TotAvere; if (differenza != 0) { MessageBox.Show($"LA differenza tra gli importi in DARE e gli importi in AVERE deve essere ZERO.", "Erore differenza importi dare/avere", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private List CreaOggettiPerConversioni() { List listPartenza = new List(); List listaOrdinata = new List(); //var listaRighe = File.ReadAllLines(txtFile.Text).Where(x => !string.IsNullOrEmpty(x)).Skip(1).ToList(); //leggo le righe del file CSV(ReadLines()) //filtro per le righe che non sono nulle (where). //skippo la prima che ha i titoli delle colonne (skip(1)). //per ogni riga creo un oggetto listPartenza = File.ReadLines(txtFile.Text).Where(x => !string.IsNullOrEmpty(x)).Skip(1).Select(x => CSVFileObject.FromCsvGigante(x)).ToList(); ControllaDareAvere(listPartenza); //28/03/2022 commentato perchè si deve usare codifica della ripartizione 3 come elementi di rottura. //listaOrdinata = listPartenza.OrderBy(x => x.IntCodiceDatoRipartizione4).ToList(); listaOrdinata = listPartenza.OrderBy(x => x.intCodificaDellaRipartizione3).ToList(); return listaOrdinata; } private void CostruisciFileTXT(List list) { ControllaDareAvere(list); var lastCodice = 99999; StringBuilder sb = new StringBuilder(); var testataDoc = InsertTestataDocumento(); var boolean = 0; var BKTXTCount = 0; sb.Append(testataDoc); if (list != null && list.Any()) { foreach (var item in list) { //controllo che la lunghezza del codiceConto non sia meno di 9 if (item.CodiceConto.Length >= 9) { //quando ci saranno i centri di costo definiti (cioè che saranno tutti valorizzati e diversi da 0 allora il ramo dx dell'AND si potrà togliere) if (item.IntCodiceDatoRipartizione4 != lastCodice) { BKTXTCount++; //assegno a last codice l'elemento di rottura trovato così diventa quello attuale lastCodice = item.IntCodiceDatoRipartizione4/*item.CodiceDatoRipartizione4*/; //ho trovato elemento di rottura, quindi devo inserire una nuova testata di riga var testataRighe = InsertTestataRiga(item, BKTXTCount); sb.Append(testataRighe); //lastCodice = item.IntCodiceDatoRipartizione4/*item.CodiceDatoRipartizione4*/; } } else { var str = MessageBox.Show($"il Codice Conto: {item.CodiceConto} deve essere lungo nove.", "Errore Codice Conto", MessageBoxButtons.OK, MessageBoxIcon.Error); boolean = 1; break; } //aggiungo riga con importo quindi richiamo metodo 2 var righeDoc = InsertRigheDocumento(item); sb.Append(righeDoc); } } if (boolean == 0) { var nomefile = $@"KSIP001_{txtCodAzi.Text}.txt"; var path = $@"{pathDestinazione}\{nomefile}"; File.WriteAllText(path, sb.ToString()); if (File.Exists(path)) { txtArea.Text += Environment.NewLine + //"File KSIP001_UMB.txt creato correttamente."; $@"File {nomefile} creato correttamente."; } else { txtArea.Text += Environment.NewLine + //"File KSIP001_UMB.txt non creato."; $@"File {nomefile} non creato."; } } else { txtArea.Text += Environment.NewLine + Environment.NewLine + "ERRORE: non è stato possibile creare il file." + Environment.NewLine; } } private string InsertTestataDocumento() { StringBuilder sb = new StringBuilder(); var STYPE = "0"; sb.Append(STYPE.PadRight(1)); var GROUP = "CONTAB_HRS_C"; //prenderà un valore sb.Append(GROUP.PadRight(12)); var MANDT = "100"; //prenderà un valore sb.Append(MANDT.PadRight(3)); var USNAM = "."; //prenderà un valore sb.Append(USNAM.PadRight(12)); //var START = DateTime.Now.ToString("ddMMyyyy"); //prenderà un valore var START = ""; //prenderà un valore sb.Append(START.PadRight(8)); var XKEEP = ""; //prenderà un valore sb.Append(XKEEP.PadRight(1)); var NODATA = "/"; //prenderà un valore sb.Append(NODATA.PadRight(1)); sb.Append(Environment.NewLine); //sb.Append(Environment.NewLine); return sb.ToString(); } private string InsertTestataRiga(CSVFileObject item, int BKTXTCount) { StringBuilder sb = new StringBuilder(); var STYPE = "1"; sb.Append(STYPE.PadRight(1)); var TCODE = "FB01"; sb.Append(TCODE.PadRight(20)); var BLDAT = $"27{item.DalMese.Replace("/", "")}"; //prenderà un valore DA CAPIRE QUALE CAMPO è //var BLDAT = DateTime.Now.ToString("ddMMyyyy"); sb.Append(BLDAT.PadRight(8)); var BLART = "PE"; //prenderà PE o PD - PE -> stipendi PD -> personale pareggio debiti (da capire quali sono gli uni e gli altri) sb.Append(BLART.PadRight(2)); var BUKRS = txtCodAzi.Text;/*GORI*/ /*"UMBR"*///prenderà un valore DA CAPIRE COME VALORIZZARE (PREDE IL CODICE SOCIETA' SAP, DA CAPIRE SE TXTCODAZI VA BENE) sb.Append(BUKRS.PadRight(4)); var BUDAT = $"27{item.AlMese.Replace("/", "")}"; //prenderà un valore DA CAPIRE QUALE CAMPO è sb.Append(BUDAT.PadRight(8)); var MONAT = "/"; sb.Append(MONAT.PadRight(2)); var WAERS = "EUR"; sb.Append(WAERS.PadRight(5)); var KURSF = "/"; sb.Append(KURSF.PadRight(10)); var BELNR = "/"; sb.Append(BELNR.PadRight(10)); var WWERT = "/"; sb.Append(WWERT.PadRight(8)); var XBLNR = "/"; sb.Append(XBLNR.PadRight(16)); var BVORG = "/"; sb.Append(BVORG.PadRight(16)); var BKTXT = "HRS_C" //+ $"{item.DalMese.Substring(3, 2)}" + $"{item.DalMese.Substring(item.DalMese.Length - 2)}" + $"{item.DalMese.Substring(5, 2) + item.DalMese.Substring(0, 2)}" + $"{BUKRS}" + $"{BKTXTCount}"; //progressivo. sb.Append(BKTXT.PadRight(25)); var PARGB = "/"; sb.Append(PARGB.PadRight(4)); var AUGLV = "/"; sb.Append(AUGLV.PadRight(8)); var VBUND = "/"; //prenderà un valore sb.Append(VBUND.PadRight(6)); var XMWST = "/"; sb.Append(XMWST.PadRight(1)); var DOCID = "/"; sb.Append(DOCID.PadRight(10)); var BARCD = "/"; sb.Append(BARCD.PadRight(40)); var STODT = "/"; sb.Append(STODT.PadRight(8)); var BRNCH = "/"; sb.Append(BRNCH.PadRight(4)); var NUMPG = "/"; sb.Append(NUMPG.PadRight(3)); var STGRD = "/"; sb.Append(STGRD.PadRight(2)); var KURSF_M = "/"; sb.Append(KURSF_M.PadRight(10)); var AUGTX = "/"; sb.Append(AUGTX.PadRight(50)); var XPRFG = "/"; sb.Append(XPRFG.PadRight(1)); var XBWAE = "/"; sb.Append(XBWAE.PadRight(1)); var LDGRP = "/"; sb.Append(LDGRP.PadRight(4)); var PROPMANO = "/"; sb.Append(PROPMANO.PadRight(13)); var VATDATE = "/"; sb.Append(VATDATE.PadRight(8)); var SENDE = "/"; sb.Append(SENDE.PadRight(1)); sb.Append(Environment.NewLine); //sb.Append(Environment.NewLine); return sb.ToString(); } private string InsertRigheDocumento(CSVFileObject item) { StringBuilder sb = new StringBuilder(); var STYPE = "2"; sb.Append(STYPE.PadRight(1)); var TBNAM = "BBSEG"; sb.Append(TBNAM.PadRight(30)); if (Convert.ToDecimal(item.ImportoDare.Replace(",", ".")) > 0) { var NEWBS = "40"; //prenderà importo dare sb.Append(NEWBS.PadRight(2)); } else { var NEWBS = "50"; //prenderà importo avere sb.Append(NEWBS.PadRight(2)); } var DUMMY = "/"; sb.Append(DUMMY.PadRight(10)); var NEWUM = "/"; sb.Append(NEWUM.PadRight(1)); var NEWBK = "/"; sb.Append(NEWBK.PadRight(4)); if (Convert.ToDecimal(item.ImportoDare.Replace(",", ".")) > 0) { var WRBTR = $"{string.Format("{0:0.00}", item.DoubleImportoDare)}"; //prenderà un valore sb.Append((WRBTR.PadLeft(16)).Replace(" ", "0")); } else { var WRBTR = $"{string.Format("{0:0.00}", item.DoubleImportoAvere)}"; //prenderà un valore sb.Append((WRBTR.PadLeft(16)).Replace(" ", "0")); } var DMBTR = "/"; sb.Append(DMBTR.PadRight(16)); var WMWST = "/"; sb.Append(WMWST.PadRight(16)); var MWSTS = "/"; sb.Append(MWSTS.PadRight(16)); var MWSKZ = "/"; sb.Append(MWSKZ.PadRight(2)); var XSKRL = "/"; sb.Append(XSKRL.PadRight(1)); var FWZUZ = "/"; sb.Append(FWZUZ.PadRight(16)); var HWZUZ = "/"; sb.Append(HWZUZ.PadRight(16)); var GSBER = "/"; sb.Append(GSBER.PadRight(4)); if (item.CodiceConto.Replace("\"","").StartsWith("C"))// se il conto è di costo allora KOSTL sarà valorizzato con CENTRO DI COSTO { var KOSTL = item.CodiceDatoRipartizione2.Replace("\"", ""); sb.Append(KOSTL.PadRight(10)); } else { var KOSTL = "/"; sb.Append(KOSTL.PadRight(10)); } //if (Convert.ToDecimal(item.ImportoDare.Replace(",", ".")) > 0) //{ // if (item.CodiceConto.StartsWith("C"))// se il conto è di costo allora KOSTL sarà valorizzato con CENTRO DI COSTO // { // var KOSTL = item.CodiceDatoRipartizione2; // sb.Append(KOSTL.PadRight(10)); // } // else // { // var KOSTL = "/"; // sb.Append(KOSTL.PadRight(10)); // } //} //else if (Convert.ToDecimal(item.ImportoAvere.Replace(",", ".")) > 0) //{ // if (item.CodiceContropartita.StartsWith("C"))// se il conto è di costo allora KOSTL sarà valorizzato con CENTRO DI COSTO // { // var KOSTL = item.CodiceDatoRipartizione2; // sb.Append(KOSTL.PadRight(10)); // } // else // { // var KOSTL = "/"; // sb.Append(KOSTL.PadRight(10)); // } //} var DUMMY4 = "/"; sb.Append(DUMMY4.PadRight(4)); var AUFNR = "/"; sb.Append(AUFNR.PadRight(12)); var EBELN = "/"; sb.Append(EBELN.PadRight(10)); var EBELP = "/"; sb.Append(EBELP.PadRight(5)); var PROJN = "/"; sb.Append(PROJN.PadRight(16)); var MATNR = "/"; sb.Append(MATNR.PadRight(18)); var WERKS = "/"; sb.Append(WERKS.PadRight(4)); var MENGE = "/"; sb.Append(MENGE.PadRight(17)); var MEINS = "/"; sb.Append(MEINS.PadRight(3)); var VBEL2 = "/"; sb.Append(VBEL2.PadRight(10)); var POSN2 = "/"; sb.Append(POSN2.PadRight(6)); var ETEN2 = "/"; sb.Append(ETEN2.PadRight(4)); var PERNR = "/"; sb.Append(PERNR.PadRight(8)); var BEWAR = "/"; sb.Append(BEWAR.PadRight(3)); var VALUT = "/"; sb.Append(VALUT.PadRight(8)); var ZFBDT = "/"; sb.Append(ZFBDT.PadRight(8)); var ZINKZ = "/"; sb.Append(ZINKZ.PadRight(2)); var ZUONR = "/"; sb.Append(ZUONR.PadRight(18)); var FKONT = "/"; sb.Append(FKONT.PadRight(3)); var XAABG = "/"; sb.Append(XAABG.PadRight(1)); var SGTXT = "/"; sb.Append(SGTXT.PadRight(50)); var BLNKZ = "/"; sb.Append(BLNKZ.PadRight(2)); var BLNBT = "/"; sb.Append(BLNBT.PadRight(16)); var BLNPZ = "/"; sb.Append(BLNPZ.PadRight(8)); var MABER = "/"; sb.Append(MABER.PadRight(2)); var SKFBT = "/"; sb.Append(SKFBT.PadRight(16)); var WSKTO = "/"; sb.Append(WSKTO.PadRight(16)); var ZTERM = "/"; sb.Append(ZTERM.PadRight(4)); var ZBD1T = "/"; sb.Append(ZBD1T.PadRight(3)); var ZBD1P = "/"; sb.Append(ZBD1P.PadRight(6)); var ZBD2T = "/"; sb.Append(ZBD2T.PadRight(3)); var ZBD2P = "/"; sb.Append(ZBD2P.PadRight(6)); var ZBD3T = "/"; sb.Append(ZBD3T.PadRight(3)); var ZLSPR = "/"; sb.Append(ZLSPR.PadRight(1)); var REBZG = "/"; sb.Append(REBZG.PadRight(10)); var REBZJ = "/"; sb.Append(REBZJ.PadRight(4)); var REBZZ = "/"; sb.Append(REBZZ.PadRight(3)); var ZLSCH = "/"; sb.Append(ZLSCH.PadRight(1)); var SAMNR = "/"; sb.Append(SAMNR.PadRight(8)); var ZBFIX = "/"; sb.Append(ZBFIX.PadRight(1)); var QSSKZ = "/"; sb.Append(QSSKZ.PadRight(2)); var QSSHB = "/"; sb.Append(QSSHB.PadRight(16)); var QSFBT = "/"; sb.Append(QSFBT.PadRight(16)); var ESRNR = "/"; sb.Append(ESRNR.PadRight(11)); var ESRPZ = "/"; sb.Append(ESRPZ.PadRight(2)); var ESRRE = "/"; sb.Append(ESRRE.PadRight(27)); var FDTAG = "/"; sb.Append(FDTAG.PadRight(8)); var FDLEV = "/"; sb.Append(FDLEV.PadRight(2)); var ANLN1 = "/"; sb.Append(ANLN1.PadRight(12)); var ANLN2 = "/"; sb.Append(ANLN2.PadRight(4)); var BZDAT = "/"; sb.Append(BZDAT.PadRight(8)); var ANBWA = "/"; sb.Append(ANBWA.PadRight(3)); var ABPER = "/"; sb.Append(ABPER.PadRight(7)); //pagina 23 var GBETR = "/"; sb.Append(GBETR.PadRight(16)); var KURSR = "/"; sb.Append(KURSR.PadRight(10)); var MANSP = "/"; sb.Append(MANSP.PadRight(1)); var MSCHL = "/"; sb.Append(MSCHL.PadRight(1)); var HBKID = "/"; sb.Append(HBKID.PadRight(5)); var BVTYP = "/"; sb.Append(BVTYP.PadRight(4)); var ANFBN = "/"; sb.Append(ANFBN.PadRight(10)); var ANFBU = "/"; sb.Append(ANFBU.PadRight(4)); var ANFBJ = "/"; sb.Append(ANFBJ.PadRight(4)); var LZBKZ = "/"; sb.Append(LZBKZ.PadRight(3)); var LANDL = "/"; sb.Append(LANDL.PadRight(3)); var DIEKZ = "/"; sb.Append(DIEKZ.PadRight(1)); var ZOLLD = "/"; sb.Append(ZOLLD.PadRight(8)); var ZOLLT = "/"; sb.Append(ZOLLT.PadRight(8)); var VRSDT = "/"; sb.Append(VRSDT.PadRight(8)); var VRSKZ = "/"; sb.Append(VRSKZ.PadRight(1)); var HZUON = "/"; sb.Append(HZUON.PadRight(18)); var REGUL = "/"; sb.Append(REGUL.PadRight(1)); var NAME1 = "/"; sb.Append(NAME1.PadRight(35)); var NAME2 = "/"; sb.Append(NAME2.PadRight(35)); var NAME3 = "/"; sb.Append(NAME3.PadRight(35)); var NAME4 = "/"; sb.Append(NAME4.PadRight(35)); var STRAS = "/"; sb.Append(STRAS.PadRight(35)); var ORT01 = "/"; sb.Append(ORT01.PadRight(35)); var PSTLZ = "/"; sb.Append(PSTLZ.PadRight(10)); var LAND1 = "/"; sb.Append(LAND1.PadRight(3)); var REGIO = "/"; sb.Append(REGIO.PadRight(3)); var BANKL = "/"; sb.Append(BANKL.PadRight(15)); var BANKS = "/"; sb.Append(BANKS.PadRight(3)); var BANKN = "/"; sb.Append(BANKN.PadRight(18)); var BKONT = "/"; sb.Append(BKONT.PadRight(2)); var STCD1 = "/"; sb.Append(STCD1.PadRight(16)); var STCD2 = "/"; sb.Append(STCD2.PadRight(11)); var MADAT = "/"; sb.Append(MADAT.PadRight(8)); var MANST = "/"; sb.Append(MANST.PadRight(1)); var EGMLD = "/"; sb.Append(EGMLD.PadRight(3)); var DUMMY2 = "/"; sb.Append(DUMMY2.PadRight(3)); var STCEG = "/"; sb.Append(STCEG.PadRight(20)); var STKZA = "/"; sb.Append(STKZA.PadRight(1)); var STKZU = "/"; sb.Append(STKZU.PadRight(1)); var PFACH = "/"; sb.Append(PFACH.PadRight(10)); var PSTL2 = "/"; sb.Append(PSTL2.PadRight(10)); var SPRAS = "/"; sb.Append(SPRAS.PadRight(1)); var XINVE = "/"; sb.Append(XINVE.PadRight(1)); //if (Convert.ToDecimal(item.ImportoDare.Replace(",", ".")) > 0) //{ var NEWKO = item.CodiceConto.Replace("\"", ""); //se importo in dare valorizzato sb.Append(NEWKO.PadRight(17)); //} //else if (Convert.ToDecimal(item.ImportoAvere.Replace(",", ".")) > 0) //{ // var NEWKO = item.CodiceContropartita.Replace("\"", ""); //se importo in avere valorizzato // sb.Append(NEWKO.PadRight(17)); //} var NEWBW = "/"; sb.Append(NEWBW.PadRight(3)); var KNRZE = "/"; sb.Append(KNRZE.PadRight(17)); var HKONT = "/"; sb.Append(HKONT.PadRight(10)); if (item.CodiceConto.Replace("\"","").StartsWith("C")) { var PRCTR = item.CodiceDatoRipartizione2.Replace("\"", ""); sb.Append(PRCTR.PadRight(10)); } else { var PRCTR = "/"; sb.Append(PRCTR.PadRight(10)); } var VERTN = "/"; sb.Append(VERTN.PadRight(13)); var VERTT = "/"; sb.Append(VERTT.PadRight(1)); var VBEWA = "/"; sb.Append(VBEWA.PadRight(4)); var HWBAS = "/"; sb.Append(HWBAS.PadRight(16)); var FWBAS = "/"; sb.Append(FWBAS.PadRight(16)); var FIPOS = "/"; sb.Append(FIPOS.PadRight(14)); var VNAME = "/"; sb.Append(VNAME.PadRight(6)); var EGRUP = "/"; sb.Append(EGRUP.PadRight(3)); var BTYPE = "/"; sb.Append(BTYPE.PadRight(2)); var PAOBJNR = "/"; sb.Append(PAOBJNR.PadRight(10)); var KSTRG = "/"; sb.Append(KSTRG.PadRight(12)); var IMKEY = "/"; sb.Append(IMKEY.PadRight(8)); var DUMMY3 = "/"; sb.Append(DUMMY3.PadRight(8)); var VPTNR = "/"; sb.Append(VPTNR.PadRight(10)); var NPLNR = "/"; sb.Append(NPLNR.PadRight(12)); var VORNR = "/"; sb.Append(VORNR.PadRight(4)); var XEGDR = "/"; sb.Append(XEGDR.PadRight(1)); var RECID = "/"; sb.Append(RECID.PadRight(2)); var PPRCT = "/"; sb.Append(PPRCT.PadRight(10)); //if (true) //{ //} //else //{ var PROJK = "/";//prenderà un valore sb.Append(PROJK.PadRight(24)); //} var UZAWE = "/"; sb.Append(UZAWE.PadRight(2)); var TXJCD = "/"; sb.Append(TXJCD.PadRight(15)); var FISTL = "/"; sb.Append(FISTL.PadRight(16)); var GEBER = "/"; sb.Append(GEBER.PadRight(10)); var DMBE2 = "/"; sb.Append(DMBE2.PadRight(16)); var DMBE3 = "/"; sb.Append(DMBE3.PadRight(16)); var PARGB = "/"; sb.Append(PARGB.PadRight(4)); var XREF1 = "/"; sb.Append(XREF1.PadRight(12)); var XREF2 = "/"; sb.Append(XREF2.PadRight(12)); var KBLNR = "/"; sb.Append(KBLNR.PadRight(10)); var KBLPOS = "/"; sb.Append(KBLPOS.PadRight(3)); var WDATE = "/"; sb.Append(WDATE.PadRight(8)); var WGBKZ = "/"; sb.Append(WGBKZ.PadRight(1)); var XAKTZ = "/"; sb.Append(XAKTZ.PadRight(1)); var WNAME = "/"; sb.Append(WNAME.PadRight(30)); var WORT1 = "/"; sb.Append(WORT1.PadRight(30)); var WBZOG = "/"; sb.Append(WBZOG.PadRight(30)); var WORT2 = "/"; sb.Append(WORT2.PadRight(30)); var WBANK = "/"; sb.Append(WBANK.PadRight(60)); var WLZBP = "/"; sb.Append(WLZBP.PadRight(60)); var DISKP = "/"; sb.Append(DISKP.PadRight(8)); var DISKT = "/"; sb.Append(DISKT.PadRight(3)); var WINFW = "/"; sb.Append(WINFW.PadRight(16)); var WINHW = "/"; sb.Append(WINHW.PadRight(16)); var WEVWV = "/"; sb.Append(WEVWV.PadRight(1)); var WSTAT = "/"; sb.Append(WSTAT.PadRight(1)); var WMWKZ = "/"; sb.Append(WMWKZ.PadRight(2)); var WSTKZ = "/"; sb.Append(WSTKZ.PadRight(1)); var RKE_ARTNR = "/"; sb.Append(RKE_ARTNR.PadRight(18)); var RKE_BONUS = "/"; sb.Append(RKE_BONUS.PadRight(2)); var RKE_BRSCH = "/"; sb.Append(RKE_BRSCH.PadRight(4)); var RKE_BUKRS = "/"; sb.Append(RKE_BUKRS.PadRight(4)); var RKE_BZIRK = "/"; sb.Append(RKE_BZIRK.PadRight(6)); var RKE_EFORM = "/"; sb.Append(RKE_EFORM.PadRight(5)); var RKE_FKART = "/"; sb.Append(RKE_FKART.PadRight(4)); var RKE_GEBIE = "/"; sb.Append(RKE_GEBIE.PadRight(4)); var RKE_GSBER = "/"; sb.Append(RKE_GSBER.PadRight(4)); var RKE_KAUFN = "/"; sb.Append(RKE_KAUFN.PadRight(10)); var RKE_KDGRP = "/"; sb.Append(RKE_KDGRP.PadRight(2)); var RKE_KDPOS = "/"; sb.Append(RKE_KDPOS.PadRight(6)); var RKE_KNDNR = "/"; sb.Append(RKE_KNDNR.PadRight(10)); var RKE_KOKRS = "/"; sb.Append(RKE_KOKRS.PadRight(4)); var RKE_KSTRG = "/"; sb.Append(RKE_KSTRG.PadRight(12)); var RKE_LAND1 = "/"; sb.Append(RKE_LAND1.PadRight(3)); var RKE_MAABC = "/"; sb.Append(RKE_MAABC.PadRight(1)); var RKE_MATKL = "/"; sb.Append(RKE_MATKL.PadRight(9)); var RKE_PRCTR = "/"; sb.Append(RKE_PRCTR.PadRight(10)); var RKE_PSPNR = "/"; sb.Append(RKE_PSPNR.PadRight(24)); var RKE_RKAUFNR = "/"; sb.Append(RKE_RKAUFNR.PadRight(12)); var RKE_SPART = "/"; sb.Append(RKE_SPART.PadRight(2)); var RKE_VKBUR = "/"; sb.Append(RKE_VKBUR.PadRight(4)); var RKE_VKGRP = "/"; sb.Append(RKE_VKGRP.PadRight(3)); var RKE_VKORG = "/"; sb.Append(RKE_VKORG.PadRight(4)); var RKE_VTWEG = "/"; sb.Append(RKE_VTWEG.PadRight(2)); var RKE_WERKS = "/"; sb.Append(RKE_WERKS.PadRight(4)); var RKE_KMBRND = "/"; sb.Append(RKE_KMBRND.PadRight(2)); var RKE_KMCATG = "/"; sb.Append(RKE_KMCATG.PadRight(2)); var RKE_KMHI01 = "/"; sb.Append(RKE_KMHI01.PadRight(10)); var RKE_KMHI02 = "/"; sb.Append(RKE_KMHI02.PadRight(10)); var RKE_KMHI03 = "/"; sb.Append(RKE_KMHI03.PadRight(10)); var RKE_KMKDGR = "/"; sb.Append(RKE_KMKDGR.PadRight(2)); var RKE_KMLAND = "/"; sb.Append(RKE_KMLAND.PadRight(3)); var RKE_KMMAKL = "/"; sb.Append(RKE_KMMAKL.PadRight(9)); var RKE_KMNIEL = "/"; sb.Append(RKE_KMNIEL.PadRight(2)); var RKE_KMSTGE = "/"; sb.Append(RKE_KMSTGE.PadRight(2)); var RKE_KMVKBU = "/"; sb.Append(RKE_KMVKBU.PadRight(4)); var RKE_KMVKGR = "/"; sb.Append(RKE_KMVKGR.PadRight(3)); var RKE_KMVTNR = "/"; sb.Append(RKE_KMVTNR.PadRight(8)); var RKE_PPRCTR = "/"; sb.Append(RKE_PPRCTR.PadRight(10)); var VBUND = "/"; sb.Append(VBUND.PadRight(6)); var FKBER = "/"; sb.Append(FKBER.PadRight(4)); var DABRZ = "/"; sb.Append(DABRZ.PadRight(8)); var XSTBA = "/"; sb.Append(XSTBA.PadRight(1)); var RSTGR = "/"; sb.Append(RSTGR.PadRight(3)); var FIPEX = "/"; sb.Append(FIPEX.PadRight(24)); var XNEGP = "/"; sb.Append(XNEGP.PadRight(1)); var GRICD = "/"; sb.Append(GRICD.PadRight(2)); var GRIRG = "/"; sb.Append(GRIRG.PadRight(3)); var GITYP = "/"; sb.Append(GITYP.PadRight(2)); var FITYP = "/"; sb.Append(FITYP.PadRight(2)); var STCDT = "/"; sb.Append(STCDT.PadRight(2)); var STKZN = "/"; sb.Append(STKZN.PadRight(1)); var STCD3 = "/"; sb.Append(STCD3.PadRight(18)); var STCD4 = "/"; sb.Append(STCD4.PadRight(18)); var XREF3 = "/"; sb.Append(XREF3.PadRight(20)); var KIDNO = "/"; sb.Append(KIDNO.PadRight(30)); var DTWS1 = "/"; sb.Append(DTWS1.PadRight(2)); var DTWS2 = "/"; sb.Append(DTWS2.PadRight(2)); var DTWS3 = "/"; sb.Append(DTWS3.PadRight(2)); var DTWS4 = "/"; sb.Append(DTWS4.PadRight(2)); var DTAWS = "/"; sb.Append(DTAWS.PadRight(2)); var PYCUR = "/"; sb.Append(PYCUR.PadRight(5)); var PYAMT = "/"; sb.Append(PYAMT.PadRight(16)); var BUPLA = "/"; sb.Append(BUPLA.PadRight(4)); var SECCO = "/"; sb.Append(SECCO.PadRight(4)); var LSTAR = "/"; sb.Append(LSTAR.PadRight(6)); var EGDEB = "/"; sb.Append(EGDEB.PadRight(10)); var WENR = "/"; sb.Append(WENR.PadRight(8)); var GENR = "/"; sb.Append(GENR.PadRight(8)); var GRNR = "/"; sb.Append(GRNR.PadRight(8)); var MENR = "/"; sb.Append(MENR.PadRight(8)); var MIVE = "/"; sb.Append(MIVE.PadRight(13)); var NKSL = "/"; sb.Append(NKSL.PadRight(4)); var EMPSL = "/"; sb.Append(EMPSL.PadRight(5)); var SVWNR = "/"; sb.Append(SVWNR.PadRight(13)); var SBERI = "/"; sb.Append(SBERI.PadRight(10)); var KKBER = "/"; sb.Append(KKBER.PadRight(4)); var EMPFB = "/"; sb.Append(EMPFB.PadRight(10)); var KURSR_M = "/"; sb.Append(KURSR_M.PadRight(10)); var J_1KFREPRE = "/"; sb.Append(J_1KFREPRE.PadRight(10)); var J_1KFTBUS = "/"; sb.Append(J_1KFTBUS.PadRight(30)); var J_1KFTIND = "/"; sb.Append(J_1KFTIND.PadRight(30)); var IDXSP = "/"; sb.Append(IDXSP.PadRight(5)); var ANRED = "/"; sb.Append(ANRED.PadRight(15)); var RECNNR = "/"; sb.Append(RECNNR.PadRight(13)); var E_MIVE = "/"; sb.Append(E_MIVE.PadRight(13)); var BKREF = "/"; sb.Append(BKREF.PadRight(20)); var DTAMS = "/"; sb.Append(DTAMS.PadRight(1)); var CESSION_KZ = "/"; sb.Append(CESSION_KZ.PadRight(2)); var GRANT_NBR = "/"; sb.Append(GRANT_NBR.PadRight(20)); var FKBER_LONG = "/"; sb.Append(FKBER_LONG.PadRight(16)); var ERLKZ = "/"; sb.Append(ERLKZ.PadRight(1)); var IBAN = "/"; sb.Append(IBAN.PadRight(34)); var VALID_FROM = "/"; sb.Append(VALID_FROM.PadRight(8)); var SEGMENT = "/"; sb.Append(SEGMENT.PadRight(10)); var PSEGMENT = "/"; sb.Append(PSEGMENT.PadRight(10)); var HKTID = "/"; sb.Append(HKTID.PadRight(5)); var XSIWE = "/"; sb.Append(XSIWE.PadRight(1)); var TCNO = "/"; sb.Append(TCNO.PadRight(16)); var DATEOFSERVICE = "/"; sb.Append(DATEOFSERVICE.PadRight(8)); var NOTAXCORR = "/"; sb.Append(NOTAXCORR.PadRight(1)); var DIFFOPTRATE = "/"; sb.Append(DIFFOPTRATE.PadRight(10)); var HASDIFFOPTRATE = "/"; sb.Append(HASDIFFOPTRATE.PadRight(1)); var AVGACT_G = "/"; sb.Append(AVGACT_G.PadRight(26)); var AVGACT_L = "/"; sb.Append(AVGACT_L.PadRight(26)); var AVGACT_T = "/"; sb.Append(AVGACT_T.PadRight(26)); //var stringa = ""; //da ricontrollare //sb.Append(AVGACT_T.PadRight(26)); var AVG_ACT_G_CURR = "/"; sb.Append(AVG_ACT_G_CURR.PadRight(5)); var AVG_ACT_L_CURR = "/"; sb.Append(AVG_ACT_L_CURR.PadRight(5)); var AVG_ACT_T_CURR = "/"; sb.Append(AVG_ACT_T_CURR.PadRight(5)); var BOENO = "/"; sb.Append(BOENO.PadRight(10)); var MNDID = "/"; sb.Append(MNDID.PadRight(35)); var SENDE = "/"; sb.Append(SENDE.PadRight(1)); sb.Append(Environment.NewLine); return sb.ToString(); } #endregion #region EVENTI private void btnConvertiTxt_Click(object sender, EventArgs e) { try { if (/*txtCodAzi.Text.Length == 4 &&*/ !string.IsNullOrEmpty(txtCodAzi.Text)) { var list = CreaOggettiPerConversioni(); CostruisciFileTXT(list); } //else if (txtCodAzi.Text.Length != 4 && !string.IsNullOrEmpty(txtCodAzi.Text)) //{ // var str = MessageBox.Show($"Il codice azienda deve essere lungo quattro ", // "CODICE AZIENDA ERRATO", // MessageBoxButtons.OK, MessageBoxIcon.Error); // txtCodAzi.BackColor = Color.FromArgb(255, 102, 102); //} else { var str = MessageBox.Show($"Inserire il codice azienda prima di poter generare il file TXT ", "CODICE AZIENDA MANCANTE", MessageBoxButtons.OK, MessageBoxIcon.Error); txtCodAzi.BackColor = Color.FromArgb(255, 102, 102); } } catch (Exception ex) { //txtArea.Text = ex.Message; var str = MessageBox.Show($"{ex.Message}", "File CSV non specificato", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void btnCercaFile_Click(object sender, EventArgs e) { try { CercaNeiFile(); } catch (Exception ex) { txtArea.Text = ex.Message; } } private void txtCodAzi_Leave(object sender, EventArgs e) { if (txtCodAzi.BackColor == Color.FromArgb(255, 102, 102)) { if (!string.IsNullOrEmpty(txtCodAzi.Text)) { txtCodAzi.BackColor = Color.FromArgb(255, 255, 255); } } } #endregion } #region CLASSI //classe con i campi del file csv che leggo public class CSVFileObject { public string CodiceAzienda; public string Denominazione; public string DalMese; public string TipoCedolinoDal; public string AlMese; public string TipoCedolinoAl; public string RegimeContabile; public string ProgressivoRipartizione; public string DescrizioneProgressivoRipartizione; public string ContabilitaDestinazione; public string DescrizioneContabilitaDestinazione; public string CodiceConto; public string DescrizioneConto; public string CodiceDipendente; public string Cognome; public string Nome; public string NumeroRegistrazione; public string TipoCausale; public string DescrizioneTipoCausale; public string Causale; public string DescrizioneCausale; public string TipoElemento; public string DescrizioneTipoElemento; public string CodiceContropartita; public string DescrizioneContropartita; public string ImportoDare; public string ImportoAvere; public string CodiceTipoDatoRipartizione1; public string CodiceDatoRipartizione1; public string CodificaDellaRipartizione1; public string CodiceTipoDatoRipartizione2; public string CodiceDatoRipartizione2; public string CodificaDellaRipartizione2; public string CodiceTipoDatoRipartizione3; public string CodiceDatoRipartizione3; public string CodificaDellaRipartizione3; //public int CodificaDellaRipartizione3; public string CodiceTipoDatoRipartizione4; public string CodiceDatoRipartizione4; public string CodificaDellaRipartizione4; public string CodiceTipoDatoRipartizione5; public string CodiceDatoRipartizione5; public string CodificaDellaRipartizione5; public string CodiceTipoDatoRipartizione6; public string CodiceDatoRipartizione6; public string CodificaDellaRipartizione6; public string CodiceTipoDatoRipartizione7; public string CodiceDatoRipartizione7; public string CodificaDellaRipartizione7; public string CodiceTipoDatoRipartizione8; public string CodiceDatoRipartizione8; public string CodificaDellaRipartizione8; //aggiungo una propery per gestire la colonna CodiceDatoRipartizione4 perchè mi serve averla come intero per poter ordinare la lista. //nel try - catch che c'è sotto imporrò che se non è valorizzato il campo prenderà 0. questo avverà solo in fase di test perchè il centro di costo //nel file di input dovrà esserci sempre. questo perchè senò potrebbe sputtanarsi il calcolo del dare/avere che deve essere 0 public int IntCodiceDatoRipartizione4; public int intCodificaDellaRipartizione3; //public decimal IntCodiceDatoRipartizione4; //public decimal intCodificaDellaRipartizione3; public decimal DoubleImportoDare; public decimal DoubleImportoAvere; public DateTime DateDalMese; public static CSVFileObject FromCsvGigante(string csvLine) { CSVFileObject valore = new CSVFileObject(); string[] val = csvLine.Split(';'); valore.CodiceAzienda = Convert.ToString(val[0]); valore.Denominazione = Convert.ToString(val[1]); valore.DalMese = Convert.ToString(val[2]); valore.TipoCedolinoDal = Convert.ToString(val[3]); valore.AlMese = Convert.ToString(val[4]); valore.TipoCedolinoAl = Convert.ToString(val[5]); valore.RegimeContabile = Convert.ToString(val[6]); valore.ProgressivoRipartizione = Convert.ToString(val[7]); valore.DescrizioneProgressivoRipartizione = Convert.ToString(val[8]); valore.ContabilitaDestinazione = Convert.ToString(val[9]); valore.DescrizioneContabilitaDestinazione = Convert.ToString(val[10]); valore.CodiceConto = Convert.ToString(val[11]); valore.DescrizioneConto = Convert.ToString(val[12]); valore.CodiceDipendente = Convert.ToString(val[13]); valore.Cognome = Convert.ToString(val[14]); valore.Nome = Convert.ToString(val[15]); valore.NumeroRegistrazione = Convert.ToString(val[16]); valore.TipoCausale = Convert.ToString(val[17]); valore.DescrizioneTipoCausale = Convert.ToString(val[18]); valore.Causale = Convert.ToString(val[19]); valore.DescrizioneCausale = Convert.ToString(val[20]); valore.TipoElemento = Convert.ToString(val[21]); valore.DescrizioneTipoElemento = Convert.ToString(val[22]); valore.CodiceContropartita = Convert.ToString(val[23]); valore.DescrizioneContropartita = Convert.ToString(val[24]); valore.ImportoDare = Convert.ToString(val[25]); valore.ImportoAvere = Convert.ToString(val[26]); valore.CodiceTipoDatoRipartizione1 = Convert.ToString(val[27]); valore.CodiceDatoRipartizione1 = Convert.ToString(val[28]); valore.CodificaDellaRipartizione1 = Convert.ToString(val[29]); valore.CodiceTipoDatoRipartizione2 = Convert.ToString(val[30]); valore.CodiceDatoRipartizione2 = Convert.ToString(val[31]); valore.CodificaDellaRipartizione2 = Convert.ToString(val[32]); valore.CodiceTipoDatoRipartizione3 = Convert.ToString(val[33]); valore.CodiceDatoRipartizione3 = Convert.ToString(val[34]); valore.CodificaDellaRipartizione3 = Convert.ToString(val[35]); valore.CodiceTipoDatoRipartizione4 = Convert.ToString(val[36]); valore.CodiceDatoRipartizione4 = Convert.ToString(val[37]); valore.CodificaDellaRipartizione4 = Convert.ToString(val[38]); valore.CodiceTipoDatoRipartizione5 = Convert.ToString(val[39]); valore.CodiceDatoRipartizione5 = Convert.ToString(val[40]); valore.CodificaDellaRipartizione5 = Convert.ToString(val[41]); valore.CodiceTipoDatoRipartizione6 = Convert.ToString(val[42]); valore.CodiceDatoRipartizione6 = Convert.ToString(val[43]); valore.CodificaDellaRipartizione6 = Convert.ToString(val[44]); valore.CodiceTipoDatoRipartizione7 = Convert.ToString(val[45]); valore.CodiceDatoRipartizione7 = Convert.ToString(val[46]); valore.CodificaDellaRipartizione7 = Convert.ToString(val[47]); valore.CodiceTipoDatoRipartizione8 = Convert.ToString(val[48]); valore.CodiceDatoRipartizione8 = Convert.ToString(val[49]); valore.CodificaDellaRipartizione8 = Convert.ToString(val[50]); try { valore.IntCodiceDatoRipartizione4 = Convert.ToInt32(val[37]); valore.intCodificaDellaRipartizione3 = Convert.ToInt32(val[35]); } catch (Exception) { valore.IntCodiceDatoRipartizione4 = 0; valore.intCodificaDellaRipartizione3 = 0; } //convertiti in decimal perchè con il double faceva casino con gli arrotondamenti //e non funzionava il controllo della differenza dare/avere valore.DoubleImportoDare = Convert.ToDecimal/*ToDouble*/(val[25]); valore.DoubleImportoAvere = Convert.ToDecimal/*ToDouble*/(val[26]); //valori.intCodificaDellaRipartizione3 = Convert.ToDecimal(val[35]); valore.DateDalMese = Convert.ToDateTime(val[2]); return valore; } } //classe per il file csv bil_sal_dtc_ott21 public class ValoriCSV { public string codiceAzienda; public string denominazione; public string dalMese; public string dalTipoCedolino; public string alMese; public string alTipoCedolino; public string regimeContabile; public string progressivoRipartizione; public string descrizioneProgressivoRipartizione; public string contabilitaDiDestinazione; public string descrizioneContabilitaDestinazione; public string modalitaDiStampa; public string codiceConto; public string descrizioneConto; public string importoDare; public string importoAvere; public string importoSaldo; public static ValoriCSV FromCsv(string csvLine) { string[] val = csvLine.Split(';'); ValoriCSV valoreCSV = new ValoriCSV(); valoreCSV.codiceAzienda = Convert.ToString(val[0]); valoreCSV.denominazione = Convert.ToString(val[1]); valoreCSV.dalMese = Convert.ToString(val[2]); valoreCSV.dalTipoCedolino = Convert.ToString(val[3]); valoreCSV.alMese = Convert.ToString(val[4]); valoreCSV.alTipoCedolino = Convert.ToString(val[5]); valoreCSV.regimeContabile = Convert.ToString(val[6]); valoreCSV.progressivoRipartizione = Convert.ToString(val[7]); valoreCSV.descrizioneProgressivoRipartizione = Convert.ToString(val[8]); valoreCSV.contabilitaDiDestinazione = Convert.ToString(val[9]); valoreCSV.descrizioneContabilitaDestinazione = Convert.ToString(val[10]); valoreCSV.modalitaDiStampa = Convert.ToString(val[11]); valoreCSV.codiceConto = Convert.ToString(val[12]); valoreCSV.descrizioneConto = Convert.ToString(val[13]); valoreCSV.importoDare = Convert.ToString(val[14]); valoreCSV.importoAvere = Convert.ToString(val[15]); valoreCSV.importoSaldo = Convert.ToString(val[16]); return valoreCSV; } } public class Appoggio { public string codice { get; set; } //public int codice { get; set; } public int numFileXml { get; set; } } #endregion }