Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вывод колонтитулов с привязкой к размеру страницы

Вывод колонтитулов с привязкой к размеру страницы
Я
   NIGHTHUNTER
 
19.11.20 - 07:32
Выводимый макет содержит изображения колонтитулов. Которые должны быть на каждой странице, в заданном виде.
Без возможности выводиться в плавающем виде. Как это есть сейчас.
Подскажите какую технологию можно опробовать, для вывода заданных фиксировано колонтитулов на выводимых страницах макета?
   NIGHTHUNTER
 
1 - 19.11.20 - 09:09
Не понятно как регулировать, что бы выводились нужные листы на печать, но вверху и внизу в твердо заданных местах выводились колонтитулы.
   ДенисЧ
 
2 - 19.11.20 - 09:10
ТабличныйДокумент (SpreadsheetDocument)
ВерхнийКолонтитул (Header)
Использование:
Только чтение.
Описание:
Тип: КолонтитулТабличногоДокумента.
Содержит верхний колонтитул табличного документа.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
КолонтитулТабличногоДокумента
Использование в версии:
Доступен, начиная с версии 8.0.
     Методическая информация

Дальше сам.
   RomanYS
 
3 - 19.11.20 - 09:10
ПроверитьВывод()
   NIGHTHUNTER
 
4 - 19.11.20 - 09:12
(2) Что сам? Мне нужно в колонтитул выводить изображение. Это принципиально другое.
   NIGHTHUNTER
 
5 - 19.11.20 - 09:14
(3) Есть такой метод, но я не знаком с его работой. Подскажите если вам это известно.


Процедура ВыводСПроверкой(ТабДок,СекцияВывод)
 М = Новый Массив;
 М.Добавить(СекцияВывод);
 М.Добавить(СекцияНиз);
// Проверим, уместится ли строка на странице или надо открывать новую страницу

 Если Не ТабДок.ПроверитьВывод(М) Тогда
   Если СекцияВывод=СекцияДоп Тогда 
       Возврат
   КонецЕсли;
   ВыводСПроверкой(ТабДок,СекцияДоп);    
   ТабДок.Вывести(СекцияНиз);    
   ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
   ТабДок.Вывести(СекцияВерх);
КонецЕсли;

ТабДок.Вывести(СекцияВывод);
Если СекцияВывод=СекцияДоп Тогда 
   ВыводСПроверкой(ТабДок,СекцияДоп);
КонецЕсли;


СекцияВерх секция с картинкой - верхний колонтитул
СекцияНиз  секция с картинкой - нижний колонтитул
СекцияДоп секция "пустая строка с высотой 1" - для того что бы нижний колонтитул всегда ровно ложился.

Такую вот технологию нашел, но как применить пока не знаю.
   RomanYS
 
6 - 19.11.20 - 09:16
(5) пример нашёл, СП почитай. Что подсказать то ещё?
   NIGHTHUNTER
 
7 - 19.11.20 - 09:23
(6) Хотелось бы разобраться с примером, понять как он работает. Как его применить.
То есть в (5) пример, который реально применить для решения (0) ? Я его ещё не опробовал, пока не знаю с какой стороны к нему подобраться.
Что бы разобраться и понять его. Начать применять. Смотреть результат. И как то соединять начать со своим, разрабатываемым макетом.
   NIGHTHUNTER
 
8 - 19.11.20 - 09:24
Есть ещё вот такой пример.


Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета,
    ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя)
    
    //Получаем область - нижний колонтитул

    ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул");
    
    //Пока не выводим текущую область,

    //складываем текущую область с областью нижнего колонтитула в массив

    
    //Внимание! Не надо складывать все выведенные до этого области,

    //только Текущая и Нижний колонтитул

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

    Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда
        //Если сложенные области не входят на страницу,

        //выводим нижний колонтитул и горизонтальный разделитель страниц

        ОбластьНижнийКолонтитул.Параметры.ФИОПокупателя = ФИОПокупателя;
        ОбластьНижнийКолонтитул.Параметры.ФИОДиректора = "Анищенко Б.С.";
        ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        //Затем выводим шапку, уже на следующей странице

        ТабличныйДокумент.Вывести(ОбластьШапкаСпецификацияКДоговору);
    КонецЕсли;
КонецПроцедуры
   НЕА123
 
9 - 19.11.20 - 09:36
фоноваякартинка
?
   RomanYS
 
10 - 19.11.20 - 10:02
(7) Так разберись. Будут вопрос по существу - пиши. (8) вообще практически твоя тема
   NIGHTHUNTER
 
11 - 19.11.20 - 11:57
(9) Колонтитулы.
   mistеr
 
12 - 19.11.20 - 12:47
(7) На ИС погугли ПроверитьВывод, много статей.
   NIGHTHUNTER
 
13 - 23.11.20 - 07:03
Суть вопроса такова.

Я не говорю пока когда в документе много строк. И нужно делать соответствующую обработку.

Но вот например, что я не понимаю.

1. Вывод титульного листа. Нужно что бы картинка верхнего колонтитула выводилась вверху, а картинка нижнего колонтитула выводилась внизу.
   Титульный лист выводится одним макетом. Если в нем выводится это не так как нужно. Как сделано статически в ворде. Это самому нужно как то подгонять?
   Через предварительный просмотр это можно выявлять?

2. Если в документе мало строк, то нижний колонтитул с картинкой выводится по средине страницы, а должен так же внизу как при статическом выводе в документе ворд.
   Как этим управлять? Считать строки? Они тоже погут быть разной величины. (2) Я как понимаю не подойдет, потому что тут я вывожу изображение в месте колонтитула.
   NIGHTHUNTER
 
14 - 23.11.20 - 07:10
(13) 1. - Титульный лист выводится одной секцией в макете, т. е.
   NIGHTHUNTER
 
15 - 23.11.20 - 07:22
Методом проб, и проверок в предварительном просмотре, добился что бы титульный выводился на 1 страницу.
И колонтитулы что бы были вверху страницы и внизу. Колонтитулы представляют собой изображения.
То есть так делается?

Думал как то задавать одинаковую высоту строк, и есть определенные параметры, когда столько то строк умещается на одном листе.

Хотя если сбиваешь высоту строк, потом как её примести к высоте по умолчанию тоже не понятно.
   NIGHTHUNTER
 
16 - 24.11.20 - 06:37
Провожу аудит, имеющихся примеров. Пытаюсь понять что они делают и какой подойдет мне.

1). Пока такая задача. Имеется ВерхнийКолонтитул, НижнийКолонтитул и Строки .

2). Ещё есть Титульный. Отдельная секция. И подвал, отличающийся от нижнего колонтитула. Который нужно вывести в конце всего выводимого макета.

Пока что не пойму как это все применить. И какой из этих примеров мне нужен.



ПРИМЕР 1.

Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета, ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя)
    //Получаем область - нижний колонтитул

    ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул");
    //Пока не выводим текущую область, складываем текущую область с областью нижнего колонтитула в массив

    //Внимание! Не надо складывать все выведенные до этого области, только Текущая и Нижний колонтитул

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

    Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда
        //Если сложенные области не входят на страницу, выводим нижний колонтитул и горизонтальный разделитель страниц

        ОбластьНижнийКолонтитул.Параметры.ФИОПокупателя = ФИОПокупателя;
        ОбластьНижнийКолонтитул.Параметры.ФИОДиректора = "Анищенко Б.С.";
        ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        //Затем выводим шапку, уже на следующей странице

        ТабличныйДокумент.Вывести(ОбластьШапкаСпецификацияКДоговору);
    КонецЕсли;
КонецПроцедуры

Также стоит отметить что параметры: «ТабличныйДокумент.ПолеСверху» и «ТабличныйДокумент.ПолеСнизу» не должны быть заданы программно.

// --------------------------------------------------------------------------------


ПРИМЕР 2.

Процедура ВыводСПроверкой(ТабДок,СекцияВывод)
    М = Новый Массив;
    М.Добавить(СекцияВывод);
    М.Добавить(СекцияНиз);
    // Проверим, уместится ли строка на странице или надо открывать новую страницу

    Если Не ТабДок.ПроверитьВывод(М) Тогда
       Если СекцияВывод=СекцияДоп Тогда 
           Возврат
       КонецЕсли;
       ВыводСПроверкой(ТабДок,СекцияДоп);    
       ТабДок.Вывести(СекцияНиз);    
       ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
       ТабДок.Вывести(СекцияВерх);
    КонецЕсли;
    ТабДок.Вывести(СекцияВывод);
    Если СекцияВывод=СекцияДоп Тогда 
       ВыводСПроверкой(ТабДок,СекцияДоп);
    КонецЕсли;
КонецПроцедуры

// --------------------------------------------------------------------------------
   NIGHTHUNTER
 
17 - 24.11.20 - 06:43
Вот эту процедуру не проверял. Но кажется она зацикленная? Рекурсивная, судя по коду ...

ПРИМЕР 2.

Процедура ВыводСПроверкой(ТабДок,СекцияВывод)
    М = Новый Массив;
    М.Добавить(СекцияВывод);
    М.Добавить(СекцияНиз);
    // Проверим, уместится ли строка на странице или надо открывать новую страницу


    Если Не ТабДок.ПроверитьВывод(М) Тогда
       Если СекцияВывод=СекцияДоп Тогда 
           Возврат
       КонецЕсли;
       ВыводСПроверкой(ТабДок,СекцияДоп);    
       ТабДок.Вывести(СекцияНиз);    
       ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
       ТабДок.Вывести(СекцияВерх);
    КонецЕсли;
    ТабДок.Вывести(СекцияВывод);
    Если СекцияВывод=СекцияДоп Тогда 
       ВыводСПроверкой(ТабДок,СекцияДоп);
    КонецЕсли;
КонецПроцедуры
   NIGHTHUNTER
 
18 - 24.11.20 - 06:49
Вот, делаю под себя. А где вывод самих строк?

Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета, ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя)
    // Получаем области - верхний, нижний колонтитул

    ОбластьВерхнийКолонтитул = МакетОбработки.ПолучитьОбласть("ВерхнийКолонтитул");
    ОбластьНижнийКолонтитул  = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул");
    // Пока не выводим текущую область, складываем текущую область с областью нижнего колонтитула в массив

    // Внимание! Не надо складывать все выведенные до этого области, только Текущая и Нижний колонтитул

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

    Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда
        // Если сложенные области не входят на страницу, выводим нижний колонтитул и горизонтальный разделитель страниц

        ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        // Затем выводим шапку, уже на следующей странице

        ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул);
    КонецЕсли;
КонецПроцедуры
   Йохохо
 
19 - 24.11.20 - 06:58
(18) "А где вывод самих строк?" в коде выше "по стеку", где формируется ТекущаяОбластьМакета. Похоже ты скопипастил что то не универсальное и логику надо допилить
   NIGHTHUNTER
 
20 - 24.11.20 - 07:02
(19) То есть вывод строк, идет до вызова этой процедуры?

Немного удивляюсь себе, но что то, эта методика меня поставила в ступор и не доходит. Вот выжидаю время когда дойдет, придут идеи и я продвинусь в решении.

(19) Или все же вывод самих строк, будет в этой процедуре (18). Да что я нашел примеры, они наверное только идею подкидывают а сами не рабочие. И уже самому в процессе тестирования, нужно их дорабатывать.
   NIGHTHUNTER
 
21 - 24.11.20 - 07:17
(19) Вот, кажется по смыслу. Отредактировал процедуру. Правильно же??


//

Процедура ВывестиКолонтитулы(ТабличныйДокумент, ТекущаяОбластьМакета)
    ОбластьВерхнийКолонтитул = МакетОбработки.ПолучитьОбласть("ВерхнийКолонтитул");
    ОбластьНижнийКолонтитул  = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул");
    ВыводимыеОбласти = Новый Массив;
    ВыводимыеОбласти.Добавить(ОбластьВерхнийКолонтитул);
    ВыводимыеОбласти.Добавить(ТекущаяОбластьМакета);
    ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул);
    Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда
        ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул);
        ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
        ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул);
        ТабличныйДокумент.Вывести(ТекущаяОбластьМакета);
    Иначе
        ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул);
    КонецЕсли;
КонецПроцедуры
//
   K1RSAN
 
22 - 24.11.20 - 07:24
(20) Тут, грубо говоря, перед выводом КАЖДОЙ области необходимо делать проверку на вывод колонтитула "а вдруг лист кончится". Поэтому в результате может получиться монстр из проверок. А еще надо учесть, что текущая область уже не влезает, но она может быть достаточно большая, чтобы вставить пару пустых строк, чтобы колонтитул будет именно в конце страницы. И тогда после проверки на вставку "текущей области + колонтитул" надо будет еще добавить вставку пустых строк)
Вот вам еще пища для размышлений)
   K1RSAN
 
23 - 24.11.20 - 07:27
(22)+ но она может быть достаточно большая, чтобы вставить пару пустых строк, чтобы колонтитул будет именно в конце страницы*
но сама область достаточно большая, а потому даже если она не влезает - может быть место для пустых строк, иначе колонтитул окажется не в самом низу страницы, а грубо говоря - "в основной части"
   Йохохо
 
24 - 24.11.20 - 07:28
(21) для формы по доку с ТЧ обычно выводится верхний, потом шапка, потом в цикле надо выводить строки, и перед выводом строки проверить что влезет Облать1(новая выводимая строка + итоги+ подвал + колонтитул), если Область1 не влезает то выводим Область(Подвал+Колонтитул), она обязана влезать алгоритмически, потом разрывстраницы и инициализируем наполнение новой страницы. Код у тебя есть, выкинь куски чужого кода и реализуй свою логику
   Йохохо
 
25 - 24.11.20 - 07:29
Область(промежуточныеИтоги+Колонтитул)
   NIGHTHUNTER
 
26 - 24.11.20 - 07:33
(22) - (25) Спасибо, принимаю все для размышления. Буду приходить к верному решению.
   NIGHTHUNTER
 
27 - 24.11.20 - 08:52
Если можно подскажите пожалуйста, какой тут заложен смысл, и что не доработанно? Я не понимаю.

Процедура ВыводСПроверкой(ТабДок,СекцияВывод)
 М = Новый Массив;
 М.Добавить(СекцияВывод);
 М.Добавить(СекцияНиз);
// Проверим, уместится ли строка на странице или надо открывать новую страницу

 Если Не ТабДок.ПроверитьВывод(М) Тогда
   Если СекцияВывод=СекцияДоп Тогда 
       Возврат
   КонецЕсли;
   ВыводСПроверкой(ТабДок,СекцияДоп);    
   ТабДок.Вывести(СекцияНиз);    
   ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
   ТабДок.Вывести(СекцияВерх);
КонецЕсли;

ТабДок.Вывести(СекцияВывод);
Если СекцияВывод=СекцияДоп Тогда 
   ВыводСПроверкой(ТабДок,СекцияДоп);
КонецЕсли;
   Йохохо
 
28 - 24.11.20 - 09:08
на вход СекцияВывод, если она не влезает выводим СекцияДоп (до конца страницы? <- это не реализовано)


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