как убрать лишнии линии

1. Ayria 12.03.12 13:46 Сейчас в теме
Доброго времени суток дорогоие форумчане))) у меня вот какая проблема, я программно рисую линии у табличного документа. Код рисует эти линии не только там где надо, но там где и не надо, к примеру как показано на рисунке, и эти линии идут до бесконечности и чем больше колонок надо вывести, тем больше строк он прорисовывает в бесконечности. Помогите пожалуйста)))
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ИльяЕвгеньевич 12.03.12 13:54 Сейчас в теме
так то бы код надо еще смотреть, да и непонятно зачем программно рисовать границы
3. Ayria 12.03.12 14:00 Сейчас в теме
(2)
просто у меня динамическое количество строк и столбцов, и еще дисциплина может разбиваться на 2 колонки, где будут выставляться оценки.
ТабДок= Новый ТабличныйДокумент;
	
	Групп=ЭлементыФормы.Группа.Значение;
	
	Макет=Отчеты.Ведомость.ПолучитьМакет("Макет");
		
	ТипЛинии= Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
	ТипШриф = Новый Шрифт("Times New Roman",14, Истина);
	
	Макет.Область("R2C2:R5C13").Объединить();
	Макет.Область("R2C2:R5C13").Текст="Сводная ведомость успеваемости студентов группы " + Строка(ЭлементыФормы.Группа.Значение)+" специальности "+ Строка(Группа.Специальность.Шифр) +" "+Строка(Группа.Специальность.Специальность)+" "+ Строка(Семестр)+ " семестр "   ;
	Макет.Область("R2C2:R5C13").Шрифт=ТипШриф;
	Макет.Область("R2C2:R5C13").РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
	Макет.Область("R2C2:R5C13").ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
	Макет.Область("R2C2:R5C13").ВертикальноеПоложение=ВертикальноеПоложение.Центр;
	//Макет.Область("R2C2:R5C13").Шрифт.Жирный=Истина;
	
	Макет.Область("R7C2:R8C2").Объединить();
	Макет.Область("R7C2:R8C2").Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии); 
	Макет.Область("R7C2:R8C2").Текст="№ п/п";
	Макет.Область("R7C2:R8C2").РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
	Макет.Область("R7C2:R8C2").ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
	Макет.Область("R7C2:R8C2").ВертикальноеПоложение=ВертикальноеПоложение.Центр;
	Макет.Область("R7C2:R8C2").ШиринаКолонки=5;
	//Макет.Область("R7C2:R8C2").ВысотаСтроки=10;
	
	
	Макет.Область("R7C3:R8C3").Объединить();
	Макет.Область("R7C3:R8C3").Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии); 
	Макет.Область("R7C3:R8C3").Текст="Фамилия";
	Макет.Область("R7C3:R8C3").РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
	Макет.Область("R7C3:R8C3").ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
	Макет.Область("R7C3:R8C3").ВертикальноеПоложение=ВертикальноеПоложение.Центр;
		
	ЗапросГр=Новый Запрос("ВЫБРАТЬ
	                      |	Студенты.Наименование КАК Наименование,
	                      |	Студенты.Группа.Наименование
	                      |ИЗ
	                      |	Справочник.Студенты КАК Студенты
	                      |ГДЕ
	                      |	Студенты.Группа.Наименование = """+Групп+"""
	                      |	И Студенты.Отчислен = ЛОЖЬ
	                      |
	                      |УПОРЯДОЧИТЬ ПО
	                      |	Наименование
	                      |АВТОУПОРЯДОЧИВАНИЕ");
						  
	//ЗапросГр.УстановитьПараметр("Группа",Группа);
	РезЗапГр=ЗапросГр.Выполнить();
	ВыборкаГр=РезЗапГр.Выбрать();
	
	МассивСт= Новый Массив(ВыборкаГр.Количество());
	Поз= НОвый Массив(ВыборкаГр.Количество());
	 
	
     Сче=0;
	Для ИндексСт=0 по МассивСт.ВГраница() Цикл
		ВыборкаГр.Следующий();
		Сче=Сче+1;
		Макет.Область(9+ИндексСт,2).Текст=Сче;
		Макет.Область(9+ИндексСт,2).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
		Макет.Область(9+ИндексСт,2).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
		Макет.Область(9+ИндексСт,2).ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
		Макет.Область(9+ИндексСт,2).ВертикальноеПоложение=ВертикальноеПоложение.Центр;
		Макет.Область(9+ИндексСт,2).ШиринаКолонки=5;
		//Макет.Область(9+ИндексСт,2).ВысотаСтроки=0;
		
		Макет.Область(9+ИндексСт,3).Текст=ВыборкаГр.Наименование;
		МассивСт.Добавить(ВыборкаГр.Наименование);
		Поз.Добавить(9+ИндексСт);
		Макет.Область(9+ИндексСт,3).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
		Макет.Область(9+ИндексСт,3).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии); 		
	КонецЦикла;
				
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	Ведомость.Дисциплина,
	                      |	Ведомость.ФормаКонтроля,
	                      |	Ведомость.Семестр,
	                      |	Ведомость.Список.(
	                      |		Студент,
	                      |		Оценка,
	                      |		ДомКонтр
	                      |	),
	                      |	Ведомость.КолЧасовВсего,
	                      |	Ведомость.Группа.Наименование,
	                      |	Ведомость.Строки,
	                      |	Ведомость.ДомКонт,
	                      |	Ведомость.КолЧасовАудит,
	                      |	Ведомость.ФормаКонтроля КАК ФормаКонтроля1
	                      |ИЗ
	                      |	Документ.Ведомость КАК Ведомость
	                      |ГДЕ
	                      |	Ведомость.Семестр = &Семестр
	                      |	И Ведомость.Группа.Наименование = """+Группа+"""
	                      |АВТОУПОРЯДОЧИВАНИЕ");
						  
	//Запрос.УстановитьПараметр("Группа",Группа);
	Запрос.УстановитьПараметр("Семестр",Семестр);
	РезЗап=Запрос.Выполнить();
	Выборка=РезЗап.Выбрать();
	Колон=4;
	Если Выборка.Количество() <> 0 ТОгда
	МассивД= Новый Массив(Выборка.Количество());
	  	  
		Для ИндексД=0 по МассивД.ВГраница() Цикл
		Выборка.Следующий();
			
		Если Выборка.ДомКонт=Истина Тогда
			    
				Макет.Область(7,Колон,7,Колон+1 ).Объединить();
				Макет.Область(7,Колон,7,Колон+1).Текст=Строка(Выборка.Дисциплина) +"( "+ Строка(Выборка.КолЧасовВсего)+ "/"+ Строка(Выборка.КолЧасовАудит)+" )" ;
				Макет.Область(7,Колон,7,Колон+1).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
				Макет.Область(7,Колон,7,Колон+1).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				//Макет.Область(7,3+ИндексД,7,3+ИндексД+1).ШиринаКолонки=13;
				//Макет.Область(7,3+ИндексД,7,3+ИндексД+1).ВысотаСтроки=90;
				Макет.Область(7,Колон,7,Колон+1).ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
				Макет.Область(7,Колон,7,Колон+1).ВертикальноеПоложение=ВертикальноеПоложение.Центр;
				//Макет.Область(7,4+ИндексД,7,4+ИндексД+1).ОриентацияТекста=0;
				Макет.Область(7,Колон).Текст="Дом.к.р.";
				Маке
								
				
				Оцен=Выборка.Список.Выбрать();
				
				
			Пока Оцен.Следующий() Цикл
				
				Для ИндексСт=0 по МассивСт.ВГраница() Цикл
					   
						Если Строка(МассивСт[ИндексСт])=Строка(Оцен.Студент)   Тогда
						
				Макет.Область(Поз[ИндексСт],Колон).Текст=Оцен.Оценка;
				Сообщить(Строка(Поз[ИндексСт])+":"+Строка(Колон));
				Макет.Область(Поз[ИндексСт],Колон).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
				Макет.Область(Поз[ИндексСт],Колон).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				Макет.Область(Поз[ИндексСт],Колон).ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
				Макет.Область(Поз[ИндексСт],Колон).ВертикальноеПоложение=ВертикальноеПоложение.Центр;
			Иначе
				
				Макет.Область(Поз[ИндексСт],Колон).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				   КонецЕсли;
			КонецЦикла;
		         	КонецЦикла;
				Колон=Колон+2;
               
				Иначе
				Макет.Область(7,Колон).Текст=Строка(Выборка.Дисциплина) +"( "+ Строка(Выборка.КолЧасовВсего)+ "/"+ Строка(Выборка.КолЧасовАудит)+" )" ;
				Макет.Область(7,Колон).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
				Макет.Область(7,Колон).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				//Макет.Область(7,Колон).ШиринаКолонки=13;
				//Макет.Область(7,Колон).ВысотаСтроки=90;
				Макет.Область(7,Колон).ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
				Макет.Область(7,Колон).ВертикальноеПоложение=ВертикальноеПоложение.Центр;
				//Макет.Область(7,Колон).ОриентацияТекста=90;
				Оцен=Выборка.Список.Выбрать();
				
			Пока Оцен.Следующий() Цикл
				
				Для ИндексСт=0 по МассивСт.ВГраница() Цикл
					   
						Если Строка(МассивСт[ИндексСт])=Строка(Оцен.Студент)   Тогда
						
				Макет.Область(Поз[ИндексСт],Колон).Текст=Оцен.Оценка;
				Сообщить(Строка(Поз[ИндексСт])+":"+Строка(Колон));
				Макет.Область(Поз[ИндексСт],Колон).РазмещениеТекста=ТипРазмещенияТекстаТабличногоДокумента.Переносить;
				Макет.Область(Поз[ИндексСт],Колон).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				Макет.Область(Поз[ИндексСт],Колон).ГоризонтальноеПоложение=ГоризонтальноеПоложение.Центр;
				Макет.Область(Поз[ИндексСт],Колон).ВертикальноеПоложение=ВертикальноеПоложение.Центр;
			Иначе
				
				Макет.Область(Поз[ИндексСт],Колон).Обвести(ТипЛинии, ТипЛинии, ТипЛинии, ТипЛинии);
				   КонецЕсли;
				КонецЦикла;
			КонецЦикла;
			Колон=Колон+1;
 
				КонецЕсли;
							КонецЦикла; 
		

			Иначе Сообщить("Нет данных на данный семестр");
		КонецЕсли;			
		ТипЛинии1= Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии,1);
		Если Выборка.Количество()<>0 Тогда
		Для ИндексД=0 по МассивД.ВГраница() Цикл

			Макет.Область(2,ИндексД+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(3,ИндексД+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(4,ИндексД+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(5,ИндексД+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
		КонецЦикла;
		
		Для ИндексСт=0 по МассивСт.ВГраница() Цикл
	    	Макет.Область(2,МассивД.Количество()+ИндексСт+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(3,МассивД.Количество()+ИндексСт+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(4,МассивД.Количество()+ИндексСт+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
			Макет.Область(5,МассивД.Количество()+ИндексСт+1).Обвести(ТипЛинии1, ТипЛинии1, ТипЛинии1, ТипЛинии1);
		 КонецЦикла;
   КонецЕсли; 
 	ТабДок.Вывести(Макет);
	
	ТабДок.ОтображатьСетку = Ложь;
	ТабДок.Защита = Ложь;
	ТабДок.ТолькоПросмотр = Ложь;
	ТабДок.ОтображатьЗаголовки = Ложь;
	ТабДок.Показать();
Показать
4. alextalov 12.03.12 14:41 Сейчас в теме
Поставьте точки останова с условием =0 на второй параметр получения области, в строках где вызывается функция Обвести(). Например "(МассивД.Количество()+ИндексСт+1)=0" для последнего блока обводки, там где отладчик встанет и есть косяк.
5. Jardon 12.03.12 15:08 Сейчас в теме
Неправильный путь вы выбрали для формирования печатной формы. Можно было нарисовать макет, сделать столбец где "выводится предмет", и уже динамически добавлять их в Табличный документ, в зависимости от количества столбцов.
В цикле добавляете предметы, и объединяете с макетом.
Оставьте свое сообщение

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