Добрый день.
Есть отчет с 4 группировками по умолчанию.
Для документа Коммерческое предложение нужно установить отбор программно. Когда структура не меняется, можно поставить код приведенный ниже.
А вот если пользователь захочет поменять структуру, то ошибка Индекс находится за границами массива, или отбор попадает не в ту группировку.
Как зная название поля, найти его группировку и добавить отбор?

```1c
    Компановщица = КомпоновщикНастроек.Настройки.Структура[0].Структура[0].Структура[0].Отбор.Элементы

    Для Каждого ЭлементОтбора Из Компановщица Цикл
    Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СуммаОТГРУЗИТЬ") И (ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно ИЛИ ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно) Тогда
    Копмньенщик.Удалить(ЭлементОтбора);
    КонецЕсли;
    КонецЦикла;
    НовыйЭлементОтбора = Копмньенщик.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ПолеОтбора = Новый ПолеКомпоновкиДанных("СуммаОТГРУЗИТЬ");
    НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
    НовыйЭлементОтбора.Использование = Истина;
    НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовыйЭлементОтбора.ПравоеЗначение = 0;
```
---
Добавил вычисляемое поле, добавил в ресурсы и указал Сумма(Сумма)-Сумма(ЕСТЬNULL(СтоимостьОтгружено,0))

А нужно было в Выражении вычисляемого поля указать
Сумма-ЕСТЬNULL(СтоимостьОтгружено,0)
---
найти рекурсивно коллекцию отбора
добавить элемент в найденную коллекцию

все просто
---
Не надо вешать отбор на группировку (элемент Структура в настройках СКД), вешайте отбор на весь отчёт (элемент Отбор в настройках СКД). Если нужно отключить какой-то отбор, то это придётся по-хорошему делать рекурсивно:

```1c
    Процедура ОтключитьОтборыПоПолюРекурсивно(ЭлементыОтбора, Поле)
    Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
    Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
    Если ЭлементОтбора.ЛевоеЗначение = Поле Или ЭлементОтбора.ПравоеЗначение = Поле Тогда
    ЭлементОтбора.Использование = Ложь;
    КонецЕсли;
    Иначе
    ОтключитьОтборыПоПолюРекурсивно(ЭлементОтбора.Элементы, Поле)
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
по не понятным причинам, в корне. ресурсы отображаются как обычные поля
ОсталосьОТгрузить = 0 не дает поставить
---
Возможно, так:

```1c
    Настройки = КомпоновщикНастроек.Настройки;
    ЭлементОтбора = Неопределено;
    Для каждого СтрокаОтбора Из Настройки.Отбор.Элементы Цикл

    Если СокрЛП(СтрокаОтбора.ЛевоеЗначение) = "ИмяПоля" Тогда

    ЭлементОтбора = СтрокаОтбора;

    КонецЕсли;

    КонецЦикла;
    Если ЭлементОтбора = Неопределено Тогда
    ЭлементОтбора = Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоля");
    КонецЕсли;

    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = ЗначениеПоля;
    ЭлементОтбора.Использование = Истина;
```
---
в цикле ищется элемент отбора
Значит, его нужно добавить выключенным и включать со своими параметрами при необходимости

или...... ну в общем я проверю.
---
Добавил вычисляемое поле, добавил в ресурсы и указал Сумма(Сумма)-Сумма(ЕСТЬNULL(СтоимостьОтгружено,0))

А нужно было в Выражении вычисляемого поля указать
Сумма-ЕСТЬNULL(СтоимостьОтгружено,0)