Есть отчёт на скд :

```1c
    ВЫБРАТЬ
    ВЗ.Заказчик КАК Клиент,
    ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
    ВЗ.Ссылка КАК Ссылка,
    ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
    ВЗ.ГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
    ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
    ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
    ПОМЕСТИТЬ ВЗаказ
    ИЗ
    Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
    ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
    ГДЕ
    ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ВЗ.Проведен = ИСТИНА
    И ВЗ.ПометкаУдаления = ЛОЖЬ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЗаказ.Клиент КАК Клиент,
    ВЗаказ.Канал,
    ВЗаказ.Ссылка,
    ВЗаказ.Номенклатура КАК Номенклатура,
    ВЗаказ.ДатаНачалаСрочногоРезерва,
    ВЗаказ.ДатаКонцаСрочногоРезерва,
    ВЗаказ.ПервоначальноеЗначениеРезерва,
    ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
    ПОМЕСТИТЬ Резервы
    ИЗ
    ВЗаказ КАК ВЗаказ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
    ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
    И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
    ГДЕ
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Клиент,
    СерияНоменклатуры
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Резервы.Клиент,
    Резервы.Канал,
    Резервы.Номенклатура,
    Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
    Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
    ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
    ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
    ИЗ
    Резервы КАК Резервы
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
    ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
    И Резервы.Клиент = ПродажиОбороты.Контрагент

    УПОРЯДОЧИТЬ ПО
    ДатаНачалаСрочногоРезерва,
    ДатаКонцаСрочногоРезерва
```

Вопрос следующий.Реквизит "Заказчик" у документа "Внутрений заказ" имеет составной тип Справочник.Контрагенты и Справочник.Категории.

И есть справочник "КатегорииКонтрагентов"(владелец у него спр.Контрагенты) с реквизитом "Значение"(типа.спр.Категории).

При выборе в документа ВидЗаказчика = Категории, можно выбрать название категории и вывести отчёт по этой категории(группе) в которую входят несколько "Контрагентов". Пример кода этого отчёта:

```1c
    Построитель = Новый ПостроительОтчета;
    Построитель.ВыводитьЗаголовокОтчета = Истина;
    Построитель.ТекстЗаголовка = "СПИСОК Контрагентов по категории "" + Строка(Заказчик) + "";

    Построитель.Параметры.Вставить("Значение", Заказчик);
    Построитель.ЗаполнениеРасшифровки = ВидЗаполненияРасшифровкиПостроителяОтчета.ЗначенияГруппировок;
    Построитель.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Асфальт);

    Построитель.Текст =
    "ВЫБРАТЬ
    | КатегорииКонтрагентов.Владелец КАК Контрагент,
    | КатегорииКонтрагентов.Владелец.Представление КАК КонтрагентПредставление
    |ИЗ
    | Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
    |ГДЕ
    | КатегорииКонтрагентов.Значение = &Значение
    | И НЕ КатегорииКонтрагентов.ПометкаУдаления
    |
    |УПОРЯДОЧИТЬ ПО
    | КонтрагентПредставление";

    Построитель.ЗаполнитьНастройки();

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.ОтображатьЗаголовки = Ложь;
    ТабДок.ОтображатьСетку = Ложь;

    Построитель.Вывести(ТабДок);

    ТабДок.Показать();
```

Проблема следующего характера. В моём отчёте Остатки и обороты выводит по контрагенту безупречно. Но если у документа выбрана "Категория", то эту группу категории не видно.
Подскажите как сделать запрос, чтобы пользователь смог увидеть ТекЗначение и среднее по группе Контрагентов?

Приложил скрин,как раз где формируется отчёт по Категории.
---
Если решать Вашу задачу "в лоб", то самое простое, это доработать последний запрос следующим образом:

```1c
    ВЫБРАТЬ
    ...
    ИЗ
    Резервы КАК Резервы
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
    ПО Резервы.Клиент = КатегорииКонтрагентов.Значение
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
    ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
    И ЕСТЬNULL(КатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент
```

Однако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
---
Реквизит "Заказчик" у документа "Внутрений заказ" имеет составной тип Справочник.Контрагенты и Справочник.Категории.
Это вот неплохой такой источник проблем, на самом деле. Вопрос: если в заказе указана категория в которую входит несколько контрагентов то как понять на кого из них отнести заказ?
---
Заказ относится на группу контрагентов. То есть каждая продажа у каждого контрагента по идее плюсуются и выводятся как общее по "Категории".
---
Если решать Вашу задачу "в лоб", то самое простое, это доработать последний запрос следующим образом:

```1c
    ВЫБРАТЬ
    ...
    ИЗ
    Резервы КАК Резервы
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КатегорииКонтрагентов КАК КатегорииКонтрагентов
    ПО Резервы.Клиент = КатегорииКонтрагентов.Значение
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
    ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
    И ЕСТЬNULL(КатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент
```

Однако будьте готовы к тому, что у Вас появятся дубли значений (например, "ПервоначальноеЗнач").
---
А мне думается что нужно в первый запрос добавить выборку где заказы расписанные на категории будут дублироваться на каждого входящего в категорию заказчика. Чтобы в последнем запросе резервы по конкретным заказчикам расписать. Только нужно будет еще и категорию туда добавить чтобы можно было по ней среднюю считать...
---
ну я примерно так же мыслил,но реализовать не вышло...
---
Я не могу прокоментировать, как лучше, т.к. плохо представляю конечный результат, которого автор пытается достичь. Да, предварительное получение контрагентов будет выгоднее еще и тем, что обороты продаж можно будет получить отдельной выборкой с отбором по этим контрагентам. Это может положительно сказаться на производительности отчета.

Но как я уже указал выше, есть риск получить дубли значений в отчете. Тогда в этом случае придется либо писать сложные выражения ресурсов, либо переделывать запрос вовсе. Потому и предложил самый простой путь. Если потребуется, автор задаст дополнительные вопросы с уточнениями по задаче, тогда и я смогу предложить более корректное альтернативное решение.
---
КатегорииКонтрагентов.Владелец

Ругается мол КатегорииКонтрагентов.Владелец поле не найдено.
---
Возможно Вы или я опечатались в синониме таблицы.
---
Сделал копированием из своей базы. Странно. Точно можно в связях делать естьnull ?
---
Если было бы нельзя, то сообщение об ошибке было бы направлено на функцию ЕСТЬNULL. А у Вас же поле не найдено.
---
в этом месте

```1c
    ЕСТЬNULL(КатегорииКонтрагентов.Владелец, Резервы.Клиент)
```

Мы же можем указать слева только одну таблицу. Как сразу две ?
---
А вот.Получилось. И правда куча дублей номенклатуры и значении. А среднее так и не выводит вовсе ;(
---
Странно. А не могли бы Вы привести текущий запрос?
---
пожалуйста

```1c
    ВЫБРАТЬ
    ВЗ.Заказчик КАК Клиент,
    ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
    ВЗ.Ссылка КАК Ссылка,
    ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
    ВЗ.ладГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
    ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
    ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
    ПОМЕСТИТЬ ВЗаказ
    ИЗ
    Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
    ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
    ГДЕ
    ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ВЗ.Проведен = ИСТИНА
    И ВЗ.ПометкаУдаления = ЛОЖЬ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЗаказ.Клиент КАК Клиент,
    ВЗаказ.Канал,
    ВЗаказ.Ссылка,
    ВЗаказ.Номенклатура КАК Номенклатура,
    ВЗаказ.ДатаНачалаСрочногоРезерва,
    ВЗаказ.ДатаКонцаСрочногоРезерва,
    ВЗаказ.ПервоначальноеЗначениеРезерва,
    ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
    ПОМЕСТИТЬ Резервы
    ИЗ
    ВЗаказ КАК ВЗаказ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
    ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
    И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
    ГДЕ
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Клиент,
    СерияНоменклатуры
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Резервы.Клиент,
    Резервы.Канал,
    Резервы.Номенклатура,
    Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
    Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
    ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
    ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
    ИЗ
    Резервы КАК Резервы
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ладКатегорииКонтрагентов КАК ладКатегорииКонтрагентов
    ПО Резервы.Клиент = ладКатегорииКонтрагентов.Значение
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
    ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
    И Резервы.Клиент = ПродажиОбороты.Контрагент
    И (ЕСТЬNULL(ладКатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент)

    УПОРЯДОЧИТЬ ПО
    ДатаНачалаСрочногоРезерва,
    ДатаКонцаСрочногоРезерва
```
---
Вы невнимательно скопировали. У меня в примере было 2 условия связи с таблицей оборотов продаж, не 3.
---
да,заметил. переделал так. всё равно та же история:

```1c
    ВЫБРАТЬ
    ВЗ.Заказчик КАК Клиент,
    ВЗ.Заказчик.ОсновнойМенеджерПокупателя.Родитель КАК Канал,
    ВЗ.Ссылка КАК Ссылка,
    ВнутреннийЗаказТовары.Номенклатура КАК Номенклатура,
    ВЗ.ладГраницаРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЗ.Дата КАК ДатаНачалаСрочногоРезерва,
    ВнутреннийЗаказТовары.Количество КАК ПервоначальноеЗначениеРезерва,
    ВнутреннийЗаказТовары.СерияНоменклатуры КАК СерияНоменклатуры
    ПОМЕСТИТЬ ВЗаказ
    ИЗ
    Документ.ВнутреннийЗаказ.Товары КАК ВнутреннийЗаказТовары
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВнутреннийЗаказ КАК ВЗ
    ПО ВнутреннийЗаказТовары.Ссылка = ВЗ.Ссылка
    ГДЕ
    ВЗ.Дата МЕЖДУ &ДатаНач И &ДатаКон
    И ВЗ.Проведен = ИСТИНА
    И ВЗ.ПометкаУдаления = ЛОЖЬ
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ВЗаказ.Клиент КАК Клиент,
    ВЗаказ.Канал,
    ВЗаказ.Ссылка,
    ВЗаказ.Номенклатура КАК Номенклатура,
    ВЗаказ.ДатаНачалаСрочногоРезерва,
    ВЗаказ.ДатаКонцаСрочногоРезерва,
    ВЗаказ.ПервоначальноеЗначениеРезерва,
    ВЗаказ.СерияНоменклатуры КАК СерияНоменклатуры,
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК ТекЗначение
    ПОМЕСТИТЬ Резервы
    ИЗ
    ВЗаказ КАК ВЗаказ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, ) КАК ТоварыВРезервеНаСкладахОстатки
    ПО ВЗаказ.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура
    И ВЗаказ.Ссылка = ТоварыВРезервеНаСкладахОстатки.ДокументРезерва
    И ВЗаказ.СерияНоменклатуры = ТоварыВРезервеНаСкладахОстатки.СерияНоменклатуры
    ГДЕ
    ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток > 0

    ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Клиент,
    СерияНоменклатуры
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Резервы.Клиент,
    Резервы.Канал,
    Резервы.Номенклатура,
    Резервы.ДатаНачалаСрочногоРезерва КАК ДатаНачалаСрочногоРезерва,
    Резервы.ДатаКонцаСрочногоРезерва КАК ДатаКонцаСрочногоРезерва,
    ВЫРАЗИТЬ(Резервы.ПервоначальноеЗначениеРезерва КАК ЧИСЛО(15, 3)) КАК ПервоначальноеЗнач,
    ЕСТЬNULL(Резервы.ТекЗначение, 0) КАК ТекЗначение,
    ВЫРАЗИТЬ(ЕСТЬNULL(ПродажиОбороты.КоличествоОборот / 3 + 0.4999999999, 0) КАК ЧИСЛО(15, 0)) КАК Среднее
    ИЗ
    Резервы КАК Резервы
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ладКатегорииКонтрагентов КАК ладКатегорииКонтрагентов
    ПО Резервы.Клиент = ладКатегорииКонтрагентов.Значение
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДок, МЕСЯЦ, -3), &ДатаДок, , ) КАК ПродажиОбороты
    ПО Резервы.Номенклатура = ПродажиОбороты.Номенклатура
    И (ЕСТЬNULL(ладКатегорииКонтрагентов.Владелец, Резервы.Клиент) = ПродажиОбороты.Контрагент)

    УПОРЯДОЧИТЬ ПО
    ДатаНачалаСрочногоРезерва,
    ДатаКонцаСрочногоРезерва
```
---
На всякий случай переспрошу. Какого типа реквизит "Заказчик" документа "ВнутреннийЗаказ"?
---
СправочникСсылка.Подразделения, СправочникСсылка.Контрагенты, СправочникСсылка.Склады, СправочникСсылка.Категории
---
Отобразите в отчете (или в консоли запросов) помимо поля "Резервы.Клиент" еще и "ладКатегорииКонтрагентов.Владелец". Есть ли в результате для категорий их контрагенты?
---
Да. Дак поэтому и дублируется вся номенклатура,текзначение и первоначальноезнач. Но продажи всё равно не видно. Это главный вопрос.
---
Так я пытаюсь понять, почему продаж нет. :)

Контрагент отображается правильный (для категорий), однако оборотов нет, хотя в регистре реально данные есть?
---
А вот. Всё вышло. На рабочей базе проверил. извините,не выспался )

Последний вопрос только. Как мне сгруппировать всю номенклатуру и сложить все средние для каждой номенклатуры? Именно только когда Категории.
---
Вот к примеру. Слева одна и та же номенклатура. Как бы схлопнуть её приплюсовав все Средние ?
---
Мне стыдно предлагать Вам это, но Вы можете просто сгруппировать данные в последнем запросе. :) Первоначальное значение пусть попадет в поля группировки, а средние - просуммируются.
---
А в других случаях разве не будет проблем. Ну когда не категории а контрагент.
---
Только те же, что и для категорий: если будет несколько одинаковых строк, то они просто свернутся.