Имя: Пароль:
IT
 
Задачка: Вычислить количество 31 декабрей високосных годов в заданном периоде.
, ,
0 Кокос
 
17.12.14
10:53
Задачка из сабжа возникла из начислений % годовых за кредит/займ. Причем клиент не хочет чтобы високосность года влияла на сумму начисления. Чтобы начислялась как будто високосных лет нет.

Может кто решал задачку? А если нет то подскажите как это решить :) Я так думаю надо просто вычитывать из расчетного периода(он по условиям договора может содержать и несколько лет) 31ые декабря високосных годов. ибо даже в високосном году пока конец года не наступил эта проблема не наступает.
1 Гёдза
 
17.12.14
10:54
а почему должна влиять? Просто дневной процент в високосный год чуть меньше
2 Лефмихалыч
 
17.12.14
10:56
Количество високосных лет = РазностьДат(Началопериода, КонецПериода, Год)%4;
3 palpetrovich
 
17.12.14
10:57
задача в сабже не соотвествует задаче в теме :)
4 Кокос
 
17.12.14
10:58
(1) допустим 500000 кредит. в год 25000 годовых. в в высокосный будет больше. а надо чтобы до копейки было одинаково. проблем не былобы еслибы они начисляли строго 31го декабря. а они могу в любое время начислить. даже через 3-5 лет. сейчас они делают в экселе. и там тупо руками ставят -1. я им сделал в 1Се. и вот всплыло. я вроде решение нашел.

(2) а оно равно количествую 31х декабрей? а если  конецпериода до 31го декабря?
5 Кокос
 
17.12.14
10:58
(3) аргументируй :)
6 Лефмихалыч
 
17.12.14
10:59
+(2) точнее Цел(/) и надо еще надо учесть +1, если начало или/и конец периода високосные
7 Кокос
 
17.12.14
11:01
(1) если ввести понятие "дневной %" то появятся копейки
8 dmpl
 
17.12.14
11:01
(4) В обычный год делим 25000 на 365, в високосный - на 366. Получаем дневные. Ну или надо считать количество 29 февраля, а вовсе не 31 декабря. Этот же день выбрасывается.
9 dmpl
 
17.12.14
11:01
(7) А вы не вводите, а просто считайте внутри.
10 Кокос
 
17.12.14
11:03
(7) копейки возникнут в результате а не при вводе
11 Кокос
 
17.12.14
11:05
(8) в случае если проценты внутри високосного начисляются несколько раз вычет -1 должен происходить 1 раз. мне кажется логичнее это делать 31го декабря.
12 palpetrovich
 
17.12.14
11:08
(5) сабж решается просто, достаточно знать хоть один высокосный год и то их периодичность, а тема - посложнее, вот лично мне даже лень вникать  :)
13 Йохохо
 
17.12.14
11:12
(11) ДоначислитьЗаОчереднойДень = Сумма*%/ДнейСНачалаГодаСегодня - СуммаНачисленоПоВчера
14 aka AMIGO
 
17.12.14
11:12
високосные года определяются просто: они делятся на 4 без остатка
15 dmpl
 
17.12.14
11:12
(10) Используйте нормальную точность - никаких копеек не будет.

(11) Эт почему? В феврале же меняется количество дней, а не в декабре.

(12) Да-да-да, только вот из периодичности есть исключения ;)
16 dmpl
 
17.12.14
11:13
(14) 1900-й год хоть и делится на 4, а не високосный...
17 Кокос
 
17.12.14
11:14
КоличествоВисокосныхЛет = Цел(РазностьДат(Началопериода, КонецПериода, Год)/4);
ВычестьДней = КоличествоВисокосныхЛет;
Если День(НачалоПериода) = 31 и Месяц(НачалоПериода)  = 12 и ГодДатыВысокосный(НачалоПериода) Тогда
    ВычестьДней = ВычестьДней+1;
