|
Вывод колонтитулов с привязкой к размеру страницы | ☑ | ||
---|---|---|---|---|
0
NIGHTHUNTER
19.11.20
✎
07:32
|
Выводимый макет содержит изображения колонтитулов. Которые должны быть на каждой странице, в заданном виде.
Без возможности выводиться в плавающем виде. Как это есть сейчас. Подскажите какую технологию можно опробовать, для вывода заданных фиксировано колонтитулов на выводимых страницах макета? |
|||
1
NIGHTHUNTER
19.11.20
✎
09:09
|
Не понятно как регулировать, что бы выводились нужные листы на печать, но вверху и внизу в твердо заданных местах выводились колонтитулы.
|
|||
2
ДенисЧ
19.11.20
✎
09:10
|
ТабличныйДокумент (SpreadsheetDocument)
ВерхнийКолонтитул (Header) Использование: Только чтение. Описание: Тип: КолонтитулТабличногоДокумента. Содержит верхний колонтитул табличного документа. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. См. также: КолонтитулТабличногоДокумента Использование в версии: Доступен, начиная с версии 8.0. Методическая информация Дальше сам. |
|||
3
RomanYS
19.11.20
✎
09:10
|
ПроверитьВывод()
|
|||
4
NIGHTHUNTER
19.11.20
✎
09:12
|
(2) Что сам? Мне нужно в колонтитул выводить изображение. Это принципиально другое.
|
|||
5
NIGHTHUNTER
19.11.20
✎
09:14
|
(3) Есть такой метод, но я не знаком с его работой. Подскажите если вам это известно.
Процедура ВыводСПроверкой(ТабДок,СекцияВывод) М = Новый Массив; М.Добавить(СекцияВывод); М.Добавить(СекцияНиз); // Проверим, уместится ли строка на странице или надо открывать новую страницу Если Не ТабДок.ПроверитьВывод(М) Тогда Если СекцияВывод=СекцияДоп Тогда Возврат КонецЕсли; ВыводСПроверкой(ТабДок,СекцияДоп); ТабДок.Вывести(СекцияНиз); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); ТабДок.Вывести(СекцияВерх); КонецЕсли; ТабДок.Вывести(СекцияВывод); Если СекцияВывод=СекцияДоп Тогда ВыводСПроверкой(ТабДок,СекцияДоп); КонецЕсли; СекцияВерх секция с картинкой - верхний колонтитул СекцияНиз секция с картинкой - нижний колонтитул СекцияДоп секция "пустая строка с высотой 1" - для того что бы нижний колонтитул всегда ровно ложился. Такую вот технологию нашел, но как применить пока не знаю. |
|||
6
RomanYS
19.11.20
✎
09:16
|
(5) пример нашёл, СП почитай. Что подсказать то ещё?
|
|||
7
NIGHTHUNTER
19.11.20
✎
09:23
|
(6) Хотелось бы разобраться с примером, понять как он работает. Как его применить.
То есть в (5) пример, который реально применить для решения (0) ? Я его ещё не опробовал, пока не знаю с какой стороны к нему подобраться. Что бы разобраться и понять его. Начать применять. Смотреть результат. И как то соединять начать со своим, разрабатываемым макетом. |
|||
8
NIGHTHUNTER
19.11.20
✎
09:24
|
Есть ещё вот такой пример.
Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета, ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя) //Получаем область - нижний колонтитул ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул"); //Пока не выводим текущую область, //складываем текущую область с областью нижнего колонтитула в массив //Внимание! Не надо складывать все выведенные до этого области, //только Текущая и Нижний колонтитул ВыводимыеОбласти = Новый Массив; ВыводимыеОбласти.Добавить(ТекущаяОбластьМакета); ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул); //Проверяем войдут ли сложенные области на страницу Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда //Если сложенные области не входят на страницу, //выводим нижний колонтитул и горизонтальный разделитель страниц ОбластьНижнийКолонтитул.Параметры.ФИОПокупателя = ФИОПокупателя; ОбластьНижнийКолонтитул.Параметры.ФИОДиректора = "Анищенко Б.С."; ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); //Затем выводим шапку, уже на следующей странице ТабличныйДокумент.Вывести(ОбластьШапкаСпецификацияКДоговору); КонецЕсли; КонецПроцедуры |
|||
9
НЕА123
19.11.20
✎
09:36
|
фоноваякартинка
? |
|||
10
RomanYS
19.11.20
✎
10:02
|
(7) Так разберись. Будут вопрос по существу - пиши. (8) вообще практически твоя тема
|
|||
11
NIGHTHUNTER
19.11.20
✎
11:57
|
(9) Колонтитулы.
|
|||
12
mistеr
19.11.20
✎
12:47
|
(7) На ИС погугли ПроверитьВывод, много статей.
|
|||
13
NIGHTHUNTER
23.11.20
✎
07:03
|
Суть вопроса такова.
Я не говорю пока когда в документе много строк. И нужно делать соответствующую обработку. Но вот например, что я не понимаю. 1. Вывод титульного листа. Нужно что бы картинка верхнего колонтитула выводилась вверху, а картинка нижнего колонтитула выводилась внизу. Титульный лист выводится одним макетом. Если в нем выводится это не так как нужно. Как сделано статически в ворде. Это самому нужно как то подгонять? Через предварительный просмотр это можно выявлять? 2. Если в документе мало строк, то нижний колонтитул с картинкой выводится по средине страницы, а должен так же внизу как при статическом выводе в документе ворд. Как этим управлять? Считать строки? Они тоже погут быть разной величины. (2) Я как понимаю не подойдет, потому что тут я вывожу изображение в месте колонтитула. |
|||
14
NIGHTHUNTER
23.11.20
✎
07:10
|
(13) 1. - Титульный лист выводится одной секцией в макете, т. е.
|
|||
15
NIGHTHUNTER
23.11.20
✎
07:22
|
Методом проб, и проверок в предварительном просмотре, добился что бы титульный выводился на 1 страницу.
И колонтитулы что бы были вверху страницы и внизу. Колонтитулы представляют собой изображения. То есть так делается? Думал как то задавать одинаковую высоту строк, и есть определенные параметры, когда столько то строк умещается на одном листе. Хотя если сбиваешь высоту строк, потом как её примести к высоте по умолчанию тоже не понятно. |
|||
16
NIGHTHUNTER
24.11.20
✎
06:37
|
Провожу аудит, имеющихся примеров. Пытаюсь понять что они делают и какой подойдет мне.
1). Пока такая задача. Имеется ВерхнийКолонтитул, НижнийКолонтитул и Строки . 2). Ещё есть Титульный. Отдельная секция. И подвал, отличающийся от нижнего колонтитула. Который нужно вывести в конце всего выводимого макета. Пока что не пойму как это все применить. И какой из этих примеров мне нужен. ПРИМЕР 1. Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета, ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя) //Получаем область - нижний колонтитул ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул"); //Пока не выводим текущую область, складываем текущую область с областью нижнего колонтитула в массив //Внимание! Не надо складывать все выведенные до этого области, только Текущая и Нижний колонтитул ВыводимыеОбласти = Новый Массив; ВыводимыеОбласти.Добавить(ТекущаяОбластьМакета); ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул); //Проверяем войдут ли сложенные области на страницу Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда //Если сложенные области не входят на страницу, выводим нижний колонтитул и горизонтальный разделитель страниц ОбластьНижнийКолонтитул.Параметры.ФИОПокупателя = ФИОПокупателя; ОбластьНижнийКолонтитул.Параметры.ФИОДиректора = "Анищенко Б.С."; ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); //Затем выводим шапку, уже на следующей странице ТабличныйДокумент.Вывести(ОбластьШапкаСпецификацияКДоговору); КонецЕсли; КонецПроцедуры Также стоит отметить что параметры: «ТабличныйДокумент.ПолеСверху» и «ТабличныйДокумент.ПолеСнизу» не должны быть заданы программно. // -------------------------------------------------------------------------------- ПРИМЕР 2. Процедура ВыводСПроверкой(ТабДок,СекцияВывод) М = Новый Массив; М.Добавить(СекцияВывод); М.Добавить(СекцияНиз); // Проверим, уместится ли строка на странице или надо открывать новую страницу Если Не ТабДок.ПроверитьВывод(М) Тогда Если СекцияВывод=СекцияДоп Тогда Возврат КонецЕсли; ВыводСПроверкой(ТабДок,СекцияДоп); ТабДок.Вывести(СекцияНиз); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); ТабДок.Вывести(СекцияВерх); КонецЕсли; ТабДок.Вывести(СекцияВывод); Если СекцияВывод=СекцияДоп Тогда ВыводСПроверкой(ТабДок,СекцияДоп); КонецЕсли; КонецПроцедуры // -------------------------------------------------------------------------------- |
|||
17
NIGHTHUNTER
24.11.20
✎
06:43
|
Вот эту процедуру не проверял. Но кажется она зацикленная? Рекурсивная, судя по коду ...
ПРИМЕР 2. Процедура ВыводСПроверкой(ТабДок,СекцияВывод) М = Новый Массив; М.Добавить(СекцияВывод); М.Добавить(СекцияНиз); // Проверим, уместится ли строка на странице или надо открывать новую страницу Если Не ТабДок.ПроверитьВывод(М) Тогда Если СекцияВывод=СекцияДоп Тогда Возврат КонецЕсли; ВыводСПроверкой(ТабДок,СекцияДоп); ТабДок.Вывести(СекцияНиз); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); ТабДок.Вывести(СекцияВерх); КонецЕсли; ТабДок.Вывести(СекцияВывод); Если СекцияВывод=СекцияДоп Тогда ВыводСПроверкой(ТабДок,СекцияДоп); КонецЕсли; КонецПроцедуры |
|||
18
NIGHTHUNTER
24.11.20
✎
06:49
|
Вот, делаю под себя. А где вывод самих строк?
Процедура ВывестиКолонтитулы(ТабличныйДокумент, МакетОбработки, ТекущаяОбластьМакета, ОбластьШапкаСпецификацияКДоговору, ФИОПокупателя) // Получаем области - верхний, нижний колонтитул ОбластьВерхнийКолонтитул = МакетОбработки.ПолучитьОбласть("ВерхнийКолонтитул"); ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул"); // Пока не выводим текущую область, складываем текущую область с областью нижнего колонтитула в массив // Внимание! Не надо складывать все выведенные до этого области, только Текущая и Нижний колонтитул ВыводимыеОбласти = Новый Массив; ВыводимыеОбласти.Добавить(ТекущаяОбластьМакета); ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул); //Проверяем войдут ли сложенные области на страницу Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда // Если сложенные области не входят на страницу, выводим нижний колонтитул и горизонтальный разделитель страниц ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); // Затем выводим шапку, уже на следующей странице ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул); КонецЕсли; КонецПроцедуры |
|||
19
Йохохо
24.11.20
✎
06:58
|
(18) "А где вывод самих строк?" в коде выше "по стеку", где формируется ТекущаяОбластьМакета. Похоже ты скопипастил что то не универсальное и логику надо допилить
|
|||
20
NIGHTHUNTER
24.11.20
✎
07:02
|
(19) То есть вывод строк, идет до вызова этой процедуры?
Немного удивляюсь себе, но что то, эта методика меня поставила в ступор и не доходит. Вот выжидаю время когда дойдет, придут идеи и я продвинусь в решении. (19) Или все же вывод самих строк, будет в этой процедуре (18). Да что я нашел примеры, они наверное только идею подкидывают а сами не рабочие. И уже самому в процессе тестирования, нужно их дорабатывать. |
|||
21
NIGHTHUNTER
24.11.20
✎
07:17
|
(19) Вот, кажется по смыслу. Отредактировал процедуру. Правильно же??
// Процедура ВывестиКолонтитулы(ТабличныйДокумент, ТекущаяОбластьМакета) ОбластьВерхнийКолонтитул = МакетОбработки.ПолучитьОбласть("ВерхнийКолонтитул"); ОбластьНижнийКолонтитул = МакетОбработки.ПолучитьОбласть("НижнийКолонтитул"); ВыводимыеОбласти = Новый Массив; ВыводимыеОбласти.Добавить(ОбластьВерхнийКолонтитул); ВыводимыеОбласти.Добавить(ТекущаяОбластьМакета); ВыводимыеОбласти.Добавить(ОбластьНижнийКолонтитул); Если НЕ ТабличныйДокумент.ПроверитьВывод(ВыводимыеОбласти) Тогда ТабличныйДокумент.Вывести(ОбластьНижнийКолонтитул); ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул); ТабличныйДокумент.Вывести(ТекущаяОбластьМакета); Иначе ТабличныйДокумент.Вывести(ОбластьВерхнийКолонтитул); КонецЕсли; КонецПроцедуры // |
|||
22
K1RSAN
24.11.20
✎
07:24
|
(20) Тут, грубо говоря, перед выводом КАЖДОЙ области необходимо делать проверку на вывод колонтитула "а вдруг лист кончится". Поэтому в результате может получиться монстр из проверок. А еще надо учесть, что текущая область уже не влезает, но она может быть достаточно большая, чтобы вставить пару пустых строк, чтобы колонтитул будет именно в конце страницы. И тогда после проверки на вставку "текущей области + колонтитул" надо будет еще добавить вставку пустых строк)
Вот вам еще пища для размышлений) |
|||
23
K1RSAN
24.11.20
✎
07:27
|
(22)+ но она может быть достаточно большая, чтобы вставить пару пустых строк, чтобы колонтитул будет именно в конце страницы*
но сама область достаточно большая, а потому даже если она не влезает - может быть место для пустых строк, иначе колонтитул окажется не в самом низу страницы, а грубо говоря - "в основной части" |
|||
24
Йохохо
24.11.20
✎
07:28
|
(21) для формы по доку с ТЧ обычно выводится верхний, потом шапка, потом в цикле надо выводить строки, и перед выводом строки проверить что влезет Облать1(новая выводимая строка + итоги+ подвал + колонтитул), если Область1 не влезает то выводим Область(Подвал+Колонтитул), она обязана влезать алгоритмически, потом разрывстраницы и инициализируем наполнение новой страницы. Код у тебя есть, выкинь куски чужого кода и реализуй свою логику
|
|||
25
Йохохо
24.11.20
✎
07:29
|
Область(промежуточныеИтоги+Колонтитул)
|
|||
26
NIGHTHUNTER
24.11.20
✎
07:33
|
(22) - (25) Спасибо, принимаю все для размышления. Буду приходить к верному решению.
|
|||
27
NIGHTHUNTER
24.11.20
✎
08:52
|
Если можно подскажите пожалуйста, какой тут заложен смысл, и что не доработанно? Я не понимаю.
Процедура ВыводСПроверкой(ТабДок,СекцияВывод) М = Новый Массив; М.Добавить(СекцияВывод); М.Добавить(СекцияНиз); // Проверим, уместится ли строка на странице или надо открывать новую страницу Если Не ТабДок.ПроверитьВывод(М) Тогда Если СекцияВывод=СекцияДоп Тогда Возврат КонецЕсли; ВыводСПроверкой(ТабДок,СекцияДоп); ТабДок.Вывести(СекцияНиз); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); ТабДок.Вывести(СекцияВерх); КонецЕсли; ТабДок.Вывести(СекцияВывод); Если СекцияВывод=СекцияДоп Тогда ВыводСПроверкой(ТабДок,СекцияДоп); КонецЕсли; |
|||
28
Йохохо
24.11.20
✎
09:08
|
на вход СекцияВывод, если она не влезает выводим СекцияДоп (до конца страницы? <- это не реализовано)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |