Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Разность двух дат

Разность двух дат
Я
   liza234
 
26.12.18 - 13:16
В базе имеется два поля: ДатаНачалаРаботы и ДатаОкончанияРаботы.Как посчитать стаж работы(в годах)?
 
 
   Натуральный Йог
 
1 - 26.12.18 - 13:17
через РадностьДат
   impulse9
 
2 - 26.12.18 - 13:19
// Периодичность - Строка.("Месяц", "Год")

Функция ПолучитьРазностьДат(ДатаВычитаемая, ДатаИзКоторойВычитаем, Периодичность)            


ТЗ = НОвый ТаблицаЗначений;     
ТЗ.Колонки.Добавить("Колонка", Новый ОписаниеТипов("Число"));     
ТЗ.Добавить().Колонка = 0;     
Запрос = Новый Запрос;     
Запрос.Текст = СтрЗаменить("ВЫБРАТЬ ПЕРВЫЕ 1     
|      РАЗНОСТЬДАТ(&ДатаВычитаемая, &ДатаИзКоторойВычитаем, &&Периодичность) КАК Разность     
|ПОМЕСТИТЬ ВТ_Таблица
|ИЗ     
|      &ТЗ КАК ТЗ     
|;     
|     
////////////////////////////////////////////////////////////////////////////////     

|ВЫБРАТЬ ПЕРВЫЕ 1     
|      ВТ_Таблица.Разность КАК Разность           
|ИЗ     
|      ВТ_Таблица КАК ВТ_Таблица", "&&Периодичность", Периодичность);           
Запрос.УстановитьПараметр("ТЗ", ТЗ);     
Запрос.УстановитьПараметр("ДатаИзКоторойВычитаем", ДатаИзКоторойВычитаем);     
Запрос.УстановитьПараметр("ДатаВычитаемая",        ДатаВычитаемая);           
Возврат Запрос.Выполнить().Выгрузить()[0].Разность;     


КонецФункции
   impulse9
 
3 - 26.12.18 - 13:26
Если УТ или ЕРП, то 


// Возвращает разницу между двумя датами (в днях)

//
// Параметры

//  ДатаНачала         - Дата - начальная дата периода
//  ДатаОкончания    - Дата - конечная дата периода.

//
// Возвращаемое значение:

//   Число     - количество дней между двумя датами.
//

ОбщегоНазначенияУТ.РазностьДат(ДатаНачала, ДатаОкончания, Периодичность) Экспорт
   liza234
 
4 - 26.12.18 - 13:29
Может есть ещё какой-то способ?
   impulse9
 
5 - 26.12.18 - 13:31
указанные чем не устраивают?
   liza234
 
6 - 26.12.18 - 13:34
Не очень понятный
   Serg_1960
 
7 - 26.12.18 - 14:24
Как вариант, типовая функция (для стажа):
Процедура РазобратьРазностьДат(Дата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) Тогда
            Дней = Дней + ((ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) - Дата2)/86400;
            //(День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1))));

        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры    // РазобратьРазностьДат
   Гипервизор
 
8 - 26.12.18 - 14:34
(0) А если стаж меньше года, тогда 0?
   lEvGl
 
9 - 26.12.18 - 14:42
(8) это мелочь, можно написать Менее года, интересно как будет принялся/уволился/принялся. строк будет явно больше одной
   иубиповец
 
10 - 26.12.18 - 14:47
А что в вашем понимании стаж? есть периоды не включаемые в стаж?
 
 Рекламное место пустует
   Натуральный Йог
 
11 - 26.12.18 - 15:04
(8) Если ты покупаешь 300 грамм колбасы, то платишь за 0 кг?
   Гипервизор
 
12 - 26.12.18 - 15:10
(11) В регламентированной отчетности по форме 1-Колбаса будет округлено до 0.
Поскольку ТСу нужен результат именно в годах, хотелось бы уточнить, что он хочет видеть в случае стажа менее года.
   bolobol
 
13 - 26.12.18 - 15:20
(12) "Может есть ещё какие-то вопросы? Не очень понятные" (по мотивам (4) (6))

Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует