public FiscalReceipt(RSPackageInfo RSPackage)
        {
            this.RSPackage = RSPackage;
              this.Articles = new List<FiscalArticle>();
              this.Payments = new FiscalPayments(this);

              PaymentsReceived = false;
              WasCalculated = false;
        }
        /// <summary>Клонировать фискальный чек</summary>
        public FiscalReceipt Clone(RSPackageInfo rspackage)
        {
            BinaryFormatter BF = new BinaryFormatter();
              MemoryStream MS = new MemoryStream();
              BF.Serialize(MS, this);
              MS.Seek(0, SeekOrigin.Begin);

              FiscalReceipt Result = (FiscalReceipt)BF.Deserialize(MS);
              MS.Close();
              Result.RSPackage = rspackage;
              Result.Payments = this.Payments.Clone(Result);
              Result.Articles.Clear();
              foreach (FiscalArticle Article in this.Articles)
            Result.Articles.Add(Article.Clone(Result));
              return Result;
        }
        /// <summary>Result = A-B</summary>
        public static FiscalReceipt Substract(RSPackageInfo RSP, FiscalReceipt A, FiscalReceipt B)
        {
            var Result = A.Clone(RSP);
              Result.AmountWithoutDiscount.Value = A.Amount - B.Amount;
              Result.DiscountForAmount.Value = 0;
              Result.Payments = FiscalPayments.Substract(Result, A.Payments, B.Payments);
              for (int i = 0; i < A.Articles.Count; i++)
            for (int j = 0; j < B.Articles.Count; j++)
              if (A.Articles[i].IsAnalog(B.Articles[j]))
            Result.Articles[i] = FiscalArticle.Substract(Result, A.Articles[i], B.Articles[j]); // это пройдёт, т.к. Result - клон A
              return Result;

              //throw new Exception("FiscalReceipt Substract is not implemented now");
            /*      FiscalReceipt Result = Param2.Clone(), Param = Param1.Clone();
              /*Result.Amount = Result.AmountDiscount;
              Result.Discount = 0;
              Param.Amount = Param.AmountDiscount;
              Param.Discount = 0;*/
              /*Result.AmountWithoutDiscount -= Param.AmountWithoutDiscount;
              //Result.Discount = Param1.Discount;
              Result.Payments.ChangeAmount(Result.Payments.Amount - Param.Payments.Amount);

              foreach (FiscalArticle Article1 in Param.Articles)
            foreach (FiscalArticle Article2 in Result.Articles)
              if (Article1.GoodsCode == Article2.GoodsCode)
              {
            Article2.Quantity -= Article1.Quantity;
            Article2.AmountWithoutDiscount -= Article1.AmountWithoutDiscount;
            Article2.DiscountForAmount = Article1.DiscountForAmount;
            //Article2.Bonuses -= Article1.Bonuses;
            // Rounded потому что из-за Казахстана
            Article2.Bonuses = Article2.BonusesRounded - Article1.BonusesRounded;
              }

              return Result;*/
        }