Имя: Пароль:
1C
1С v8
Вывод в две колонки в табличный документ (ВставитьОбласть)
0 perpleks
 
06.05.13
14:30
«Выделение не соответствует вставляемому блоку» при выполнении следующего кода, никак не могу понять почему:

Для Каждого Стр Из Результат Цикл
       
       ОбластьМакета = Макет.ПолучитьОбласть("Строка|Колонка");
       ОбластьМакета.Параметры.Ном = Стр.Ссылка;
       
       Если ТабДок.ПроверитьВывод(ОбластьМакета) Тогда
           ТабДок.Вывести(ОбластьМакета);
           СтрокВСтолбце = СтрокВСтолбце + 1;
       Иначе
           ОбластьИсточник = ОбластьМакета.Область(1,
                                                   1,
                                                   1,
                                                   ОбластьМакета.ШиринаТаблицы);
                                                   
           ОбластьПриемник = ТабДок.Область(ТабДок.ВысотаСтраницы-СтрокВСтолбце,
                                            4,
                                            ТабДок.ВысотаСтраницы-СтрокВСтолбце,
                                            4+ОбластьМакета.ШиринаТаблицы);
                                           
           ТабДок.ВставитьОбласть(ОбластьИсточник,ОбластьПриемник);
           
               
           СтрокВСтолбце = СтрокВСтолбце - 1;
       КонецЕсли;
1 Wobland
 
06.05.13
14:39
это хорошо или плохо?
2 qeos
 
06.05.13
14:40
вопрос: почему!
3 kosts
 
06.05.13
14:44
Пример. Выводится несколько блоков в колонки, пока влезает.
С учетом того, что бы блоки не разрывались на разные страницы

...

       НомерСправки = НомерСправки + 1;
       
       Если ТабДокумент.ПроверитьПрисоединение(ОбластьОбласть1) Тогда
           ТабДокумент.Присоединить(ОбластьОбласть1);
           Продолжить;
       КонецЕсли;
       
       Если ТабДокумент.ПроверитьВывод(ОбластьОбласть1) Тогда
           ТабДокумент.Вывести(ОбластьОбласть1);
       Иначе
           ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
           ТабДокумент.Вывести(ОбластьОбласть1);
       КонецЕсли;
       
   КонецЦикла;
4 perpleks
 
06.05.13
15:00
(1) это печально :(

Не могу понять, как выделение может не соответствовать, если правая граница выделения = левой границе + ширине вставляемой области, а высота равна одной строке.

(2) Да, вы правильно меня поняли, я хочу узнать, почему так и в чём моя ошибка. Код этот не рабочий, поскольку написан исключительно для экспериментирования и выработки алгоритма, так что выглядит достаточно бестолково, конечно.

(3)
Большое спасибо за ответ, но, насколько я понимаю, у вас выводит блоки в такой последовательности:

1 2
3 4
5 6

А у меня задача вывести:

1 4
2 5
3 6

Пробовал делать вторую колонку отдельным табличным документом, и к первому его присоединять, но в таком случае получается следующее:

1
2
3
 4
 5
 6
5 kosts
 
06.05.13
15:05
(4) >А у меня задача вывести:
1 4
2 5
3 6

Можно сперва сохранить блоки в массив, а потом вывести как нужно. Либо выбирать данные сразу в нужном порядке.

Вставлять в середину я бы не стал, не нравится мне такой способ.
6 qeos
 
06.05.13
15:08
запихни каждую строку в горизонтальную группу
7 hhhh
 
06.05.13
15:14
(4) бред ведь у тебя. Попробуй тогда уж

        ОбластьИсточник = ОбластьМакета.Область(1,
                                                   1,
                                                   1,
                                          1 + ОбластьМакета.ШиринаТаблицы);
8 hhhh
 
06.05.13
15:16
(7) ну то есть сделай всё-таки, чтобы

"Выделение соответствовало вставляемому блоку"
9 perpleks
 
06.05.13
15:25
(8) я тупица