Как выбрать наибольшее среди условия Если?

1. 1Eset 3 30.06.20 09:00 Сейчас в теме
Ситуация довольно простая есть переменная Сумма в которой есть некое значение. Не могу простую вещь сделать при наборе 12 баллов, код завершает работу уже на на условии "удовлетворительно" и по сути всё верно с программой не поспоришь, пожалуйста подправьте условия, чтобы выбиралось наибольшее, а то я кручу и чувствую, что вокруг 3х сосен хожу.

Если Сумма = 0 Тогда
	Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 3 Тогда
	Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 8 Тогда
	Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
ИначеЕсли Сумма > 12 Тогда
	Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
КонецЕсли;
Показать
Найденные решения
2. herfis 498 30.06.20 09:06 Сейчас в теме
Порядок условий поменяй на обратный
1Eset; andy_zhav; alex-l19041; +3 Ответить
5. herfis 498 30.06.20 09:18 Сейчас в теме
В таких случаях всегда нужно оставлять Иначе, чтобы покрыть весь диапазон. А еще лучше - использовать значение по умолчанию (в случае единичной проверки оно вообще позволяет обойтись без Иначе, что делает код читабельнее).
Оценка = "НЕУДОВЛЕТВОРИТЕЛЬНО";
Если Сумма > 12 Тогда
     Оценка = "ОТЛИЧНО";
ИначеЕсли Сумма > 8 Тогда
     Оценка = "ХОРОШО";
ИначеЕсли Сумма > 3 Тогда
     Оценка = "УДОВЛЕТВОРИТЕЛЬНО";
КонецЕсли;
Предупреждение(СтрШаблон("Вы набрали %1 баллов, Ваша оценка %2", Сумма, Оценка));
Показать
1Eset; andy_zhav; +2 Ответить
4. andy_zhav 197 30.06.20 09:09 Сейчас в теме
(1) Можно двумя вариантами решить. Как в (2) или добавить в каждом если второе условие:
Если Сумма >= 0 И Сумма <=3 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 3 И Сумма <= 8 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 8 И Сумма <= 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
ИначеЕсли Сумма > 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. andy_zhav 197 30.06.20 09:09 Сейчас в теме
(1) Можно двумя вариантами решить. Как в (2) или добавить в каждом если второе условие:
Если Сумма >= 0 И Сумма <=3 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 3 И Сумма <= 8 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
ИначеЕсли Сумма > 8 И Сумма <= 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
ИначеЕсли Сумма > 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
КонецЕсли;
Показать
6. 1Eset 3 30.06.20 09:33 Сейчас в теме
(4) Большое спасибо! Хорошее решения!
13. Степной 27 30.06.20 16:41 Сейчас в теме
(1) Вариация на тему:

&НаКлиенте
Процедура ПроверитьОценку(Команда)
	
	Оценка	= ПроверитьОценкуНаСервере(ПроверяемыйБалл);
	
	Если Оценка = Неопределено Тогда
		ТекстСообщения	= "Вы нам все сломали :(";
	Иначе
		ТекстСообщения	= "Ваш балл: " + Оценка;  	
	КонецЕсли; 
	
	Сообщить(ТекстСообщения);
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьОценкуНаСервере(ПроверяемыйБалл)
	
	Запрос			= Новый Запрос;
	Запрос.Текст	=
	"ВЫБРАТЬ
	|	0 КАК НачалоДиапазона,
	|	3 КАК КонецДиапазона,
	|	""Неудовлетворительно"" КАК Оценка
	|ПОМЕСТИТЬ ВТ_ТаблицаБаллов
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	4,
	|	8,
	|	""Удовлетворительно""
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	9,
	|	12,
	|	""Хорошо""
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	13,
	|	1000,
	|	""Отлично""
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВТ_ТаблицаБаллов.НачалоДиапазона КАК НачалоДиапазона,
	|	ВТ_ТаблицаБаллов.КонецДиапазона КАК КонецДиапазона,
	|	ВТ_ТаблицаБаллов.Оценка КАК Оценка
	|ИЗ
	|	ВТ_ТаблицаБаллов КАК ВТ_ТаблицаБаллов
	|ГДЕ
	|	ВТ_ТаблицаБаллов.НачалоДиапазона <= &ПроверяемыйБалл
	|	И ВТ_ТаблицаБаллов.КонецДиапазона >= &ПроверяемыйБалл";
	
	Запрос.УстановитьПараметр("ПроверяемыйБалл",	ПроверяемыйБалл);
	
	Выборка	= Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда   	
		Возврат Выборка.Оценка;
	Иначе
		//Явное, лучше неявного)
		Возврат Неопределено;
	КонецЕсли; 
	
КонецФункции

Показать
2. herfis 498 30.06.20 09:06 Сейчас в теме
Порядок условий поменяй на обратный
1Eset; andy_zhav; alex-l19041; +3 Ответить
7. 1Eset 3 30.06.20 09:34 Сейчас в теме
(2) Спасибо))))) вот же реально думал, что ответ элементарный! Просто и хорошее решение
3. herfis 498 30.06.20 09:08 Сейчас в теме
При 1, 2, 3 баллах оценку вообще не выставит.
5. herfis 498 30.06.20 09:18 Сейчас в теме
В таких случаях всегда нужно оставлять Иначе, чтобы покрыть весь диапазон. А еще лучше - использовать значение по умолчанию (в случае единичной проверки оно вообще позволяет обойтись без Иначе, что делает код читабельнее).
Оценка = "НЕУДОВЛЕТВОРИТЕЛЬНО";
Если Сумма > 12 Тогда
     Оценка = "ОТЛИЧНО";
ИначеЕсли Сумма > 8 Тогда
     Оценка = "ХОРОШО";
ИначеЕсли Сумма > 3 Тогда
     Оценка = "УДОВЛЕТВОРИТЕЛЬНО";
КонецЕсли;
Предупреждение(СтрШаблон("Вы набрали %1 баллов, Ваша оценка %2", Сумма, Оценка));
Показать
1Eset; andy_zhav; +2 Ответить
8. 1Eset 3 30.06.20 09:34 Сейчас в теме
9. platonov.e 158 30.06.20 09:39 Сейчас в теме
(5) Но по правилам программирования , принято писать иначе, если есть ИначеЕсли)
10. herfis 498 30.06.20 09:48 Сейчас в теме
(9) Если внутри инициализация переменной, то значение по-умолчанию для нее - маст хэв. Уверен, если поищите в своих правилах, то найдете что так тоже принято :) Что инициализировать по условию - плохой стиль. А если внутри ТОЛЬКО инициализация переменной, то надобность в Иначе просто отпадает.
11. platonov.e 158 30.06.20 09:54 Сейчас в теме
(10) Может быть) Но зачем ее инициализировать два раза, если можно один?)
12. herfis 498 30.06.20 10:22 Сейчас в теме
(11) Инициализация - она всегда один раз. Потом уже идет использование и помещение других значений. А условная инициализация при рефакторинге может привести к ситуации, когда переменная останется неинициализированной, что чревато трудновыявляемыми плавающими ошибками.
Оставьте свое сообщение

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