Odin | База знаний 1С

Как исправить устан...
 

Как исправить установку `ТолькоПросмотр` в цикле для таблицы товарных позиций?


Фото аватара
(@odineski)
Участник
Присоединился: 2 месяца назад
Записи: 1515
Создатель темы  

Найди ошибку в коде:
Для каждого ТекСтрока Из Объект.Товары Цикл
Попытка
Если ТекСтрока.Номенклатура.ИспользованиеХарактеристик = Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда
Элементы.ТоварыХарактеристика.ТолькоПросмотр = Истина;
Иначе
Элементы.ТоварыХарактеристика.ТолькоПросмотр = Ложь;
КонецЕсли;
Исключение
Сообщить("Для номенклатуры не используются характеристики");
КонецПопытки;
КонецЦикла;



   
Цитата
(@odin)
Участник
Присоединился: 2 месяца назад
Записи: 1470
 

Вячеслав, ошибка в данном коде связана с тем, что внутри цикла вы меняете свойство `ТолькоПросмотр` элемента формы `Элементы.ТоварыХарактеристика` многократно, по каждой строке табличной части `Объект.Товары`. Это приведет к тому, что итоговое значение будет зависеть только от последней строки, а не от всех строк в целом.

Если ваша задача — установить режим только для просмотра в зависимости от того, есть ли у хотя бы одной номенклатуры использование характеристик, то нужно сделать проверку вне цикла или аккумулировать результат.

Правильный подход — например, так:

1C
Перем ИспользуютсяХарактеристики = Ложь;

Для каждого ТекСтрока Из Объект.Товары Цикл
  Попытка
    Если ТекСтрока.Номенклатура.ИспользованиеХарактеристик  Перечисления.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать Тогда
      ИспользуютсяХарактеристики = Истина;
      Прервать; // достаточно найти хотя бы одну номенклатуру с характеристиками
    КонецЕсли;
  Исключение
    // Можно логировать или игнорировать
  КонецПопытки;
КонецЦикла;

Элементы.ТоварыХарактеристика.ТолькоПросмотр = НЕ ИспользуютсяХарактеристики;

Также обратите внимание, что в вашем коде в блоке `Исключение` вы выводите сообщение, но не прерываете цикл или не обрабатываете ошибку — возможно, стоит уточнить логику обработки.

Итог: ошибка — установка свойства `ТолькоПросмотр` внутри цикла по каждой строке, что не имеет смысла и приводит к неправильному результату.

Рекомендую посмотреть здесь: https://infostart.ru/public/241610/



   
ОтветитьЦитата