Печать отчёта

СКД формирует данные такого типа (блок)

Группировка

Детальная запись 1

Детальная запись 2

….

Детальная запись N

Итог

и Далее…

Если просто выводить на печать, то данные могут “разрываться”, а это плохо, нужно чтобы на странице этот один блок не разрывался, хотя таких блоков на странице может быть сколько угодно (1-3), вывожу программно, понимаю, что надо просто выводить гориз. раздел. страниц, но как мне отслеживать данные одного блока и проверять их влазят или нет, есть идеи??

Подписаться
Уведомить о
guest
2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Головаченко Дима
Головаченко Дима
12 лет назад

При реализации данной задачи пользовался следующим способом:
1. При начале работы создал два табличных документа – основной и временный
2. Переменную для фиксирования фактического количества старниц
3. После вывода очередной строки блока проверяю основной табдок функцией КоличествоСтраниц() на то, больше ли она фактического количества страниц.
4. Если больше – тогда Основной приравниваю тестовому, вывожу разрыв страницы и потом вывожу текущую строку, так же в тестовый нужно вывести разрыв страницы.
5. В тестовый табдок текущую строку вывожу только после этой проверки;
На месте я думаю разберетесь как и куда
Если нет – могу привести фрагменты кода

dlis
dlis
12 лет назад

Сделал без скд, конечно работает не совсем уж быстро и способ не из оптимальных, но зато так как надо!
//Код
Пока ВыборкаАвтомобиль.Следующий() Цикл
ОбластьАвтомобиль.Параметры.Заполнить(ВыборкаАвтомобиль);
ОбластьАвтомобиль.Параметры[“ПериодОтчёта”] = ФОРМАТ(Дата,”ДФ=’ММММ гггг’”);
ОбластьПодвалТаблицы.Параметры.Заполнить(ВыборкаАвтомобиль);
// Массив областей карточки, для проверки вывода.
Вывод = Новый Массив();
Вывод.Добавить(ОбластьАвтомобиль);
ВыборкаДетальныеЗаписи = ВыборкаАвтомобиль.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть(“Детали”);
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи);
Вывод.Добавить(ОбластьДетальныхЗаписей);
КонецЦикла;
Вывод.Добавить(ОбластьПодвалТаблицы);
Если Не ТабДок.ПроверитьВывод(Вывод) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецЕсли;
парам = 1;
Для каждого Элемент Из Вывод Цикл
Если парам=1 или парам=Вывод.Количество() Тогда
ТабДок.Вывести(Элемент, ВыборкаАвтомобиль.Уровень());
Иначе
ТабДок.Вывести(Элемент, ВыборкаДетальныеЗаписи.Уровень());
КонецЕсли;
парам=парам+1;
КонецЦикла;
КонецЦикла;
//Код