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 Сейчас в теме
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Консультант ERP-систем
Москва
Временный (на проект)

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

Бизнес-аналитик 1С
Москва
зарплата от 90 000 руб. до 150 000 руб.
Полный день

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

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