Именованные области одна внутри другой

1. eruil 20.08.12 18:21 Сейчас в теме
Доброго.
Мне необходимо в зависимости от типа договора вывести один либо иной вариант части именованной области "Шапка". К примеру, если договор поставки - выводим ШапкаПоставка, если комиссии - ШапкаКомиссия. Но вопрос в том, что обе эти подобласти ШапкаПоставка и ШапкаКомиссия находятся внутри области Шапка.
Возможно ли это реализовать, если да, то как лучше это сделать?

Скрин см. во вложении.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dmitrr 20.08.12 18:24 Сейчас в теме
Попробуйте сделать 3 области: ОбластьШапкаОбщая, ШапкаПоставка, ШапкаКомиссия - так наверное проще всего.
adhocprog; eruil; +2 Ответить
3. eruil 20.08.12 18:58 Сейчас в теме
(2) dmitrr, спасибо за ответ. Ваше решение лежит на поверхности, я сейчас так и собираюсь реализовать данную задачу.
Но зачем-то же 1с-ки придумали возможность вложенности именованных областей. Вот и хочется эту возможность попользовать.
4. Valet 56 20.08.12 20:22 Сейчас в теме
Помоему, вложенные области нужны для того, чтобы можно было либо вывести целиком область "Шапка", либо внутренние области по отдельности.
Т.е. если нужна только ШапкаПоставка, то ПолучитьОбласть("ШапкаПоставка"), если же нужна вся область Шапка, то ПолучитьОбласть("Шапка").
Так что ничего разносить не надо, а просто использовать то, что есть.
baracuda; eruil; +2 Ответить
5. eruil 20.08.12 21:00 Сейчас в теме
(4) Valet, вот, что удалось найти на просторах инета: http://www.1c-galaxy.ru/forum4/topic350824/

В макете есть большая именованная область, внутри которой есть вложенная маленькая.
Хочу получить часть большой области ДО вложенной
В 7.7 написал бы примерно следующее:
ПолучитьОбласть("БольшаяОбласть

Макет = получитьМакет("ИмяМакета");
Макет.УдалитьОбласть(Макет.Область("МояМаленькаяВложеннаяОбласть"), ТипСмещенияТабличногоДокумента.КакТоСдвинуть);
ОстатокБольшой = Макет.ПолучитьОбласть("МояБааальшаяОбласть");
Интерес; PavelKolobkov; starik-2005; irenk2006; Corgxes; krenchik; mea1c; ivangrant; CaSH_2004; +9 Ответить
8. CaSH_2004 374 23.04.16 19:42 Сейчас в теме
В (5) собственно и указано решение задачи
9. пользователь 12.03.17 13:05
Сообщение было скрыто модератором.
...
19. irenk2006 22.12.21 10:49 Сейчас в теме
6. dmitrr 20.08.12 21:23 Сейчас в теме
В 7.7. была возможность использовать "<" или "\" Таб.ВывестиСекцию("Шапка<") - Символы ''<'' , ''>'' , ''-'' после идентификатора секции указывают на то, что выбирается только часть секции. ''<'' - заголовочная часть (с начала секции до начала вложенной секции). ''>'' - подвальная часть (с конца вложенной секции до конца секции). ''-'' - средняя часть (собственно вложенная секция).
В 8.2 не нашел. Хотя смотрел в типовых конфигурациях - там если есть вложенные секции, то используются все равно конкретные вложенные.
7. Valet 56 20.08.12 21:26 Сейчас в теме
В этом случае проще действительно разбить на 3 области и не извращаться.
10. Rasten 24 12.03.17 13:05 Сейчас в теме
Строка = Макет.ПолучитьОбласть("Договор|Строка"); 

для каждого стр из СсылкаНаОбъект.Имущество цикл 
Изделия=Стр.Вещь; 
КонецЦикла; 

ТабДок.Вывести(Договор)
11. lev6975 06.11.19 17:34 Сейчас в теме
То есть, динамически создавать области в области нельзя?
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");	
ОблВнешняя = Макет.ПолучитьОбласть("Внешняя");
ОблВложенная = ОблВнешняя.ПолучитьОбласть("Вложенная");
        Для А = 0 по 1 Цикл
	      ОблВнешняя.Вывести(ОблВложенная);
        КонецЦикла;
	
	Табдок.Вывести(ОблВнешняя);

Показать


И чтобы выводилось:
Внешняя область начало
Вложенная область
Вложенная область
Внешняя область конец
Прикрепленные файлы:
12. lev6975 06.11.19 17:37 Сейчас в теме
При таком коде вложенные области выводятся после внешней, как ни странно)
13. Sashares 33 06.11.19 17:45 Сейчас в теме
(12)А что именно странного вы видите?
Вы берете табличный документ состоящий из области "ОблВнешняя " и методом Вывести выводите в конец табличного документа новые области.
14. lev6975 07.11.19 16:44 Сейчас в теме
(13) То что логично было бы, чтобы вложенные области выводились вовнутрь внешней области:
ОблВнешняя.Вывести(ОблВложенная);

Я вывожу вложенную область во внешнюю
А уже потом вывожу внешнюю область со сформированными внутри вложенными в ТабДок:
Табдок.Вывести(ОблВнешняя);

Согласитесь, так было бы гораздо интересней
А, если хочешь вывести вложенные области отдельно, до или после внешней пожалуйста, выводи прямо в ТабДок:
Табдок.Вывести(ОблВложенная);

ИМХО, считаю, было бы неплохо если бы так
Возможно, это сложно технически поэтому не сделали такую возможность динамически расширять внешнюю область внутренними
15. Sashares 33 07.11.19 17:32 Сейчас в теме
(14) Метод Вывести выводит то что в скобках, то есть выводимую область, в конец текущего табличного документа. Не в произвольное место, а в конец.

Если вы хотите вставить область в середину существующего табличного документа, так это тоже можно.
Метод ВставитьОбласть


ТабличныйДокумент (SpreadsheetDocument)
ВставитьОбласть (InsertArea)
Синтаксис:

ВставитьОбласть(<ИсходнаяОбласть>, <ОбластьПриемник>, <Сдвиг>, <ЗаполнятьПараметры>)
...
16. lev6975 07.11.19 17:55 Сейчас в теме
(15) Метод Вывести выводит то что в скобках, то есть выводимую область, в конец текущего табличного документа...
Хорошо, тогда, получается, область это вложенный отдельный табличный документ? В нашем случае, внешняя область это табдок в табдоке, и, метод "Вывести" внешней области выводит то что в скобках в конец внутреннего табличного документа, а, потом выводит внутренний табличный документ во внешний. Вот, я и говорю, это, в общем - то, ненужная затея поскольку код не сокращает, то же самое с такими же затратами делается разбиением внешней области на три части. А, метод"Вставить" он вставляет, но, не выводит и не присоединяет внутри. Ему нужно чтобы области совпадали, иначе будет исключение:
ТабДок.ВставитьОбласть(ОблВнутренняя,ОблВнешняя,ТипСмещенияТабличногоДокумента.ПоВертикали,Ложь);

Так вот не работает...
На самом деле просто интересуюсь академически... интересно как этот механизм устроен...
17. Sashares 33 07.11.19 17:58 Сейчас в теме
(16)
Вот, я и говорю, это, в общем - то, ненужная затея поскольку код не сокращает, то же самое с такими же затратами делается разбиением внешней области на три части.


Да =)
18. lev6975 07.11.19 17:59 Сейчас в теме
(17) Понятно))
Просто, не заморачивался никогда с этим, а, тут стало интересно
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот