Beispiel #1
0
            public void Обработать()
            {
                FixedFileEngine   engine      = new FixedFileEngine(typeof(InvoiceImport));
                InvoiceImport     data        = (InvoiceImport)engine.ReadString(Буфер)[0];
                IObjectSpace      os          = CommonMethods.FindObjectSpaceByObject(this);
                fmCAVTInvoiceType sf_sfz_type = os.GetObjects <fmCAVTInvoiceType>().First(x => x.Prefix == "Z");

                СтрокаОснов.ProcessLine(os, this, data, sf_sfz_type);
            }
Beispiel #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";
            }
Beispiel #3
0
        static public void ImportInvoices(IObjectSpace os, ДокИмпортОснований док, TextReader reader)
        {
            FixedFileEngine engine = new FixedFileEngine(typeof(InvoiceImport));
            String          line;

            os.Delete(док.Основания);
            fmCAVTInvoiceType sf_sfz_type = os.GetObjects <fmCAVTInvoiceType>().First(x => x.Prefix == "Z");

            while ((line = reader.ReadLine()) != null)
            {
                InvoiceImport data = (InvoiceImport)engine.ReadString(line)[0];
                if (data.SF_IO_TYPE.Trim() == String.Empty)
                {
                    continue;
                }
                СтрокаОснов строка = os.CreateObject <СтрокаОснов>();
                док.Основания.Add(строка);
                строка.БуферУст(line);
                СтрокаОснов.ImportLine(os, строка, data);
                СтрокаОснов.ProcessLine(os, строка, data, sf_sfz_type);
            }
            reader.Close();
        }
Beispiel #4
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;
            }