Как создать такой Макет (отчет), табличная часть?

1. user-z99999 67 05.12.19 20:09 Сейчас в теме
Как создать такой Макет (отчет), табличная часть?
Тест 4 - одна строка
А тест 1, тест 2, тест 3 и т.д. - это данные из табличной части документа. (может быть две строки, а может 10 )
Прикрепленные файлы:
Отчет-тест.epf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. nomad_irk 72 06.12.19 10:59 Сейчас в теме +3 $m
(3)
НачальнаяСтрока = 1; 
ВыведенныхСтрок = 0; 
Пока Выборка.Следующий() Цикл
    ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
    ТабДок.Вывести(ОбластьТабЧасть);
    ВыведенныхСтрок = ВыведенныхСтрок + 1;
КонецЦикла;
ТабДок.Область(НачальнаяСтрока, 2).Текст = "тест4";
ТабДок.Область(НачальнаяСтрока, 2, НачальнаяСтрока + ВыведенныхСтрок - 1, 2).Объединить();
Показать


Ели у вас группировка по Тест1 и Тест3, в таком случае, у вас первая выборка должна быть с обходом по группировкам:

ВыборкаПоГруппировкам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
НачальнаяСтрока = 1; 
ВыведенныхСтрок = 0;
Пока ВыборкаПоГруппировкам.Следующий() Цикл
    ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
    ТабДок.Вывести(ОбластьТабЧасть);
    ВыборкаДетальныеЗаписи = ВыборкаПоГруппировкам.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
             ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
             ТабДок.Вывести(ОбластьТабЧасть, 1);
             ВыведенныхСтрок = ВыведенныхСтрок + 1;
    КонецЦикла;
    ВыведенныхСтрок = ВыведенныхСтрок + 1;
    ТабДок.Область(НачальнаяСтрока, 2).Текст = "тест4";
    ТабДок.Область(НачальнаяСтрока, 2, НачальнаяСтрока + ВыведенныхСтрок - 1, 2).Объединить();
    НачальнаяСтрока = НачальнаяСтрока + ВыведенныхСтрок;
КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 05.12.19 20:27 Сейчас в теме
(1)заведите счетчики для начальных строк вывода, выведенных строк в правой колонке, в левой колонке просто выполняйте объединение с начальной строки по количеству выведенных.

Другими словами:

НачальнаяСтрока = 1;
ВыведенныхСтрок = 3;

ТабДок.Область(НачальнаяСтрока, 2, НачальнаяСтрока + ВыведенныхСтрок - 1, 2).Объединить();

Следующая начальная строка будет: НачальнаяСтрока + ВыведенныхСтрок;
trickster; +1 Ответить
3. user-z99999 67 06.12.19 10:35 Сейчас в теме
(2)
Не понимаю как сделать. (прикрепил файл в теме)
&НаСервере
Функция ВывестиОтчетНаСервере(ТабДок)

	Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьТабЧасть = Макет.ПолучитьОбласть("ТабЧасть");

	// Вывести справа в поле: "Правая колонка"
	Строка2 = "Правая колонка"; 
	
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Вывести(ОбластьШапка);

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	""тест1"" КАК Строка1
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	""тест3""
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	""тест2""";
	
	Выборка = Запрос.Выполнить().Выбрать();	 	
	
	НачальнаяСтрока = 0; 
	ВыведенныхСтрок = 0; 
	Пока Выборка.Следующий() Цикл
		Если НачальнаяСтрока =0 Тогда
			НачальнаяСтрока = НачальнаяСтрока + 1;		
		КонецЕсли; 
		ВыведенныхСтрок = ВыведенныхСтрок + 1;
		
		ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
		ТабДок.Вывести(ОбластьТабЧасть);
		
	КонецЦикла;
	  
	Возврат ТабДок;
КонецФункции


Показать
4. nomad_irk 72 06.12.19 10:59 Сейчас в теме +3 $m
(3)
НачальнаяСтрока = 1; 
ВыведенныхСтрок = 0; 
Пока Выборка.Следующий() Цикл
    ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
    ТабДок.Вывести(ОбластьТабЧасть);
    ВыведенныхСтрок = ВыведенныхСтрок + 1;
КонецЦикла;
ТабДок.Область(НачальнаяСтрока, 2).Текст = "тест4";
ТабДок.Область(НачальнаяСтрока, 2, НачальнаяСтрока + ВыведенныхСтрок - 1, 2).Объединить();
Показать


Ели у вас группировка по Тест1 и Тест3, в таком случае, у вас первая выборка должна быть с обходом по группировкам:

ВыборкаПоГруппировкам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
НачальнаяСтрока = 1; 
ВыведенныхСтрок = 0;
Пока ВыборкаПоГруппировкам.Следующий() Цикл
    ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
    ТабДок.Вывести(ОбластьТабЧасть);
    ВыборкаДетальныеЗаписи = ВыборкаПоГруппировкам.Выбрать();
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
             ОбластьТабЧасть.Параметры.Заполнить(Выборка); 
             ТабДок.Вывести(ОбластьТабЧасть, 1);
             ВыведенныхСтрок = ВыведенныхСтрок + 1;
    КонецЦикла;
    ВыведенныхСтрок = ВыведенныхСтрок + 1;
    ТабДок.Область(НачальнаяСтрока, 2).Текст = "тест4";
    ТабДок.Область(НачальнаяСтрока, 2, НачальнаяСтрока + ВыведенныхСтрок - 1, 2).Объединить();
    НачальнаяСтрока = НачальнаяСтрока + ВыведенныхСтрок;
КонецЦикла;
Показать
5. user-z99999 67 06.12.19 11:22 Сейчас в теме
(4) Спасибо!
Пока хелп не прочитал, не получалось. (сейчас сделаю рабочий отчет и напишу)
Область(<НомерПервойСтроки>, <НомерПервойКолонки>, <НомерПоследнейСтроки>, <НомерПоследнейКолонки>)


А если у меня сверху ещё одна табличная часть (где всё просто). Мне нужно высчитывать номер строки от туда. Правильно?
6. nomad_irk 72 06.12.19 11:24 Сейчас в теме
7. user-z99999 67 06.12.19 12:14 Сейчас в теме
(6)
У меня поле широкое, куда я добавляю.

ТабДок.Область("R27C16:R27C24").Текст = "Очень длинный текст, перенос строки в макете установил.";
ТабДок.Область(27, 16, 29, 16).Объединить();


Но заполняется только первый столбец, который растягивается по строкам.
Как сделать, чтобы текст по всей ширине заполнялся. (ошибка в строке - Объединить.)
8. user-z99999 67 06.12.19 12:25 Сейчас в теме
Нужно так (указать область прямоугольника):
ТабДок.Область("R27C16:R29C24").Объединить();


Спасибо за помощь!
9. nomad_irk 72 06.12.19 12:26 Сейчас в теме
(7)Должно работать так:

ТабДок.Область(27, 16).Текст = "Очень длинный текст. Перенос можно не ставить, т.к. после объединения вроде как перенос сбрасывается в дефолтное состояния";
ТекОбласть = ТабДок.Область(27, 16, 29, 16);
ТекОбласть.Объединить();
ТекОбласть.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;


Если у вас несколько колонок, указывайте номер последней колонки равный НомерНачальнойКолонки + КоличествоКолонокДляОбъединения

ТекОбласть = ТабДок.Область(27, 16, 29, 20); //будет область из 3-х строк и 5-и колонок.
ТекОбласть.Объединить();
Оставьте свое сообщение

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