/// <summary>Заменяет параметры артикула this, использующиеся для вычислений, на параметры переданного артикула</summary>
        public bool Combine(FiscalArticle Article)
        {
            if (Article != null)
              {
            if (Article.Quantity.Received) Quantity = new DVInt64(Article.Quantity.Value);
            if (Article.PriceWithoutDiscount.Received) PriceWithoutDiscount = new DVInt64(Article.PriceWithoutDiscount.Value);
            if (Article.DiscountForPrice.Received) DiscountForPrice = new DVInt64(Article.DiscountForPrice.Value);
            if (Article.AmountWithoutDiscount.Received) AmountWithoutDiscount = new DVInt64(Article.AmountWithoutDiscount.Value);
            if (Article.DiscountForAmount.Received) DiscountForAmount = new DVInt64(Article.DiscountForAmount.Value);
            if (Article.Bonuses.Received) Bonuses = new DVInt64(Article.Bonuses.Value);
            if (Article.Flags.Received) Flags = new DVFiscalArticleFlags((FiscalArticleFlags)Article.Flags.Value);
            if (Article.paymentType.Received) paymentType = new DVPaymentTypes(Article.paymentType.Value);
              }

              return Fiscal.ErrorMessage.IsEmpty;
        }
        /// <summary>Заменяет параметры чека this, использующиеся для вычислений, на параметры чека FiscalForCombine</summary>
        internal bool Combine(FiscalReceipt FiscalForCombine)
        {
            try
              {
            if (FiscalForCombine != null)
            {
              FiscalReceipt Fiscal = FiscalForCombine.Clone(FiscalForCombine.RSPackage); // клонируем фискальный чек, т.к. мы будем менять в нём платежи

              if (Fiscal.Flags.Received) Flags = new DVFiscalReceiptFlags(Fiscal.Flags.Value);
              if (Fiscal.AmountWithoutDiscount.Received) AmountWithoutDiscount = new DVInt64(Fiscal.AmountWithoutDiscount.Value);
              if (Fiscal.DiscountForAmount.Received) DiscountForAmount = new DVInt64(Fiscal.DiscountForAmount.Value);
              Payments.Combine(Fiscal.Payments);
              Fiscal.Payments = Payments.Clone(Fiscal); // записываем новые платежи (это нужно для поиска позиций в чеке)

              // теперь объединяем артикулы: пробегаем по всем артикулам переданного чека
              int index = 0;
              foreach (FiscalArticle fa in Fiscal.Articles)
              {
            FiscalArticle Analog = null;
            try
            {
              if (fa.GoodsCode.Length != 0 && fa.PaymentType.Value != PaymentTypes.Unknown) // если переданы код и тип оплаты - ищем товар
                Analog = FindArticle(fa); // ищем позицию-аналог
            }
            catch (ArticlePaymentTypeException)
            {
              // игнорируем ошибку, которая может возникнуть при определении PaymentType
            };

            if (Analog == null && index < Articles.Count) // если код или тип оплаты не переданы - получаем аналог по индексу
              Analog = Articles[index];

            if (Analog != null) Analog.Combine(fa); //  если что-то нашли, то объединяем позиции

            index++;
              }

            }
              }
              catch (Exception e) // может произойти при получении типа оплаты позиции фискального чека
              {
            ErrorMessage.Add("Ошибка совмещения фискальных чеков: " + e.Message);
              }

              return ErrorMessage.IsEmpty;
        }