Имя: Пароль:
1C
 
Добавить программно колонки на форму
0 myr4ik07
 
08.01.16
14:53
Привет (УФ), хочу добавить программно в ТаблицаРабочийТабель - это ТаблицаЗначений, а на форме ДанныеФормыКоллекции те колонки которые будут выгружены в ТЗ

    ТЗ = Новый ТаблицаЗначений;
    Линия = Справочники.прЛинии.Выбрать();
    
    Пока Линия.Следующий()Цикл
        Попытка
            ТЗ.Колонки.Добавить("К_"+Строка(Линия.Код));
        Исключение
        КонецПопытки;
    КонецЦикла;    
    Стр = ТЗ.Добавить();
    Стр.К_000000001 = Справочники.прЛинии.НайтиПоКоду("000000001");
       ТаблицаРабочийТабель.Загрузить(ТЗ);

но на форме ничего не отображается, на форме ТаблицаРабочийТабель есть но без колонок
1 myr4ik07
 
08.01.16
14:58
в ТаблицаРабочийТабель если добавить колонку с именем К_000000001 то все норм, но имя же динамическое
2 Zamestas
 
08.01.16
15:20
Стр["К_000000001"] =
3 GreatOne
 
08.01.16
15:26
ОбновитьОтображениеДанных?
4 GreatOne
 
08.01.16
15:27
В отладчике для ТаблицаРабочийТабель колонки естЬ?
5 myr4ik07
 
08.01.16
15:33
(4) колонок нет, я не создавал их потому как Имя колонки будет разное - динамическое
6 колодина
 
08.01.16
15:39
(5) можно имя колонки сделать постоянным - а на форме заголовок сделать меняющимся.
7 myr4ik07
 
08.01.16
18:07
(6) так кто  же знает сколько будет колонок, сколько элементом добавит пользователь к справочник столько и колонок должно быть, а значит фиксировано не нужно добавлять колонки.

Решил врчуну

Линия = Справочники.прЛинии.Выбрать();    
    НовыеКолонки = Новый Массив;    
    Пока Линия.Следующий()Цикл
        Список.Добавить(Линия.Ссылка);     
    КонецЦикла;    
    
    ном = 1;
    Для Каждого элеме Из Список Цикл
        элеме.Представление = "К_"+ном;        
        НовыеКолонки.Добавить(Новый РеквизитФормы(элеме.Представление,
                    Новый ОписаниеТипов("СправочникСсылка.прЛинии"),Элементы.ТаблицаРабочийТабель , элеме.Значение));    
        ном = ном + 1;
    КонецЦикла;
    
    Для Каждого Колонка Из НовыеКолонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя,Тип("ПолеФормы"),Элементы.ТаблицаРабочийТабель);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "Элементы.ТаблицаРабочийТабель."+Колонка.Имя;
        НовыйЭлемент.ТолькоПросмотр = Ложь;
    КонецЦикла;


но не могу побороть, по примеру нашел пишет что при добавлении реквизита нужно знать "Путь к создаваемому реквизиту. Не включает имя реквизита.", я не могу понять,
мне нужно так
Элементы.ТаблицаРабочийТабель
или так
ЭтаФорма.ТаблицаРабочийТабель  - так получаю ДанныеФормыКоллекция но она пустая если так делаю
8 hhhh
 
08.01.16
19:50
надо реквизиты формы создать. А не  Элементы.
9 myr4ik07
 
08.01.16
19:57
(8) с каким типом?
10 myr4ik07
 
08.01.16
19:58
(8) кстати ТаблицаРабочийТабель  это и есть Реквизит формы он имеет Тип Таблица значений
11 hhhh
 
08.01.16
20:00
(11) ну вот в нем и надо создать реквизиты-колонки.
12 myr4ik07
 
08.01.16
20:01
(11) так именно это я и хочу, а где моя ошибка?
13 hhhh
 
08.01.16
20:02
УправляемаяФорма (ManagedForm)
ИзменитьРеквизиты (ChangeAttributes)
Синтаксис:

ИзменитьРеквизиты(<ДобавляемыеРеквизиты>, <УдаляемыеРеквизиты>)
Параметры:

<ДобавляемыеРеквизиты> (необязательный)

Тип: Массив.
Массив, содержащий объекты типа РеквизитФормы.
Добавлять можно реквизиты верхнего уровня и вложенные реквизиты, являющиеся колонками.
К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект.<Имя реквизита>.
<УдаляемыеРеквизиты> (необязательный)

Тип: Массив.
Массив, содержащий строки, описывающие пути к удаляемым реквизитам.
Удалять можно только ранее программно добавленные реквизиты.
Описание:

Изменяет структуру реквизитов формы.
Сначала выполняется удаление реквизитов. Таким образом массивы добавляемых и удаляемых реквизитов могут содержать реквизиты с одинаковым путём.

Доступность:

Сервер, мобильное приложение(сервер).
14 hhhh
 
08.01.16
20:04
РеквизитФормы (FormAttribute)
Основной
Синтаксис:

Новый РеквизитФормы(<Имя>, <Тип>, <Путь>, <Заголовок>, <СохраняемыеДанные>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Имя реквизита.
<Тип> (обязательный)

Тип: ОписаниеТипов.
Тип реквизита.
<Путь> (необязательный)

Тип: Строка.
Путь к создаваемому реквизиту. Не включает имя реквизита.
Значение по умолчанию: Пустая строка.
<Заголовок> (необязательный)

Тип: Строка.
Содержит отображаемый текст реквизита.
Значение по умолчанию: Пустая строка.
<СохраняемыеДанные> (необязательный)

Тип: Булево.
Реквизит содержит сохраняемые данные.
Истина - сохраняемый реквизит формы.
Значение по умолчанию: Ложь.
Описание:

Создает описание реквизита управляемой формы на основе переданных параметров.
15 myr4ik07
 
09.01.16
00:52
МассивДобавляемыхРеквизитов = Новый Массив;
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаЗначенийКолонок", Новый ОписаниеТипов("ТаблицаЗначений")));
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("РобочаяРоль", Новый ОписаниеТипов("СправочникСсылка.РобочаяРоль"),"ТаблицаЗначенийКолонок" ,"Робочая роль"));
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники",Новый КвалификаторыЧисла(10,2)),"ТаблицаЗначенийКолонок" , "Сотрудник"));
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Линия", Новый ОписаниеТипов("СправочникСсылка.прЛинии",Новый КвалификаторыЧисла(10,2)),"ТаблицаЗначенийКолонок" , "Линия"));
    
    ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
    
    МассивДобавляемыхРеквизитов.Очистить();
    
    ТаблицаФормы = Элементы.Добавить("ТаблицаЗначенийКолонок", Тип("ТаблицаФормы"));
    ТаблицаФормы.ПутьКДанным = "ТаблицаЗначенийКолонок";
        
    ДобавитьКолонку("ТаблицаЗначенийКолонок", "РобочаяРоль", "РобочаяРоль");
    ДобавитьКолонку("ТаблицаЗначенийКолонок", "Сотрудник", "Сотрудник");

    Линия = Справочники.прЛинии.Выбрать();
    Пока Линия.Следующий() Цикл
        Список.Добавить(Линия.Ссылка);
    КонецЦикла;
    Для Каждого эл Из Список Цикл
        эл.Представление = СтрЗаменить(эл," ","");
        ДобавитьКолонку("ТаблицаЗначенийКолонок",эл.Представление,эл.Представление);
    КонецЦикла;
        
КонецПроцедуры

&НаСервере
Процедура ДобавитьКолонку(ИмяТаблицы, ИмяКолонки, ЗаголовокКолонки)
    НоваяКолонка = Элементы.Добавить(ИмяТаблицы + ИмяКолонки, Тип("ПолеФормы"), Элементы.ТаблицаЗначенийКолонок);
    НоваяКолонка.Заголовок = ЗаголовокКолонки;
    
        НоваяКолонка.ПутьКДанным = ИмяТаблицы + "." + ИмяКолонки;
    
    НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
    НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;
КонецПроцедуры

постоянно вот здесь вылетает
    НоваяКолонка.ПутьКДанным = ИмяТаблицы + "." + ИмяКолонки;
когда доходит до перебора из справочника
16 myr4ik07
 
09.01.16
00:53
17 myr4ik07
 
09.01.16
01:09
а ошибка вот какая
{Документ.РобочийТабель.Форма.ФормаДокумента.Форма(106)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
        НоваяКолонка.ПутьКДанным = ИмяТаблицы + "." + ИмяКолонки;
по причине:
Недопустимое значение
18 hhhh
 
09.01.16
06:13
(17) вы внимательно прочитайте, там же написано: в путь к данным не включается само имя колонки.
19 hhhh
 
09.01.16
07:17
<Путь> (необязательный)

Тип: Строка.
Путь к создаваемому реквизиту. Не включает имя реквизита.
20 myr4ik07
 
09.01.16
09:56
(18) будь добр, напиши ту правильную строку которая будет работать

я изменял уже и так
    НоваяКолонка.ПутьКДанным = ИмяТаблицы;
тогда даже при указании ПутиКДанным к статичной Колонке показывает ошибку "Недопустимое значение"
21 myr4ik07
 
09.01.16
10:05
(18) когда коммментирую то создается Статичные Колонки - http://www.1c-cod.ru/p/xmc0008l7q0anqz
22 myr4ik07
 
09.01.16
22:39
Залишу оце тут



&НаСервере
Процедура Команда2НаСервере()
    
    МассивТипаВыбора = Новый Массив;
    МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
    
    МассивРеквизитов = Новый Массив;
    
    ИмяТЗ = "ТаблицаСегментов";
    ЗаголовокТЗ = "Сегменты";
    
    МассивРеквизитов.Добавить(Новый РеквизитФормы(ИмяТЗ, ОписаниеТипаВыбора, "", ЗаголовокТЗ));
    МассивРеквизитов.Добавить(Новый РеквизитФормы("РабочаяРоль", Новый ОписаниеТипов("СправочникСсылка.РобочаяРоль"),ИмяТЗ,"Рабочая роль",Истина));
    МассивРеквизитов.Добавить(Новый РеквизитФормы("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"),ИмяТЗ,"Сотрудник",Истина));
    
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("РабочаяРоль",Новый ОписаниеТипов("СправочникСсылка.РобочаяРоль"),"Робочая роль");
    ТЗ.Колонки.Добавить("Сотрудник",Новый ОписаниеТипов("СправочникСсылка.Сотрудники"),"Сотрудники");

    Линия = Справочники.прЛинии.Выбрать();
    Пока Линия.Следующий() Цикл
        Наименование = "К_"+СтрЗаменить(Линия.Наименование," ","");
        ТЗ.Колонки.Добавить(Наименование,,Наименование);
    КонецЦикла;

    Для Каждого Колонка Из ТЗ.Колонки Цикл
        Если Колонка.Имя = "Сотрудник" Тогда
            //МассивРеквизитов.Добавить(Новый РеквизитФормы("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"),"","Сотрудник"));
        ИначеЕсли Колонка.Имя = "РабочаяРоль" Тогда
            //МассивРеквизитов.Добавить(Новый РеквизитФормы("РабочаяРоль", Новый ОписаниеТипов("СправочникСсылка.РобочаяРоль"),"","Рабочая роль"));
        Иначе         
            МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов("СправочникСсылка.прЛинии"), ИмяТЗ,Колонка.Имя,Истина));    
        КонецЕсли;    
    КонецЦикла;
    
    ЭтаФорма.ИзменитьРеквизиты(МассивРеквизитов);      
    эТаблица = Элементы.Добавить(ЗаголовокТЗ, Тип("ТаблицаФормы"));
    эТаблица.ПутьКДанным = ИмяТЗ;
    эТаблица.Отображение = ОтображениеТаблицы.Список;
    эТаблица.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
    
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), эТаблица);
        НовыйЭлемент.ПутьКДанным = ИмяТЗ + "." + Колонка.Имя;
        Если Колонка.Имя = "Выб" Тогда
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
        Иначе
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        КонецЕсли;
    КонецЦикла;
    
    //ЭтаФорма.ЗначениеВРеквизитФормы(ТЗ, ИмяТЗ);
КонецПроцедуры
23 impichmenta
 
10.01.16
00:28
а для не большого магазина подойдет?