Имя: Пароль:
1C
 
Ошибка SQL деление на ноль.
0 Patrio_
O_Muerte
 
29.07.09
14:29
Ситуация: у одного из пользователей валится отчет с ошибкой:

{Форма.Отчет(53)}: Ошибка при вызове метода контекста (Вывести): Ошибка выполнения запроса "Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Обнаружена ошибка: деление на ноль.
HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1
"
   ПостроительОтчетаОтчет.Вывести(ЭлементыФормы.ПолеТабличногоДокумента);
по причине:
Ошибка выполнения запроса "Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Обнаружена ошибка: деление на ноль.
HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1
"
по причине:
Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Обнаружена ошибка: деление на ноль.
HRESULT=80040E14, SQLSrvr: Error state=1, Severity=10, native=8134, line=1

Когда я формирую этот отчет под своим логином  с теми же настройками, что и у пользователя отчет формируется нормально. И когда я на компьютере сотрудника под собой захожу тоже все нормально формируется. Ошибка возникает у этого пользователя и у пользователя, созданного копированием от данного не важно на каком компьютере. Как определить причину ошибки?
1 Semargl
 
29.07.09
14:31
Запрос какой
2 Господин ПЖ
 
29.07.09
14:31
права разные
3 Господин ПЖ
 
29.07.09
14:32
+ кривой отчет
4 shuhard
 
29.07.09
14:33
(0) Разрешенные впендюрь
5 Patrio_
O_Muerte
 
29.07.09
14:39
ВЫБРАТЬ
   АссортиментнаяМатрицаОсновная.НоменклатураОсновная КАК Номенклатура,
   ЗакупочныеЦены.Цена КАК ЦенаЗакупочная,
   ПродажныеЦены.Цена КАК ЦенаПродажная,
   ВЫРАЗИТЬ((ВЫРАЗИТЬ(ПродажныеЦены.Цена КАК ЧИСЛО(20, 2))) / (ВЫРАЗИТЬ(ЗакупочныеЦены.Цена КАК ЧИСЛО(20, 2))) * 100 - 100 КАК ЧИСЛО(10, 2)) КАК ПроцентНадбавки,
   УчетПродаж.СуммаОборот КАК Сумма,
   УчетПродаж.КоличествоОборот КАК Количество,
   ЕСТЬNULL(АссортиментнаяМатрицаДляСравнения.Значение, "Пассивный") КАК ЗначениеИзПодчиненнойМатрицы
ИЗ
   (ВЫБРАТЬ
       АссортиментныеМатрицы.Объект КАК НоменклатураОсновная,
       АссортиментныеМатрицы.АссортиментнаяМатрица КАК МатрицаОсновная,
       АссортиментныеМатрицы.Значение КАК Значение
   ИЗ
       РегистрСведений.АссортиментныеМатрицы КАК АссортиментныеМатрицы
   {ГДЕ
       АссортиментныеМатрицы.Объект.* КАК Номенклатура,
       АссортиментныеМатрицы.АссортиментнаяМатрица.* КАК АссортиментнаяМатрицаОсновная,
       АссортиментныеМатрицы.Значение.* КАК ПризнакНоменклатурыВОсновнойМатрице}) КАК АссортиментнаяМатрицаОсновная
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           ПериодыИЦены.Цена КАК Цена,
           МаксимальныеПериоды.Номенклатура КАК Номенклатура,
           МаксимальныеПериоды.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница
       ИЗ
           (ВЫБРАТЬ
               ЦеныНоменклатурыЗакупочныеСрезПоследних.Номенклатура КАК Номенклатура,
               МАКСИМУМ(ЦеныНоменклатурыЗакупочныеСрезПоследних.Период) КАК Период,
               ЦеныНоменклатурыЗакупочныеСрезПоследних.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница
           ИЗ
               РегистрСведений.ЦеныНоменклатурыЗакупочные.СрезПоследних({(&КонецПериода)}, {(Номенклатура), (СтруктурнаяЕдиница.АссортиментнаяМатрица) КАК АссортиментнаяМатрицаОсновная}) КАК ЦеныНоменклатурыЗакупочныеСрезПоследних
           
           СГРУППИРОВАТЬ ПО
               ЦеныНоменклатурыЗакупочныеСрезПоследних.Номенклатура,
               ЦеныНоменклатурыЗакупочныеСрезПоследних.СтруктурнаяЕдиница) КАК МаксимальныеПериоды
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.Номенклатура КАК Номенклатура,
                   МАКСИМУМ(ЦеныНоменклатурыЗакупочныеСрезПоследних.Период) КАК Период,
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.Цена КАК Цена,
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.СтруктурнаяЕдиница КАК СтруктурнаяЕдиница
               ИЗ
                   РегистрСведений.ЦеныНоменклатурыЗакупочные.СрезПоследних({(&КонецПериода)}, {(Номенклатура), (СтруктурнаяЕдиница.АссортиментнаяМатрица) КАК АссортиментнаяМатрицаОсновная}) КАК ЦеныНоменклатурыЗакупочныеСрезПоследних
               
               СГРУППИРОВАТЬ ПО
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.Номенклатура,
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.Цена,
                   ЦеныНоменклатурыЗакупочныеСрезПоследних.СтруктурнаяЕдиница) КАК ПериодыИЦены
               ПО (ПериодыИЦены.Номенклатура = МаксимальныеПериоды.Номенклатура)
                   И (ПериодыИЦены.Период = МаксимальныеПериоды.Период)
                   И МаксимальныеПериоды.СтруктурнаяЕдиница = ПериодыИЦены.СтруктурнаяЕдиница) КАК ЗакупочныеЦены
       ПО АссортиментнаяМатрицаОсновная.НоменклатураОсновная = ЗакупочныеЦены.Номенклатура
           И АссортиментнаяМатрицаОсновная.МатрицаОсновная = ЗакупочныеЦены.СтруктурнаяЕдиница.АссортиментнаяМатрица
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           АссортиментныеМатрицы.Объект КАК НоменклатураДляСравнения,
           АссортиментныеМатрицы.АссортиментнаяМатрица КАК МатрицаДляСравнения,
           АссортиментныеМатрицы.Значение КАК Значение
       ИЗ
           РегистрСведений.АссортиментныеМатрицы КАК АссортиментныеМатрицы
       {ГДЕ
           АссортиментныеМатрицы.Объект.* КАК Номенклатура,
           АссортиментныеМатрицы.АссортиментнаяМатрица.* КАК АссортиментнаяМатрицаДляСравнения}) КАК АссортиментнаяМатрицаДляСравнения
       ПО АссортиментнаяМатрицаОсновная.НоменклатураОсновная = АссортиментнаяМатрицаДляСравнения.НоменклатураДляСравнения
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           МаксимальныйПериодПродажныхЦен.Номенклатура КАК Номенклатура,
           ПериодыИЦеныПродажныхЦен.Цена КАК Цена,
           МаксимальныйПериодПродажныхЦен.КатегорияЦен КАК КатегорияЦен
       ИЗ
           (ВЫБРАТЬ
               МАКСИМУМ(ЦеныНоменклатурыСрезПоследних.Период) КАК Период,
               ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
               ЦеныНоменклатурыСрезПоследних.КатегорияЦен КАК КатегорияЦен
           ИЗ
               РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонецПериода)}, {(Номенклатура), (СтруктурнаяЕдиница.АссортиментнаяМатрица) КАК АссортиментнаяМатрицаОсновная, (КатегорияЦен)}) КАК ЦеныНоменклатурыСрезПоследних
           
           СГРУППИРОВАТЬ ПО
               ЦеныНоменклатурыСрезПоследних.Номенклатура,
               ЦеныНоменклатурыСрезПоследних.КатегорияЦен) КАК МаксимальныйПериодПродажныхЦен
               ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                   ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
                   ЦеныНоменклатурыСрезПоследних.Период КАК Период,
                   ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
               ИЗ
                   РегистрСведений.ЦеныНоменклатуры.СрезПоследних({(&КонецПериода)}, {(Номенклатура), (СтруктурнаяЕдиница.АссортиментнаяМатрица) КАК АссортиментнаяМатрицаОсновная, (КатегорияЦен)}) КАК ЦеныНоменклатурыСрезПоследних) КАК ПериодыИЦеныПродажныхЦен
               ПО МаксимальныйПериодПродажныхЦен.Период = ПериодыИЦеныПродажныхЦен.Период
                   И МаксимальныйПериодПродажныхЦен.Номенклатура = ПериодыИЦеныПродажныхЦен.Номенклатура) КАК ПродажныеЦены
       ПО АссортиментнаяМатрицаОсновная.НоменклатураОсновная = ПродажныеЦены.Номенклатура
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           УчетПродажОбороты.Номенклатура КАК Номенклатура,
           УчетПродажОбороты.Склад.Владелец.АссортиментнаяМатрица КАК СкладВладелецАссортиментнаяМатрица,
           УчетПродажОбороты.СуммаОборот КАК СуммаОборот,
           УчетПродажОбороты.КоличествоОборот КАК КоличествоОборот
       ИЗ
           РегистрНакопления.УчетПродаж.Обороты({(&НачалоПериода)}, {(&КонецПериода)}, , {(Номенклатура), (Склад.Владелец.АссортиментнаяМатрица) КАК АссортиментнаяМатрицаДляПродаж}) КАК УчетПродажОбороты) КАК УчетПродаж
       ПО АссортиментнаяМатрицаОсновная.НоменклатураОсновная = УчетПродаж.Номенклатура
           И АссортиментнаяМатрицаОсновная.МатрицаОсновная = УчетПродаж.СкладВладелецАссортиментнаяМатрица

УПОРЯДОЧИТЬ ПО
   Номенклатура
АВТОУПОРЯДОЧИВАНИЕ
6 Patrio_
O_Muerte
 
29.07.09
14:41
(2)Права разные.
7 borik
 
29.07.09
14:52
(0) Делитель на НОЛЬ проверь.
8 Господин ПЖ
 
29.07.09
14:54
за левые соединения с "математикой" в полях без ЕСТЬNULL() и прочих проверок (в том числе на 0 в делителе) надо бить по eggs
9 Patrio_
O_Muerte
 
29.07.09
14:57
переделал на ЕстьNull() - те же самые eggs.
10 IronDemon
 
29.07.09
15:02
ВЫБОР
   КОГДА ЕстьNULL(ЗакупочныеЦены.Цена,0)=0 ТОГДА 0
   ИНАЧЕ ВЫРАЗИТЬ((ВЫРАЗИТЬ(ПродажныеЦены.Цена КАК ЧИСЛО(20, 2))) / (ВЫРАЗИТЬ(ЗакупочныеЦены.Цена КАК ЧИСЛО(20, 2))) * 100 - 100 КАК ЧИСЛО(10, 2))
КОНЕЦ
11 Semargl
 
29.07.09
15:05
ВЫБОР
   КОГДА ЕстьNULL(ЗакупочныеЦены.Цена,0)=0 ТОГДА 0
--------------------------------------------------------
Тогда 1
12 Semargl
 
29.07.09
15:05
чтоб не ругалось
13 Semargl
 
29.07.09
15:15
пардон - Тогда 0
Не тот код смотрел((
14 Svetlachok
 
29.07.09
15:31
если под твоим пользователем формируется нормально, а у пользователя нет - посмотри настройки пользователя, а-ля основная фирма и т.п.
15 Patrio_
O_Muerte
 
30.07.09
14:12
Я добавил в запросе проверку на ноль, ошибки нет, но интересно почему под моим пользователем отчет формируется...