private ShipmentOperation Payment(DateTime date, Money summ, string type = "Payment Debtor") { // определяем комиссию по платежу var commission = this.CalculateCommission(summ); // определяем деньги для поставщика var toCustomer = new ShipmentOperationPartToCustomer(_provider["DateToCustomer"], (summ - commission.Total - commission.Body).NotLess(0)); // создаем операцию оплаты var result = new ShipmentOperation(type, date, summ, this.MakeComment(CommentPayment)) { Commission = commission, ToCustomer = toCustomer }; #region Формируем проводки // погашение долга дебитора string holder = _provider["Holder"]; if (holder.Equals("debtor", StringComparison.InvariantCultureIgnoreCase)) this.AddPosting(ref result, "612 12", "478 03"); else if (holder.Equals("customer", StringComparison.InvariantCultureIgnoreCase)) this.AddPosting(ref result, "612 12", "474 23"); // погашение внебалансовых документов (номинала накладных) this.AddPosting(ref result, "999 99", "914 18"); // погашение внебалансовых поручительств if (_provider["StatusRegress"]) this.AddPosting(ref result, "999 99", "914 14"); // комиссионные проводки if (result.Commission.Total > 0) { // комментарий для комиссионных проводок string comment = this.MakeComment(CommentCommission); // донаращивание комиссии (зачисление комиссии в прибыль) this.AddPosting(ref result, "474 23", "706 01", result.Date, result.Commission.IncreseNeeded, comment, "Standart"); //списание (погашение) донарощенной (только что) комиссии this.AddPosting(ref result, "474 01", "474 23", result.Date, result.Commission.IncreseNeeded, comment, "Commission"); //списание (погашение) уже нарощенной комиссии this.AddPosting(ref result, "474 01", "474 23", result.Date, result.Commission.Increased, comment, "Commission"); //списание (погашение) НДС this.AddPosting(ref result, "474 01", "474 23", result.Date, result.Commission.TotalNDS, comment, "Standart"); // зачисление в НДС this.AddPosting(ref result, "474 23", "603", result.Date, result.Commission.TotalNDS, comment, "Commission"); } // выплата остатка this.AddPosting(ref result, "474 01", "40", result.ToCustomer.Date, result.ToCustomer.Send, result.Comment, "Payment"); // зачитывание остатка (если есть) if (result.ToCustomer.Netting.Summ > 0) this.AddPosting(ref result, "474 01", result.ToCustomer.Netting.Account.Number, result.ToCustomer.Date, result.ToCustomer.Netting.Summ, result.Comment, "Standart"); #endregion return result; }
private ShipmentOperation CustomerFinancing(DateTime date, Money summ) { // номинал накладной (сумма накладной с учетом корректировок) double nominal = _provider["Nominal"]; // определяем комиссию в момент финансирования var commission = new ShipmentCommission(0, _provider["PrepayCommission"] * _provider.GetRate("KP2").Calculate(nominal), 0, 0, 0); // пытаемся использовать наращенную комиссию // обычно такого не бывает, так как финансирум в момент покупки (сразу), когда еще не делали наращивания commission.Increased = this.CalculateIncreased(); // отправлять ли (и списывать соответсвенно) комиссию на 40702 bool sendCommissionToCustomer40702 = _provider["IsCommissionAccount407"]; // определяем деньги для поставщика var toCustomer = new ShipmentOperationPartToCustomer(_provider["DateToCustomer"], (sendCommissionToCustomer40702 ? summ : summ - commission.Total).NotLess(0)); // создаем операцию выплаты финансирования var result = new ShipmentOperation("CustomerFinansing", date, summ, this.MakeComment(CommentCustomerFinancing)) { Commission = commission, ToCustomer = toCustomer }; #region Формируем проводки if (result.Commission.Total > 0) { // комментарий для комиссионных проводок string comment = this.MakeComment(CommentCommission); // комиссионные проводки if (sendCommissionToCustomer40702) { // если мы зачислили финансирование И комиссию на р/с // то нужно теперь комиссию списывать с р/с this.AddPosting(ref result, "40", "474 23", result.Commission.Total, this.MakeComment(CommentCommissionWriteOut), "WriteOut"); } else { // если мы НЕ зачисляли комиссию на р/с, // то ее нужно списывать (рреализовывать) сразу с 47401 //списание (погашение) донарощенной (только что) комиссии this.AddPosting(ref result, "474 01", "474 23", result.Commission.IncreseNeeded, comment, "Commission"); //списание (погашение) уже нарощенной комиссии ранее (скорее всего такой проводки НЕ должно быть, так как еще не было наращивания) this.AddPosting(ref result, "474 01", "474 23", result.Commission.Increased, comment, "Commission"); //списание (погашение) НДС this.AddPosting(ref result, "474 01", "474 23", result.Commission.TotalNDS, comment, "Standart"); } // донаращивание комиссии (зачисление комиссии в прибыль) this.AddPosting(ref result, "474 23", "706 01", result.Commission.IncreseNeeded, comment, "Standart"); // зачисление в НДС this.AddPosting(ref result, "474 23", "603", result.Commission.TotalNDS, comment, "Commission"); } // выплата финансирования this.AddPosting(ref result, "474 01", "40", result.ToCustomer.Date, result.ToCustomer.Send, result.Comment, "Payment"); // зачитывание финансирования (если есть) if (result.ToCustomer.Netting.Summ > 0) this.AddPosting(ref result, "474 01", result.ToCustomer.Netting.Account.Number, result.ToCustomer.Date, result.ToCustomer.Netting.Summ, result.Comment, "Standart"); #endregion return result; }