//        private Int32 CurLine;

        protected override void ProcessCell(string sheet, int row, int column, string type, string value)
        {
            Double  value_double;
            Decimal value_decimal;

            if (sheet != "СФ Полученные" && sheet != "СФ Выставленные" || row < 4)
            {
                return;
            }
            if (column > 1 && (CurRecord == null || CurRecord.RowNumber != row ||
                               sheet == "СФ Полученные" && CurRecord.InInvoiceStructRecord == null ||
                               sheet == "СФ Выставленные" && CurRecord.OutInvoiceStructRecord == null))
            {
                return;
            }
            try {
                switch (column)
                {
                case 1:
                    if (value == null || String.IsNullOrEmpty(value.Trim()) || value == "Итог")
                    {
                        CurRecord = null;
                        //                        CurRow = 0;
                    }
                    else
                    {
                        CurRecord           = ObjectSpace.CreateObject <fmCAVTBookBuhStructRecord>();
                        CurRecord.RowNumber = row;
                        //                        CurRow = row;
                        CurRecord.InvoiceRegNumber = value;
                        if (sheet == "СФ Полученные")
                        {
                            StructBook.InInvoiceRecords.Add(CurRecord);
                        }
                        if (sheet == "СФ Выставленные")
                        {
                            StructBook.OutInvoiceRecords.Add(CurRecord);
                        }
                    }
                    break;

                case 2:
                    CurRecord.InvoiceType = value;
                    break;

                case 3:
                    CurRecord.TransferType = _TransferTypes.Where(rec => rec.Code == value).FirstOrDefault();
                    break;

                case 4:
                    if (value.Length == 1)
                    {
                        value = '0' + value;
                    }
                    CurRecord.OperationType = _OperationTypes.Where(rec => rec.Code == value).FirstOrDefault();
                    break;

                case 5:
                    CurRecord.InvoiceNumber = value;
                    break;

                case 6:
                    CurRecord.InvoiceDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 7:
                    CurRecord.InvoiceChangeNumber = value;
                    break;

                case 8:
                    CurRecord.InvoiceChangeDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 9:
                    CurRecord.InvoiceCorrectNumber = value;
                    break;

                case 10:
                    CurRecord.InvoiceCorrectDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 11:
                    CurRecord.InvoiceCorrectChangeNumber = value;
                    break;

                case 12:
                    CurRecord.InvoiceCorrectChangeDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 13:
                    CurRecord.TransferDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 14:
                    String inn = value == null ? String.Empty : value.Trim();
                    CurRecord.PartnerInn = inn;
                    break;

                case 15:
                    String kpp = value == null ? String.Empty : value.Trim();
                    CurRecord.PartnerKpp = value;
                    break;

                case 16:
                    CurRecord.PartnerName = value;
                    break;

                case 17:
                    CurRecord.PartnerCountry = value;
                    break;

                case 18:
                    CurRecord.PartnerSity = value;
                    break;

                case 19:
                    CurRecord.PartnerAddress = value;
                    break;

                case 20:
                    value_double      = Double.Parse(value, FormatProvider);
                    value_decimal     = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummAll = value_decimal;
                    break;

                case 21:
                    value_double       = Double.Parse(value, FormatProvider);
                    value_decimal      = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummCost = value_decimal;
                    break;

                case 22:
                    value_double      = Double.Parse(value, FormatProvider);
                    value_decimal     = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummVAT = value_decimal;
                    break;

                case 23:
                    value_double          = Double.Parse(value, FormatProvider);
                    value_decimal         = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummIncCost = value_decimal;
                    break;

                case 24:
                    value_double         = Double.Parse(value, FormatProvider);
                    value_decimal        = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummIncVAT = value_decimal;
                    break;

                case 25:
                    value_double          = Double.Parse(value, FormatProvider);
                    value_decimal         = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummDecCost = value_decimal;
                    break;

                case 26:
                    value_double         = Double.Parse(value, FormatProvider);
                    value_decimal        = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SummDecVAT = value_decimal;
                    break;

                case 27:
                    CurRecord.BayDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 28:
                    switch (value)
                    {
                    case "3":
                        CurRecord.BayVATRate = _VatRates.FirstOrDefault(x => x.Code == "10%");
                        break;

                    case "4":
                        CurRecord.BayVATRate = _VatRates.FirstOrDefault(x => x.Code == "0%");
                        break;

                    case "5":
                        CurRecord.BayVATRate = _VatRates.FirstOrDefault(x => x.Code == "БЕЗ НДС");
                        break;

                    default:
                        CurRecord.BayVATRate = _VatRates.FirstOrDefault(x => x.Code == "18%");
                        break;
                    }
                    break;

                case 29:
                    value_double         = Double.Parse(value, FormatProvider);
                    value_decimal        = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.BaySummAll = value_decimal;
                    break;

                case 30:
                    CurRecord.BayAccCode = value;
                    break;

                case 31:
                    value_double         = Double.Parse(value, FormatProvider);
                    value_decimal        = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.BaySummVAT = value_decimal;
                    break;

                case 32:
                    CurRecord.SaleDate = DateTime.Parse(value, FormatProvider);
                    break;

                case 33:
//                        CurRecord.SaleVATRate = null;
                    switch (value)
                    {
                    case "3":
                        CurRecord.SaleVATRate = _VatRates.FirstOrDefault(x => x.Code == "10%");
                        break;

                    case "4":
                        CurRecord.SaleVATRate = _VatRates.FirstOrDefault(x => x.Code == "0%");
                        break;

                    default:
                        CurRecord.SaleVATRate = _VatRates.FirstOrDefault(x => x.Code == "18%");
                        break;
                    }
                    break;

                case 34:
                    value_double          = Double.Parse(value, FormatProvider);
                    value_decimal         = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SaleSummAll = value_decimal;
                    break;

                case 35:
                    CurRecord.SaleAccCode = value;
                    break;

                case 36:
                    value_double          = Double.Parse(value, FormatProvider);
                    value_decimal         = Decimal.Round(new Decimal(value_double), 2);
                    CurRecord.SaleSummVAT = value_decimal;
                    break;
                }
            }
            catch (FormatException e) {
                throw new FormatException(String.Format("Лист: {0}, Строка: {1}, Колонка: {2}, Значение '{3}'", sheet, row, column, value), e);
            }
        }
        private void ProcessRecord(fmCAVTBookBuhStruct struct_book, IObjectSpace os, fmCAVTBookBuhStructRecord record, InvoiceType invoice_type)
        {
            crmCParty party;

            if (String.IsNullOrEmpty(record.PartnerInn))
            {
                throw new InvalidDataException("Незаполнен ИНН Рег: " + record.InvoiceRegNumber);
            }
            //                    crmCLegalPerson leg_person;
            //                    crmCLegalPersonUnit legunit_person;
            //                    person = os.GetObjects<crmCPerson>(new BinaryOperator("INN", record.PartnerInn)).FirstOrDefault();
            if (invoice_type == InvoiceType.InvoiceOut && record.SaleDate < new DateTime(1990, 01, 01) && record.SaleSummVAT != 0)
            {
                record.SaleDate = record.TransferDate;
            }
            if (record.PartnerParty == null)
            {
                if (record.InvoiceType == "ГТД")
                {
                    party = os.GetObjects <crmCParty>(new BinaryOperator("Code", record.PartnerInn)).FirstOrDefault();
                }
                else
                if (record.PartnerInn == "-")
                {
                    if (record.InvoiceType == "СФЗ" || record.PartnerName.Trim().ToUpper() == "НАСЕЛЕНИЕ")
                    {
                        party = os.GetObjects <crmCParty>(new BinaryOperator("Code", "2706")).FirstOrDefault();
                        //                    record.InvoiceType = "СФЗ";
                    }
                    else
                    {
                        String[] fio = record.PartnerName.Split(' ');
                        if (fio.Length != 3)
                        {
                            throw new InvalidDataException("Незаполнен ФИО физического лица '" + fio + "' Рег: " + record.InvoiceRegNumber);
                        }
                        crmCPhysicalParty person = os.GetObjects <crmCPhysicalParty>(
                            new BinaryOperator("LastName", fio[0]) &
                            new BinaryOperator("FirstName", fio[1]) &
                            new BinaryOperator("MiddleName", fio[2])
                            , true).FirstOrDefault();
                        if (person == null)
                        {
                            person                              = os.CreateObject <crmCPhysicalParty>();
                            person.INN                          = "-";
                            person.Name                         = record.PartnerName;
                            person.NameHandmake                 = record.PartnerName;
                            person.LastName                     = fio[0];
                            person.FirstName                    = fio[1];
                            person.MiddleName                   = fio[2];
                            person.AddressLegal.City            = record.PartnerSity;
                            person.AddressLegal.AddressHandmake = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                            //                        person.AddressFact.City = record.PartnerSity;
                            //                        person.AddressFact.AddressHandmake = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                            //                        party = person.Party;
                        }

                        party = person.Party;
                    }
                }
                else
                {
                    if (String.IsNullOrEmpty(record.PartnerKpp) || record.PartnerKpp == "-")
                    {
                        if (record.PartnerInn.Length != 12)
                        {
                            throw new FormatException("Некорректная длина ИНН Рег: " + record.InvoiceRegNumber);
                        }
                        crmCBusinessman person = os.GetObjects <crmCBusinessman>(new BinaryOperator("INN", record.PartnerInn), true).FirstOrDefault();
                        //                         phys_person =
                        if (person == null)
                        {
                            person     = os.CreateObject <crmCBusinessman>();
                            person.INN = record.PartnerInn;
                            String[] name_comps = record.PartnerName.Split(' ');
                            if (name_comps.Length >= 2)
                            {
                                person.LastName = name_comps[1];
                            }
                            else
                            {
                                person.LastName = "-";
                            }
                            if (name_comps.Length >= 3)
                            {
                                person.FirstName = name_comps[2];
                            }
                            else
                            {
                                person.FirstName = "-";
                            }
                            if (name_comps.Length == 4)
                            {
                                person.MiddleName = name_comps[3];
                            }
                            else
                            {
                                person.MiddleName = "-";
                            }
                            person.Name                         = record.PartnerName;
                            person.NameHandmake                 = record.PartnerName;
                            person.AddressLegal.City            = record.PartnerSity;
                            person.AddressLegal.AddressHandmake = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                            person.AddressFact.City             = record.PartnerSity;
                            person.AddressFact.AddressHandmake  = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                        }
                        party = person.Party;
                    }
                    else
                    {
                        if (record.PartnerInn.Length != 10)
                        {
                            throw new FormatException("Некорректная длина ИНН Рег: " + record.InvoiceRegNumber);
                        }
                        if (record.PartnerKpp.Length != 9)
                        {
                            throw new FormatException("Некорректная длина КПП Рег: " + record.InvoiceRegNumber);
                        }
                        party = os.GetObjects <crmCParty>(new BinaryOperator("INN", record.PartnerInn) &
                                                          new BinaryOperator("KPP", record.PartnerKpp), true).FirstOrDefault();
                        if (party == null)
                        {
                            crmCLegalPerson person;
                            person = os.GetObjects <crmCLegalPerson>(new BinaryOperator("INN", record.PartnerInn), true).FirstOrDefault();
                            if (person == null)
                            {
                                person      = os.CreateObject <crmCLegalPerson>();
                                person.INN  = record.PartnerInn;
                                person.KPP  = record.PartnerKpp;
                                person.Name = record.PartnerName;
                                person.AddressLegal.City            = record.PartnerSity;
                                person.AddressLegal.AddressHandmake = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                                person.AddressFact.City             = record.PartnerSity;
                                person.AddressFact.AddressHandmake  = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                                party = person.Party;
                            }
                            if (person.Party.KPP == record.PartnerKpp)
                            {
                                party = person.Party;
                            }
                            else
                            {
                                crmCLegalPersonUnit unit = person.LegalPersonUnits.FirstOrDefault(x => x.KPP == record.PartnerKpp);
                                if (unit == null)
                                {
                                    unit = os.CreateObject <crmCLegalPersonUnit>();
                                    person.LegalPersonUnits.Add(unit);
                                    unit.KPP                         = record.PartnerKpp;
                                    unit.Name                        = record.PartnerName;
                                    unit.AddressFact.City            = record.PartnerSity;
                                    unit.AddressFact.AddressHandmake = "РФ " + record.PartnerSity + " " + record.PartnerAddress;
                                }
                                party = unit.Party;
                            }
                        }
                    }
                    //                        person = os.GetObjects<crmCPerson>(new BinaryOperator("INN", record.PartnerInn)).FirstOrDefault()
                }
                record.PartnerParty = party;
            }
            if (record.InvoiceType == "СЧФ" || record.InvoiceType == "УПД" || record.InvoiceType == "СФА")
            {
                fmCAVTInvoiceBase invoice;

                if (invoice_type == InvoiceType.InvoiceOut)
                {
                    invoice = os.FindObject <fmCAVTInvoiceBase>(
                        CriteriaOperator.And(new BinaryOperator("RegNumber", record.InvoiceRegNumber),
                                             new BinaryOperator("Date", record.InvoiceDate.Date, BinaryOperatorType.GreaterOrEqual),
                                             new BinaryOperator("Date", record.InvoiceDate.Date.AddDays(1), BinaryOperatorType.Less),
                                             new BinaryOperator("Supplier", struct_book.Party)
                                             //                                         new BinaryOperator("Customer", record.PartnerParty)
                                             ), true
                        );
                    if (invoice == null)
                    {
                        invoice           = os.CreateObject <fmCAVTInvoiceBase>();
                        invoice.RegNumber = record.InvoiceRegNumber;
                        invoice.Number    = record.InvoiceNumber;
                        invoice.Date      = record.InvoiceDate;
                        invoice.Supplier  = struct_book.Party;
                        invoice.Customer  = record.PartnerParty;
                    }
                    if (invoice != null)
                    {
                        if (invoice.Customer != record.PartnerParty ||
                            invoice.Supplier != struct_book.Party)
                        {
                            throw new InvalidDataException("Счет фактура с регистрационным номером " + record.InvoiceRegNumber + " уже зарегистрирован с другим партнером " + invoice.Customer.Name);
                        }
                        if (invoice.InvoiceType == null && invoice.Number != null && invoice.Number.Length > 0)
                        {
                            foreach (fmCAVTInvoiceType inv_type in _InvoiceTypes)
                            {
                                if (inv_type.InvoiceDirection == fmAVTInvoiceDirection.AVTInvoiceOut &&
                                    inv_type.Prefix == invoice.Number.Substring(0, 1))
                                {
                                    invoice.InvoiceType = inv_type;
                                }
                            }
                        }
                        invoice.SummCost = record.SummCost;
                        invoice.SummAVT  = record.SummVAT;
                        record.Invoice   = invoice;
                    }
                }
                if (invoice_type == InvoiceType.InvoiceIn)
                {
                    invoice = os.FindObject <fmCAVTInvoiceBase>(
                        CriteriaOperator.And(new BinaryOperator("RegNumber", record.InvoiceRegNumber),
                                             new BinaryOperator("Date", record.InvoiceDate.Date, BinaryOperatorType.GreaterOrEqual),
                                             new BinaryOperator("Date", record.InvoiceDate.Date.AddDays(1), BinaryOperatorType.Less),
                                             //                                         new BinaryOperator("Supplier", record.PartnerParty),
                                             new BinaryOperator("Customer", struct_book.Party)
                                             ), true
                        );
                    if (invoice == null)
                    {
                        invoice           = os.CreateObject <fmCAVTInvoiceBase>();
                        invoice.RegNumber = record.InvoiceRegNumber;
                        invoice.Number    = record.InvoiceNumber;
                        invoice.Date      = record.InvoiceDate;
                        invoice.Supplier  = record.PartnerParty;
                        invoice.Customer  = struct_book.Party;
                    }
                    if (invoice != null)
                    {
                        if (invoice.Supplier != record.PartnerParty ||
                            invoice.Customer != struct_book.Party)
                        {
                            throw new InvalidDataException("Счет фактура с регистрационным номером " + record.InvoiceRegNumber + " уже зарегистрирован с другим партнером " + invoice.Supplier.Name);
                        }
                        invoice.SummCost = record.SummCost;
                        invoice.SummAVT  = record.SummVAT;
                        record.Invoice   = invoice;
                    }
                }
            }
        }
Exemplo n.º 3
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);
                опер.СуммаНДСВычет     = опер.СуммаНДСВычет - опер.СуммаНДССтоимость;
            }
        }
Exemplo n.º 4
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;
            }
            опер.СуммаСтоимость = опер.СуммаВсего - опер.СуммаНДСБаза;
        }
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, Документ строка, 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;
        }
Exemplo n.º 6
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, источник, запись);
            }
        }