Добрый день
В учебной версии 1с Предприятие 8.3 необходимо создать запрос, который выведет список сотрудников, работающих на период с 01.02.2023 по 22.10.2023.
Тип данных в реквизите ДатаУвольнения и ДатаПриема задан как "Дата".
В самом Справочник.Сотрудники добавлено четыре реквизита (Должность, Оклад, ДатаУвольнения и ДатаПриема)
ВЫБРАТЬ
Сотрудники.Наименование,
Сотрудники.Должность
ИЗ
Справочник.Сотрудники ГДЕ
Сотрудники.ДатаПриема <= '2023.02.01'
Или
Сотрудники.ДатаУвольнения >= '2023.10.22';
Консоль после выполнения выдает ошибку: {(6, 30)}: Синтаксическая ошибка "'2023.02.01'"
Сотрудники.ДатаПриема <= <<?>>'2023.02.01'
Посмотрите, пожалуйста, пока не пойму как правильно реализовать запрос.
В учебной версии 1с Предприятие 8.3 необходимо создать запрос, который выведет список сотрудников, работающих на период с 01.02.2023 по 22.10.2023.
Тип данных в реквизите ДатаУвольнения и ДатаПриема задан как "Дата".
В самом Справочник.Сотрудники добавлено четыре реквизита (Должность, Оклад, ДатаУвольнения и ДатаПриема)
ВЫБРАТЬ
Сотрудники.Наименование,
Сотрудники.Должность
ИЗ
Справочник.Сотрудники ГДЕ
Сотрудники.ДатаПриема <= '2023.02.01'
Или
Сотрудники.ДатаУвольнения >= '2023.10.22';
Консоль после выполнения выдает ошибку: {(6, 30)}: Синтаксическая ошибка "'2023.02.01'"
Сотрудники.ДатаПриема <= <<?>>'2023.02.01'
Посмотрите, пожалуйста, пока не пойму как правильно реализовать запрос.
Найденные решения
(4) Через параметры передавать значения в запрос нормально, только нужно учесть, что в дате хранится не только сама дата, но и время. Поэтому для корректного сравнения при задании параметра следует применять функции НАЧАЛОДНЯ() для даты начала периода и КОНЕЦДНЯ() для конца.
К тому же для того, чтобы в результат попали все, работавшие в этот период, даже один день, нужно, чтобы дата приёма была меньше или равна окончанию периода, а дата увольнения больше начала.
К тому же для того, чтобы в результат попали все, работавшие в этот период, даже один день, нужно, чтобы дата приёма была меньше или равна окончанию периода, а дата увольнения больше начала.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вот так максимально правильно.
Даёте параметры. (к названию не придираться)
&ДН = НачалоДня('20230201') - дата начала периода выборки, 01.02.2023
&ДК = КонецДня('20231022') - дата окончания выборки, 22.10.2023
в запросе условие
ГДЕ
Сотрудники.ДатаПриема между &ДН и &ДК
И (Сотрудники.ДатаУвольнения = ДатаВремя(1,1,1) Или Сотрудники.ДатаУвольнения > &ДК)
Суть.
Дата приема между ДН и ДК, значит, в выборку попадают сотрудники, у которых
-- дата приема заполнена, значит, это работающий сотрудник,
-- дата приема входит в интервал, описанный параметрами
И
Дата увольнения не заполнена, что означает, что он не уволен (при этом принят)
Или уволен, но в будущем, дата увольнения находится после даты окончания периода выборки.
Даёте параметры. (к названию не придираться)
&ДН = НачалоДня('20230201') - дата начала периода выборки, 01.02.2023
&ДК = КонецДня('20231022') - дата окончания выборки, 22.10.2023
в запросе условие
ГДЕ
Сотрудники.ДатаПриема между &ДН и &ДК
И (Сотрудники.ДатаУвольнения = ДатаВремя(1,1,1) Или Сотрудники.ДатаУвольнения > &ДК)
Суть.
Дата приема между ДН и ДК, значит, в выборку попадают сотрудники, у которых
-- дата приема заполнена, значит, это работающий сотрудник,
-- дата приема входит в интервал, описанный параметрами
И
Дата увольнения не заполнена, что означает, что он не уволен (при этом принят)
Или уволен, но в будущем, дата увольнения находится после даты окончания периода выборки.
Я пробовал по по-разному, через "," и "." и через "-" всё равно не получается, не подскажете как исправить?
Также пробовал указать через параметры:
Сотрудники.ДатаПриема >= &ДатаПриема
Или
Сотрудники.ДатаУвольнения <= &ДатаУвольнения;
Но при нажатии на кнопку параметры, консоль выдала ошибку: Индекс находится за границами массива.
Также пробовал указать через параметры:
Сотрудники.ДатаПриема >= &ДатаПриема
Или
Сотрудники.ДатаУвольнения <= &ДатаУвольнения;
Но при нажатии на кнопку параметры, консоль выдала ошибку: Индекс находится за границами массива.
(4) Через параметры передавать значения в запрос нормально, только нужно учесть, что в дате хранится не только сама дата, но и время. Поэтому для корректного сравнения при задании параметра следует применять функции НАЧАЛОДНЯ() для даты начала периода и КОНЕЦДНЯ() для конца.
К тому же для того, чтобы в результат попали все, работавшие в этот период, даже один день, нужно, чтобы дата приёма была меньше или равна окончанию периода, а дата увольнения больше начала.
К тому же для того, чтобы в результат попали все, работавшие в этот период, даже один день, нужно, чтобы дата приёма была меньше или равна окончанию периода, а дата увольнения больше начала.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот