Некорректно работает метод ПроверитьВывод()

1. ger_kar 10.08.15 07:26 Сейчас в теме
Суть проблемы в следующем: Если выводить области не используя Горизонтальный разделитель страниц, то печатный макет формируется как нужно, но при печати сам драйвер принтера делит его на страницы некорректно и в итоге часть последней строки выводится на предыдущей странице, а часть на следующей. Т.е. происходит разрыв прямо посередине табличной строки.
Решил поделить на страницы самостоятельно, используя чудесный инструмент "ТабДокумент.ПроверитьВывод", но с ним получается другая заморочка. Да на страницы все теперь делится, но опять не так как надо. Страницы заполнены от силы на 2/3, а нижняя часть остается пустой. Как я не пытался это победить ничего не вышло.
Формирование макета делал так (код привожу в сокращении):
...
//Области Документа
ШапкаДокумента  = Макет.ПолучитьОбласть("ШапкаДокумента");
ШапкаТаблицы    = Макет.ПолучитьОбласть("ШапкаТаблицы");
Детали 			= Макет.ПолучитьОбласть("Детали");
ПодвалДокумента = Макет.ПолучитьОбласть("Подвал");
	
// Создание и формирование табличного документа
ТабДок = Новый ТабличныйДокумент;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
ТабДок.АвтоМасштаб = Истина;
ТабДок.РазмерКолонтитулаСверху = 0;
ТабДок.РазмерКолонтитулаСнизу  = 0;
	
МассивВыводимыхОбластей = Новый Массив;

//Заполнение параметров областей шапки ...

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

...

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

КонецФункции


Функция ПроверитьВыводТабличногоДокумента(ТабДок, ВыводимыеОбласти, РезультатПриОшибке = Истина)

	Попытка
		Возврат ТабДок.ПроверитьВывод(ВыводимыеОбласти);
	Исключение
		Возврат РезультатПриОшибке;
	КонецПопытки;

КонецФункции
Показать


Возникает закономерный вопрос, почему у метода ПроверитьВывод такое странное поведение? И как это можно вылечить?
Вывод осуществляется на лист формата А4
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. YNik 11.08.15 00:58 Сейчас в теме
(1) ger_kar, в МассивВыводимыхОбластей надо добавлять то, что надо добавить к ТабДок, а не весь вывод, шапка там совсем не нужна:
МассивВыводимыхОбластей = Новый Массив;

//Заполнение параметров областей шапки ...

// Вывод областей
ТабДок.Вывести(ШапкаДокумента, ВыборкаДокументов.Уровень());
ТабДок.Вывести(ШапкаТаблицы, ВыборкаДокументов.Уровень());
...

// Формирование таблицы
Пока Выборка.Следующий() Цикл
            
    Детали.Параметры.Заполнить(Выборка);
    МассивВыводимыхОбластей.Очистить();
    МассивВыводимыхОбластей.Добавить(Детали);
    Если Не ПроверитьВыводТабличногоДокумента(ТабДок, МассивВыводимыхОбластей) Тогда
        ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    КонецЕсли; 
            
    ТабДок.Вывести(Детали);
            
КонецЦикла;
Показать
petrobol25; romulanin; Mahon83; volkov-mv; Tworozhok; KAV2; Rustam10; limonas; erazh; Nefilimus; John_d; bimy22; dj_serega; ger_kar; klinval; +15 Ответить
7. ger_kar 11.08.15 13:41 Сейчас в теме
(6) YNik, Попробовал ваш вариант кода, и как не странно это заработало, хотя хоть убей, логики никакой в этом коде нет, точнее я её (логику) не усматриваю. На каждой итерации цикла мы очищаем массив, и тут же добавляем туда выводимую область. Далее мы делаем проверку, передавая этом массив, но блин в этом массиве всегда будет только один элемент. По логике проверка вывода, при передаче этой функции массива, должна состоять в обходе элементов массива и расчете общей длины и ширины которую области содержащиеся в массиве будут занимать и дальнейшего сопоставления её с длиной и шириной листа, на который будет осуществляться вывод. По крайней мере я бы делал именно такую реализацию. А тут ведь совершенно не понятно как оно работает. Функция каждый раз принимает массив с одним элементом, и как в таком случае можно вообще рассчитать возможность вывода я вообще не представляю.
Может разъясните "как это работает"?
8. spacecraft 11.08.15 13:51 Сейчас в теме
(7) ger_kar, функции передается табдок и массив. Проверяется табдок. Если есть строки на странице в табдок и массив еще помещается, то возвращается Истина. Если массив уже не помещается, то Ложь. В массив можно и не одну строку засовывать, но тогда сложнее логику делать, да и как определить, сколько можно сразу проверять. Проще и надежнее по одной строчки проверять.
Mahon83; schweigen; ger_kar; +3 Ответить
9. Follower 11.08.15 14:02 Сейчас в теме
(7) ger_kar, вот теперь я тоже понял. ПроверитьВывод() - это метод самого табличного документа. Передаваемый в метод массив областей выводится в конце табличного документа. А когда строчка после проверки добавляется, то второй раз проверять её не надо - она уже выведена.
41. bimy22 01.04.19 18:55 Сейчас в теме
(6) Спасибо за код, очень выручили! Добавлю в закреп, чтобы не потерять, а вам плюсик :)
2. hroa 10.08.15 11:38 Сейчас в теме
что-то вы вообще не так делеает. Прочиайие проПроверитьВывод, там и примеры есть.

Вы же два раза одно и то же кидаете на страницу

ТабДок.Вывести(Детали);
МассивВыводимыхОбластей.Добавить(Детали);

получается одну и ту же область два раза выводите.
3. ger_kar 10.08.15 15:30 Сейчас в теме
Два раза ничего не выводится, вывод осуществляется 1 раз в строке
ТабДок.Вывести(Детали);
А далее область добавляется в массив
МассивВыводимыхОбластей.Добавить(Детали);

При проверке в метод ПроверитьВывод() передается массив областей.
Пробовал делать без массива и передавать сам табличный документ, но в этом случае вообще ерунда получается, так как сначала ПроверитьВывод() срабатывает на 15 строке, потом через пять, далее через две строки и потом через каждую строчку дробя документ на целую кучу страниц.
38. pavlo 27.02.19 20:42 Сейчас в теме
(3) Кто нибудь может подсказать, проблема все таже в типовой КА 1.1
при печати УПД первый лист режет по средине, получается шапка, заголовок таблицы и 2 строки таблицы, потом следующая с повторяющимся заголовком таблицы (норм)
В УчетНДС.ВывестиСчетФактуруВТабличныйДокумент()
Как раз построчно используется ПроверитьВывод() но толку мало, все уезжает, избился но не хочет по нормальному печатать и все тут.

Кусок кода внутри цикла ОбластьМакета вывод строки таблицы

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

Показать
39. pavlo 27.02.19 21:07 Сейчас в теме
(38) Помогло в моем сеансе удалить из хранилища настроек "ПАРАМЕТРЫ_ПЕЧАТИ_УниверсальныйПередаточныйДокумент", непонятно как они слетают и как часто придется мочить :)
4. Follower 10.08.15 16:06 Сейчас в теме
Ну первое, что в голову приходит - это что у самого табличного документа сделаны настройки (колонтитулы там, или автомасштаб), а у массива областей - нет. Может быть есть смысл скопировать документ после настроек, использовать копию вместо массива и очищать как раз табличный документ.

То, что каждую строчку начинает дробить - может, очистка массива не отрабатывает почему-то? Думаю, стоит по возможности посмотреть через отладчик или выводить сообщениями количество элементов масссива.
5. ger_kar 10.08.15 18:55 Сейчас в теме
Попробовал выставлять размеры для области
Детали.РазмерКолонтитулаСверху = 0;
Детали.РазмерКолонтитулаСнизу  = 0;
Детали.ПолеСверху = 0;
Детали.ПолеСнизу  = 0;

Помогло, как мертвецу припарка. Попробовал установить другой принтер, подумал, что может поймал глюк для конкретного принтера, но это тоже не помогло. С автомасштабом тоже экспериментировал, думал может при масштабировании документ сжимаясь по горизонтали пропорционально уменьшается и по вертикали, причем делается это уже после проверки, т.е. проверка была без учета масштабирования, но нет, отключение автомасштабирования приводит к тому, что часть столбцов переносится на новые страницы, а по вертикали документ не увеличивается.
Может быть есть смысл скопировать документ после настроек, использовать копию вместо массива и очищать как раз табличный документ.

То, что каждую строчку начинает дробить - может, очистка массива не отрабатывает почему-то? Думаю, стоит по возможности посмотреть через отладчик или выводить сообщениями количество элементов масссива.
С массивом на через каждую строчку не дробит, это как раз происходит без применения массива. А так массив очищается вполне корректно.
10. ger_kar 11.08.15 15:09 Сейчас в теме
До меня тоже теперь наконец то дошло, спасибо YNik и spacecraft.
Так как это метод самого табличного документа, то мы при при проверке уже имеем данные самого табличного документа, к этому прибавляется то, что передали в качестве аргумента и таким образом проверяется следующее условие ТабличныйДокумент + МассивОбластей > Площадь листа и делается вывод поместится или нет.

Кстати код приведенный YNik, можно и нужно сократить, вообще исключив массив из употребления и передавать саму область для проверки и все будет прекрасно работать! Ура все получилось в лучшем виде :)
11. Xershi 1493 21.04.16 08:58 Сейчас в теме
(10) ger_kar, сократить можно если вы проверку делаете одной строки.

А вот у меня такая штука не прокатила!

// Дублируем строки в табличный документ
		ТабличныйДокументСтрока = Новый ТабличныйДокумент;
		ТабличныйДокументСтрока.Вывести(СекцияНачало);  		
		ТабличныйДокументСтрока.АвтоМасштаб = Истина;
		
		МассивТаблицОбластей.Добавить(ТабличныйДокументСтрока);
		
		//Проверяем умещается ли массив строк на странице
		Если мТабДок.ПроверитьВывод(МассивТаблицОбластей) Тогда
			ИндексМассива = МассивТаблицОбластей.Количество() - 1;
			МассивТаблицОбластей.Удалить(ИндексМассива);				
		Иначе
			Сообщить("Документ не умещается на страницу!");
			мТабДок.ВывестиГоризонтальныйРазделительСтраниц();
			
			мТабДок.Вывести(ТабличныйДокументШапка);
			
			МассивТаблицОбластей.Очистить();
			МассивТаблицОбластей.Добавить(ТабличныйДокументШапка); 			
		КонецЕсли; 
		
Показать

Проблема в том что у документа есть автомасштаб и что с ним делать? Выводит пол страницы пустой!
13. spacecraft 21.04.16 09:26 Сейчас в теме
(11) Xershi, наверно так:
мТабДок.АвтоМасштаб = Истина;

в самом начале. После конструктора.
14. Xershi 1493 21.04.16 09:29 Сейчас в теме
(13) spacecraft, этот параметр я уже установил в начале при создании:
мТабДок = Новый ТабличныйДокумент;

	мТабДок.Очистить();

	мТабДок.АвтоМасштаб = Истина;
	
	
15. spacecraft 21.04.16 09:35 Сейчас в теме
(14) Xershi, тогда ой. Этот признак используется при печати. Вполне может не обрабатываться при проверке вывода.
16. Xershi 1493 21.04.16 09:41 Сейчас в теме
(15) spacecraft, так что выходит, мне нужно вручную написать алгоритм проверки количество умещаемых строк на странице?
Проблема в том что в одной строке может быть большой текст, как этот нюанс вычислять?
12. Xershi 1493 21.04.16 09:26 Сейчас в теме
В чем особенность проверки этого метода кто в курсе? Он что без автомасштаба проверку в "мТабДок" делает?
17. Xershi 1493 21.04.16 09:52 Сейчас в теме
// Дублируем строки в табличный документ
		ТабличныйДокументСтрока = Новый ТабличныйДокумент;
		ТабличныйДокументСтрока.Вывести(СекцияНачало);  		
		ТабличныйДокументСтрока.ТекущаяОбласть.СоздатьФорматСтрок();  		
		ТабличныйДокументСтрока.АвтоМасштаб = Истина;
		
		МассивТаблицОбластей.Добавить(ТабличныйДокументСтрока);
		
		//Проверяем умещается ли массив строк на странице
		Если мТабДок.ПроверитьВывод(МассивТаблицОбластей) Тогда
			ИндексМассива = МассивТаблицОбластей.Количество() - 1;
			МассивТаблицОбластей.Удалить(ИндексМассива);				
		Иначе
			Сообщить("Документ не умещается на страницу!");
			мТабДок.ВывестиГоризонтальныйРазделительСтраниц();
			
			мТабДок.Вывести(ТабличныйДокументШапка);
			
			МассивТаблицОбластей.Очистить();
			МассивТаблицОбластей.Добавить(ТабличныйДокументШапка); 			
		КонецЕсли;
Показать


Новый формат строк улучшил ситуацию. Стало на странице чуть больше элементов. Похоже все дело в формате.
22. dj_serega 392 21.04.16 10:19 Сейчас в теме
(17) Xershi, У меня вот так выполняется проверка. Все красиво работает.

Смысл в следующем:
Есть ТЗ. Есть подвал. Нельзя что бы подвал выводился сам на отдельной странице. Последнюю строку ТЗ добавляю в массив. Потом добавляю туда подвал. Если не выводится тогда добавляю разделитель и вывожу то что есть в массиве (последняя строка + подвал).
		ИндСтроки	= 0;
		ИндВсего	= ДанныеКЗаполнению.ТаблицаЗначений.Количество();
		Для Каждого СтрокаПродукта Из ДанныеКЗаполнению.ТаблицаЗначений Цикл
			
			ИндСтроки = ИндСтроки + 1;
			
			ЗаполнитьЗначенияСвойств(ОбластьМакета.Параметры, СтрокаПродукта);
			
			Если ИндСтроки = ИндВсего Тогда
				
				МассивОбластейПроверка.Очистить();
				МассивОбластейПроверка.Добавить(ОбластьМакета);
				
			Иначе
				
				ТабДок.Вывести(ОбластьМакета);
				
			КонецЕсли;
			
		КонецЦикла;
		
		ОбластьМакетаПодвал = Макет.ПолучитьОбласть("Подвал");
		ЗаполнитьЗначенияСвойств(ОбластьМакетаПодвал.Параметры, ДанныеКЗаполнению);
		
		МассивОбластейПроверка.Добавить(ОбластьМакетаПодвал);
		
		Если Не ТабДок.ПроверитьВывод(МассивОбластейПроверка) Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
		КонецЕсли;
		
		Для Каждого ТекущаяОбластьПроверки Из МассивОбластейПроверка Цикл
			
			ТабДок.Вывести(ТекущаяОбластьПроверки);
			
		КонецЦикла;
Показать
23. spacecraft 21.04.16 10:20 Сейчас в теме
(17) Xershi, проверил у себя. АвтоМасштаб достаточно только в мТабДок.
А вот с МассивТаблицОбластей и правда не понятно зачем вообще его использовать?

ТабличныйДокументСтрока = Новый ТабличныйДокумент;
        ТабличныйДокументСтрока.Вывести(СекцияНачало);          
        
        //Проверяем умещается ли массив строк на странице
        Если не мТабДок.ПроверитьВывод(ТабличныйДокументСтрока) Тогда
            
            Сообщить("Документ не умещается на страницу!");
            мТабДок.ВывестиГоризонтальныйРазделительСтраниц();
            
            мТабДок.Вывести(ТабличныйДокументШапка);
         КонецЕсли;
Показать
24. Xershi 1493 21.04.16 10:35 Сейчас в теме
(23) spacecraft, я его делал, для того чтобы исключить не попадание последней строки. Т.к. строка добавляется по кускам и вот 3 кусок строки может быть на 5 строк и по итогу не поместится на страницу.

Поэтому вот этот нюанс так думал обыграть.

Сейчас внимательно ваш код проверю.

Когда я сделал как вы у меня страница заполнилась полностью ну или почти до конца, но нюанс с добавлением строки остался. Т.к. проверку, то я делаю в начале вывода. Мне наверно нужно заменить вывод на добавление в новый табличный документ и в конце проверять вывод, а потом только выводить строку или нет?
25. spacecraft 21.04.16 10:41 Сейчас в теме
(24) Xershi, не совсем понял. Есть "строка", которая может занимать несколько строк вывода? И что нужно? Совсем ее не выводить в текущей странице, если полностью не помещается? Или выводить частично, с переносом на другую страницу?
26. Xershi 1493 21.04.16 10:47 Сейчас в теме
(25) spacecraft, спасибо помогли понять, что там происходит. Убрал массив и переписал код, чтобы проверка шла в конце(когда строка полностью сформирована) со строкой дублером и тогда вся страница заполнилась полностью. Но я убрал оглавление для вывода чтобы проверить результат. Сейчас попробую с оглавлением вывод сделать. Если попрет, то вопрос решен.
18. 6есик 53 21.04.16 09:55 Сейчас в теме
 МассивТаблицОбластей.Добавить(ТабличныйДокументШапка);  
Это зачем вы делаете ?
19. Xershi 1493 21.04.16 10:07 Сейчас в теме
(18) 6есик, чтобы дублировать шапку на каждой странице. У меня табличный документ из 2 макетов для прайс-листа с оглавлением.
20. 6есик 53 21.04.16 10:13 Сейчас в теме
(19) Xershi, ну это я понимаю добавляете шапку на каждую новую страницу :

  мТабДок.Вывести(ТабличныйДокументШапка);


А зачем после этого ее добавлять в массив для проверки на вывод ? Ведь шапку вы уже вывели в табличный документ и проверка на вывод уже будет сопоставлять ваш массив и то свободное место в таб доке которое осталось после вывода шапки.
21. Xershi 1493 21.04.16 10:14 Сейчас в теме
(20) 6есик, логично. Попробую убрать тогда.
27. Xershi 1493 21.04.16 10:56 Сейчас в теме
Все сработало!
//Проверяем умещается ли массив строк на странице
			Если мТабДок.ПроверитьВывод(ТабличныйДокументСтрока) Тогда
				мТабДок.Вывести(ТабличныйДокументСтрока);	
			Иначе
				Сообщить("Документ не умещается на страницу!");
				мТабДок.ВывестиГоризонтальныйРазделительСтраниц();
				
				мТабДок.Вывести(ТабличныйДокументШапка);
				мТабДок.Вывести(ТабличныйДокументСтрока);
				
			КонецЕсли;
Показать

Понял в чем мои косяки и тогда проверка корректно все обработала!
Всем спс!
28. spacecraft 21.04.16 11:00 Сейчас в теме
(27) Xershi, я бы оптимизировал этот код. Как и в приведенном мной выше.
Если Не мТабДок.ПроверитьВывод(ТабличныйДокументСтрока) Тогда
                Сообщить("Документ не умещается на страницу!");
                мТабДок.ВывестиГоризонтальныйРазделительСтраниц();
                мТабДок.Вывести(ТабличныйДокументШапка);
            КонецЕсли;
            мТабДок.Вывести(ТабличныйДокументСтрока);
29. Xershi 1493 21.04.16 11:20 Сейчас в теме
(28) spacecraft, это уже не критично я считаю. Кстати на практике такая оптимизация дает, хоть какой-то профит?
30. spacecraft 21.04.16 11:27 Сейчас в теме
(29) Xershi, как минимум избегает дублирование кода.
Честно говоря, просто бьет по глазам.
Garik8866; dj_serega; +2 Ответить
31. piffoff 82 24.07.16 20:30 Сейчас в теме
Щас столкнулся с проблемой проверить вывод в ут 11.2 печатает тор12 с 1 номенклатурой в 2 листа
1 лист - путстая строка номенклатуры а на 2-м единственная номенклатура
дело должно быть в начтройках принтера по умолчанию но там вроде все нормально
что за чудеса непонятно
32. YNik 24.07.16 22:56 Сейчас в теме
(31) piffoff, я добавлял проверку на 1-ю строку, чтобы не выполнялся ПроверитьВывод:
Если НомерСтроки <> 1 И НЕ ТабличныйДокумент.ПроверитьВывод(МассивВыводимыхОбластей) Тогда
33. annapam1983 21.11.16 11:23 Сейчас в теме
Еще замечание в копилку. Сначала надо определить размер страницы, поля, автомасштаб и т.д. И уже после этого - проверять вывод.
Kaval88; pvl_mksv; user1520693; корум; serwk; +5 Ответить
45. user1520693 30.09.21 11:02 Сейчас в теме
(33) Спасибо!! Пока не прописал вручную все (! слева/справа обязательно) поля - ПроверитьВывод() выполнялось некорректно
34. Salavat88 26.11.16 11:46 Сейчас в теме
Добрый день. вывожу на печать доработанный табель.
На каждой странице должна быть шапочка ФИО, ТабНомер, Должность, Дни с 1 - 15, Итого15, 16 -Последний день, Итого за месяц. У сотрудника количество строк заранее не известно, т.к. зависит от КолВВ(количество видов времени, которые у него были за месяц. Каждый вид времени печатается на новой строке).

2 раза перенос на след. страницу делает и все. Больше разделитель не ставится.

Пока ВыборкаСотрудник.Следующий() Цикл

ОблСтрокаНомСтроки = Макет.ПолучитьОбласть("R" + СТРОКА(16 + КолСтрокВывели) + "C1:R" + СТРОКА(16 + КолВВ - 1 + КолСтрокВывели) + "C1");
МассивВыводимыхОбластей.Очистить();
МассивВыводимыхОбластей.Добавить(ОблСтрокаНомСтроки);

Если Не ПроверитьВыводТабличногоДокумента(ТабДок, МассивВыводимыхОбластей) Тогда

ТабДок.ВывестиГоризонтальныйРазделительСтраниц();

КолонтитулВсегда = Макет.ПолучитьОбласть("Колонтитул|КолонкиВсегда");
ТабДок.Вывести(КолонтитулВсегда);

Колонтитул29 = Макет.ПолучитьОбласть("Колонтитул|Колонка29");
Колонтитул30 = Макет.ПолучитьОбласть("Колонтитул|Колонка30");
Колонтитул31 = Макет.ПолучитьОбласть("Колонтитул|Колонка31");
КолонтитулВсегоОтработаноЗаМесяц = Макет.ПолучитьОбласть("Колонтитул|ВсегоОтработаноЗаМесяц");


Если ПоследнийДень > 28 Тогда
ТабДок.Присоединить(Колонтитул29);
КонецЕсли;
Если ПоследнийДень > 29 Тогда
ТабДок.Присоединить(Колонтитул30);
КонецЕсли;
Если ПоследнийДень > 30 Тогда
ТабДок.Присоединить(Колонтитул31);
КонецЕсли;
ТабДок.Присоединить(КолонтитулВсегоОтработаноЗаМесяц);
КолСтрокВывели = КолСтрокВывели + 3;

