![]() |
![]() |
![]() |
|
Подсчет стажа, перевод дней в года месяцы и дни. | ☑ | ||
---|---|---|---|---|
0
gkvgkv
15.09.10
✎
08:10
|
Кадровики попросили сделать такую бяку. Сами они считают по принципу что в месяце 30 дней соответстенно в году 12 месяцев. Правильно ли это.
|
|||
1
Дикообразко
15.09.10
✎
08:13
|
че работать не хочется?
|
|||
2
Нуф-Нуф
15.09.10
✎
08:25
|
разница дат
|
|||
3
zak555
15.09.10
✎
08:26
|
(0) нет
|
|||
4
zak555
15.09.10
✎
08:30
|
в 7ке там считается, в 8ке в общих модулях не нашёл :
//****************************************************************************** // глФормаМножественногоЧисла(Слово1,Слово2,Слово3,ЦелоеЧисло) // // Параметры: // Слово1 - форма слова в ед числе ("шкаф") // Слово2 - форма слова для числит 2-4 ("шкафа") // Слово3 - форма слова для числит 5-10 ("шкафов") // ЦелоеЧисло - целое число // // Возвращаемое значение: // строку - одну из строк в зависимости от параметра ЦелоеЧисло // // Описание: // Предназначена для формирования "правильной" подписи к числительным // Функция глФормаМножественногоЧисла(Слово1,Слово2,Слово3,ЦелоеЧисло) Экспорт Если ЦелоеЧисло <> Цел(ЦелоеЧисло) Тогда // для нецелых чисел - всегда вторая форма Возврат Слово2; КонецЕсли; Остаток = ЦелоеЧисло%10; Если (ЦелоеЧисло>10)и(ЦелоеЧисло<20) Тогда // для второго десятка - всегда третья форма Возврат Слово3; ИначеЕсли Остаток=1 Тогда Возврат Слово1; ИначеЕсли (Остаток>1)и(Остаток<5) Тогда Возврат Слово2; Иначе Возврат Слово3; КонецЕсли; КонецФункции // глФормаМножественногоЧисла //****************************************************************************** // глРазобратьРазностьДат(Дата1,Дата2,Лет,Месяцев,Дней) // // Параметры: // Дата1 - первая дата // Дата2 - вторая дата // Лет - в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) // Месяцев - в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) // Дней - в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2) // // Описание: // Процедура разбирает две даты и возвращает в параметрах кол-во лет, месяцев и дней // между двумя датами (Дата1-Дата2) // Процедура глРазобратьРазностьДат(Знач Дата1,Знач Дата2,Лет=0,Месяцев=0,Дней=0) Экспорт Лет = 0; Месяцев = 0; Дней = 0; Если Дата1 > Дата2 Тогда Год1 = ДатаГод(Дата1); Год2 = ДатаГод(Дата2); Месяц1 = ДатаМесяц(Дата1); Месяц2 = ДатаМесяц(Дата2); Число1 = ДатаЧисло(Дата1); Число2 = ДатаЧисло(Дата2); Если Число1 < Число2 Тогда Дней = НачМесяца(Дата1) - НачМесяца(ДобавитьМесяц(Дата1,-1)); Месяц1 = Месяц1 - 1; КонецЕсли; Дней = Дней + Число1 - Число2; // Дней ( до исполнения строки) - заем из Месяцев Если Месяц1 < Месяц2 Тогда Месяцев = 12; Год1 = Год1 - 1; КонецЕсли; Месяцев = Месяцев + Месяц1 - Месяц2; // Месяцев ( до исполнения строки) - заем из Лет Лет = Год1 - Год2; КонецЕсли; КонецПроцедуры // глРазобратьРазностьДат() //****************************************************************************** // глПредставлениеСтажа(ДатаСтажа,ТекстСтажа,Лет,Месяцев,Дней) // // Параметры: // ДатаСтажа - дата стажа // ТекстСтажа - текст стажа (если выбран стаж, то передается дата преобразованная в текст) // Лет - в этот параметр будет записано кол-во лет между двумя датами (ТекстСтажа и ДатаСтажа) // Месяцев - в этот параметр будет записано кол-во месяцев между двумя датами (ТекстСтажа и ДатаСтажа) // Дней - в этот параметр будет записано кол-во дней между двумя датами (ТекстСтажа и ДатаСтажа) // // Возвращаемое значение: // представление стажа, заданного двумя параметрами ДатаСтажа и ТекстСтажа // // Описание: // Функция формирует и возвращает представление стажа. // Функция глПредставлениеСтажа(Знач ДатаСтажа,ТекстСтажа,Лет=0,Месяцев=0,Дней=0) Экспорт Лет = 0; Месяцев = 0; Дней = 0; // если в тексте стажа пустая строка, то стаж не задан Если ПустаяСтрока(ТекстСтажа)=1 Тогда Возврат "<<Стаж не задан>>" КонецЕсли; глРазобратьРазностьДат(ДатаСтажа,Дата(ТекстСтажа),Лет,Месяцев,Дней); Возврат "" +Лет +" "+глФормаМножественногоЧисла("год","года","лет",Лет) +" "+Месяцев+" "+глФормаМножественногоЧисла("месяц","месяца","месяцев",Месяцев) +" "+Дней +" "+глФормаМножественногоЧисла("день","дня","дней",Число(Дней)) КонецФункции // глПредставлениеСтажа |
|||
5
gkvgkv
15.09.10
✎
08:37
|
Калькулятор подсчёта трудового стажа on-line
Программа «Калькулятор подсчёта трудового стажа on-line» разработана для того чтобы облегчить подсчет страхового (и иного трудового стажа). При ее создании учитывались требования ПРИКАЗА Минздравсоцразвития РФ от 06.02.2007 № 91 «Об утверждении правил подсчета и подтверждения страхового стажа для определения размеров пособий по временной нетрудоспособности, по беременности и родам». Расчет производится в календарном порядке, учитывается, что каждые 30 дней переводятся в полные месяцы, а каждые 12 месяцев – в полные года. |
|||
6
SVI
15.09.10
✎
08:40
|
(0) А типовая бяка чем им не нравится? Та, которая стаж. Там можно на любую дату посмотреть, сколько сотрудник отработал лет, месяцев и дней. Или им другое надо?
|
|||
7
zak555
15.09.10
✎
08:44
|
(6) считать месяц 30 или 31 день ?
|
|||
8
NDN
15.09.10
✎
08:47
|
в 8-ке в ЗУП:
// Процедура вычисляет количество лет, месяцев и дней между двумя датами // // Параметры // Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату) // Дата2 – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа) // Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) // Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) // Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2) // Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0) Экспорт Лет = 0; Месяцев = 0; Дней = 0; Если Дата1 > Дата2 Тогда ВременнаяДата = Дата1; Если День(ВременнаяДата) < День(Дата2) Тогда Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400; ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1); КонецЕсли; Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12); Месяцев = 12; КонецЕсли; Лет = Макс( Год(ВременнаяДата) - Год(Дата2), 0); Месяцев = Макс(Месяцев + Месяц(ВременнаяДата) - Месяц(Дата2), 0); Дней = Макс(Дней + День(ВременнаяДата) - День(Дата2), 0); // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1)))); КонецЕсли; КонецЕсли; КонецПроцедуры // РазобратьРазностьДат |
|||
9
gkvgkv
15.09.10
✎
08:47
|
(6) Им надо чтоб при приеме на работы взять трудовую забить все места работы и получить стаж. Особенно это необходимо для определения северного стажа при приеме МКС-ников, там в физ лице он прописывается для начисления северной надбавки.
|
|||
10
zak555
15.09.10
✎
08:50
|
(8) по-моему глРазобратьРазностьДат в 7ке красивее
|
|||
11
Дикообразко
15.09.10
✎
08:52
|
Процедура ДействияФормыРассчитатьСтраховойСтаж(Кнопка)
ДатаОкончания = '00010101'; СуммаЛет=0; СуммаМесяцев=0; СуммаДней=0; Для каждого ТЧ_Строка из ТрудоваяДеятельность Цикл ДатаОкончания = Макс(ДатаОкончания, ТЧ_Строка.ДатаОкончания); Если ТЧ_Строка.НеВключатьВСтраховойСтаж Тогда Продолжить; КонецЕсли; Лет=0; Месяцев=0; Дней=0; ПроцедурыПерсонифицированногоУчета.ПолучитьСтажЗаПериод(ТЧ_Строка.ДатаОкончания,ТЧ_Строка.ДатаНачала,Лет,Месяцев,Дней); ПроцедурыПерсонифицированногоУчета.ПолучитьПриведенныйСтаж(Лет,Месяцев,Дней); СуммаЛет=СуммаЛет+Лет; СуммаМесяцев=СуммаМесяцев+Месяцев; СуммаДней=СуммаДней+Дней; КонецЦикла; ПроцедурыПерсонифицированногоУчета.ПолучитьПриведенныйСтаж(СуммаЛет,СуммаМесяцев,СуммаДней); ТЧСтрахойСтаж = СтажиСГодом.Найти(Справочники.ВидыСтажа.СтраховойСтажДляБЛ,"ВидСтажа"); ДатаПриема = '00010101'; Если НЕ ЭтоНовый() Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("ФизЛицо", Ссылка); Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период |ИЗ | РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций |ГДЕ | РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу) | И РаботникиОрганизаций.Сотрудник.Физлицо = &ФизЛицо"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ДатаПриема = Выборка.Период; КонецЕсли; КонецЕсли; Если ТЧСтрахойСтаж = Неопределено Тогда ТЧСтрахойСтаж = СтажиСГодом.Добавить(); ТЧСтрахойСтаж.ВидСтажа = Справочники.ВидыСтажа.СтраховойСтажДляБЛ; КонецЕсли; ТЧСтрахойСтаж.ДатаОтсчета = ?(ЗначениеЗаполнено(ДатаПриема), ДатаПриема, ТекущаяДата()); ТЧСтрахойСтаж.РазмерЛет = СуммаЛет; ТЧСтрахойСтаж.РазмерМесяцев = СуммаМесяцев; ТЧСтрахойСтаж.РазмерДней = СуммаДней; КонецПроцедуры |
|||
12
Дикообразко
15.09.10
✎
08:54
|
увлекся резиной, забыл про эту ветку :)
|
|||
13
gkvgkv
15.09.10
✎
09:03
|
(8) Разность дат это одно, потомучто сумму стажей из трудовой потом надо снова переводить в общий стаж.
За сим думаю, самое простое согласно ПРИКАЗА Минздравсоцразвития РФ от 06.02.2007 № 91 это подсчитать кол-во дней по всем местам работы и перевести их в итоговый стаж из условия в месяце 30 дней. |
|||
14
SVI
15.09.10
✎
09:59
|
(9) Так в 8-ке реализовано в ЗУП. Или у вас ЗиК?
|
|||
15
Дикообразко
15.09.10
✎
10:20
|
(14) не реализовано ...
у тебя наверно дописка |
|||
16
Дикообразко
15.09.10
✎
10:20
|
или руками считают
|
|||
17
gkvgkv
15.09.10
✎
12:01
|
Реализовали, но получается несостыковка с калькулятором онлайн.
Если считать количество дней по всем местам работы через разность дат, то в это количество попадают как 31 день так и 30 дней в месяце и в итоге у нас остаток дней больше. Какие есть предложения? |
|||
18
Дикообразко
15.09.10
✎
12:02
|
(17) см (11) или западло?
|
|||
19
gkvgkv
15.09.10
✎
12:08
|
смотрю
|
|||
20
gkvgkv
15.09.10
✎
12:40
|
(18) Да, тут и думать не надо все уже готово. Жаль сам не допер. Но пришлось бы еслиб не (11).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |