Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 07:38

Сравнение дат в запросе

Автор Mary_mariya, 03 июн 2014, 16:52

0 Пользователей и 1 гость просматривают эту тему.

Mary_mariya

Необходимо в запросе получить даты,попадающие в заданный период,вне зависимости от года.
Например,дни рождения работников - с ноября 2013 по февраль 2014(т.е сравнивать по дате и месяцу).
Вопрос - как в запросе написать условие?Период задается стандартными параметрами НачалоПериода и КонецПериода


Написала так

ВЫБОР
   КОГДА МЕСЯЦ(РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения) = 12
         И МЕСЯЦ(&КонецПериода) = 1
      ТОГДА ДОБАВИТЬКДАТЕ(РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения, ГОД, ГОД(&КонецПериода) - ГОД(РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения) - 1)
   ИНАЧЕ ДОБАВИТЬКДАТЕ(РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения, ГОД, ГОД(&КонецПериода) - ГОД(РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения))
КОНЕЦ МЕЖДУ &НачалоПериода И &КонецПериода




,но так не попадают прошлогодние записи,например если выбирать условие с 01.12.2013 по 01.02.2014 - выводит записи только за 2014 год

has

а так не подходит что-ли?
РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения МЕЖДУ &НачалоПериода И &КонецПериода

Mary_mariya

Цитата: has от 04 июн 2014, 07:40
а так не подходит что-ли?
РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо.ДатаРождения МЕЖДУ &НачалоПериода И &КонецПериода

Так сравнение и по году тоже - а мне нужно,чтобы выборка шла только по числу месяца и месяцу,вне зависимости от года,
т.е если день рождения 04.02.1986 и я указываю период 01.01.2014 - 03.05.2014 - то в список выводится этот сотрудник.

LexaK

попробуйте может такой вариант подойдет
выбрать
рег.Сотрудник,
рег.Сотрудник.Физлицо.ДатаРождения как ДатаРождения
из
РегистрСведений.РаботникиОрганизаций.СрезПоследних Рег
где
   МЕСЯЦ(рег.СотрудникФизлицо.ДатаРождения) между МЕСЯЦ(&НачалоПериода) и МЕСЯЦ(&КонецПериода)
и   День(рег.СотрудникФизлицо.ДатаРождения ) между  День(&НачалоПериода) и День(&КонецПериода)   


этот запрос будет правильно работать когда Начало и Конец периода из одного года (01.03.2012 - 31.03.2012   или 05.02.2014 - 25.07.2014),
так-же подразумеваем что нет сотрудников с годом рождения больше задаваемого периода
если помогло нажмите: Спасибо!

has

Цитата: LexaK от 04 июн 2014, 11:18
попробуйте может такой вариант подойдет
выбрать
рег.Сотрудник,
рег.Сотрудник.Физлицо.ДатаРождения как ДатаРождения
из
РегистрСведений.РаботникиОрганизаций.СрезПоследних Рег
где
   МЕСЯЦ(рег.СотрудникФизлицо.ДатаРождения) между МЕСЯЦ(&НачалоПериода) и МЕСЯЦ(&КонецПериода)
и   День(рег.СотрудникФизлицо.ДатаРождения ) между  День(&НачалоПериода) и День(&КонецПериода)   


этот запрос будет правильно работать когда Начало и Конец периода из одного года (01.03.2012 - 31.03.2012   или 05.02.2014 - 25.07.2014),
так-же подразумеваем что нет сотрудников с годом рождения больше задаваемого периода
А если период с 01.05.2014 по 01.07.2014, а ДР сотрудника 30.06.2014, то он не попадет по таким условиям

Как один из вариантов это получить список дат в периоде только без года, т.е. например 01.05, 02.05, 03.05 и т.д. Ну и затем искать вхождение дня и месяца рождения сотрудника в этот список. Тут нюанс будет, если сотрудник родился 29 февраля, а текущий год не високосный. А ну хотя заменить тогда 29.02 на 28.02 например.

LexaK

А если период с 01.05.2014 по 01.07.2014, а ДР сотрудника 30.06.2014, то он не попадет по таким условиям

по такому условию сотрудник попадет в результат!
если помогло нажмите: Спасибо!

has

Цитата: LexaK от 04 июн 2014, 12:24
А если период с 01.05.2014 по 01.07.2014, а ДР сотрудника 30.06.2014, то он не попадет по таким условиям

по такому условию сотрудник попадет в результат!

Почему? Месяц по условию пройдет, а вот день нет. Получиться по условию что 30 МЕЖДУ 1 и 1

Можно использовать ДеньГода в запросе, но тут опять же учесть если годы разные и учитывать високосный год, т.к. номер дня будет отличаться.

LexaK

упс, да действительно, сейчас доработаю отчет
если помогло нажмите: Спасибо!

Mary_mariya

Попробовала всё,что тут написали - всё равно данные не корректно выводятся...
неужели никто не делал такой отчет(((

LexaK

новый вариант

выбрать
рег.Сотрудник,
рег.Сотрудник.Физлицо.ДатаРождения как ДатаРождения
из
РегистрСведений.РаботникиОрганизаций.СрезПоследних Рег
где
   ДЕНЬГОДА(рег.СотрудникФизлицо.ДатаРождения) между ДЕНЬГОДА(&НачалоПериода) и ДЕНЬГОДА(&КонецПериода)


правильно только для условия что начало периода и конец периода одного года (любого)
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск