/// <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; }