Давайте смотреть, что не так с вашим кодом без детального анализа, а просто что сразу бросается в глаза:
- Поломанное форматирование. Пока 8 строчек как тут - это просто эстетическая боль, но когда строчек 80, 800 или 8000, то это маскирует ошибки, на которые уйдет больше чем три дня
- Снова таки, с точки зрения облегчения восприятия, нужно все делать в едином стиле - делаете переменные с маленькой буквы - они все должны быть с маленькой, а делаете с большой, то все уже с большой. В коде половина маленькие, половина большие без какой-либо систему. То же замечание касается ключевых слов - если не используете системное автодополнение, которое само за вас все ключевые слова пишет с большой буквы, и по личным предпочтениям начинаете писать с маленькой - то пишите с маленькой уже все подряд, а не "тогда" с маленькой, а "Цикл" с большой
- Использование переменных в духе "а и б сидели на трубе" крайне не рекомендовано - все переменные должны в своем имени отражать свое содержимое. Если лень писать СтрокаТабличнойЧастиГоловныхУборов, то хотя бы СтрокаТЧ, но никогда не "а"!!!
- Выборка из менеджера объекта полезная штука для некоторых сценариев, но конкретно тут просто увеличивается "углеродный след". Достаточно выполнить запрос сразу к табличной части, в котором тут же получить максимальное количество, а не вытаскивать в оперативку все объекты
- Вы уверены, что в табличной части запрещены отрицательные числа? На каком основании в переменную для сравнения вы размещаете ноль?
- Для вас же было бы понятнее, если бы вы не использовали явное сравнение, в котором допустили ошибку, а воспользовались стандартной функцией Макс()
- Ну и на финал, этот некрасивый и абсолютно не оптимальный код может даже заработать (но выдавать неправильное значение), если из переменной Макс2 (смотрим пункт №3 про нормальные наименования) типа Число не пытаться прочитать свойство "Количество_материалов". Такое ощущение, что было несколько черновиков кода и в одном из них сохранялось не максимальное значение, а сама строка табличной части, а потом все варианты свалили в единую кучу
Upd. Я смотрел поверхностно, но другие более детально и подсказали в комментариях про необходимость обхода выборки данных с помощью метода Следующий().
Итого, если не переписывать на запрос, то правильный код будет следующим:
Выборка=Справочники.Варианты_головных_уборов.Выбрать();
МаксКоличество = Неопределено;
Пока Выборка.Следующий() Цикл
Для каждого СтрокаКоличества из Выборка.ТабличнаяЧасть1 Цикл
Если МаксКоличество = Неопределено тогда
МаксКоличество = СтрокаКоличества.Количество_материалов;
Иначе
МаксКоличество = Макс(МаксКоличество, СтрокаКоличества.Количество_материалов);
КонецЕсли;
КонецЦикла;
КонецЦикла;
МаксКоличество = ?(МаксКоличество=Неопределено, 0, МаксКоличество);
Сообщить(МаксКоличество);