|
Ошибка при сравнении | ☑ | ||
---|---|---|---|---|
0
Economics
17.01.13
✎
12:03
|
Здравствуйте. Помогите пожалуйста разобраться.
Необходимо в отчете разделить сотрудников на опытных и неопытных. Для этого сравниваю дату приема на работу (из справочника) и дату операции-3 месяца (из регистра накопления). При сравнении выдает ошибку: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ |Пр.Мастер КАК Мастер, |Пр.Период КАК Период, |Пр.Сотрудник КАК Сотрудник, |Пр.Номенклатура КАК Номенклатура, |Пр.Количество КАК Количество, |Пр.Расценка КАК Расценка, |Пр.Количество*Пр.Расценка КАК Сумма, |Пр.Сотрудник.ДатаПриема КАК Прием, |ДОБАВИТЬКДАТЕ(Пр.Период, Месяц, -3) КАК Разность |ИЗ |РегистрНакопления.Производительность КАК Пр |ГДЕ |Пр.Бригадир = &Мастер И |Пр.Сотрудник <> &Мастер |СГРУППИРОВАТЬ ПО |Пр.Мастер, |Пр.Период, |Пр.Сотрудник, |Пр.Номенклатура, |Пр.Сотрудник.ДатаПриема, |Пр.Количество, |Пр.Расценка |ИТОГИ СУММА(Сумма) ПО Общие"; Запрос.УстановитьПараметр("Мастер", Мастер); Резалт = Запрос.Выполнить().Выбрать(); Пока Резалт.Следующий()Цикл Разность = Резалт.Разность; Прием = Резалт.Прием; Если Разность < Прием Тогда На последней строчке и выдает ошибку |
|||
1
Reset
17.01.13
✎
12:04
|
Ну проверь типы, зачем для этого на форум?
|
|||
2
Economics
17.01.13
✎
12:08
|
Тип = Резалт.Прием;
Если ТипЗнч(Тип) = Тип("Null")Тогда Сообщить("Нулл"); Иначе Сообщить ("Не нулл"); КонецЕсли; Проверял так. Сообщает, что нулл. В запросе прописываю ЕСТЬNULL- не помогает. По другому не умею( |
|||
3
Starhan
17.01.13
✎
12:17
|
(0) потому что у тя первая строчка итоги СУММА. Остальные поля пустые
|
|||
4
Starhan
17.01.13
✎
12:17
|
первая строчка вы выборке*
|
|||
5
Starhan
17.01.13
✎
12:19
|
(2) а зачем проверять?
отладчик остановка по ошибке когда остановится смотри значения и типы |
|||
6
Economics
17.01.13
✎
12:29
|
(5) Сделал так. Показывает у обеих сравниваемых переменных тип Null.
Как переделать запрос? ЕСТЬNULL не помогает. |
|||
7
Starhan
17.01.13
✎
12:34
|
(6) естественно не помогает у тебя же общие итоги поля СУММА.
И в первой сторке кроме поля сумма все поля NULL либо убери итоги (непонятно зачем тебе они) либо пропускай первую строчку выборки либо перед сравнением поставь проверку на то что оба поля не NULL |
|||
8
Starhan
17.01.13
✎
12:36
|
либо выборку правильно опиши сначала по итогам потом по детальным записям
|
|||
9
Catseye
17.01.13
✎
12:37
|
Заместо
ДОБАВИТЬКДАТЕ(Пр.Период, Месяц, -3) КАК Разность Попробуй: Выбор Когда ДОБАВИТЬКДАТЕ(Пр.Период, Месяц, -3) ЕСТЬ NULL Тогда &НулеваяДата Иначе ДОБАВИТЬКДАТЕ(Пр.Период, Месяц, -3) Конец КАК Разность Запрос.УстановитьПараметр("НулеваяДата", Дата("19900101")); |
|||
10
Catseye
17.01.13
✎
12:39
|
и да, в (7) правы - обработку запроса неверно нарисовал. Тебе нужно такое сравнение делать в детальных записях
|
|||
11
Economics
17.01.13
✎
12:46
|
(7) , (9)
Спасибо, буду пробовать. |
|||
12
Reset
17.01.13
✎
12:48
|
(9) Можно же проще :)
IsNull(ДОБАВИТЬКДАТЕ(Пр.Период, Месяц, -3),&НулеваяДата) КАК Разность |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |