Форум программистов, компьютерный форум, киберфорум
Maks
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Кредитный калькулятор

Запись от Maks размещена Вчера в 07:22. Обновил(-а) Maks Вчера в 15:49 (Дополнение)
Показов 473 Комментарии 0

Решение задачи по прикладной информатике средствами 1С.

Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов платежей: ежемесячный платёж, общую сумму выплат и переплату по процентам.

Решение:
Создано расширение конфигурации, в данном расширении создано перечисление "ВидыПлатежей" со значениями "Аннуитетный" и "Дифференцированный".
Создана обработка со следующими реквизитами:
- ВидПлатежа (ПеречислениеСсылка.КК_ВидыПлатежей);
- СуммаЗайма (Число 10, 2);
- ПроцентнаяСтавка (Число 10, 2);
- ПервоначальныйВзнос (Число 10, 2);
- СрокКредита (Число 10, 2);
- ЕжемесячныйПлатеж (Строка, 20);
- СуммаВсехПлатежей (Число 10, 2);
- НачисленныеПроценты (Число 10, 2);

Создана форма обработки, на форме созданы команды "Рассчитать" и "Очистить".

Листинг:
1C
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
&НаКлиенте
Процедура Рассчитать(Команда) 
    ОчиститьСообщения();
    РассчитатьНаСервере(); 
КонецПроцедуры 
 
&НаСервере
Процедура РассчитатьНаСервере()     
    Если Объект.СуммаЗайма = 0 ИЛИ Объект.СрокКредита = 0
        ИЛИ Объект.ПроцентнаяСтавка = 0 Тогда 
        Сообщить("Заполнены не все обязательные поля."); 
        Возврат;
    КонецЕсли;
    
    Если ЗначениеЗаполнено(Объект.ВидПлатежа) Тогда   
        Если Объект.ВидПлатежа = Перечисления.КК_ВидыПлатежей.Аннуитетный Тогда
            РассчитатьАннуитетный();
        Иначе
            РассчитатьДифференцированный();
        КонецЕсли;  
    Иначе
        Сообщить("Необходимо выбрать тип платежа");
        Возврат;
    КонецЕсли;
КонецПроцедуры
 
&НаСервере
Процедура РассчитатьАннуитетный()         
    ЕП = 0;
    
    Ставка = Объект.ПроцентнаяСтавка;  
    СрокМесяцев = Объект.СрокКредита;    
    Взнос = Объект.ПервоначальныйВзнос;  
    СуммаКредита = Объект.СуммаЗайма - Взнос;
    
    Если СрокМесяцев = 0 ИЛИ СуммаКредита = 0 Тогда
        Возврат;
    КонецЕсли;
    
    МесячнаяСтавка = Ставка / 12 / 100; 
    
    Если Объект.ПроцентнаяСтавка = 0 Тогда
        ЕП = СуммаКредита / СрокМесяцев; 
    Иначе
        Степень = Pow(1 + МесячнаяСтавка, СрокМесяцев);
        Множитель = (МесячнаяСтавка * Степень) / (Степень - 1);
        ЕП = СуммаКредита * Множитель;
    КонецЕсли;
    
    Объект.ЕжемесячныйПлатеж = Окр(ЕП, 2);
    Объект.СуммаВсехПлатежей = ЕП * СрокМесяцев;
    Объект.НачисленныеПроценты = Объект.СуммаВсехПлатежей - СуммаКредита;   
КонецПроцедуры 
 
&НаСервере
Процедура РассчитатьДифференцированный()   
    Ставка = Объект.ПроцентнаяСтавка;
    СрокМесяцев = Объект.СрокКредита;
    СуммаКредита =  Объект.СуммаЗайма - Объект.ПервоначальныйВзнос;
    
    Если СрокМесяцев = 0 Или СуммаКредита = 0 Тогда
        Возврат;
    КонецЕсли;
    
    МесячнаяСтавка = Ставка / 12 / 100;
    
    ДТ = СуммаКредита / СрокМесяцев;   
    ЕП = ДТ + СуммаКредита * МесячнаяСтавка;
    ЕП = Окр(ЕП, 2);
    
    ПроцентыПоследний = ДТ * МесячнаяСтавка; 
    ПоследнийПлатеж = ДТ + ПроцентыПоследний; 
    СуммаВсехПлатежей = (ЕП + ПоследнийПлатеж) * СрокМесяцев / 2;
    СуммаВсехПлатежей = Окр(СуммаВсехПлатежей, 2); 
    НачисленныеПроценты = СуммаВсехПлатежей - СуммаКредита;
    НачисленныеПроценты = Окр(НачисленныеПроценты, 2);
    
    Если ЕП = ПоследнийПлатеж Тогда
        Объект.ЕжемесячныйПлатеж = ЕП;  
    Иначе
        Объект.ЕжемесячныйПлатеж = "от " + Формат(ЕП, "ЧЦ=15; ЧДЦ=2; ЧГ= ") + 
                                     " до " + Формат(ПоследнийПлатеж, "ЧЦ=15; ЧДЦ=2; ЧГ= ");
    КонецЕсли;
 
    Объект.СуммаВсехПлатежей = СуммаВсехПлатежей;
    Объект.НачисленныеПроценты = НачисленныеПроценты;   
КонецПроцедуры
 
&НаСервере
Процедура ОчиститьНаСервере() 
    Объект.ЕжемесячныйПлатеж = "";
    Объект.СуммаВсехПлатежей = 0;
    Объект.НачисленныеПроценты = 0;
    Объект.ПервоначальныйВзнос = 0;
    Объект.ПроцентнаяСтавка = 0;
    Объект.СуммаЗайма = 0;
    Объект.СрокКредита = 0; 
    Объект.ВидПлатежа = Перечисления.КК_ВидыПлатежей.ПустаяСсылка();  
КонецПроцедуры
 
&НаКлиенте
Процедура Очистить(Команда)
    ОчиститьНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ВидПлатежаПриИзмененииНаСервере()     
    Объект.ЕжемесячныйПлатеж = "";
    Объект.СуммаВсехПлатежей = 0;
    Объект.НачисленныеПроценты = 0;
КонецПроцедуры
 
&НаКлиенте
Процедура ВидПлатежаПриИзменении(Элемент)
    ВидПлатежаПриИзмененииНаСервере();
КонецПроцедуры
Результат:
Нажмите на изображение для увеличения
Название: Аннуитетный.jpg
Просмотров: 19
Размер:	34.1 Кб
ID:	11961 Нажмите на изображение для увеличения
Название: Дифференцированный.jpg
Просмотров: 21
Размер:	32.4 Кб
ID:	11962

Расширение: КредитныйКалькулятор.zip

Контрольная сумма: 6EZoOWzK7v9iWQ+rElrsdS+D+O4=
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru