![]() |
![]() |
|
Как сделать повтор на каждом листе шапку таблицы? | ☑ | ||
---|---|---|---|---|
0
din107
27.05.10
✎
15:25
|
Добрый день!
Подскажите, не могу понять где ошибка. Мне нужно сделать так, чтобы, когда я печатаю документ, у меня повторялась шапка таблицы на каждой странице. Пишу следующий код: Макет = ПолучитьМакет("Макет"); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ... ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.Показать(); Где может быть ошибка? |
|||
1
IronDemon
27.05.10
✎
15:28
|
Область = Таблица.Область(КоличествоСтрокЗаголовка, ,КоличествоСтрокЗаголовка,);
Таблица.ПовторятьПриПечатиСтроки = Область; |
|||
2
Megas
27.05.10
✎
15:30
|
(0) А ты знаешь момент разрыва страницы?
(1) Вообще не понял что ты имеешь ввиду? |
|||
3
din107
27.05.10
✎
15:35
|
(2) нет, не знаю
|
|||
4
IronDemon
27.05.10
✎
15:53
|
ПовторятьПриПечатиСтроки это #Свойство табличного документа
|
|||
5
din107
27.05.10
✎
16:02
|
Попробовал вот так:
Макет = ПолучитьМакет("Макет"); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ... ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки; ТабДок.Показать(); |
|||
6
din107
27.05.10
✎
16:24
|
?
|
|||
7
din107
27.05.10
✎
16:45
|
??
|
|||
8
din107
27.05.10
✎
17:09
|
неужели никто не сталкивался?
|
|||
9
Alpinist22
27.05.10
✎
17:12
|
ТабличныйДокумент (SpreadsheetDocument)
ПовторятьПриПечатиСтроки (RepeatOnRowPrint) Использование: Чтение и запись. Описание: Тип: ОбластьЯчеекТабличногоДокумента. Содержит область строк, которая будет повторяться при печати каждого нового листа табличного документа. Сериализуется. |
|||
10
Alpinist22
27.05.10
✎
17:17
|
Недавно использовал ФиксацияСверху, ставил ее вконце после вывода всего макета:
ТабДок.ЗакончитьАвтогруппировкуСтрок();
|
|||
11
din107
27.05.10
✎
17:20
|
Я попробовал вот так:
Макет = ПолучитьМакет("Макет"); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ... ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки; ТабДок.Показать(); У меня не получилось. С фиксацией строки он у меня будет немного не то фиксировать |
|||
12
Шапокляк
27.05.10
✎
17:25
|
(11) У тебя есть область в макете "Повторять ПриПечатиСтроки"?
|
|||
13
Шапокляк
27.05.10
✎
17:27
|
Может быть она как-то иначе называется? "Заголовок" например?
Макет = ПолучитьМакет("Макет"); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть(ТУТ ДОЛЖНО БЫТЬ ИМЯ ПОВТОРЯЕМОЙ ОБЛАСТИ В КАВЫЧКАХ); ... ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки; ТабДок.Показать(); |
|||
14
dk
27.05.10
✎
17:29
|
имхо надо указывать область не макета, а область выводимого табл. документа
типа Макет = ПолучитьМакет("Макет"); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ... ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R2:R4"); ТабДок.Показать(); |
|||
15
acsent
27.05.10
✎
17:32
|
лучше так:
ПовторятьПриПечатиОбласть = ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиОбласть; ТабДок.Показать(); |
|||
16
dk
27.05.10
✎
17:33
|
ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R"+ТабДок.ВысотаТаблицы-ПовторятьПриПечатиСтроки.ВысотаТаблицы+1+":R"+ТабДок.ВысотаТаблицы);
ВысотаТаблицы |
|||
17
dk
27.05.10
✎
17:34
|
(15) угу
|
|||
18
din107
27.05.10
✎
17:47
|
В итоге получился вот такой код, но что-то и не заработало:
Макет = ПолучитьМакет("Макет"); ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.НомерДокумента = НомерДок; ТабДок.Вывести(ОбластьМакета); Область = ТабДок.Область(5,,5,); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ТабДок.Вывести(ПовторятьПриПечатиСтроки); ОбластьМакета = Макет.ПолучитьОбласть("Значение"); Если ЭлементыФормы.ТЧ.ОтборСтрок.Контейнер.Использование Тогда МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("Контейнер",ЭлементыФормы.ТЧ.ТекущиеДанные.Контейнер)); Иначе МассивСтрок = Новый Массив(); Для каждого ЭлементаТЧ Из ТЧ Цикл МассивСтрок.Добавить(ЭлементаТЧ); КонецЦикла; КонецЕсли; Ном = 1; ИтогоСумма = 0; Для каждого Элемент Из МассивСтрок Цикл ОбластьМакета.Параметры.Ном = Ном; ОбластьМакета.Параметры.Контейнер = Элемент.Контейнер; ОбластьМакета.Параметры.Сумма = Элемент.Сумма; ТабДок.Вывести(ОбластьМакета); Ном = Ном + 1; ИтогоСумма = ИтогоСумма + Элемент.Сумма; КонецЦикла; ПовторятьПриПечатиОбласть = ТабДок.Вывести(ПовторятьПриПечатиСтроки); ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиОбласть; ОбластьМакета = Макет.ПолучитьОбласть("Итого"); ОбластьМакета.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьМакета); ТабДок.ТолькоПросмотр = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.ФиксацияСверху = 5; //ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки; //ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R5C1:R5C5"); ТабДок.Показать(); |
|||
19
Шапокляк
27.05.10
✎
17:56
|
ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСТРОКИ;
вместо ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиОбласть; У тебя точно есть область с именем "ПовторятьПриПечатиСтроки"? |
|||
20
dk
27.05.10
✎
17:57
|
(19) мимо
|
|||
21
din107
27.05.10
✎
17:58
|
(19) да, точно, я даже специально копировал область и вставлял в модуль
|
|||
22
Шапокляк
27.05.10
✎
18:01
|
(21) макет покажи
|
|||
23
hhhh
27.05.10
✎
18:01
|
(16) нафига "R" пишешь?
ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(ТабДок.ВысотаТаблицы-ПовторятьПриПечатиСтроки.ВысотаТаблицы+1, , ТабДок.ВысотаТаблицы); |
|||
24
Megas
27.05.10
✎
18:02
|
Вообще спасибо за тему.. а то я тут недавно как троглодит делал =)
То есть загонял в массив весь вывод .. после каждой строки Массив проверял на "вместится ли на экран" если не вмещался то выводил "массив - последняя строка" в ТАБДОК , потом выводил шапку, выводил последнюю строку массива ,обнулял массив, и так до конца... правда круто ... гланды через жо*** |
|||
25
spu79
27.05.10
✎
18:09
|
ТабДокумент.ПроверитьВывод(ВыводимыеОбласти);
Возвращает булево. Встроенная функция проверки на то, что выводимая область помещается на экран... |
|||
26
spu79
27.05.10
✎
18:09
|
*на лист
|
|||
27
Шапокляк
27.05.10
✎
18:10
|
А есть ведь еще одна прикольная возможность.... Счас протестирую :) Думаю вообще без кода можно организовать
|
|||
28
din107
27.05.10
✎
18:10
|
(23) Спасибо, попробовал, но что-то не помогло:
ТабДок = Новый ТабличныйДокумент; НомерДок = ЭлементыФормы.Номер.Значение; Макет = ПолучитьМакет("Макет"); ОбластьМакета = Макет.ПолучитьОбласть("Заголовок"); ОбластьМакета.Параметры.НомерДокумента = НомерДок; ТабДок.Вывести(ОбластьМакета); ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечатиСтроки"); ТабДок.Вывести(ПовторятьПриПечатиСтроки); ОбластьМакета = Макет.ПолучитьОбласть("Значение"); Если ЭлементыФормы.ТЧ.ОтборСтрок.Контейнер.Использование Тогда МассивСтрок = ТЧ.НайтиСтроки(Новый Структура("Контейнер",ЭлементыФормы.ТЧ.ТекущиеДанные.Контейнер)); Иначе МассивСтрок = Новый Массив(); Для каждого ЭлементаТЧ Из ТЧ Цикл МассивСтрок.Добавить(ЭлементаТЧ); КонецЦикла; КонецЕсли; Ном = 1; ИтогоСумма = 0; Для каждого Элемент Из МассивСтрок Цикл ОбластьМакета.Параметры.Ном = Ном; ОбластьМакета.Параметры.Контейнер = Элемент.Контейнер; ОбластьМакета.Параметры.Сумма = Элемент.Сумма; ТабДок.Вывести(ОбластьМакета); Ном = Ном + 1; ИтогоСумма = ИтогоСумма + Элемент.Сумма; КонецЦикла; //ПовторятьПриПечатиОбласть = ТабДок.Вывести(ПовторятьПриПечати); //ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиОбласть; ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область(ТабДок.ВысотаТаблицы-ПовторятьПриПечатиСтроки.ВысотаТаблицы+1, , ТабДок.ВысотаТаблицы); ОбластьМакета = Макет.ПолучитьОбласть("Итого"); ОбластьМакета.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьМакета); ТабДок.ТолькоПросмотр = Истина; ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ТабДок.ФиксацияСверху = 5; //ТабДок.ПовторятьПриПечатиСтроки = ПовторятьПриПечатиСтроки; //ТабДок.ПовторятьПриПечатиСтроки = ТабДок.Область("R5C1:R5C5"); ТабДок.Показать(); |
|||
29
Megas
27.05.10
✎
18:13
|
(25) Ну я так и делал... можно загонять области в массив(можно и массив проверять), но походу так слишком "курто через жо**"
|
|||
30
Шапокляк
27.05.10
✎
18:15
|
ТабДокумент.ПовторятьПриПечатиСтроки = ТабДокумент.Область("ЗаголовокТаблицы");
Вот у меня так работает во всей конфигурации |
|||
31
din107
27.05.10
✎
18:21
|
(30) Большое спасибо!!!Именно так получилось!!!
|
|||
32
Шапокляк
27.05.10
✎
18:29
|
(31) вот сразу бы посмотрел (13), раньше бы получилось. Успехов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |