|  | УФ (Управляемые формы) построить СКД на основе ТЗ (Таблицы значений) | ☑ | 
    
        | 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 | 
        Огромное спасибо, всё упиралось как обычно в одну строчку.     |  | 
        Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший