Вопрос № 94603: Подскажите как в Аксесе (VBA) посчитать выслугу человека. Надо вычесть две даты (Д1 и Д2) - начало и конец службы в армии. И вычесть две даты (Д3 и д4) - время приема на работу (Д3) и текущая дата (Д4). Это общее количество дней сложить и результат в...
Вопрос № 94.603
Подскажите как в Аксесе (VBA) посчитать выслугу человека. Надо вычесть две даты (Д1 и Д2) - начало и конец службы в армии. И вычесть две даты (Д3 и д4) - время приема на работу (Д3) и текущая дата (Д4). Это общее количество дней сложить и результат выдать в виде всего годов, месяцев и дней выслуги на текущую дату. Я правильно понимаю, что потом этот код надо повесить как источник на поле, в котором и будет отображаться общая выслуга.
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Alexander Babich!
1) Создаем в базе Access таблицу DAT со следующими полями :
Kod long - код работника
D1 smalldatetime - дата начала службы в армии
D2 smalldatetime - дата окончания службы в армии
D3 smalldatetime - дата принятия на работу
D4 smalldatetime - дата увольнения ( если не уволен, то текущая дата )
2) Создаем запрос STAZ с кодом из приложения.
Показан стаж работы отдельно для двух периодов и суммарно. В общем стаже количество дней сравнивается с 30, если суммарное количество дней больше 30, то для дней стажа показывается остаток от деления на 30, а к месяцам прибавляется 1 или 2 месяца. Дополнительно количество месяцев получается остатком от деления на 12 суммы месяцев стажа с учетом переноса дополнительных месяцев из излишка дней. Количество лет подсчитывается с учетом излишков месяцев.
На самом деле подсчет нескольких периодов стажа немного некорректен, т.к. при сумме дней приходится убирать полный месяц, что при использовании деления на 30 может дать неверный результат, например период работы с 14.02.1963 по 12.02.1965 дает для отдельного стажа 1г11м30дн, а для периода работы с 14.02.1963 по 13.02.1965 - 2г0м0дн. Но при суммировании для обоих периодов будет учтено как два года стажа.
Как выход - сначала определять стаж для второго периода, прибавлять эти данные к дате увольнения первого периода и считать общий получившийся стаж. Но это значительно усложнит запрос. Лучше всего в базу добавить три поля общего стажа лет, месяцев и дней, считать их в программе и заносить в базу. Тем более, если человек еще работает, то каждый день у него общий стаж будет увеличиваться на 1 день. Это можно сделать в модуле Access или во встроенной процедуре MS SQL Server.
С уважением.
Приложение:
Ответ отправил: Филатов Евгений Геннадьевич (статус: 8-ой класс)
Ответ отправлен: 10.07.2007, 17:57 Оценка за ответ: 5