1. areavel 20.05.19 10:17 Сейчас в теме

Вопрос СКД итоги объединение двух таблиц

Здравствуйте. УТ 10.3 Вопрос следующий:
Отчет на СКД, необходимо получить % возврата относительно продаж.
В первую таблицу собираю возвраты за период по табличной части документа "ВозвратТоваровОтПокупателя": номенклатура, ПричинаВозврата, количество, сумма. Группирую по Номенклатура и ПричинаВозврата.
Во вторую таблицу собираю Продажи за период: номенклатура, количество, сумма. Группирую по номенклатура.
ВЫБРАТЬ
	ВозвратТоваровОтПокупателяТовары.ПричинаВозврата,
	ВозвратТоваровОтПокупателяТовары.Номенклатура,
	СУММА(ВозвратТоваровОтПокупателяТовары.Сумма) КАК ВозвратСумма,
	СУММА(ВозвратТоваровОтПокупателяТовары.Количество) КАК ВозвратКоличество
ПОМЕСТИТЬ Возврат
ИЗ
	Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
ГДЕ
	ВозвратТоваровОтПокупателяТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	И ВозвратТоваровОтПокупателяТовары.Ссылка.Проведен

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

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

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

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

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


В итоге, если несколько причин возврата номенклатуры, то % нужен по каждой (от общего количества продажи). Как правильно получить итог по количеству продаж (по номенклатура и общий итог по колонке) без задваивания, скрин прилагаю?
Прикрепленные файлы:
Найденные решения
2. dhurricane 20.05.19 10:44 Сейчас в теме
(1) На мой взгляд, самым простым и самым корректным способом является разбиение исходного запроса на два набора данных:
- основной с выборкой возвратов;
- дополнительный с выборкой продаж.

Далее необходимо связать эти наборы данных на закладке "Связи" СКД по полю "Номенклатура" и добавить вычисляемые поля для расчета процентов возврата.
Остальные ответы
Избранное Подписка Сортировка: Древо
2. dhurricane 20.05.19 10:44 Сейчас в теме
(1) На мой взгляд, самым простым и самым корректным способом является разбиение исходного запроса на два набора данных:
- основной с выборкой возвратов;
- дополнительный с выборкой продаж.

Далее необходимо связать эти наборы данных на закладке "Связи" СКД по полю "Номенклатура" и добавить вычисляемые поля для расчета процентов возврата.
5. areavel 20.05.19 12:40 Сейчас в теме
(2) Вопрос, если строить через 2 набора данных, будет ли возможно вывести отчет только по ПричинеВозврата без разворота по Номенклатуре?
6. dhurricane 20.05.19 12:43 Сейчас в теме
7. areavel 20.05.19 14:32 Сейчас в теме
(6) dhurricane, сделал через 2 набора данных, все получилось. Спасибо!
3. user623969_dusa 20.05.19 10:57 Сейчас в теме
(1) вы используете скд, а процент пытаетесь посчитать в запросе - это не камильфо... посмотрите функцию вычислитьвыражение, используйте для процента вычисляемое поле
что-то типа такого должно быть : Сумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "Номенклатура")
8. areavel 20.05.19 14:34 Сейчас в теме
(3) user623969_dusa, спасибо. Сделал вычисляемые поля с %.
9. dhurricane 20.05.19 14:45 Сейчас в теме
(8) Если Вы разбили набор данных на 2, то нет необходимости в ресурсах использовать функции "Вычислить" и "ВычислитьВыражение". Работать будет корректно и без них.
4. ksen 20.05.19 11:00 Сейчас в теме
Мб чушь, но разве не надо в последнем запросе сгруппировать по причинам возврата?
10. areavel 20.05.19 15:27 Сейчас в теме
Вылезла проблема. При формировании отчета с детализацией только по ПричинеПродаж, похоже связь наборов не отрабатывает, и попадают все продажи за период.
11. dhurricane 20.05.19 15:31 Сейчас в теме
(10) Попробуйте в первом наборе данных установить полю "Номенклатура" роль "Обязательное".
12. areavel 20.05.19 15:43 Сейчас в теме
Не помогло, что странно - в итогах значение верное, а в строках нет.
Прикрепленные файлы:
13. dhurricane 20.05.19 15:46 Сейчас в теме
(12) Покажите, пожалуйста, снимки экрана с закладок наборов, вычисляемых полей, ресурсов и настроек. Либо вовсе пришлите схему.
16. dhurricane 20.05.19 15:59 Сейчас в теме
(12) Можете уточнить, что именно Вас не устроило в результатах? Вам кажется, что сумма по колонкам должна совпадать с итоговой суммой?
19. areavel 20.05.19 16:05 Сейчас в теме
(16)Сумма по строкам не совпадает с итоговой по колонкам "ПродажаКоличество, ПродажаСумма"
20. dhurricane 20.05.19 16:37 Сейчас в теме
(19) Так ведь она и не должна. У Вас же продажи есть только в разрезе номенклатуры, но без детализации до причин возврата.

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

Как видите в обоих строках стоит "продано 100", т.к. это одна и та же номенклатура. И в сумме это даст 200, но в общем итоге все равно должно быть число 100, т.к. продали то лишь 100 стульев, а не 200.
22. areavel 21.05.19 14:21 Сейчас в теме
(20) Да, все верно, спасибо большое.
14. areavel 20.05.19 15:54 Сейчас в теме
Вот
Прикрепленные файлы:
15. dhurricane 20.05.19 15:57 Сейчас в теме
(14) И еще второго набора данных, а также связей наборов, пожалуйста.
21. dhurricane 20.05.19 18:39 Сейчас в теме
(14) Рекомендую в ресурсах выражение вычисления процентов записывать не как сумма процентов, а как отношение суммы возврата к сумме продажи. Т.е. аналогично тому, как это записано непосредственно в самом вычисляемом поле:
ВЫБОР
   КОГДА ЕСТЬNULL(Сумма(ПродажаСумма), 0) <> 0
   ТОГДА Сумма(ВозвратСумма) / Сумма(ПродажаСумма) * 100
   ИНАЧЕ 0
КОНЕЦ
В этом случае не будет необходимости заполнять колонку "Рассчитывать по...", и в общем итоге, и в прочих других группировках процент будет рассчитан корректно.

Аналогично можно сделать и для количества, но тут камнем преткновения может стать единица измерения.
17. areavel 20.05.19 16:00 Сейчас в теме
Вот
Прикрепленные файлы:
18. areavel 20.05.19 16:01 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии


Программист 1С
Бобров
зарплата от 100 000 руб. до 150 000 руб.
Временный (на проект)

Студент (стажер) 1С
Нижний Новгород
зарплата от 25 000 руб.
Полный день

Программист 1С
Санкт-Петербург
зарплата от 120 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 100 000 руб.
Полный день