Имя: Пароль:
1C
 
Подсчет стажа, перевод дней в года месяцы и дни.
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).