Имя: Пароль:
1C
1С v8
Таб док - присоединить/вывести - что не так?
0 RomaH
 
naïve
13.11.12
09:07
Надо вывести печатную форму в двух екземплярах на ландшафтную ориентацию листа
т.е. на А4 напечать две формы А5
делаю:

   ТабличныйДокумент.Вывести(РезультатОсмотра);
   
   ТабличныйДокумент.Присоединить(РезультатОсмотра);

выводит друг под другом

я не правильно СП прочитал?

Описание:

Присоединяет табличный документ к результирующему табличному документу, помещая его в следующей колонке правее самой правой выведенной колонки, начиная со строки, с которой выводился предыдущий табличный документ.
1 butterbean
 
13.11.12
09:08
РезультатОсмотра должен быть прямоугольной областью, а не целой строкой
2 RomaH
 
naïve
13.11.12
09:09
это из-за разного офрмата строк в РезультатОсмотра?
3 hhhh
 
13.11.12
09:16
(2) строка вообще не может быть в Присоединить. Нужно прямоугольник.
4 RomaH
 
naïve
14.11.12
08:04
а как тогда красиво вывести "две страницы" на листе?
5 butterbean
 
14.11.12
08:07
(4) да также и вывести, только области брать ограниченные прямоугольные, а не шириной во всю строку
6 RomaH
 
naïve
14.11.12
08:09
(5) а выводить построчно?

я так понимаю прямоугольную оласть из таб дока не взять если в нем строки с разным форматом
7 НЕА123
 
14.11.12
08:13
ВставитьОбласть кури.
8 RomaH
 
naïve
14.11.12
08:14
(7) так опять же нужная область
а у меня в результирующем ТД - первая строка из одной колонки, а вторая из 10
9 НЕА123
 
14.11.12
08:21
(8)
>а у меня в результирующем ТД - первая строка из одной колонки, а вторая из 10
вроде по-русски. но не понимаю. наверно, я еще не проснулся.
10 НЕА123
 
14.11.12
08:22
(9)+
ээээ.
ну а пробовал хоть (7)?
11 RomaH
 
naïve
14.11.12
08:29
(10) какую область из ТД получать?
строки разного формата сделаны в макете
http://www.dropmocks.com/mBmYcu
12 НЕА123
 
14.11.12
08:29
(0)
при разном формате строк только настройкой принтера печать 2 на одном листе.
13 RomaH
 
naïve
14.11.12
08:30
а получит надо так:
http://www.dropmocks.com/mBmpc7
14 НЕА123
 
14.11.12
08:31
(11)
ну и куле?
бери все. Область()
15 RomaH
 
naïve
14.11.12
08:41
Если размеры исходной области не соответствуют результирующей области, то при выполнении метода возникает ошибка.
16 butterbean
 
14.11.12
08:45
(13) еще раз:
назначь имена вертикальным областям и выводи области типа "Горизонтальная|Вертикальная" в свой таб. документ, а потом уже попробуй полученный таб. документ целиком вывести, а потом присоединить
17 НЕА123
 
14.11.12
08:46
(15)
хм. тогда только (12) остается.
я так думаю (с)
18 RomaH
 
naïve
14.11.12
08:47
(16) зачем "Вертикальная" ? таб док целиком я  вывожу
задача его продублировать справа
19 RomaH
 
naïve
14.11.12
08:50
а если присоединять по строкам?
вопрос как определить последнюю колонку в строке?
Типа:
Для К = 1 По ТабДок.ВысотаТаблицы() Цикл

ОбластьДляПрисоединения = ТабДок.ПолучитьОбласть(К,1,К,???);
КонецЦикла
20 RomaH
 
naïve
14.11.12
08:52
сначала получить таб док ПолучитьОбласть(К,1,К) - не указывая конечную колонку, а потом уже - ШиринаТаблицы?
21 RomaH
 
naïve
14.11.12
09:01
типа:

   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,1,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       ТабличныйДокумент.Присоединить(ОбластьВывода);
   КонецЦикла;
   

но почему-то СтрокаТД.ШиринаТаблицы всегда 1
хотя
РезультатОсмотра.ШиринаТаблицы = 6
22 RomaH
 
naïve
14.11.12
09:03
а, ну да

в общем немного подкорректировать и можно использовать:

Функция ПечатьРезультатовОсмотра2хА42(МассивОбъектов,ОбъектыПечати,СуфиксМакета = "")
   
   СсылкаНаОбъект = МассивОбъектов[0];
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       ТабличныйДокумент.Присоединить(ОбластьВывода);
   КонецЦикла;
   
   
   УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект);
   
   Возврат ТабличныйДокумент;
   
КонецФункции
23 RomaH
 
naïve
14.11.12
09:04
остается добавить границу для отреза/отрыва, и как-то вывести её ровно по центру страницы
24 RomaH
 
naïve
14.11.12
09:05
25 RomaH
 
naïve
14.11.12
09:30
есть идеи как вывести линию отреза?
тут еще этой областью (линией отреза) надо бы и ширину левого макета поправить - что бы она ломаной не получилась и с макетом начальным долго не париться - вискивая десятые мисллиметров при настройке
26 butterbean
 
14.11.12
09:33
(25) париться с шириной придется по-любому
а линию отреза можешь выводить кусочками при каждом присоединении строки
27 RomaH
 
naïve
14.11.12
09:49
вроде все так, но почему-то линию отреза выводит не ту что в макете задана

   МакетЛинииОтреза = ПолучитьОбщийМакет("МакетЛинииОтреза");
   
   ОбластьЛинииОтреза = МакетЛинииОтреза.ПолучитьОбласть("Строка|Колонка");
   
   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Середина = 74.52;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(К,Н,К,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;
       
       ШиринаЛевойКолонки = Середина - ШиринаСтроки;
       
       ОбластьЛинииОтреза.Область(1,1,1,1).ШиринаКолонки = ШиринаЛевойКолонки;
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       
       ТабличныйДокумент.Присоединить(ОбластьЛинииОтреза);
       
       ТабличныйДокумент.Присоединить(ОбластьВывода);
       
   КонецЦикла;
   
   
   УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект);
   
   Возврат ТабличныйДокумент;
28 RomaH
 
naïve
14.11.12
09:50
29 RomaH
 
naïve
14.11.12
09:53
почему выводит в линию отреза не те ячейки котррые в макете указаны?
30 RomaH
 
naïve
14.11.12
09:54
должны быть две синие с границей посередине
а выводит две белые без границы,
31 НЕА123
 
14.11.12
10:11
проще изменить макет.
я бы убрал формат строк + добавил копию.
32 RomaH
 
naïve
14.11.12
10:13
(31)  таких макетов по 50 штук
все в процессе разработки/корректировки
для того что бы изменить/добавить что-либо в макете печати - надо аккуратно это исправить в ТРЕХ местах
м макете для А5 + два места в макете для А4
33 RomaH
 
naïve
14.11.12
10:15
вообще что-то не врубаюсь

пробую так: (заккоменченный код) - вообще перестает выводить вторую часть
34 RomaH
 
naïve
14.11.12
10:15
МакетЛинииОтреза = ПолучитьОбщийМакет("МакетЛинииОтреза");
   
   ОбластьЛинииОтреза = МакетЛинииОтреза.ПолучитьОбласть("R1C1:R1C2");
   
   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Середина = 74.52;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(К,Н,К,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;
       
       ШиринаЛевойКолонки = Середина - ШиринаСтроки;
       
       //ОбластьЛинииОтреза.Область(1,1,1,1).ШиринаКолонки = ШиринаЛевойКолонки;
       
       //ТабДокСправа = Новый ТабличныйДокумент;
       //
       //ТабДокСправа.Вывести(ОбластьЛинииОтреза);
       //ТабДокСправа.Присоединить(ОбластьВывода);
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       
       //ТабличныйДокумент.Вывести(ТабДокСправа);
       

       //ТабличныйДокумент.Присоединить(ТабДокСправа.ПолучитьОбласть(1,1,1,ТабДокСправа.ШиринаТаблицы));
       
       ТабличныйДокумент.Присоединить(ОбластьВывода);
       
   КонецЦикла;
35 RomaH
 
naïve
14.11.12
10:17
(31) формат строк конечно можно убрать - то опять же гемморой получаю с форматированием макета - тут немного убавить, там добавить
это надо будет делать колонки шириной 2 и форматировать объединением чеек

вобщем-то все начало получаться, уперся в вывод "разделителя"
36 RomaH
 
naïve
14.11.12
10:20
почему вот такое выводит только синюю полоску линии отрыва?
37 RomaH
 
naïve
14.11.12
10:20
МакетЛинииОтреза = ПолучитьОбщийМакет("МакетЛинииОтреза");
   
   ОбластьЛинииОтреза = МакетЛинииОтреза.ПолучитьОбласть("R1C1:R1C2");
   
   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Середина = 74.52;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(К,Н,К,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;
       
       ШиринаЛевойКолонки = Середина - ШиринаСтроки;
       
       //ОбластьЛинииОтреза.Область(1,1,1,1).ШиринаКолонки = ШиринаЛевойКолонки;
       
       ТабДокСправа = Новый ТабличныйДокумент;
       
       ТабДокСправа.Вывести(ОбластьЛинииОтреза);
       ТабДокСправа.Присоединить(ОбластьВывода);
       
       //ТабличныйДокумент.Вывести(ОбластьВывода);
       
       ТабличныйДокумент.Вывести(ТабДокСправа);
       

       //ТабличныйДокумент.Присоединить(ТабДокСправа.ПолучитьОбласть(1,1,1,ТабДокСправа.ШиринаТаблицы));
       
       //ТабличныйДокумент.Присоединить(ОбластьВывода);
       
   КонецЦикла;
38 RomaH
 
naïve
14.11.12
10:21
ОбластьЛинииОтреза = МакетЛинииОтреза.ПолучитьОбласть("R1C1:R1C2");
   - вроде прямоугольная область

и ОбластьВывода таже что и раньше
но не присоединяет её вообще
39 RomaH
 
naïve
14.11.12
10:26
ну да - все упирается в разный формат строк
в одной строке может быть область ТД одного формата, либо без формата + один формат строки

убрал формат строки из линии отреза - получил все строки в макете одного формата
добавил - не присоединяет область вообще
40 RomaH
 
naïve
14.11.12
10:36
а ширину колонки как задать?

   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Середина = 74.52;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(К,Н,К,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;
       
       ШиринаЛевойКолонки = Середина - ШиринаСтроки;
       
       ОбластьЛинииОтреза = СтрокаТД.ПолучитьОбласть("R1C100:R1C101");
       
       ОбластьЛинииОтреза.Область(1,1,1,1).ШиринаКолонки = ШиринаЛевойКолонки;
       ОбластьЛинииОтреза.Область(1,2,1,2).ШиринаКолонки = 2.7;
       ОбластьЛинииОтреза.Область(1,2,1,2).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Точечная,1);
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       
       ТабличныйДокумент.Присоединить(ОбластьЛинииОтреза);
       
       ТабличныйДокумент.Присоединить(ОбластьВывода);
       
   КонецЦикла;
   
   УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект);


границу рисует, но ширина колокно остается первоначальной
41 RomaH
 
naïve
14.11.12
10:41
блин
теперь
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(К,Н,К,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;

возвращает для всех строк кроме первой ширину 9
42 RomaH
 
naïve
14.11.12
10:47
похвастаюсь
http://www.dropmocks.com/mBmwAi
Функция ПечатьРезультатовОсмотра2хА42(МассивОбъектов,ОбъектыПечати,СуфиксМакета = "")
   
   СсылкаНаОбъект = МассивОбъектов[0];
   
   РезультатОсмотра = ПечатьРезультатовОсмотра(МассивОбъектов,ОбъектыПечати);
   
   Середина = 74.52;
   
   ТабличныйДокумент = Новый ТабличныйДокумент;
   
   Для К = 1 По РезультатОсмотра.ВысотаТаблицы Цикл
       
       СтрокаТД = РезультатОсмотра.ПолучитьОбласть(К,,К);
       
       ОбластьВывода = РезультатОсмотра.ПолучитьОбласть(К,1,К,СтрокаТД.ШиринаТаблицы);    
       
       ШиринаСтроки = 0;
       
       Для Н = 1 По СтрокаТД.ШиринаТаблицы Цикл
           Область = ОбластьВывода.Область(1,Н,1,Н);
           ШиринаСтроки = ШиринаСтроки + Область.ШиринаКолонки;
       КонецЦикла;
       
       ШиринаЛевойКолонки = Середина - ШиринаСтроки;
       
       ОбластьЛинииОтреза = СтрокаТД.ПолучитьОбласть("R1C100:R1C101");
       
       ОбластьЛинииОтреза.Область(,1,,1).ШиринаКолонки = ШиринаЛевойКолонки;
       ОбластьЛинииОтреза.Область(,2,,2).ШиринаКолонки = 2.7;
       ОбластьЛинииОтреза.Область(1,2,1,2).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Точечная,1);
       
       ТабличныйДокумент.Вывести(ОбластьВывода);
       
       ТабличныйДокумент.Присоединить(ОбластьЛинииОтреза);
       
       ТабличныйДокумент.Присоединить(ОбластьВывода);
       
   КонецЦикла;
   
   УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, 1, ОбъектыПечати, СсылкаНаОбъект);
   
   Возврат ТабличныйДокумент;
   
КонецФункции
43 RomaH
 
naïve
14.11.12
10:47
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн