Как программно проверить, что отчет СКД пустой?

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

    //Помещаем в переменную данные о расшифровке данных
    Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, Расшифровка);
    ВнешниеПараметры = Новый Структура;
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Таб);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);

    ИмяФайла = КаталогВременныхФайлов() + "12344_с_" + Формат(НачалоПериода, "ДФ=dd.MM.yyyy")
    + "_по_" + Формат(КонецПериода, "ДФ=dd.MM.yyyy") + ".xlsx";

    Таб.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);
    Таб.Записать("123\Exchange1s8\EDI\123.xls", ТипФайлаТабличногоДокумента.XLS);
```
---
```1c
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ТаблицаЗначений = Новый ДеревоЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
```
---
1) разобраться почему в скд есть эта строка, а если интерактивно выполнить отчет там тоже есть строка?
2) сделать проверку что если Количество > 1 и ЗначениеЗаполнено(ТЗ[0].Колонка)
---
может сначала сформировать данные в тз, и если ТЗ.Количество() <> 0 тогда выводить в табдок и далее по логике.
---
.
---
```1c
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , , Истина);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ТаблицаЗначений = Новый ДеревоЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
```
---
сделал так
```1c
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;

    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ДанныеТЗ = Новый ТаблицаЗначений;

    ПроцессорВывода.УстановитьОбъект(ДанныеТЗ);

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    Если ДанныеТЗ.Количество()<>0 Тогда
    ........
    КонецЕсли;
```

в любом случае количество<>0 потому что там находится:
---
в вашем примере тоже также как в (5)
---
```1c
    Если ДанныеТЗ.Количество()>1 Тогда
    ....
    конецесли;
```

так тоже не пойдет, потому что в отчете может быть одна запись и тогда отчет не отправиться
---
а если запрос выполнить в консоли запросов там тоже будет одна строка?
почему есть эта строка? может в запросе чет не так?
---
нет, в запросе нет строк
---
1) разобраться почему в скд есть эта строка, а если интерактивно выполнить отчет там тоже есть строка?
2) сделать проверку что если Количество > 1 и ЗначениеЗаполнено(ТЗ[0].Колонка)
---
После получения МакетаКомпоновки, можно проверить результат сформированного запроса, если у нас один набор данных - запрос, конечно.

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

    Если Запрос.Выполнить().Пустой() Тогда
    Сообщить("Отчет пустой")
    КонецЕсли;
```
---
Это всё ерись, вы своими действиями в 2 раза увеличиваете время исполнения отчета! Надо всё делать за одну итерацию!
---
Сделал через поэлементный вывод. У меня в отчете есть макет с итогами его и проверяю.

```1c
    ПустойРезультат = Ложь;

    ПроцессорВывода.НачатьВывод();

    Пока Истина Цикл

    ЭлементРезультата = ПроцессорКомпоновкиДанных.Следующий();
    Если ЭлементРезультата = Неопределено Тогда
    Прервать;
    КонецЕсли;

    ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

    Если ЭлементРезультата.Макет = "Макет4" Тогда
    ПустойРезультат = ЭлементРезультата.ЗначенияПараметров.П2.Значение = Null;
    КонецЕсли;

    КонецЦикла;

    ПроцессорВывода.ЗакончитьВывод();
```