Количество страниц в табличном документе
По теме из базы знаний
- Настройка вывода на печать табличного документа в «1С:Предприятие 8.2»
- Корректная двусторонняя печать табличных документов + Простой пример создания внешней печатной формы
- Вывод результата отчета СКД в разные табличные документы
- Произвольные колонтитулы и повтор шапки таблицы в табличном документе (функция)
- Произвольные колонтитулы и повтор шапки таблицы в табличном документе (пример в виде внешнего отчета)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Di_Denis, количество страниц штука условная, зависит от настроек принтера и самого принтера.
Поэтому обычно используется свойство табличного документа ПроверитьВывод, которое возвращает истину, если удалось поместить переданные данные на страницу.
Примерно так:
Поэтому обычно используется свойство табличного документа ПроверитьВывод, которое возвращает истину, если удалось поместить переданные данные на страницу.
Примерно так:
Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
НомерСтраницы = НомерСтраницы + 1;
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
ТабДокумент.Вывести(ЗаголовокТаблицы);
КонецЕсли;
Была идея следующая, но дурацкая. Так как отчет формируется быстро, где то за секунду, то думал сделать следующим образом.. Сформировать отчет посчитать сколько страниц всего, но не показывать его. А потом повторно сформировать его и уже вывести количестов страниц, которые были в первый раз.
(6)Почему брендовая идея. Я так делал. Только не дважды формировать, а через промежуточные табличные документы. Вывести же можно не только Область, но и весь Табличный документ
ТабДок = Новый ТабличныйДокумент;
ВремТабДок = ВыестиОтчет(); //типа функция такая , которая возвращает табличный документ отчета
КоличествоСтраниц = ВремТабДок .КоличествоСтраниц();
ТабДок.Вывести(ВремТабДок);
К сожалению, наши бух. бланки пестрят такими текстами "Лист 1 из 8". Их разработчики понятия не имели, что программы печатают от первого листа к последнему и "не любят" возвращаться.
Будьте проще: рассчитайте заранее. Это возможно, если все строки фиксированной высоты.
Пример:
СтрокМакс = 10;
Листов = Цел((ТаблицаТовары.Количество()-1) / СтрокМакс) + 1;
Более тонкий случай, когда на первом листе строк меньше, чем на остальных.
Будьте проще: рассчитайте заранее. Это возможно, если все строки фиксированной высоты.
Пример:
СтрокМакс = 10;
Листов = Цел((ТаблицаТовары.Количество()-1) / СтрокМакс) + 1;
Более тонкий случай, когда на первом листе строк меньше, чем на остальных.
Для вывода в ТабДокументе нумерации страниц типа (Страница N из ВсегоСтраниц) реализация была следующая.
1) Создали область макета "Колонтитул" с шаблоном Страница [Стр] из %КоличествоСтраниц
2) В коде:
1) Создали область макета "Колонтитул" с шаблоном Страница [Стр] из %КоличествоСтраниц
2) В коде:
ОбластьКолонтитулы = Макет.ПолучитьОбласть("Колонтитул");
Стр = 1;
ОбластьКолонтитулы.Параметры.Стр = Стр;
ТабДокумент.Вывести(ОбластьКолонтитулы);
//Заполнение табличного документа каждая область проверяется (или область как например заполнение таб.части от которой зависит кол.во страниц) к примеру "ОбластьСтрока"
Если ТабДокумент.ПроверитьВывод(ОбластьСтрока) Тогда //Проверяем влезет ли область на страницу если да то выводим, если нет то печатаем на новой странице
ТабДокумент.Вывести(ОбластьСтрока);
Иначе
ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
Стр = Стр + 1;
ОбластьКолонтитулы.Параметры.Стр = Стр;
ТабДокумент.Вывести(ОбластьКолонтитулы);
ТабДокумент.Вывести(ОбластьСтрока);
КонецЕсли;
//Далее идет последующее заполнение
//перед выводом на печать когда все области макета выведены узнаем количество страниц
КоличествоСтраниц = ТабДокумент.КоличествоСтраниц(); //Получаем кол-во страниц
Для Счетчик = 1 По КоличествоСтраниц Цикл //Циклом будем переберать все страницы и заменять в них текст
НайденнаяОбласть = ТабДокумент.НайтиТекст("%КоличествоСтраниц"); //В макете мы указали данный текст
Если НайденнаяОбласть <> Неопределено тогда
НайденныйТекст = НайденнаяОбласть .Текст;
Результат = СтрЗаменить(НайденныйТекст ,"%КоличествоСтраниц",КоличествоСтраниц);
НайденнаяОбласть .Текст = Результат;
КонецЕсли;
КонецЦикла;
//Отправляем на печать, в УТ 10,3 Это
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 1, Ложь, "ВашеНазваниеПФ"); // Данная процедура может отличаться.
Показать
Альтернативный очень похожий вариант вывода нижнего колонтитула в виде области при массовой печати документов.
1) Шаблон в области "НижнийКолонтитул": [НомерСтраницыДокумента] / %ВсегоСтраницВДокументе
2) В коде цикла по выводу содержимого каждого документа:
1) Шаблон в области "НижнийКолонтитул": [НомерСтраницыДокумента] / %ВсегоСтраницВДокументе
2) В коде цикла по выводу содержимого каждого документа:
////////// Область Строка //////////
// Инициализация счетчика строк
НомерСтроки = 0;
КоличествоСтрок = ТаблицаДокумента.Количество();
Для Каждого Стр Из ТаблицаДокумента Цикл
НомерСтроки = НомерСтроки + 1;
// Заполнение строки табличной части
// Проверим вывод
СтрокаСПодвалом = Новый Массив;
Если НомерСтроки = 1 Тогда
СтрокаСПодвалом.Добавить(ОбластьМакетаЗаголовокТаблицы); // если первая строка, то должен
КонецЕсли; // помещаться заголовок
СтрокаСПодвалом.Добавить(ОбластьМакетаСтрока);
Если НомерСтроки = КоличествоСтрок Тогда // если последняя строка, должны
СтрокаСПодвалом.Добавить(ОбластьМакетаИтоги); // помещаться подвал документа и нижний колонтитул
СтрокаСПодвалом.Добавить(ОбластьМакетаПодвал);
СтрокаСПодвалом.Добавить(ОбластьМакетаНижнийКолонтитул);
КонецЕсли;
Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
Если КоличествоСтрок > 1 Тогда
////////// Область НижнийКолонтитул //////////
// Добавляем пустые строки пока ОбластьМакетаНижнийКолонтитул не станет последней строкой на странице
ПустаяСтрокаСКолонтитулом = Новый Массив;
ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаПустаяСтрока);
ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаНижнийКолонтитул);
ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
Пока ПомещаетсяПустаяСтрока Цикл
ТабличныйДокумент.Вывести(ОбластьМакетаПустаяСтрока);
ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
КонецЦикла;
ОбластьМакетаНижнийКолонтитул.Параметры.НомерСтраницыДокумента = НомерСтраницыДокумента;
ТабличныйДокумент.Вывести(ОбластьМакетаНижнийКолонтитул);
ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
НомерСтраницыДокумента = НомерСтраницыДокумента + 1;
////////// Область ЗаголовокТаблицы //////////
ТабличныйДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
КонецЕсли;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);
КонецЦикла;
// Последующее заполнение документа: итогов, подвала и т.п.
////////// Область НижнийКолонтитул //////////
// Добавляем пустые строки пока ОбластьМакетаНижнийКолонтитул не станет последней строкой на странице
ПустаяСтрокаСКолонтитулом = Новый Массив;
ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаПустаяСтрока);
ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаНижнийКолонтитул);
ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
Пока ПомещаетсяПустаяСтрока Цикл
ТабличныйДокумент.Вывести(ОбластьМакетаПустаяСтрока);
ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
КонецЦикла;
ОбластьМакетаНижнийКолонтитул.Параметры.НомерСтраницыДокумента = НомерСтраницыДокумента;
ТабличныйДокумент.Вывести(ОбластьМакетаНижнийКолонтитул);
// Подставим общее количество страниц в документе в колонтитулы
ОбластьВсегоСтраницВДокументе = ТабличныйДокумент.НайтиТекст("%ВсегоСтраницВДокументе");
Пока ОбластьВсегоСтраницВДокументе <> Неопределено Цикл
ОбластьВсегоСтраницВДокументе.Текст = СтрЗаменить(ОбластьВсегоСтраницВДокументе.Текст, "%ВсегоСтраницВДокументе", НомерСтраницыДокумента);
ОбластьВсегоСтраницВДокументе = ТабличныйДокумент.НайтиТекст("%ВсегоСтраницВДокументе");
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот