Ejemplo n.º 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, источник, запись);
            }
        }
Ejemplo n.º 2
0
            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";
            }
Ejemplo n.º 3
0
 protected КнигаСтрока  азместитьОснованиеВКниге(Книга книга, Основание основание)
 {
     foreach (КнигаСтрока str in книга.СтрокиКниги)
     {
         if (str.Основание == основание)
         {
             return(str);
         }
     }
     return(null);
 }
Ejemplo n.º 4
0
        public override string ToString()
        {
            String result = String.Empty;

            if (Основание != null)
            {
                result += Основание.ToString();
            }
            if (НомерИсправления != 0)
            {
                result += " ИСПР " + НомерИсправления.ToString() + ' ' + ДатаИсправления.ToString("dd.MM.yyyy");
            }
            return(result);
        }
        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);
            }
        }
Ejemplo n.º 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, СтрокаОснов строка, 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;
            }
Ejemplo 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);
        }