Имя: Пароль:
1C
1С v8
Условия в запросе
0 Besometr
 
28.12.16
15:52
Приветствую!

Переводим конфу на новую платформу,
Было: 8.3.5.1443 + режим совместимости Версия 8.3.3
Стало: 8.3.9.1818 без режима совместимости.

Ловлю ошибку в запросе на условии:
И ВЫБОР
  КОГДА &ЕстьУсловие
     ТОГДА ТИПЗНАЧЕНИЯ(ВТ.Документ) В (&Типы)
     ИНАЧЕ ИСТИНА
  КОНЕЦ

Параметры устанавливаются:
Запрос.УстановитьПараметр("ЕстьУсловие", ТипыДокументов <> Неопределено);
Запрос.УстановитьПараметр("Типы", ТипыДокументов);

Когда ТипыДокументов = Неопределено, Типы не заполняются и появляется ошибка:
Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.

Неужели теперь проверяются все условия, хотя первого достаточно, что бы не заходить в ветку?
М.б. секрет какой кесть?)
1 HEKPOH
 
28.12.16
16:00
а на 8.3.5.1443 работало?
2 Besometr
 
28.12.16
16:02
146%)
3 HEKPOH
 
28.12.16
16:29
запрос в консоли или в коде?
4 HEKPOH
 
28.12.16
16:44
8.3.9.1818
скульный запрос на основании запроса в (1) при ЕстьУсловие = Ложь выдает "WHERE 1=1".
При Истина - конструкцию "CASE WHEN..."
Но только в том случае, когда переменная ТипыДокументов имеет тип "Тип".
Если ТипыДокументов другого типа, ругается.

Жаль 8.3.3 под рукой нету
5 Besometr
 
28.12.16
19:00
Запрос

ВЫБРАТЬ ПЕРВЫЕ 10
    АктОбОказанииПроизводственныхУслуг.Ссылка
ИЗ
    Документ.АктОбОказанииПроизводственныхУслуг КАК АктОбОказанииПроизводственныхУслуг
ГДЕ
    ВЫБОР
            КОГДА &ЕстьОтбор = ИСТИНА
                ТОГДА ТИПЗНАЧЕНИЯ(АктОбОказанииПроизводственныхУслуг.Ссылка) В (&Отбор)
            ИНАЧЕ ИСТИНА
        КОНЕЦ


Параметры
ЕстьОтбор = Ложь
Отбор = неопределено


8.3.5.1443

SELECT TOP 10
T1._IDRRef
FROM dbo._Document261 T1
WHERE 0x01 = 0x01
6 youalex
 
28.12.16
20:44
(0) что мешает в параметр &Типы - передавать пустой массив/СЗ ?
7 Besometr
 
29.12.16
09:42
Ничего не мешает, только таких запросов у меня сотни. Тем более что работа компилятора в версии 8.3.5.1443 мне кажется более логичной.
8 h-sp
 
29.12.16
10:15
(7) ну, напиши в 1с, пусть зарегистрируют ошибку
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.