Условие в вычисляемых выражениях в СКД

1. EvaMendes 11.12.17 14:05 Сейчас в теме
Доброго времени суток! В скд в поле "Вычисляемые поля" нужно Рассчитать 5 полей одно на основании другого. Возможно ли это?
1. Поле Процент:
Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец

2. Поле Коэффициент нужно рассчитать на основе Процента
написать условие:
Если Х > 0.4 тогда 0, иначеЕсли Х >= 1.2 тогда 1 иначе Х

Пытаюсь написать на языке СКД:
Выбор когда Процент < 40 тогда 0 Когда Процент >= 120 тогда 1.2 иначе Процент/100 конец

Выдает ошибку, что процент не найден. Если процент заменить на Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец, идет неверный расчет.

Плюс еще несколько полей нужно рассчитать на основе этих. Каким образом это можно сделать?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user705522_constantin_h 35 11.12.17 14:08 Сейчас в теме
Можете текст запроса привести?
3. EvaMendes 11.12.17 14:15 Сейчас в теме
(2) Запрос
ВЫБРАТЬ
	ВложенныйЗапрос.Подразделение КАК Подразделение,
	ВложенныйЗапрос.Проект КАК Проект,
	ВложенныйЗапрос.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
	СУММА(ВложенныйЗапрос.ПродажиСтоимостьСНДС) КАК ПродажиСтоимостьСНДС,
	СУММА(ВложенныйЗапрос.ПланыПродажСтоимостьСНДС) КАК ПланыПродажСтоимостьСНДС,
	СУММА(ВложенныйЗапрос.СуммаМотивации) КАК СуммаМотивации,
	СУММА(ВложенныйЗапрос.ПродажиСтоимостьСНДС - ВложенныйЗапрос.ПланыПродажСтоимостьСНДС) КАК ПланФакт
ИЗ
	(ВЫБРАТЬ
		ПродажиОбороты.Проект КАК Проект,
		ПродажиОбороты.Подразделение КАК Подразделение,
		ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
		СУММА(ПродажиОбороты.СтоимостьОборот - ПродажиОбороты.НДСОборот) КАК ПродажиСтоимостьБезНДС,
		СУММА(ПродажиОбороты.СтоимостьОборот) КАК ПродажиСтоимостьСНДС,
		СУММА(0) КАК ПланыПродажСтоимостьБезНДС,
		СУММА(0) КАК ПланыПродажСтоимостьСНДС,
		СУММА(0) КАК СуммаМотивации,
		СУММА(0) КАК КонтрагентОсновнойМенеджерПокупателя
	ИЗ
		РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Месяц, {(Организация).* КАК Организация, (Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Контрагент, (ДоговорКонтрагента).* КАК Договор, (ЗаказПокупателя).* КАК Заказ, (ДокументПродажи).* КАК ДокументПродажи, (Номенклатура.НоменклатурнаяГруппа).* КАК НоменклатурнаяГруппа, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ДокументПродажи.Ответственный).* КАК Ответственный}) КАК ПродажиОбороты
	
	СГРУППИРОВАТЬ ПО
		ПродажиОбороты.Проект,
		ПродажиОбороты.Подразделение,
		ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		ПланыПродажОбороты.Проект,
		ПланыПродажОбороты.Подразделение,
		ВЫРАЗИТЬ(ВЫБОР
				КОГДА ПланыПродажОбороты.Номенклатура ССЫЛКА Справочник.Номенклатура
					ТОГДА ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа
				ИНАЧЕ ПланыПродажОбороты.Номенклатура
			КОНЕЦ КАК Справочник.НоменклатурныеГруппы),
		СУММА(0),
		СУММА(0),
		СУММА(ПланыПродажОбороты.СтоимостьОборот),
		СУММА(ПланыПродажОбороты.СтоимостьОборот + ПланыПродажОбороты.НДСОборот),
		СУММА(0),
		СУММА(0)
	ИЗ
		РегистрНакопления.ПланыПродаж.Обороты(
				&НачалоПериода,
				&КонецПериода,
				Регистратор,
				ВЫБОР
					КОГДА &Сценарий1 = НЕОПРЕДЕЛЕНО
						ТОГДА ИСТИНА
					ИНАЧЕ Сценарий = &Сценарий1
				КОНЕЦ {(Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Контрагент, (Договор).* КАК Договор, (Заказ).* КАК Заказ, (ДокументПланирования).* КАК ДокументПланирования, (ВЫРАЗИТЬ(ВЫБОР
				        КОГДА Номенклатура ССЫЛКА Справочник.Номенклатура
				            ТОГДА Номенклатура.НоменклатурнаяГруппа
				        ИНАЧЕ Номенклатура
				    КОНЕЦ КАК Справочник.НоменклатурныеГруппы)).* КАК НоменклатурнаяГруппа, (ВЫРАЗИТЬ(Номенклатура КАК Справочник.Номенклатура)).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ДокументПланирования.Ответственный).* КАК Ответственный}) КАК ПланыПродажОбороты
	
	СГРУППИРОВАТЬ ПО
		ПланыПродажОбороты.Проект,
		ПланыПродажОбороты.Подразделение,
		ВЫРАЗИТЬ(ВЫБОР
				КОГДА ПланыПродажОбороты.Номенклатура ССЫЛКА Справочник.Номенклатура
					ТОГДА ПланыПродажОбороты.Номенклатура.НоменклатурнаяГруппа
				ИНАЧЕ ПланыПродажОбороты.Номенклатура
			КОНЕЦ КАК Справочник.НоменклатурныеГруппы)
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		ВложенныйЗапрос.Проект,
		ВложенныйЗапрос.Подразделение,
		ВложенныйЗапрос.НоменклатураНоменклатурнаяГруппа,
		СУММА(0),
		СУММА(0),
		СУММА(0),
		СУММА(0),
		СУММА(ВложенныйЗапрос.СуммаМотивации),
		ВложенныйЗапрос.КонтрагентОсновнойМенеджерПокупателя
	ИЗ
		(ВЫБРАТЬ
			РеализацияТоваровУслугТовары.СуммаМотивации КАК СуммаМотивации,
			РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа КАК НоменклатураНоменклатурнаяГруппа,
			РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
			РеализацияТоваровУслугТовары.Ссылка.Контрагент.ОсновнойМенеджерПокупателя КАК КонтрагентОсновнойМенеджерПокупателя,
			РеализацияТоваровУслугТовары.Ссылка.Подразделение КАК Подразделение,
			РеализацияТоваровУслугТовары.Ссылка.Проект КАК Проект
		ИЗ
			Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
		ГДЕ
			РеализацияТоваровУслугТовары.Ссылка.Проведен
			И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			-РеализацияТоваровУслугТовары.СуммаМотивации,
			РеализацияТоваровУслугТовары.Номенклатура.НоменклатурнаяГруппа,
			ВозвратТоваровОтПокупателяТовары.Ссылка,
			РеализацияТоваровУслугТовары.Ссылка.Контрагент.ОсновнойМенеджерПокупателя,
			РеализацияТоваровУслугТовары.Ссылка.Подразделение,
			РеализацияТоваровУслугТовары.Ссылка.Проект
		ИЗ
			Документ.ВозвратТоваровОтПокупателя.Товары КАК ВозвратТоваровОтПокупателяТовары
				ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
				ПО ВозвратТоваровОтПокупателяТовары.ДокументПартии = РеализацияТоваровУслугТовары.Ссылка
					И ВозвратТоваровОтПокупателяТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
		ГДЕ
			РеализацияТоваровУслугТовары.Ссылка.Проведен
			И ВозвратТоваровОтПокупателяТовары.Ссылка.Проведен
			И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода) КАК ВложенныйЗапрос
	
	СГРУППИРОВАТЬ ПО
		ВложенныйЗапрос.НоменклатураНоменклатурнаяГруппа,
		ВложенныйЗапрос.КонтрагентОсновнойМенеджерПокупателя,
		ВложенныйЗапрос.Подразделение,
		ВложенныйЗапрос.Проект) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
	ВложенныйЗапрос.Проект,
	ВложенныйЗапрос.Подразделение,
	ВложенныйЗапрос.НоменклатурнаяГруппа
Показать

Вычисляемые поля

Ресурсы
5. user705522_constantin_h 35 11.12.17 14:17 Сейчас в теме
(3)Попробуйте первое выражение напрямую записать во втором.
4. user623969_dusa 11.12.17 14:17 Сейчас в теме
В выражениях вычисляемого поля есть ограничение - в нем нельзя использовать вычисляемые поля.
https://its.1c.ru/db/metod8dev/content/1810/hdoc
6. EvaMendes 11.12.17 14:32 Сейчас в теме
(4) подскажите, каким образом можно рассчитать процент выполнения плана (факт*100/план), потом на основании процента, коэффициент, потом этом коэффициент умножить на факт и еще один коэффициент умножить на получившееся значение?
11. EvaMendes 11.12.17 15:15 Сейчас в теме
Подскажите, пожалуйста, как в ресурсах написать чтобы считалось количество полей у которых значение >0,4?
Примерно так
Сумма(Выбор когда Коэффициент1>0.4 тогда Коэффициент1 иначе 0 конец)
7. HanterVol 8 11.12.17 14:43 Сейчас в теме
Выбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец< 40 тогда 0 Когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец>= 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец
9. EvaMendes 11.12.17 14:54 Сейчас в теме
(7) а потом мне еще этот коэффициент нужно умножить на число из отчета и получить некий Y, а потом, сумму Y умножить еще на один коэффициент....
Там будет просто миллион строк... отчет будет отрабатывать миллион лет...

Как бы лучше выйти из этой ситуации?
8. vadim1011985 100 11.12.17 14:46 Сейчас в теме
Ну да, для каждого из 5-ти полей надо писать полные формулы без учета прошлых вычисляемых полей. Но в данном случае это не целесообразно уже для 3-го поля получится сумасшедшая формула (даже если часть полей вынести в запрос). По мне так проще формировать отчет программно через СКД результат вывести в таблицу значений , там рассчитать все нужные поля и готовую таблицу передать как внешний источник данных.

Либо если конфигурация не типовая создать общий модуль где будут вычисляться нужные выражения и уже функции общего модуля использовать в вычисляемых полях
10. EvaMendes 11.12.17 14:58 Сейчас в теме
(8) подскажите, пожалуйста, как это сделать? причем у меня сначала рассчитываются поля расшифровки, потом вычисляются коэффициенты (как для группировок так и для расшифровок), потом производятся вычисления.
(8)
Либо если конфигурация не типовая создать общий модуль где будут вычисляться нужные выражения и уже функции общего модуля использовать в вычисляемых полях

Может статью?
12. vadim1011985 100 11.12.17 16:41 Сейчас в теме
(10) Пример можно посмотреть тут
13. EvaMendes 21.12.17 15:37 Сейчас в теме
(12) А можно ли рассчитывать только на основании группового поля?
14. vadim1011985 100 21.12.17 18:54 Сейчас в теме
(13) а можно подробнее - не совсем понятно что нужно
15. EvaMendes 11.01.18 10:34 Сейчас в теме
Почти все посчиталось. Осталось перемножить три поля только в группировках:
1.
Выбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец < 40 тогда 0 Когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец >= 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец * СуммаМотивации

2.
ВычислитьВыражение("РасчетКоэффициентаПоКоличествуГрупп(Сумма(ВЫБОР КОГДА (Выбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец < 40 тогда 0 Когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец >= 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец)=0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ))","Проект","Группировка")

3.
ВычислитьВыражение("СуммаВзаиморасчетовРасход/Выбор Когда СуммаВзаиморасчетовПриход=0 Тогда 1 Иначе СуммаВзаиморасчетовПриход Конец
","Проект","группировка")


Пишу в вычисляемых полях: ВычислитьВыражение("(ВесьКодПоля1)*(ВесьКОдПоля2)*(ВесьКодПоля3)","Проект","группировка")

Отчет не исполняется и пишет: Ожидается ) ")" Продолжить редактирование?
Куда только не добавляла скобку - ничего не работает. Что делать??? Помогите, пожалуйста!!
16. user705522_constantin_h 35 11.01.18 11:19 Сейчас в теме
(15) Попробуйте так:
ВычислитьВыражение("РасчетКоэффициентаПоКоличествуГрупп(Сумма(Выбор(Выбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец < 40 тогда 0 Когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец >= 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец)=0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ))","Проект","Группировка")
18. EvaMendes 11.01.18 12:26 Сейчас в теме
(16)
ВычислитьВыражение("РасчетКоэффициентаПоКоличествуГрупп(Сумма(Выбор(Выбор когда Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец = 120 тогда 1.2 иначе Выбор Когда ПланыПродажСтоимостьСНДС=0 Тогда 100 Иначе ПродажиСтоимостьСНДС*100/ПланыПродажСтоимостьСНДС Конец/100 конец)=0 ТОГДА 1 ИНАЧЕ 0 КОНЕЦ))","Проект","Группировка")


Так а умножение полей?
17. VmvLer 11.01.18 11:23 Сейчас в теме
можно использовать пользовательские поля для дополнительных формул расчета во вычисляемым полям.
19. EvaMendes 11.01.18 13:03 Сейчас в теме
(17) спасибо! Помогло. Но хотелось бы чтобы пользователи не могли менять эти настройки. Я так понимаю, это можно только в модуле прописать и указать какая настройка будет открываться? Получается какая-то запутанная история
Оставьте свое сообщение

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