Имя: Пароль:
1C
1С v8
Как программно добавить колонки в макет?
0 hasan-rusel
 
27.03.13
06:15
БП 2.0
Есть макет:
[IMG]http://i037.radikal.ru/1303/76/41a39d8e83e4.jpg[/IMG]

первые 4 колонки не изменны, а 5 колонка будет повторяться при проверке нового подразделения, т.е. новое подразделение - новая с колонка с параметрами выборки.

Подскажите пожалуйста как это реализовать ? Просто впервые сталкиваюсь с добавлением колонок...  
Пытался вот так, но не получается ((

[CODE]Процедура КнопкаВыполнитьНажатие(Кнопка)
   Таблица = Новый ТабличныйДокумент ;

   Макет = ПолучитьМакет("Макет");

//    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
//    Таблица.Вывести(ОбластьШапка);
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   Секция = Таблица.ПолучитьОбласть("R1C5:R90C5");
   Таблица.НачатьАвтогруппировкуКолонок();
   
   Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
                 |    ХозрасчетныйДвиженияССубконто.СубконтоДт2,
                 |    ХозрасчетныйДвиженияССубконто.Сумма,
                 |    ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
                 |    ХозрасчетныйДвиженияССубконто.Период,
                 |    ХозрасчетныйДвиженияССубконто.ПодразделениеКт.Ссылка КАК ПодразделениеКтСсылка,
                 |    ХозрасчетныйДвиженияССубконто.СуммаНУДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаНУКт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаПРДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаПРКт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаВРДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаВРКт
                 |ИЗ
                 |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
                 |            &НачПериода,
                 |            &КонПериода,
                 |            СчетДт = &Счет
                 |                И ПодразделениеДт.Ссылка = &Подразделение,
                 |            ,
                 |            ) КАК ХозрасчетныйДвиженияССубконто
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    ПодразделениеКтСсылка,
                 |    СчетКт";
                 
   Запрос.УстановитьПараметр("Счет", Счет);
   Запрос.УстановитьПараметр("Подразделение", Подразделение);
   Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
   Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Если Выборка.СубконтоДт2.Наименование = "Амортизация ОС и НМА" тогда
           
           АБУ1 = АБУ1 + Выборка.Сумма;
           Если не Выборка.СчетКт.Код = "20" и не Выборка.СчетКт.Код = "20.01" и не Выборка.СчетКт.Код = "20.02" и не Выборка.СчетКт.Код = "23" и не Выборка.СчетКт.Код = "23.01" и не Выборка.СчетКт.Код = "23.02" тогда
               АБУ2 = АБУ2 + Выборка.Сумма;
           КонецЕсли;
       КонецЕсли;
       Если Выборка.ПодразделениеКтСсылка <> NULL тогда
       Подр = Выборка.ПодразделениеКтСсылка;
       Если Подр <> ПД тогда
           ПД=Подр;
//        Секция = Таблица.ПолучитьОбласть("R7C5");
       Секция.Область().Текст = ПД;
       Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
       Секция.Присоединить(Секция,5, ,Истина);
       //Таблица.Вывести(Секция,5, ,Истина);
   КонецЕсли;
   КонецЕсли;
КонецЦикла;

   ОбластьСтрока.Параметры.АБУ1 = АБУ1;
   ОбластьСтрока.Параметры.АБУ2 = АБУ2;

   Таблица.Вывести(ОбластьСтрока);
   

             
                 
   Таблица.Автомасштаб            =    Истина;
   Таблица.ОриентацияСтраницы    =    ОриентацияСтраницы.Ландшафт;
   Таблица.ТолькоПросмотр        =    Истина;
   Таблица.Показать("Макет", , Истина);          
   
КонецПроцедуры
[/CODE]
1 Wobland
 
27.03.13
06:19
присоединить? картинку и код не глядел
2 hasan-rusel
 
27.03.13
06:40
(1) да, функцией присоединить, пытался ей, вот только не выходит, либо вообще "недостаточно памяти", либо хрень...
3 Wobland
 
27.03.13
06:43
то есть, сейчас вопрос звучит по-другому: "где у меня ошибка?"?
4 Галахад
 
гуру
27.03.13
06:45
Наверное, одинэска окуевает от того, что ее просят присоединить к таблице какой-то огрызок.
Просто понять не может.
5 Wobland
 
27.03.13
06:47
Таблица.ПолучитьОбласть("R1C5:R90C5").Присоединить(Таблица.ПолучитьОбласть("R1C5:R90C5"),5, ,Истина);

я б тоже от такого прихренел
6 hasan-rusel
 
27.03.13
06:49
(4) Как сделать так чтобы можно было присоединять 5 колонку в цикле ?

Как бы так:
Пока цикл **** если новое подразделение тогда
берем 5 колонку, параметры такие-то (5 колонка.Параметры.ПД= ПД;)
выводим справа... и т.д.
?!??!
7 Wobland
 
27.03.13
07:00
выводишь строку. если нужна пятая колонка, присоединяешь к ней пересечение областей (типа "ПятаяКолонка|Строка"). повторяешь итерацию...
8 hasan-rusel
 
27.03.13
07:00
(5)
Сколько сарказма...

Переделал:
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   Секция = Таблица.ПолучитьОбласть("R1C5:R90C6");
   Таблица.НачатьАвтогруппировкуКолонок();
   
   Запрос = Новый Запрос;
   Запрос.Текст ="ВЫБРАТЬ
                 |    ХозрасчетныйДвиженияССубконто.СубконтоДт2,
                 |    ХозрасчетныйДвиженияССубконто.Сумма,
                 |    ХозрасчетныйДвиженияССубконто.СчетКт КАК СчетКт,
                 |    ХозрасчетныйДвиженияССубконто.Период,
                 |    ХозрасчетныйДвиженияССубконто.ПодразделениеКт.Ссылка КАК ПодразделениеКтСсылка,
                 |    ХозрасчетныйДвиженияССубконто.СуммаНУДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаНУКт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаПРДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаПРКт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаВРДт,
                 |    ХозрасчетныйДвиженияССубконто.СуммаВРКт
                 |ИЗ
                 |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто(
                 |            &НачПериода,
                 |            &КонПериода,
                 |            СчетДт = &Счет
                 |                И ПодразделениеДт.Ссылка = &Подразделение,
                 |            ,
                 |            ) КАК ХозрасчетныйДвиженияССубконто
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    ПодразделениеКтСсылка,
                 |    СчетКт";
                 
   Запрос.УстановитьПараметр("Счет", Счет);
   Запрос.УстановитьПараметр("Подразделение", Подразделение);
   Запрос.УстановитьПараметр("НачПериода", НачалоДня(НачПериода));
   Запрос.УстановитьПараметр("КонПериода", КонецДня(КонПериода));
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Если Выборка.СубконтоДт2.Наименование = "Амортизация ОС и НМА" тогда
           
           АБУ1 = АБУ1 + Выборка.Сумма;
           Если не Выборка.СчетКт.Код = "20" и не Выборка.СчетКт.Код = "20.01" и не Выборка.СчетКт.Код = "20.02" и не Выборка.СчетКт.Код = "23" и не Выборка.СчетКт.Код = "23.01" и не Выборка.СчетКт.Код = "23.02" тогда
               АБУ2 = АБУ2 + Выборка.Сумма;
           КонецЕсли;
       КонецЕсли;
       Если Выборка.ПодразделениеКтСсылка <> NULL тогда
       Подр = Выборка.ПодразделениеКтСсылка;
       Если Подр <> ПД тогда
           ПД=Подр;
//        Секция = Таблица.ПолучитьОбласть("R7C5");
       Секция.Область().Текст = ПД;
       Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
       Таблица.Присоединить(Секция,5,"Строка" ,Истина);
       //Таблица.Вывести(Секция,5, ,Истина);

Теперь выводил с 1 по 90 строку значение Секция.Область().Текст = ПД;
а только потом таблицу.


PS) Не ругайте сильно, я только узичаю 1ску, с таким вопросом сталкиваюсь впервые...
9 hasan-rusel
 
27.03.13
07:03
(7) Спасибо за помощь, а можно строкой кода ?

"присоединяешь к ней пересечение областей (типа "ПятаяКолонка|Строка")"

это не "R1C5:R90C6" ?
10 Wobland
 
27.03.13
07:04
(9) нет
ОбластьПятаяНога=Макет.ПолучитьОбласть("ПятаяНога|Строка");
Цикл
ТабДок.Вывести(ОбластьСтрока);
ТабДок.Присоединить(ОбластьПятаяНога);
11 1Сергей
 
27.03.13
07:05
(9) у тебя типовой нет под рукой чтоли?
12 Wobland
 
27.03.13
07:05
здесь, похоже, человеку нужно ещё понять, что области можно именовать...
13 hasan-rusel
 
27.03.13
07:06
(11) нет, а как бы она мне помогла ?
14 Wobland
 
27.03.13
07:07
(13) в ней есть много строк кода
15 hasan-rusel
 
27.03.13
07:08
(14)  представляю... если у меня нетиповая БП и строк тут %)
16 hasan-rusel
 
27.03.13
07:09
(10) Привет отличный  !
А можно сразу учитывая мой код?
17 hasan-rusel
 
27.03.13
07:09
(10) Пример*
18 Wobland
 
27.03.13
07:11
(16) лениво вникать, извини
19 1Сергей
 
27.03.13
07:12
можно именовать не только горизонтальные области, но и вертикальные
20 hasan-rusel
 
27.03.13
07:13
(19) Вот это до меня только что дошло !! Спасибо !!
Я и не знал об этом)
21 1Сергей
 
27.03.13
07:14
(20) и вообще, читай ЖКК
22 hasan-rusel
 
27.03.13
07:18
(21) Было бы время, обязательно почитал бы ! А так посадили, вот тебе ТЗ делай!
Обязательно почитаю как только появиться время !



А я могу сделать вот так или как лучше ?

ОбластьКолонка = Макет.ПолучитьОбласть("Колонка");
ОбластьКолонка.Параметры.ПД = Выборка.ХХХХХХХХ;
Таблица.Вывести(ОбластьКолонка);

Или не могу так ?
Если нет, то как ?
23 hasan-rusel
 
27.03.13
07:22
Вот так похоже надо ?

ОбластьКолонка = Макет.ПолучитьОбласть("Строка|Колонка");
ОбластьКолонка.Параметры.ПД = Выборка.ХХХХХХХХ;
Таблица.Вывести(ОбластьКолонка);
24 Wobland
 
27.03.13
07:25
получение области вон из цикла, Область.Параметры.Заполнить(Выборка) часто иногда выглядит интересней
25 Wobland
 
27.03.13
07:25
(23) и в этом месте логично было бы предположить Присоединить вместо Вывести
26 1Сергей
 
27.03.13
07:27
сначала выводишь одну область, потом 5 раз (или сколько тебе нужно) присоединяешь к ней справа ещё одну область, присоединяешь итоговую колонку.
(24)+1 когда будешь вносить изменения, меньше переписывать придётся, если используешь Заполнить()
27 hasan-rusel
 
27.03.13
07:40
(25) Да, получение области не в цикле, это я просто...
Да, таблица сформировалась вроде как надо !
БОЛЬШОЕ СПАСИБО !!!!!!!!!!!!!

ТОгда возникают вопросы по поводу
Область.Параметры.Заполнить(Выборка)
Как использовать ? Как в выборке назначитьт параметры макета ?
28 Wobland
 
27.03.13
07:41
(27) лучше в пакете пропиши поля из выборки
29 Wobland
 
27.03.13
07:42
(28) *макете
30 Wobland
 
27.03.13
07:42
ну или КАК употребить...
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой