Имя: Пароль:
1C
1С v8
Вывод шапки на каждой странице
,
0 zarel
 
05.10.12
16:13
Нужно печатать шапку на каждой странице, а печатается только на первых двух, не могу понять в чем дело, сам еще пока зеленый в конфигурировании.

Вот код для печати макета:

Функция ПечатьТ5а(ИмяМакета)

   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ПолеСлева = 0;
   ТабДокумент.ПолеСправа = 0;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КадровоеПеремещениеОрганизации_Т5а";
   ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

   // получаем данные для печати
   ВыборкаДляШапки = СформироватьЗапросДляПечати("ПоРеквизитамДокумента").Выбрать();
   ВыборкаРаботники = СформироватьЗапросДляПечати("ПоТабличнойЧастиДокумента").Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   // подсчитываем количество страниц документа - для корректного разбиения на страницы
   ВсегоСтрокДокумента = ВыборкаРаботники.Количество();

   // запоминаем области макета
   Макет = ПолучитьМакет(ИмяМакета);
   ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка"); // Шапка документа.
   ПовторятьПриПечатиСтроки = Макет.ПолучитьОбласть("ПовторятьПриПечати"); // повторяющаяся шапка страницы
   ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");// Подвал документа
   ОбластьМакета = Макет.ПолучитьОбласть("СтрокаРаботник"); // строка работника

   // массив с двумя строками - для разбиения на страницы
   ВыводимыеОбласти = Новый Массив();
   ВыводимыеОбласти.Добавить(ОбластьМакета);
   
   // выводим данные о руководителях организации
   Если ВыборкаДляШапки.Следующий() Тогда
       ОбластьМакетаШапка.Параметры.Заполнить(ВыборкаДляШапки); // Шапка документа.
       ОбластьМакетаШапка.Параметры.НазваниеОрганизации    = СокрЛП(ОбластьМакетаШапка.Параметры.НазваниеОрганизации);
       ОбластьМакетаПодвал.Параметры.Заполнить(ВыборкаДляШапки);// Для подвала.
   КонецЕсли;

   // Начинаем формировать выходной документ
   ТабДокумент.Вывести(ОбластьМакетаШапка); // Шапка документа.

   ВыведеноСтрок = 0;
   // выводим строки по работникам
   Пока ВыборкаРаботники.Следующий() Цикл

       ВложеннаяВыборка = ВыборкаРаботники.Выбрать();
       ВложеннаяВыборка.Следующий();
       
       // Данные по работнику.
       ОбластьМакета.Параметры.Заполнить(ВложеннаяВыборка);
       
       РезультатСклонения = "";
       Если УниверсальныеМеханизмы.Просклонять(глЗначениеПеременной("глКомпонентаСклоненияФИО"), ВложеннаяВыборка.Работник, 4,ВложеннаяВыборка.ФизЛицоПол, РезультатСклонения) Тогда
           ОбластьМакета.Параметры.Работник    = РезультатСклонения
       КонецЕсли;
       
       Если ЗначениеЗаполнено(ВложеннаяВыборка.ОкладТарифнаяСтавка) Тогда
           Если ЗначениеЗаполнено(ВложеннаяВыборка.ВалютаТарифнойСтавки) Тогда
               СтрокаВалюты = "" + ВложеннаяВыборка.ВалютаТарифнойСтавки;
               ОбластьМакета.Параметры.ОкладТарифнаяСтавка = "" + Формат(ВложеннаяВыборка.ОкладТарифнаяСтавка,"ЧЦ=15; ЧДЦ=2; ЧН=' '") + " (" + ?(ВложеннаяВыборка.ТребуетВводаТарифногоРазряда, ВложеннаяВыборка.ТарифныйРазряд + ", ", "") + СтрокаВалюты + ")" ;
           Иначе
               СтрокаВалюты = Символы.ПС + "(" + ВложеннаяВыборка.ВалютаТарифнойСтавки +")";
               ОбластьМакета.Параметры.ОкладТарифнаяСтавка = "" + Формат(ВложеннаяВыборка.ОкладТарифнаяСтавка,"ЧЦ=15; ЧДЦ=2; ЧН=' '") + ?(ВложеннаяВыборка.ТребуетВводаТарифногоРазряда, " (" + ВложеннаяВыборка.ТарифныйРазряд + ")" , "");
           КонецЕсли;
       КонецЕсли;
       
       Если ЗначениеЗаполнено(ВложеннаяВыборка.РазмерНадбавки) Тогда
           
           ТекстЯчейки = ОбластьМакета.Параметры.ОкладТарифнаяСтавка;
           ТекстЯчейки = "" + ТекстЯчейки + "," + Символы.ПС + ВложеннаяВыборка.РазмерНадбавки;
           
           Если ВложеннаяВыборка.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом Тогда
               ТекстЯчейки = ТекстЯчейки + "(%)"
           Иначе    
               ТекстЯчейки = ТекстЯчейки + ?(ЗначениеЗаполнено(ВложеннаяВыборка.ВалютаНадбавки)," (" + ВложеннаяВыборка.ВалютаНадбавки+")","");
           КонецЕсли;
           
           ОбластьМакета.Параметры.ОкладТарифнаяСтавка = ТекстЯчейки;
       КонецЕсли;    
       
       
       //уберем из табельного номера префикс
       ОбластьМакета.Параметры.ТабельныйНомер = ВложеннаяВыборка.ТабельныйНомер;
       
       // разбиение на страницы
       ВыведеноСтрок = ВыведеноСтрок + 1;
       
       // Проверим, уместится ли строка на странице или надо открывать новую страницу
       ВывестиПодвалЛиста = Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
       Если Не ВывестиПодвалЛиста и ВыведеноСтрок = ВсегоСтрокДокумента Тогда
           ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
           ВывестиПодвалЛиста = Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
       КонецЕсли;
       Если ВывестиПодвалЛиста Тогда
           ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
           ТабДокумент.Вывести(ПовторятьПриПечатиСтроки);
       КонецЕсли;
       
       ТабДокумент.Вывести(ОбластьМакета);

       
       Если ИмяМакета = "Т5а_от_5_1_2004" И ЗначениеЗаполнено(ВложеннаяВыборка.ОснованиеПеремещения) Тогда
           ВысотаДока = ТабДокумент.ВысотаТаблицы;
           ОбластьДокумента = ТабДокумент.Область(ВысотаДока,14,ВысотаДока,17);
           ОбластьДокумента.Объединить();
           ОбластьДокумента.Текст = ВложеннаяВыборка.ОснованиеПеремещения;
       КонецЕсли;

   КонецЦикла;

   // если не было ни одного работника - выводим пустой бланк
   ВыводимыеОбласти = Новый Массив();
   ВыводимыеОбласти.Добавить(ОбластьМакета);
   ВыводимыеОбласти.Добавить(ОбластьМакетаПодвал);
   Для Сч = 1 По ОбластьМакета.Параметры.Количество() Цикл
       ОбластьМакета.Параметры.Установить(Сч - 1,"");
   КонецЦикла;
   ОбластьМакета.Параметры.Работник = " " + Символы.ПС + " ";
   Пока ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, Ложь) Цикл
       ТабДокумент.Вывести(ОбластьМакета);
   КонецЦикла;
   
   // выводим предварительно подготовленный Подвал документа.
   ТабДокумент.Вывести(ОбластьМакетаПодвал);
   Возврат ТабДокумент;

КонецФункции // ПечатьТ5а()
1 Spieluhr
 
05.10.12
16:18
а мысли-то есть какие-нибудь?
2 zarel
 
05.10.12
16:20
(1) Пока мыслей никаких, пытаюсь понять - читаю руководство разработчика... сроки поджимают... думаю может кто сможет помочь... а то я уже два дня ковыряюсь над этой темой...
3 zarel
 
05.10.12
16:23
to(1) вообще очень странно что печатается первая страничка нормально и вторая, а третья без шапки...
вот снапшот макета:
http://savepic.su/2577262.htm
4 KARSH
 
05.10.12
16:24
ТабличныйДокумент (SpreadsheetDocument)
ПовторятьПриПечатиСтроки (RepeatOnRowPrint)
Использование:

Чтение и запись.
Описание:

Тип: ОбластьЯчеекТабличногоДокумента.
Содержит область строк, которая будет повторяться при печати каждого нового листа табличного документа.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
5 YF
 
05.10.12
16:25
(4) У него же там разбиение на страницы само-хитро-выдуманное
6 Defender aka LINN
 
05.10.12
16:26
(5) ну и что?
7 zarel
 
05.10.12
16:26
to (4) запускается все на толстом клиенте и пользователей и у админов... так что проблема не в этом... тем более в настройках выставлено управляемое и обычное приложение... так что все поддерживается без проблем :)
8 KARSH
 
05.10.12
16:27
(5) при выводе через ПовторятьПриПечатиСтроки все равно какое разбиение на страницы, как только новая будет выводиться будут выводится повторяемые строки
9 Deon
 
05.10.12
16:28
(7) Чего отладчик говорит про ВывестиПодвалЛиста на тех листах, где шапочки нет?
10 Deon
 
05.10.12
16:29
(8) Похоже туда не заходит и разрыв страницы тоже не выводится
11 YF
 
05.10.12
16:30
(8) Это понятно, но

Вот он своим хитрым алгоритмом посчитал, что будет 3 страницы, но еще же шапка выведется и может случиться, что страницы станет 4, причем на последней будет только шапка и подписи ...
12 zarel
 
05.10.12
16:30
to (7) зеленый я пока.. два месяца ковыряний в 1с...
нужно посмотреть значение переменной ПодвалЛиста ?
13 Deon
 
05.10.12
16:33
(12) Не, вот в этом месте:
// Проверим, уместится ли строка на странице или надо открывать новую страницу
ВывестиПодвалЛиста = Не ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти);
У тебя переменная ВывестиПодвалЛиста не принимает значение Истина при переходе на 3й лист. Срабатывает, видимо, только после 1го листа
14 zarel
 
08.10.12
09:02
(13) спасибо, сейчас буду смотреть :)
15 zarel
 
09.10.12
09:13
(13) Подвал печатается нормально, но вот область "ПовторятьПриПечати" выводится на печать только на первой и второй странице, на третьей не выводится, разве Подвал как то может влиять на печать шапки ?
16 zarel
 
09.10.12
13:45
(13) Спасибо огромное :)
17 zarel
 
09.10.12
13:50
Возникает следующий вопрос - как задать переменной ВывестиПодвалЛиста значение Истина когда текущая печатаемая страничка будет = 3 ?
Нужно наверное строки массивом разбивать на страницы, только я пока не знаю как это сделать.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.