gifts2017

Ликбез 7.7: нумерация страниц отчета

Опубликовал Александр Рытов (Арчибальд) в раздел Программирование - Практика программирования

"Колонтитулы" без колонтитулов.

Предположим, нам требуется распечатать ОЧЕНЬ длинную таблицу значений.  На каждой странице сверху нужны заголовки колонок, а снизу - некие колонтитулы, содержащие, например, номера страниц. Задача распространенная, но где взять эти номера?

Можно, конечно, применить Формекс и считать высоту строк. А можно и штатными средствами. Примерно, так:

 

Процедура Напечатать()
       Таб1 = СоздатьОбъект("Таблица");
       Таб1.ИсходнаяТаблица("Таблица");
       Таб1.ПовторятьПриПечатиСтроки(14,15);   //Это заголовки колонок
       Таб1.ВывестиСекцию("Шапка");
       Таб = СоздатьОбъект("Таблица");
       Таб.ИсходнаяТаблица("Таблица");
       Таб.ПовторятьПриПечатиСтроки(14,15);
       Таб.ВывестиСекцию("Шапка");
       КолСтрПред = 1;
       ТЗ.ВыбратьСтроки();
       Таб1.ВывестиСекцию("Колонтитул");           //Таб1 на 1 строку длинней
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл
            Таб1.ВывестиСекцию("Строчка");           //Теперь на 2
            Если Таб1.КоличествоСтраниц() > КолСтрПред Тогда
                 Таб.ВывестиСекцию("Колонтитул");  //На 1
                 Таб1.ВывестиСекцию("Строчка");     //Опять на 2
                 КолСтрПред = КолСтрПред+1;
            КонецЕсли;
            Таб.ВывестиСекцию("Строчка");           //Опять на 1
       КонецЦикла;
       Таб.ВывестиСекцию("Колонтитул");
       Таб.ТолькоПросмотр(1);
       Таб.Показать("");
КонецПроцедуры

 

Разумеется, секции таблицы Строчка и Колонтитул должны иметь одинаковую высоту. Кроме того, релизы платформы до 25 включительно НЕ поддерживают метод таблиц КоличествоСтраниц.

Примечание. Если в колонтитуле нужны только номера страниц и/или текст/шаблоны, то лучше пользоваться колонтитулами из свойств таблицы, задаваемых в конфигураторе - этого должно хватить.

 

Ну а теперь задача еще реальней. Как быть, ести места для колонтитула просто нет? Номер страницы требуется на полях последней строки?

Тогда так:

 

Процедура Напечатать()
       Таб1 = СоздатьОбъект("Таблица");
       Таб1.ИсходнаяТаблица("Таблица");
       Таб1.ПовторятьПриПечатиСтроки(14,15);   //Это заголовки колонок
       Таб1.ВывестиСекцию("Шапка");
       Таб = СоздатьОбъект("Таблица");
       Таб.ИсходнаяТаблица("Таблица");
       Таб.ПовторятьПриПечатиСтроки(14,15);
       Таб.ВывестиСекцию("Шапка");
       КолСтрПред = 1;
       ТЗ.ВыбратьСтроки();
       Пока ТЗ.ПолучитьСтроку() = 1 Цикл
            Таб1.ВывестиСекцию("Строчка");           
            Если Таб1.КоличествоСтраниц() > КолСтрПред Тогда
                 Таб.ПрисоединитьСекцию("Строчка|Номер");  
                 КолСтрПред = КолСтрПред+1;
            КонецЕсли;
            Таб.ВывестиСекцию("Строчка|Основная");           
       КонецЦикла;
       Таб.ПрисоединитьСекцию(" Строчка|Номер ");
       Таб.ТолькоПросмотр(1);
       Таб.Показать("");
КонецПроцедуры

 

Сэкономили строчку на странице...

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Рытов (Арчибальд) 28.04.11 11:43
Инструмент - заготовочка...
tarasoff_s; +1 Ответить
2. Алексей (Alav) 28.04.11 11:43
Ну про странице ИМХО неудачный пример
Ибо "Страница #P из #Q" никто не отменял
3. Александр Рытов (Арчибальд) 28.04.11 11:48
(2) С этого места поподробней, пожалуйста :o
4. Игорь Исхаков (Ish_2) 28.04.11 11:58
Арчибальд , ты погряз в мелкотемье...
5. Епрст (Ёпрст) 28.04.11 12:02
(3) Про колонтитулы не разу не слышал что ли ?!
)))))))))))))))))))))))))))))
6. Епрст (Ёпрст) 28.04.11 12:04
Да, за КоличествоСтраниц() в коде нужно тапком..
Це же мегатормоз и вообще, лишние метод.
7. Алексей Константинов (alexk-is) 28.04.11 12:21
(0) Для вывода таблицы значений этот вариант конечно не вариант.

А вот для ТОРГ-12 или подобных печатных форм с разбиением по страницам, то очень даже может быть...
8. Hellgga 28.04.11 12:29
(7) ИФНС заставляет нумеровать и Торг-12, и счф, и Книги покупок, продаж. При камералке паримся вручную...
9. Александр Рытов (Арчибальд) 28.04.11 13:22
(5) А должен был? :D
Не, меня "из #Q" заинтересовало. Что ли уже есть такое?
10. Епрст (Ёпрст) 28.04.11 13:35
(9)
Текст колонтитула

Многострочное поля служит для ввода текста, который будет помещаться в колонтитул.
Текст колонтитула может включать следующие управляющие конструкции:

#T при печати в данном месте будет вставлено время печати документа
#D при печати в данном месте будет вставлена дата печати документа
#P при печати в данном месте будет вставлен номер страницы документа
#Q при печати в данном месте будет вставлено число - общее количество страниц документа

В текст колонтитула может быть включено выражение на встроенном языке системы 1С:Предприятие, заключенное в квадратные скобки. Выражение вычисляется при формировании документа и его результат помещается в текст колонтитула.

1С:Предприятие, версия 7.7. © 1996-1999, Фирма "1С"

давно F1 в пофигураторе не нажимал ?!
:))))
nprocskaya; Арчибальд; +2 Ответить 1
11. Александр Рытов (Арчибальд) 28.04.11 13:52
(10) Да я вообще никогда его не нажимал. :o
А в ЖКК на 216 странице у меня только три буквы, Q нету. Правда, издание 99 года...
12. Епрст (Ёпрст) 28.04.11 14:24
(11) #Q не помню уже с какого релиза пошло, с 20 что ли..
13. Александр Рытов (Арчибальд) 28.04.11 14:31
(12)А, это который с глюками был так что откатываться приходилось :D
14. Александр Рытов (Арчибальд) 28.04.11 16:20
(4) Сделай на восьмерке аналог (без колонтитулов), и продолжим беседу.
15. Епрст (Ёпрст) 28.04.11 17:08
(14) там аналогично всё, есть метод для расчета , влезет ли выводимая область(области) на страницу или нет, ну а дальше тупо - втыкай подвал с нумером и привет.
Правда этот расчет на больших таблицах мегатормоз, как и КоличествоСтраниц в клюшках.
16. Александр Рытов (Арчибальд) 28.04.11 17:19
(15) Я его на второй вариант развести пытаюсь ;)