Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 июл 2022, 03:43

Ограничение выходных данных запроса

Автор Dmitry Qwe, 04 ноя 2017, 14:00

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

Dmitry Qwe

Можно как то ограничить выходные данные запроса?Ну т.е чтобы не переберать все данные запроса в цикле и искать только нужные

alex0402

Условие в запросе ГДЕ <условие нужных записей>
Спасибо за Сказать спасибо

Dmitry Qwe

Цитата: alex0402 от 04 ноя 2017, 17:34
Условие в запросе ГДЕ <условие нужных записей>
Пытаюсь сделать так

ВЫБРАТЬ
Сотрудники.Ссылка
ИЗ
Справочник.Сотрудники  как сотрудники
ГДЕ
КОЛИЧЕСТВО(Сотрудники.Ссылка)<=10

Но вылетает ошибка: "Операция не разрешена в предложении ГДЕ"

ilyay

Функция Количество() относится к агрегатным функциям. Агрегатные функции используются только при группировке (СГРУППИРОВАТЬ ПО). Условие на агрегатную функцию накладывается в секции ИМЕЮЩИЕ.

Возможно, ваш запрос некорректен не только синтаксически, но и семантически. Зачем брать количество от ссылки? Вы хотите проверить, что ссылок в справочнике не более 10?

Тогда просто напишите
ВЫБРАТЬ
Количество(Сотрудники.Ссылка) Как КоличествоЭлементов
ИЗ
Справочник.Сотрудники  как сотрудники

И на языке 1С проверьте количество

Dmitry Qwe

ilyay, Я хочу чтобы запрос выбирал не больше 10 записей, т.е сотрудников

ilyay

ВЫБРАТЬ ПЕРВЫЕ 10
Сотрудники.Ссылка
ИЗ
Справочник.Сотрудники  как сотрудники

Dmitry Qwe

ilyay, Точно, из головы данная конструкция вылетела, но в моем запросе всеравно не помогает   

Запрос.Текст =
          "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
        | СотрудникиПодразделений.ОргПодразделение,
        | Сотрудники.Ссылка КАК Сотрудник,
        | СотрудникиПодразделений.Дата,
        | СотрудникиПодразделений.РольВПодразделении,
        | СотрудникиПодразделений.ДатаОкончания,
        | ЕСТЬNULL(СотрудникиПодразделений.ИндексСортировки, 1000) КАК ИндексСортировки
        |ИЗ
        | Справочник.Сотрудники КАК Сотрудники
        | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СотрудникиПодразделений КАК СотрудникиПодразделений
        | ПО СотрудникиПодразделений.Сотрудник = Сотрудники.Ссылка
        |ГДЕ " +
       ?(ЗначениеЗаполнено(ОргПодразделение),"   СотрудникиПодразделений.ОргПодразделение = &ОргПодр
        | И СотрудникиПодразделений.Дата <= &Дата
        | И (СотрудникиПодразделений.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
        | ИЛИ СотрудникиПодразделений.ДатаОкончания > &Дата) ", " 1=1 ") + "
        | И Сотрудники.Ссылка.Наименование ПОДОБНО ""%"" + &Наименование + ""%""
        | И ЕСТЬNULL(Сотрудники.Ссылка.Состояние.ИСпользуется, Истина) = ИСТИНА
        |
        |УПОРЯДОЧИТЬ ПО
        | ИндексСортировки";
 

ilyay

Во-первых, в вашем запросе нет ПЕРВЫЕ.
Во-вторых, лучше сначала выбрать записи из регистра и наложить на них условие, а уже результат соединять с сотрудниками. Иначе у вас отборы будут применяться к NULL.
В-третьих, если вам надо именно 10 сотрудников, то сначала отбираете 10 сотрудников, а потом делаете левое соединение к этой выборке.

Dmitry Qwe

Цитата: ilyay от 07 ноя 2017, 16:02
Во-первых, в вашем запросе нет ПЕРВЫЕ.
Во-вторых, лучше сначала выбрать записи из регистра и наложить на них условие, а уже результат соединять с сотрудниками. Иначе у вас отборы будут применяться к NULL.
В-третьих, если вам надо именно 10 сотрудников, то сначала отбираете 10 сотрудников, а потом делаете левое соединение к этой выборке.
1. Просто убрал, потому что не работает
3. Как это можно сделать если ПЕРВЫЕ 10 не работают?

ilyay

Регистр есть: "РегистрСведений.СотрудникиПодразделений"
Запрос будет иметь структуру:

ВЫБРАТЬ РАЗРЕШЕННЫЕ рс.поля...
ПОМЕСТИТЬ ПоПодразделениям
ИЗ РегистрСведений.СотрудникиПодразделений как рс
ГДЕ условия_на_регистр ;

ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 10 с.поля...
ПОМЕСТИТЬ Сотрудники
ИЗ Справочник.Сотрудники КАК с
ГДЕ условия_на_сотрудников
;

ВЫБРАТЬ РАЗЛИЧНЫЕ нужные_поля
ИЗ Сотрудники ЛЕВОЕ СОЕДИНЕНИЕ ПоПодразделениям
ПО Сотрудники.Ссылка = ПоПодразделениям.Сотрудник
ГДЕ общие_условия

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск