Имя: Пароль:
1C
1С v8
УФ (Управляемые формы) построить СКД на основе ТЗ (Таблицы значений)
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
Ну в смысле, до реквизита я добираюсь, но в нём пусто. Т.е. там пустая ТЗ, хотя в самой форме я её заполняю.
Вот пример отчёта при открытии в форме ТЗ заполняется строчка, а при нажатии кнопки "Сформировать" в переменной уже пусто.

http://webfile.ru/8f8edc65d8b91e33238ca1fca07a4b02
5 Dvait
 
10.09.14
11:39
А вот второй вариант тут уже ТЗ - ТаблицаЗначенийФорма - реквизит формы, а вот как добраться до этого реквизита из ПриКомпоновкеРезультата не представляю.

http://webfile.ru/1a19782f5f9189f51b7a8552fc79fa5d
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
вот нашел подробное описание:
http://nastroy-ka.ru/ent1c812/130-2012-08-14-08-15-56.html
10 Dvait
 
08.10.14
09:16
Огромное спасибо, всё упиралось как обычно в одну строчку.