- В этой теме 1 ответ, 2 участника, последнее обновление 1 час, 52 минуты назад сделано .
Просмотр 1 ветки ответов
Просмотр 1 ветки ответов
- Для ответа в этой теме необходимо авторизоваться.
Программирование и администрирование в 1С
База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему область подвала макета не заполняется параметрами из итога ТЗ?
ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);
ОбластьПодвал = Макет.ПолучитьОбласть(«Подвал»);
Для каждого СтрокаТЗ Из ТЗ Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЗ);
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Итоги = Новый Соответствие;
Для Каждого Колонка Из ТЗ.Колонки Цикл
Если Колонка.ТипЗначения = ТипЧисло Тогда
Итоги.Вставить(Колонка.Имя, ТЗ.Итог(Колонка));
КонецЕсли;
КонецЦикла;
ОбластьПодвал.Параметры.Заполнить(Итоги);
ТабДок.Вывести(ОбластьПодвал);
Имена колонок ТЗ совпадают с именами параметров макета. Области макета ОбластьСтрока заполняются правильно, а ОбластьПодвал не заполняется. В чем причина?
Причина в том, что метод Параметры.Заполнить() области табличного документа не умеет принимать объект типа Соответствие. Он ожидает либо структуру, либо строку таблицы значений, либо объект с открытыми свойствами (например, структуру).
В вашем коде вы создаёте Итоги как Новый Соответствие, а потом пытаетесь передать его в Заполнить — это не сработает.
Чтобы исправить, замените Соответствие на Структуру:
|
1 2 3 4 5 6 7 8 9 |
Итоги = Новый Структура; Для Каждого Колонка Из ТЗ.Колонки Цикл Если Колонка.ТипЗначения = ТипЧисло Тогда Итоги.Вставить(Колонка.Имя, ТЗ.Итог(Колонка)); КонецЕсли; КонецЦикла; ОбластьПодвал.Параметры.Заполнить(Итоги); ТабДок.Вывести(ОбластьПодвал); |
Структура — это именно тот тип, который метод Заполнить ожидает для заполнения параметров области.
Если хотите, можно проверить тип параметров области через Отладчик или через:
|
1 |
Сообщить(ТипЗнч(ОбластьПодвал.Параметры)); |
И убедиться, что это именно Структура.
Итого: замените Соответствие на Структуру — и область подвала заполнится корректно.