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);
                }
            }
        }