|
Разность дат в месяцах и днях | ☑ | ||
---|---|---|---|---|
0
SeraFim
08.11.11
✎
10:49
|
Прежде чем тыкать в (ДатаОкончания - ДатаНачала)/86400 просьба дочитать:
Конфа - ЗИКБУ (в ЗУПе тоже самое). Задача: Есть данные из трудовой книжки: 01.05.1983 - 09.09.1989 ООО "Рога и Копыта" 01.05.1990 - 01.03.1995 ООО "Рога и Копыта2" 15.05.1999 - 07.06.2010 ООО "Рога и Копыта3" Нужно внести в стаж работы в конфу (он вносится как количество месяцев и дней) А как это правильно сделать? Делаю так: Посчитал количество дней между датами начала и окончания. Просуммировал их. Получил число дней стажа сотрудника (например, 1234 дня) Нужна функция, которая правильно преобразует это в, например, 41 месяц и 4 дня. Затык в том, как правильно поступать с разным количеством дней в месяцах? ведь стаж с 01.02.2011 по 01.03.2011 - 28 дней (1 месяц) а стаж с 01.03.2011 по 01.04.2011 - 31 день (1 месяц) |
|||
1
asady
08.11.11
✎
10:54
|
Запросом пробовал?
ВЫБРАТЬ РАЗНОСТЬДАТ(&Дата1, &Дата2, ДЕНЬ) КАК КоличествоДней, РАЗНОСТЬДАТ(&Дата1, &Дата2, МЕСЯЦ) КАК КоличествоМесяцев, РАЗНОСТЬДАТ(&Дата1, &Дата2, ГОД) КАК КоличествоЛет |
|||
2
Не Печенкин
08.11.11
✎
10:56
|
а никак, понятие месяц - это "неправильная" единица измерения, кстати в банках она не применяется, там четко пишется 91 день например
|
|||
3
SeraFim
08.11.11
✎
10:59
|
(1) запросом не хочется, ибо идет в цикле через com-соединение
+ если действовать так, то получится (например): 15 месяцев 20 дней 26 месяцев 17 дней 11 месяцев 11 дней Итого: 52 месяца и 48 дней и что с этими 48 днями делать? писать, как 53 месяца и 18 дней или 53 месяца и 17 дней? |
|||
4
asady
08.11.11
✎
11:02
|
(3) 48 дней делишь на 30.4
|
|||
5
guitar_player
08.11.11
✎
11:03
|
Если МассивОшибок = Неопределено Тогда
МассивОшибок = Новый Массив; КонецЕсли; РезультатРасчета = Новый Структура("Лет, Месяцев, Дней", 0, 0, 0); //Инициализация вспомогательных переменных нСтроки = 1; ЛетСтажаП = 0; МесяцевСтажаП = 0; ДнейСтажаП = 0; ЛетСтажаУ = 0; МесяцевСтажаУ = 0; ДнейСтажаУ = 0; КолУвольнений = 0; ДатаУвольненияСПрошлогоМестаРаботы = Неопределено; //2. Подсчитываем суммарный стаж работы. Для Каждого СтрокаСтажа Из ТрудоваяДеятельность Цикл //Учитываем только корректные строки Если СтрокаСтажа.ДатаОкончания >= СтрокаСтажа.ДатаНачала Тогда Если ДатаУвольненияСПрошлогоМестаРаботы = Неопределено Или СтрокаСтажа.ДатаНачала > ДатаУвольненияСПрошлогоМестаРаботы Тогда ЛетСтажаП = ЛетСтажаП + Год(СтрокаСтажа.ДатаНачала); МесяцевСтажаП = МесяцевСтажаП + Месяц(СтрокаСтажа.ДатаНачала); ДнейСтажаП = ДнейСтажаП + День(СтрокаСтажа.ДатаНачала); Иначе ЛетСтажаП = ЛетСтажаП + Год(ДатаУвольненияСПрошлогоМестаРаботы); МесяцевСтажаП = МесяцевСтажаП + Месяц(ДатаУвольненияСПрошлогоМестаРаботы); ДнейСтажаП = ДнейСтажаП + День(ДатаУвольненияСПрошлогоМестаРаботы); КонецЕсли; ЛетСтажаУ = ЛетСтажаУ + Год(СтрокаСтажа.ДатаОкончания); МесяцевСтажаУ = МесяцевСтажаУ + Месяц(СтрокаСтажа.ДатаОкончания); ДнейСтажаУ = ДнейСтажаУ + День(СтрокаСтажа.ДатаОкончания); КолУвольнений = ?(СтрокаСтажа.БКС_НеУчитыватьДеньУвольнения, КолУвольнений, КолУвольнений + 1); ДатаУвольненияСПрошлогоМестаРаботы = СтрокаСтажа.ДатаОкончания + 86400; Иначе МассивОшибок.Добавить("У физического лица " + ФИОФизЛица + " в строке № " + нСтроки + " информация о прошлом месте работы введена неверно."); Возврат РезультатРасчета; КонецЕсли; нСтроки = нСтроки + 1; КонецЦикла; //Согласно правилу "Постановление Правительства РФ №555 от 24.07.2002" //каждые 30 дней переводятся в месяцы, каждые 12 месяцев в полные года Дней = ДнейСтажаУ - ДнейСтажаП + КолУвольнений + ДобавитьДней; ЦелыхМесВДнях = Цел(Дней/30); КоличествоДней = Дней - ЦелыхМесВДнях*30; Если КоличествоДней < 0 Тогда ЦелыхМесВДнях = ЦелыхМесВДнях - 1; КоличествоДней = 30 + КоличествоДней; КонецЕсли; Месяцев = МесяцевСтажаУ - МесяцевСтажаП + ЦелыхМесВДнях + ДобавитьМесяцев; ЦелыхЛетВМес = Цел(Месяцев/12); КоличествоМес = Месяцев - ЦелыхЛетВМес*12; Если КоличествоМес < 0 Тогда ЦелыхЛетВМес = ЦелыхЛетВМес - 1; КоличествоМес = 12 + КоличествоМес; КонецЕсли; КоличествоЛет = ЛетСтажаУ - ЛетСтажаП + ЦелыхЛетВМес + ДобавитьЛет; РезультатРасчета.Лет = КоличествоЛет; РезультатРасчета.Месяцев = КоличествоМес; РезультатРасчета.Дней = КоличествоДней; Возврат РезультатРасчета; откуда то выдрано |
|||
6
kn
08.11.11
✎
11:12
|
могу кинуть обработку, которая когда-то в ЗиК считала непрерывный стаж использовалась функция глРазобратьРазностьДат
|
|||
7
SeraFim
08.11.11
✎
12:38
|
(5) спасибо, особенно за ссылку на Постановление.
(6) буду очень признателен. мыло в личке добавил :) |
|||
8
kn
08.11.11
✎
12:41
|
(7)отправлено
|
|||
9
SeraFim
08.11.11
✎
12:42
|
(8)большое спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |