|
ЗУП, странное поведение запроса. | ☑ | ||
---|---|---|---|---|
0
suvolod
24.08.12
✎
12:51
|
Исходные данные. При приеме на работу сотруднику назначено основное начисление "Оклад по часам". С 1 августа кадровым перемещением это начисление убрали (в документе, на вкладке Начисления, напротив "оклада по часам выбрано" Действие > Прекратить.
Теперь мне нужно запросом выбрать начисления сотрудника. Пишу: ВЫБРАТЬ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&МомВремени, Сотрудник = &Сотрудник) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних В результат запроса (на 02.08.12) у меня попало начисление "Оклад по часам" с Действием = Прекратить. Теперь я хочу отсеять такие неактуальные начисления. Пишу запрос: ВЫБРАТЬ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&МомВремени, Сотрудник = &Сотрудник И Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних ... и что вижу - в результат запроса у меня каким-то волшебным образом попадает та-же запись, но в поле действие у нее уже стоит "Начать". И сколько я не бился, так и не смог понять откуда эта запись появилась. Пока переписал запрос так: ВЫБРАТЬ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие, ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета ИЗ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&МомВремени, Сотрудник = &Сотрудник) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних ГДЕ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить) Запрос работает правильно, т.е у меня возвращается пустой результат. Одноко прошу подсказать, что не так со вторым запросом и откуда после 02.08.12 он находит запись с действием "Начать" |
|||
1
фросия
24.08.12
✎
13:00
|
попробуй условие на вид действия перенести в ГДЕ
|
|||
2
almar
24.08.12
✎
13:05
|
(0) во втором запросе ты делаешь срез последних из всех записей с действием неравным Прекратить. И запрос его честно возвращает. В 3 запросе ты сначала получаешь срез поледних, а потом его фильтруешь оператором ГДЕ
|
|||
3
suvolod
24.08.12
✎
14:09
|
(2)almar, ты хочешь сказать, что выставляя параметры в виртуальной таблице СрезПоследних, на самом деле я фильтрую записи до получения среза? Как-то нелогично получается.. ведь тогда, чтобы правильно отработал фильтр на срез, указание фильтра в параметрах запроса не имеет смысла, т.к. в любом случае придется фильтровать повторно через ГДЕ
|
|||
4
Val54321
24.08.12
✎
14:15
|
есть начисление и действие, а есть начисление завершения и действие завершения
|
|||
5
suvolod
24.08.12
✎
14:19
|
расшифруй :)
|
|||
6
suvolod
24.08.12
✎
14:21
|
... ты имел ввиду, что мой запрос вообще построен неверно и я должен обращаться к другим полям регистра ОснНачисления?
|
|||
7
Aprobator
24.08.12
✎
14:22
|
насколько я помню, действие - ресурс. Поэтому накладывать на него условие в параметрах виртуальной таблицы - ошибка.
|
|||
8
Dmitry77
24.08.12
✎
14:22
|
ответь себе на вопрос
есть 2 записи 01.01.12 Иванов Начать 100 01.02.12 Иванов прекратить 0 во втором запросе ты сначала фильтруешь эти записи условием (&МомВремени, Сотрудник = &Сотрудник И Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением. получешь 01.01.12 Иванов Начать 100 а потом делаешь отобрать последнее получаешь 01.01.12 Иванов Начать 100 в последнем, ты фильтруешь записи условием (&МомВремени, Сотрудник = &Сотрудник) 01.01.12 Иванов Начать 100 01.02.12 Иванов прекратить 0 потом из них отбираешь последнее результат 01.02.12 Иванов прекратить 0 потом накладываешь условия ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить) и не получаешь ни одной записи. |
|||
9
Aprobator
24.08.12
✎
14:23
|
читаем ИТС внимательно, там это все описано.
|
|||
10
Aprobator
24.08.12
✎
14:27
|
а запрос реально кривой. Поскольку есть еще Действие завершения. С начислениями введеными без даты окончания действия это прокатит, а вот с дата окончания уже нет. Посмотри тот же документ начисление зарплаты - заполнение ТЧ.
|
|||
11
Val54321
24.08.12
✎
14:29
|
посмотри внимательно структуру регистра, возьми в запросе выведи все поля и сразу поймешь в чем дело
|
|||
12
suvolod
24.08.12
✎
14:30
|
(8),(9) спасибо
(9)не подскажешь, в какой статье на ИТС разобрана моя ситуация с запросом? |
|||
13
Aprobator
24.08.12
✎
14:36
|
(12) там было описание запросов еще по 8.1.. Статью уже не помню. Но было в методических рекомендациях по программированию вроде.
|
|||
14
dnab
24.08.12
✎
14:36
|
там в измерениях ДокументОснование. Зачем это сделано я так и не понял
|
|||
15
Aprobator
24.08.12
✎
14:37
|
кратко суть по твоей теме - в параметрах виртуальной таблицы условие накладывается только на измерения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |