protected Posting AddPosting(ref ShipmentOperation operation, string debt, string cred, DateTime date, Money summ, string comment = "", string type = "Standart") { var accDebt = _provider.GetAccount(debt); var accCred = _provider.GetAccount(cred); var posting = new Posting(type, accDebt, accCred, date, summ, String.IsNullOrEmpty(comment) ? operation.Comment : comment); operation.AddPosting(posting); return posting; }
protected Posting AddPosting(ref ShipmentOperation operation, string debt, string cred) { return this.AddPosting(ref operation, debt, cred, operation.Date, operation.Summ, operation.Comment, "Standart"); }
protected Posting AddPosting(ref ShipmentOperation operation, string debt, string cred, Money summ, string comment = "", string type = "Standart") { return this.AddPosting(ref operation, debt, cred, operation.Date, summ, comment, type); }
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 IncreasedCommission(DateTime date, Money summ) { // определяем комиссию в момент финансирования var commission = this.CalculateCommission(summ); // создаем операцию наращивания var result = new ShipmentOperation("IncreasedCommission", date, summ, this.MakeComment(CommentIncreasedCommission)) { Commission = commission }; #region Формируем проводки // наращивание комиссии в прибыль this.AddPosting(ref result, "474 23", "706 01", result.Commission.IncreseNeeded); #endregion return result; }
private ShipmentOperation DocumentsIncome(DateTime date, Money summ) { // определяем комиссию МИТ var commission = new ShipmentCommission(0, 0, 0, 0, 0, 0, _provider.GetRate("MIT").Calculate(summ)); // создаем операцию примема документов var result = new ShipmentOperation("DocumentsIncome", date, summ, this.MakeComment(CommentDocumentsIncome)) { Commission = commission }; #region Формируем Проводки // стандартная проводка покупки задолженности this.AddPosting(ref result, "478 03", "474 01"); // Забалансовый счет. Отражается прием документов в учете банка (учет суммы купленного документа) this.AddPosting(ref result, "914 18", "999 99"); // Забалансовый счет. Отражается учет поручительства (учет суммы документа поручительства) if (_provider["StatusRegress"]) this.AddPosting(ref result, "914 14", "999 99"); #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; }