Вычисляемое поле ПроцентВозврата в отчете на СКД

1. user618695_ka 20.06.17 18:32 Сейчас в теме
Есть регистр ПродажиОбороты.

Формирую отчет с разделением продаж и возвратов.

Текст запроса:

ВЫБРАТЬ
	ПродажиОбороты.Контрагент,
	ПродажиОбороты.Договор,
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.Регистратор,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ОтгрузкаПокупателю)
			ТОГДА ПродажиОбороты.Кол
		ИНАЧЕ 0
	КОНЕЦ КАК КоличествоПродажи,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ОтгрузкаПокупателю)
			ТОГДА ПродажиОбороты.Сумма
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаПродажи,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ВозвратОтПокупателя)
			ТОГДА -ПродажиОбороты.Кол
		ИНАЧЕ 0
	КОНЕЦ КАК КоличествоВозврата,
	ВЫБОР
		КОГДА ТИПЗНАЧЕНИЯ(ПродажиОбороты.Регистратор) = ТИП(Документ.ВозвратОтПокупателя)
			ТОГДА -ПродажиОбороты.Сумма
		ИНАЧЕ 0
	КОНЕЦ КАК СуммаВозврата
ИЗ
	РегистрНакопления.ПродажиОбороты КАК ПродажиОбороты
ГДЕ
	ПродажиОбороты.Номенклатура.ТипНоменклатурыБухгалтерии = &ТипНоменклатурыБухгалтерии
{ГДЕ
	(ПродажиОбороты.Регистратор.Дата >= &НачалоПериода),
	(ПродажиОбороты.Регистратор.Дата <= &КонецПериода)}
Показать


Создаю вычисляемое поле: ПроцентВозврата = 100*(КоличествоВозврата / КоличествоПродажи) и получаю деление на ноль.

Как избежать этого? Скриншот во вложении.
Прикрепленные файлы:
Вознаграждение за ответ
Показать полностью
Найденные решения
3. user618695_ka 20.06.17 19:11 Сейчас в теме +0.5 $m
Решение: использовать агрегатную функцию СУММА() в запросе.

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

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Контрагент,
	ПродажиОбороты.Договор,
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.Регистратор
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SyachinS 20.06.17 19:11 Сейчас в теме
Выбор Когда Не КоличествоПродажи = 0 Тогда 100*(КоличествоВозврата / КоличествоПродажи) Иначе 0 Конец
user618695_ka; +1 Ответить
3. user618695_ka 20.06.17 19:11 Сейчас в теме +0.5 $m
Решение: использовать агрегатную функцию СУММА() в запросе.

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

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Контрагент,
	ПродажиОбороты.Договор,
	ПродажиОбороты.Номенклатура,
	ПродажиОбороты.Регистратор
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот