Вход | Регистрация
 

Вывод колонтитулов и подвала макета печатной формы

Вывод колонтитулов и подвала макета печатной формы
Я
   NIGHTHUNTER
 
08.12.20 - 11:00
Пытаюсь понять как правильно и универсально отформатировать вывод макета печатной формы.
Нужно на каждой странице выводить колонтитул вверху, колонтитул внизу. И потом подвал. Но я не знаю как правильнее это уложить на страницах.

        ВывестиКолонтитулы(ТабДок, Макет, ОбластьСтроки, ОбластьВерхнийКолонтитул);
        //
        ТабДок.Вывести(ОбластьСтроки);


...


Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетДокумента, ОбластьСтроки, ОбластьВерхнийКолонтитул)
    //ОбластьВерхнийКолонтитул = МакетДокумента.ПолучитьОбласть("ВерхнийКолонтитул");
    ОбластьНижнийКолонтитул  = МакетДокумента.ПолучитьОбласть("НижнийКолонтитул");
    ВыводимыеОбласти = Новый Массив;
    //ВыводимыеОбласти.Добавить(ОбластьВерхнийКолонтитул);
    ВыводимыеОбласти.Добавить(ОбластьСтроки);
    ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул);
    Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда
        ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул);
        //ТабличныйДокумент.Вывести(ТекущаяОбластьМакета);
    //Иначе
    //    ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул);
    КонецЕсли;
КонецПроцедуры
   NIGHTHUNTER
 
1 - 08.12.20 - 11:04
Хочется диалога, подсказок, идей, или общения при котором у меня появятся идеи, пока как то поисчезали все.

Например, я начинаю вводить документы по 39, 40, 45 .. строк, и тестирую.
   NIGHTHUNTER
 
2 - 08.12.20 - 11:08
там ещё в одном месте одна секция в цикле выводится, например 3 раза. Тоже как то нужно учитывать .
   Йохохо
 
3 - 08.12.20 - 11:16
колонтитулы вроде не занимают область печати, не?
   NIGHTHUNTER
 
4 - 08.12.20 - 11:37
(3) Там такие области, -

Титульный - выводится на 1 страницу, один раз. В самом начале.
Верхний колонтитул - выводится вверху, на страницах строк.
Шапка - выводится, после верхнего колонтитула. Один раз, или на страницах строк, в верхнем же колонтитулом. Пока не решил, как именно.
Строки - выводится в динамически меняющемся количестве.
Нижний колонтитул - выводится внизу на страницах строк.
Подвал_1 - выводится после строк, внизу, один раз.
ИтогПоВалюте - Выводится после Подвал_1, от 1 до 4 раз. Одна, или 4 строки.
Подвал_2 - выводится один раз в самом конце, внизу.
   NIGHTHUNTER
 
5 - 08.12.20 - 11:39
Как видно из (4) несколько раз могут выводиться, - 

Верхний колонтитул
(Шапка - вместе с верхним колонтитулом, после него, или один раз, после Титульного и Верхнего колонтитула) .
Строки
Нижний колонтитул
   fisher
 
6 - 08.12.20 - 11:49
Подвал и итоги ниже нижнего колонтитула? Это как? Нижний колонтитул обычно в самом низу.
По технической стороне - если это не "родные" колонтитулы и прочее, а эмулируемые через вывод обычных секций табличного документа, то навскидку вспоминается только один способ - через ПроверитьВывод().
Т.е. при выводе каждой строки проверяешь - влазит ли очередная строка на страницу вместе со всеми подвалами, итогами и нижними колонтитулами. И если не влазит - то выводишь не строку, а всю нижнюю лабудень и начинаешь вывод новой страницы (со всей нужной верхней лабудени).
   fisher
 
7 - 08.12.20 - 11:55
Еще можно заморочиться со строками одинаковой высоты (чтобы ты мог в любой момент определить высоту любой секции) и определив один раз через ПроверитьВывод() сколько строк влазит на страницу дальше просто математически вычислять сколько и чего влазит и сколько обычных строк нужно вывести перед выводом подвалов.
   NIGHTHUNTER
 
8 - 08.12.20 - 11:59
(6) Ну может нижний и верхний колонтитул всегда.
Пока это не уловил точно, но возможно именно так.

На титульном я сам разместил, вверху и внизу эти колонтитулы.

А дальше похоже их нужно выводить вверху и внизу страницы.
   NIGHTHUNTER
 
9 - 08.12.20 - 12:03
(6) То есть в ПроверитьВывод() нужно проверять вот эти все секции, -

Строки - выводится в динамически меняющемся количестве.
Нижний колонтитул - выводится внизу на страницах строк.
Подвал_1 - выводится после строк, внизу, один раз.
ИтогПоВалюте - Выводится после Подвал_1, от 1 до 4 раз. Одна, или 4 строки.
Подвал_2 - выводится один раз в самом конце, внизу.

И если не влазиет, начинать новую страница. Как тут определять что новая страница последняя, или будут ещё.
Нужно наверное по содержимому табличной части, заранее рассчитать какой будет вывод в зависимости от количества строк ?
   Йохохо
 
10 - 08.12.20 - 12:06
(9) "Как тут определять что новая страница последняя, или будут ещё." прогоняй алгоритм два раза, в первый считай количество страниц. дада
   NIGHTHUNTER
 
11 - 08.12.20 - 12:08
(10) Можно заранее же рассчитать? Подогнать под возможное. Пока вхожу в решение.
   fisher
 
12 - 08.12.20 - 12:25
(9) Я тебе привел два способа, как определять.
1) при выводе каждой строки (и тех, которые "выводятся в динамически меняющемся количестве") проверять, влезет ли она на страницу вместе со всеми подвалами. Если не влезает - значит выводим подвалы и начинаем новую страницу (так как там будет как минимум еще одна строка)
2) затачиваем макет на строки одинаковой высоты. Выяснив, сколько таких строк влазит на страницу при текущих настройках принтера, все остальное тупо считаем.
   hhhh
 
13 - 08.12.20 - 12:25
(11) зачем нужно определять, что страница последняя? Это ни к чему.
   fisher
 
14 - 08.12.20 - 12:44
(13) Может, у него на последней странице какая-то особенная шапка/верхний колонтитул? Тогда определять нужно.
Но это несложно. При выводе "стандартных" страниц можно запомнить сколько "динамических" строк влазит на лист и отталкиваться от этого. Если осталось вывести меньше - значит страница последняя.
   NIGHTHUNTER
 
15 - 08.12.20 - 12:46
(12) Так подвалы выводятся же только на последней странице?
   fisher
 
16 - 08.12.20 - 12:51
(15) Как будет угодно. Под подвалами я понимал все, что ты хочешь выводить на странице под "динамическими" строками.
   NIGHTHUNTER
 
17 - 08.12.20 - 12:54
(16) ну да, и они же выводятся в конце самого макета.
И если все это не влазиет на страницу, то все подвалы, и все остальное выводится на следующей.
А на этой выводится только нижний колонтитул и разрыв страницы, так ведь?
   fisher
 
18 - 08.12.20 - 12:57
(17) Принцип расчета я постарался изложить. А как что выводить - тебе виднее.
   NIGHTHUNTER
 
19 - 09.12.20 - 03:17
А как выводить, изображение колонтитула, вверху и внизу страницы? То есть не где то в другом месте, ни по середине, ни чуть выше или ниже,
   NIGHTHUNTER
 
20 - 09.12.20 - 03:19
(19+) Вверху это понятно. Вывод нижнего колонтитула, разделитель страниц, вывод верхнего колонтитула, но вот как сделать что бы нижний колонтитул был внизу?
   NIGHTHUNTER
 
21 - 09.12.20 - 03:38
честно я запутался как это все сделать надежно, вижу что можно но много нужно возиться, делать разных пересчетов много и долго
   NIGHTHUNTER
 
22 - 09.12.20 - 04:22
Например. Сделал для тестирования 5 документов. 5, 10, 15, 20, 25 строк.
Первый документ, вывожу на печать, смотрю предварительный просмотр.
Титульный выводится как я его и задал. В самом верху верхний колонтитул, в самом низу нижний колонтитул.
Дальше идет верхний колонтитул, сам его же вывожу первый раз после титульного, потом строки, затем все подвалы. И нижний колонтитул, в самом последнем подвале.
Вижу что его нужно сейчас от туда убрать, и выводить самостоятельно. Как то рассчитывать вывод, того что бы этот нижний колонтитул был в самом низу.
Много всего конечно можно наделать, но хотелось бы сделать универсальное работающее решение.
   NIGHTHUNTER
 
23 - 09.12.20 - 04:45
(14) А если меняется высота строк?
   NIGHTHUNTER
 
24 - 09.12.20 - 04:47
Строки получается делать нужно одинаковой высоты все. Или все получится приблизительно, относительно.
Если строки одинаковой высоты все, то можно сделать более точно.
   NIGHTHUNTER
 
25 - 09.12.20 - 04:48
А нижний колонтитул что бы был всегда, вижу, что это можно делать, дибавлением пустой строки, перед нижним колонтитулом, и выводить его в самом низу , там где нужно. Буду сейчас так пробовать делать.
   NIGHTHUNTER
 
26 - 09.12.20 - 05:21
А если после титульного появился пустой лист, что это означает?
   hhhh
 
27 - 09.12.20 - 06:31
(26) наверно ты забубенил туда 100500 пустых строк.
   NIGHTHUNTER
 
28 - 09.12.20 - 06:34
Не пойму как рассчитывать вывод колонтитула.

Попробовал вот так, но часть колонтитулы вылезна на третью страницу (((

    //

    // ВЫВОД НИЖНЕГО КОЛОНТИТУЛА

    ОбластьДляНК            = Макет.ПолучитьОбласть("ДляНижнегоКолонтитула");
    ОбластьНижнийКолонтитул = Макет.ПолучитьОбласть("НижнийКолонтитул");
    //// 5 СТРОК

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

        Пока ТабДок.ПроверитьВывод(ВыводимыеОбласти) Цикл
            ИтерацииОбластьДляНК = ИтерацииОбластьДляНК + 1;
            ТабДок.Вывести(ОбластьДляНК);
        КонецЦикла;
        //

        //Для Счетчик = 1 По ИтерацииОбластьДляНК Цикл

        //    ТабДок.Вывести(ОбластьДляНК);

        //КонецЦикла;        //

        ТабДок.Вывести(ОбластьНижнийКолонтитул);
   NIGHTHUNTER
 
29 - 09.12.20 - 06:35
(27) Если я убираю пустую строку, то и выведенный лист сужается .
   NIGHTHUNTER
 
30 - 09.12.20 - 06:36
(28+) вроде все делает, но колонтитул почему то обрезается (((( http://joxi.ru/Q2KkjxGsvXv312
 
 Рекламное место пустует
   NIGHTHUNTER
 
31 - 09.12.20 - 06:37
ПроверитьВывод( - вот это точно не работает? Обязательно обрезается все ?
   NIGHTHUNTER
 
32 - 09.12.20 - 06:53
так вот попробовал, буду сейчас тестировать дальше, -

    ТабДок.Вывести(ОбластьПодвал_2);
    //

    // ВЫВОД НИЖНЕГО КОЛОНТИТУЛА

    ОбластьДляНК            = Макет.ПолучитьОбласть("ДляНижнегоКолонтитула");
    ОбластьНижнийКолонтитул = Макет.ПолучитьОбласть("НижнийКолонтитул");
    //

    ИтерацииОбластьДляНК    = 0;
    ВыводимыеОбласти        = Новый Массив;
    ВыводимыеОбласти.Добавить(ОбластьДляНК);
    ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул);
    //

    Пока ТабДок.ПроверитьВывод(ВыводимыеОбласти) Цикл
        ИтерацииОбластьДляНК = ИтерацииОбластьДляНК + 1;
        ТабДок.Вывести(ОбластьДляНК);
    КонецЦикла;
    //

    ТабДок.Вывести(ОбластьНижнийКолонтитул);
    //

    Возврат ТабДок;
КонецФункции
   hhhh
 
33 - 09.12.20 - 07:27
(32) используй свойство ТабДок.НижнийКолонтитул, тогда и строчки считать не надо будет.
   NIGHTHUNTER
 
34 - 09.12.20 - 07:36
на 30 строк, вот сделал вывод. Дальше , нужно сейчас думать как сотальное обрабатывать.

    // ВЫВОД НИЖНЕГО КОЛОНТИТУЛА

    ОбластьДляНК            = Макет.ПолучитьОбласть("ДляНижнегоКолонтитула");
    ОбластьНижнийКолонтитул = Макет.ПолучитьОбласть("НижнийКолонтитул");
    //

    ИтерацииОбластьДляНК    = 0;
    ВыводимыеОбласти        = Новый Массив;
    ВыводимыеОбласти.Добавить(ОбластьДляНК);
    ВыводимыеОбласти.Добавить(ОбластьДляНК);
    ВыводимыеОбласти.Добавить(ОбластьДляНК);
    ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул);
    //

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

        ТабДок.Вывести(ОбластьНижнийКолонтитул);
    КонецЕсли;
    //

    Возврат ТабДок;
КонецФункции
   NIGHTHUNTER
 
35 - 09.12.20 - 07:37
(33) У меня в колонтитуле изображение. Подойдет ли этот метод? Мне и не нужно считать строки, это я там кое что пробовал, не понадобилось. Пока не убрал.
   hhhh
 
36 - 09.12.20 - 07:50
(34) а где у тебя в проверить вывод колонтитул? Ты его выводить не собираешься, что ли?
   NIGHTHUNTER
 
37 - 09.12.20 - 09:32
(36) В (34) я для 30 строк документа сделал вывод нижнего колонтитула

Тут я вывожу пустую строку в секции, что бы заполнить пустое простринство, на втором листе макета, что бы в низу страницы вывести нижний колонтитул
        Пока ТабДок.ПроверитьВывод(ВыводимыеОбласти) Цикл
            ИтерацииОбластьДляНК = ИтерацииОбластьДляНК + 1;
            ТабДок.Вывести(ОбластьДляНК);
        КонецЦикла;
        //


вывод нижнего колонтитула , вот он

        ТабДок.Вывести(ОбластьНижнийКолонтитул);
   hhhh
 
38 - 09.12.20 - 09:57
(37) а если он не поместится?
   NIGHTHUNTER
 
39 - 09.12.20 - 10:33
(38) Нижний колонтитул?
Я это продумал. Поместится для 33х строк. На 34-й, да, съезжает. Огрызок вылазиет на 3 ей странице.По этому моя наработка для 33х строк включительно.
Дальше буду получать указания как действовать дальше.
Возможно все подвалы переносить на 3ю страницу. но они там занимают пол листа. Или как дальнейшую обработку, более 33 строк, учитывать. Пока не известно.

Поместится если будет 33 строки включительно.
   hhhh
 
40 - 09.12.20 - 10:41
прикольно


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.