Здравствуйте. УТ 10.3 Вопрос следующий:
Отчет на СКД, необходимо получить % возврата относительно продаж.
В первую таблицу собираю возвраты за период по табличной части документа "ВозвратТоваровОтПокупателя": номенклатура, ПричинаВозврата, количество, сумма. Группирую по Номенклатура и ПричинаВозврата.
Во вторую таблицу собираю Продажи за период: номенклатура, количество, сумма. Группирую по номенклатура.

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

    СГРУППИРОВАТЬ ПО
    ВозвратТоваровОтПокупателяТовары.ПричинаВозврата,
    ВозвратТоваровОтПокупателяТовары.Номенклатура
    ;

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

    СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Номенклатура
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    Возврат.Номенклатура КАК Номенклатура,
    Возврат.ПричинаВозврата,
    Возврат.ВозвратСумма,
    Возврат.ВозвратКоличество,
    ЕСТЬNULL(Продажа.ПродажаКоличество, 0) КАК ПродажаКоличество,
    ЕСТЬNULL(Продажа.ПродажаСумма, 0) КАК ПродажаСумма,
    ВЫБОР
    КОГДА Продажа.ПродажаКоличество <> 0
    ТОГДА Возврат.ВозвратКоличество * 100 / Продажа.ПродажаКоличество
    КОНЕЦ КАК ПроцентКоличество,
    ВЫБОР
    КОГДА Продажа.ПродажаСумма <> 0
    ТОГДА Возврат.ВозвратСумма * 100 / Продажа.ПродажаСумма
    КОНЕЦ КАК ПроцентСумма
    ИЗ
    Возврат КАК Возврат
    ЛЕВОЕ СОЕДИНЕНИЕ Продажа КАК Продажа
    ПО Возврат.Номенклатура = Продажа.Номенклатура

    УПОРЯДОЧИТЬ ПО
    Номенклатура
```

В итоге, если несколько причин возврата номенклатуры, то % нужен по каждой (от общего количества продажи). Как правильно получить итог по количеству продаж (по номенклатура и общий итог по колонке) без задваивания, скрин прилагаю?
---
На мой взгляд, самым простым и самым корректным способом является разбиение исходного запроса на два набора данных:
- основной с выборкой возвратов;
- дополнительный с выборкой продаж.

Далее необходимо связать эти наборы данных на закладке "Связи" СКД по полю "Номенклатура" и добавить вычисляемые поля для расчета процентов возврата.
---
На мой взгляд, самым простым и самым корректным способом является разбиение исходного запроса на два набора данных:
- основной с выборкой возвратов;
- дополнительный с выборкой продаж.

Далее необходимо связать эти наборы данных на закладке "Связи" СКД по полю "Номенклатура" и добавить вычисляемые поля для расчета процентов возврата.
---
Вопрос, если строить через 2 набора данных, будет ли возможно вывести отчет только по ПричинеВозврата без разворота по Номенклатуре?
---
Конечно.
---
dhurricane, сделал через 2 набора данных, все получилось. Спасибо!
---
вы используете скд, а процент пытаетесь посчитать в запросе - это не камильфо... посмотрите функцию вычислитьвыражение, используйте для процента вычисляемое поле
что-то типа такого должно быть : Сумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "Номенклатура")
---
user623969_dusa, спасибо. Сделал вычисляемые поля с %.
---
Если Вы разбили набор данных на 2, то нет необходимости в ресурсах использовать функции "Вычислить" и "ВычислитьВыражение". Работать будет корректно и без них.
---
Мб чушь, но разве не надо в последнем запросе сгруппировать по причинам возврата?
---
Вылезла проблема. При формировании отчета с детализацией только по ПричинеПродаж, похоже связь наборов не отрабатывает, и попадают все продажи за период.
---
Попробуйте в первом наборе данных установить полю "Номенклатура" роль "Обязательное".
---
Не помогло, что странно - в итогах значение верное, а в строках нет.
---
Покажите, пожалуйста, снимки экрана с закладок наборов, вычисляемых полей, ресурсов и настроек. Либо вовсе пришлите схему.
---
Можете уточнить, что именно Вас не устроило в результатах? Вам кажется, что сумма по колонкам должна совпадать с итоговой суммой?
---
Сумма по строкам не совпадает с итоговой по колонкам "ПродажаКоличество, ПродажаСумма"
---
Так ведь она и не должна. У Вас же продажи есть только в разрезе номенклатуры, но без детализации до причин возврата.

Смотрите сами. Пусть Вы продали 100 стульев. Из них 5 вернули бракованных, а от 10 отказались. В итоге в отчете должны быть 2 строки:
- причина - брак, возврат - 5, продано 100;
- причина - отказ, возврат - 10, продано 100.

Как видите в обоих строках стоит "продано 100", т.к. это одна и та же номенклатура. И в сумме это даст 200, но в общем итоге все равно должно быть число 100, т.к. продали то лишь 100 стульев, а не 200.
---
Да, все верно, спасибо большое.
---
Вот
---
И еще второго набора данных, а также связей наборов, пожалуйста.
---
Рекомендую в ресурсах выражение вычисления процентов записывать не как сумма процентов, а как отношение суммы возврата к сумме продажи. Т.е. аналогично тому, как это записано непосредственно в самом вычисляемом поле:

```1c
    ВЫБОР
    КОГДА ЕСТЬNULL(Сумма(ПродажаСумма), 0) <> 0
    ТОГДА Сумма(ВозвратСумма) / Сумма(ПродажаСумма) * 100
    ИНАЧЕ 0
    КОНЕЦ
```
В этом случае не будет необходимости заполнять колонку "Рассчитывать по...", и в общем итоге, и в прочих других группировках процент будет рассчитан корректно.

Аналогично можно сделать и для количества, но тут камнем преткновения может стать единица измерения.
---
Вот
---
Вот схему выгрузил