Inheritance: Элемент
Beispiel #1
0
        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, источник, запись);
            }
        }
Beispiel #2
0
            public void ЗаполнитьКонтр()
            {
                IObjectSpace osbase = CommonMethods.FindObjectSpaceByObject(this);

                using (IObjectSpace os = osbase.CreateNestedObjectSpace()) {
                    Документ строка = os.GetObject <Документ>(this);
                    строка.Контейнер.ЗаполнитьКонтрагента(строка);
                    os.CommitChanges();
                }
            }
Beispiel #3
0
 protected void ЗаполнитьКонтрагента(Документ строка_образец)
 {
     if (строка_образец.Контрагент != null)
     {
         foreach (Документ строка in Документы)
         {
             if (строка_образец.Контрагент == строка.Контрагент)
             {
                 строка.ТипЛица = строка_образец.ТипЛица;
                 строка.ИНН     = строка_образец.ИНН;
                 строка.КПП     = строка_образец.КПП;
             }
         }
     }
 }
Beispiel #4
0
        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);
                опер.СуммаНДСВычет     = опер.СуммаНДСВычет - опер.СуммаНДССтоимость;
            }
        }
Beispiel #5
0
        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;
            }
            опер.СуммаСтоимость = опер.СуммаВсего - опер.СуммаНДСБаза;
        }
Beispiel #6
0
        /// <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;
        }