|
Как посчитать дату, зная, какой будет стаж? | ☑ | ||
---|---|---|---|---|
0
snegovik
23.04.12
✎
13:50
|
Задача, обратная распространенной теме о нахождении неизвестного стажа на известную дату:
Имеются сотрудники, у них известен стаж на определенную дату, такого вида: 01.04.2012 Иванов: 3 г. 5 мес. 17 дн. Нужно узнать, когда у сотрудника будет 5 лет стажа, когда будет 10 лет и т.п. Что-то я парюсь, дайте намек, как сделать, что от чего отнять и прибавить. И если просто арифметически прибавлять - то не будет ли искажение даты из-за високосных годов и праздников? |
|||
1
Steel_Wheel
23.04.12
✎
13:51
|
(0) Зафиксируй дату начала стажа на основе имеющихся данных.
Теперь проблема имеет типовое решение |
|||
2
Wobland
23.04.12
✎
13:51
|
месяцы добавляй
|
|||
3
vmv
23.04.12
✎
13:57
|
по имеющемуся стажу вычисляем дату начала стажа
рассчитываем секунды на период прогрнозного стажа прибавляем секудны к начальной дате получем дату окончания прогнозного стажа все |
|||
4
snegovik
23.04.12
✎
14:02
|
(3) А почему секунды прибавляем в конце, а не года?
|
|||
5
Птах
23.04.12
✎
14:04
|
ДобавитьМесяц(<Дата>, <Число месяцев>) религия не позволяет?
|
|||
6
snegovik
23.04.12
✎
14:06
|
(5) Надо с точностью до дня.
|
|||
7
snegovik
23.04.12
✎
14:34
|
Вот нарисовал, жду комментариев:-)
Процедура РассчитатьСтажиНажатие(Элемент) Выборка = Справочники.Стажи.Выбрать(); Пока Выборка.Следующий() Цикл ДатаНачалаСтажа = Дата(2012, 4, 1) - Выборка.Лет * 365 * 86400 - Выборка.Месяцев * 30 * 86400 - Выборка.Дней * 86400; ДатаПятьЛет = ДатаНачалаСтажа + 5 * 365 * 86400; КонецЦикла; КонецПроцедуры |
|||
8
snegovik
23.04.12
✎
14:35
|
Правильно ли умножать на 30, когда высчитываю месяцы?
|
|||
9
Wobland
23.04.12
✎
14:37
|
(8) и на 365 зря умножаешь
|
|||
10
Птах
23.04.12
✎
14:50
|
(6) Ты упоротый? К дате начала стажа прибавляешь стаж в годах, умноженный на 12, плюс месяцы, потом дни*86400. А в (7) херня какая-та.
|
|||
11
spu79
23.04.12
✎
14:53
|
во первых надо сразу избавиться от дней (отмотать до полного месяца). т.е. смотреть надо на 13.03.2012, когда стаж будет 3г 5 мес.
Далее, кол-во месяцев в годе неизменно, бери разницу между искомым стажем (5 лет) и текущим 3г5м = 1г7м.= 19 мес. а дальше как указал (5). все! |
|||
12
Птах
23.04.12
✎
14:57
|
Че-та вы сложные какие-та... Разжую:
НужнаяДата = ДобавитьМесяц(ИсходнаяДата, ЛетСтажа*12+МесяцевСтажа)+ДнейСтажа*86400; Усё. |
|||
13
spu79
23.04.12
✎
15:02
|
(12) - а что будет в переменной ДнейСтажа?
|
|||
14
snegovik
23.04.12
✎
15:02
|
(10) Я это и делаю - мне нужно узнать, когда будет 5 лет стажа от даты начала стажа.
|
|||
15
snegovik
23.04.12
✎
15:07
|
(12) И что это даст? В примере получится:
НужнаяДата = 3 * 12 + 5 + 17 * 86400. Ну и в итоге просто получится удвоенный стаж. |
|||
16
Fish
23.04.12
✎
15:09
|
(14) Тогда просто ДобавитьМесяц(ИсходнаяДата, 5*12) И всё.
|
|||
17
Fish
23.04.12
✎
15:12
|
+(16) Только в (7) ДатаНачалаСтажа у тебя тоже неправильно рассчитана :))
|
|||
18
snegovik
23.04.12
✎
15:26
|
Критикуйте:
Выборка = Справочники.Стажи.Выбрать(); Пока Выборка.Следующий() Цикл ДатаОкругленнаяБезДнейСтажа = Дата(2012, 4, 1) - Выборка.Дней * 86400; ДатаНачалаСтажа = ДобавитьМесяц(ДатаОкругленнаяБезДнейСтажа, - (Выборка.Лет * 12 + Выборка.Месяцев)); ДатаПятьЛет = ДобавитьМесяц(ДатаНачалаСтажа, 5 * 12); Сообщить(ДатаПятьЛет); КонецЦикла; |
|||
19
snegovik
23.04.12
✎
15:27
|
В справочнике "Стажи" числовые реквизиты - "Лет", "Месяцев", "Дней". Они забиты на дату 01.04.2012.
|
|||
20
snegovik
23.04.12
✎
18:30
|
Гуру, дайте свой едкий комментарий по последнему коду))
|
|||
21
Птах
24.04.12
✎
09:02
|
Убейся ап стену, дятел. Забаньте меня, но я не мог это не сказать.
|
|||
22
snegovik
25.04.12
✎
08:26
|
(21) От дятла слышал. Хочешь сказать, что ты, когда начинал программировать, слёту всё делал? Я вежливо попросил комментариев и советов. Или у вас в Кузне все такие хамы из-за экологии?
|
|||
23
SeraFim
25.04.12
✎
08:43
|
(18) в целом, правильно. Чисто с бытовой точки зрения)
Вот только правильно ли считать так стаж? Кадровики мне говорили (даже ссылку на какое-то постановление приводили), что в месяце надо считать 30 дней |
|||
24
snegovik
25.04.12
✎
08:51
|
(23) Вот я тоже в этом моменте методическом моменте сомневаюсь) На мой взгляд, функцией "ДобавитьМесяц" наиболее приближенная к реальности ситуация получается, так как добавляет не дни (которые в разных месяцах могут быть разными), а именно месяцы.
|
|||
25
SeraFim
25.04.12
✎
08:53
|
ПОСТАНОВЛЕНИЕ
от 24 июля 2002 г. N 555 ОБ УТВЕРЖДЕНИИ ПРАВИЛ ПОДСЧЕТА И ПОДТВЕРЖДЕНИЯ СТРАХОВОГО СТАЖА ДЛЯ УСТАНОВЛЕНИЯ ТРУДОВЫХ ПЕНСИЙ VII. Порядок подсчета страхового стажа 35. Исчисление периодов работы, в том числе на основании свидетельских показаний, и (или) иной деятельности, а также иных периодов, предусмотренных пунктом 1 настоящих Правил, производится в календарном порядке из расчета полного года (12 месяцев). При этом каждые 30 дней указанных периодов переводятся в месяцы, а каждые 12 месяцев этих периодов переводятся в полные годы. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |