Заполнение Табличного документа областями
Доброго времени суток. Макет с множеством областей, при печати если область не вмещается переносим ее на следующую страницу тем самым снизу остается пустое место, возможно ли сделать так чтобы страница областями заполнялась до конца и не оставалось пустого места снизу?
Процедура ПроверкаВыводаОбластей(ТабДок,Область,ОбластьНомер = Неопределено,ОбластьПустая = Неопределено, НомерСтраницы = Неопределено,ПоследняяСтраница = Ложь)
МассивОбластей = Новый Массив;
МассивОбластей.Очистить();
МассивОбластей.Добавить(Область);
Если ОбластьНомер = Неопределено Тогда
Иначе
МассивОбластей.Добавить(ОбластьНомер);
КонецЕсли;
//Не пометилось на страницу переносим на следующую
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
Если ОбластьНомер = Неопределено Тогда
Иначе
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
КонецЕсли;
//Разрыв страницы
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(Область);
Если ПоследняяСтраница = Истина Тогда
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
КонецЕсли;
Иначе
Если ПоследняяСтраница = Истина Тогда
ТабДок.Вывести(Область);
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
Иначе
ТабДок.Вывести(Область);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Показать
Процедура ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы)
МассивОбластей = Новый Массив;
МассивОбластей.Очистить();
МассивОбластей.Добавить(ОбластьПустая);
МассивОбластей.Добавить(ОбластьНомер);
Для Сч = 1 По 1000 Цикл
//Непометилось на страницу переносим на следующию
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда
ОбластьНомер.Параметры.НомерСтраницы = НомерСтраницы;
ТабДок.Вывести(ОбластьНомер);
НомерСтраницы = НомерСтраницы + 1;
Прервать;
Иначе
ТабДок.Вывести(ОбластьПустая);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- Динамическое изменение функции формирования табличного документа внешней обработки без конфигуратора.
- Обработка чтения табличного документа (УФ)
- Доработка универсальной обработки загрузки данных из табличного документа (для возможности загрузки в документ "Перенос данных" (ЗУП 3.1))
- Вывод факсимиле в табличные документы (УПД, УКД, счет-фактура и др.) для УТ 11.5, КА 2.5, ERP 2.5, УНФ 3, Розница 3
- Заполнение табличной части документа из EXCEL универсальная (толстый клиент)
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Имеете ввиду не переносить область, а пусть принтер сам определит как разделить?
Зависит от того какой результат нужен.
Если Не ТабДок.ПроверитьВывод(МассивОбластей) Тогда // либо здесь поставить просто ложь
Если ОбластьНомер = Неопределено Тогда
Иначе
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
КонецЕсли;
//Разрыв страницы
ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); //либо законектить эту строку.
ТабДок.Вывести(Область);
Если ПоследняяСтраница = Истина Тогда
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
КонецЕсли;
Иначе
Если ПоследняяСтраница = Истина Тогда
ТабДок.Вывести(Область);
ВывестиНомер(ТабДок,ОбластьНомер,ОбластьПустая,НомерСтраницы);
Иначе
ТабДок.Вывести(Область);
КонецЕсли;
КонецЕсли;
ПоказатьЗависит от того какой результат нужен.
Область одна строка и соответственно, если она не помещается целиком на странице, то переносится целиком область.
Что бы это исправить, область надо разбить на несколько строк. Достаточно пограничные области разбить на строки.
Что бы это исправить, область надо разбить на несколько строк. Достаточно пограничные области разбить на строки.
Необходимые области разбивать на отдельные строки. Но не в самом макете, а прямо программно.
Можно даже отдельную процедуру нарисовать - ВывестиОбластьПострочно(ТабДок, ОбластьВывода)...
&НаКлиенте
Процедура Сформировать(Команда)
ТабДок = ПолучитьТабДокНаСервере();
ТабДок.Показать();
КонецПроцедуры
&НаСервере
Функция ПолучитьТабДокНаСервере()
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
БольшаяОбласть = Макет.ПолучитьОбласть("БольшаяОбласть");
Для СчСтрок = 1 По БольшаяОбласть.ВысотаТаблицы Цикл
МаленькаяОбласть = БольшаяОбласть.ПолучитьОбласть(СчСтрок, 1, СчСтрок, БольшаяОбласть.ШиринаТаблицы);
ТабДок.Вывести(МаленькаяОбласть);
КонецЦикла;
Возврат ТабДок;
КонецФункции
ПоказатьМожно даже отдельную процедуру нарисовать - ВывестиОбластьПострочно(ТабДок, ОбластьВывода)...
(8) И это работает если большая область всего одна строка, просто с переносом текста?
Так как у автора именно такая ситуация, а вы предлагаете способ, где многострочная область разбивается на несколько областей.
Но перевод на другую страницу (когда отдается на откуп принтеру) идет не по областям, а по строкам.
Так как у автора именно такая ситуация, а вы предлагаете способ, где многострочная область разбивается на несколько областей.
Но перевод на другую страницу (когда отдается на откуп принтеру) идет не по областям, а по строкам.
(9) Конечно нет. То, что я написал - это разбиение многострочных областей на однострочные. Под строкой мы понимаем строку табличного документа, а не строку текста.
Если у вас огромный текст внутри одной ячейки области - вас ничем не спасти. Кроме использования в качестве макетов файлы Word. Но и там есть свои ограничения, которые не всегда вписываются в логику прикладной задачи.
Если у вас огромный текст внутри одной ячейки области - вас ничем не спасти. Кроме использования в качестве макетов файлы Word. Но и там есть свои ограничения, которые не всегда вписываются в логику прикладной задачи.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот