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