Имя: Пароль:
1C
1С v8
как программно добавить элемент на управляемую форму
0 LivingStar
 
27.11.12
13:41
например при открытии формы что бы добавлялся элемент типа поле

форма управляемая
1 sapphire
 
27.11.12
13:47
ДобавляемыеРеквизиты=Новый Массив();
НовыйРеквизит= Новый РеквизитФормы("МойРеквизит"),ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(120),"ТаблицаДокументов","");
           ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

           
           ИзменитьРеквизиты(ДобавляемыеРеквизиты);

ЭлементМойРеквизит= Элементы.Добавить("МойРеквизит",Тип("ПолеФормы"),Элементы);
           ЭлементМойРеквизит.Вид = ВидПоляФормы.ПолеВвода;
           ЭлементМойРеквизит.ПутьКДанным= "МойРеквизит";
           ЭлементДолжность.Видимость=Истина;
2 LivingStar
 
27.11.12
13:51
&НаСервере
Процедура ДобавитьЭлемент()
   Элемент = ЭтаФорма.Элементы.Добавить("Тестовый", Тип("ПолеФормы"), ЭтаФорма);
   Элемент.Вид = ВидПоляФормы.ПолеВвода;
   Элемент.Имя = "Тестовый";
   Элемент.ПутьКДанным = "Реквизит1";    
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ДобавитьЭлемент();
КонецПроцедуры


я вот так сделал а как задать ему имя "тестовый реквизит"

что то ругается все (((
3 Нуф-Нуф
 
27.11.12
13:52
что ругается
4 LivingStar
 
27.11.12
13:52
Элемент.ПутьКДанным = "Тестовый";

на это
5 LivingStar
 
27.11.12
13:53
как ему задать имя на форме произвольное ?
6 Нуф-Нуф
 
27.11.12
13:53
что значит ругается
7 LivingStar
 
27.11.12
13:53
это принимает Элемент.ПутьКДанным = "Реквизит1";
8 LivingStar
 
27.11.12
13:53
а на то ругается не допустимое значение
9 LivingStar
 
27.11.12
13:54
интересно как задавать тип, имя
10 Нуф-Нуф
 
27.11.12
13:55
среди реквизитов формы есть реквизит с именем "Текстовый"?
11 LivingStar
 
27.11.12
13:55
имя задал Элемент.Заголовок = "111";

а как задать тип ему числовой?
12 LivingStar
 
27.11.12
13:56
(10) я программно его создаю
13 LivingStar
 
27.11.12
13:56
при открытии
14 Нуф-Нуф
 
27.11.12
13:56
тогда не указывай путь к данным
15 LivingStar
 
27.11.12
13:57
так у меня

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ДобавитьЭлемент();
КонецПроцедуры
16 LivingStar
 
27.11.12
13:58
если делать так то элемент пропадает

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ДобавитьЭлемент();
КонецПроцедуры
17 MSII
 
27.11.12
13:58
Покажи, как создаешь реквизит с именем Реквизит1.
18 LivingStar
 
27.11.12
13:59
(17)

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ДобавитьЭлемент();
КонецПроцедуры


nfr
19 LivingStar
 
27.11.12
13:59
так
20 LivingStar
 
27.11.12
13:59
счас хочу тип сделать ему числовой 15.2
21 Нуф-Нуф
 
27.11.12
13:59
Смотри как сделано в типовой УТ 11. добавляются поля по контактной информации на форму:

// Обработчик для события формы ПриСозданииНаСервере
Процедура ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения) Экспорт
   
   масРеквизитов = Новый Массив;
   
   // Создадим таблицу значений
   ИмяОписания = "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов";
   масРеквизитов.Добавить(Новый РеквизитФормы(ИмяОписания,        Новый ОписаниеТипов("ТаблицаЗначений")));
   масРеквизитов.Добавить(Новый РеквизитФормы("ИмяРеквизита",     Новый ОписаниеТипов("Строка"),                                      ИмяОписания));
   масРеквизитов.Добавить(Новый РеквизитФормы("ЗначенияПолей",    Новый ОписаниеТипов("СписокЗначений"),                              ИмяОписания));
   масРеквизитов.Добавить(Новый РеквизитФормы("ТолькоРоссийский", Новый ОписаниеТипов("Булево"),                                      ИмяОписания));
   масРеквизитов.Добавить(Новый РеквизитФормы("Тип",              Новый ОписаниеТипов("ПеречислениеСсылка.ТипыКонтактнойИнформации"), ИмяОписания));
   масРеквизитов.Добавить(Новый РеквизитФормы("Вид",              Новый ОписаниеТипов("СправочникСсылка.ВидыКонтактнойИнформации"),   ИмяОписания));
   масРеквизитов.Добавить(Новый РеквизитФормы("ТипНомер",         Новый ОписаниеТипов("Число"),                                       ИмяОписания));

   
   // Получим список видов КИ
   ИмяСправочника = Объект.Ссылка.Метаданные().Имя;
   ГруппаВидовКИ = Справочники.ВидыКонтактнойИнформации["Справочник" + ИмяСправочника];
   
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ВидыКонтактнойИнформации.Ссылка КАК Вид,
   |    ВидыКонтактнойИнформации.Наименование,
   |    ВидыКонтактнойИнформации.Тип,
   |    ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге,
   |    ВидыКонтактнойИнформации.АдресТолькоРоссийский,
   |    ВидыКонтактнойИнформации.ПометкаУдаления КАК ПометкаУдаления,
   |    ИСТИНА КАК Использовать
   |ИЗ
   |    Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации
   |ГДЕ
   |    ВидыКонтактнойИнформации.Родитель = &ГруппаВидовКИ
   |
   |УПОРЯДОЧИТЬ ПО
   |    ПометкаУдаления,
   |    ВидыКонтактнойИнформации.РеквизитДопУпорядочивания";
   
   Запрос.УстановитьПараметр("ГруппаВидовКИ", ГруппаВидовКИ);
   УстановитьПривилегированныйРежим(Истина);
   КонтактнаяИнформация = Запрос.Выполнить().Выгрузить();
   УстановитьПривилегированныйРежим(Ложь);
   
   
   // Добавим нужные реквизиты
   Если ТипЗнч(Объект.КонтактнаяИнформация) = Тип("ТаблицаЗначений") Тогда
       ТабЗн = Объект.КонтактнаяИнформация;
   Иначе
       ТабЗн = Объект.КонтактнаяИнформация.Выгрузить();
   КонецЕсли;
   
   Номер = 0;
   соотвВидИмя = Новый Соответствие;
   Для Каждого Стр Из КонтактнаяИнформация Цикл
       
       СтрВКИ = ТабЗн.Найти(Стр.Вид, "Вид");
       Если СтрВКИ = Неопределено И Стр.ПометкаУдаления Тогда
           Стр.Использовать = Ложь;
           Продолжить;
       КонецЕсли;
       
       Номер = Номер + 1;
       ИмяРеквизита = "КонтактнаяИнформацияПоле" + Номер;
       масРеквизитов.Добавить(Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("Строка"), , Стр.Наименование, Истина));
       
       соотвВидИмя.Вставить(Стр.Вид, ИмяРеквизита);
       
   КонецЦикла;
   
   // Добавим новые реквизиты
   Форма.ИзменитьРеквизиты(масРеквизитов);
   
   // Создадим элементы на форме и заполним значения реквизитов
   Родитель = ?(ПустаяСтрока(ИмяЭлементаДляРазмещения), Форма, Форма.Элементы[ИмяЭлементаДляРазмещения]);
   Для Каждого Стр Из КонтактнаяИнформация Цикл
       
       Если Не Стр.Использовать Тогда
           Продолжить;
       КонецЕсли;
       
       Вид = Стр.Вид;
       ИмяРеквизита = соотвВидИмя.Получить(Вид);
       Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Родитель);
       Элемент.Вид = ВидПоляФормы.ПолеВвода;
       Элемент.ПутьКДанным = ИмяРеквизита;
       Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх;
       
       Если Стр.Тип = Перечисления.ТипыКонтактнойИнформации.Другое Тогда
           Элемент.Высота = 5;
           Элемент.МногострочныйРежим = Истина;
       КонецЕсли;
       
       Если ДляТипаКонтактнойИнформацииДоступноРедактированиеВДиалоге(Стр.Тип) Тогда
           Элемент.КнопкаВыбора = Истина;
           Если Стр.РедактированиеТолькоВДиалоге Тогда
               Элемент.РедактированиеТекста = Ложь;
               Элемент.ЦветФона = WebЦвета.Кремовый;
           КонецЕсли;
           Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора");
           Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении");
       КонецЕсли;
       
       
       новСтр = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить();
       новСтр.ИмяРеквизита     = ИмяРеквизита;
       новСтр.ТолькоРоссийский = Стр.АдресТолькоРоссийский;
       новСтр.Вид              = Вид;
       новСтр.Тип              = Стр.Тип;
       новСтр.ТипНомер         = ПоТипуКонтактнойИнформацииПолучитьНомер(Стр.Тип);
       
       СтрВКИ = ТабЗн.Найти(Стр.Вид, "Вид");
       Если СтрВКИ <> Неопределено Тогда
           
           Форма[ИмяРеквизита] = СтрВКИ.Представление;
           новСтр.ЗначенияПолей   = ПреобразоватьСтрокуВСписокПолей(СтрВКИ.ЗначенияПолей);
           
       КонецЕсли;
       
   КонецЦикла;
   
КонецПроцедуры
22 MSII
 
27.11.12
14:01
(19) Т.е. ты не создаешь реквизит формы с именем Реквизит1. Тогда все логично.
23 MSII
 
27.11.12
14:02
(19) Делай как в (1). Сперва создавай реквизит(ы) формы, потом элемент(ы).
24 LivingStar
 
27.11.12
14:02
а как наддо?

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   ДобавитьЭлемент();
КонецПроцедуры
25 stonewolf
 
27.11.12
14:06
(24) См (1):
ДобавляемыеРеквизиты=Новый Массив();
НовыйРеквизит= Новый РеквизитФормы("МойРеквизит"),ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(120),"ТаблицаДокументов","");
ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс