Имя: Пароль:
1C
1С v8
Ошибка при сравнении
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),&НулеваяДата) КАК Разность