Добрый день. Подскажите, пожалуйста, как правильно сделать условное оформление строк динамического списка? Сделал вот так, но не уверен в правильности способа
```1c
    &НаСервереБезКонтекста
    Процедура расш_СписокДокументыЗакупкиПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
    МассивКлючей = Строки.ПолучитьКлючи();
    Попытка
    Для Каждого КлючСписка Из МассивКлючей Цикл
    Для Каждого Строка Из КлючСписка.Ссылка.Товары Цикл
    Если Строка.Номенклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
    КонецЦикла;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    Исключение
    КонецПопытки;
    КонецПроцедуры
```
---
У вас в ключах ссылки на документы, нужно по ним отбирать. Не надо всю таблицу получать.
Примерно так:

```1c
    Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ПриобретениеТоваровУслугТовары.Ссылка КАК Ссылка
    | ИЗ
    | Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
    | ГДЕ ПриобретениеТоваровУслугТовары.Ссылка В (&МассивСсылок)
    | И ПриобретениеТоваровУслугТовары.Номенклатура.СтавкаНДС = Значение(Перечисление.СтавкиНДС.БезНДС)");

    МассивКлючей = Строки.ПолучитьКлючи();
    МассивСсылок = Новый Массив;
    Для Каждого КлючСписка Из МассивКлючей Цикл
    МассивСсылок.Добавить(КлючСписка.Ссылка);
    КонецЦикла;
    Запрос.УстановитьПараметр("МассивСсылок",МассивСсылок );

    МассивНужныхДокументов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

    Для Каждого КлючСписка Из МассивКлючей Цикл
    Если Не МассивНужныхДокументов.Найти(КлючСписка.Ссылка) = Неопределено Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```

(11)
---
пробуйте

```1c
    МассивКлючей = Строки.ПолучитьКлючи();
    МассивСсылок = Новый Массив;
    ТипыСсылок = Новый Соответствие;
    Для Каждого Ключ ИЗ МассивКлючей Цикл
    МассивСсылок.Добавить(Ключ.Ссылка);
    ТипыСсылок.Вставить(Ключ.ТипСсылки);
    КонецЦикла;
    ШаблонЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ДокТовары.Ссылка КАК Ссылка
    |ИЗ
    | %1.Товары КАК ДокТовары
    |ГДЕ
    | ДокТовары.Ссылка В (&Документы)
    | И ДокТовары.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)
    |";
    ТекстСоединитель = "
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |";
    ТекстЗапроса = ";
    Первый = Истина;
    Для Каждого ТипСсылки Из ТипыСсылок Цикл
    Если Метаданные.НайтиПоПолномуИмени(ТипСсылки.Ключ.ПолноеИмя).ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
    Если Первый Тогда
    ТекстЗапроса = ТекстЗапроса + СтрШаблон(ШаблонЗапроса,ТипСсылки.Ключ.ПолноеИмя);
    Первый = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + ТекстСоединитель + СтрШаблон(ШаблонЗапроса,ТипСсылки.Ключ.ПолноеИмя);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ТекстЗапроса = " Тогда
    Возврат;
    КонецЕсли;

    Запрос = Новый Запрос();
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Документы", МассивСсылок);

    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Возврат;
    КонецЕсли;

    ТабРезультат = РезультатЗапроса.Выгрузить();
    Для Каждого КлючСписка Из МассивКлючей Цикл
    Если Не ТабРезультат.Найти(КлючСписка.Ссылка) = Неопределено Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```
---
но не уверен в правильности способа Не уверен? Или не работает? Я уж не спрашиваю про то, почему в заголовке темы указано УО для УФ, а коде используется код для ОФ (хоть и с указанием контекста).

А за Попытку в данном случае - надо бить по пальцам.
---
Если всё это происходит в расширении, - не легче ли вручную выполнить эту настройку на форме ?!
---
Запросом получи документы без ндс, вместо перебора в цикле.
---
Не уверен? именно не уверен, а работать - работает.
(2) а коде используется код для ОФ (хоть и с указанием контекста) пробовал метод из статьи https://infostart.ru/1c/articles/181336/ , но он не сработал, нашел другую статью, там примерно как у меня в примере, и так все работает.
(2) А за Попытку в данном случае - надо бить по пальцам. я и написал, что не уверен в правильности метода. Так что изначально я понимаю, что при большой куче документов мой способ будет работать очень долго.
(1) как правильно сделать условное оформление строк динамического списка? Сделал вот так, но не уверен в правильности способа
---
Так что изначально я понимаю, что при большой куче документов мой способ будет работать очень долго.
Не так.
В процедуре ПриПолученииДанныхНаСервере будут документы, которые отображаются сейчас в ДС - 20-40 документов за раз.
А долго будет работать не из-за количества документов, а из-за их размера - вы получаете данные ТЧ через точку.
Получайте нужные запросом сразу, тогда не будет никаких проблем.
---
по этому примеру я и делал, только переделал немного, так как у меня динамический список из обработки Журнал документов закупки (а не список документов), там документы берутся из реестра документов, и каждый ключ из строк имеет значение "РегистрСведенийКлючЗаписи.РеестрДокументов". Запросом я могу получить только ссылки на документы из этого регистра, а как получить ключ записи я найти не смог. По рекомендации в (7) сделал с запросом
```1c
    Запрос = Новый Запрос("ВЫБРАТЬ
    | РеестрДокументов.Ссылка КАК Ссылка
    |ИЗ
    | РегистрСведений.РеестрДокументов КАК РеестрДокументов
    |ГДЕ
    | РеестрДокументов.Ссылка В
    | (ВЫБРАТЬ
    | ПриобретениеТоваровУслугТовары.Ссылка КАК Ссылка
    | ИЗ
    | Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
    | ГДЕ
    | ПриобретениеТоваровУслугТовары.Номенклатура.СтавкаНДС = Значение(Перечисление.СтавкиНДС.БезНДС))");
    ТабРезультат = Запрос.Выполнить().Выгрузить();
    МассивКлючей = Строки.ПолучитьКлючи();
    Попытка
    Для Каждого КлючСписка Из МассивКлючей Цикл
    Если Не ТабРезультат.Найти(КлючСписка.Ссылка) = Неопределено Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    Исключение
    КонецПопытки;
```
---
У вас в ключах ссылки на документы, нужно по ним отбирать. Не надо всю таблицу получать.
Примерно так:

```1c
    Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    | ПриобретениеТоваровУслугТовары.Ссылка КАК Ссылка
    | ИЗ
    | Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
    | ГДЕ ПриобретениеТоваровУслугТовары.Ссылка В (&МассивСсылок)
    | И ПриобретениеТоваровУслугТовары.Номенклатура.СтавкаНДС = Значение(Перечисление.СтавкиНДС.БезНДС)");

    МассивКлючей = Строки.ПолучитьКлючи();
    МассивСсылок = Новый Массив;
    Для Каждого КлючСписка Из МассивКлючей Цикл
    МассивСсылок.Добавить(КлючСписка.Ссылка);
    КонецЦикла;
    Запрос.УстановитьПараметр("МассивСсылок",МассивСсылок );

    МассивНужныхДокументов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

    Для Каждого КлючСписка Из МассивКлючей Цикл
    Если Не МассивНужныхДокументов.Найти(КлючСписка.Ссылка) = Неопределено Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```

(11)
---
пробуйте

```1c
    МассивКлючей = Строки.ПолучитьКлючи();
    МассивСсылок = Новый Массив;
    ТипыСсылок = Новый Соответствие;
    Для Каждого Ключ ИЗ МассивКлючей Цикл
    МассивСсылок.Добавить(Ключ.Ссылка);
    ТипыСсылок.Вставить(Ключ.ТипСсылки);
    КонецЦикла;
    ШаблонЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ДокТовары.Ссылка КАК Ссылка
    |ИЗ
    | %1.Товары КАК ДокТовары
    |ГДЕ
    | ДокТовары.Ссылка В (&Документы)
    | И ДокТовары.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)
    |";
    ТекстСоединитель = "
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |";
    ТекстЗапроса = ";
    Первый = Истина;
    Для Каждого ТипСсылки Из ТипыСсылок Цикл
    Если Метаданные.НайтиПоПолномуИмени(ТипСсылки.Ключ.ПолноеИмя).ТабличныеЧасти.Найти("Товары") <> Неопределено Тогда
    Если Первый Тогда
    ТекстЗапроса = ТекстЗапроса + СтрШаблон(ШаблонЗапроса,ТипСсылки.Ключ.ПолноеИмя);
    Первый = Ложь;
    Иначе
    ТекстЗапроса = ТекстЗапроса + ТекстСоединитель + СтрШаблон(ШаблонЗапроса,ТипСсылки.Ключ.ПолноеИмя);
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    Если ТекстЗапроса = " Тогда
    Возврат;
    КонецЕсли;

    Запрос = Новый Запрос();
    Запрос.Текст = ТекстЗапроса;
    Запрос.УстановитьПараметр("Документы", МассивСсылок);

    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
    Возврат;
    КонецЕсли;

    ТабРезультат = РезультатЗапроса.Выгрузить();
    Для Каждого КлючСписка Из МассивКлючей Цикл
    Если Не ТабРезультат.Найти(КлючСписка.Ссылка) = Неопределено Тогда
    СтрокаСписка = Строки[КлючСписка];
    Для Каждого КлючСтроки Из СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[КлючСтроки.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.БледноЗеленый);
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
```
---
(13) спасибо
---
пример из официального источника устроит?
https://wonderland.v8.1c.ru/blog/obrabotka-i-oformlenie-dannykh-dinamicheskogo-spiska/
---
как вариант:

```1c
    &НаСервереБезКонтекста
    Процедура расш_СписокДокументыЗакупкиПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | ЗакупкиТовары.Ссылка КАК Ссылка
    |ИЗ
    | Документ.Закупки.Товары КАК ЗакупкиТовары
    |ГДЕ
    | ЗакупкиТовары.Номенклатура.СтавкаНДС = ЗНАЧЕНИЕ(Перечисление.СтавкиНДС.БезНДС)";

    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();

    Пока Выборка.Следующий() Цикл
    СтрокаСписка = Строки[Выборка.Ссылка];
    Для Каждого Ячейка ИЗ СтрокаСписка.Оформление Цикл
    СтрокаСписка.Оформление[Ячейка.Ключ].УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
    КонецЦикла;
    КонецЦикла;

    КонецПроцедуры
```
---
Судя по имени списка "СписокДокументыЗакупки", это журнал документов. Придется определить реально используемые типы ключей и делать запрос-объединение.
---
это да. Без конфигурации тут мало что можно сказать более конкретно. Но как пример более чем достаточен. Адаптировать его к существующей конфигурации не должен вызывать проблем.