КонецЕсли;
ТабДок.Вывести(ОблСтрокаНомСтроки);
КонецЦикла

Подскажите, пожалуйста, где искать ошибку?
Прикрепленные файлы:
35. Tolpinski 67 27.02.17 10:03 Сейчас в теме
(34) Только что с похожей проблемой столкнулся, выводились несколько разделителей в Т-13, и все, пол отчета без них.
Дело оказалось в ширине колонок 5,6,7 и 20, они в стандартном почему то уже остальных, остальные по 3, а эти 2.63-2.88, и вот кто-то с коллег видно расширил, но не у всей колонки, а у диапазона, шапка осталась уже с подвалом.
Уменьшил ширину колонки с табельным на 1.1, пунктир справа выровнялся, и ПроверитьВывод заработал как задумывалось.
Прикрепленные файлы:
36. EugeneSemyonov 22 02.02.18 17:27 Сейчас в теме
Столкнулся с похожей проблемой. Данная проблема может возникать из-за сохранения настроек печати у конкретного пользователя в БД, например, при после выбора для печати другого принтера. Может помочь решение описаное здесь: https://infostart.ru/public/123584/
37. ДмитрийС 14.05.18 15:59 Сейчас в теме
Добавлю в копилку свои 5 копеек.
Была задача выводить на каждом листе внизу логотип организации (печать договоров и приложений к ним).
Естественно пользовался методом ПроверитьВывод(), для того чтобы определять помещается ли выводимая область на лист вместе в логотипом, и если нет, то вывожу пустые строки пока есть место, потом логотип и горизонтальный разделитель страниц. Пустые строки не очень большой размера, чтобы логотип практически на одном и том же месте был.

И всё хорошо выводится, кроме первой страницы. Видимо на тот момент как то по другому определяется выводимые размеры таблицы.

Решение нашлось очень странное: если метод говорит, что не умещается, то получаем количество страниц Табличного документа, а потом снова проверяем, помещается или нет. И вот тут происходит чудо)), 1С вдруг неожиданно начинает считать, что теперь помещается и продолжает выводить до самого низа (а раньше было заметно, что несколько строк еще может поместиться в конце). Код ниже.

Если НЕ ТабДокумент.ПроверитьВывод(МассивОбластейВывода) Тогда
КоличествоСтраниц = ТабДокумент.КоличествоСтраниц();
КонецЕсли;

Если НЕ ТабДокумент.ПроверитьВывод(МассивОбластейВывода) Тогда
//вот тут уже выводится и пустые строки, и логотип, и разделитель и др. нужные области шапки нового документа
КонецЕсли;
scanner1980; +1 Ответить
40. SiroJah 18.03.19 14:06 Сейчас в теме
Приветствую. КА 1.1. Такая же проблема при печати Торг-12. Табличный документ формируется как надо, но при предварительном просмотре перенос на следующую страницу отображается неправильно и печатается также. Хранилище настроек очищал, принтеры разные пробовал. Видимо дело в методе проверитьвывод() или в чем-то еще. Нужна помощь.
Прикрепленные файлы:
42. GetNight 48 21.01.21 02:10 Сейчас в теме
Иногда помогает поиграться с масштабированием... Или выставить все границы в 0 и нажать ОК (выдаст ошибку - выбрать "исправить").
43. ger_kar 24.01.21 17:53 Сейчас в теме
Вообще с методами табличного документа ПроверитьПрисоединение() и ПроверитьВывод() не все так однозначно. Описанная ниже ошибка существовала во многих типовых конфигурациях (может и сейчас существует) и проявлялась в основном при распечатке этикеток и ценников на обычном принтере, на листе формата А4.
Проявлялось это следующим образом: При попытке размещения этикеток таким образом, чтобы полностью использовать поле листа, устанавливая количество этикеток по горизонтали и вертикали, при сохранении возникала ошибка, что количество по горизонтали и вертикали превышает допустимое (т.е. содержимое не помещается на лист). Хотя по всем данным должно было поместиться, да еще и немного свободного места должно было остаться. Если же уменьшить количество на 1, то при распечатке на листе оставались свободные полосы, на которых можно было бы запросто уместить еще по одной этикетке как по горизонтали, так и по вертикали.
Анализ кода, делающего проверку размещения в процедурах ПроверитьУмещение, ПроверитьРазмещение (в разных конфигурациях названия могут отличаться) привел к следующему выводу.
Для проверки использовались методы реквизита формы ПолеТабличногоДокумента. В циклах формировались массивы областей макета отдельно для каждой из проверок (по горизонтали и вертикали) и далее передавались в соответствующие методы. Но при этом совершенно не учитывался тот факт, что реквизит формы ПолеТабличногоДокумента уже содержал одну область в виде шаблона отображаемого на экране и естественно влиял на результат проверки.
Я исправлял ошибку используя два метода (в разных ситуациях использовались разные методы).
Первый метод: Использовать для проверки отдельный пустой табличный документ, не являющийся реквизитом формы.
Второй метод: В цикле
МассивТаблиц = Новый Массив;
		Для Инд = 1 По КоличествоПоГоризонтали Цикл
			МассивТаблиц.Добавить(ОбластьМакета);
		КонецЦикла;

