Доброго.
Мне необходимо в зависимости от типа договора вывести один либо иной вариант части именованной области "Шапка". К примеру, если договор поставки - выводим ШапкаПоставка, если комиссии - ШапкаКомиссия. Но вопрос в том, что обе эти подобласти ШапкаПоставка и ШапкаКомиссия находятся внутри области Шапка.
Возможно ли это реализовать, если да, то как лучше это сделать?
(2) dmitrr, спасибо за ответ. Ваше решение лежит на поверхности, я сейчас так и собираюсь реализовать данную задачу.
Но зачем-то же 1с-ки придумали возможность вложенности именованных областей. Вот и хочется эту возможность попользовать.
Помоему, вложенные области нужны для того, чтобы можно было либо вывести целиком область "Шапка", либо внутренние области по отдельности.
Т.е. если нужна только ШапкаПоставка, то ПолучитьОбласть("ШапкаПоставка"), если же нужна вся область Шапка, то ПолучитьОбласть("Шапка").
Так что ничего разносить не надо, а просто использовать то, что есть.
В макете есть большая именованная область, внутри которой есть вложенная маленькая.
Хочу получить часть большой области ДО вложенной
В 7.7 написал бы примерно следующее:
ПолучитьОбласть("БольшаяОбласть
В 7.7. была возможность использовать "<" или "\" Таб.ВывестиСекцию("Шапка<") - Символы ''<'' , ''>'' , ''-'' после идентификатора секции указывают на то, что выбирается только часть секции. ''<'' - заголовочная часть (с начала секции до начала вложенной секции). ''>'' - подвальная часть (с конца вложенной секции до конца секции). ''-'' - средняя часть (собственно вложенная секция).
В 8.2 не нашел. Хотя смотрел в типовых конфигурациях - там если есть вложенные секции, то используются все равно конкретные вложенные.
Строка = Макет.ПолучитьОбласть("Договор|Строка");
для каждого стр из СсылкаНаОбъект.Имущество цикл
Изделия=Стр.Вещь;
КонецЦикла;
ТабДок.Вывести(Договор)
То есть, динамически создавать области в области нельзя?
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОблВнешняя = Макет.ПолучитьОбласть("Внешняя");
ОблВложенная = ОблВнешняя.ПолучитьОбласть("Вложенная");
Для А = 0 по 1 Цикл
ОблВнешняя.Вывести(ОблВложенная);
КонецЦикла;
Табдок.Вывести(ОблВнешняя);
Показать
И чтобы выводилось:
Внешняя область начало
Вложенная область
Вложенная область
Внешняя область конец
(12)А что именно странного вы видите?
Вы берете табличный документ состоящий из области "ОблВнешняя " и методом Вывести выводите в конец табличного документа новые области.
(13) То что логично было бы, чтобы вложенные области выводились вовнутрь внешней области:
ОблВнешняя.Вывести(ОблВложенная);
Я вывожу вложенную область во внешнюю
А уже потом вывожу внешнюю область со сформированными внутри вложенными в ТабДок:
Табдок.Вывести(ОблВнешняя);
Согласитесь, так было бы гораздо интересней
А, если хочешь вывести вложенные области отдельно, до или после внешней пожалуйста, выводи прямо в ТабДок:
Табдок.Вывести(ОблВложенная);
ИМХО, считаю, было бы неплохо если бы так
Возможно, это сложно технически поэтому не сделали такую возможность динамически расширять внешнюю область внутренними
(15) Метод Вывести выводит то что в скобках, то есть выводимую область, в конец текущего табличного документа...
Хорошо, тогда, получается, область это вложенный отдельный табличный документ? В нашем случае, внешняя область это табдок в табдоке, и, метод "Вывести" внешней области выводит то что в скобках в конец внутреннего табличного документа, а, потом выводит внутренний табличный документ во внешний. Вот, я и говорю, это, в общем - то, ненужная затея поскольку код не сокращает, то же самое с такими же затратами делается разбиением внешней области на три части. А, метод"Вставить" он вставляет, но, не выводит и не присоединяет внутри. Ему нужно чтобы области совпадали, иначе будет исключение:
Вот, я и говорю, это, в общем - то, ненужная затея поскольку код не сокращает, то же самое с такими же затратами делается разбиением внешней области на три части.