Здравствуйте. Есть запрос , при обработке происходит ошибка деления на 0.
```1c
    "ВЫБРАТЬ
    | ХозрасчетныйСубконто.Значение КАК Значение,
    | ВЫБОР
    | КОГДА Хозрасчетный.КоличествоКт = 0
    | ТОГДА 0
    | ИНАЧЕ СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт)
    | КОНЕЦ КАК Цена
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    | ПО ХозрасчетныйСубконто.НомерСтроки = Хозрасчетный.НомерСтроки
    |ГДЕ
    | Хозрасчетный.Регистратор = &Документ
    | И ХозрасчетныйСубконто.Регистратор = &ДокументРегистратор
    | И Хозрасчетный.СчетКт = &СчетКт
    | И ХозрасчетныйСубконто.Значение = &Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    | ХозрасчетныйСубконто.Значение,
    | Хозрасчетный.КоличествоКт"
```

Пробовал условие сделать таким
```1c
    | ВЫБОР
    | КОГДА Хозрасчетный.КоличествоКт = 0
    | ИЛИ Хозрасчетный.КоличествоКт = NULL
    | ТОГДА 0
    | ИНАЧЕ СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт)
    | КОНЕЦ КАК Цена
```
 но тоже не помогло.Подскажите, пожалуйста, что неправильно сделал?
---
|
```1c
    СРЕДНЕЕ( ВЫБОР
    | КОГДА Хозрасчетный.КоличествоКт = 0
    | ТОГДА 0
    | ИНАЧЕ Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт
    | КОНЕЦ) КАК Цена
```

И группировку по КоличествоКт уберите.
---
ИЛИ Хозрасчетный.КоличествоКт = NULL
ИЛИ Хозрасчетный.КоличествоКт ЕСТЬ NULL
---
```1c
    КОГДА Хозрасчетный.КоличествоКт = 0 ИЛИ Хозрасчетный.Сумма = 0
    ИЛИ Хозрасчетный.КоличествоКт = NULL
    ТОГДА 0
    ИНАЧЕ СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт)
```
---
СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт) Какой смысл в среднем арифметическом? Вот купили вы 10 тонн на по цене 100 руб., и 1 кг – по 20 руб., средняя – 60 руб?
---
Если я уберу "среднее" ошибка никуда не денется. З.Ы. Среднее значение мне нужно именно по условию задачи =)
---
Там в принципе нигде не может быть NULL, так как запрос фактически с внутренним соединением из-за условий на присоединяемую таблицу в секции ГДЕ.
(7) Среднее среднему рознь! Кстати, результат запроса в консоли запросов проверяете?
---
на данный момент этот запрос не проверял, его я проверял когда только обработку делал, и он работал, без условий, на днях базу посвежее поставил, и появилась эта ошибка.
---
|
```1c
    СРЕДНЕЕ( ВЫБОР
    | КОГДА Хозрасчетный.КоличествоКт = 0
    | ТОГДА 0
    | ИНАЧЕ Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт
    | КОНЕЦ) КАК Цена
```

И группировку по КоличествоКт уберите.
---
Спасибо, вроде бы работает (по крайней мере с ошибкой пока что не вылетел, жду когда отработает).
Группировку только не убрал И группировку по КоличествоКт уберите
---
понятна проблема, которая была?
СРЕДНЕЕ это агрегатная функция. И применение ее внутри конструкции Выбор вызывал предварительное вычисление ее без отсекания нулевых значений Хозрасчетный.КоличествоКт. Т.е. Выбор отрабатывал бы вычисление для не нулевых значений Хозрасчетный.КоличествоКт, но предварительно высчитывался для всех значений.
Когда используется СРЕДНЕЕ для всего поля, то и вычисляются уже по условию этого поля и нулевые значения отсекаются.
И еще, учтите, эта формула даст значение "средней температуры по больнице".
К примеру. есть значения:
Сумма1 = 100, Кол-во1 =1 и еще 9 значений с нулевым количеством.
СРЕДНЕЕ получится = 10. Это точно то что надо?
---
Спасибо за разъяснение! Да, мне по задаче нужно именно среднее значение.
---
```1c
    ВЫБОР
    | КОГДА ЕстьNull(Хозрасчетный.КоличествоКт,0) = 0
```
---
(3)
(5) Такой запрос сделал, все равно с ошибкой вылетает (
```1c
    "ВЫБРАТЬ
    | ХозрасчетныйСубконто.Значение КАК Значение,
    | ВЫБОР
    | КОГДА Хозрасчетный.КоличествоКт = 0
    | ИЛИ Хозрасчетный.Сумма = 0
    | ИЛИ Хозрасчетный.Сумма ЕСТЬ NULL
    | ИЛИ Хозрасчетный.КоличествоКт ЕСТЬ NULL
    | ИЛИ ЕСТЬNULL(Хозрасчетный.КоличествоКт, 0) = 0
    | ИЛИ ЕСТЬNULL(Хозрасчетный.Сумма, 0) = 0
    | ТОГДА 0
    | ИНАЧЕ СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт)
    | КОНЕЦ КАК Цена
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    | ПО ХозрасчетныйСубконто.НомерСтроки = Хозрасчетный.НомерСтроки
    |ГДЕ
    | Хозрасчетный.Регистратор = &Документ
    | И ХозрасчетныйСубконто.Регистратор = &ДокументРегистратор
    | И Хозрасчетный.СчетКт = &СчетКт
    | И ХозрасчетныйСубконто.Значение = &Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    | ХозрасчетныйСубконто.Значение,
    | Хозрасчетный.КоличествоКт,
    | Хозрасчетный.Сумма"
```
---
Ответ в (5) и больше никакой отсебятинки.
---
переписал запрос с одним вашим условием, но.... Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Ошибка SQL: Деление на 0
по причине:
Ошибка SQL: Деление на 0
по причине:
Деление на 0 значения типа Numeric
---
покажи текст запроса целиком
---
```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ХозрасчетныйСубконто.Значение КАК Значение,
    | ВЫБОР
    | КОГДА
    | ЕСТЬNULL(Хозрасчетный.КоличествоКт, 0) = 0
    | ТОГДА 0
    | ИНАЧЕ СРЕДНЕЕ(Хозрасчетный.Сумма / Хозрасчетный.КоличествоКт)
    | КОНЕЦ КАК Цена
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    | ПО ХозрасчетныйСубконто.НомерСтроки = Хозрасчетный.НомерСтроки
    |ГДЕ
    | Хозрасчетный.Регистратор = &Документ
    | И ХозрасчетныйСубконто.Регистратор = &ДокументРегистратор
    | И Хозрасчетный.СчетКт = &СчетКт
    | И ХозрасчетныйСубконто.Значение = &Номенклатура
    |
    |СГРУППИРОВАТЬ ПО
    | ХозрасчетныйСубконто.Значение,
    | Хозрасчетный.КоличествоКт,";

    Запрос.УстановитьПараметр("Документ", Документ);
    Запрос.УстановитьПараметр("ДокументРегистратор", ДокументРегистратор);
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("СчетКт", СчетКТ);
```
---
сейчас пробую такую проверку сделать
```1c
    ИЛИ ЕСТЬNULL(СРЕДНЕЕ(Хозрасчетный.КоличествоКт), 0) = 0
```
---
если в результате необходимо получить среднюю цену то
запрос примерно думаю должен выглядеть вот так

ВЫБРАТЬ
 ТиповойОстатки.Субконто1 КАК Номенклатура,
 ТиповойОстатки.Субконто2 КАК Склад,
 ТиповойОстатки.Субконто3 КАК Партия,
 ТиповойОстатки.СуммаОстаток КАК СуммаОстаток,
 ТиповойОстатки.КоличествоОстаток КАК Количество,
 ТиповойОстатки.СуммаОстаток / ВЫБОР
   КОГДА ТиповойОстатки.КоличествоОстаток = 0
     ТОГДА 1
    ИНАЧЕ ТиповойОстатки.КоличествоОстаток
   КОНЕЦ КАК Цена,
 ТиповойОстатки.Счет КАК СчетУчетаБУ,
 ВЫРАЗИТЬ(ТиповойОстатки.Субконто1 КАК Справочник.Номенклатура).БазоваяЕдиницаИзмерения КАК ЕдиницаИзмерения
ИЗ
 РегистрБухгалтерии.Хозрасчетный.Остатки(&Период,
  Счет В ИЕРАРХИИ (&Счет),,Организация = &Организация
  И &СтруктурноеПодразделение В (НЕОПРЕДЕЛЕНО, NULL, СтруктурноеПодразделение)) КАК ТиповойОстатки
---
Запрос конечно, бестолковый. Но вот деления на 0 в нём не будет никогда.
Вы где ёго выполняете ? И точно ЭТОТ запрос ?
---
в обработке выполняется он, и запрос точно этот, ошибка выскакивает во время обхода Пока Выборка.Следующий() Цикл, остановка по ошибке на 81 строке тормозит с этой ошибкой. Запрос точно этот.
---
ну вот. Одна из черепашек врёт.
Если запрос твой выполняется, то чего ты нам тут голову морочишь ?
Или ты этот запрос еще и в цикле выполняешь ?
---
запрос выполняется, нет, не в цикле, голову я никому не морочу. В выборке получается значение количества Null. С решением помог (16) . Спасибо.
---
Ну и смотри, чего ты в выборке получаешь, нам отсюда не видны дальнейшие твои действия.