Как программно отключить поле(Колонку) при отсутствии данных по ней в строках.
То есть имеется отчет в нем есть группировка детальных записей:
"Контрагент" | "Номенклатура" | "Размер" | "Количество"

Так вот в большинстве случаев во всех строках колонки "Размер" отсутствуют данные.

Необходимо при отсутствии данных по этой колонке отключать ее использование.

```1c
    Поле.Использование = Ложь;
    Иначе Поле.Использование = Истина;
```

Пытался в запросе создать параметр типа булево с подсчетом количества но не могу понять как этот параметр установить из запроса.

```1c
    ВЫБОР
    КОГДА КОЛИЧЕСТВО(ВТ_ВсеОбъекты.Размер) > 0
    ТОГДА &ДаНет = ИСТИНА
    ИНАЧЕ &ДаНет = Истина
    КОНЕЦ КАК ДаНет
```

Отчет на СКД.
Просьба условное оформление по группировке не предлагать тк не умеет СКД нулевую ширину устанавливать.
Может у кого была такая задача, тема живая и нужная давайте погутарим!
---
параметры нельзя устанавливать из запроса. Они работают наоборот. На момент запроса параметры должны быть установлены (вместо них подставляются их значения).
Первое, что пришло в голову, это получать программно в ТЗ. Анализировать полученный ТЗ. И уже по итогу, если необходимо, скрывать колонку отчета и формировать отчет уже в табличный документ. Из минусов: двойное выполнение отчета.
Пример:

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    // 1
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

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

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    КонецПроцедуры
```
---
отчет в СКД?
---
Да, сейчас описание поправлю.
---
параметры нельзя устанавливать из запроса. Они работают наоборот. На момент запроса параметры должны быть установлены (вместо них подставляются их значения).
Первое, что пришло в голову, это получать программно в ТЗ. Анализировать полученный ТЗ. И уже по итогу, если необходимо, скрывать колонку отчета и формировать отчет уже в табличный документ. Из минусов: двойное выполнение отчета.
Пример:

```1c
    Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    // 1
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

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

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    КонецПроцедуры
```
---
Не могу понять почему. ТЗ.Итог("Размер") = Неопределено, может быть что нужно еще как то задействовать компоновщик пользовательских настроек?
---
Не мог посчитать ТЗ.Итог потому что у колонки несколько типов значений. Сейчас все считает корректно! Классное решение спасибо!
---
Все оказалось проще

в настройке оформления задать максимальную ширину -1 и добавить условие Количество = 0
---
Может у кого была такая задача, тема живая и нужная давайте погутарим!
Нет, т.к. задача практически является бредом.
Пользователь сам должен решать, какие поля выводить, а какие нет - он задает структуру отчета. Ну, а если так сильно хочется, то решается она с помощью программного вывода. Есть куча примеров.
---
При отсутствии данных колонки быть не должно при наличии данных колонка должна выводиться. В чем бред? Есть куча примеров Как раз таки просьба привести пример...
---
Вот не соглашусь. Часто встает задача выводить или не выводить какие-то колонки в зависимости от определенных условий.
---
Правильно, и если условия находятся в самом запросе, то здесь подходит только решение выбранное в теме.