КонецЕсли;

Если День(КонецПериода) < 31 и Месяц(НачалоПериода) < 12 и ГодДатыВысокосный(КонецПериода) Тогда
    ВычестьДней = ВычестьДней-1;
КонецЕсли;

может так?:)
18 palpetrovich
 
17.12.14
11:15
(14) в смысле? 2012 - высокосный, делится на 4 без остатка, 2000 -не, но тоже делится :) ...или имеется ввиду количесвто дней в году?
(15) упс, а что за исключения?
19 бомболюк
 
17.12.14
11:17
2000 тоже был високосный
20 dmpl
 
17.12.14
11:17
(18) Ну те, которые делятся на 100, но не делятся на 400.
21 бомболюк
 
17.12.14
11:17
это 1900 например не был
22 aka AMIGO
 
17.12.14
11:20
23 Кокос
 
17.12.14
11:24
MOD( YEAR( date ), 400 ) = 0,
  AND(
   MOD( YEAR( date ), 4 ) = 0,
    MOD( YEAR( date ), 100 ) != 0

MOD это %?
Я просто редко этими операторами пользуюсь
24 palpetrovich
 
17.12.14
11:34
(19) хотел 2010 написать, ашипся :)
25 Кокос
 
17.12.14
11:36
(20) вообще думаю в ближайшие 80 лет можно на 4 делить ) а там уже 1С 80.3 будет :)
26 dmpl
 
17.12.14
11:39
(25) Вот из-за таких программистов и была "Проблема 2000" ;)
27 palpetrovich
 
17.12.14
11:43
(25)  1С80.3 не будет, после 1с8.8 будет 1С9.0. ...но это не скоро :)
28 Кокос
 
17.12.14
11:50
(15) а чо в 1С  уже 3*(10/3) = 10 ?
29 dmpl
 
17.12.14
11:54
(28) Используй Окр(3*(10/3), 2). Ваш КЭП.
30 Кокос
 
17.12.14
11:56
(29) не всегда правда. это я еще при расчетах НДС в свое время увидел :)
31 Ненавижу 1С
 
гуру
17.12.14
11:56
(2) не забыть про 2100 год
32 Кокос
 
17.12.14
11:57
(31) 2100 год не акутален :)
33 Кокос
 
17.12.14
11:57
*актуален
34 dmpl
 
17.12.14
11:58
(30) Для расчета суммы процентов хватит. Чай не НДС с многочисленными перерасчетами и неявными округлениями.
35 dmpl
 
17.12.14
12:01
А вообще, какая разница в отношении округления? Результат по-любому не сойдется. Проверь 365*(25000/365).
36 Кокос
 
17.12.14
12:08
(350)
вопрос не в том чтобы сошлось а в том чтобы каждый год была одна сумма с одинаковыми копейками
37 dmpl
 
17.12.14
12:17
(36) За год должно быть ровно 25000. Ни копейкой больше, ни копейкой меньше.
38 Drac0
 
17.12.14
12:20
(0) А кто ваш клиент? Он вообще в курсе, что это немного неправильно?
39 Кокос
 
17.12.14
12:46
(38)
- коммерческая тайна.
- такие у них правила по договору

(37) если допустим они в течении года(при изменении тела кредита) несколько раз начисляли процент на сумму до изменения тела(погашение, получение доп сумм) то ошибки округления появятся обязательно даже если тело не менялось но процент начислялся несколько раз
40 dmpl
 
17.12.14
12:52
(39) Выбрасывание дня дает гораздо бОльшую ошибку в таком случае. Фактически, если закрыть последний платеж 30 декабря - на проценты за 1 день. Считают всегда либо 1/365 от суммы за год, либо 1/366. Никаких выброшенных дней.
41 Drac0
 
17.12.14
12:52
(39) Мне имя не интересно, если это финансовая организация, то этот процесс регламентируется ГК РФ и указом ЦБ.