Проверка полей табличного документа на НОЛЬ и отказ от вывода в конечный результат(в табличный документ)

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

кусок кода
///////////////////////////ВЫРУЧКА/////////////////////////////
	////////////////////////////////////////////////////////////­///
		
	ОбластьВыручка																	= Макет.ПолучитьОбласть("Выручка|Наименование");
	ТабДок.Вывести(ОбластьВыручка);
	
	Для Н=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");
		ТабДок.Присоединить(ОбластьВыручкаРезультат);		
	КонецЦикла;
Показать
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
11. starjevschik 06.04.12 10:09 Сейчас в теме
(9) ну как. Рисуешь, какой должен быть отчет. Что в колонках. Делаешь такую же таблицу значений. Если отчет многоуровневый, то - дерево значений. Заполняешь его всеми данными. Потом выводишь таблицу значений в табличный документ.
Такая технология не будет работать, если отчет очень большой. Если в нем тысяча колонок и миллионы строк. Но кмк если так, то это говорит о неправильной концепции отчета.
Ну вот например у тебя будут колонки
ВыручкаЗапчасти
ВыручкаАвтошины
ВыручкаНедвижимость
ВыручкаИмущество
ВыручкаПрочие
если надо по месяцам, то можно по-разному, я делаю обычно вложенные таблицы. Ну примерно так:
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.добавить("ВыручкаЗапчасти");

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

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

Если ВыручкаЗапчасти = 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");
ТабДок.Присоединить(ОбластьВыручкаРезультат);

КонецЕсли;


В этом случае если у вас вся выручка нулевая то строка не выведется.
7. Sergius79 06.04.12 09:22 Сейчас в теме
Что-то я не вкурю, а чем вариант (2) Вас не устраивает? Если итог 0 то столбец не выводится.
8. Farkhod82 06.04.12 09:42 Сейчас в теме
(7) Sergius79,

вариант 2 не устраивает потому что у меня отчет выводиться по принципу Вывести(), вывожу колонку с наименованиями всех значений сразу, а потом к ним присоединяю колонку функцией Присоединить().
По этой схеме будет выводиться колонка с наименованиями а суммы будут пустыми
3. Jannin 06.04.12 08:22 Сейчас в теме
Либо в условии проверять только равенство на ноль "ВыручкаВсего"
4. Farkhod82 06.04.12 08:36 Сейчас в теме
(3) Jannin,
Видимо не до конца донес информацию
Отчет формирует записи по месяцам, каждая колонка это один месяц
Можно конечно динамически создавать строки, а не как сейчас по строго заданному макету(смотреть пример) и отсекать все нули.
Но в этом случаи, если в первом месяце сумма 0 то следующие месяцы не будут выводиться ((((
Прикрепленные файлы:
5. Farkhod82 06.04.12 08:39 Сейчас в теме
Может у кого есть механизм где можно все данные предварительно забить в Таблицу, отфильтровать, а потом выводить в Табличный документ?
В этом варианте было бы на много проще.
6. starjevschik 06.04.12 09:15 Сейчас в теме
(5) подобные отчеты всегда делаю сначала выводом в таблицу значений или дерево значений, а потом в печатную форму. Если сразу выводить печатную форму, любая обработка результатов превращается в большую проблему. И изменения в отчете делать намного проще, когда все сначала аккуратно сложено в табличку. Чем больше в отчете всяких расчетов, тем это актуальнее.
9. Farkhod82 06.04.12 09:43 Сейчас в теме
(6) starjevschik, Напиши по подробнее пжл. как в промежутке использовать Таблицы?
11. starjevschik 06.04.12 10:09 Сейчас в теме
(9) ну как. Рисуешь, какой должен быть отчет. Что в колонках. Делаешь такую же таблицу значений. Если отчет многоуровневый, то - дерево значений. Заполняешь его всеми данными. Потом выводишь таблицу значений в табличный документ.
Такая технология не будет работать, если отчет очень большой. Если в нем тысяча колонок и миллионы строк. Но кмк если так, то это говорит о неправильной концепции отчета.
Ну вот например у тебя будут колонки
ВыручкаЗапчасти
ВыручкаАвтошины
ВыручкаНедвижимость
ВыручкаИмущество
ВыручкаПрочие
если надо по месяцам, то можно по-разному, я делаю обычно вложенные таблицы. Ну примерно так:
ТаблицаДанных = Новый ТаблицаЗначений;
ТаблицаДанных.Колонки.добавить("ВыручкаЗапчасти");

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

ну и так далее.
В итоге у тебя есть полная структура выводимых в отчет данных, с которыми можно делать все что угодно, и потом вывести то, что нужно.
13. Farkhod82 07.04.12 16:57 Сейчас в теме
Туплю уже пол дня, подскажите как просуммировать колонку Таблицы значения и записать новой строкой
Пример
Проект         Март     Апрель
Недвижимоть    5000     5600
Автошины       7000     6700

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

ВСЕГО          12000    12300
14. starjevschik 07.04.12 17:43 Сейчас в теме
(13) см. в синтакс-помощнике процедуры/функции таблицы значений Итог() и Свернуть()
15. Farkhod82 09.04.12 06:15 Сейчас в теме
Спасибо всем кто помог:
Если коме надо будет вот то получилось
Процедура СформироватьОтчет()
ВыборкаПроекты = ВыборкаПроекты();
	ТаблицаРезультат = Новый ТаблицаЗначений;
	
	ТаблицаРезультат.Колонки.Добавить("Проект");
	Для н=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; 
	КонецЦикла;
	Возврат ТаблицаРезультат;
КонецФункции

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

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот