Табличная часть, убрать не нужные строки.

1. keybode 15.01.19 09:17 Сейчас в теме
Доброго времени суток, есть отчет, который формируется в виде макета(извините если не правильно сформулировал).
Нужно сделать что бы при выставление галочки на панели, формировался отчет, но без пустых строк.

Например на изображение выше, нужно что бы формировался без 3 строки "М.3", но при этом не трогал остальные столбцы(Например М.2, Месяц 2,месяц 4).
+
По теме из базы знаний
Найденные решения
6. kumi2012 103 15.01.19 10:30 Сейчас в теме
Пока Аптека.Следующий() Цикл
Если Аптека.Остаток=0 И Аптека.Оборот=0 Тогда
Продолжить;
КонецЕсли;
keybode; +1
8. login1020 133 15.01.19 13:28 Сейчас в теме
(7) После строки
Пока Аптека.Следующий() Цикл 


вставить код из 6

(6)
Если Аптека.Остаток=0 И Аптека.Оборот=0 Тогда
Продолжить;
КонецЕсли;
keybode; +1
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 15.01.19 09:28 Сейчас в теме
(1) без программирования чтоли ? Тогда никак.

Нужно менять код заполнения отчета, таким образом чтобы пустые строки в принципе и не выводились.
+
3. keybode 15.01.19 09:44 Сейчас в теме
Часть кода, где происходит формирование, если не ошибаюсь, то нужно копать тут, я прав?
 Процедура КнопкаСформироватьНажатие(Кнопка)
	тзПериод = Новый ТаблицаЗначений;
	тзПериод = СформироватьПериоды();
				 
	Массив = Новый Массив;
	Массив.Добавить(Тип("СправочникСсылка.Магазины"));
	ОписаниеТиповМагазин = Новый ОписаниеТипов(Массив);

	
	КД = Новый КвалификаторыДаты();
	Массив = Новый Массив;
	Массив.Добавить(Тип("Дата"));
	ОписаниеТиповПериод = Новый ОписаниеТипов(Массив, , КД);
	
	Массив.Очистить();
	КЧ = Новый КвалификаторыЧисла(12,2);
	Массив.Добавить(Тип("Число"));
	ОписаниеТиповЧисло = Новый ОписаниеТипов(Массив, , КЧ);
	
	Массив.Очистить();
	КС = Новый КвалификаторыСтроки(50);
	Массив.Добавить(Тип("Строка"));
	ОписаниеТиповСтрока = Новый ОписаниеТипов(Массив, , КС);
	
	тзРез = Новый ТаблицаЗначений;
	тзРез.Колонки.Добавить("Магазин",ОписаниеТиповСтрока);
	тзРез.Колонки.Добавить("Период",ОписаниеТиповПериод);
	тзРез.Колонки.Добавить("Оборот",ОписаниеТиповЧисло);
	тзРез.Колонки.Добавить("Остаток",ОписаниеТиповЧисло);
	
	Для каждого стр Из тзПериод Цикл
		т = ОборотыОстаткиЗаПериод(стр.НачДата,стр.КонДата,?(Магазин = Справочники.Магазины.ПустаяСсылка(),"",Магазин.Ссылка));	
		Для каждого тт Из т Цикл
			НовСтр = тзРез.Добавить();
			ЗаполнитьЗначенияСвойств(НовСтр,тт);
		КонецЦикла;
		т = "";
	КонецЦикла; 
	
	
	ЭлементыФормы.Табл.Очистить();
	Таб = ЭлементыФормы.Табл;
	Таб.ИмяПараметровПечати	= "ПАРАМЕТРЫ_ПЕЧАТИ_ДинамикаАптек";
	
	Макет = ПолучитьМакет("Макет");
	облЗаголовокАптека = Макет.ПолучитьОбласть("Заголовок|Аптеки");
	облЗаголовокДанные0 = Макет.ПолучитьОбласть("Заголовок|Данные0");
	облЗаголовокДанные1 = Макет.ПолучитьОбласть("Заголовок|Данные1");
	
	облСтрокаАптека0	 = Макет.ПолучитьОбласть("Строка0|Аптеки");
	облСтрокаАптека1	 = Макет.ПолучитьОбласть("Строка1|Аптеки");
	
	облСтрокаДанные00	 = Макет.ПолучитьОбласть("Строка0|Данные0");
	облСтрокаДанные01	 = Макет.ПолучитьОбласть("Строка0|Данные1");
	облСтрокаДанные10	 = Макет.ПолучитьОбласть("Строка1|Данные0");
	облСтрокаДанные11	 = Макет.ПолучитьОбласть("Строка1|Данные1");
	
	облПодвалАптека	 = Макет.ПолучитьОбласть("Итоги|Аптеки");
	облПодвалДанные0	 = Макет.ПолучитьОбласть("Итоги|Данные0");
	облПодвалДанные1	 = Макет.ПолучитьОбласть("Итоги|Данные1");
	
	Таб.Вывести(облЗаголовокАптека);
	фл1 = ЛОЖЬ;
	Для каждого стр Из тзПериод Цикл
		фл1 = НЕ фл1;
		Если фл1 Тогда
			Обл = облЗаголовокДанные0;
		Иначе
			Обл = облЗаголовокДанные1;
		КонецЕсли;
		
		обл.Параметры.Период = стр.НачДата;
		Таб.Присоединить(обл);
	КонецЦикла; 
	Таб.ФиксацияСверху = Таб.ВысотаТаблицы;

	Запрос = Новый Запрос;
	Запрос.Текст="ВЫБРАТЬ
	             |	ТЗн.Магазин,
	             |	ТЗн.Период,
	             |	ТЗн.Оборот,
	             |	ТЗн.Остаток
	             |ПОМЕСТИТЬ Таб
	             |ИЗ
	             |	&ТЗ КАК ТЗн
	             |;
	             |
	             |////////////////////////////////////////////////////////////­////////////////////
	             |ВЫБРАТЬ
	             |	рТаб.Магазин КАК Магазин,
	             |	рТаб.Период КАК Период,
	             |	рТаб.Оборот КАК Оборот,
	             |	рТаб.Остаток КАК Остаток
	             |ИЗ
	             |	Таб КАК рТаб
	             |
	             |СГРУППИРОВАТЬ ПО
	             |	рТаб.Магазин,
	             |	рТаб.Период,
	             |	рТаб.Оборот,
	             |	рТаб.Остаток
	             |
	             |УПОРЯДОЧИТЬ ПО
	             |	Магазин,
	             |	Период
	             |ИТОГИ
	             |	СУММА(Оборот),
	             |	СУММА(Остаток)
	             |ПО
	             |	Магазин,
	             |	Период";
	
	Запрос.УстановитьПараметр("ТЗ",тзРез);

	// Побежали по содержимому отчета
	Аптека = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		
	НачОстОбщий	= 0;
	ОборотОбщий	= 0;
	КоэфОбщий 	= 0;
	
	
	фл = ЛОЖЬ;
	пп = 0;
	Пока Аптека.Следующий() Цикл
		фл = НЕ фл;
		Если фл Тогда
			ОблСтрока = ОблСтрокаАптека0;
		Иначе
			ОблСтрока = ОблСтрокаАптека1;
		КонецЕсли;
		пп = пп + 1;
		облСтрока.Параметры.пп = пп;
		облСтрока.Параметры.Аптека = Аптека.Магазин;
		Таб.Вывести(облСтрока);
		
		Период = Аптека.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
		
		фл1 = Ложь;
		Пока Период.Следующий() Цикл
			фл1 = НЕ фл1;
			Если фл Тогда
				Если фл1 Тогда
					ОблКолонка = ОблСтрокаДанные00;
				Иначе
					ОблКолонка = ОблСтрокаДанные01;
				КонецЕсли;
			Иначе
				Если фл1 Тогда
					ОблКолонка = ОблСтрокаДанные10;
				Иначе
					ОблКолонка = ОблСтрокаДанные11;
				КонецЕсли;
			КонецЕсли; 
			
			ОблКолонка.Параметры.НачОст = Период.Остаток;
			ОблКолонка.Параметры.Оборот = Период.Оборот;
			ОблКолонка.Параметры.Коэф = ?(Период.Оборот=0,"",Период.Остаток / Период.Оборот);
			Таб.Присоединить(ОблКолонка);
			
            стрПериод = тзПериод.Найти(Период.Период,"НачДата");
			Если НЕ(стрПериод = Неопределено) Тогда
				стрПериод.НачОст = стрПериод.НачОст + Период.Остаток;
				стрПериод.Оборот = стрПериод.Оборот + Период.Оборот;
				стрПериод.Коэффициент = ?(стрПериод.Оборот <> 0, стрПериод.НачОст / стрПериод.Оборот,0);
			КонецЕсли; 
		КонецЦикла;
	КонецЦикла;
	
	// Выводим данные подвала
	облПодвалАптека	 = Макет.ПолучитьОбласть("Итоги|Аптеки");
	облПодвалДанные0	 = Макет.ПолучитьОбласть("Итоги|Данные0");
	облПодвалДанные1	 = Макет.ПолучитьОбласть("Итоги|Данные1");

	Таб.Вывести(облПодвалАптека);
	фл1 = ЛОЖЬ;
	Для каждого стр Из тзПериод Цикл
		фл1 = НЕ фл1;
		Если фл1 Тогда
			Обл = облПодвалДанные0;
		Иначе
			Обл = облПодвалДанные1;
		КонецЕсли;
		
		обл.Параметры.НачОстОбщий = стр.НачОст;
		обл.Параметры.ОборотОбщий = стр.Оборот;
		обл.Параметры.КоэфОбщий	  = стр.Коэффициент;
		Таб.Присоединить(обл);
	КонецЦикла; 
	
	
	тзКоэффициент = Новый ТаблицаЗначений;
	тзКоэффициент.Колонки.Добавить("Период");
	тзКоэффициент.Колонки.Добавить("Коэффициент");
	//стр = тзКоэффициент.Добавить();
	//стр.Период = "Период";
	//стр.Коэффициент = "Коэффициент";
	
	тзПоказатели = Новый ТаблицаЗначений;
	тзПоказатели.Колонки.Добавить("Период");
	тзПоказатели.Колонки.Добавить("НачальныйОстаток");
	тзПоказатели.Колонки.Добавить("Оборот");
	//стр = тзПоказатели.Добавить();
	//стр.Период = "Период";
	//стр.НачальныйОстаток = "НачальныйОстаток";
	//стр.Оборот = "Оборот";
	
	
	Для каждого стрПериод Из тзПериод Цикл
		стр = тзКоэффициент.Добавить();
		стр.Период = Формат(стрПериод.НачДата,"ДФ=MMMMYYYY");
		стр.Коэффициент = стрПериод.Коэффициент;
		
		стр = тзПоказатели.Добавить();
		стр.Период = Формат(стрПериод.НачДата,"ДФ=MMMMYYYY");
		стр.НачальныйОстаток = стрПериод.НачОст;
		стр.Оборот = стрПериод.Оборот;
	КонецЦикла; 
Показать
+
4. Boneman 298 15.01.19 09:58 Сейчас в теме
(3)
Таб.Вывести(облСтрока);

вот эта строка и выводит в макет строки
keybode; +1
5. killitch 30 15.01.19 10:17 Сейчас в теме
Пока Период.Следующий() Цикл
            фл1 = НЕ фл1;

Вот в этом цикле считайте сумму реквизитов, если она равна нулю, тогда не выводите ни аптеку ни присоединение колонок не делаете. Тогда пустых строк не будет. Соот-но при условии, что галка нажата.
keybode; +1
6. kumi2012 103 15.01.19 10:30 Сейчас в теме
Пока Аптека.Следующий() Цикл
Если Аптека.Остаток=0 И Аптека.Оборот=0 Тогда
Продолжить;
КонецЕсли;
keybode; +1
7. keybode 15.01.19 12:57 Сейчас в теме
(6) Ошибка "Не найден конец цикла", если же исправляю её, тогда выдаёт ошибку связанную с "Аптека.Остаток=0 И Аптека.Оборот=0"
+
8. login1020 133 15.01.19 13:28 Сейчас в теме
(7) После строки
Пока Аптека.Следующий() Цикл 


вставить код из 6

(6)
Если Аптека.Остаток=0 И Аптека.Оборот=0 Тогда
Продолжить;
КонецЕсли;
keybode; +1
9. kumi2012 103 15.01.19 13:28 Сейчас в теме
(7) Я Вам показал куда надо вставить условие Если ....
В вашем коде
Пока Аптека.Следующий() Цикл
keybode; +1
10. keybode 15.01.19 13:57 Сейчас в теме
Спасибо больше, работает, только работает всегда, а не когда стоит галка.
+
Внимание! Тема сдана в архив

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