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 цикл 
        ТабДок.ВставитьОбласть(ГК,БК,ТипСмещенияТабличногоДокумента.ПоВертикали);// здесь всяко пробовал, не пойму как правильно

КонецЦикла;
Ответы
Избранное Подписка Сортировка: Древо
3. aka Любитель XML 14.09.16 08:54 Сейчас в теме
(1) realEvgenius, хм... пишу конфу (до печати еще не добрался) тоже по автоматизации проектной документации, но до конструктора печати еще не добрался. ИМХО а не проще это загнать в колонтитул, или печатать уже на готовой бумаге с этими строками?
5. realEvgenius 14.09.16 09:01 Сейчас в теме
(3) aka Любитель XML, Проще на бланках с уже такими штампами. Но бланки для первой страницы и для следующих отличаются, опять же необходимо писаль лист№... / листов... Поэтому мои подопечные на бланках делать отказались...
9. корум 311 14.09.16 09:26 Сейчас в теме
(5) realEvgenius, используй свой макет как бланк. Никаких добавляемых строчек, всё сразу рассчитано и учтено, как в типовой торг-12.
Строки, которые заполняешь данными, поименуй Область1..ОбластьN и заполняй данные в цикле.
Потом выведешь весь табличный документ.
10. realEvgenius 14.09.16 09:28 Сейчас в теме
(9) корум, Да, так сделал... Одно Но... Не возможно выделять шрифтом, цветом группы. Тоесть таблица монотонная. - одинаковая
12. корум 311 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 14.09.16 12:37 Сейчас в теме
(14) realEvgenius, Есть еще варианты?

использую предварительно созданную тз и два цикла.
При этом может не совпадать количество строк, добавляются объединённые ячейки. Сложного тут нет. Кто то Вам мешает обратится к строке и колонке в уже созданной таблице?
И её потом уже скопировать в табл док для вывода.
realEvgenius; +1 Ответить
16. alex-l19041 9 14.09.16 12:37 Сейчас в теме
(14) realEvgenius, поддерживаю
используй свой макет как бланк. Никаких добавляемых строчек, всё сразу рассчитано
realEvgenius; +1 Ответить
17. корум 311 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 Ответить
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. корум 311 14.09.16 14:36 Сейчас в теме
(19) realEvgenius, прямо области обозвать "Обл1", "Обл2" и проч. В самом табличном документе.
И обращаться к ним в цикле :
Макет.ПолучитьОбласть("Обл"+счетчег);
realEvgenius; +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");	
	Ш    = Весь.ПолучитьОбласть("Ш");


То есть Получил весь макет, из него уже области - результат тот же
4. olgerd666 43 14.09.16 08:54 Сейчас в теме
(1) realEvgenius, Область слева которая не относится к таблице - можно выводить одновременно с таблицей
строка 1 _ 1 _ _
строка 1 1 1 1 1
______ 1 _ _ _ _
6. realEvgenius 14.09.16 09:02 Сейчас в теме
(4) olgerd666, Извиняюсь за убогость но как это понять "можно выводить одновременно с таблицей" ? Если не затруднит, можно кусочек кода?
7. olgerd666 43 14.09.16 09:09 Сейчас в теме
(6) realEvgenius,
Может я неправильно понял?
Область = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Область);
// Шапка таблицы
Шапка = Макет.ПолучитьОбласть("Шапка");
ТабДок.Присоеднить(Шапка);

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

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

чтото типа того
8. realEvgenius 14.09.16 09:25 Сейчас в теме
(7) olgerd666, Вы макет видите, который я выложил? Вертикальная секция "Начало" должна быть на странице. Далее надо добавить Верхушка|Конец, затем выводить в цикле Группа|Конец.
11. realEvgenius 14.09.16 09:29 Сейчас в теме
(7) olgerd666, Не получится так выводить, поскольку левая часть имеет объединенные ячейки, и не пропорциональна строкам
2. olgerd666 43 14.09.16 08:52 Сейчас в теме
Логика должна быть такой:
КолонкаСтроки - расширение таблицы вправо
ОбластьСтроки - НашаСтрокаЗаполнения
Создали Табличный документ
Вывели первую "ОбластьСтроки|КолонкаСтроки", заполнинли, присоединили вторую "ОбластьСтроки|КолонкаСтроки", заполнили, "ОбластьСтроки|КолонкаСтроки", заполнилим пустыми значениями например.
Новая строка
Вывели первую "ОбластьСтроки|КолонкаСтроки", заполнинли, присоединили вторую "ОбластьСтроки|КолонкаСтроки", заполнили, "ОбластьСтроки|КолонкаСтроки", заполнили.
и так в цикле двигаемся сначала вправо, потом вниз
При разной длине строк - заполняем пустыми значениями (1 - данные, _ - пустое значение)
1 1 1 1 _ _ _
_ 1 _ 1 1 1 1
_ _ _ _ _ _ 1
realEvgenius; +1 Ответить
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);    
    
    Результат.Вывести(ОбластьПодвал);
Показать

Макет:

Итог:
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день