Подскажите как такое оптимизировать:
```1c
    &НаКлиенте
    Процедура УстановитьЗначениеЗначка(Элемент)

    Если Элемент.Имя = "УГТ1" И Объект.УГТ1 Тогда

    Объект.УГТ2 = Не Объект.УГТ1;
    Объект.УГТ3 = Не Объект.УГТ1;
    Объект.УГТ4 = Не Объект.УГТ1;
    Объект.УГТ5 = Не Объект.УГТ1;
    Объект.УГТ6 = Не Объект.УГТ1;
    Объект.УГТ7 = Не Объект.УГТ1;
    Объект.УГТ8 = Не Объект.УГТ1;
    Объект.УГТ9 = Не Объект.УГТ1;

    ИначеЕсли Элемент.Имя = "УГТ2" И Объект.УГТ2 Тогда

    Объект.УГТ1 = Не Объект.УГТ2;
    Объект.УГТ3 = Не Объект.УГТ2;
    Объект.УГТ4 = Не Объект.УГТ2;
    Объект.УГТ5 = Не Объект.УГТ2;
    Объект.УГТ6 = Не Объект.УГТ2;
    Объект.УГТ7 = Не Объект.УГТ2;
    Объект.УГТ8 = Не Объект.УГТ2;
    Объект.УГТ9 = Не Объект.УГТ2;

    ИначеЕсли Элемент.Имя = "УГТ3" И Объект.УГТ3 Тогда

    Объект.УГТ1 = Не Объект.УГТ3;
    Объект.УГТ2 = Не Объект.УГТ3;
    Объект.УГТ4 = Не Объект.УГТ3;
    Объект.УГТ5 = Не Объект.УГТ3;
    Объект.УГТ6 = Не Объект.УГТ3;
    Объект.УГТ7 = Не Объект.УГТ3;
    Объект.УГТ8 = Не Объект.УГТ3;
    Объект.УГТ9 = Не Объект.УГТ3;

    ИначеЕсли Элемент.Имя = "УГТ4" И Объект.УГТ4 Тогда

    Объект.УГТ1 = Не Объект.УГТ4;
    Объект.УГТ2 = Не Объект.УГТ4;
    Объект.УГТ3 = Не Объект.УГТ4;
    Объект.УГТ5 = Не Объект.УГТ4;
    Объект.УГТ6 = Не Объект.УГТ4;
    Объект.УГТ7 = Не Объект.УГТ4;
    Объект.УГТ8 = Не Объект.УГТ4;
    Объект.УГТ9 = Не Объект.УГТ4;

    ИначеЕсли Элемент.Имя = "УГТ5" И Объект.УГТ5 Тогда

    Объект.УГТ1 = Не Объект.УГТ5;
    Объект.УГТ2 = Не Объект.УГТ5;
    Объект.УГТ3 = Не Объект.УГТ5;
    Объект.УГТ4 = Не Объект.УГТ5;
    Объект.УГТ6 = Не Объект.УГТ5;
    Объект.УГТ7 = Не Объект.УГТ5;
    Объект.УГТ8 = Не Объект.УГТ5;
    Объект.УГТ9 = Не Объект.УГТ5;

    ИначеЕсли Элемент.Имя = "УГТ6" И Объект.УГТ6 Тогда

    Объект.УГТ1 = Не Объект.УГТ6;
    Объект.УГТ2 = Не Объект.УГТ6;
    Объект.УГТ3 = Не Объект.УГТ6;
    Объект.УГТ4 = Не Объект.УГТ6;
    Объект.УГТ5 = Не Объект.УГТ6;
    Объект.УГТ7 = Не Объект.УГТ6;
    Объект.УГТ8 = Не Объект.УГТ6;
    Объект.УГТ9 = Не Объект.УГТ6;

    ИначеЕсли Элемент.Имя = "УГТ7" И Объект.УГТ7 Тогда

    Объект.УГТ1 = Не Объект.УГТ7;
    Объект.УГТ2 = Не Объект.УГТ7;
    Объект.УГТ3 = Не Объект.УГТ7;
    Объект.УГТ4 = Не Объект.УГТ7;
    Объект.УГТ5 = Не Объект.УГТ7;
    Объект.УГТ6 = Не Объект.УГТ7;
    Объект.УГТ8 = Не Объект.УГТ7;
    Объект.УГТ9 = Не Объект.УГТ7;

    ИначеЕсли Элемент.Имя = "УГТ8" И Объект.УГТ8 Тогда

    Объект.УГТ1 = Не Объект.УГТ8;
    Объект.УГТ2 = Не Объект.УГТ8;
    Объект.УГТ3 = Не Объект.УГТ8;
    Объект.УГТ4 = Не Объект.УГТ8;
    Объект.УГТ5 = Не Объект.УГТ8;
    Объект.УГТ6 = Не Объект.УГТ8;
    Объект.УГТ7 = Не Объект.УГТ8;
    Объект.УГТ9 = Не Объект.УГТ8;

    ИначеЕсли Элемент.Имя = "УГТ9" И Объект.УГТ9 Тогда

    Объект.УГТ1 = Не Объект.УГТ9;
    Объект.УГТ2 = Не Объект.УГТ9;
    Объект.УГТ3 = Не Объект.УГТ9;
    Объект.УГТ4 = Не Объект.УГТ9;
    Объект.УГТ5 = Не Объект.УГТ9;
    Объект.УГТ6 = Не Объект.УГТ9;
    Объект.УГТ7 = Не Объект.УГТ9;
    Объект.УГТ8 = Не Объект.УГТ9;

    КонецЕсли;

    КонецПроцедуры
```
---
как минимум использовать цикл

```1c
    Для Номер = 1 По 9 Цикл

    Если Элемент.Имя = "УГТ" + Номер Тогда
    Продолжить;
    КонецЕсли;

    Если Объект[Элемент.Имя] Тогда
    Объект["УГТ" + Номер] = НЕ Объект[Элемент.Имя];
    КонецЕсли;

    КонецЦикла;
```

если не ошибся в логике
---
как минимум использовать цикл

```1c
    Для Номер = 1 По 9 Цикл

    Если Элемент.Имя = "УГТ" + Номер Тогда
    Продолжить;
    КонецЕсли;

    Если Объект[Элемент.Имя] Тогда
    Объект["УГТ" + Номер] = НЕ Объект[Элемент.Имя];
    КонецЕсли;

    КонецЦикла;
```

если не ошибся в логике
---
Всем большое спасибо)
---
Посчитал что это самый первый, оптимальный вариант
---
Да, но когда у тебя появится элемент УГТ10 - тебе придется переписывать код. И так каждый раз, в случае добавления нового элемента. (Мой облегченный вариант тоже это предполагает, не спорю).
НО.
Можно написать код, который будет генерить реквизиты и элементы на форме в зависимости от настроек (которые можно задавать интерактивно через внешние обработки). И один универсальный программный код, которому будет пофиг на количество таких элементов.

Механизм безотказный.
---
Не, тут ограниченное количество реквизитов, больше ничего добавляться не будет, изначально думал поменять все эти реквизиты типа "булево" на переключатель, но подсказали хороший вариант упрощения
---
никогда не говори никогда.
Нормальные программисты понимают только три степени величин - "ноль", "один" и "много" (в оригинале - до х...).
Все алгоритмы писать надо исходя из этой простой аксиомы. Все, что больше 1 - надо писать универсальными циклами (если имеется идентифицирующий префикс и числовой итератор).
---
Это точно, ну слушай, если все предусмотреть работы остальным не останется ))
---
Блин, моя цель - сделать хорошо свою работу, сделать её дорого, добавить плюс в свою профессиональную репутацию.
Почему я должен думать об остальных?
---
```1c
    Процедура УстановитьЗначениеЗначка(ОбрабатываемыйЭлемент)

    Если Объект[ОбрабатываемыйЭлемент] Тогда

    МассивЭлементов = Новый Массив;
    МассивЭлементов.Добавить("УТГ1");
    МассивЭлементов.Добавить("УТГ2");
    // и так далее

    Для Каждого ЭлементМассива Из МассивЭлементов Цикл
    Объект[ЭлементМассива] = ЭлементМассива = ОбрабатываемыйЭлемент;
    КонецЦикла;

    КонецЕсли;

    КонецПроцедуры
```
---
```1c
    Процедура УстановитьЗначениеЗначка(Элемент)

    ИмяРеквизита = Элемент.Имя;

    Если Лев(ИмяРеквизита, 3) = "УГТ" И Объект[ИмяРеквизита] = Истина Тогда

    Для Сч = 1 По 9 Цикл
    ТекущееИмя = "УГТ" + Сч;
    Если ТекущееИмя = ИмяРеквизита Тогда
    Продолжить;
    КонецЕсли;
    Объект[ТекущееИмя] = Ложь
    КонецЦикла;
    КонецЕсли;

    КонецПроцедуры
```
---
На вкус и цвет )))
---
```1c
    &НаКлиенте
    Процедура УстановитьЗначениеЗначка(Элемент)

    Объект.УГТ1 = Элемент.Имя = "УГТ1" И Объект.УГТ1;
    Объект.УГТ2 = Элемент.Имя = "УГТ2" И Объект.УГТ2;
    Объект.УГТ3 = Элемент.Имя = "УГТ3" И Объект.УГТ3;
    Объект.УГТ4 = Элемент.Имя = "УГТ4" И Объект.УГТ4;
    Объект.УГТ5 = Элемент.Имя = "УГТ5" И Объект.УГТ5;
    Объект.УГТ6 = Элемент.Имя = "УГТ6" И Объект.УГТ6;
    Объект.УГТ7 = Элемент.Имя = "УГТ7" И Объект.УГТ7;
    Объект.УГТ8 = Элемент.Имя = "УГТ8" И Объект.УГТ8;
    Объект.УГТ9 = Элемент.Имя = "УГТ9" И Объект.УГТ9;

    КонецЕсли;
```
---
И что произойдет при снятии флажка? Он все равно установится в Истина?
---
Снимется флажок
---
Нет. Если при снятии флажка будет активирована эта процедура - значок установится в Истина. Имя элемента же не изменилось, и ты не проверяешь текущее значение флажка.
---
Я так понял, логика такая же как у "Поле переключателя" (radio button) - если одно включаем, остальные должны стать в значение Ложь. Кстати, это вектор для оптимизации - заменить всё на один реквизит (Число или Строка) и вывести на форму поле с видом "Поле переключателя".
---
Да. Скорее всего именно так. Но нет понимания - что делать при снятии флажка? Снимать или оставлять?
Если это радиобатон - то оставлять, да. А вот если условие задачи в том, что можно использовать не более одной галочки - то надо снимать флаг.
Я руководствуюсь второй логикой.
---
Возможно ты частично прав...
Так лучше ?)
---
Конечно. Осталось только "НЕ" убрать из всех строчек.
---
Зачем ? Всё правильно
---
Думай, Федя, думай!
---
И второй раз оказался прав (Как ни странно) :)
---
Мастерство - его даже за 29 лет стажа не пропить!
---
```1c
    Для СчНомер = 1 По 9 Цикл
    Если Элемент.Имя = "УГТ" + СчНомер И Объект["УГТ"+СчНомер] Тогда
    Для Сч = 1 По 9 Цикл
    Если Сч <> СчНомер Тогда
    Объект["УГТ" + Сч] = ЛОЖЬ;
    КонецЕсли;
    КонецЦикла;
    Прервать;
    КонецЦикла;
    КонецЦикла;
```
---
Два вложенных цикла? Ну нет же. Это антиоптимизация.
Количество строк может и сэкономил, а вот количество действий - только увеличил на порядок.
---
Все оптимально, кол-во выполнений от 10 (в лучшем случае) до 18 в худшем.
---
Я б тебя на работу не взял. Индусятина какая-то.
---
Вложенные циклы - это зло, но для решение Np полных задач ничего умнее пока не придумали.
А насчет работы - так мне не надо, но спасибо!
---
Это не та задача. Тут уже накидали много интересных и абсолютно рабочих решений без твоих "вложенных циклов".
То есть, то ли ты не так задачу понимаешь, то ли все-таки что-то придумали поумнее (а ты пока не в курсе)...
---
решение Np полных задачКакое, однако, забавное сочетание умных слов, уровня вопроса и начального говнокода.