public static void Обновить(IObjectSpace os, ОперацияКонтИмпортСтруктур конт, Основание.ТипИсточника источник, fmCAVTBookBuhStructRecord запись) { Документ cur_doc = null; UInt16 change_number = 0; if (!String.IsNullOrEmpty(запись.InvoiceChangeNumber)) { UInt16.TryParse(запись.InvoiceChangeNumber, out change_number); } foreach (var doc in конт.Документы) { if (doc.ТипИсточника == источник && doc.Контрагент == запись.PartnerParty && doc.Номер == запись.InvoiceNumber && doc.Дата == запись.InvoiceDate && doc.НомерИсправления == change_number && doc.ДатаИсправления == запись.InvoiceChangeDate) { cur_doc = doc; break; } } if (cur_doc == null) { cur_doc = os.CreateObject <Документ>(); конт.Документы.Add(cur_doc); cur_doc.ТипИсточника = источник; cur_doc.Контрагент = запись.PartnerParty; cur_doc.Номер = запись.InvoiceNumber; cur_doc.Дата = запись.InvoiceDate; cur_doc.НомерИсправления = change_number; cur_doc.ДатаИсправления = запись.InvoiceChangeDate; // cur_doc.СчетФактураУст(запись.Invoice); cur_doc.ТипОснования = Основание.String2ТипОснования(запись.InvoiceType); if (источник == Основание.ТипИсточника.ВХОДЯЩИЙ || cur_doc.ТипОснования == Основание.ТипОснования.ГТД || cur_doc.ТипОснования == Основание.ТипОснования.СФЗ) { cur_doc.егНомер = запись.InvoiceRegNumber; } else { String dates = запись.InvoiceDate.ToString("yyyyMMdd"); // !!!!!!!!!!!!!!!! // Ошибочные номера счетов-фактур выставленных // if (запись.InvoiceNumber[0] == '0') // cur_doc.РегНомер = запись.InvoiceRegNumber[0] + dates.Substring(2, 2) + запись.InvoiceRegNumber.Substring(1); // else cur_doc.егНомер = запись.InvoiceNumber[0] + dates.Substring(2, 2) + запись.InvoiceNumber.Substring(1); // cur_doc.РегНомер = запись.InvoiceRegNumber; } } ОбновитьДокумент(os, cur_doc, источник, запись); if (источник == Основание.ТипИсточника.ИСХОДЯЩИЙ) { ОбновитьОперациюПродаж(os, конт, cur_doc, источник, запись); } if (источник == Основание.ТипИсточника.ВХОДЯЩИЙ) { ОбновитьОперациюПокупок(os, конт, cur_doc, источник, запись); } }
public void ЗаполнитьКонтр() { IObjectSpace osbase = CommonMethods.FindObjectSpaceByObject(this); using (IObjectSpace os = osbase.CreateNestedObjectSpace()) { Документ строка = os.GetObject <Документ>(this); строка.Контейнер.ЗаполнитьКонтрагента(строка); os.CommitChanges(); } }
protected void ЗаполнитьКонтрагента(Документ строка_образец) { if (строка_образец.Контрагент != null) { foreach (Документ строка in Документы) { if (строка_образец.Контрагент == строка.Контрагент) { строка.ТипЛица = строка_образец.ТипЛица; строка.ИНН = строка_образец.ИНН; строка.КПП = строка_образец.КПП; } } } }
public static void ОбновитьОперациюПокупок(IObjectSpace os, ОперацияКонтИмпортСтруктур конт, Документ док, Основание.ТипИсточника источник, fmCAVTBookBuhStructRecord запись) { if (док.Основание == null || запись.SummAll == 0) { return; } Операция опер = os.CreateObject <Операция>(); конт.Операции.Add(опер); опер.ОснованиеДокумент = док.ОснованиеДокумент; опер.ТипКниги = Операция.ТипКнигиТип.ПОКУПОК; опер.ТипДеятельности = Операция.ТипДеятельностиТип.ОБЛ_18; опер.ТипОбъекта = Операция.ТипОбъектаТип.ЕАЛИЗАЦИЯ; опер.ТипНапрОпер = Операция.ТипНапрОперТип.НОРМАЛЬНЫЙ; if (запись.OperationType == null) { throw new ArgumentNullException("Незадан Тип операции для " + опер.ОснованиеДокумент); } if (запись.OperationType.Code == "01" || запись.OperationType.Code == "1") { опер.ТипОперВнутр = Операция.ТипОперВнутрТип.ЕАЛИЗАЦИЯ; } if (запись.OperationType.Code == "02" || запись.OperationType.Code == "2") { опер.ТипОперВнутр = Операция.ТипОперВнутрТип.АВАНС_ЗАЧЕТ; } опер.ТипОсновной = Операция.ТипОсновнойТип.ВЫЧЕТ; опер.ОснованиеРегНомер = док.егНомер; опер.СФТип = запись.InvoiceType; опер.СФНомер = запись.InvoiceNumber; опер.СФДата = запись.InvoiceDate; CS.Finance.csNDSRate rate = запись.BayVATRate; if (rate == null) { rate = запись.SaleVATRate; } if (rate != null) { if (rate.Code == "18%") { опер.Ставка = СтавкаНДС.ОБЛ_18; } if (rate.Code == "10%") { опер.Ставка = СтавкаНДС.ОБЛ_10; } if (rate.Code == "0%") { опер.Ставка = СтавкаНДС.ОБЛ_0; } if (rate.Code == "БЕЗ НДС") { опер.Ставка = СтавкаНДС.НЕОБЛ; } } else { опер.Ставка = СтавкаНДС.ОБЛ_18; } опер.ПериодБУ = конт.ПериодБУ; опер.ДатаБУ = конт.ДатаБУ; опер.ДатаНДС = запись.BayDate; if (запись.BayDate > new DateTime(2000, 1, 1)) { опер.ДатаНДС = запись.BayDate; } else { опер.ДатаНДС = опер.Контейнер.ПериодНДС != null ? опер.Контейнер.ПериодНДС.ДатаПо : default(DateTime); } // if (запись.BaySummVAT != 0) // throw new ArgumentOutOfRangeException("Незадана дата отнесения для покупок "); // опер.ДатаНДС = опер.ДатаБУ; if (запись.SaleSummAll != 0) { опер.СуммаВсего = запись.BaySummAll; } else { опер.СуммаВсего = запись.SummAll; } if (запись.SaleSummVAT != 0) { опер.СуммаНДСВычет = запись.BaySummVAT; } else { опер.СуммаНДСВычет = запись.SummVAT; } опер.СуммаСтоимость = опер.СуммаВсего - опер.СуммаНДСВычет; if (опер.ТипОперВнутр == Операция.ТипОперВнутрТип.ЕАЛИЗАЦИЯ) { опер.СуммаНДС19Входящий = опер.СуммаНДСВычет; опер.СуммаНДС19Списано = опер.СуммаНДСВычет; } if (док.Контейнер != null && док.Контейнер.ДоляСтоимость > 0) { опер.СуммаНДССтоимость = Decimal.Round(опер.СуммаНДСВычет * док.Контейнер.ДоляСтоимость, 2); опер.СуммаНДСВычет = опер.СуммаНДСВычет - опер.СуммаНДССтоимость; } }
public static void ОбновитьОперациюПродаж(IObjectSpace os, ОперацияКонтИмпортСтруктур конт, Документ док, Основание.ТипИсточника источник, fmCAVTBookBuhStructRecord запись) { if (док.Основание == null || запись.SummAll == 0) { return; } Операция опер = os.CreateObject <Операция>(); конт.Операции.Add(опер); опер.ОснованиеДокумент = док.ОснованиеДокумент; опер.ТипКниги = Операция.ТипКнигиТип.ПРОДАЖ; опер.ТипДеятельности = Операция.ТипДеятельностиТип.ОБЛ_18; опер.ТипОбъекта = Операция.ТипОбъектаТип.ЕАЛИЗАЦИЯ; опер.ТипНапрОпер = Операция.ТипНапрОперТип.НОРМАЛЬНЫЙ; if (запись.OperationType.Code == "01" || запись.OperationType.Code == "1") { опер.ТипОперВнутр = Операция.ТипОперВнутрТип.ЕАЛИЗАЦИЯ; } if (запись.OperationType.Code == "02" || запись.OperationType.Code == "2") { опер.ТипОперВнутр = Операция.ТипОперВнутрТип.АВАНС; } опер.ТипОсновной = Операция.ТипОсновнойТип.НАЛ_БАЗА; опер.ОснованиеРегНомер = док.егНомер; опер.СФТип = запись.InvoiceType; опер.СФНомер = запись.InvoiceNumber; опер.СФДата = запись.InvoiceDate; CS.Finance.csNDSRate rate = запись.SaleVATRate; if (rate == null) { rate = запись.BayVATRate; } if (rate != null) { if (rate.Code == "18%") { опер.Ставка = СтавкаНДС.ОБЛ_18; } if (rate.Code == "10%") { опер.Ставка = СтавкаНДС.ОБЛ_10; } if (rate.Code == "0%") { опер.Ставка = СтавкаНДС.ОБЛ_0; } if (rate.Code == "БЕЗ НДС") { опер.Ставка = СтавкаНДС.НЕОБЛ; } } else { опер.Ставка = СтавкаНДС.ОБЛ_18; } if (запись.SaleDate > new DateTime(2000, 1, 1)) { опер.ДатаНДС = запись.SaleDate; } else { опер.ДатаНДС = запись.InvoiceDate; } опер.ПериодБУ = конт.ПериодБУ; опер.ДатаБУ = конт.ДатаБУ; if (запись.SaleSummAll != 0) { опер.СуммаВсего = запись.SaleSummAll; } else { опер.СуммаВсего = запись.SummAll; } if (запись.SaleSummVAT != 0) { опер.СуммаНДСБаза = запись.SaleSummVAT; } else { опер.СуммаНДСБаза = запись.SummVAT; } опер.СуммаСтоимость = опер.СуммаВсего - опер.СуммаНДСБаза; }
/// <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, Документ строка, fmCAVTInvoiceType sf_sfz_type) { static public void ОбновитьДокумент(IObjectSpace os, Документ строка, Основание.ТипИсточника источник, fmCAVTBookBuhStructRecord запись) { // !!!!!!!!!!!!!!!!!!!!!!!!!! // Выбраковываем СФ 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), true); 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(); DateTime sfdoc_date; if (строка.НомерИсправления != 0) { sfdoc_date = строка.ДатаИсправления; } else { sfdoc_date = строка.Дата; } // 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('.', ',')); ////Decimal summ_cost = строка.СчетФактура.SummCost; ////Decimal summ_nds = строка.СчетФактура.SummAVT; ////Decimal summ_sub_cost = строка.СчетФактура.DeltaSummAllSub; ////Decimal summ_sub_nds = строка.СчетФактура.DeltaSummAVTSub; //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 = doc; break; } } if (sfdoc == null) { sfdoc = os.CreateObject <ОснованиеДокумент>(); sf.Документы.Add(sfdoc); sfdoc.НомерИсправления = строка.НомерИсправления; 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.СуммаВсего = запись.SummAll; sfdoc.СуммаНДС = запись.SummVAT; sfdoc.СуммаВсегоУвел = запись.SummIncCost + запись.SummIncVAT; sfdoc.СуммаНДСУвел = запись.SummIncVAT; // sfdoc.СуммаВсегоУвел = sfdoc.СуммаВсего + summ_sub_cost; // sfdoc.СуммаНДСУвел = sfdoc.СуммаНДС + summ_sub_nds; }