Имя: Пароль:
1C
1С v8
Как посчитать дату, зная, какой будет стаж?
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 месяцев этих периодов переводятся в полные годы.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс