Имя: Пароль:
1C
1С v8
Макет, получить значение области
0 lg2marvel
 
15.10.18
13:48
Добрый день.
Есть макет: https://dropmefiles.com/ddQEr

В коде вывожу данные:
    Таб         = ЭтаФорма.ЭлементыФормы.ТабличныйДокумент;//Новый ТабличныйДокумент;
    Таб.Очистить();
    Макет         = ПолучитьМакет("Макет");
    Шапка           = Макет.ПолучитьОбласть("Шапка");
    Таб.Вывести(Шапка);
    ШапкаТЧ        = Макет.ПолучитьОбласть("ШапкаТЧ|Основное");
    Таб.Вывести(ШапкаТЧ);

    ШапкаУслуги = Макет.ПолучитьОбласть("ШапкаТЧ|КолонкаУслуги");    //вывожу динамическую часть макета, а именно шапки
    Для Каждого стртзУслугиСтатьи Из тзУслугиСтатьи Цикл
        ШапкаУслуги.Параметры.Заголовок = стртзУслугиСтатьи.СтатьяЗатрат;
        Таб.Присоединить(ШапкаУслуги);
    КонецЦикла;

    Строка          = Макет.ПолучитьОбласть("Строка|Основное");
    СтрокаУслуги          = Макет.ПолучитьОбласть("Строка|КолонкаУслуги");

//
    Для Каждого стр из тзЗапросСклады Цикл             //Выводим в ТЧ результат запроса Склады
        Строка.Параметры.Склад = стр.Склад;
//вывожу данные в Строка.Параметры.бла-бла-бла
        Таб.Вывести(Строка);

//наступает время выводить динамическую часть строки. По идее я запускаю два цикла с перебором доступных вариантов (как при выводе шапки) и с условием присваиваю параметр и присоединяю секцию СтрокаУслуги

Вопрос вот в чем, не могу получить значение области шапки, да и вообще любой области.
Пробовал так:
Область = Макет.Область(2,3);
и так:
Область = Макет.Область("R2C3");
и выделением области:
Область = Макет.Область("R2C3:R3C3");
И где-то повстречал такой вариант:
Область = Макет.ПолучитьОбласть("R2C3");

Саму область взял для примера, там точно есть запись.

Затем проверяю
Если Область.ЗначениеЗаполнено Тогда
    Сообщить(Область.Значение);
КонецЕсли;

Но отладчик все время твердит что значение не доступно.

Или же я все-таки неправильно построил вывод данных и нужно выводить динамические столбцы во вложеном цикле? (пробовал, шапка динамического столбца съезжает вниз)
1 lg2marvel
 
15.10.18
13:55
Пробовал так:

        Для Каждого стртзУслугиСтатьи Из тзУслугиСтатьи Цикл
            ШапкаУслуги.Параметры.Заголовок = стртзУслугиСтатьи.СтатьяЗатрат;
            Таб.Присоединить(ШапкаУслуги);

            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ТорговыйОбъект", стр.Склад.ТорговыйОбъект);  
            ПараметрыОтбора.Вставить("СтатьяЗатрат", стртзУслугиСтатьи.СтатьяЗатрат);
            тзУслугиСтатьиТО = тзУслуги.Скопировать(ПараметрыОтбора); //ОткрытьЗначение(тзУслугиСтатьиТО);
            НакоплениеУслуг = 0;
                Для Каждого стр1 Из тзУслугиСтатьиТО Цикл
                    НакоплениеУслуг = НакоплениеУслуг + стр1.СуммаБезНДС;
                КонецЦикла;    
                СтрокаУслуги.Параметры.Услуга = НакоплениеУслуг;Сообщить(Строка(стртзУслугиСтатьи.СтатьяЗатрат)+Строка(НакоплениеУслуг));
            КонецЦикла;        
            
            Таб.Вывести(Строка);
            Таб.Присоединить(СтрокаУслуги);

Но все пишет в первую ячейку (ну да, так как присоединение вне цикла)
2 lg2marvel
 
15.10.18
13:57
Вот такой вариант выводит данные, но выглядит мягко говоря неочень:
        Таб.Вывести(Строка);
        Для Каждого стртзУслугиСтатьи Из тзУслугиСтатьи Цикл
            ШапкаУслуги.Параметры.Заголовок = стртзУслугиСтатьи.СтатьяЗатрат;
            Таб.Присоединить(ШапкаУслуги);
        //КонецЦикла;        
            
            //Для Каждого стртзУслугиСтатьи Из тзУслугиСтатьи Цикл
            //    Область = Макет.Область(2,3);
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ТорговыйОбъект", стр.Склад.ТорговыйОбъект);  
            ПараметрыОтбора.Вставить("СтатьяЗатрат", стртзУслугиСтатьи.СтатьяЗатрат);
            тзУслугиСтатьиТО = тзУслуги.Скопировать(ПараметрыОтбора); //ОткрытьЗначение(тзУслугиСтатьиТО);
            НакоплениеУслуг = 0;
                Для Каждого стр1 Из тзУслугиСтатьиТО Цикл
                    НакоплениеУслуг = НакоплениеУслуг + стр1.СуммаБезНДС;
                КонецЦикла;    
                СтрокаУслуги.Параметры.Услуга = НакоплениеУслуг;Сообщить(Строка(стртзУслугиСтатьи.СтатьяЗатрат)+Строка(НакоплениеУслуг));
            Таб.Присоединить(СтрокаУслуги);    
        КонецЦикла;    

Шапка опускается на уровень строки и выводит попеременно шапку и результат
3 lg2marvel
 
15.10.18
14:09
Пардон, получилось
4 lg2marvel
 
15.10.18
14:10
Шапку присоединил до внешнего цикла, и после вывода Строки внутри цикла:

        Для Каждого стртзУслугиСтатьи Из тзУслугиСтатьи Цикл
            ПараметрыОтбора = Новый Структура;
            ПараметрыОтбора.Вставить("ТорговыйОбъект", стр.Склад.ТорговыйОбъект);  
            ПараметрыОтбора.Вставить("СтатьяЗатрат", стртзУслугиСтатьи.СтатьяЗатрат);
            тзУслугиСтатьиТО = тзУслуги.Скопировать(ПараметрыОтбора); //ОткрытьЗначение(тзУслугиСтатьиТО);
            НакоплениеУслуг = 0;
                Для Каждого стр1 Из тзУслугиСтатьиТО Цикл
                    НакоплениеУслуг = НакоплениеУслуг + стр1.СуммаБезНДС;
                КонецЦикла;    
                СтрокаУслуги.Параметры.Услуга = НакоплениеУслуг;Сообщить(Строка(стртзУслугиСтатьи.СтатьяЗатрат)+Строка(НакоплениеУслуг));
            Таб.Присоединить(СтрокаУслуги);    
        КонецЦикла;