Имя: Пароль:
1C
1С v8
Странное поведение платформы: запрос в консоли значение возвращает, а в обработке - нет
0 vdeemer
 
15.07.21
14:57
Добрый день!
Делаю простой запрос к табличной части документа, выборка с итогами по ссылке документа - нужно пройтись по документам и строкам их ТЧ. Казалось бы, что может пойти не так? Однако результат запроса пуст. Выбираю этот же запрос в консоли - не пуст. Перевел базу на серверный вариант, смотрю в профайлере:

SELECT
T1._Document25_IDRRef,
T2._Fld476RRef,
T2._Date_Time
FROM dbo._Document25_VT3180 T1 WITH(NOLOCK)
LEFT OUTER JOIN dbo._Document25 T2 WITH(NOLOCK)
ON T1._Document25_IDRRef = T2._IDRRef
LEFT OUTER JOIN dbo._Reference2 T3 WITH(NOLOCK)
ON T2._Fld476RRef = T3._IDRRef
WHERE (1=0) AND (T2._Date_Time >= P1) AND (T3._Code = @P2) AND (T2._Marked = 0x00)
ORDER BY (T2._Date_Time) DESC

Условие в первых скобках после WHERE всегда ложь, поэтому ни одна запись выбрана не будет. Откуда оно взялось вообще???
1 H A D G E H O G s
 
15.07.21
15:00
1С умнее, чем тебе кажется
2 H A D G E H O G s
 
15.07.21
15:00
Покажи текст запроса в 1С
3 vdeemer
 
15.07.21
15:08
ВЫБРАТЬ
    ЗаказТоваровДокументыИздательств.Ссылка КАК Ссылка,
    ЗаказТоваровДокументыИздательств.Ссылка.Контрагент КАК Контрагент,
    ЗаказТоваровДокументыИздательств.Ссылка.Дата КАК Дата
ИЗ
    Документ.ЗаказТоваров.ДокументыИздательств КАК ЗаказТоваровДокументыИздательств
ГДЕ
    ЗаказТоваровДокументыИздательств.Издательство = &Издательство
    И ЗаказТоваровДокументыИздательств.Ссылка.Дата >= &ДатаНачалаПоискаЗаказов
    И ЗаказТоваровДокументыИздательств.Ссылка.Контрагент.Код = 6791
    И НЕ ЗаказТоваровДокументыИздательств.Ссылка.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
ИТОГИ
    МАКСИМУМ(Ссылка)
ПО
    Контрагент
4 vdeemer
 
15.07.21
15:09
(2) похоже, условие
ЗаказТоваровДокументыИздательств.Издательство = &Издательство
ведет себя не так, как ожидается
5 vdeemer
 
15.07.21
15:10
Ну да, так и есть

ВЫБРАТЬ
    ЗаказТоваровДокументыИздательств.Ссылка КАК Ссылка,
    ЗаказТоваровДокументыИздательств.Ссылка.Контрагент КАК Контрагент,
    ЗаказТоваровДокументыИздательств.Ссылка.Дата КАК Дата
ИЗ
    Документ.ЗаказТоваров.ДокументыИздательств КАК ЗаказТоваровДокументыИздательств
ГДЕ
    ЗаказТоваровДокументыИздательств.Издательство = &Издательство

УПОРЯДОЧИТЬ ПО
    Дата УБЫВ
ИТОГИ
    МАКСИМУМ(Ссылка)
ПО
    Контрагент

выдает

SELECT
T1._Document25_IDRRef,
T2._Fld476RRef,
T2._Date_Time
FROM dbo._Document25_VT3180 T1 WITH(NOLOCK)
LEFT OUTER JOIN dbo._Document25 T2 WITH(NOLOCK)
ON T1._Document25_IDRRef = T2._IDRRef
WHERE (1=0)
ORDER BY (T2._Date_Time) DESC
6 acht
 
15.07.21
15:11
Тип значения параметра какой? И какой тип у ЗаказТоваровДокументыИздательств.Издательство?
7 H A D G E H O G s
 
15.07.21
15:11
&Издательство

Точно правильный тип параметра?
8 vdeemer
 
15.07.21
15:11
(6) Воооот, буквально с языка снял - я лось! Там тип другой.
9 1Сергей
 
15.07.21
15:11
(4) Конечно не так, если значения не совпадают
10 vdeemer
 
15.07.21
15:12
Спасибо, есть такая работа - из болота тащить бегемота))
11 H A D G E H O G s
 
15.07.21
15:40
Хороший пример, Насколько заморочились с оптимизацией 1С
12 Garykom
 
гуру
15.07.21
15:52
Ступил с типами несовпадающими и зачем то полез в профайлер
Правильно я понял?
13 Garykom
 
гуру
15.07.21
15:53
(0) В следующий раз ты сразу в отладчик кода C++ платформы 1С иди
14 Kassern
 
15.07.21
15:55
(13) а давно ли исходный код платформы открытым стал?) А по теме, всякое бывает, видимо был уверен в параметрах, раз в профайлер полез, а когда увидел 0=1 в условии решил сюда написать
15 ДядяМитяй
 
15.07.21
15:56
А как же он в консоли 1с выдавал чего-то с несовпадающими типами? Это уже никого не интересует?
16 ДядяМитяй
 
15.07.21
15:58
(15) сам себе отвечу - консоль не давала задать значение неправильного типа.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.