private void CommitTransferToLocalList(Entities db, Transfer t, BankStatement statement) { tbl_Cashflow c = CreateCashflow(db, t, statement.ДатаДок); statement.Cashflows.Add(c); }
List<BankStatement> ParseXmlFileBs(string filename) { List<BankStatement> statements = new List<BankStatement>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(filename); XmlNode bankNode = xmlDoc.SelectSingleNode("Bank"); foreach (XmlNode statementNode in bankNode) { BankStatement bs = new BankStatement(); bs.ДатаДок = statementNode.Attributes["ДатаДок"].Value; bs.НомерДок = statementNode.Attributes["НомерДок"].Value; bs.Валюта = statementNode.Attributes["Валюта"].Value; Console.WriteLine("{0} {1} {2}", bs.ДатаДок, bs.НомерДок, bs.Валюта); List<Transfer> transfers = new List<Transfer>(); foreach (XmlNode transferNode in statementNode.ChildNodes) { Transfer t = new Transfer(); t.UID1C = bs.НомерДок + "#" + transferNode.Attributes["Num"].Value; t.ДатаДок = bs.ДатаДок; //t.КоррСчёт = ; t.НазначениеПлатежа = transferNode.Attributes["НазначениеПлатежа"].Value; t.Субконто1 = new Subconto { Код = transferNode.Attributes["КонтрагентИНН"].Value, Наименование = transferNode.Attributes["КонтрагентНаименование"].Value, ТипСубконто = SubcontoType.Контрагент }; t.Субконто2 = new Subconto { Код = transferNode.Attributes["ДоговорКод"].Value, Наименование = transferNode.Attributes["ДоговорНаименование"].Value, ТипСубконто = SubcontoType.Договор }; t.Субконто3 = new Subconto { Код = "", Наименование = "", ТипСубконто = SubcontoType.Неопределено }; t.Приход = Double.Parse(transferNode.Attributes["Приход"].Value.Replace(".", ",")); t.Расход = Double.Parse(transferNode.Attributes["Расход"].Value.Replace(".", ",")); t.Валюта = bs.Валюта; t.ВидДвижения = new CashflowClause { Код = transferNode.Attributes["ВидДвиженияКод"].Value, Наименование = transferNode.Attributes["ВидДвиженияНаименование"].Value, РазрезДеятельности = "", ВидДвижения = "", RowNum = transferNode.Attributes["ВидДвиженияКод"].Value }; t.Company = this.company; t.НомерДокВходящий = transferNode.Attributes["НомерДокВходящий"].Value; bool IsIncome = t.Приход > t.Расход; //if (t.Валюта == "BYR") //{ // t.Курс = 1; //} //else { t.Курс = Double.Parse(transferNode.Attributes["КурсОплаты"].Value.Replace(".", ",")); } bs.Transfers.Add(t); } statements.Add(bs); } return statements; }
public void LoadFromDbf(string filename) { Helper.Log("Старт"); OdbcConnection conn = new OdbcConnection(); conn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=" + filename + ";Exclusive=No; NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;"; conn.Open(); if (conn.State == System.Data.ConnectionState.Open) { OdbcCommand oCmd = conn.CreateCommand(); oCmd.CommandText = "SELECT * FROM " + filename; DataTable ImportedTable = new DataTable(); ImportedTable.Load(oCmd.ExecuteReader()); ImportedRows.AddRange(ImportedTable.Select()); DataRow[] statementRows = ImportedTable.Select("REKVTYPE = 'Документ.Выписка' AND REKVIZIT <> 'Субконто3'"); for (int i = 0; i < statementRows.Length; i++) { DataRow row = statementRows[i]; double StatementStartRowIndex = (double)row[0]; double StatementEndRowIndex = GetStatementEndIndex(StatementStartRowIndex); BankStatement bs = new BankStatement(); bs.GUID = (double)row[0]; try { // ШАПКА double BaseGUID = bs.GUID - 1; bs.Наименование = row["REKVIZIT"].ToString(); Helper.Log(bs.Наименование); DataRow rowID = ImportedRows[(int)(BaseGUID + 2)]; bs.НомерДок = rowID[5].ToString(); DataRow rowDate = ImportedRows[(int)(BaseGUID + 3)]; bs.ДатаДок = rowDate[5].ToString(); // ТАБЛИЧНАЯ ЧАСТЬ List<Transfer> transfers = new List<Transfer>(); List<DataRow> TransferRows = new List<DataRow>(); string cond = "PARENTGUID = " + bs.GUID + " AND REKVIZIT = 'ВидДвижения'" + " AND REKVTYPE = 'Справочник.ДвиженияДенежныхСредств'"; TransferRows.AddRange(ImportedTable.Select(cond)); Console.WriteLine(bs.ДатаДок); string Currency = GetStatementCurrency(StatementStartRowIndex, StatementEndRowIndex); for (int j = 0; j < TransferRows.Count; j++) { DataRow transferBaseRow = TransferRows[j]; double TransferStartRowIndex = (double)transferBaseRow[0]; double TransferEndRowIndex = GetTransferEndIndex(TransferStartRowIndex); int transferBaseGUID = (int)(double)transferBaseRow[0] - 1; try { Transfer t = new Transfer(); t.КоррСчёт = ImportedRows[transferBaseGUID + 2][5].ToString(); t.НазначениеПлатежа = ImportedRows[transferBaseGUID + 1][5].ToString(); t.Субконто1 = GetSubconto(1, transferBaseGUID); t.Субконто2 = GetSubconto(2, transferBaseGUID); t.Субконто3 = GetSubconto(3, transferBaseGUID); t.Приход = GetTransferAttributeDouble("Приход", transferBaseGUID); t.Расход = GetTransferAttributeDouble("Расход", transferBaseGUID); t.Валюта = Currency; t.ВидДвижения = GetTransferCashflowAccount(transferBaseGUID); t.Company = this.company; t.НомерДокВходящий = GetTransferAttribute("НомерДокВходящий", transferBaseGUID); if (bs.Наименование.Contains('т') && bs.Наименование.Contains('д')) { } bool IsIncome = t.Приход > t.Расход; if (t.Валюта == "BYR") { t.Курс = 1; } else { t.Курс = GetTransferRate(IsIncome, StatementStartRowIndex, StatementEndRowIndex, TransferStartRowIndex, TransferEndRowIndex); } bs.Transfers.Add(t); } catch (Exception e) { Helper.Log("ID=" + transferBaseGUID.ToString() + ": " + e.Message); } } statements.Add(bs); Helper.Log("Платежей в выписке: " + bs.Transfers.Count); } catch (Exception e) { Helper.Log(e.Message); } } conn.Close(); Helper.Log("Импорт из DBF завершен."); if (this.DEBUG) { Console.WriteLine("Found statements: {0}\n", this.statements.Count); } } }