|
8.1 Печатная форма | ☑ | ||
---|---|---|---|---|
0
Wefast
03.04.15
✎
14:12
|
Суть такова.
на первой странице одна шапка. А на последующих другая Вывожу строки, делаю проверку поместится ли следующая строка. Если не поместится, вывожу шапку и заголовок таблицы. В шапке на первой странице нужно вывести сколько будет листов всего в итоге В шапке на 2 и последующих страницах должно выводится кол-во строк в табличной части на данной странице. Собственно как мне посчитать кол-во листов до того как я их выведу И как посчитать сколько строк на странице поместится до того как я их вывел. |
|||
1
Кирр
03.04.15
✎
14:45
|
Экспериментальным путем.
|
|||
2
bodri
03.04.15
✎
14:48
|
Если строго указать сколько строк будет помещаться на страницу, тогда проблем не вижу выяснить, сколько будет страниц/листов
|
|||
3
Wefast
03.04.15
✎
15:22
|
А если настройки принтера изменятся?
Можно запросом узнать сколько будет строк, но он только для этого и сгодится, срабатывать будет вечность на больших табличных документах |
|||
4
Wefast
03.04.15
✎
15:31
|
Первым запросом у меня берется табличная часть документа(номенклатура, характеристика)
Вторым запросом у меня берутся значения свойств характеристики (там мне нужен только вес и проба) Третьим запросом у меня берутся значения свойств (только "вставки (1,2,3,4,5 и т.д)" Мне нужно вывести номенклатура1 | характеристика | проба | вставка1 номенклатура1 | характеристика | проба | вставка2 номенклатура1 | характеристика | проба | вставка3 номенклатура2 | характеристика | проба | вставка Поэтому идет цикл перебора табличной части документа Потом идет цикл перебора этих вставок прос то условие И не в одном из этих запросов нет того кол-ва строк что у меня выведется в итоге |
|||
5
Кирр
03.04.15
✎
15:34
|
Количество элементов известно?
Предположи, что один элемент будет выводиться на 2 (или 3) строки. Если меньше, точно влезет. Больше чем в 2 (или 3) строки не должно быть. |
|||
6
dmpl
03.04.15
✎
15:35
|
(0) Табличный документ можно тоже менять. Запоминай координаты поля, где количество строк ставить надо и правь его после вывода.
|
|||
7
DrShad
03.04.15
✎
15:36
|
(0) посчитать Высоту табдока в мм и разделить на высоту листа
|
|||
8
Wefast
03.04.15
✎
16:00
|
(6) смотрю вот на возвращаемый Табличный Документ и на методы табличного документа и не могу понять как в нем теперь что то поменять перед выводом на печать то...
И высота там есть, она считается же в колличествах строк, да и где мне взять высоту будущего листа печати. |
|||
9
Wefast
03.04.15
✎
16:02
|
(5) Не известно, можно посчитать конечно запросом, но уж больно не оптимизировано, берется весь регистр сведений с характеристиками а потом накладывается отбор по нужным мне номенклатурам
|
|||
10
DrShad
03.04.15
✎
16:04
|
(8) высоту можно и в мм посчитать, если очень нужно, а высоту будущего листа печати узнать из параметров печати
|
|||
11
dmpl
04.04.15
✎
21:12
|
(8) Надо с помощью метода Область() получить ОбластьЯчеекТабличногоДокумента с нужными координатами, и уже ее править. Координаты можно получить, если анализировать результат метода Вывести() (он тоже возвращает ОбластьЯчеекТабличногоДокумента, результат нужен нам чтобы определить номер строки, с которого начался вывод этой области макета).
Ну или еще возможен вариант, когда сначала выводишь во временный документ области, а как накопится нужная высота - выводишь заголовок и временный ТД в основной документ. |
|||
12
echo77
05.04.15
✎
09:10
|
Я делал так:
Строил табличный документ в цикле на каждую страницу отдельно - результаты(табличные документы) помещал в массив. После того как все построил выводил все страницы в один табличный документ из массива |
|||
13
echo77
05.04.15
✎
09:11
|
p.s. В массив можно запихнуть не только табличный документ, но и структуру, содержащую в себе табличный документ и другие доп.свойства, типа количество строк в ТЗ
|
|||
14
Wefast
06.04.15
✎
14:38
|
(11) В итоге что то такое и проделал.
Если временный документы делать, мне кажется время работы удвоится, а он и так не шибко быстрый. Если вдруг кому интересно: Функция Печать() Экспорт НомерСтроки = 0; ПорядковыйНомер = 1; НомерСтраницы = 2; КолвоСтрокНаСтр = 0; Номенклатура = Справочники.Номенклатура.ПустаяСсылка(); ТабДокумент = Новый ТабличныйДокумент; ТабДокумент.ИмяПараметровПечати = "ИнвентаризационнаяОписьДрагМеталлов"; ТабДокумент.ЧерноБелаяПечать = Истина; ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет; Макет = ПолучитьМакет("Макет"); ОбластьШапкаРеквезиты = Макет.ПолучитьОбласть("ШапкаРевезиты"); ОбластьШапка = Макет.ПолучитьОбласть("Шапка"); ОбластьШапка2 = Макет.ПолучитьОбласть("Шапка2"); ОбластьРасписка = Макет.ПолучитьОбласть("Расписка"); ОбластьЗаголовокТаблицы = Макет.ПолучитьОбласть("ЗаголовокТаблицы"); ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); ЗапросИнвентаризации = Новый Запрос; ЗапросИнвентаризации.Текст = "ВЫБРАТЬ * |ГДЕ | ИнвентаризацияТоваровНаСкладеТовары.Ссылка = &Ссылка"; ЗапросИнвентаризации.УстановитьПараметр("Ссылка", СсылкаНаОбъект); РезультатЗапроса = ЗапросИнвентаризации.Выполнить(); ВыборкаОбъектов = РезультатЗапроса.Выбрать(); Организация = ВыборкаОбъектов; Организация.Следующий(); КоличествоСтрок = ВыборкаОбъектов.Количество(); ОбластьШапкаРеквезиты.Параметры.Заполнить(Организация); СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация.Организация, Организация.ДатаДокумента); ОбластьШапкаРеквезиты.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации); ОбластьШапкаРеквезиты.Параметры.ОрганизацияПоОКПО = СведенияОбОрганизации.КодПоОКПО; ОбластьШапкаРеквезиты.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации); ОбластьШапка.Параметры.Дата = "ПО СОСТОЯНИЮ НА «" + Формат(СсылкаНаОбъект.Дата,"ДФ='d MMMM'") + "» " + Формат(СсылкаНаОбъект.Дата,"ДФ=yyyy"+"г."); ТабДокумент.Вывести(ОбластьШапкаРеквезиты); ТабДокумент.Вывести(ОбластьШапка); ТабДокумент.Вывести(ОбластьРасписка); ТабДокумент.Вывести(ОбластьЗаголовокТаблицы); Пока ВыборкаОбъектов.Следующий() Цикл //Если у данной номерклатуры есть характеристика сработает расшифровка этой хар-ки Если НЕ ВыборкаОбъектов.вставка = NULL Тогда Структурище = РасшифровкаВставки(ВыборкаОбъектов.вставка.Наименование); КолвоКамней = Структурище.КолвоКамней; Масса = Структурище.Масса; Иначе КолвоКамней = ""; Масса = ""; КонецЕсли; ОбластьСтрока.Параметры.Заполнить(ВыборкаОбъектов); ОбластьСтрока.Параметры.КолвоКамней = КолвоКамней; ОбластьСтрока.Параметры.МассаКамня = Масса; ОбластьСтрока.Параметры.Номер = ПорядковыйНомер; ПорядковыйНомер = ПорядковыйНомер + 1; //Сравнивается номеклатура с предыдущей, если они равны то номер строки остается прежним Если ВыборкаОбъектов.Номенклатура = Номенклатура Тогда ОбластьСтрока.Параметры.НомерСтроки = НомерСтроки; Иначе НомерСтроки = НомерСтроки +1; ОбластьСтрока.Параметры.НомерСтроки = НомерСтроки; КонецЕсли; Номенклатура = ВыборкаОбъектов.Номенклатура; ТабДокумент.Вывести(ОбластьСтрока); КолвоСтрокНаСтр = КолвоСтрокНаСтр+1; Если НЕ ТабДокумент.ПроверитьВывод(ОбластьСтрока) Тогда ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ОбластьШапка2.Параметры.НомерЛиста = НомерСтраницы; ТабДокумент.Вывести(ОбластьШапка2); ТабДокумент.Вывести(ОбластьРасписка); ТабДокумент.Вывести(ОбластьЗаголовокТаблицы); //номер ячейки что предстоит изменить НомерЯчейки = (НомерСтраницы-2)*40+8; НомерСтраницы = НомерСтраницы +1; //Условие для того чтобы менять второй лист тогда когда начал выводится третий Если НомерСтраницы >3 ТОгда ТабДокумент.Область(НомерЯчейки,5,НомерЯчейки+1,5).Текст = КолвоСтрокНаСтр; КонецЕсли; КолвоСтрокНаСтр = 0; КонецЕсли; КонецЦикла; // Меняет склонение у "Листов" если кол-во страниц заканчивается на 1 Если Найти("1", Прав(ТабДокумент.КоличествоСтраниц(),1))>0 Тогда ТабДокумент.Область(14,11,14,11).Текст = "ЛИСТЕ"; КонецЕсли; //Вписывает на последнем листе кол-во строк что на нем, конечно если листов больше 1 Если НомерСтраницы > 2 Тогда НомерЯчейки = (НомерСтраницы-2)*40+8; ТабДокумент.Область(НомерЯчейки,5,НомерЯчейки+1,5).Текст = КолвоСтрокНаСтр; КонецЕсли; //Вписывает в данную ячейку кол-во страниц ТабДокумент.Область(14,10,14,10).Текст=ТабДокумент.КоличествоСтраниц(); ТабДокумент.Область(14,10,14,10).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр; Возврат ТабДокумент; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |