как добавить реквизит на обычную форму 1с программно

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

При разработке решений возникает необходимость добавить реквизит формы, состав и типы которых зависят от данных. Например при построении динамических деревьев с периодами, или при выводе контактной информации и т.д.

Задача

Для наглядности разберем простой пример, в котором можно было обойтись только элементами формы, но мы создадим и реквизиты.

Есть некая конфигурация, в форме элемента справочника Номенклатура необходимо программно создавать реквизиты формы и элементы к ним:

Элементы объединить в группу с горизонтальной группировкой. На текущий момент форма имеет следующий вид:

Добавление реквизитов

В обработчике формы ПриСозданииНаСервере() опишем код, который разбивается на 3 этапа:

Ниже приведен готовый код, код снабжен комментариями и разбит на области для лучшего понимания

После выполнения приведенного кода форма будет выглядеть так:

Удаление реквизитов

Для удаления необходимо передать массив содержащий пути реквизитов в качестве второго параметра метода формы ИзменитьРеквизиты().

Внимание. Удалять можно только реквизиты созданные программно.

Добавление реквизита табличной части

Добавление реквизита и элемента формы для табличной части почти ничем не отличается, необходимо только указать путь «Объект. ». Ниже пример добавления реквизита Ячейка в ТЧ Комплектация.

Добавление реквизита с типом Произвольный

В одной из задач стало необходимо добавить реквизит с типом Произвольный, но ни СП, ни интернеты ответа не дали. В итоге через несколько попыток было найдено решение

Внимание. Данные добавленного реквизита сохраняться в ИБ не будут.

Источник

Программное добавление реквизитов на форму документа. Без изменения самой формы.

Итак. В данном случае выводим новые реквизиты снизу формы. Исходим от того, что у нас в типовых формах есть процедура обновления заголовка, которая выводить текущее состояние документа (новый, проведен, не проведен или записан), в ней и вызовем процедуру вывода новых реквизитов.

Вкраце последовательность действий:

1. Выводиться форма

3. Обратно уменьшаем высоту растягиваемых элементов на n, а остальные элементы формы, которые прикреплены к нижнему краю, смещаем на n вверх.

4. Добавляем новые реквизиты, устанавливаем их свойства и привязки. Profit!

На форме появляются новые реквизиты, привязки корректно отрабатывают, так как мы их не трогали и не меняли. Раньше моя ошибка заключалась в том что я пытался отключить привязку элементов к нижней границе формы, а после добавления новых элементов, пытался их восстановить. В итоге формы нещадно глючили, ломались привязки. А решение оказалось на поверхности. Не надо трогать привязки, все корректируется высотой и положением самого элемента.

З.Ы. Возможно будут проблемы с элементами которые привязаны к нижней границе через другой элемент, но в моих 30 документах такого не наблюдалось. В крайнем случае можно сохранить параметры всех элементов на форме: верхняя точка и высота элемента. И после увеличения высоты формы восстановить эти параметры.

Примеры кода, думаю комментариев будет достаточно:

// Проверка на наличие дополнительных реквизитов

// Вывод или сохранение дополнительных реквизитов

// Если элемент формы существует то сохраняем значение

Если Элемент = Неопределено Тогда

ВысотаОбщаяДобавляемыхЭлементовПоВертикали = 27 ; // Общая высота всех добавляемых элементов

ВысотаНижнейПанели = 0 ; // будет вычислятся если нижняя панель есть

// Обработка элементов формы

// Исключаем нижнюю панель команд

// У растягиваемых элементов уменьшаем высоту, а элементы с фиксированной высотой смещаем вверх

// Создание поле ввода

Источник

Программное добавление элементов обычных форм

Программирование системы 07.06.2018 16:04 14644

В основном элементы формы задаются статически через конфигуратор. Но иногда требуется программное изменение формы. В обычном приложении не предусмотрено программное создание реквизитов формы, но можно программно добавлять элементы формы. В управляемом приложении доступно программное добавление элементов и реквизитов управляемых форм.

