Заполнение Табличного документа областями

1. criptid 09.09.20 16:55 Сейчас в теме
Доброго времени суток. Макет с множеством областей, при печати если область не вмещается переносим ее на следующую страницу тем самым снизу остается пустое место, возможно ли сделать так чтобы страница областями заполнялась до конца и не оставалось пустого места снизу?

Процедура ПроверкаВыводаОбластей(ТабДок,Область,ОбластьНомер = Неопределено,ОбластьПустая = Неопределено, НомерСтраницы = Неопределено,ПоследняяСтраница = Ложь)
	
    МассивОбластей = Новый Массив;
	МассивОбластей.Очистить();
	МассивОбластей.Добавить(Область);
	
	Если ОбластьНомер = Неопределено Тогда
	Иначе	
	МассивОбластей.Добавить(ОбластьНомер);	
	КонецЕсли;	
		
	//Не пометилось на страницу переносим на следующую
	Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
		
		Если ОбластьНомер = Неопределено Тогда
		Иначе	
			ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
		КонецЕсли;
		
		//Разрыв страницы
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		
		ТабДок.Вывести(Область);
		
		Если ПоследняяСтраница = Истина Тогда
			 ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
		КонецЕсли;	
		
	Иначе
		
		Если ПоследняяСтраница = Истина Тогда
			 ТабДок.Вывести(Область);
			 ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
		Иначе	
			 ТабДок.Вывести(Область);
		КонецЕсли;
		
	КонецЕсли;	
		
	
КонецПроцедуры
Показать


Процедура ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы) 
	
	МассивОбластей = Новый Массив;
	МассивОбластей.Очистить();
	МассивОбластей.Добавить(ОбластьПустая);
	МассивОбластей.Добавить(ОбластьНомер);
	
	Для Сч = 1 По 1000 Цикл
		
	   //Непометилось на страницу переносим на следующию
	   Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
					
		   ОбластьНомер.Параметры.НомерСтраницы = НомерСтраницы;
		   ТабДок.Вывести(ОбластьНомер);
		   НомерСтраницы = НомерСтраницы + 1;

		   Прервать;
		   
		Иначе
			ТабДок.Вывести(ОбластьПустая);
		КонецЕсли;	
	
	КонецЦикла;
	
КонецПроцедуры	

Показать
По теме из базы знаний
Найденные решения
6. oleg-x 27 09.09.20 17:58 Сейчас в теме
Область одна строка и соответственно, если она не помещается целиком на странице, то переносится целиком область.
Что бы это исправить, область надо разбить на несколько строк. Достаточно пограничные области разбить на строки.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. oleg-x 27 09.09.20 17:07 Сейчас в теме
Имеете ввиду не переносить область, а пусть принтер сам определит как разделить?
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда // либо здесь поставить просто ложь
        
        Если ОбластьНомер = Неопределено Тогда
        Иначе    
            ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
        КонецЕсли;
        
        //Разрыв страницы
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();  //либо законектить эту строку.
        
        ТабДок.Вывести(Область);
        
        Если ПоследняяСтраница = Истина Тогда
             ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
        КонецЕсли;    
        
    Иначе
        
        Если ПоследняяСтраница = Истина Тогда
             ТабДок.Вывести(Область);
             ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
        Иначе    
             ТабДок.Вывести(Область);
        КонецЕсли;
        
    КонецЕсли;    
Показать

Зависит от того какой результат нужен.
3. criptid 09.09.20 17:18 Сейчас в теме
(2)Делал так, все равно пустое место на страницах остается. А нужно чтобы построчно все заполнялось до конца листа
Прикрепленные файлы:
4. oleg-x 27 09.09.20 17:29 Сейчас в теме
(3) Вы полный скрин покажите как получается. А то по белому пространству не понятно что происходит. И покажите сам макет.
Может там область одна строка
5. criptid 09.09.20 17:55 Сейчас в теме
(4)
Прикрепленные файлы:
6. oleg-x 27 09.09.20 17:58 Сейчас в теме
Область одна строка и соответственно, если она не помещается целиком на странице, то переносится целиком область.
Что бы это исправить, область надо разбить на несколько строк. Достаточно пограничные области разбить на строки.
7. criptid 09.09.20 18:15 Сейчас в теме
(6)думал что все таки как то по-другому можно сделать, спасибо
8. FatPanzer 09.09.20 22:05 Сейчас в теме
Необходимые области разбивать на отдельные строки. Но не в самом макете, а прямо программно.
&НаКлиенте
Процедура Сформировать(Команда)
	
	ТабДок = ПолучитьТабДокНаСервере();
	ТабДок.Показать();
	
КонецПроцедуры

&НаСервере
Функция ПолучитьТабДокНаСервере()
	
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	
	ТабДок = Новый ТабличныйДокумент;
	Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
	
	БольшаяОбласть = Макет.ПолучитьОбласть("БольшаяОбласть");
	Для СчСтрок = 1 По БольшаяОбласть.ВысотаТаблицы Цикл
		МаленькаяОбласть = БольшаяОбласть.ПолучитьОбласть(СчСтрок, 1, СчСтрок, БольшаяОбласть.ШиринаТаблицы);
		ТабДок.Вывести(МаленькаяОбласть);
	КонецЦикла;
	
	Возврат ТабДок;
	
КонецФункции
Показать


Можно даже отдельную процедуру нарисовать - ВывестиОбластьПострочно(ТабДок, ОбластьВывода)...
9. oleg-x 27 10.09.20 12:20 Сейчас в теме
(8) И это работает если большая область всего одна строка, просто с переносом текста?
Так как у автора именно такая ситуация, а вы предлагаете способ, где многострочная область разбивается на несколько областей.
Но перевод на другую страницу (когда отдается на откуп принтеру) идет не по областям, а по строкам.
10. FatPanzer 10.09.20 12:27 Сейчас в теме
(9) Конечно нет. То, что я написал - это разбиение многострочных областей на однострочные. Под строкой мы понимаем строку табличного документа, а не строку текста.
Если у вас огромный текст внутри одной ячейки области - вас ничем не спасти. Кроме использования в качестве макетов файлы Word. Но и там есть свои ограничения, которые не всегда вписываются в логику прикладной задачи.
Оставьте свое сообщение

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