Табличный документ. Метод Присоединить() - как добавлять строки вертикально

1. Евгений (realEvgenius) 14.09.16 08:16 Сейчас в теме
Здравствуйте!

То, чего пытаюсь добиться
http://i83.fastpic.ru/big/2016/0914/f0/9e936e3d468ec02dd8116f732f504cf0.jpg

Мой макет
http://i83.fastpic.ru/big/2016/0914/a8/9a0d60d9788bd5ea236b73728cbb73a8.jpg

Есть табличный документ. Требуется сначала вывести некую писанину слева во всю высоту страницы. Затем правее должна быть таблица, которую заполнять в цикле.
Долблюсь, не могу сообразить как делать. Уже приходит понимание, что невозможно это сделать, но решил спросить здесь.

Делаю так
1. Вывожу Область "Боковая|Начало"
2. Присоединяю область "Верхушка|Конец"

Дальше при попытке Присоединить Группа|Конец - он выводит все группы справа, а мне нужно вниз.
При попытке Вывести Группа|Конец - выводится в самый низ, после "Боковая|Начало", а мне надо внутри как бы.

При попытке ВставитьОбласть - ошибка, что область не соответствует размеру.

ТабДок     = Новый ТабличныйДокумент;
Макет     = ПолучитьМакет("Макет");
    
БН = Макет.ПолучитьОбласть("Боковая|Начало");
БК = Макет.ПолучитьОбласть("Боковая|Конец");
БВ = Макет.ПолучитьОбласть("Боковая|Верхушка");
ВК = Макет.ПолучитьОбласть("Верхушка|Конец");
ГК = Макет.ПолучитьОбласть("Группа|Конец");
СК = Макет.ПолучитьОбласть("Стр|Конец");
    
ТабДок.Вывести(БН);  //здесь выводится слева во всю страницу "штамп",

ТабДок.Присоединить(ВК)//присоединяется шапка
...Показать Скрыть


Далее в цикле надо выводить строки ниже шапки, например, 10 штук

Для й=1 по 10 цикл 
        ТабДок.ВставитьОбласть(ГК,БК,ТипСмещенияТабличногоДокумента.ПоВертикали);// здесь всяко пробовал, не пойму как правильно

КонецЦикла;
Ответы
2. Олег Медведев (olgerd666) 28 14.09.16 08:52 Сейчас в теме
Логика должна быть такой:
КолонкаСтроки - расширение таблицы вправо
ОбластьСтроки - НашаСтрокаЗаполнения
Создали Табличный документ
Вывели первую "ОбластьСтроки|КолонкаСтроки", заполнинли, присоединили вторую "ОбластьСтроки|КолонкаСтроки", заполнили, "ОбластьСтроки|КолонкаСтроки", заполнилим пустыми значениями например.
Новая строка
Вывели первую "ОбластьСтроки|КолонкаСтроки", заполнинли, присоединили вторую "ОбластьСтроки|КолонкаСтроки", заполнили, "ОбластьСтроки|КолонкаСтроки", заполнили.
и так в цикле двигаемся сначала вправо, потом вниз
При разной длине строк - заполняем пустыми значениями (1 - данные, _ - пустое значение)
1 1 1 1 _ _ _
_ 1 _ 1 1 1 1
_ _ _ _ _ _ 1
realEvgenius; +1 Ответить
3. Анатолий (aka Любитель XML) 14.09.16 08:54 Сейчас в теме
(1) realEvgenius, хм... пишу конфу (до печати еще не добрался) тоже по автоматизации проектной документации, но до конструктора печати еще не добрался. ИМХО а не проще это загнать в колонтитул, или печатать уже на готовой бумаге с этими строками?
4. Олег Медведев (olgerd666) 28 14.09.16 08:54 Сейчас в теме
(1) realEvgenius, Область слева которая не относится к таблице - можно выводить одновременно с таблицей
строка 1 _ 1 _ _
строка 1 1 1 1 1
______ 1 _ _ _ _
5. Евгений (realEvgenius) 14.09.16 09:01 Сейчас в теме
(3) aka Любитель XML, Проще на бланках с уже такими штампами. Но бланки для первой страницы и для следующих отличаются, опять же необходимо писаль лист№... / листов... Поэтому мои подопечные на бланках делать отказались...
6. Евгений (realEvgenius) 14.09.16 09:02 Сейчас в теме
(4) olgerd666, Извиняюсь за убогость но как это понять "можно выводить одновременно с таблицей" ? Если не затруднит, можно кусочек кода?
7. Олег Медведев (olgerd666) 28 14.09.16 09:09 Сейчас в теме
(6) realEvgenius,
Может я неправильно понял?
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
// Шапка таблицы
Шапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Присоеднить(Шапка);

ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТекста");
// Строка таблицы
СтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаблицы ");

Для Каждого ТекСтрокаТовары Из Товары Цикл
ТабДок.Вывести(ОбластьСтрока);
СтрокаТаблицы .Параметры.Заполнить(ТекСтрокаТовары);
ТабДок.Присоеднить(СтрокаТаблицы)
КонецЦикла;
...Показать Скрыть

чтото типа того
8. Евгений (realEvgenius) 14.09.16 09:25 Сейчас в теме
(7) olgerd666, Вы макет видите, который я выложил? Вертикальная секция "Начало" должна быть на странице. Далее надо добавить Верхушка|Конец, затем выводить в цикле Группа|Конец.
9. rjhev korum (корум) 304 14.09.16 09:26 Сейчас в теме
(5) realEvgenius, используй свой макет как бланк. Никаких добавляемых строчек, всё сразу рассчитано и учтено, как в типовой торг-12.
Строки, которые заполняешь данными, поименуй Область1..ОбластьN и заполняй данные в цикле.
Потом выведешь весь табличный документ.
10. Евгений (realEvgenius) 14.09.16 09:28 Сейчас в теме
(9) корум, Да, так сделал... Одно Но... Не возможно выделять шрифтом, цветом группы. Тоесть таблица монотонная. - одинаковая
11. Евгений (realEvgenius) 14.09.16 09:29 Сейчас в теме
(7) olgerd666, Не получится так выводить, поскольку левая часть имеет объединенные ячейки, и не пропорциональна строкам
12. rjhev korum (корум) 304 14.09.16 09:34 Сейчас в теме
(10) realEvgenius, Можно на платформе 8.3.6 и дальше, вроде как. Там появился метод ФорматнаяСтрока.

Но проще сделать нужный тебе макет в ворде, там гораздо проще работать с форматированием.
13. Анатолий (aka Любитель XML) 14.09.16 09:38 Сейчас в теме
(12) корум, мне вот тоже больше нравиться вариант с шаблоном, а нумерацию можно в шаблон попробовать вставить, главное адрес получить...
14. Евгений (realEvgenius) 14.09.16 12:29 Сейчас в теме
(9) корум, Сделал области...

Ш = Макет.ПолучитьОбласть("R1C5:R3C37");
О1 = Макет.ПолучитьОбласть("R4C5:R5C37");
О2 = Макет.ПолучитьОбласть("R4C5:R5C37");
...
ТабДок.ВывестиОбласть? Так, чтоль?
А область, которая должна быть слева на всю страницу?

Короче, не решение это... Есть еще варианты?


Вопрос тотже остался - их как выводить? в ТабДок? Вывести или присоединить?
15. white mount (white-mount) 14.09.16 12:37 Сейчас в теме
(14) realEvgenius, Есть еще варианты?

использую предварительно созданную тз и два цикла.
При этом может не совпадать количество строк, добавляются объединённые ячейки. Сложного тут нет. Кто то Вам мешает обратится к строке и колонке в уже созданной таблице?
И её потом уже скопировать в табл док для вывода.
realEvgenius; +1 Ответить
16. Алекс Кон (alex-l19041) 9 14.09.16 12:37 Сейчас в теме
(14) realEvgenius, поддерживаю
используй свой макет как бланк. Никаких добавляемых строчек, всё сразу рассчитано
realEvgenius; +1 Ответить
17. rjhev korum (корум) 304 14.09.16 13:19 Сейчас в теме
(14) realEvgenius,
Ш = Макет.ПолучитьОбласть("R1C5:R3C37");
О1 = Макет.ПолучитьОбласть("R4C5:R5C37");
О2 = Макет.ПолучитьОбласть("R4C5:R5C37");

Ш = Макет.ПолучитьОбласть("шапка");
//параметры, оформление...
О1 = Макет.ПолучитьОбласть("ПерваяСтрока");//первая строка
О2 = Макет.ПолучитьОбласть("R3C5:R5C37"); //вторая строка
О3 = Макет.ПолучитьОбласть("R4C5:R5C37");//третья строка

выводить надо область ВесьДокумент ("R1C1:R100500C100500"), внутри которого и рамки, и отдельные строки.

прописывай параметры, если что - всю область отдельной строки делай жирным текстом, если это группа...

и ВЕСЬ ДОКУМЕНТ НА ЭКРАН = одна большая область. Её и показывай, выводи на печать
Прикрепленные файлы:
realEvgenius; +1 Ответить 2
18. Евгений (realEvgenius) 14.09.16 13:19 Сейчас в теме
(17) корум, А... Понял! Зациклился я на этих областях... Попробую!
19. Евгений (realEvgenius) 14.09.16 14:29 Сейчас в теме
(17) корум, еще вопрос:

О1 = Макет.ПолучитьОбласть("ПерваяСтрока");//первая строка
О2 = Макет.ПолучитьОбласть("R3C5:R5C37"); //вторая строка
О3 = Макет.ПолучитьОбласть("R4C5:R5C37");//третья строка

обрасти называются у нас О1, О2, О3.
Как к ним обратиться в цикле?

Для й=1 по 3 цикл

О[й].Параметры.Заполнить // так нельзя, а как можно?

//Так?

ТекОбл = Макет.ПолучитьОбласть("R"+Строка(й+2)+C5:R+Строка(й+4)+C37");
ТекОбл.Параметры.Заполнить;

КонецЦикла;

Или прямо области обозвать "Обл1", "Обл2" и проч. В самом табличном документе?
20. rjhev korum (корум) 304 14.09.16 14:36 Сейчас в теме
(19) realEvgenius, прямо области обозвать "Обл1", "Обл2" и проч. В самом табличном документе.
И обращаться к ним в цикле :
Макет.ПолучитьОбласть("Обл"+счетчег);
realEvgenius; +1 Ответить 1
21. Евгений (realEvgenius) 14.09.16 18:58 Сейчас в теме
(20) корум, Сделал не работает

Такой макет http://i84.fastpic.ru/big/2016/0914/b4/20871ea52764f3af84b0f4b918e09eb4.jpg
область с шапкой, в которой есть переменная "НАдпись" называется Ш, остальные области - Обл1...Обл31

Модуль

ТабДок 	= Новый ТабличныйДокумент;
	Макет 	= ПолучитьМакет("Макет");
	
	Весь 	= Макет.ПолучитьОбласть("R1C1:R74C37");
	
	Ш 	= Макет.ПолучитьОбласть("R1C5:R3C37");
	                                     
	Ш.Параметры.Надпись = "Начало";
	
		Для й=1 по 30 цикл
		Обл = Макет.ПолучитьОбласть("Обл"+Строка(й));
		Обл.Параметры.НомерП = й;
			
	КонецЦикла;  

	ТабДок.Вывести(Весь);
	ТабДок.Показать();
...Показать Скрыть



Получается такой результат, то есть выводится совершенно пустой макет. Даже в шапке нет параметра "Надпись".

http://i83.fastpic.ru/big/2016/0914/42/6eaad7a65ed88440b7a1eea78a101942.jpg

Что делаю не так?

пробовал так:

Весь = Макет.ПолучитьОбласть("R1C1:R74C37");	
	Ш    = Весь.ПолучитьОбласть("Ш");


То есть Получил весь макет, из него уже области - результат тот же
22. Евгений (realEvgenius) 16.09.16 01:23 Сейчас в теме
Напишу как работает:

МАкет должен выглядеть так:

http://i85.fastpic.ru/big/2016/0916/be/c20e0ed8ec913a961bd2b2259cd7c9be.jpg

Весь 	= Макет.ПолучитьОбласть("R1C1:R74C37");  //получаем весь макет одним куском, по имени или областью
	
	Запрос = Новый Запрос("ВЫБРАТЬ   ///некий запрос с полями и 1й группировкой
	                      |	ОпределениеСоставаОбъектаСостав.Раздел.Родитель КАК Группа,
	                      |	ОпределениеСоставаОбъектаСостав.Раздел.МаркаРаздела КАК Обозначение,
	                      |	ОпределениеСоставаОбъектаСостав.Раздел.Наименование КАК Раздел,
	                      |	ОпределениеСоставаОбъектаСостав.ИнвНомер,
	                      |	ОпределениеСоставаОбъектаСостав.Комментарий,
	                      |	ОпределениеСоставаОбъектаСостав.НомерП,
	                      |	ОпределениеСоставаОбъектаСостав.НомерДоговора
	                      |ИЗ
	                      |	Документ.ОпределениеСоставаОбъекта.Состав КАК ОпределениеСоставаОбъектаСостав
	                      |ГДЕ
	                      |	ОпределениеСоставаОбъектаСостав.Ссылка = &Ссылка
	                      |ИТОГИ ПО
	                      |	Группа");
	Запрос.УстановитьПараметр("Ссылка",Ссылка);
	В1 	= Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	Сч	= 0;

	Пока В1.Следующий() Цикл
		Сч=Сч+1;
		
			Весь.Параметры["НомерП"+Строка(Сч)] = СокрЛП(В1.Группа);  //если это группа - то всячеки выделяем, делаем красиво
			Весь.Области["Обл"+Строка(Сч)].Объединить();   //Задал в макете имена областей (выделил строку в несколько ячеек мышкой) Обл1, Обл2 и т.д.
			Весь.Области["Обл"+Строка(Сч)].ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
			Весь.Области["Обл"+Строка(Сч)].ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2);
			Весь.Области["Обл"+Строка(Сч)].ГраницаСлева  = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2);
			Весь.Области["Обл"+Строка(Сч)].ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2);
			Весь.Области["Обл"+Строка(Сч)].ГраницаСнизу	 = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2);
			Весь.Области["Обл"+Строка(Сч)].Шрифт = Новый Шрифт(,,Истина);
			В2 = В1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			Пока В2.Следующий() Цикл	
				Сч=Сч+1;
				Весь.Параметры["НомерП"		+Строка(Сч)] = СокрЛП(В2.НомерП);   ///если просто строки - то  просто заполняем
				Весь.Параметры["Обозначение"+Строка(Сч)] = СокрЛП(В2.НомерДоговора)+" - "+СокрЛП(В2.Обозначение);
				Весь.Параметры["Раздел"		+Строка(Сч)] = СокрЛП(В2.Раздел);
				Весь.Параметры["ИнвНомер"	+Строка(Сч)] = СокрЛП(В2.ИнвНомер);
				Весь.Параметры["Комментарий"+Строка(Сч)] = СокрЛП(В2.Комментарий);
			КонецЦикла;
		
	КонецЦикла;  

	ТабДок.Вывести(Весь);
	
	ТабДок.Показать();
...Показать Скрыть
корум; aka Любитель XML; +2 Ответить
23. Владимир (user666093_teampk) 09.01.17 16:05 Сейчас в теме
Возникла аналогичная проблема, удалось решить путем создания дополнительных табличных документов для областей, которые нужно вывести после вертикальных линий.
    #Область ПодготовкаМакета   
    //**Получаем Макет**
    Результат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
    Результат.АвтоМасштаб = Истина;
    Макет =  Отчеты.ТоварноДенежныйОтчет.ПолучитьМакет("Макет_ТоварноДенежныйОтчет_Стр1");
    ОбластьШапка = Макет.ПолучитьОбласть("ОбластьШапка");      
    ОбластьМОЛ = Макет.ПолучитьОбласть("ОбластьМОЛ");    
    ОбластьМОЛ_Ш = Макет.ПолучитьОбласть("ОбластьМОЛ_Ш");    
    ОбластьМОЛ_Эл = Макет.ПолучитьОбласть("ОбластьМОЛ_Эл");    
    ОбластьБух = Макет.ПолучитьОбласть("ОбластьБух");    
    ОбластьБух_Ш = Макет.ПолучитьОбласть("ОбластьБух_Ш");    
    ОбластьБух_Эл = Макет.ПолучитьОбласть("ОбластьБух_Эл");
    
    ОбластьПрихРасх = Макет.ПолучитьОбласть("ОбластьПрихРасх");        
    ОбластьПодвал = Макет.ПолучитьОбласть("ОбластьПодвал");  
    
    #КонецОбласти 
    
    Результат.Вывести(ОбластьШапка);
    Результат.Вывести(ОбластьМОЛ);
    Результат.Присоединить(ОбластьБух);
    Результат.Вывести(ОбластьПрихРасх);
     
    Таб_1 = Новый ТабличныйДокумент;
    Таб_2 = Новый ТабличныйДокумент; 
    Таб_1.Вывести(ОбластьМОЛ_Ш);
    Таб_2.Вывести(ОбластьБух_Ш);     
    Для Счетчик = 1 По 24 Цикл
        Таб_1.Вывести(ОбластьМОЛ_Эл);
        Таб_2.Вывести(ОбластьБух_Эл);           
    КонецЦикла;  
    
    Результат.Присоединить(Таб_1);
    Результат.Присоединить(Таб_2);    
    
    Результат.Вывести(ОбластьПодвал);
...Показать Скрыть

Макет:

Итог:
Оставьте свое сообщение