1. 1Eset 30.06.20 09:00 Сейчас в теме

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

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

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

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

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

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

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

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

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

Ведущий программист 1С
Москва
зарплата от 150 000 руб.
Полный день

Ведущий программист 1С (УТ 11)
Москва
зарплата до 200 000 руб.
Полный день