Имя: Пароль:
1C
1С v8
Деление на ноль в SQL
0 Guzey
 
12.04.16
11:33
Добрый день Коллеги. Столкнулся с проблемой, ошибка деления на ноль. Вроде все просто, но начал ковырять и наткнулся на странную проблему. Имеем вот такой запрос:

ВЫБРАТЬ
    СпрУпаковки.Ссылка КАК Ссылка,     
    СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КАК Коэффициент
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.УпаковкиЕдиницыИзмерения КАК СпрУпаковки
        ПО (СпрУпаковки.Владелец = ВЫБОР
                КОГДА СпрНоменклатура.НаборУпаковок = ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ИндивидуальныйДляНоменклатуры)
                    ТОГДА СпрНоменклатура.Ссылка
                КОГДА СпрНоменклатура.НаборУпаковок <> ЗНАЧЕНИЕ(Справочник.НаборыУпаковок.ПустаяСсылка)
                    ТОГДА СпрНоменклатура.НаборУпаковок
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ)
ГДЕ
    СпрНоменклатура.Ссылка = &Номенклатура
    И НЕ СпрУпаковки.ПометкаУдаления

УПОРЯДОЧИТЬ ПО
    Ссылка ИЕРАРХИЯ

При делении запрос выдает ошибку деления на ноль в SQL базе. Эта же база в файловой ошибку не возвращает.
Если в sql базе не делить, а просто вывести отдельно знаменатель и числитель, то они не равны нулю. Если из запроса убрать внутреннее соединение, ошибка не возникает. Кто с таким сталкивался, как такое решать?
1 shuhard
 
12.04.16
11:35
(0) поймай запрос профайлером и позырь
2 Тролль главный
 
12.04.16
11:37
3 ssalikoff
 
12.04.16
11:38
(0) Для знатоков MSSQL. Ошибка возникает только в серверном режиме.
В этой ветке всё гораздо подробней описано
Но решения пока никто не предложил

Интересно, что проблема как минимум три недели существует с момента выхода релиза 11.2.3.108
но сообщение о проблеме были на мисте опубликовано почти одновременно
4 Тролль главный
 
12.04.16
11:39
(3) вот это
ВЫБОР КОГДА НЕ СпрУпаковки.ЭтоГруппа ТОГДА СпрУпаковки.Числитель / СпрУпаковки.Знаменатель КОНЕЦ

не помогло?
5 ssalikoff
 
12.04.16
11:42
(4) Нет, СправочникУпаковки там иерархия элементов
нет там никаких групп
6 Карупян
 
12.04.16
11:44
КОГДА ЕСТЬNULL(СпрУпаковки.Знаменатель, 0) = 0 ТОГДА ...
7 ssalikoff
 
12.04.16
11:46
(6) Вообще вопрос не как обойти проблему — это совсем несложно. Вопрос в другом - почему?
То есть наблюдается явление противоречащее здравому смыслу, а объяснения нет.
8 Карупян
 
12.04.16
11:49
если ты хочешь понять почему, то лови профайлером
9 НЕА123
 
12.04.16
12:10
(0)
странный, очень странный запрос.
10 Guzey
 
12.04.16
12:53
(1) Поймал, деление 1 на 1
(2) Оп! И правда дежавю, пошел изучать
(6) Не катит, проверял, там точно число, нет ни нуля, не NULL`а. Результат запроса в консоле Числитель = 1, Знаменатель = 1.
(9) Запрос из типовой конфигурации, так что комментировать странность не буду.

Пока меня смущает то что, в соединении оба условия возвращают истину, убираю любое из условий проблема не возникает.

Кстати проверил на постргре, ошибки нету. Похоже скуль не корректно интерпретирует условие в соединении.
11 Тролль главный
 
12.04.16
12:56
(10) не скуль, а 1С скармливает скулю криво
12 Guzey
 
12.04.16
12:57
Проблема еще решается кстати если упорядочивать без ИЕРАРХИИ, но поведение все таки странное. Буду писать на хот лайн 1с-ников, проблема все таки похоже платформенная.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс