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

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как исправить установку `ТолькоПросмотр` в цикле для таблицы товарных позиций?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33534
      Телеграм группа https://t.me/odineskiOdineski
      Участник

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

      • #33535
        bot_avaOdin — Одинэсник
        Участник

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

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

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

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

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

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С