начинать отсчет не с 1, а с 2. Т.е. изменить инициализацию счетчиков циклов.
МассивТаблиц = Новый Массив;
		Для Инд = 2 По КоличествоПоГоризонтали Цикл
			МассивТаблиц.Добавить(ОбластьМакета);
		КонецЦикла;
44. ger_kar 24.01.21 18:02 Сейчас в теме
Описанную выше ошибку встречал в различных типовых конфигурациях: УТ, Рознице, УНФ. Причем на протяжении многих лет эта ошибка не исправлялась. Кроме этого аналогичные ошибки встречались при формировании печатных документов в других конфигурациях. Но эти конфигурации подвергались сильной переделке, и ошибки могли появиться при доработках. Но то что касается проблемы с выводом этикеток и ценников, то ошибка по сути типовая. Может в новых конфигурациях ее уже исправили.
46. user1252779 154 17.11.23 13:37 Сейчас в теме
23 год на дворе, .ПроверитьВывод(МассивОбластей) продолжает работать криво
страницы заполнены на две трети
ЗУП 3.1.28.12
47. user1252779 154 17.11.23 15:01 Сейчас в теме
вывести шапку таблицы на каждой странице кроме первой можно после того как табличный документ готов с помощью .ПовторятьПриПечатиСтроки

ОтчетТабличныйДокумент.Вывести(Шапка); 
Для Каждого Стр Из ТаблицаСотрудники Цикл		
	........
	ОтчетТабличныйДокумент.Вывести(Детализация);		
КонецЦикла;		
ОтчетТабличныйДокумент.Вывести(Подвал); 
ОтчетТабличныйДокумент.ОтображатьСетку = Ложь;
ОтчетТабличныйДокумент.ФиксацияСверху = 13;   //для просмотра зафиксировать область
//табличный документ готов
ОтчетТабличныйДокумент.ПовторятьПриПечатиСтроки = ОтчетТабличныйДокумент.Область(10, , 13, )//повтор при печати 4 строки начиная с 10;
Показать
48. SkAt91 28.11.23 22:39 Сейчас в теме
Наткнулся на аналогичное непонятное поведение ПроверитьВывод(). Проблема оказалась в том, что свойство ТабличныйДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет устанавливал после заполнения всего табличного документа. То есть, по умолчанию, когда начинаем выводить области, ориентация встает "Ландшафт". И ПроверитьВывод() работает именно в режиме "Ландшафт", а это как раз 2/3 страницы. Если с самого начала объявить, что ТабличныйДокумент имеет ориентацию "Портрет", то ПроверитьВывод() работает корректно. Разумеется, решение подходит в том случае, если нужна портретная ориентация.
Оставьте свое сообщение

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