Имя: Пароль:
1C
1С v8
Не работает ЗначениеВРеквизитФормы
, ,
0 Karambol
 
25.11.13
18:44
Добрый день!
Задача: сделать на форме таблицу значений с динамическим количеством колонок.
На форме есть реквизит ТЗ, тип -таблица значений, без колонок.
Пишу:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Выборка = Справочники._Конкуренты.Выбрать();
ТЗФормы = РеквизитФормыВЗначение("ТЗ");
Пока Выборка.Следующий() Цикл
Наим = СтрЗаменить(Выборка.Наименование," ","");
ТЗФормы.Колонки.Добавить(Наим);
КонецЦикла;
ЗначениеВРеквизитФормы(ТЗФормы, "ТЗ");
КонецПроцедуры

Но почему-то после выполнения процедуры таблица значений и ее колонки на форме не появляются. Что я делаю не так? В ТЗФормы колонки создаются, а на форме не появляются.
1 Ерепень
 
25.11.13
18:46
покури вот это

&НаСервере
Процедура Инициализация()
    ГСЧ=Новый ГенераторСлучайныхЧисел;
    ДобавляемыеРеквизитыТЗ=Новый Массив;
    УдаляемыеРеквизитыТЗ=Новый Массив;
    
    ТЗ=Объект.ТЗ.Выгрузить();
    Для й=4 По ТЗ.Колонки.Количество() Цикл
        УдаляемыеРеквизитыТЗ.Добавить("Объект.ТЗ."+ТЗ.Колонки[й-1].Имя);
    КонецЦикла;
    ИзменитьРеквизиты(, УдаляемыеРеквизитыТЗ);
    ТЗ=Объект.ТЗ.Выгрузить();
    
    ОписаниеЧисла=Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    ТЗ.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Дата"));
    ТЗ.Колонки.Добавить("КоличествоПрихода", ОписаниеЧисла);
    Для й=1 По КоличествоСкладов Цикл
        ИмяКолонки="ОстатокНаСкладе"+Формат(й, "ЧЦ=2; ЧВН=");
        ТЗ.Колонки.Добавить(ИмяКолонки);
        ДобавляемыеРеквизитыТЗ.Добавить(Новый РеквизитФормы(ИмяКолонки, ОписаниеЧисла, "Объект.ТЗ"));
    КонецЦикла;
    
    Для й=0 По ГСЧ.СлучайноеЧисло(1, 99) Цикл
        НоваяСтрока=ТЗ.Добавить();
        НоваяСтрока.Товар=СерверныйМодуль.ПолучитьСлучайнуюНоменклатуру();
        НоваяСтрока.ДатаПрихода='20010101'+ГСЧ.СлучайноеЧисло(0, 12*365*86400);
        НоваяСтрока.КоличествоПрихода=ГСЧ.СлучайноеЧисло(0, 99);
        Для ж=1 По КоличествоСкладов Цикл
            НоваяСтрока["ОстатокНаСкладе"+Формат(ж, "ЧЦ=2; ЧВН=")]=ГСЧ.СлучайноеЧисло(0, 99);
        КонецЦикла;
    КонецЦикла;
    
    ИзменитьРеквизиты(ДобавляемыеРеквизитыТЗ);
    Объект.ТЗ.Загрузить(ТЗ);
    Элементы.ТЗ.Обновить();
КонецПроцедуры
2 Classic
 
25.11.13
18:48
(0)
Потому что на форме не реквизит, а элемент формы, который связан с реквизитом.
3 zakidonoff
 
25.11.13
18:50
Обнови, кароч
4 Classic
 
25.11.13
18:51
(3)
Не взлетит
5 Karambol
 
25.11.13
18:59
(1)Курю, не помогает
(2)А как преобразовать элемент формы в значение(и потом обратно)?
6 GROOVY
 
25.11.13
18:59
(0) Создай колонки на форме, свяжи их с данными. Оно само как бы не создает.
7 Karambol
 
25.11.13
19:01
(6)А если заранее неизвестно количество колонок?
8 Ерепень
 
25.11.13
19:02
(7) попробуй покурить ещё раз ;)
9 DexterMorgan
 
25.11.13
19:02
(7) Выходит программно создавать. Ура.
10 GROOVY
 
25.11.13
19:03
https://www.google.ru/search?q=Создать+колонки+управляемая+форма
11 samozvanec
 
25.11.13
19:20
вот, держи. я как раз недавно заморачивался

&НаСервере
Процедура ОбновитьКолонкиВТаблице(Знач Таблица, ИмяТаблицы)

    ДобавляемыеРеквизиты                    = Новый Массив;
    УдаляемыеРеквизиты                         = Новый Массив;
    СоответствиеИменаКолонокПодразделения    = Новый Соответствие;
    
    КолонкиТаблицы = ДанныеФормыВЗначение(Таблица, Тип("ТаблицаЗначений")).Колонки;
    
    Для Каждого ЭлементСпискаПодразделений Из СписокЦелевыхПодразделений Цикл
        
        ИмяКолонкиСуммаПоПодразделению         = УбратьНедопустимыеСимволыИзПодстроки(СтрЗаменить("ЦП_" + ЭлементСпискаПодразделений.Значение + "Сумма", " ", ""));
        
        Если КолонкиТаблицы.Найти(ИмяКолонкиСуммаПоПодразделению) = Неопределено Тогда
            
            НовыйРеквизитСуммаПоПодразделению = Новый РеквизитФормы(ИмяКолонкиСуммаПоПодразделению
                , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))
                , ИмяТаблицы
            , Строка(ЭлементСпискаПодразделений.Значение) + " сумма");
            
            ДобавляемыеРеквизиты.Добавить(НовыйРеквизитСуммаПоПодразделению);
            
        КонецЕсли;
        
        СоответствиеИменаКолонокПодразделения.Вставить(ИмяКолонкиСуммаПоПодразделению, ЭлементСпискаПодразделений.Значение);
        
    КонецЦикла;
    
    Для Каждого КолонкаТаблицы Из КолонкиТаблицы Цикл
        
        Если НЕ Найти(КолонкаТаблицы.Имя, "ЦП_") Тогда Продолжить; КонецЕсли;
        
        Если СоответствиеИменаКолонокПодразделения[КолонкаТаблицы.Имя] = Неопределено Тогда
            УдаляемыеРеквизиты.Добавить(ИмяТаблицы + "." + КолонкаТаблицы.Имя);
        КонецЕсли;                                               
        
    КонецЦикла;
    
    ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
    
    Для Каждого ДобавляемыйРеквизит Из ДобавляемыеРеквизиты Цикл
        
        НовыйЭлемент                 = Элементы.Добавить(ДобавляемыйРеквизит.Имя, Тип("ПолеФормы"), Элементы[ИмяТаблицы]);
        НовыйЭлемент.ПутьКДанным     = ИмяТаблицы + "." + ДобавляемыйРеквизит.Имя;
        НовыйЭлемент.Вид             = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.Заголовок         = ДобавляемыйРеквизит.Заголовок;
                        
    КонецЦикла;
    
    Для Каждого УдаляемыйРеквизит Из УдаляемыеРеквизиты Цикл
        УдаляемыйЭлемент = Элементы.Найти(Сред(УдаляемыйРеквизит, СтрДлина(ИмяТаблицы) + 2));
        Если НЕ УдаляемыйЭлемент = Неопределено Тогда
            Элементы.Удалить(УдаляемыйЭлемент);
        КонецЕсли;
    КонецЦикла;
    
    СсылкаНаСоответствиеИменКолонокЦПВХранилище = ПоместитьВоВременноеХранилище(СоответствиеИменаКолонокПодразделения, УникальныйИдентификатор);

КонецПроцедуры // ОбновитьКолонкиВТаблицах()
Программист всегда исправляет последнюю ошибку.