База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как заполнить ТЧ Рассрочка в 1С 8.3 по кнопке с условиями ввода? › Ответ в теме: Как заполнить ТЧ Рассрочка в 1С 8.3 по кнопке с условиями ввода?
Вот пример функции на 1С 8.3, которая по кнопке «Сформировать» заполнит табличную часть Рассрочка документа РеализацияТоваровУслуг согласно вашим условиям:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
Процедура СформироватьРассрочку() // Очистим табличную часть Рассрочка ЭтотОбъект.Рассрочка.Очистить(); // Получаем значения с формы СуммаРассрочки = ЭтотОбъект.СуммаРассрочки; МесяцевРассрочки = ЭтотОбъект.МесяцевРассрочки; ПервоначальныйВзнос = ЭтотОбъект.ПервоначальныйВзнос; ПервыйМесяц = ЭтотОбъект.ПервыйМесяц; // Проверки на корректность Если МесяцевРассрочки <= 0 Тогда ВызватьИсключение "Количество месяцев рассрочки должно быть больше 0"; КонецЕсли; Если СуммаРассрочки < ПервоначальныйВзнос Тогда ВызватьИсключение "Первоначальный взнос не может быть больше суммы рассрочки"; КонецЕсли; // Рассчитаем остаток суммы для рассрочки после первоначального взноса Остаток = СуммаРассрочки - ПервоначальныйВзнос; // Если месяцев рассрочки больше 1, то распределим остаток равномерно Если МесяцевРассрочки > 1 Тогда СуммаМесячногоПлатежа = Округлить(Остаток / (МесяцевРассрочки - 1), 2); Иначе СуммаМесячногоПлатежа = 0; КонецЕсли; // Заполняем первую запись - первый месяц и первоначальный взнос НоваяСтрока = ЭтотОбъект.Рассрочка.Добавить(); НоваяСтрока.ПериодРассрочки = ПервыйМесяц; НоваяСтрока.Сумма = ПервоначальныйВзнос; // Заполняем остальные месяцы ТекущаяДата = ПервыйМесяц; ОбщаяСумма = ПервоначальныйВзнос; Для НомерМесяца = 2 По МесяцевРассрочки Цикл ТекущаяДата = ДобавитьМесяц(ТекущаяДата, 1); // Для последнего месяца корректируем сумму, чтобы сумма всех платежей была равна СуммаРассрочки Если НомерМесяца = МесяцевРассрочки Тогда СуммаПлатежа = СуммаРассрочки - ОбщаяСумма; Иначе СуммаПлатежа = СуммаМесячногоПлатежа; КонецЕсли; НоваяСтрока = ЭтотОбъект.Рассрочка.Добавить(); НоваяСтрока.ПериодРассрочки = ТекущаяДата; НоваяСтрока.Сумма = СуммаПлатежа; ОбщаяСумма = ОбщаяСумма + СуммаПлатежа; КонецЦикла; КонецПроцедуры |
Объяснение:
— Очищаем табличную часть Рассрочка.
— Берём с формы значения: сумма рассрочки, количество месяцев, первоначальный взнос, первый месяц.
— Первая запись — первый месяц с суммой первоначального взноса.
— Остаток суммы равномерно распределяется по остальным месяцам.
— Для последнего месяца корректируем сумму, чтобы сумма всех платежей была ровно равна общей сумме рассрочки (исключаем ошибки округления).
— Используем функцию ДобавитьМесяц для сдвига даты на следующий месяц.
Если функция ДобавитьМесяц не определена, можно использовать стандартную:
|
1 2 3 |
Функция ДобавитьМесяц(Дата, КоличествоМесяцев) Возврат Новый Дата(Год(Дата), Месяц(Дата) + КоличествоМесяцев, День(Дата)); КонецФункции |
Вызовите процедуру СформироватьРассрочку по нажатию кнопки «Сформировать» на форме документа.