Добавление поля ввода

В данном примере на форму добавляется новое поле ввода, для него необходимо задать привязку к реквизиту. Имя реквизита к которому будет привязано поле ввода, задается через свойство «Данные». Для позиционирования элемента на форме задаются значения свойств отвечающих за положение.

Добавление кнопки обычной формы

При программном добавлении кнопки необходимо установить процедуру, которая будет выполняться при нажатии. Обработчик действия для кнопки устанавливается функцией «УстановитьДействие». Так же необходимо задать заголовок кнопки и определить значения свойств отвечающих за положение.

Добавление надписи обычной формы

В свойстве «Заголовок» указывается заголовок надписи. Для позиционирования элемента на форме задаются значения свойств отвечающих за положение.

Для того чтобы добавить сообщение, необходимо Войти или Зарегистрироваться

Источник

Программное управление обычными формами документов и справочников в УПП/КА

Часть 1

Чтобы не снимать с поддержки все формы конфигурации и не вставлять свои обработчики в процедуры «ПриОткрытии», будем искать такую процедуру, которая вызывается во всех формах документах и справочников.

И так, с нимаем с поддержки общий модуль «РаботаСДиалогами».
Находим функцию «АктивизироватьРеквизитВФорме» и сразу после объявления функции добавляем строку вызова нашей процедуры:

Все. Отделались снятием с поддержки двух модуле с добавлением в них двух строк. Обновлять будет легко.

Часть 2

Теперь самое главное.

Добавляем в конфигурацию общий модуль «ИТ_РаботаСДиалогами». В свойствах ставим галочки на использование в клиенте.

В модуль помещаем вызываемые функции.

Обратите внимание, что работа с формами справочника имеет особенности. Поскольку процедура «МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера» вызывается как из формы списка справочника, так и из формы самого элемента справочника. Различить можно только по составу передаваемых метаданных или просто по имени формы.

Часть 3

Поскольку мы не хотим каждый раз писать кучу кода при размещении реквизитов на форму, мы напишем заранее разного рода функции и процедуры, которые и будем в дальнейшем использовать.

— Функция добавления поля ввода на форму (одна из ранних наших функций).

— Функция добавления флажка на форму.

Эта функция позволяет разместить на форму флажок (булево).
Правила использования такие же как у предыдущей функции. Фактически это копия предыдущей функции, только для флажка.

Код этой функции почти идентичны предыдущим, по этому убран под спойлер.

— Функция добавления надписи на форму.

Эта функция позволяет разместить на форму надпись.
Правила использования такие же как у предыдущей функции. Фактически это вырезка вывода надписи из первой функции..

Код убран под спойлер

— Универсальное добавление поля на форму. (это другой подход добавления элементов на форму, гораздо более универсальный).
Используем эту процедуру гораздо чаще тех, что указал выше.

— Процедура удаления колонки в табличной части формы.
Иногда возникает необходимость удалять колонки с формы документа. Тут все просто.

— Процедура удаления элемента формы.

Часть 4

Думаю надо показать несколько примеров, как мы добавляем новые реквизиты на форму.
Примеры добавления колонки на форме:

Еще пример с добавлением полей в отдельной закладке:

Еще пример работы с формой справочника.

Часть 5

Доработки по совместимости и универсальности.

Желательно весь код модуля «ИТ_РаботаСДиалогами» обрамить в клиента

В процедурах, прежде чем добавлять реквизиты на форму, убедитесь, что такой реквизит существует.
Например так:

Поскольку вызов функции может происходить многократно в одной форме, всегда проверяйте, выведен ли уже реквизит на форму.
Например так:

Такие проверки позволят вам копировать общий модуль «ИТ_РаботаСДиалогами» во все ваши конфигурации УПП/КА и не бояться вызова исключений.

Источник

Заметки программиста 1с

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Операционные системы и программное обеспечение