Доброго времени суток дорогоие форумчане))) у меня вот какая проблема, я программно рисую линии у табличного документа. Код рисует эти линии не только там где надо, но там где и не надо, к примеру как показано на рисунке, и эти линии идут до бесконечности и чем больше колонок надо вывести, тем больше строк он прорисовывает в бесконечности. Помогите пожалуйста)))
По теме из базы знаний
- Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория
- Как устроена команда 1С, ориентированная на продукты, и какую роль в ней занимает владелец продукта
- Развитие и стресс: как они связаны и что с этим делать
- Концепция ORM как двигатель прогресса - выдержит ли ее ваша СУБД?
- ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2)
просто у меня динамическое количество строк и столбцов, и еще дисциплина может разбиваться на 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);
КонецЦикла;
КонецЕсли;
ТабДок.Вывести(Макет);
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
Показать
Поставьте точки останова с условием =0 на второй параметр получения области, в строках где вызывается функция Обвести(). Например "(МассивД.Количество()+ИндексСт+1)=0" для последнего блока обводки, там где отладчик встанет и есть косяк.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот