Имя: Пароль:
1C
 
Как сделать повтор на каждом листе шапку таблицы?
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
Недавно использовал ФиксацияСверху, ставил ее вконце после вывода всего макета:
ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);
   ТабДок.ФиксацияСверху=4;
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), раньше бы получилось. Успехов.