Имя: Пароль:
   
1C
1С v8
Печатная форма на нескольких страницах
0 andrew231
 
21.02.13
15:00
Добрый день всем! Столкнулся с такой задачей:
Есть Технологическая карта которую нужно распечатать. Она размещается на 2х и более листах таб документа. Как сделать чтобы на первой странице размещалась одна шапка а на другой и последующих другая шапка.Ну и как вообще это все организовывается?Пример:

страница1
Шапка1
СТРОЧКИ:
1 Сборочная операция
2 Цех1 (рабочий центр)
3 Сборка1 (тех переход)
4 Инструмент1
5 Инструмент2

страница 2
Шапка2
строчки:
6 Укомплектовочная операция
7 Цех2
...
итд
страница 3
шапка2
...
итд


Спасибо большое!
1 ScreamSaw
 
21.02.13
16:15
Почитай синтаксис-помощник, ТабличныйДокумент.ПовторятьПриПечатиСтроки, похоже на оно.
2 ScreamSaw
 
21.02.13
16:21
По-моему, будет как-то так:

ТабличныйДокумент.ПовторятьПриПечатиСтроки =  ТабличныйДокумент.Область("ОбластьШапка");
3 Byasha
 
21.02.13
16:28
(2) Ему разные шапки нужны.
4 andrew231
 
21.02.13
16:28
(3) верно. а можно ли как то определить текущую страницу таб документа?
5 andrew231
 
21.02.13
16:29
чтобы поставить условие если текущаястраница таб документа<>1 тогда ...
6 andrew231
 
21.02.13
16:34
ну или другие варианты...
7 Byasha
 
21.02.13
16:43
Только программно формировать страницы. Используй метод ВывестиГоризонтальныйРазделительСтраниц().

ТабДокумент.Вывести(Шапка1)
ТабДокумент.Вывести(Страница1)

Пока ... Цикл
   ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц()
   ТабДокумент.Вывести(Шапка2)
   ТабДокумент.Вывести(СтраницаN)
КонецЦикла;
8 andrew231
 
21.02.13
17:02
я немного не понял код! можно подробнее
9 Byasha
 
21.02.13
17:04
Так. Вопрос на засыпку. Вы пользователь или программист?
10 andrew231
 
21.02.13
17:23
я не понял как он будет работать ведь строки страницы1 тоже выводятся в цикле . и как определить страница1
11 andrew231
 
21.02.13
17:24
я программист который учится
12 andrew231
 
21.02.13
17:28
Для каждого Строка Из Маршрут Цикл
       
       //Если ТабДокумент.КоличествоСтраниц()>1 Тогда
       //    ТабДокумент.РазмерСтраницы
       //КонецЕсли;
       //параметры
       СекцияОперация.Параметры.Операция=Строка.ТехнологическаяОперация;
       СекцияРабочийЦентр.Параметры.РабочийЦентр=Строка.РабочийЦентр;
               //вывод
       ТабДокумент.Вывести(СекцияОперация);
       ТабДокумент.Вывести(СекцияРабочийЦентр);
       Если НЕ ПустаяСтрока(Строка.Оснастка) Тогда
           СекцияОснастка.Параметры.Оснастка=Строка.Оснастка;
           ТабДокумент.Вывести(СекцияОснастка);
       КонецЕсли;
       СекцияПрофессия.Параметры.Профессия=Строка.Профессия;
       ТабДокумент.Вывести(СекцияПрофессия);
       Для каждого СтрокаТехПереходы Из ТехПереходы Цикл
           Если Строка.ТехПереход=СтрокаТехПереходы.Код Тогда
               СекцияТехПереход.Параметры.ТехПереход=СтрокаТехПереходы.НаименованиеТехПерехода;
               ТабДокумент.Вывести(СекцияТехПереход);
               Для каждого СтрокаИнструменты Из Инструменты Цикл
                   Если СтрокаТехПереходы.Инструменты=СтрокаИнструменты.Код Тогда
                       СекцияИнструмент.Параметры.Инструмент=СтрокаИнструменты.НаименованиеИнструмента;
                       ТабДокумент.Вывести(СекцияИнструмент);
                   КонецЕсли;  
               КонецЦикла;
           КонецЕсли;
       КонецЦикла;
       ТабДокумент.Вывести(СекцияПробел);
   КонецЦикла;
13 andrew231
 
21.02.13
17:30
здесь последовательно выводятся данные из трех таблиц. как мне здесь вставить ваш вариант решения?
14 Byasha
 
21.02.13
18:43
Хм, Вы хотите что бы за Вас написали код? Я Вам написал примерную логику.

Могу описать словами.
1. Формируем первую страницу на которой выводим первый заголовок и нужную нам информацию.
2. Выводим горизонтальный разделитель страниц.
3. В цикле или нескольких циклах формируем другие страницы, в которых выводим информацию которая должна на них присутствовать. Что бы физически разделить страницы в первой строке цикла вставляем команду, которая системе дает явное указание на то, что нужно начать новую страницу. После этой команды выводим область нужной нам шапки страницы. И области в которых находится построчная информация.

Как то так.
Разбирать код который Вы перепостили из конфигурации, и пытаться понять куда воткнуть разделитель страниц, мне честно говоря лениво. Какой метод использовать - тоже написано. Вам остается только в тот код который Вы сюда запостили, в НУЖНЫХ местах вставить вывод нужной шапки и разделителя страниц. А вот где эти нужные места - придется думать Вам.
15 andrew231
 
21.02.13
19:01
(14) "Формируем первую страницу на которой выводим первый заголовок и нужную нам информацию. " - как определить что первая страница сформирована?
16 zmaximka
 
21.02.13
19:15
Может проверитьвывод() подойдет?
17 Byasha
 
21.02.13
19:36
(15)Хм... Допустим, есть некий набор объектов, с произвольным количеством. Нужно понять влезет ли этот набор на страницу или нет. Можно изгаляться, а можно жестко определить что на одну страницу выводится определенное число строк. В цикле, где выводим области макета (строки с объектами), вставляем приращение счетчика. Когда он достигает некоего граничного значения - выводим разделитель страниц, выводим шапку новой страницы, и обнуляем сам счетчик. Такой же принцип используется и при формировании ТОРГ-12 в типовых конфах. Просто и "в лоб". Если уж очень нужна красивая форма - нужно будет использовать какой-то иной принцип расчета количества информации на листе. Но, я так понимаю, в настоящее время стоит задача просто вывести листы с различными шапками.

(16)
ПроверитьВывод(<Таблицы>)
Параметры:
<Таблицы> (обязательный)
Тип: Массив; ТабличныйДокумент.
Массив из проверяемых таблиц или табличный документ.
Возвращаемое значение:
Тип: Булево.
Истина - умещаются; Ложь - в противном случае.
Описание:
Проверяет, умещаются ли переданные табличные документы на страницу при печати.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Примечание:
При возникновении проблем с получением информации о текущем принтере (например, в системе не установлено ни одного принтера), будет вызвано исключение.

Ну и что, получит он инфу о том, что таблица на странице не умещается, и что с ней дальше делать? Ему же нужно все-таки ее распечатать. Да еще и с различными шапками на каждом листе.

ЗЫ. А сейчас в школах или вузах информатику не преподают что-ли? Я блок схемы и алгоритмы в 8-ом классе рисовал.
18 andrew231
 
25.02.13
11:26
(17) Хм... ПроверитьВывод(). А что если перед выводом очередной строки в таблицу проверять, поместится ли эта строка на текущую страницу или ее нужно переносить на следующую. Для этого ж и нужен ПроверитьВывод();

Если поместиться - строка выводится, если нет - выводится строка итогов по странице и вставляется горизонтальный разделитель страниц (признак того, что последующие строки нужно печатать на следующей странице). Буду пробовать!!!
19 andrew231
 
25.02.13
11:28
(18) а от этого условия уже можно отткалкиваться как угодно