Имя: Пароль:
1C
1С v8
Как в запросе из даты вычесть дату и получить количество: год.месяц.дней
,
0 PAvel321
 
09.02.18
19:18
Добрый вечер.
Ситуация такая:
Есть дата приема на работу и текущая дата. Нужно получить стаж сотрудника на последнем месте работы. В виде например 4 года3 месяца 12 дней. Как это можно сделать. Пока что на ум приходит РАЗНОСТЬДАТ но там получу лишь количество дней. А это не удобно для вычисления и не совсем точно.
Кто нибуть знает метод получше?
1 Базис
 
naïve
09.02.18
19:20
На примере покажи, как ты САМ это считаешь.

С 10 января 2013 по сегодня.
2 PAvel321
 
09.02.18
19:23
ВЫБОР
КОГДА СотрудникиОрганизаций.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
ТОГДА РАЗНОСТЬДАТ(&ДатаОкончания, СотрудникиОрганизаций.ДатаПриемаНаРаботу, ДЕНЬ)
ИНАЧЕ РАЗНОСТЬДАТ(СотрудникиОрганизаций.ДатаУвольнения, СотрудникиОрганизаций.ДатаПриемаНаРаботу, ДЕНЬ)
    КОНЕЦ КАК НепрерывныйСтажРаботы
3 ПегийЛунь
 
09.02.18
19:24
4 H A D G E H O G s
 
09.02.18
19:24
(2) Обработай при выводе
5 PAvel321
 
09.02.18
19:25
Получаю количество дней. После этого смогу вычислить примерное время. С количеством лет то легко, а вот с месяцами и днями будут расхождения.
Но лучше способ я не придумал.
6 H A D G E H O G s
 
09.02.18
19:25
Расстрелять за (3) такое.
7 romix
 
09.02.18
19:26
(0) В СКД можно вызывать функции общего модуля, ими всё вычислять.
8 ПегийЛунь
 
09.02.18
19:28
(6) Задача - сделать в _запросе_
Если постобработка, то прям из ЗиУП выдернуть функцию.
9 romix
 
09.02.18
19:29
А строку вида "4 года 3 месяца 12 дней" можно получить вычитанием в цикле внутри функции (не запросом), или более интеллектуально - операцией "знак процента" (остаток от целочисленного деления).
10 Cyberhawk
 
09.02.18
19:30
С 1 марта 2015 по 1 марта 2016 прошел 1 год
С 1 марта 2016 по 1 марта 2016 прошел 1 год
Но количество дней разное :)
11 Cyberhawk
 
09.02.18
19:30
*по 1 марта 2017 во второй строчке
12 Cyberhawk
 
09.02.18
19:30
Так что арифметические манипуляции не прокатят
13 Cyberhawk
 
09.02.18
19:31
Но автору нужен какой-то "стаж". Что это?
14 romix
 
09.02.18
19:34
(12) Может устроить ДобавитьМесяц(Дата, СколькоМесяцевДобавить) - остальное дни. Это делать в цикле. 12 месяцев считать одним годом.
15 PAvel321
 
09.02.18
19:34
Ладно попробую в СКД с помощью функции.
Я просто надеялся что может существует какое нибуть элегантное решение в запросе о котором я не знал.
16 PAvel321
 
09.02.18
19:35
(14) как вариант.
Потеря 1 дня в высокосный год не должна стать трагедией
17 Cyberhawk
 
09.02.18
19:40
(14) Пока нет понимания, что же требуется получить на выходе, всякие такие придумки несут мало пользы
18 breezee
 
09.02.18
20:23
(0) А период между работами вы учитывете?
19 Serg_1960
 
09.02.18
20:49
Имхо, "стаж" в виде лет, месяцев и дней - абстрактная величина. Я не буду упоминать  среднее количество календарных дней 29,3 :)), объясню на более простом примере:
период в 31 день == 1 месяц == 1 месяц + 1 день == 1 месяц + 2 дня == 1 месяц + 3 дня. Все варианты - верные, но в зависимости от ситуации.

О чём мой спич? Сначала устанавливаем правила определения значений, потом рассчитываем.
20 Cyberhawk
 
09.02.18
20:53
(19) Ты опоздал, начиная с (10) Я двигаю эту тему )
21 SleepyHead
 
гуру
10.02.18
07:33
(2) Если бы еще автор ответил, какую задачу он решает, можно было бы двигать. А так задроство какое-то, извините за выражение.
22 pasha_d
 
12.02.18
09:31
чо за конфа? юзай регламентированный календарь.
Программист всегда исправляет последнюю ошибку.