Количество страниц в табличном документе

1. Di_Denis 32 28.09.15 05:21 Сейчас в теме
Прошу помощи! Как можно подсчитать количество страниц в табличном документе, не используя СКД и колонтитулы. (управляемые формы)!?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. cargobird 306 28.09.15 07:59 Сейчас в теме
(1) Di_Denis, количество страниц штука условная, зависит от настроек принтера и самого принтера.
Поэтому обычно используется свойство табличного документа ПроверитьВывод, которое возвращает истину, если удалось поместить переданные данные на страницу.
Примерно так:
		Если НЕ ТабДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
			НомерСтраницы	= НомерСтраницы + 1;
			ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
			ЗаголовокТаблицы.Параметры.НомерСтраницы = "Страница " + НомерСтраницы;
			ТабДокумент.Вывести(ЗаголовокТаблицы);
		КонецЕсли;
3. пользователь 28.09.15 07:59
Сообщение было скрыто модератором.
...
11. Ivanovag123 29.09.15 16:19 Сейчас в теме
(1) Di_Denis,
попробуй в синтаксис-помощнике набрать "Принтер". Там вроде всё есть...
12. Di_Denis 32 29.09.15 16:31 Сейчас в теме
(11) Ivanovag123, Набрал, ничего....
13. cargobird 306 29.09.15 20:36 Сейчас в теме
14. Di_Denis 32 30.09.15 04:10 Сейчас в теме
(13) cargobird, ну это с импользованием колонтитула, а как без него
4. Nitralove 28.09.15 09:15 Сейчас в теме
Именно количество, а не вывести нумирацию?
ТаблДок.КоличествоСтраниц()
kas1989; Ujine1313; +2 Ответить
5. Di_Denis 32 28.09.15 10:52 Сейчас в теме
Да вот и проблема.. нумерацию могу сделать а количество страниц нет
6. Di_Denis 32 28.09.15 10:55 Сейчас в теме
Была идея следующая, но дурацкая. Так как отчет формируется быстро, где то за секунду, то думал сделать следующим образом.. Сформировать отчет посчитать сколько страниц всего, но не показывать его. А потом повторно сформировать его и уже вывести количестов страниц, которые были в первый раз.
8. herfis 499 28.09.15 13:25 Сейчас в теме
(6) Di_Denis, Не понял, почему нельзя колонтитулы использовать. Но можно и так, необязательно второй раз формировать. Можно выводить что-то типа "<ВсегоСтраниц>, а после вывода заменить на правильное через НайтиТекст().
9. Nitralove 28.09.15 16:31 Сейчас в теме
Согласна с (8) herfis
По моему еще через именованные области можно.
10. Di_Denis 32 29.09.15 16:09 Сейчас в теме
(8) herfis, Ну можно и так. А колонтитул стандартный нельзя и использовать, я его просто настроить не могу правильно... я его и так и сяк крутил вот пример

Ну если кто подскажет как его сделать буду рад, первый раз использую колонтитулы в 1с!?
17. tusv 211 17.05.19 12:46 Сейчас в теме
(6)Почему брендовая идея. Я так делал. Только не дважды формировать, а через промежуточные табличные документы. Вывести же можно не только Область, но и весь Табличный документ
ТабДок = Новый ТабличныйДокумент;
ВремТабДок = ВыестиОтчет(); //типа функция такая , которая возвращает табличный документ отчета
КоличествоСтраниц = ВремТабДок .КоличествоСтраниц();
ТабДок.Вывести(ВремТабДок);
7. Nitralove 28.09.15 11:03 Сейчас в теме
Т.е. количество нужно вывести где-то в начале так что ли?
15. Dnki 4 30.09.15 06:29 Сейчас в теме
К сожалению, наши бух. бланки пестрят такими текстами "Лист 1 из 8". Их разработчики понятия не имели, что программы печатают от первого листа к последнему и "не любят" возвращаться.

Будьте проще: рассчитайте заранее. Это возможно, если все строки фиксированной высоты.
Пример:
СтрокМакс = 10;
Листов = Цел((ТаблицаТовары.Количество()-1) / СтрокМакс) + 1;

Более тонкий случай, когда на первом листе строк меньше, чем на остальных.
16. olololeg 17.05.19 10:16 Сейчас в теме
Для вывода в ТабДокументе нумерации страниц типа (Страница N из ВсегоСтраниц) реализация была следующая.
1) Создали область макета "Колонтитул" с шаблоном Страница [Стр] из %КоличествоСтраниц
2) В коде:
ОбластьКолонтитулы = Макет.ПолучитьОбласть("Колонтитул");
Стр = 1;
ОбластьКолонтитулы.Параметры.Стр   = Стр;
ТабДокумент.Вывести(ОбластьКолонтитулы);

//Заполнение табличного документа каждая область проверяется (или область как например заполнение таб.части от которой зависит кол.во страниц) к примеру "ОбластьСтрока"
Если ТабДокумент.ПроверитьВывод(ОбластьСтрока) Тогда //Проверяем влезет ли область на страницу если да то выводим, если нет то печатаем на новой странице
		ТабДокумент.Вывести(ОбластьСтрока);
Иначе	
		ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); 
		Стр = Стр + 1;
                ОбластьКолонтитулы.Параметры.Стр   = Стр;
		ТабДокумент.Вывести(ОбластьКолонтитулы);
		ТабДокумент.Вывести(ОбластьСтрока);
КонецЕсли;	

//Далее идет последующее заполнение
//перед выводом на печать когда все области макета выведены узнаем количество страниц

	КоличествоСтраниц = ТабДокумент.КоличествоСтраниц(); //Получаем кол-во страниц

	Для Счетчик = 1 По КоличествоСтраниц Цикл //Циклом будем переберать все страницы и заменять в них текст 
		НайденнаяОбласть = ТабДокумент.НайтиТекст("%КоличествоСтраниц"); //В макете мы указали данный текст
			Если НайденнаяОбласть <> Неопределено тогда
			НайденныйТекст = НайденнаяОбласть .Текст;	
			Результат = СтрЗаменить(НайденныйТекст ,"%КоличествоСтраниц",КоличествоСтраниц); 
			НайденнаяОбласть .Текст = Результат;     	
		КонецЕсли;
	КонецЦикла;

	//Отправляем на печать, в УТ 10,3 Это
	УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, 1, Ложь, "ВашеНазваниеПФ"); // Данная процедура может отличаться.	

Показать
Santa1; Deda; e-9; user1280116; zoikins; user1088651; chemezov; RealRet; Adrenal1n; +9 Ответить
22. zoikins 12.01.23 06:29 Сейчас в теме
(16) Добрый день, 8 лет прошло, но спасибо)))))
23. user1911355 17.02.23 14:42 Сейчас в теме
(22) И где же ты был эти 8 лет?
18. GV. 1 15.01.20 14:30 Сейчас в теме
Альтернативный очень похожий вариант вывода нижнего колонтитула в виде области при массовой печати документов.
1) Шаблон в области "НижнийКолонтитул": [НомерСтраницыДокумента] / %ВсегоСтраницВДокументе
2) В коде цикла по выводу содержимого каждого документа:

		////////// Область Строка //////////
		
		// Инициализация счетчика строк
		НомерСтроки     = 0;
		КоличествоСтрок = ТаблицаДокумента.Количество();
		
		Для Каждого Стр Из ТаблицаДокумента Цикл
			
			НомерСтроки = НомерСтроки + 1;

			// Заполнение строки табличной части

			// Проверим вывод
			СтрокаСПодвалом = Новый Массив;
			Если НомерСтроки = 1 Тогда
				СтрокаСПодвалом.Добавить(ОбластьМакетаЗаголовокТаблицы); // если первая строка, то должен
			КонецЕсли;                                                   // помещаться заголовок
			СтрокаСПодвалом.Добавить(ОбластьМакетаСтрока);
			Если НомерСтроки = КоличествоСтрок Тогда           			 // если последняя строка, должны
				СтрокаСПодвалом.Добавить(ОбластьМакетаИтоги);  			 // помещаться подвал документа и нижний колонтитул
				СтрокаСПодвалом.Добавить(ОбластьМакетаПодвал);
				СтрокаСПодвалом.Добавить(ОбластьМакетаНижнийКолонтитул);
			КонецЕсли;
			
			Если НЕ ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, СтрокаСПодвалом) Тогда
				
				Если КоличествоСтрок > 1 Тогда
					
					////////// Область НижнийКолонтитул //////////
					
					// Добавляем пустые строки пока ОбластьМакетаНижнийКолонтитул не станет последней строкой на странице
					ПустаяСтрокаСКолонтитулом = Новый Массив;
					ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаПустаяСтрока);
					ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаНижнийКолонтитул);
					ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
					Пока ПомещаетсяПустаяСтрока Цикл
						ТабличныйДокумент.Вывести(ОбластьМакетаПустаяСтрока);
						ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
					КонецЦикла;
					
					ОбластьМакетаНижнийКолонтитул.Параметры.НомерСтраницыДокумента = НомерСтраницыДокумента;
					ТабличныйДокумент.Вывести(ОбластьМакетаНижнийКолонтитул);
					
					ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
					
					НомерСтраницыДокумента = НомерСтраницыДокумента + 1;
					
					////////// Область ЗаголовокТаблицы //////////
					
					ТабличныйДокумент.Вывести(ОбластьМакетаЗаголовокТаблицы);
					
				КонецЕсли;
				
			КонецЕсли;
			
			ТабличныйДокумент.Вывести(ОбластьМакетаСтрока);

		КонецЦикла;
		
		// Последующее заполнение документа: итогов, подвала и т.п.
		
		////////// Область НижнийКолонтитул //////////
		
		// Добавляем пустые строки пока ОбластьМакетаНижнийКолонтитул не станет последней строкой на странице
		ПустаяСтрокаСКолонтитулом = Новый Массив;
		ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаПустаяСтрока);
		ПустаяСтрокаСКолонтитулом.Добавить(ОбластьМакетаНижнийКолонтитул);
		ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
		Пока ПомещаетсяПустаяСтрока Цикл
			ТабличныйДокумент.Вывести(ОбластьМакетаПустаяСтрока);
			ПомещаетсяПустаяСтрока = ОбщегоНазначения.ПроверитьВыводТабличногоДокумента(ТабличныйДокумент, ПустаяСтрокаСКолонтитулом);
		КонецЦикла;
		
		ОбластьМакетаНижнийКолонтитул.Параметры.НомерСтраницыДокумента = НомерСтраницыДокумента;
		ТабличныйДокумент.Вывести(ОбластьМакетаНижнийКолонтитул);
		
		// Подставим общее количество страниц в документе в колонтитулы
		ОбластьВсегоСтраницВДокументе = ТабличныйДокумент.НайтиТекст("%ВсегоСтраницВДокументе");
		Пока ОбластьВсегоСтраницВДокументе <> Неопределено Цикл
			ОбластьВсегоСтраницВДокументе.Текст = СтрЗаменить(ОбластьВсегоСтраницВДокументе.Текст, "%ВсегоСтраницВДокументе", НомерСтраницыДокумента);
			ОбластьВсегоСтраницВДокументе = ТабличныйДокумент.НайтиТекст("%ВсегоСтраницВДокументе");
		КонецЦикла;		
Показать
starponyx; +1 Ответить
19. Di_Denis 32 17.01.20 04:12 Сейчас в теме
(18) Добрый день! 5 лет прошло, но спасибо)))))
20. chemezov 47 06.04.21 09:06 Сейчас в теме
Добрый день! 6 лет прошло, но спасибо))
21. user-sergey 47 06.04.22 14:10 Сейчас в теме
Добрый день, 7 лет прошло, но спасибо))
24. Deda 421 29.06.23 10:23 Сейчас в теме
(21) 2 мес и 23 дня прошло, спасибо! как раз вовремя :)
25. Ansver 18.10.23 10:23 Сейчас в теме
Добрый день, 8 лет прошло, но спасибо))
26. Di_Denis 32 20.10.23 06:44 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот