Exemplo n.º 1
0
        public override void AfterConstruction()
        {
            base.AfterConstruction();
            Корректировка = Основание.ТипПодчиненности.ОСНОВНОЙ;
            ОснованиеДокумент документ = new ОснованиеДокумент(this.Session);

            Документы.Add(документ);
            ДействующийДокумент = документ;
        }
Exemplo n.º 2
0
        protected override void OnChanged(string propertyName, object oldValue, object newValue)
        {
            base.OnChanged(propertyName, oldValue, newValue);
            if (IsLoading)
            {
                return;
            }
            switch (propertyName)
            {
            case "НомерИсправления":
                if (НомерИсправления > Основание.ДействующийДокумент.НомерИсправления)
                {
                    Основание.ДействующийДокумент = this;
                }
                break;

            case "Основание":
                if (Корректировка == Основание.ТипПодчиненности.КОРРЕКТИРОВОЧНЫЙ)
                {
                    БазовыйДокумент = Основание.БазовоеОснование.ДействующийДокумент;
                }
                break;

            case "СуммаВсего":
                ОбновитьСтоимость();
                break;

            case "СуммаАкциза":
                ОбновитьСтоимость();
                break;

            case "СуммаНДС":
                ОбновитьСтоимость();
                break;

            case "СуммаВсегоУвел":
                ОбновитьСтоимость();
                break;

            case "СуммаАкцизаУвел":
                ОбновитьСтоимость();
                break;

            case "СуммаНДСУвел":
                ОбновитьСтоимость();
                break;
            }
        }
Exemplo n.º 3
0
        public void ЗаполнитьСтоимостьВсего()
        {
            if (ОснованиеСуммаВсего != 0 || Основание == null || Основание.ДействующийДокумент == null)
            {
                return;
            }
            ОснованиеДокумент doc = Основание.ДействующийДокумент;

            doc.ТребуетсяПроверка = true;
            doc.СуммаВсего        = 0;
            doc.СуммаНДС          = 0;
            foreach (var oper in Основание.Операции)
            {
                doc.СуммаВсего += oper.СуммаВсего;
                doc.СуммаНДС   += oper.СуммаНДСБаза;
            }
        }
        private void Import(IObjectSpace os, ОперацияКонтРучные конт, String file_name)
        {
            FixedFileEngine engine = new FixedFileEngine(typeof(OperationImport));

            OperationImport[] imp_res = (OperationImport[])engine.ReadFile(file_name);
            os.Delete(конт.Операции);
            DateTime date = default(DateTime);

            foreach (OperationImport oper_imp in imp_res)
            {
                ОснованиеДокумент doc = null;
                if (oper_imp.SF_TYPE.Trim() != "СФЗ")
                {
                    doc = os.FindObject <ОснованиеДокумент>(new BinaryOperator("РегНомер", oper_imp.SF_REGNUM.Trim()), true);
                }
                else
                {
                    DateTime.TryParseExact(oper_imp.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date);
                    Основание осн = os.FindObject <Основание>(
                        new BinaryOperator("ИннПродавца", "5012039795") &
                        new BinaryOperator("Номер", oper_imp.SF_NUMBER.Trim()) &
                        new BinaryOperator("Дата", date, BinaryOperatorType.GreaterOrEqual) &
                        new BinaryOperator("Дата", date.AddDays(1), BinaryOperatorType.Less), true);
                    doc = осн != null ? осн.ДействующийДокумент : null;
                }
                Операция oper = os.CreateObject <Операция>();
                конт.Операции.Add(oper);
//                Decimal summ_cost = Decimal.Parse(imp_rec.SUMM_COST.Trim().Replace('.', ','));
//                DateTime.TryParseExact(imp_rec.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out sfdoc_date);
                oper.ТипКниги        = (Операция.ТипКнигиТип)Int32.Parse(oper_imp.BOOK.Trim());
                oper.ТипДеятельности = (Операция.ТипДеятельностиТип)Int32.Parse(oper_imp.WORK_TYPE.Trim());
                oper.ТипНапрОпер     = (Операция.ТипНапрОперТип)Int32.Parse(oper_imp.DIR.Trim());
                oper.ТипОперВнутр    = (Операция.ТипОперВнутрТип)Int32.Parse(oper_imp.OPERATION.Trim());
                String stavka = oper_imp.VAT_RATE.Trim();
                if (String.IsNullOrEmpty(stavka) || stavka == "0")
                {
                    stavka = "2";
                }
                oper.Ставка = (СтавкаНДС)Int32.Parse(stavka);
                //                oper_imp.VAT_MODE;
                oper.Проводка   = oper_imp.BUH_PROV.Trim();
                oper.СубсчетНДС = oper_imp.VAT_ACC.Trim();
                DateTime.TryParseExact(oper_imp.BUH_DT.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date);
                oper.ДатаБУ = date;
                DateTime.TryParseExact(oper_imp.VAT_DT.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date);
                oper.ДатаНДС           = date;
                oper.ОснованиеДокумент = doc;
                oper.КодПартнера       = oper_imp.VO_CODE.Trim();
                if (oper_imp.SF_TYPE.Trim() != "СФЗ")
                {
                    oper.ОснованиеРегНомер = oper_imp.SF_REGNUM.Trim();
                }
                else
                {
                    oper.ОснованиеРегНомер = doc != null ? doc.егНомер : null;
                }
                oper.СФТип     = oper_imp.SF_TYPE.Trim();
                oper.СФТипОриг = oper_imp.SF_TYPE_ORIG.Trim();
                oper.СФНомер   = oper_imp.SF_NUMBER.Trim();
                DateTime.TryParseExact(oper_imp.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date);
                oper.СФДата  = date;
                oper.ПДТип   = oper_imp.PD_TYPE.Trim();
                oper.ПДНомер = oper_imp.PD_NUMBER.Trim();
                DateTime.TryParseExact(oper_imp.PD_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out date);
                oper.ПДДата             = date;
                oper.СуммаВсего         = Decimal.Parse(oper_imp.SUMM_ALL.Trim().Replace('.', ','));
                oper.СуммаСтоимость     = Decimal.Parse(oper_imp.SUMM_COST.Trim().Replace('.', ','));
                oper.СуммаНДСБаза       = Decimal.Parse(oper_imp.SUMM_VAT_PAY.Trim().Replace('.', ','));
                oper.СуммаНДСВычет      = Decimal.Parse(oper_imp.SUMM_VAT_BAY.Trim().Replace('.', ','));
                oper.СуммаНДССтоимость  = Decimal.Parse(oper_imp.SUMM_VAT_COST.Trim().Replace('.', ','));
                oper.СуммаНДС19Входящий = Decimal.Parse(oper_imp.SUMM_VAT_IN.Trim().Replace('.', ','));
                oper.СуммаНДС19Списано  = Decimal.Parse(oper_imp.SUMM_VAT_IN_USE.Trim().Replace('.', ','));
                if (oper.ТипКниги == Операция.ТипКнигиТип.ПРОДАЖ)
                {
                    if (oper.СФТип != "СФВ")
                    {
                        oper.СуммаСтоимость  = oper.СуммаВсего;
                        oper.СуммаСтоимость += -oper.СуммаНДСБаза;
                    }
                    else
                    {
                        oper.СуммаСтоимость = Decimal.Round(oper.СуммаНДСБаза * 100 / 18, 2);
                        oper.СуммаВсего     = oper.СуммаСтоимость + oper.СуммаНДСБаза;
                    }
                }
                //oper_imp.SUMM_ALL;
                //oper_imp.SUMM_COST;
                //oper_imp.SUMM_VAT_PAY;
                //oper_imp.SUMM_VAT_IN;
                //oper_imp.SUMM_VAT_IN_USE;
                //oper_imp.SUMM_VAT_COST;
                //oper_imp.SUMM_VAT_BAY;
                //System.Console.WriteLine(oper_import.SUMM_ALL + "_" + oper_import.SUMM_VAT_PAY + "_" + oper_import.SUMM_VAT_BAY);
            }
        }
Exemplo n.º 5
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, СтрокаОснов строка, 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;
            }
Exemplo n.º 6
0
            protected override void OnChanged(string propertyName, object oldValue, object newValue)
            {
                base.OnChanged(propertyName, oldValue, newValue);
                if (IsLoading)
                {
                    return;
                }
                switch (propertyName)
                {
                case "ТипИсточника":
                case "ИНН":
                    if (ТипИсточника == Основание.ТипИсточника.ВХОДЯЩИЙ)
                    {
                        ИННПродавцаУст(ИНН);
                    }
                    else
                    {
                        ИННПродавцаУст(Контейнер.Налогоплательщик.ИНН);
                    }
//                        ОбновитьСчетФактуру();
                    break;

                case "Номер":
                case "Дата":
//                        ОбновитьСчетФактуру();
                    break;

                case "Контрагент":
                    ОбновитьКонтрагента();
                    break;

                //case "СчетФактура":
                //    if (СчетФактура != null) {
                //        if (СчетФактура.Supplier.INN == Контейнер.Налогоплательщик.ИНН) {
                //            Контрагент = СчетФактура.Customer;
                //            ТипИсточника = RuVat.Основание.ТипИсточника.ИСХОДЯЩИЙ;
                //        } else {
                //            Контрагент = СчетФактура.Supplier;
                //            ТипИсточника = RuVat.Основание.ТипИсточника.ВХОДЯЩИЙ;
                //        }
                //        Номер = СчетФактура.Number;
                //        Дата = СчетФактура.Date;
                //        if (ТипИсточника == RuVat.Основание.ТипИсточника.ИСХОДЯЩИЙ) {
                //            String dates = СчетФактура.Date.ToString("yyyyMMdd");
                //            РегНомер = СчетФактура.RegNumber[0] + dates.Substring(2,2) +
                //                //+ dates[2] + dates[3] +
                //                СчетФактура.RegNumber.Substring(1);
                //        }
                //        else
                //            РегНомер = СчетФактура.RegNumber;
                //        ТипОснования = Основание.ТипОснования.Неопределен;
                //    }
                //    break;
                case "Основание":
                    if (Основание != null)
                    {
                        if (ОснованиеДокумент == null || ОснованиеДокумент.Основание != Основание)
                        {
                            ОснованиеДокумент = Основание.ДействующийДокумент;
                        }
                    }
                    else
                    {
                        ОснованиеДокумент = null;
                    }
                    break;

                case "ОснованиеДокумент":
                    if (ОснованиеДокумент != null && ОснованиеДокумент.Основание != Основание)
                    {
                        Основание = ОснованиеДокумент.Основание;
                    }
                    break;
                }
            }
Exemplo n.º 7
0
        static public void ImportInvoices(IObjectSpace os, String file_name)
        {
            //            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;
            fmCAVTInvoiceType sf_sfz_type = os.GetObjects <fmCAVTInvoiceType>().First(x => x.Prefix == "Z");

            foreach (InvoiceImport imp_rec in imp_res)
            {
                imp_rec.SF_VO_CODE    = imp_rec.SF_VO_CODE.Trim();
                imp_rec.SF_INT_NUMBER = imp_rec.SF_INT_NUMBER.Trim();
                imp_rec.SF_NUMBER     = imp_rec.SF_NUMBER.Trim();
                Decimal  summ_cost     = Decimal.Parse(imp_rec.SUMM_COST.Trim().Replace('.', ','));
                Decimal  summ_nds      = Decimal.Parse(imp_rec.SUMM_NDS.Trim().Replace('.', ','));
                Decimal  summ_sub_cost = Decimal.Parse(imp_rec.SUMM_SUB_COST.Trim().Replace('.', ','));
                Decimal  summ_sub_nds  = Decimal.Parse(imp_rec.SUMM_SUB_NDS.Trim().Replace('.', ','));
                DateTime sf_date       = default(DateTime);
                DateTime.TryParseExact(imp_rec.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out sf_date);
                crmCParty party = os.GetObjects <crmCParty>(new BinaryOperator("Code", imp_rec.SF_VO_CODE)).FirstOrDefault();
                if (party == null)
                {
                    System.Console.WriteLine("SF " + imp_rec.SF_NUMBER + " party not found (" + imp_rec.SF_VO_CODE + ")");
                    continue;
                }
                Основание.ТипИсточника ts;
                if (imp_rec.SF_IO_TYPE == "I")
                {
                    ts = Основание.ТипИсточника.ВХОДЯЩИЙ;
                }
                else if (imp_rec.SF_IO_TYPE == "O")
                {
                    ts = Основание.ТипИсточника.ИСХОДЯЩИЙ;
                }
                else
                {
                    throw new ArgumentOutOfRangeException("SF " + imp_rec.SF_NUMBER + " неопределен тип входящий/исходящий");
                }
                Основание.ТипОснования tsf;
                switch (imp_rec.SF_TYPE)
                {
                case "СЧФ":
                    tsf = Основание.ТипОснования.СЧФ;
                    break;

                case "УПД":
                    tsf = Основание.ТипОснования.УПД;
                    break;

                case "СФА":
                    tsf = Основание.ТипОснования.СФА;
                    break;

                case "СФЗ":
                    tsf = Основание.ТипОснования.СФЗ;
                    break;

                case "СЧГ":
                    tsf = Основание.ТипОснования.СЧГ;
                    break;

                case "БЖД":
                    tsf = Основание.ТипОснования.БЖД;
                    break;

                case "СФВ":
                    tsf = Основание.ТипОснования.СФВ;
                    break;

                case "БСО":
                    tsf = Основание.ТипОснования.БСО;
                    break;

                case "ЧЕК":
                    tsf = Основание.ТипОснования.ЧЕК;
                    break;

                default:
                    System.Console.WriteLine("SF: " + imp_rec.SF_NUMBER + " странный тип (" + imp_rec.SF_TYPE + ")");
                    continue;
                }
                String  inn        = "";
                String  kpp        = "";
                ЛицоТип party_type = ЛицоТип.НЕЗАДАН;
                if (party.Person != null)
                {
                    if (party.Person.Address.Country.CodeAlfa2 == "RU")
                    {
//                        Type party.ComponentTypeComponentObject.GetType();
                        if (party.ComponentType == typeof(crmCLegalPerson) ||
                            party.ComponentType == typeof(crmCLegalPersonUnit))
                        {
                            party_type = ЛицоТип.ЮР_ЛИЦО;
                            inn        = party.INN;
                            if (inn.Length == 9)
                            {
                                inn = "0" + inn;
                            }
                            kpp = party.KPP;
                            if (inn.Length == 8)
                            {
                                kpp = "0" + kpp;
                            }
                            if (inn.Length != 10)
                            {
                                System.Console.WriteLine("Party: " + party.Code + " fail INN (" + inn + ")");
                                continue;
                            }
                            if (kpp.Length != 9)
                            {
                                System.Console.WriteLine("Party: " + party.Code + " fail KPP (" + kpp + ")");
                                continue;
                            }
                        }
                        else
                        {
                            if (party.ComponentType == typeof(crmCBusinessman))
                            {
                                party_type = ЛицоТип.ПРЕДПРИНИМАТЕЛЬ;
                                inn        = party.INN;
                                if (inn.Length == 11)
                                {
                                    inn = "0" + inn;
                                }
                                if (inn.Length != 12)
                                {
                                    System.Console.WriteLine("Party: " + party.Code + " fail INN (" + inn + ")");
                                    continue;
                                }
                            }
                            else
                            if (party.ComponentType == typeof(crmCPhysicalParty))
                            {
                                party_type = ЛицоТип.ФИЗ_ЛИЦО;
                            }
                        }
                    }
                    else
                    {
                        party_type = ЛицоТип.ИНО_ПАРТНЕР;
                        System.Console.WriteLine("Party: " + party.Code + " инопартнер ");
                    }
                }
                if (party.Code == "2706")
                {
                    party_type = ЛицоТип.ОЗНИЦА;
                }
                //
                String sale_inn = "5012039795";
                if (ts == Основание.ТипИсточника.ВХОДЯЩИЙ)
                {
                    sale_inn = inn;
                }
                // !!!!!!!!!!!!!!!!!!!!!!!!!!
                // Выбраковываем СФ
                if (String.IsNullOrEmpty(sale_inn) || String.IsNullOrEmpty(imp_rec.SF_REGNUM.Trim()) && tsf != Основание.ТипОснования.СФЗ)
                {
                    continue;
                }
                // !!!!!!!!!!!!!!!!!!!!!!!!!!
                Основание sf = os.FindObject <Основание>(
                    XPQuery <Основание> .TransformExpression(
                        ((ObjectSpace)os).Session,
                        rec =>
                        rec.ИннПродавца == sale_inn &&
                        rec.Номер == imp_rec.SF_NUMBER &&
                        rec.Дата >= sf_date &&
                        rec.Дата < sf_date.AddDays(1)
                        ));
                if (sf == null)
                {
                    sf          = os.CreateObject <Основание>();
                    sf.Источник = ts;
                    sf.ИНН      = inn;
                    sf.Номер    = imp_rec.SF_NUMBER;
                    sf.Дата     = sf_date;
                    sf.КПП      = kpp;
                }
                sf.Корректировка = Основание.ТипПодчиненности.ОСНОВНОЙ;
                sf.Источник      = ts;
                sf.Тип           = tsf;
                sf.ЛицоТип       = party_type;
                ОснованиеДокумент sfdoc      = null;
                String            sfdoc_sver = imp_rec.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(imp_rec.SF_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out sfdoc_date);
                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_date;
                sfdoc.егНомер         = imp_rec.SF_REGNUM.Trim();
                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.КодПартнера       = party.Code;
                sfdoc.НаименКонтрагента = party.Name;
                sfdoc.СуммаВсего        = summ_cost + summ_nds;
                sfdoc.СуммаНДС          = summ_nds;
                sfdoc.СуммаВсегоУвел    = sfdoc.СуммаВсего + summ_sub_cost;
                sfdoc.СуммаНДСУвел      = sfdoc.СуммаНДС + summ_sub_nds;
                //fmCAVTInvoiceBase invoice = os.FindObject<fmCAVTInvoiceBase>(
                //    XPQuery<fmCAVTInvoiceBase>.TransformExpression(
                //    ((ObjectSpace)os).Session,
                //    rec => rec.Supplier.Code == imp_rec.SF_VO_CODE &&
                //           rec.RegNumber == imp_rec.SF_INT_NUMBER &&
                //           rec.Date >= sf_date &&
                //           rec.Date < sf_date.AddDays(1)
                //    ));
                ////if (invoice == null) {
                ////    count++;
                ////    System.Console.WriteLine(imp_rec.SF_INT_NUMBER + " " + imp_rec.SF_NUMBER + " " + imp_rec.SF_DATE + " " + summ_cost + " " + summ_nds);
                ////}
                //if (invoice == null) {
                //    crmCParty party = os.GetObjects<crmCParty>(new BinaryOperator("Code", imp_rec.SF_VO_CODE)).FirstOrDefault();
                //    invoice = os.CreateObject<fmCAVTInvoiceBase>();
                //    invoice.RegNumber = imp_rec.SF_INT_NUMBER;
                //    invoice.Number = imp_rec.SF_NUMBER;
                //    invoice.Date = sf_date;
                //    invoice.Supplier = party;
                //    invoice.Customer = register.Party;
                //    invoice.SummAVT = Decimal.Parse(imp_rec.SUMM_NDS.Trim().Replace('.', ','));
                //    invoice.SummCost = Decimal.Parse(imp_rec.SUMM_COST.Trim().Replace('.', ','));
                //}
                //else {
                //    invoice.SummAVT = Decimal.Parse(imp_rec.SUMM_NDS.Trim().Replace('.', ','));
                //    invoice.SummCost = Decimal.Parse(imp_rec.SUMM_COST.Trim().Replace('.', ','));
                //    fmCAVTInvoiceRegisterLine line_check = os.FindObject<fmCAVTInvoiceRegisterLine>(
                //            CriteriaOperator.And(new BinaryOperator("InvoiceVersion", invoice.Current)), true);
                //    if (line_check != null) continue;
                //}
                //fmCAVTInvoiceRegisterLine line = register.InLines.Where(rec => rec.Invoice == invoice).FirstOrDefault();
                //if (line == null) {
                //    line = os.CreateObject<fmCAVTInvoiceRegisterLine>();
                //    register.InLines.Add(line);
                //}
                //line.SequenceNumber = seq_num++;
                ////                line_doc.DateTransfer = invoice.Date;
                //line.Invoice = invoice;
                //line.TransferType = inv_transfer_types.Where(rec => rec.Code == "1").FirstOrDefault();
                //if (String.IsNullOrEmpty(imp_rec.SF_TRANS_DATE.Trim())) {
                //    DateTime trans_date = default(DateTime);
                //    DateTime.TryParseExact(imp_rec.SF_TRANS_DATE.Trim(), "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out trans_date);
                //    line.DateTransfer = trans_date;
                //}
                //if (line.DateTransfer < sf_date)
                //    line.DateTransfer = sf_date;
                //line.OperationType = inv_oper_types.Where(rec => rec.Code == imp_rec.SF_OPER_TYPE.Trim() ||
                //                                               rec.Code == '0' + imp_rec.SF_OPER_TYPE.Trim()).FirstOrDefault();
            }
            System.Console.WriteLine("All " + count);
        }