Имя: Пароль:
1C
1С v8
как узнать - на какой строке запроса идет деление на 0 ?
0 lamme
 
08.06.16
17:24
Многокилометровый запрос .. с многими местами где идет деление...

Ошибка лаконична и понятна.
Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Обнаружена ошибка: деление на ноль.
HRESULT=80040E14, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1


Как определить - какое условие надо исправить? на каком оно валиться ?
1 Зая Бусечка
 
08.06.16
17:24
Предлагаю поправить все деления
2 lamme
 
08.06.16
17:25
раза 4 повторяется

                       |                            ТОГДА РТУ.Сумма * 100 / РТУ.ПроцентСкидкиНаценки - ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0) + ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0)


вот че тут не так ? и как так - чтобы отработалось ?
Проверку на нулл добавить ?
3 lamme
 
08.06.16
17:25
(1)
да я за ...
этим и занимаюсь
4 Timon1405
 
08.06.16
17:26
заменить
икс/игрек на

икс/Выбор когда игрек=0 тогда 0.0001 иначе игрек конец

там где будут большие числа, там и был 0
5 Nuobu
 
08.06.16
17:30
РТУ.Сумма * 100 / РТУ.ПроцентСкидкиНаценки - ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0) + ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0)

РТУ.Сумма * 100 / РТУ.ПроцентСкидкиНаценки = (Выбор Когда
РТУ.ПроцентСкидкиНаценки = 0 Тогда 0 Иначе РТУ.Сумма*100/РТУ.ПроцентСкидкиНаценки Конец) - ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0) = (Выбор Когда Возвраты.ПроцентСкидкиНаценки = 0 Тогда 0 Иначе ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0) Конец) + ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0) = (Выбор Когда (100 - Корректировки.ПроцентСкидкиНаценки) = 0 Тогда 0 Иначе ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0))

Слева и справа от "=" изменённые выражения.
6 Nuobu
 
08.06.16
17:31
(5) В конце получится:(Выбор Когда
РТУ.ПроцентСкидкиНаценки = 0 Тогда 0 Иначе РТУ.Сумма*100/РТУ.ПроцентСкидкиНаценки Конец) - (Выбор Когда Возвраты.ПроцентСкидкиНаценки = 0 Тогда 0 Иначе ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0) Конец) + (Выбор Когда (100 - Корректировки.ПроцентСкидкиНаценки) = 0 Тогда 0 Иначе ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0))
7 lamme
 
08.06.16
17:32
ага ..
понятно ... был многокилометровым .. добавим еще пару километров - чтоб потом нифига не разобрать ...
спасибо
8 lamme
 
08.06.16
17:33
в итоге такое вот  получилось
ВЫБОР
    КОГДА СантМотивацияОбороты.ТипЦен = &Базовая
        ТОГДА ВЫБОР
                КОГДА РТУ.Акция = ИСТИНА
                        ИЛИ Возвраты.Акция = ИСТИНА
                        ИЛИ Корректировки.Акция = ИСТИНА
                    ТОГДА ВЫБОР
                            КОГДА РТУ.ПроцентСкидкиНаценки = 0
                                ТОГДА 0
                            ИНАЧЕ РТУ.Сумма * 100 / РТУ.ПроцентСкидкиНаценки
                        КОНЕЦ - ВЫБОР
                            КОГДА Возвраты.ПроцентСкидкиНаценки = 0
                                ТОГДА 0
                            ИНАЧЕ ЕСТЬNULL(Возвраты.Сумма * 100 / Возвраты.ПроцентСкидкиНаценки, 0)
                        КОНЕЦ + ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0)
                ИНАЧЕ РТУ.Сумма - ЕСТЬNULL(Возвраты.Сумма, 0) + ЕСТЬNULL(Корректировки.Сумма, 0)
            КОНЕЦ
КОНЕЦ
9 lamme
 
08.06.16
17:39
не читабельно вообще такой синтаксис ...
ВЫБОР
    КОГДА СантМотивацияОбороты.ТипЦен = &Базовая
        ТОГДА ВЫБОР
                КОГДА РТУ.Акция = ИСТИНА
                        ИЛИ Возвраты.Акция = ИСТИНА
                        ИЛИ Корректировки.Акция = ИСТИНА
                    ТОГДА ВЫБОР КОГДА РТУ.ПроцентСкидкиНаценки = 0 ТОГДА 0 ИНАЧЕ РТУ.Сумма * 100 / РТУ.ПроцентСкидкиНаценки  КОНЕЦ
-
ВЫБОР КОГДА Возвраты.ПроцентСкидкиНаценки = 0 ТОГДА 0 ИНАЧЕ ЕСТЬNULL(Возвраты.Сумма * 100 /Возвраты.ПроцентСкидкиНаценки, 0)КОНЕЦ
+ ЕСТЬNULL(Корректировки.Сумма * 100 / (100 - Корректировки.ПроцентСкики), 0)
                ИНАЧЕ РТУ.Сумма - ЕСТЬNULL(Возвраты.Сумма, 0) + ЕСТЬNULL(Корректировки.Сумма, 0)
            КОНЕЦ
КОНЕЦ
10 lamme
 
08.06.16
17:39
вот так на мой взгля хоть понятнее . читабельнее
11 Nuobu
 
08.06.16
17:41
(9) / (100 - Корректировки.ПроцентСкики),
12 Cyberhawk
 
08.06.16
17:47
Чтобы было читабельнее, помещай запрос, где у полей обертки естьнулл, в ВТ и в следующем пакете работай уже с полями этой ВТ без этих оберток
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн