Имя: Пароль:
1C
1С v8
Изменение ширины колонок табличного дока
0 mzelensky
 
19.12.11
09:31
Доброго времени суток!
Трабл такой: есть табличный документ, на котором изображена таблица. Таблица состоит из 3 частей.
1 часть - 3 статические колонки
2 часть - набор динамически выводимых колонок (количество определяется программно)
3 часть - еще 4 статические колонки.

Т.к. в середине таблицы находятся динамически создаваемые колонки (их число варьируется), то общая ширина таблицы постоянно разная. Как программно изменять размеры колонок так, чтобы они были на ширину страницы? "АвтоМасштаб" не прокатывает, т.к. он лишь сжимает таблицу, если она слишком широкая, а растягивать не растягивает.
1 mzelensky
 
19.12.11
09:33
(0) как я полагаю (самое простое решение) нужно получить количество динамических колонок и в зависимости от их числа увеличить или уменьшить ширину одной из колонок в "1 части" (грубо говоря колонку с наименованием), но не могу понять как добраться до метода "ширина колонки" и изменить его.
2 Axel2009
 
19.12.11
09:33
ну у тебя есть ширина 7 статических колонок. и ширина страницы.. ну вычислить помоему не сложно..
3 Axel2009
 
19.12.11
09:34
(1) в табдоке
ТабДок.Область("C1").Ширина
4 mzelensky
 
19.12.11
09:37
(2) там еще другая загвоздка:

в макет выводится несколько таких таблиц! В каждой таблице количество динамических колонок разное, а следовательно общая ширина каждой таблицы тоже разная. Нужно все эти таблицы привести к общему размеру.
5 mzelensky
 
19.12.11
09:38
(4) выходит, что мне нужно, допустим, в первом случае колонку растянуть на 10 пунктов, а во втором сжать на 5, а в третьем еще что-то...и это все с одной и тойже колонкой (ну допустим второй)
6 mzelensky
 
19.12.11
09:42
ШапкаТЧЧасть1 = Макет.ПолучитьОбласть("ТабличнаяЧастьУпаковочногоЛистаШапка|КолонкаЧасть1");                    
ШапкаТЧЧасть1.Область("C2").ШиринаКолонки=5;
ТабДок.Вывести(ШапкаТЧЧасть1, Выборка.Уровень());

вот так почеиу-то не прокатывает!
7 Axel2009
 
19.12.11
09:51
(6) играться нужно с разными форматами строк.. не сталкивался..
8 mzelensky
 
19.12.11
09:55
(7) так куда хоть капать-то???
9 Axel2009
 
19.12.11
10:02
(8) глянь в СП СоздатьФорматСтрок
10 mzelensky
 
19.12.11
10:25
(9) немного дебильное описание в СП, но попробую...
11 mzelensky
 
19.12.11
13:53
какая-то хрень получается! Пишу:

//ШАПКА ТАБЛИЦЫ ЧАСТЬ1
           ШапкаТЧЧасть1 = Макет.ПолучитьОбласть("ТабличнаяЧастьУпаковочногоЛистаШапка|КолонкаЧасть1");
           ШапкаТЧДинамическиеЭл = Макет.ПолучитьОбласть("ТабличнаяЧастьУпаковочногоЛистаШапка|ДинамическиеЭл");
           ШапкаТЧЧасть2 = Макет.ПолучитьОбласть("ТабличнаяЧастьУпаковочногоЛистаШапка|КолонкаЧасть2");
   
           //ДИНАМИЧЕСКИЕ КОЛОНОЧКИ ШАПКИ
           МасЭлементов=новый массив;
           МасЭлементов=ОбщийМодуль.РазложитьСтрокуВМассивПодстрок(ВыборкаГруппировка.группировка, "#");            
           
           ШапкаТЧЧасть1.Область("R2").СоздатьФорматСтрок();
           ШапкаТЧЧасть1.Область("R2C2").ШиринаКолонки=48-(27/9*МасЭлементов.количество());
           ТабДок.Вывести(ШапкаТЧЧасть1, Выборка.Уровень());
           
           Для каждого НаименДКол из МасЭлементов цикл                                                      
               ДКол= Справочники.ХарактеристикиРасчетаЕдИзм.ПустаяСсылка();
               ДКол= Справочники.ХарактеристикиРасчетаЕдИзм.НайтиПоНаименованию(  НаименДКол );
               Если ДКол <> Справочники.ХарактеристикиРасчетаЕдИзм.ПустаяСсылка() тогда
                   ШапкаТЧДинамическиеЭл.Параметры.Наименование =  общиймодуль.ПолучитьПолноеНаименованиеОбъекта(выборка.Язык, ДКол);                    
                   ТабДок.Присоединить(ШапкаТЧДинамическиеЭл);        
               КонецЕсли;
           КонецЦикла;
           МасЭлементов=неопределено;
           НаименДКол=неопределено;
           ДКол=неопределено;
           
           //ШАПКА ТАБЛИЦЫ ЧАСТь 2
           ТабДок.Присоединить(ШапкаТЧЧасть2);

В итоге она мне первую часть выводит (с измененным параметром ширины колонки), а потом ничего не присоединяет (ни вторую ни третью часть). При этом никаких ошибок тоже нет - просто ничего не выводит!
12 mzelensky
 
19.12.11
14:04
нароооооод!!!! хелп!!!! F1-F1-F1!!!!
13 Axel2009
 
19.12.11
14:10
(12) сделай 3 разных табдока, в которых верные ширины колонок для начала. потом будешь с форматом строк играться
14 mzelensky
 
19.12.11
15:20
(12) не вариант! Там все динамическое и заранее не просчитывается. Нужно выставлять именно программно в момент формирования.
15 Axel2009
 
19.12.11
15:22
(14) как раз самый тот вариант. ты формируешь 3 таб дока с нужными тебе ширинами колонок. потом 1ый основной и в него вставляешь 2 других таб док с новым форматированием, и ширины колонок присваиваешь из этих источников. так и описано в СП
16 mzelensky
 
19.12.11
15:54
(15) так а если у меня не 3, а 20 таблиц??? Мне 20 табДоков формировать, а потом собирать в один???
17 mzelensky
 
19.12.11
15:56
(16) + проблема не в том ,чтобы вывести эти 3 разные таблицы, а в том чтобы вывести эту одну таблицу, которая состоит из 3 частей. Получается вывести только первую часть, а две остальные, которые должны к ней присоединяться, почему-то не выводятся в макет!
18 Axel2009
 
19.12.11
16:22
ну убери создать формат строк то.
19 Axel2009
 
19.12.11
16:23
в скд ваще не вариант таблицу выводить?
20 mzelensky
 
19.12.11
16:29
(18) так убрать или поставить??? ты определись!

(19) в СКД не вариант!
21 Axel2009
 
19.12.11
16:41
(20) так я не понял. ты хочешь в 1 таблицу нарисовать 150 разных колонок???
22 Axel2009
 
19.12.11
16:43
ЗЫ есть еще один вариант.
получаешь всю область ТабличнаяЧастьУпаковочногоЛистаШапка. знаешь что 3 первые колонки - нужны, 4ая динамическая и остальные тоже нужны.
сразу рисуешь область как тебе нужно (изменяешь) и выводишь всю строку.
23 Axel2009
 
19.12.11
17:01
вот пример:

Процедура КнопкаВыполнитьНажатие(Кнопка)
   ЭлементыФормы.ТабДок.Очистить();
   ТабДок = ЭлементыФормы.ТабДок;
   Макет = ПолучитьМакет("Макет");
   ВывестиСтроку(ТабДок, Макет, 1);
   ВывестиСтроку(ТабДок, Макет, 2);
   ВывестиСтроку(ТабДок, Макет, 3);
   ВывестиСтроку(ТабДок, Макет, 4);
   ВывестиСтроку(ТабДок, Макет, 5);
КонецПроцедуры

Процедура ВывестиСтроку(ТабДок, Макет, КоличествоДопКолонок)
   Обл = Макет.ПолучитьОбласть("Строка");
   ОбщаяШирина = Обл.Область(1, 2, 1, 2).ШиринаКолонки;
   ШиринаКолонок = ОбщаяШирина/КоличествоДопКолонок;
   Если КоличествоДопКолонок > 1 Тогда
       Обл.Область("R1").СоздатьФорматСтрок();
       Для Сч = 2 По КоличествоДопКолонок Цикл
           Обл.ВставитьОбласть(Обл.Область(1, 2, 1, 2), Обл.Область(1, 3, 1, 3), ТипСмещенияТабличногоДокумента.ПоГоризонтали);
       КонецЦикла;
   КонецЕсли;
   ТекущаяШирина = 0;
   Для Сч = 1 По КоличествоДопКолонок Цикл
       Если Сч = КоличествоДопКолонок Тогда
           Обл.Область(1, Сч+1).ШиринаКолонки = ОбщаяШирина - ТекущаяШирина;
       Иначе
           ТекущаяШирина = ТекущаяШирина + ШиринаКолонок;
           Обл.Область(1, Сч+1).ШиринаКолонки = ШиринаКолонок;
       КонецЕсли;
       Обл.Область(1, Сч+1).Текст = "К" + Строка(Сч);
   КонецЦикла;
   ТабДок.Вывести(Обл);
КонецПроцедуры


в макете 3 колонки. 1 узкая, 2 шировка, 3 узкая.
24 mzelensky
 
19.12.11
17:17
(23) т.е. ты формируешь общую строку из составляющих путем "ВставитьОбласть", а не через "присоединить", как это делал я изначально. Попробую...
25 Axel2009
 
19.12.11
17:35
(24) там основное то, что создать формат строк нужно формировать на область, которая уже вставлена, а не на одну ячейку.