понедельник, 7 мая 2018 г.

Программное добавление реквизитов на форму

Чтобы вывести реквизиты на форму программно нужно в обработчике "ПриСозданииНаСервере" в форме выполнить следующий алгоритм:


Реквизит должен находится в метаданных.



Листинг кода:


Поле = Элементы.Добавить("ТестовыйРеквизит", Тип("ПолеФормы"), Элементы.ГруппаРеквизиты);
//"ТестовыйРеквизит" - Название реквизита (Метаданные)
//Тип("ПолеФормы") - тип добавляемого объекта
//Элементы.ГруппаРеквизиты - группа куда добавляем наш реквизит
Поле.ПутьКДанным = "Объект.ТестовыйРеквизит";//Обязательно надо указывать путь к данным, иначе поле не отобразится на форме
Поле.Вид = ВидПоляФормы.ПолеВвода; //Указываем что это поле ввода
//Все свойства созданного элемента "Поле" можно глянуть при отладке, там все как в свойствах


Чтобы вставить нужный нам реквизит перед каким либо уже существующим реквизитом нужно использовать параметр "Вставить()" . Четвертым параметром этого метода и будет являть тот реквизит перед которым мы будем вставлять наш реквизит.


Поле = Элементы.Вставить("ТестовыйРеквизит", Тип("ПолеФормы"),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
//Элементы.СтранаПроисхождения - реквизит перед которым вставляем
Поле.ПутьКДанным = "Объект.ТестовыйРеквизит";
Поле.Вид = ВидПоляФормы.ПолеВвода; 

Программное добавление поля ввода на форму:

Листинг:
//Программное создание реквизита на форме
Массив = Новый Массив;
Массив.Добавить(Новый РеквизитФормы("Статус", Новый ОписаниеТипов("Строка")));
ИзменитьРеквизиты(Массив);  //Изменяем массив содержащий реквизиты формы

//Теперь добавим созданный нам реквизит на форму уже изученным способом программно
Поле = Элементы.Вставить("Статус", Тип("ПолеФормы"),Элементы.ГруппаРеквизиты,Элементы.СтранаПроисхождения);
Поле.ПутьКДанным = "Статус";
Поле.Вид = ВидПоляФормы.ПолеВвода;

Чтобы подключить событие к созданному полю нужно создать процедуру и подключить ее к полю:

*Процедура команды обязательно должна выполняться в директиве компиляции "&НаКлиенте"



Добавление команды на форму программно: 



НашаКоманда = Команды.Добавить("НашаКоманда");
НашаКоманда.Действие = "НашаКомандаПроцедура";  //Указываем имя процедуры на клиенте 
//которую будет вызывать команда
Кнопка = Элементы.Вставить("НашаКоманда", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = "НашаКоманда";
Кнопка.Вид = ВидКнопкиФормы.ОбычнаяКнопка;

3 комментария:

  1. Последние коррективы: В типовых конфигурациях: Общий модуль - "МодификацияКонфигурацииПереопределяемый" - Обработчик - "ПриСозданииНаСервере";
    Пример кода:

    Если Форма.ИмяФормы = "Справочник.Номенклатура.Форма.ФормаЭлемента" Тогда
    //Добавляем новые реквизиты
    НовыеРеквизиты = Новый Массив;
    НовыйРеквизит = Новый РеквизитФормы("мзКодМАНоменклатуры", Новый ОписаниеТипов("Число"),, "Код МА Номенклатуры");

    НовыеРеквизиты.Добавить(НовыйРеквизит);
    Форма.ИзменитьРеквизиты(НовыеРеквизиты);

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

    ОтветитьУдалить
  2. Этот комментарий был удален администратором блога.

    ОтветитьУдалить