День добрый. Возникла такая ситуация: при заполнении документа появляется ошибка:

```1c
    по причине:
    Ошибка выполнения запроса
    по причине:
    Ошибка при выполнении операции над данными:
    Microsoft SQL Server Native Client 10.0: Обнаружена ошибка: деление на ноль.
    HRESULT=80004005, SQLSrvr: SQLSTATE=22012, state=1, Severity=10, native=8134, line=1
```

Вот текст запроса :

```1c
    ВЫБРАТЬ
    ТоварыВЭксплуатацииОстатки.ФизЛицо,
    Товары.Номенклатура,
    Товары.Организация,
    Товары.СтруктурнаяЕдиница,
    Товары.КоличествоОстаток КАК КоличествоУчет,
    Товары.КоличествоОстаток КАК Количество,
    Товары.СтоимостьОстаток КАК СуммаУчет,
    Товары.СтоимостьОстаток КАК Сумма,
    Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена

    ИЗ
    РегистрНакопления.Товары.Остатки(&Дата, ФизЛицо = &Склад) КАК Товары
```

Думаю что в полях "СтоимостьОстаток" и "КоличествоОстаток" есть нули, но можно ли сделать с помощью условия в запросе так, что бы если в полях нули то запрос всё равно выполнился?
---
немного не правильно :)
Тогда уж вот так

```1c
    ВЫБОР КОГДА ЕСТЬNULL(Товары.СтоимостьОстаток, 0) > 0
    ТОГДА Товары.СтоимостьОстаток / Товары.КоличествоОстаток
    ИНАЧЕ 0
    КОНЕЦ КАК Цена
```
---
Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена
Ну очевидно же. Что ошибка тут

```1c
    Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) КАК Цена
```

Нужно сделать так

```1c
    ВЫБРАТЬ
    ТоварыВЭксплуатацииОстатки.ФизЛицо,
    Товары.Номенклатура,
    Товары.Организация,
    Товары.СтруктурнаяЕдиница,
    Товары.КоличествоОстаток КАК КоличествоУчет,
    Товары.КоличествоОстаток КАК Количество,
    Товары.СтоимостьОстаток КАК СуммаУчет,
    Товары.СтоимостьОстаток КАК Сумма,
    ВЫБОР
    КОГДА ЕстьNULL(Товары.КоличествоОстаток, 0) = 0
    ТОГДА 0
    ИНАЧЕ Товары.СтоимостьОстаток / Товары.КоличествоОстаток
    КОНЕЦ КАК Цена
    РегистрНакопления.Товары.Остатки(&Дата, ФизЛицо = &Склад) КАК Товары
```
---
(3) Всё равно та же ошибка
---
(1) ВЫБОР КОГДА Товары.СтоимостьОстаток > 0
ТОГДА Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0)
ИНАЧЕ 0
КОНЕЦ КАК Цена вот так сделай
---
немного не правильно :)
Тогда уж вот так

```1c
    ВЫБОР КОГДА ЕСТЬNULL(Товары.СтоимостьОстаток, 0) > 0
    ТОГДА Товары.СтоимостьОстаток / Товары.КоличествоОстаток
    ИНАЧЕ 0
    КОНЕЦ КАК Цена
```
---
ВЫБОР КОГДА ЕСТЬNULL(Товары.СтоимостьОстаток, 0) > 0
ТОГДА Товары.СтоимостьОстаток / Товары.КоличествоОстаток
ИНАЧЕ 0
КОНЕЦ КАК Цена

Всё равно выдаёт ошибку
---
Переписал вот так:

ВЫБОР КОГДА ЕСТЬNULL(Товары.КоличествоОстаток , 0) > 0
ТОГДА Товары.КоличествоОстаток / Товары.СтоимостьОстаток
ИНАЧЕ 0
КОНЕЦ КАК Цена

И всё работает, спасибо
---
Товары.КоличествоОстаток / Товары.СтоимостьОстаток местами поменяй поля. Тебе нужно стоимость на количество делить.
---
Точно, спс большое
---
Точно, спасибо.
---
Товары.СтоимостьОстаток / ЕСТЬNULL(Товары.КоличествоОстаток, 0) вот ошибка, надо убрать ЕСТЬNULL и деление пройдет

вот так Товары.СтоимостьОстаток / Товары.КоличествоОстаток
---
ЕСТЬNULL(Товары.КоличествоОстаток, 0) это проверка на отсутствующее значение. Всё правильно.
---
Помимо математической проверки ошибки деления на ноль (ЕСЛИ Сумма(Знаменатель) <> 0 ТОГДА), в Вашей задаче нужно делать проверку на ошибки учета, где и количество и стоимость может быть <= 0.
Иными словами, если КоличествоУчет <0, то Количество = 0; если СуммаУчет <0, то Сумма =0.
В расчете цены нужно исключить не только НОЛЬ в знаменателе, но и отрицательное значение СтоимостьОстаток и КоличествоОстаток.
Я порекомендовала бы ставить два условия

```1c
    ВЫБОР
    КОГДА ЕСТЬNULL(Товары.КоличествоОстаток , 0) > 0
    ТОГДА ВЫБОР КОГДА
    ЕСТЬNULL(Товары.СтоимостьОстаток , 0) > 0
    ТОГДА Товары.СтоимостьОстаток / Товары.КоличествоОстаток
    ИНАЧЕ 0
    Конец
    ИНАЧЕ 0
    КОНЕЦ КАК Цена
```
---
Мне кажется, достаточно проверить, что количество не равно нулю. Всё остальное - следствие проблем в учёте, и вместо того, чтобы вытащить ошибку на свет, вы будете её дальше хоронить. Ну выйдет там -10, а не 0, что изменится? И так и так косяк, но -10 вам хоть покажет, что где-то что-то у вас в учёте пошло явно не так.
---
Автор выводит проверочные параметры учета (КоличествоУчет, СуммаУчет) в запросе, смотрите внимательно. И параллельно берет расчетные (Количество, Сумма) Какой смысл их дублировать? Расчетные помогают увидеть объективность расчета цены и физическую возможность работы с товаром, учетные показывают отклонение от норм (если минус). Вы предлагаете учетные не использовать, я же предлагаю учетные и расчетные наделить смыслом.
---
Я не предлагаю не использовать какие-то данные, я предлагаю не скрывать отрицательные числа, если они есть.
Расчетные помогают увидеть объективность расчета цены и физическую возможность работы с товаром
И -10 и 0 отражают физическую невозможность работы в позицией, только -10 может в большей степени стать толчком что-то проверить и исправить, на мой взгляд.
---
Было:

```1c
    Товары.КоличествоОстаток КАК КоличествоУчет,
    Товары.КоличествоОстаток КАК Количество,
    Товары.СтоимостьОстаток КАК СуммаУчет,
    Товары.СтоимостьОстаток КАК Сумма,
```

Стало:

```1c
    Товары.КоличествоОстаток КАК КоличествоУчет,
    ВЫБОР КОГДА ЕСТЬNNULL (Товары.КоличествоОстаток,0) >0
    ТОГДА Товары.КоличествоОстаток
    Иначе 0
    Конец КАК Количество,
    Товары.СтоимостьОстаток КАК СуммаУчет,
    ВЫБОР КОГДА ЕСТЬNULL (Товары.СтоимостьОстаток,0)>0
    ТОГДА Товары.СтоимостьОстаток
    Иначе 0
    Конец КАК Сумма,
```

Теперь Вам понятно?