|
УФ (Управляемые формы) построить СКД на основе ТЗ (Таблицы значений) |
☑ |
0
Dvait
09.09.14
✎
09:55
|
Появилась задача сделать отчёт на СКД на основе данных Таблицы значений. Отчёт внешний. Раньше на обычных формах всё решалось просто: в модуле отчета делаем процедуру ПриКомпоновкеРезультата и в ней переносим данные из ТЗ в СКД. Но в Управляемых так не получается - не удаётся добраться до ТЗ формы или ТЗ реквизита внешнего отчета. Тоже самое с Хранилищем Значений - не удается передать в процедуру идентификатор.
Может быть есть другой, более правильный способ? В поиске находится куча примеров для обычных форм и ни одного для управляемых.
|
|
1
mastodont
09.09.14
✎
09:58
|
Что значит "не удаётся добраться до ТЗ формы"?
|
|
2
Бешеная Нога
09.09.14
✎
10:00
|
у отчета добавляешь реквизит. в форме отчета суешь туда значение. в модуле отчета при компоновке получешь значение этого реквизита и суешь в СКД.
профит
|
|
3
Лодырь
09.09.14
✎
10:01
|
(1) +1 присоединюсь к вопросу
|
|
4
Dvait
10.09.14
✎
11:07
|
Ну в смысле, до реквизита я добираюсь, но в нём пусто. Т.е. там пустая ТЗ, хотя в самой форме я её заполняю.
Вот пример отчёта при открытии в форме ТЗ заполняется строчка, а при нажатии кнопки "Сформировать" в переменной уже пусто.
|
|
5
Dvait
10.09.14
✎
11:39
|
А вот второй вариант тут уже ТЗ - ТаблицаЗначенийФорма - реквизит формы, а вот как добраться до этого реквизита из ПриКомпоновкеРезультата не представляю.
|
|
6
mastodont
15.09.14
✎
16:05
|
(4)(5)
Когда ты делаешь:
ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
Описание:
Преобразует указанный реквизит формы в объект прикладного типа.
создается переменная ЭтотОтчет, и туда передается преобразованная копия...
т.е. это не ссылка.
и дальше ты делаешь
ЭтотОтчет.ТаблицаЗначенийРеквизиты.Колонки.Добавить("Тест");
НоваяСтрока = ЭтотОтчет.ТаблицаЗначенийРеквизиты.Добавить();
НоваяСтрока.Тест = "123";
Сообщить("Кол-во строк ТЗ в Форме: " + ЭтотОтчет.ТаблицаЗначенийРеквизиты.Количество());
все это делается не с реквизитом отчета, а просто с переменной.
|
|
7
mastodont
15.09.14
✎
16:12
|
можно сделать вот так:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
ЭтотОтчет.ТаблицаЗначенийРеквизиты.Колонки.Добавить("Тест");
НоваяСтрока = ЭтотОтчет.ТаблицаЗначенийРеквизиты.Добавить();
НоваяСтрока.Тест = "123";
Сообщить("Кол-во строк ТЗ в Форме: " + ЭтотОтчет.ТаблицаЗначенийРеквизиты.Количество());
ЗначениеВРеквизитФормы(ЭтотОтчет, "Отчет");
КонецПроцедуры
|
|
8
mastodont
15.09.14
✎
16:12
|
(7) возможно есть более правильный способ, но я его не нашел.
|
|
9
mastodont
15.09.14
✎
16:16
|
вот нашел подробное описание:
|
|
10
Dvait
08.10.14
✎
09:16
|
Огромное спасибо, всё упиралось как обычно в одну строчку.
|
|