public void Обработать() { FixedFileEngine engine = new FixedFileEngine(typeof(InvoiceImport)); InvoiceImport data = (InvoiceImport)engine.ReadString(Буфер)[0]; IObjectSpace os = CommonMethods.FindObjectSpaceByObject(this); fmCAVTInvoiceType sf_sfz_type = os.GetObjects <fmCAVTInvoiceType>().First(x => x.Prefix == "Z"); СтрокаОснов.ProcessLine(os, this, data, sf_sfz_type); }
static public void ImportLine(IObjectSpace os, СтрокаОснов строка, InvoiceImport invoice) { // OpenFileDialog dialog = new OpenFileDialog(); // if (dialog.ShowDialog() == DialogResult.OK) { // FixedFileEngine engine = new FixedFileEngine(typeof(InvoiceImport)); // InvoiceImport[] imp_res = (InvoiceImport[])engine.ReadFile(file_name); // IList<fmCAVTInvoiceType> inv_types = os.GetObjects<fmCAVTInvoiceType>(); // IList<fmCAVTInvoiceTransferType> inv_transfer_types = os.GetObjects<fmCAVTInvoiceTransferType>(); // IList<fmCAVTInvoiceOperationType> inv_oper_types = os.GetObjects<fmCAVTInvoiceOperationType>(); // Int32 count = 0; // // foreach (InvoiceImport imp_rec in imp_res) { invoice.SF_VO_CODE = invoice.SF_VO_CODE.Trim(); invoice.SF_INT_NUMBER = invoice.SF_INT_NUMBER.Trim(); invoice.SF_NUMBER = invoice.SF_NUMBER.Trim(); // crmCParty party = // Основание.ТипИсточника ts; if (invoice.SF_IO_TYPE == "I") { строка.ТипИсточника = Основание.ТипИсточника.ВХОДЯЩИЙ; } else if (invoice.SF_IO_TYPE == "O") { строка.ТипИсточника = Основание.ТипИсточника.ИСХОДЯЩИЙ; } else { // continue; throw new ArgumentOutOfRangeException("SF " + invoice.SF_NUMBER + " неопределен тип входящий/исходящий"); } строка.егНомер = invoice.SF_REGNUM.Trim(); строка.Номер = invoice.SF_NUMBER.Trim(); DateTime date = default(DateTime); DateTime.TryParseExact(invoice.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date); строка.Дата = date; // Основание.ТипОснования tsf; строка.ТипОснования = Основание.String2ТипОснования(invoice.SF_TYPE.Trim()); if (строка.ТипОснования == Основание.ТипОснования.Неопределен) { System.Console.WriteLine("SF: " + invoice.SF_NUMBER + " странный тип (" + invoice.SF_TYPE + ")"); } // String inn = ""; // String kpp = ""; строка.Контрагент = os.GetObjects <crmCParty>(new BinaryOperator("Code", invoice.SF_VO_CODE)).FirstOrDefault(); if (строка.Контрагент == null) { System.Console.WriteLine("SF " + invoice.SF_NUMBER + " party not found (" + invoice.SF_VO_CODE + ")"); return; //continue; } // ЛицоТип party_type = ЛицоТип.НЕЗАДАН; // // String sale_inn = "5012039795"; }
static public void ImportInvoices(IObjectSpace os, ДокИмпортОснований док, TextReader reader) { FixedFileEngine engine = new FixedFileEngine(typeof(InvoiceImport)); String line; os.Delete(док.Основания); fmCAVTInvoiceType sf_sfz_type = os.GetObjects <fmCAVTInvoiceType>().First(x => x.Prefix == "Z"); while ((line = reader.ReadLine()) != null) { InvoiceImport data = (InvoiceImport)engine.ReadString(line)[0]; if (data.SF_IO_TYPE.Trim() == String.Empty) { continue; } СтрокаОснов строка = os.CreateObject <СтрокаОснов>(); док.Основания.Add(строка); строка.БуферУст(line); СтрокаОснов.ImportLine(os, строка, data); СтрокаОснов.ProcessLine(os, строка, data, sf_sfz_type); } reader.Close(); }
/// <summary> /// /// </summary> /// <param name="os"></param> /// <param name="строка"></param> /// <param name="invoice"></param> /// <param name="sf_sfz_type"></param> static public void ProcessLine(IObjectSpace os, СтрокаОснов строка, InvoiceImport invoice, fmCAVTInvoiceType sf_sfz_type) { // !!!!!!!!!!!!!!!!!!!!!!!!!! // Выбраковываем СФ if (строка.ТипОснования == Основание.ТипОснования.Неопределен || строка.ТипЛица == ЛицоТип.НЕЗАДАН || String.IsNullOrEmpty(строка.ИННПродавца) || String.IsNullOrEmpty(строка.егНомер) && строка.ТипОснования != Основание.ТипОснования.СФЗ || String.IsNullOrEmpty(строка.Номер) || строка.Дата < new DateTime(2000, 1, 1) || строка.ТипЛица == ЛицоТип.ЮР_ЛИЦО && (строка.ИНН.Length != 10 || !Regex.IsMatch(строка.ИНН, _ИНН_ЮЛ_Рег) || строка.КПП.Length != 9 || !Regex.IsMatch(строка.КПП, _КПП_Рек)) || строка.ТипЛица == ЛицоТип.ПРЕДПРИНИМАТЕЛЬ && (строка.ИНН.Length != 12 || !Regex.IsMatch(строка.ИНН, _ИНН_ФЛ_Рег)) ) { return; } // !!!!!!!!!!!!!!!!!!!!!!!!!! Основание sf = os.FindObject <Основание>( new BinaryOperator("ИннПродавца", строка.ИННПродавца) & new BinaryOperator("Номер", строка.Номер) & new BinaryOperator("Дата", строка.Дата, BinaryOperatorType.GreaterOrEqual) & new BinaryOperator("Дата", строка.Дата.AddDays(1), BinaryOperatorType.Less)); if (sf == null) { sf = os.CreateObject <Основание>(); sf.Источник = строка.ТипИсточника; sf.Налогоплательщик = строка.ИмпортОснований.Налогоплательщик; sf.Подразделение = строка.ИмпортОснований.Подразделение; sf.ИНН = строка.ИНН; sf.Номер = строка.Номер; sf.Дата = строка.Дата; sf.КПП = строка.КПП; } строка.Основание = sf; ////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //// Временно для обновления имеющихся оснований //sf.Налогоплательщик = строка.ИмпортОснований.Налогоплательщик; //sf.Подразделение = строка.ИмпортОснований.Подразделение; ////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! sf.Корректировка = Основание.ТипПодчиненности.ОСНОВНОЙ; // sf.Источник = ts; sf.Тип = строка.ТипОснования; sf.ЛицоТип = строка.ТипЛица; ОснованиеДокумент sfdoc = null; String sfdoc_sver = invoice.SF_PRAV_NUMBER.Trim(); if (String.IsNullOrEmpty(sfdoc_sver)) { sfdoc_sver = "0"; } UInt16 sfdoc_ver = 0; UInt16.TryParse(sfdoc_sver, out sfdoc_ver); DateTime sfdoc_date = default(DateTime); DateTime.TryParseExact(invoice.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out sfdoc_date); Decimal summ_cost = Decimal.Parse(invoice.SUMM_COST.Trim().Replace('.', ',')); Decimal summ_nds = Decimal.Parse(invoice.SUMM_NDS.Trim().Replace('.', ',')); Decimal summ_sub_cost = Decimal.Parse(invoice.SUMM_SUB_COST.Trim().Replace('.', ',')); Decimal summ_sub_nds = Decimal.Parse(invoice.SUMM_SUB_NDS.Trim().Replace('.', ',')); if (sf.Источник == Основание.ТипИсточника.ИСХОДЯЩИЙ && sf.Тип != Основание.ТипОснования.Неопределен && sf.Тип != Основание.ТипОснования.СЧГ && sf.Тип != Основание.ТипОснования.БЖД && sf.Тип != Основание.ТипОснования.СФЗ) { if (строка.СчетФактура != null) { if (sfdoc_sver == "0" && !String.IsNullOrEmpty(строка.СчетФактура.Current.VersionNumber)) { sfdoc_sver = строка.СчетФактура.Current.VersionNumber; UInt16.TryParse(sfdoc_sver, out sfdoc_ver); sfdoc_date = строка.СчетФактура.Current.VersionDate; } if (summ_cost == 0 && summ_nds == 0 && summ_sub_cost == 0 && summ_sub_nds == 0) { summ_cost = строка.СчетФактура.SummAll - строка.СчетФактура.SummAVT; summ_nds = строка.СчетФактура.SummAVT; } } } foreach (ОснованиеДокумент doc in sf.Документы) { if (doc.НомерИсправления == sfdoc_ver) { sfdoc = doc; break; } } if (sfdoc == null) { sfdoc = os.CreateObject <ОснованиеДокумент>(); sf.Документы.Add(sfdoc); sfdoc.НомерИсправления = sfdoc_ver; if (sf.ДействующийДокумент.НомерИсправления < sfdoc.НомерИсправления) { sf.ДействующийДокумент = sfdoc; } } строка.ОснованиеДокумент = sfdoc; sfdoc.ДатаИсправления = sfdoc_date; sfdoc.егНомер = строка.егНомер; if (sf.Тип == Основание.ТипОснования.СФЗ && String.IsNullOrEmpty(sfdoc.егНомер)) { Int32 IntNumber = fmCAVTInvoiceNumberGenerator.GenerateNumber(((ObjectSpace)os).Session, sf.ДействующийДокумент.CID, sf_sfz_type, sf.Дата, 0); sfdoc.егНомер = sf_sfz_type.Prefix + sf.Дата.ToString("yyyyMM").Substring(2, 4) + IntNumber.ToString("00000"); строка.егНомер = sfdoc.егНомер; } sfdoc.КодПартнера = строка.Контрагент.Code; sfdoc.НаименКонтрагента = строка.Контрагент.Name; sfdoc.СуммаВсего = summ_cost + summ_nds; sfdoc.СуммаНДС = summ_nds; sfdoc.СуммаВсегоУвел = sfdoc.СуммаВсего + summ_sub_cost; sfdoc.СуммаНДСУвел = sfdoc.СуммаНДС + summ_sub_nds; }