Имя: Пароль:
1C
 
Многоуровневая вложенность именованных областей табличного документа
0 sprinter83
 
16.03.11
15:53
Добрый день ссылка на макет
http://www.imagepost.ru/?v=761/0EZ3KMbzuq9gaNBoK8k6.png

Вопрос в следующем. Есть Макет табличного документа, у него есть область "ЗаголовокКлиент" и вложенная в него область "СтрокаТовары".
Как правильно заполнить данный макет. Может быть вопрос и простой, но ни когда с этим не встречался. Пробовал так, ни чего не выходит:

ТабличныйДокумент = Новый ТабличныйДокумент
Макет = ПолучитьОбщийМакет("Макет");

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокКлиент");
   ОбластьМакета.Параметры.НомерЗаказа = Шапка.Номер;
   //заполняю остальные параметры
           
   //Получаю выборку из запроса
   Пока ВыборкаТовары.Следующий() Цикл
       ОбластьМакетаСтроки = Макет.ПолучитьОбласть("СтрокаТовары");
       ОбластьМакетаСтроки.Параметры.Заполнить(ВыборкаТовары);
       ТабличныйДокумент.Вывести(ОбластьМакетаСтроки);
   КонецЦикла;
           
   ОбластьМакета.Параметры.Оплачено =  ВыборкаДолг.СуммаОстаток;
   //заполняю другие параметры
   ТабличныйДокумент.Вывести(ОбластьМакета);
   
   Возврат ТабличныйДокумент;
1 RomaH
 
naïve
16.03.11
16:10
ничего - это как?
хоть что-то да должно выйти
2 sprinter83
 
16.03.11
16:16
Сначала выходит область СтрокаТовары
А потом уже "ЗаголовокКлиент"
А нужно что бы область СтрокаТовары встраивалась в область ЗаголовокКлиент как на картинке
3 sprinter83
 
16.03.11
16:18
В общем-то уже не сильно актуально, но всё-таки интересно как это работает.
4 Ёпрст
 
гуру
16.03.11
16:18
(2) дык и выводи 1 область
5 Ёпрст
 
гуру
16.03.11
16:25
(3) хз как в снеговике, в клюшках можно было выводить часть области через <>| ...
6 sprinter83
 
16.03.11
16:29
Если имеется ввиду так

ТабличныйДокумент = Новый ТабличныйДокумент
Макет = ПолучитьОбщийМакет("Макет");

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокКлиент");
   ОбластьМакета.Параметры.НомерЗаказа = Шапка.Номер;
   //заполняю остальные параметры

           
   //Получаю выборку из запроса

   Пока ВыборкаТовары.Следующий() Цикл
       ОбластьМакетаСтроки = Макет.ПолучитьОбласть("СтрокаТовары");
       ОбластьМакетаСтроки.Параметры.Заполнить(ВыборкаТовары);
   КонецЦикла;
           
   ОбластьМакета.Параметры.Оплачено =  ВыборкаДолг.СуммаОстаток;
   //заполняю другие параметры

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

В таком случае ОбластьМакетаСтроки выводится только один раз и то пустая. т.е получаеться таблица получаеться так шапка таблицы, а затем одна пустая строка данной таблицы.
http://www.imagepost.ru/?v=761/etyV7PuqHaU7Ka9GbSvB1.png
7 sprinter83
 
16.03.11
16:36
Пробовал так ни чего не меняется,
Пока ВыборкаТовары.Следующий() Цикл
     ОбластьМакетаСтроки = Макет.ПолучитьОбласть("ЗаголовокКлиент|СтрокаТовары");
       ОбластьМакетаСтроки.Параметры.Заполнить(ВыборкаТовары);
ТабличныйДокумент.Вывести(ОбластьМакетаСтроки);
   КонецЦикла;
8 Ёпрст
 
гуру
16.03.11
16:41
не реализовали поди в снеговике получение части области (при вложенных областях)
Видать тут только либо делать 3-мя отдельными секциями, либо высчитывать высоту секции и получать область как разность высот..
9 sprinter83
 
16.03.11
16:46
Я в общем-то 3-мя отдельными секциями зделал
10 fimanich
 
16.03.11
16:47
(0)красивый у тебя макет, просто песня.
Имхо, удалить область ЗаголовокКлиент, добавить область Шапка (строки 41-51) и Подвал (53-73), выводить области по очереди...
11 KindLion
 
16.03.11
16:52
(0) Проще и быстрее всего - реализовать 3-мя отдельными областями, как советовали уже в (8).
Но, вообще-то задачка интересная - реализована эта фишка в 8-ке или нет. Посмотрю. Если найду - отпишусь.
12 KindLion
 
16.03.11
17:04
Еще вариант - обращаться не к именованной области, а к области строк макета.
Вот так:
ОбластьЗаголовка = ТабДок.Область("R41:R51");
//Заполнить параметры
ТабДок.ВывестиОбласть(ОбластьЗаголовка);

Пока ВыборкаТовары.Следующий() Цикл
ОбластьСтрок
13 Ёпрст
 
гуру
16.03.11
17:06
(12) это извращение - вставили/удалили строку и всё, ппц. отчету.
Ищи потом эти R41:R51 и правь везде..
14 KindLion
 
16.03.11
17:07
Сорри, отправилось раньше времени предыдущее сообщение
Вот так:
ОбластьЗаголовка = ТабДок.Область("R41:R51");
//Заполнить параметры
ТабДок.ВывестиОбласть(ОбластьЗаголовка);
Пока ВыборкаТовары.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТовары");
// заполнить параметры строки
ТабДок.ВывестиОбласть(ОбластьСтрока);
КонецЦикла;
ОбластьПодвала = ТабДок.Область("R53:R73");
//Заполнить параметры
ТабДок.ВывестиОбласть(ОбластьПодвала);
15 KindLion
 
16.03.11
17:08
(13) Да, это извращение.
Крайний случай при условии, если нельзя ломать макет.
В противном случае - разбить на 3 области макет.

Без вариантов, по-моему.
16 Ёпрст
 
гуру
16.03.11
17:23
(15) почему ?
вариант - считать высоту секции и иметь область через разницу высот..
Закон Брукера: Даже маленькая практика стоит большой теории.