powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
25 сообщений из 30, страница 1 из 2
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942171
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Применяя эту функцию в запросе к ДатеПриема на работу Сотрудника получаем последний (текущий) период. Подскажиите, пж, как получить все периоды с первого года работы?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Function Otpusk(dtmDate As Date, intBeginEnd As Integer) As Date
dtmDate = DateSerial(Year(Date), Month(dtmDate), Day(dtmDate))
    If dtmDate <= Date Then
        Otpusk = dtmDate
    Else
        Otpusk = DateAdd("yyyy", -1, dtmDate)
    End If
    Select Case intBeginEnd
        Case 1
            Otpusk = Otpusk
        Case 2
            Otpusk = DateAdd("yyyy", 1, Otpusk) - 1
    End Select
End Function
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942178
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kniga

...получаем последний (текущий) период. Подскажиите, пж, как получить все периоды с первого года работы?...
Поясните:что есть "последний(текущий)период" и "все периоды с первого года работы?"
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942217
Например:
1. Создаете и сохраняете запрос с именем Digits
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT TOP 1 0 AS digit FROM MSysObjects
UNION All
SELECT TOP 1 1 FROM MSysObjects
UNION All 
SELECT TOP 1 2 FROM MSysObjects
UNION All
SELECT TOP 1 3 FROM MSysObjects
UNION All
SELECT TOP 1 4 FROM MSysObjects
UNION All
SELECT TOP 1 5 FROM MSysObjects
UNION All
SELECT TOP 1 6 FROM MSysObjects
UNION All
SELECT TOP 1 7 FROM MSysObjects
UNION All
SELECT TOP 1 8 FROM MSysObjects
UNION ALL 
SELECT TOP 1 9 FROM MSysObjects;


2. Создаете запрос:
Код: sql
1.
2.
3.
4.
SELECT T.Сотрудник, T.ДатаПриема, DateAdd('yyyy',[nn].[n]-1,[T].[ДатаПриема]) AS ДатаС, (DateAdd('yyyy',[nn].[n],[T].[ДатаПриема])-1) AS ДатаПо
FROM (SELECT (D1.digit & D0.digit)+1 AS n FROM Digits AS D0, Digits AS D1)  AS NN, Таблица1 AS T
WHERE ((((DateAdd('yyyy',[nn].[n],[T].[ДатаПриема])-1))<=Date()))
ORDER BY T.Сотрудник, DateAdd('yyyy',[nn].[n]-1,[T].[ДатаПриема]);

Смотрите результат. Функция не нужна.

ЗЫ. Идея с Digits не моя. Спасибо одноклубникам.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942260
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

Последний(текущий) это буквально этот год , но с дня и месяца найма на работу. А все периоды я имею в виду года, начиная с самого первого года работы.
Это будут как бы отчетные года для отображения потом в отчете. Сколько дней отпуска в тот или иной отчётный год было использовано сотрудником.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942272
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Класс, спасибо! Выводит периоды какие надо.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942280
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь,

применил запрос в своей БД и увидел, что последний (текущий) период не показывает. Например, Иванов принят 02.02.2017, то выдает
01.02.2018
01.02.2019
01.02.2020 и все, а по идее февраль уже пройден и значит надо захватить уже следющий период тоже: 01.02.2021

Как подправить?
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942336
kniga
Иванов принят 02.02.2017, то выдает
01.02.2018
01.02.2019
01.02.2020 и все, а по идее февраль уже пройден и значит надо захватить уже следющий период тоже: 01.02.2021

Как подправить?
В запросе условие: ДатаПо <= Date(). Переставьте это условие к полю ДатаС. Или оставьте как есть, но ДатаПо <= (Date() + 365).
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942389
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без лишних сложностей как-то так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Function period(pr) ' аргумент(pr)-дата приема на работу
Dim N, K, I
N = Format(pr, "dd.mm.")
For I = 0 To Year(Date) - Year(pr)
    If I = 0 Then
        Debug.Print "s " & N & Year(pr) + I & " po " & N & Year(pr) + 1
    Else
        Debug.Print "s " & Format(DateAdd("d", 1, pr), "dd.mm.") & Year(pr) + I & " po " & N & Year(pr) + 1 + I
    End If
Next
End Function

Код: vbnet
1.
2.
3.
4.
5.
?period("21.02.2017")
s 21.02.2017 po 21.02.2018
s 22.02.2018 po 21.02.2019
s 22.02.2019 po 21.02.2020
s 22.02.2020 po 21.02.2021
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942390
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переменная К не использована,забыл убрать,предполагалась дата увольнения-тогда б она понадобилась
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942409
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku
Код: vbnet
1.
Dim N, K, I

почему не типизированы?
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942455
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за помощь!
Подправил в запросе, все ок! А вот функция у меня что-то возвращает пустые значения..
В примере три запроса:
1) с работающей функцией на Текущий период;
2) с работающим запросом на Все периоды;
3) функция на Все периоды не возвращает значения (хотелось бы чтобы заработала).
Просто еще не знаю, что будет мне удобней применить, функцию или запрос.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942476
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
sdku
Код: vbnet
1.
Dim N, K, I

почему не типизированы?
Потому что это пример,а не 100% выполнение некого задания-указание направления разработки.В "боевой" БД были бы типизированы
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942491
kniga
3) функция на Все периоды не возвращает значения (хотелось бы чтобы заработала).
Просто еще не знаю, что будет мне удобней применить, функцию или запрос.
kniga, а в каком виде вы хотите получить из функции "все периоды"? Вот sdku методом Debug.Print вывалил вам данные в окно отладки. То же самое может вернуть функция, собрав это в строке.
Вас этот результат устраивает? Что вы с ним будете делать дальше?
Можно заполнить и вернуть двумерный массив. Вам этот термин знаком?
Сначала определитесь, как и где вы будете использовать "все периоды".
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942493
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kniga
...3) функция на Все периоды не возвращает значения (хотелось бы чтобы заработала).
Просто еще не знаю, что будет мне удобней применить, функцию или запрос.
Код, что приведен в качестве примера, ничего и не вернет-значение функции не вычисляется-только печатаются значения от и до периодов. Т.к неизвестно что Вы хотите делать далее с результатами работы функции-"допилите" сами-например если день и месяц приема больше соответствующих компонентов текущей даты надо на единицу уменьшать верхнюю границу цикла FOR.Наверно еще что нибудь
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function period(pr)
Dim N, K, I
N = Format(pr, "dd.mm.")
For I = 0 To Year(Date) - Year(pr)
    If I = 0 Then
        K = K & ", s " & N & Year(pr) + I & " po " & N & Year(pr) + 1
    Else
        K = K & ", s " & Format(DateAdd("d", 1, pr), "dd.mm.") & Year(pr) + I & " po " & N & Year(pr) + 1 + I
    End If
Next
period = Mid(K, 3)
End Function

Код: vbnet
1.
2.
?period("10.10.15")
s 10.10.2015 po 10.10.2016, s 11.10.2016 po 10.10.2017, s 11.10.2017 po 10.10.2018, s 11.10.2018 po 10.10.2019, s 11.10.2019 po 10.10.2020, s 11.10.2020 po 10.10.2021
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942494
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
...Сначала определитесь, как и где вы будете использовать "все периоды".
+100500
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942497
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже вернее так:(как видите процесс доработки кода всегда имеет место быть)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function period(pr)
Dim N, K, I
N = Format(pr, "dd.mm.")
For I = 0 To Year(Date) - Year(pr)
    If I = 0 Then
        K ="s " & N & Year(pr) + I & " po " & N & Year(pr) + 1
    Else
        K = K & ", s " & Format(DateAdd("d", 1, pr), "dd.mm.") & Year(pr) + I & " po " & N & Year(pr) + 1 + I
    End If
Next
period =К
End Function
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942553
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор а в каком виде вы хотите получить из функции "все периоды"?
Ну, в таком же виде как и с запроса. Просто в существующий запрос, который у меня работает с функц otpusk для текущ периода я попробовал добавить ваш Запрос и с первой атаки с шашкой наголо не получилось )) Буду конечно дальше пробовать. Думал если как функция будет, то проще в существующий запрос ее добавить к полю ДатаПриема )

Есть ещё в БД таблица с отпусками. Мне надо показать в отчёте сколько дней отпуска имел Сотрудник в каждом отчетном периоде с начала устройства на работу.
Сотрудник. ДатаПриема
Период1 (первый год работы). 25 дн
Дата отпуска 2 дн
Дата отпуска. 23 дн
Период2 (второй год работы). 35 дн
Дата отпуска. 30 дн
Дата отпуска. 5 дн
И т.д.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942579
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kniga,
как вариант:
Написать процедуру, на основе предложенного кода,которая создаст(заполнит) временную таблицу а в ней Dlookup(ом)создать поля начало и конец отпуска для данного периода and конкретного клиента и использовать её(таблицу) в качестве источника для отчета(при закрытии отчета тбл.очищать)
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942588
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

спасибо за совет, "написать процедуру" это вы мне льстите :) Я умею (мой уровень) только воспользоваться кодом, поменять в нем поля и другие мелочи.
Кажется почти получается с запросом, не показывает только тот период, где нет отпусков, вроде соединение Left стоит... а в отчете надо бы показать (
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942599
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я применил к полю ДатаОтпуска условие Between (ДатаС) And (ДатаПо) - начало и конец отчетного периода и соответственно где нет отпуска, период не показывается.
Подскажите, пж, изменение в этом выражении, я так подозреваю в нем собака порылась ))
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942600
kniga
автор а в каком виде вы хотите получить из функции "все периоды"?

Ну, в таком же виде как и с запроса. Не понял! Ваша функция возвращает в запрос дату, которая и отражается в поле. Функция "Все периоды" вернет вам строку с перечнем периодов, вы даже это увидите, а дольше что?
kniga
Просто в существующий запрос, который у меня работает с функц otpusk для текущ периода я попробовал добавить ваш Запрос и с первой атаки с шашкой наголо не получилось ))
Тоже не понял. Вы лучше в "мой" запрос добавьте поле ID сотрудника и получите всё, как в "вашем", только по всем периодам. А еще можете добавить поле "n" из "nn" и получите номер периода.
kniga
Есть ещё в БД таблица с отпусками. Мне надо показать в отчёте сколько дней отпуска имел Сотрудник в каждом отчетном периоде с начала устройства на работу.
И как вы собираетесь связать таблицу и запрос? Если в таблицу с отпусками добавить поле и ручками там указать номера периодов для каждого отпуска, то да - можно.
А иначе как?
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942604
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kniga,
between применяйте только к записям в которых поля про отпуск Not Null
(ф-ции NZ или IF)
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942605
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор а в каком виде вы хотите получить из функции "все периоды"?
Ну, в таком же виде как и с запроса. Просто в существующий запрос, который у меня работает с функц otpusk для текущ периода я попробовал добавить ваш Запрос и с первой атаки с шашкой наголо не получилось )) Буду конечно дальше пробовать. Думал если как функция будет, то проще в существующий запрос ее добавить к полю ДатаПриема )

Есть ещё в БД таблица с отпусками. Мне надо показать в отчёте сколько дней отпуска имел Сотрудник в каждом отчетном периоде с начала устройства на работу.
Сотрудник. ДатаПриема
Период1 (первый год работы). 25 дн
Дата отпуска 2 дн
Дата отпуска. 23 дн
Период2 (второй год работы). 35 дн
Дата отпуска. 30 дн
Дата отпуска. 5 дн
И т.д.
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942632
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kniga
sdku,
спасибо за совет, "написать процедуру" это вы мне льстите :) Я умею (мой уровень) только воспользоваться кодом, поменять в нем поля и другие мелочи...
Ну если ничего не придумаете выложите свои наработки(лень самому придумывать пример-можно БД только таблицы)сочиню код,но займусь только поздно вечером
...
Рейтинг: 0 / 0
Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
    #39942832
Фотография kniga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku,

авторсочиню код спасибо! )

Но вот пытаюсь пока запросом от Анатолия. Как я писал выше, осталось решить один нюас, т.е. показать период, если в нем нет отпуска.
Я выложил пример, где две связанные таблицы и запрос с периодами и отпусками в течение этих периодов. Возможно ли в запросе "Отпуска" определить, что подзапрос с периодами отображает все данные (периоды) всегда , независимо от того, есть ли в этот период отпуск или нет (просто пустые строки в полях с датами отпуска)?
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Получить в запросе Отчетные периоды по годам с Даты принятия на работу Сотрудника
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]