Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/55: Рейтинг темы: голосов - 55, средняя оценка - 4.87
0 / 0 / 1
Регистрация: 13.04.2014
Сообщений: 57
1

Высчитывание стажа работы

10.10.2016, 19:08. Показов 10102. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
1. Добрый вечер. В таблице добавил "Дату начала работы". Какую формулу надо ввести , чтобы высчитывала стаж работы в днях в отчете? MS Access 2003.

2. http://storage2.static.itmages... 5dae8f.png

Мне надо чтобы высвечивался в списке только Директор и Продавец. Как это сделать? Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2016, 19:08
Ответы с готовыми решениями:

Подсчет среднего стажа работы
Всем привет! Просьба помочь в решении такой задачи: Необходимо выбрать из справочника персонала...

Расчет стажа работы
Здравствуйте! Есть таблица job с полем start_year в который записывается год начала работы в...

Подсчет стажа работы по прошествию даты
Необходимо создать некий счетчик, который по прошествию даты будет зачислять +1 к имеющемуся стажу....

В зависимости от введенного стажа работы установить уровень надбавки
Составить программу для решения задачи В зависимости от введенного стажа работы , установить...

10
Эксперт MS Access
17535 / 7287 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
10.10.2016, 19:36 2
Цитата Сообщение от SmeRT59 Посмотреть сообщение
1. Добрый вечер. В таблице добавил "Дату начала работы". Какую формулу надо ввести , чтобы высчитывала стаж работы в днях в отчете?
Выражение в поле отчета
DateDiff("d";[Дата начала работы]ate())
2. Возможно в запросе - источнике строк нужно поставить DISTINCT и условие. Но это только предположение, неизвестна структура таблиц, процедура авторизации, ... .
1
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
10.10.2016, 19:50 3
Насколько помню формат данных "Дата-Время" это дробное число где целая часть это номер дня (начиная с 31.12.1899), а дробная это время.
Тогда разница в днях выглядит так:
Дни работы = CLng(Date() -[дата начала работы])
Где Date() = функция возвращающая текущую системную дату, а CLng() = Приведение к целочисленному формату Long (Длинное целое)

как то так.

Добавлено через 5 минут
Цитата Сообщение от ltv_1953 Посмотреть сообщение
DateDiff("d";[Дата начала работы]; Date())
То же хороший вариант!
Но DateDiff уместнее употреблять когда используется период (Дата начала и конца) без текущей даты.
0
Эксперт MS Access
17535 / 7287 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
10.10.2016, 20:04 4
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Но DateDiff уместнее употреблять когда используется период (Дата начала и конца) без текущей даты.
Чем уместнее? Чем плоха Date() в качестве окончания периода?
А вот знакомство ТС с функцией DateDiff, которая позволяет вычислять период в днях, месяцах, годах и т.п. действительно "уместнее".
1
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
10.10.2016, 20:32 5
Кстати (BTW):
Кода место критично (БД на за десяток миллионов записей), а время нас не интересует, то дату можно запросто хранить в поле Long (Длинное Целое) , это может быть, допустим, дата обновления цены товара или нечто подобное.

Добавлено через 2 минуты
Ну вот... неужто обиделись?
- Простите старика великодушно, не хотел ни в коем случае.
Прошу прощения за нечаянное оскорбление.
Виноват - Исправлюсь.

Добавлено через 17 минут
Цитата Сообщение от ltv_1953 Посмотреть сообщение
А вот знакомство ТС с функцией DateDiff, которая позволяет вычислять период в днях, месяцах, годах и т.п. действительно "уместнее".
да знаю я эту функцию - вещь полезная
Но работает в 5 раз медленнее моего варианта. На разовых операциях не критично - а на обработке больших обьёмов данных - она заставит себя подождать.

Если интересно вот тест:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Private Sub esSpeedCompare()
'es 19.05.2003
'Процедура сравнения работы процедур или функций по скорости
'Пишет результат в Immediate окно
'--------------------------------------------------------------------
Dim intTest As Integer        'счетчик тестов
Dim lngReiterations As Long   'количество повторений теста
Dim i As Long                 'счетчик повторений
Dim t As Date                 'перменная таймера
Dim val As Variant            'для приема значений возвращаемых тестируемыми
 
On Error GoTo esSpeedCompare_Err
'Установка количества повторений теста :
    'много (считаем сразу тысячами...) - для быстрых
    lngReiterations = CLng(1000) * 10000
 
'отделяем линией от (возможных) предидущих результатов
    Debug.Print vbCrLf & "---------------------------------------------------------"
'Запуск 2-х тестов
    For intTest = 1 To 2
        t = Now
        For i = 1 To lngReiterations
            Select Case intTest
                
                Case 1 'ниже пишем певую тестируемую процедуру|функцию
                    
                    val = CLng(Date - #12/31/1899#)
                    
                Case 2 'ниже пишем вторую тестируемую процедуру|функцию
                    
                    val = DateDiff("d", #12/31/1899#, Date)
            
            
            End Select
        Next i
        'отчет.....
        Debug.Print "Тест-" & intTest & " (" & Format$(lngReiterations, "#,###") & _
            " повт.) работал: " & Format(Now - t, "hh:mm:ss")
    Next intTest
esSpeedCompare_Bye:
    Exit Sub
esSpeedCompare_Err:
    Debug.Print "Процедура сравнения работы функций по скорости привела к ошибке:" & vbCrLf & _
    Err.Description
    Resume esSpeedCompare_Bye
End Sub
У меня написало:
---------------------------------------------------------
Тест-1 (10*000*000 повт.) работал: 00:00:02
Тест-2 (10*000*000 повт.) работал: 00:00:11
---------------------------------------------------------

Комментарии, как говориться, излишни.
0
Эксперт MS Access
17535 / 7287 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
10.10.2016, 20:47 6
Целочисленная арифметика, естественно, быстрее DateDiff в этом частном случае. Но вопрос был не об этом.
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Чем плоха Date() в качестве окончания периода?
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
10.10.2016, 21:06 7
Так я и написал:
Цитата Сообщение от Eugene-LS Посмотреть сообщение
То же хороший вариант!
+ своё примечание по личному опыту, скорости и т.д.

Всё нормально.

Добавлено через 12 минут
Чутка забыл про авторство: Полезная (иногда) процедура сравнения работы по скорости - взята тут
0
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
10.10.2016, 21:23 8
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Целочисленная арифметика, естественно, быстрее DateDiff в этом частном случае.
Не думаю, что причина разницы скоростей в целочисленной арифметике. Можно Date() заменить на Now() и к вычитаемому добавить дробную часть, результат все равно будет не в пользу DateDiff. Причина как мне кажется в том, что DateDiff универсальная функция и для выбора исполняемого варианта требуется некий аналог Select Case. Что конечно же сильно замедляет расчеты. Даже если функция написана на ассемблере.
0
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
10.10.2016, 21:23 9
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Чем плоха Date() в качестве окончания периода?
Тем - что она динамически меняться. Сегодня одно значение - завтра другое, послезавтра третье.
А DateDiff() - специально писалось для диапазона дат (есть дата начала и конца периода)

Как то так.
0
9108 / 6037 / 590
Регистрация: 27.03.2013
Сообщений: 19,810
10.10.2016, 21:43 10
ТС наверное и сам не рад, что из за его вопроса такая буча поднялась и спрятался от бомбардировки тяжелой артиллерии.
А то бы давно уже сказал, какой вариант ему понятнее и удобнее.
Вопрос же был просто подсчитать количество отработанных дней, соответственно от текущей даты.
Я тоже хотел с дифф предложить, но увидев, что уже предложили, не стал.
К чему ломать копья, это по любому не тот случай, миллиардов записей в учебной БД просто не может быть.

Добавлено через 10 минут
Хи и и, если на то пошло, то ни кто не учел, сколько рабочих и выходных дней - праздники.
1
10741 / 5582 / 1409
Регистрация: 05.10.2016
Сообщений: 15,787
10.10.2016, 22:44 11
Цитата Сообщение от PuhKMV Посмотреть сообщение
К чему ломать копья, это по любому не тот случай
Да я и сам не понял чего ltv_1953 "завёлся".
И так и так правильно - по любому.

Ну раз начался спор - я привёл доступные аргументы.
Много знаний не бывает, и в споре рождается истина.
Как то так.

Добавлено через 27 минут
Вечно меня подводит эта старая хорошая привычка - экономить на ресурсах системы, ну что бы результат (конечное приложение) меньше расходовало системных ресурсов.
Пусть так и будет.

Добавлено через 26 минут
SmeRT59,
Короче так:
Можете использовать любой из предложенных вариантов.
А наши "междусобойчики" - по боку. "Милые дерутся - только тешатся"

Ваш вопрос бы не возник - зная вы элементарную мат часть.
Весьма и настоятельно рекомендю изучить стандартные функции VBA + типы данных MS Acess - литературы = навалом!
На сём всё.
Успехов!
(Спасибо за внимание)
0
10.10.2016, 22:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2016, 22:44
Помогаю со студенческими работами здесь

Премии работникам фирмы выплачиваются в зависимости от стажа работы
Премии работникам фирмы выплачиваются в зависимости от стажа работы в таком размере: при стаже...

Разделить премию между рабочими в зависимости от стажа их работы на предприятии
Никак не получается создать программу, которая будет выполнять вот это: На предприятии 2-м рабочим...

Вывести список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы
Есть созданный файл, который содержит сведения о сотрудниках института. Структура записи: фамилия...

Получить список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы
Написать программу, которая позволяет получить следующую информацию: список сотрудников пенсионного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru