• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите составить запрос

  • Автор темы Ramzay
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Ramzay

Есть ЖурналРасчетов.Зарплата, в нем есть атрибуты:
Объект - сотрудник,
ВидРасч - вид расчете
Результат - сумма, начислений или удержаний по виду расчета

Требуется: выбрать сотрудников за период, у которых сумма начислений более 10035


Таким запросом я выбираю всего начиленно по каждому сотруднику:
Код:
с '01.01.2009' по '31.01.2009';
Сот=ЖурналРасчетов.Зарплата.Объект;
ВидРасч=ЖурналРасчетов.Зарплата.ВидРасч;
Рез=ЖурналРасчетов.Зарплата.Результат;

Условие(ВидРасч.ВходитВГруппу(ГруппаРасчетов.ВсеНачисления)=1);

Функция Ит = Сумма(Рез);  //Когда (Сумма(Рез) > 10035); - то, что закоментарено компилятор не воспринимает
Группировка Сот;
//Условие(Ит > 10035); - это компилятор не воспринимает
Иванов - 1000
Петров - 5000
Сидоров - 15000

Что мне нужно написать в запросе, что бы Иванов и Петров туда не попадали т. к. у них сумма начислений <10035?
 
K

KiR

и не воспримет по идее. это нужно как условие написать типа
Условие(Сумма(Рез) > 10035);
 
A

ania

В запросе условие накладывается только на переменные запроса или на те, которые видны в процедуре с этим запросом, а вы накладываете на результат вычисления функции. Вероятнее всего, вы сможете отфильтровать только после выполнения запроса в цикле по сотрудникам наложив ограничение на Ит или попробуйте объявить в этой процедуре переменную Ит.
 
R

Ramzay

и не воспримет по идее. это нужно как условие написать типа
Условие(Сумма(Рез) > 10035);
Попробовал. В результате получил ошибку: Функция не обнаружена (Сумма)


В запросе условие накладывается только на переменные запроса или на те, которые видны в процедуре с этим запросом, а вы накладываете на результат вычисления функции. Вероятнее всего, вы сможете отфильтровать только после выполнения запроса в цикле по сотрудникам наложив ограничение на Ит или попробуйте объявить в этой процедуре переменную Ит.

Не называйте мне этого срашного слова - "цикл".

После того, как я объявил переменную Ит, ей нужно присвоить какое-либо значение (иначе ругается, что Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов ).

Ну я и присвоил 0. В результате выполнения условия: Условие(Ит > 10035); я не получил в выборке ни чего.
Наверное это произошло потому, что условие 0>10035 неверно.

Неужели такая простая задача не под силу 1С-запросу?
 
A

ania

Не понимаю, почему Ит может остаться 0, если Ит = Сумма(Рез) и попробуйте: Функция Ит = Сумма(Рез) Когда (Ит > 10035);
 
R

Ramzay

Не понимаю, почему Ит может остаться 0, если Ит = Сумма(Рез) и попробуйте: Функция Ит = Сумма(Рез) Когда (Ит > 10035);
Не помогает. Возвращает пустой набор записей.
Вы не поверите, но если написать в запросе:
Код:
...
Группировка Сот;
Функция Ит = Сумма(Рез);
Группировка Ит;
Она ругается, что "Переменная 'Ит' не опеределена". Хотя вызов запроса выглядет так:
Код:
Ит=0;
Если Запр.Выполнить(ТекстЗапроса) = 0 Тогда
Сообщить("Не выполнился запрос!");
Возврат;
КонецЕсли;

Может быть я не правильно определил переменную Ит?
 
A

ania

Почему вы не хотите сделать через цикл?:
Пока Запрос. Группировка("Сот")=1 Цикл
Если Запрос.Ит>10035 Тогда
//...
КонецЕсли;
КонецЦикла;
Так точно работает
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!