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

```1c
    Если Сумма = 0 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 3 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 8 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
    ИначеЕсли Сумма > 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
    КонецЕсли;
```
---
Порядок условий поменяй на обратный
---
В таких случаях всегда нужно оставлять Иначе, чтобы покрыть весь диапазон. А еще лучше - использовать значение по умолчанию (в случае единичной проверки оно вообще позволяет обойтись без Иначе, что делает код читабельнее).

```1c
    Оценка = "НЕУДОВЛЕТВОРИТЕЛЬНО";
    Если Сумма > 12 Тогда
    Оценка = "ОТЛИЧНО";
    ИначеЕсли Сумма > 8 Тогда
    Оценка = "ХОРОШО";
    ИначеЕсли Сумма > 3 Тогда
    Оценка = "УДОВЛЕТВОРИТЕЛЬНО";
    КонецЕсли;
    Предупреждение(СтрШаблон("Вы набрали %1 баллов, Ваша оценка %2", Сумма, Оценка));
```
---
Можно двумя вариантами решить. Как в (2) или добавить в каждом если второе условие:

```1c
    Если Сумма >= 0 И Сумма <=3 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 3 И Сумма <= 8 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 8 И Сумма <= 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
    ИначеЕсли Сумма > 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
    КонецЕсли;
```
---
Можно двумя вариантами решить. Как в (2) или добавить в каждом если второе условие:

```1c
    Если Сумма >= 0 И Сумма <=3 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка НЕУДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 3 И Сумма <= 8 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка УДОВЛЕТВОРИТЕЛЬНО");
    ИначеЕсли Сумма > 8 И Сумма <= 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ХОРОШО");
    ИначеЕсли Сумма > 12 Тогда
    Предупреждение("Вы набрали " + Сумма + " баллов, Ваша оценка ОТЛИЧНО");
    КонецЕсли;
```
---
Большое спасибо! Хорошее решения!
---
Вариация на тему:

```1c
    &НаКлиенте
    Процедура ПроверитьОценку(Команда)

    Оценка = ПроверитьОценкуНаСервере(ПроверяемыйБалл);

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

    Сообщить(ТекстСообщения);

    КонецПроцедуры

    &НаСервереБезКонтекста
    Функция ПроверитьОценкуНаСервере(ПроверяемыйБалл)

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

    Запрос.УстановитьПараметр("ПроверяемыйБалл", ПроверяемыйБалл);

    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда
    Возврат Выборка.Оценка;
    Иначе
    //Явное, лучше неявного)
    Возврат Неопределено;
    КонецЕсли;

    КонецФункции
```
---
Порядок условий поменяй на обратный
---
Спасибо))))) вот же реально думал, что ответ элементарный! Просто и хорошее решение
---
При 1, 2, 3 баллах оценку вообще не выставит.
---
В таких случаях всегда нужно оставлять Иначе, чтобы покрыть весь диапазон. А еще лучше - использовать значение по умолчанию (в случае единичной проверки оно вообще позволяет обойтись без Иначе, что делает код читабельнее).

```1c
    Оценка = "НЕУДОВЛЕТВОРИТЕЛЬНО";
    Если Сумма > 12 Тогда
    Оценка = "ОТЛИЧНО";
    ИначеЕсли Сумма > 8 Тогда
    Оценка = "ХОРОШО";
    ИначеЕсли Сумма > 3 Тогда
    Оценка = "УДОВЛЕТВОРИТЕЛЬНО";
    КонецЕсли;
    Предупреждение(СтрШаблон("Вы набрали %1 баллов, Ваша оценка %2", Сумма, Оценка));
```
---
Спасибо за апгрейд))
---
Но по правилам программирования , принято писать иначе, если есть ИначеЕсли)
---
Если внутри инициализация переменной, то значение по-умолчанию для нее - маст хэв. Уверен, если поищите в своих правилах, то найдете что так тоже принято :) Что инициализировать по условию - плохой стиль. А если внутри ТОЛЬКО инициализация переменной, то надобность в Иначе просто отпадает.
---
Может быть) Но зачем ее инициализировать два раза, если можно один?)
---
Инициализация - она всегда один раз. Потом уже идет использование и помещение других значений. А условная инициализация при рефакторинге может привести к ситуации, когда переменная останется неинициализированной, что чревато трудновыявляемыми плавающими ошибками.