|
Распределить остаток отпуска по периодам |
☑ |
0
егаис
11.06.22
✎
15:58
|
Коллеги, не нравится код, хоть убейте.
Как бы вы решили задачу распределения остатка отпуска по периодам (для документа остатки отпусков в ЗУП)
На входе общий остаток отпуска (инвентаризацию провели) и дата ввода отпуска. На примере основного отпуска.
ДатаОстатковОтпусков = Дата(2022,04,30);
ГраницаОкончание = ДатаОстатковОтпусков;
ГраницаНачало = ?(Месяц(ДатаПриема) > Месяц(ДатаОстатковОтпусков), Дата(2021, Месяц(ДатаПриема), День(ДатаПриема)), Дата(2022, Месяц(ДатаПриема), День(ДатаПриема))); //учитываем факт, что дата приема может быть раньше 30.04, тогда отрезок за 22 год
Пока ОстатокОсновной > 0 Цикл
РазницаВДнях = (НачалоДня(ГраницаОкончание) - НачалоДня(ГраницаНачало)) / (60 * 60 * 24) + 1;
ПоложеноОтпускаЗаПериод = 28 / 365 * РазницаВДнях;
ОстатокКРаспределению = Мин(ПоложеноОтпускаЗаПериод, ОстатокОсновной);
ОстатокОсновной = ОстатокОсновной - ОстатокКРаспределению;
ГраницаОкончания = ГраницаНачало - 86400;
ГраницаНачало = Макс(ДатаПриема, ДобавитьМесяц(ГраницаНачало, -12));
КонецЦикла;
|
|
1
Amra
11.06.22
✎
16:39
|
Выкинуть весь код нафиг. Ибо неверный алгоритм. Вот тут - ПоложеноОтпускаЗаПериод = 28 / 365 * РазницаВДнях;
А значит и все остальное в топку
|
|
2
егаис
14.06.22
✎
07:04
|
(1)хотелось бы узнать почему "весь код нафиг"?
На примере, остаток 40 дней, сотрудник принят 15.06.19 г
по алгоритму
Первый период равен 15.06.21 - 30.04.22, остаток по распределению = 28 / 365 * 285 = 21,86
|
|
3
егаис
14.06.22
✎
07:05
|
Второй период 15.06.20 - 14.06.21, остаток = мин(18.14, 28 / 365 * 365) = 18.14
|
|
4
hhhh
14.06.22
✎
09:27
|
(3) но вы сами придумали эту формулу? По законодательству ведь другие цифры. И там дробей вообще нет. Например, человек отгулял 10 дней за рассматриваемый период, всего за период положено 28 дней, значит, ему осталось 18 дней. Откуда у вас дроби взялись. Да еще 14 сотых.
|
|
5
егаис
14.06.22
✎
09:33
|
(4) дроби вторичны, можно и округлить, не суть.
Задача раскидать остаток отпуска по годам от обратного.
Поэтому и спрашиваю, что не уверен.
|
|
6
егаис
14.06.22
✎
09:36
|
сам код рабочий, вопросов нет. Сам подход насколько верен, это интересует
|
|
7
pavlika
14.06.22
✎
09:56
|
Где проверка, что одна часть отпуска не меньше 14 дней? Где проверка на отпуска за свой счет свыше 14 дней, прогулы и отпуска по уходу, которые увеличиват рабочиц год?
|
|
8
pavlika
14.06.22
✎
10:11
|
|
|
9
SleepyHead
гуру
14.06.22
✎
10:19
|
А чем стандартный алгоритм не устраивает?
|
|
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой