|
Разность двух дат | ☑ | ||
---|---|---|---|---|
0
liza234
26.12.18
✎
13:16
|
В базе имеется два поля: ДатаНачалаРаботы и ДатаОкончанияРаботы.Как посчитать стаж работы(в годах)?
|
|||
1
Натуральный Йог
26.12.18
✎
13:17
|
через РадностьДат
|
|||
2
impulse9
26.12.18
✎
13:19
|
// Периодичность - Строка.("Месяц", "Год")
Функция ПолучитьРазностьДат(ДатаВычитаемая, ДатаИзКоторойВычитаем, Периодичность) ТЗ = НОвый ТаблицаЗначений; ТЗ.Колонки.Добавить("Колонка", Новый ОписаниеТипов("Число")); ТЗ.Добавить().Колонка = 0; Запрос = Новый Запрос; Запрос.Текст = СтрЗаменить("ВЫБРАТЬ ПЕРВЫЕ 1 | РАЗНОСТЬДАТ(&ДатаВычитаемая, &ДатаИзКоторойВычитаем, &&Периодичность) КАК Разность |ПОМЕСТИТЬ ВТ_Таблица |ИЗ | &ТЗ КАК ТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ВТ_Таблица.Разность КАК Разность |ИЗ | ВТ_Таблица КАК ВТ_Таблица", "&&Периодичность", Периодичность); Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.УстановитьПараметр("ДатаИзКоторойВычитаем", ДатаИзКоторойВычитаем); Запрос.УстановитьПараметр("ДатаВычитаемая", ДатаВычитаемая); Возврат Запрос.Выполнить().Выгрузить()[0].Разность; КонецФункции |
|||
3
impulse9
26.12.18
✎
13:26
|
Если УТ или ЕРП, то
// Возвращает разницу между двумя датами (в днях) // // Параметры // ДатаНачала - Дата - начальная дата периода // ДатаОкончания - Дата - конечная дата периода. // // Возвращаемое значение: // Число - количество дней между двумя датами. // ОбщегоНазначенияУТ.РазностьДат(ДатаНачала, ДатаОкончания, Периодичность) Экспорт |
|||
4
liza234
26.12.18
✎
13:29
|
Может есть ещё какой-то способ?
|
|||
5
impulse9
26.12.18
✎
13:31
|
указанные чем не устраивают?
|
|||
6
liza234
26.12.18
✎
13:34
|
Не очень понятный
|
|||
7
Serg_1960
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?
|
|||
9
lEvGl
гуру
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.
Поскольку ТСу нужен результат именно в годах, хотелось бы уточнить, что он хочет видеть в случае стажа менее года. |
|||
13
bolobol
26.12.18
✎
15:20
|
(12) "Может есть ещё какие-то вопросы? Не очень понятные" (по мотивам (4) (6))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |