Создаю отчет "Баланс" (не СКД)
Отчет имеет ПолеТабличногоДокумента куда весь результат и выводиться.
Не могу решить вопрос с проверкой конечного результата на ноль и скрытие таких строк. Может у кого будет идей в самом коде обработки результата такое сделать.
Спасибо заранее

кусок кода

```1c
    ///////////////////////////ВЫРУЧКА/////////////////////////////
    ////////////////////////////////////////////////////////////­///

    ОбластьВыручка = Макет.ПолучитьОбласть("Выручка|Наименование");
    ТабДок.Вывести(ОбластьВыручка);

    Для Н=0 По Месяцев Цикл
    ТекМесяц = КонецМесяца(ДобавитьМесяц(ЭлементыФормы.ДатаНачало.Значение, Н));

    ОбластьВыручкаРезультат = Макет.ПолучитьОбласть("Выручка|Результат");
    ВыборкаВыручка = ВыборкаВыручка(ТекМесяц);
    ВыручкаЗапчасти = 0; ВыручкаАвтошины = 0; ВыручкаНедвижимость = 0; ВыручкаИмущество = 0; ВыручкаПрочие = 0; ВыручкаВсего = 0;
    Пока ВыборкаВыручка.Следующий() Цикл
    Если ВыборкаВыручка.Вид = Справочники.Проекты.НайтиПоКоду("000000111") Тогда
    ВыручкаЗапчасти = ВыборкаВыручка.Сумма;
    ИначеЕсли ВыборкаВыручка.Вид = Справочники.Проекты.НайтиПоКоду("000000222") Тогда
    ВыручкаАвтошины = ВыборкаВыручка.Сумма;
    ИначеЕсли ВыборкаВыручка.Вид = Справочники.Проекты.НайтиПоКоду("000000333") Тогда
    ВыручкаНедвижимость = ВыборкаВыручка.Сумма;
    ИначеЕсли ВыборкаВыручка.Вид = Справочники.Проекты.НайтиПоКоду("000000777") Тогда
    ВыручкаИмущество = ВыборкаВыручка.Сумма;
    ИначеЕсли ВыборкаВыручка.Вид = Справочники.Проекты.НайтиПоКоду("000000555") Тогда
    ВыручкаПрочие = ВыборкаВыручка.Сумма;
    КонецЕсли;
    КонецЦикла;
    ОбластьВыручкаРезультат.Параметры.ВыручкаЗапчасти = Формат(ВыручкаЗапчасти, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ВыручкаВсего = ВыручкаЗапчасти + ВыручкаАвтошины + ВыручкаНедвижимость + ВыручкаИмущество + ВыручкаПрочие;
    ОбластьВыручкаРезультат.Параметры.ВыручкаВсего = Формат(ВыручкаВсего, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ОбластьВыручкаРезультат.Параметры.ВыручкаАвтошины = Формат(ВыручкаАвтошины, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ОбластьВыручкаРезультат.Параметры.ВыручкаНедвижимость = Формат(ВыручкаНедвижимость, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ОбластьВыручкаРезультат.Параметры.ВыручкаИмущество = Формат(ВыручкаИмущество, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ОбластьВыручкаРезультат.Параметры.ВыручкаПрочие = Формат(ВыручкаПрочие, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ТабДок.Присоединить(ОбластьВыручкаРезультат);
    КонецЦикла;
```
---
ну как. Рисуешь, какой должен быть отчет. Что в колонках. Делаешь такую же таблицу значений. Если отчет многоуровневый, то - дерево значений. Заполняешь его всеми данными. Потом выводишь таблицу значений в табличный документ.
Такая технология не будет работать, если отчет очень большой. Если в нем тысяча колонок и миллионы строк. Но кмк если так, то это говорит о неправильной концепции отчета.
Ну вот например у тебя будут колонки
ВыручкаЗапчасти
ВыручкаАвтошины
ВыручкаНедвижимость
ВыручкаИмущество
ВыручкаПрочие
если надо по месяцам, то можно по-разному, я делаю обычно вложенные таблицы. Ну примерно так:
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.добавить("ВыручкаЗапчасти");

блабла
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.ВыручкаЗапчасти = Новый ТаблицаЗначений();
Для н = 1 По 12 Цикл
НоваяСтрока.ВыручкаЗапчасти.Колонки.Добавить("Месяц" + н);
КонецЦикла;

ну и так далее.
В итоге у тебя есть полная структура выводимых в отчет данных, с которыми можно делать все что угодно, и потом вывести то, что нужно.
---
Farkhod82, в этом отчете реализовано что-то наподобие: http://infostart.ru/public/102009/
Для реализации нужно сделать выгрузку результата запроса в таблицу значений и сделать Массив, содержащий наименования выводимых данных, т.е. Запчасти, автошины и т.д
Будет область, в которую эти данные и выводить.
Выводим сначала Обороты и выручку, потом обходя массив, выводим например запчасти - смотрим по таблице, есть ли данные за весь период - то выводим эту строку, дальше помесячная пристыковка данных, нет - не выводим.
---
Uncore, (11) starjevschik,
Спасибо, попробую
---
Можно поставить вывод строки в условие:
    ВыручкаВсего = ВыручкаЗапчасти + ВыручкаАвтошины + ВыручкаНедвижимость + ВыручкаИмущество + ВыручкаПрочие;

Если ВыручкаЗапчасти = 0 и ВыручкаАвтошины = 0 и ВыручкаНедвижимость = 0 и ВыручкаИмущество = 0 и ВыручкаПрочие = 0 и ВыручкаВсего = 0 тогда
Иначе
     ОбластьВыручкаРезультат.Параметры.ВыручкаЗапчасти = Формат(ВыручкаЗапчасти, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");

      ОбластьВыручкаРезультат.Параметры.ВыручкаВсего = Формат(ВыручкаВсего, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
      ОбластьВыручкаРезультат.Параметры.ВыручкаАвтошины = Формат(ВыручкаАвтошины, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
      ОбластьВыручкаРезультат.Параметры.ВыручкаНедвижимость = Формат(ВыручкаНедвижимость, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
      ОбластьВыручкаРезультат.Параметры.ВыручкаИмущество = Формат(ВыручкаИмущество, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
      ОбластьВыручкаРезультат.Параметры.ВыручкаПрочие = Формат(ВыручкаПрочие, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
      ТабДок.Присоединить(ОбластьВыручкаРезультат);

КонецЕсли;

В этом случае если у вас вся выручка нулевая то строка не выведется.
---
Что-то я не вкурю, а чем вариант (2) Вас не устраивает? Если итог 0 то столбец не выводится.
---
Sergius79,

вариант 2 не устраивает потому что у меня отчет выводиться по принципу Вывести(), вывожу колонку с наименованиями всех значений сразу, а потом к ним присоединяю колонку функцией Присоединить().
По этой схеме будет выводиться колонка с наименованиями а суммы будут пустыми
---
Либо в условии проверять только равенство на ноль "ВыручкаВсего"
---
Jannin,
Видимо не до конца донес информацию
Отчет формирует записи по месяцам, каждая колонка это один месяц
Можно конечно динамически создавать строки, а не как сейчас по строго заданному макету(смотреть пример) и отсекать все нули.
Но в этом случаи, если в первом месяце сумма 0 то следующие месяцы не будут выводиться ((((
---
Может у кого есть механизм где можно все данные предварительно забить в Таблицу, отфильтровать, а потом выводить в Табличный документ?
В этом варианте было бы на много проще.
---
подобные отчеты всегда делаю сначала выводом в таблицу значений или дерево значений, а потом в печатную форму. Если сразу выводить печатную форму, любая обработка результатов превращается в большую проблему. И изменения в отчете делать намного проще, когда все сначала аккуратно сложено в табличку. Чем больше в отчете всяких расчетов, тем это актуальнее.
---
starjevschik, Напиши по подробнее пжл. как в промежутке использовать Таблицы?
---
ну как. Рисуешь, какой должен быть отчет. Что в колонках. Делаешь такую же таблицу значений. Если отчет многоуровневый, то - дерево значений. Заполняешь его всеми данными. Потом выводишь таблицу значений в табличный документ.
Такая технология не будет работать, если отчет очень большой. Если в нем тысяча колонок и миллионы строк. Но кмк если так, то это говорит о неправильной концепции отчета.
Ну вот например у тебя будут колонки
ВыручкаЗапчасти
ВыручкаАвтошины
ВыручкаНедвижимость
ВыручкаИмущество
ВыручкаПрочие
если надо по месяцам, то можно по-разному, я делаю обычно вложенные таблицы. Ну примерно так:
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.добавить("ВыручкаЗапчасти");

блабла
НоваяСтрока = ТаблицаДанных.Добавить();
НоваяСтрока.ВыручкаЗапчасти = Новый ТаблицаЗначений();
Для н = 1 По 12 Цикл
НоваяСтрока.ВыручкаЗапчасти.Колонки.Добавить("Месяц" + н);
КонецЦикла;

ну и так далее.
В итоге у тебя есть полная структура выводимых в отчет данных, с которыми можно делать все что угодно, и потом вывести то, что нужно.
---
Туплю уже пол дня, подскажите как просуммировать колонку Таблицы значения и записать новой строкой
Пример

```1c
    Проект Март Апрель
    Недвижимоть 5000 5600
    Автошины 7000 6700

    Чтоб была еще одна строка типа

    ВСЕГО 12000 12300
```
---
см. в синтакс-помощнике процедуры/функции таблицы значений Итог() и Свернуть()
---
Спасибо всем кто помог:
Если коме надо будет вот то получилось

```1c
    Процедура СформироватьОтчет()
    ВыборкаПроекты = ВыборкаПроекты();
    ТаблицаРезультат = Новый ТаблицаЗначений;

    ТаблицаРезультат.Колонки.Добавить("Проект");
    Для н=0 по Месяцев Цикл
    ТаблицаРезультат.Колонки.Добавить("Месяц" + Строка(Н+1));
    КонецЦикла;

    Пока ВыборкаПроекты.Следующий() Цикл
    НоваяСтрока = ТаблицаРезультат.Добавить();
    НоваяСтрока.Проект = ВыборкаПроекты.Ссылка;
    Для Н=0 По Месяцев Цикл
    Сумма = 0;
    ТекМесяц = КонецМесяца(ДобавитьМесяц(ЭлементыФормы.ДатаНачало.Значение, Н));
    ВыборкаВыручка = ВыборкаВыручка(ТекМесяц, ВыборкаПроекты.Ссылка);
    Пока ВыборкаВыручка.Следующий() Цикл
    Месяц = "Месяц" + Строка(Н+1);
    НоваяСтрока[Месяц] = ВыборкаВыручка.Сумма;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;
    ТаблицаРезультат = УрезаниеТаблицаРезультат(ТаблицаРезультат, Месяцев);

    ОбластьВыручкаШапка = Макет.ПолучитьОбласть("ВыручкаШапка|Наименование");
    ТабДок.Вывести(ОбластьВыручкаШапка);
    Для Н=0 по Месяцев цикл
    ОбластьВыручкаШапкаРезультат = Макет.ПолучитьОбласть("ВыручкаШапка|Результат");
    ТабДок.Присоединить(ОбластьВыручкаШапкаРезультат);
    КонецЦикла;

    ОбластьПроект = Макет.ПолучитьОбласть("Проекты|Наименование");
    Для каждого Стр Из ТаблицаРезультат Цикл
    СуммаПоПроекту = 0;
    ОбластьПроект.Параметры.НаименованиеПроекта = Стр.Проект;
    ТабДок.Вывести(ОбластьПроект);
    ОбластьПроектРезультат = Макет.ПолучитьОбласть("Проекты|Результат");
    Для Н=0 по Месяцев цикл
    Месяц = "Месяц" + Строка(Н+1);
    СуммаПоПроекту = ?(Стр[Месяц]=Неопределено, 0, Стр[Месяц]);
    ОбластьПроектРезультат.Параметры.СуммаПоПроекту = Формат(СуммаПоПроекту, "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ТабДок.Присоединить(ОбластьПроектРезультат);
    КонецЦикла;
    КонецЦикла;

    ОбластьИтого = Макет.ПолучитьОбласть("ПроектыВсего|Наименование");
    ТабДок.Вывести(ОбластьИтого);
    Для Н =0 ПО Месяцев Цикл
    ОбластьИтогоРезультат = Макет.ПолучитьОбласть("ПроектыВсего|Результат");
    Месяц = "Месяц" + Строка(Н+1);
    ОбластьИтогоРезультат.Параметры.СуммаПоПроекту = Формат(ТаблицаРезультат.Итог(Месяц), "ЧЦ=15; ЧДЦ=2; ЧН=0,00");
    ТабДок.Присоединить(ОбластьИтогоРезультат);
    КонецЦикла;
    КонецПроцедуры
    Функция УрезаниеТаблицаРезультат(ТаблицаРезультат, Месяцев)

    СтаршийИндексКолонок = ТаблицаРезультат.Колонки.Количество() - 1;
    Индекс = ТаблицаРезультат.Количество() - 1;
    Пока Индекс >= 0 Цикл
    Сумма = 0;
    Для Сч = 0 По СтаршийИндексКолонок Цикл
    Если ТипЗнч(ТаблицаРезультат[Индекс][Сч]) = Тип("Число") Тогда
    Сумма = Сумма + ТаблицаРезультат[Индекс][Сч];
    КонецЕсли;
    КонецЦикла;
    Если Сумма = 0 Тогда
    ТаблицаРезультат.Удалить(Индекс);
    КонецЕсли;
    Индекс = Индекс - 1;
    КонецЦикла;
    Возврат ТаблицаРезультат;
    КонецФункции

    //Месяцев - количество месяцев между датой НачалоПериода и КонецПериода
```