Добавить реквизит формы программно для обычной формы

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

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

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

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

Элемент = ЭтаФорма.ЭлементыФормы.Добавить(Тип("ПолеВвода"), "Реквизит1", Истина);
Элемент.Лево = 80;
Элемент.Верх = 50;
Элемент.Ширина = 100;
Элемент.Высота = 20;
Элемент.Данные = "Реквизит1";
Элемент.ИзменяетДанные = Истина;

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

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

//Добавление кнопки

Элемент = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Кнопка"), "Кнопка", Истина);
Элемент.Заголовок = "Выполнить";
Элемент.Лево = 80;
Элемент.Верх = 100;
Элемент.Ширина = 100;
Элемент.Высота = 20;
Действие = Новый Действие("КнопкаВыполнитьНажатие");
Элемент.УстановитьДействие("Нажатие", Действие);Процедура КнопкаВыполнитьНажатие(Кнопка)
Сообщить("Выполнение действия");
КонецПроцедуры

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

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

//Добавление надписи

Элемент = ЭтаФорма.ЭлементыФормы.Добавить(Тип("Надпись"), "Надпись1", Истина);
Элемент.Лево = 10;
Элемент.Верх = 50;
Элемент.Ширина = 70;
Элемент.Высота = 20;
Элемент.Заголовок = "Реквизит 1";

Как программно добавить реквизит формы обычное приложение

Я
   1сЮлия

01.10.19 — 09:51

Доброе утро!Как пронграммно добавить реквизит формы обычное приложение и вывести на форму реквизит с типом строка

        ФамилияАнгл = Новый РеквизитФормы(«ФамилияАнгл»,Новый ОписаниеТипов(«Строка»),,Ложь);

    НЭлемент = Форма.ЭлементыФормы.Добавить(Тип(«ПолеВвода»),»ФамилияАнгл»,Истина, Форма.ЭлементыФормы.ОсновнаяПанель);

    НЭлемент.Данные = ФамилияАнгл;

    ЗаполнитьЗначенияСвойств(НЭлемент, Форма.ЭлементыФормы.ФамилияАнгл, «Лево, Высота, Ширина, Верх»);

  

Партнерская программа EFSOL Oblako

   vicof

1 — 01.10.19 — 09:54

В гугле не пробовала спрашивать? Оно там в куче мест написано.

   aleks_default

2 — 01.10.19 — 10:36

Дожили, теперь синтаксис управляемых форм применяют к обычным

   Cyberhawk

3 — 01.10.19 — 10:41

(2) С чего взял что речь об обычной форме?

   ДенисЧ

4 — 01.10.19 — 10:41

(3) «Как пронграммно добавить реквизит формы обычное приложение»

   Cyberhawk

5 — 01.10.19 — 10:42

(4) >>> (3)

   ДенисЧ

6 — 01.10.19 — 10:43

(5) «обычное приложение»

   GROOVY

7 — 01.10.19 — 10:43

   Cyberhawk

8 — 01.10.19 — 10:46

(6) «обычной форме»

   1сЮлия

9 — 01.10.19 — 11:03

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

Эта часть работает у меня

Рекв=Объект.Метаданные().Реквизиты.аэсФамилияАнгл;

    
    НЭлемент = Форма.ЭлементыФормы.Добавить(Тип(«ПолеВвода»),»аэсФамилияАнгл»,Истина,       Форма.ЭлементыФормы.ОсновнаяПанель);

    НЭлемент.Данные= Рекв.Имя;

    ЗаполнитьЗначенияСвойств(НЭлемент, Форма.ЭлементыФормы.аэсФамилияАнгл, «Лево, Высота, Ширина, Верх»);

       Форма.ЭлементыФормы.аэсФамилияАнгл.верх = Форма.ЭлементыФормы.аэсНадписьФИОАнгл.верх;

    Форма.ЭлементыФормы.аэсФамилияАнгл.лево = Форма.ЭлементыФормы.аэсНадписьФИОАнгл.лево +48;

    Форма.ЭлементыФормы.аэсФамилияАнгл.Ширина=182;

   catena

10 — 01.10.19 — 11:12

(9)Ты же понимаешь, что реквизит формы умеет только показывать данные, но не хранить?

   Жан Пердежон

11 — 01.10.19 — 11:18

(10) реквизит или элемент?

   1сЮлия

12 — 01.10.19 — 11:19

Мне нужно чтобы эта информация в физическом лице потом попадала в форму ФормаЗаписиФИО,а потом добавилась в регистр сведений ФИОФизЛиц

   1сЮлия

13 — 01.10.19 — 11:36

Элемент я думаю

   Cyberhawk

14 — 01.10.19 — 11:37

(11) Хранить в БД или в памяти?

   GROOVY

15 — 01.10.19 — 11:37

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

   unbred

16 — 01.10.19 — 11:39

тут по задаче вообще непонятно,на кой хрен программно реквизит создавать. нарисуй на форме.

   unbred

17 — 01.10.19 — 11:40

а заполняй программно

  

1сЮлия

18 — 04.10.19 — 13:27

Вроди добавила

На чтение 7 мин Просмотров 1.3к. Опубликовано 02.11.2021

Содержание

  1. Добавление поля ввода
  2. Добавление кнопки обычной формы
  3. Добавление надписи обычной формы

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

Сейчас форма имеет следующий вид:

После добавления новых элементов она будет иметь вид:

Итак, добавляем реквизиты:

  • ЕдиницаИзмерения , тип СправочникСсылка.ЕдиницыИзмерения ;
  • ТекущийОстаток , тип Число .

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

Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная :

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

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

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

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

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

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

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

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

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

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

Знакомство с управляемой формой 1С лучше всего начинать с реквизитов. Что такое реквизит управляемой формы? По своей сути, это данные, которые привязаны именно к форме: они создаются, хранятся, отображаются (по возможности) и редактируются на форме. Вне контекста формы эти данные не могут существовать. Сам по себе реквизит не может отображаться на форме. Для этого служат элементы формы, которые связаны с реквизитами форм.

Научимся создавать простые реквизиты формы и размещать их на форме.

Для этого в конфигураторе 1С создадим пустую форму. Пусть это будет форма некой внешней обработки. В этой форме нас интересует закладка Реквизиты

В этой закладке сейчас только один реквизит – основной. Он нас пока не интересует, работа с основным реквизитом эта тема отдельной статьи. Пока разберемся с простыми реквизитами.

Для того, чтобы добавить реквизит необходимо нажать на кнопку «Добавить реквизит» командной панели закладки «Реквизиты»

После этого будет добавлен реквизит управляемой формы 1С с типом по умолчанию (строка) и справа откроется палитра свойств этого реквизита.

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

Для тренировки создадим четыре реквизита с типом строка: Фамилия, Имя, Отчество и ФИО. И один реквизит с типом дата: ДатаРождения.

Разместим реквизиты на форме. Сделать это просто: необходимо нужный реквизит мышкой «перетащить» из закладки «Реквизиты» на закладку «Элементы»

Перетащим все реквизиты на формы, и с помощью кнопок «Вверх», «Вниз» удобно расположим их на форме.

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

Если нажать на кнопку «…» свойства ПутьКДанным, то у разработчика есть возможность поменять привязанный к этому элементу реквизит формы.

Сейчас научимся использовать реквизиты в программном коде. Из статьи, посвященной архитектуре управляемой формы 1С 8.3 Вы знаете, что выполнение кода на форме возможно под директивами &НаКлиенте &НаСервере и &НаСервереБезКонтекста. Доступ к реквизитам формы возможен только в процедурах и функциях, которые выполняются на &НаКлиенте и &НаСервере.

Для наглядности выполним небольшую задачу: создадим команду, при выполнении которой Фамилия, Имя, Отчество и дата Рождения будут складываться в ФИО + Дата рождения.

Создадим локальную команду формы. Для этого на закладке «Команды» в подзакладке «Команды формы» необходимо нажать на кнопку «Добавить»

После создания команды, справа откроется палитра свойств новой команды, где мы зададим её название.

Но команда – это выполнение некоторых действий на форме. Чтобы действия осуществились необходимо создать обработчик команды. Для создания обработчика команды нужно нажать на кнопку «Лупа» свойства действия. После этого откроется окно выбора места размещения обработчика.

Мы выберем расположение НаКлиенте, поскольку для тех действий, которые мы хотим осуществить вполне хватит клиентского контекста.

После выбора места расположения обработчика, в модуле формы будет создана процедура под директивой &НаКлиенте, в которой мы напишем несложный код. В этом коде к реквизитам формы мы будем обращаться просто как к переменным. Мы можем это делать в клиентском и серверном контексте.

&НаКлиенте
Процедура СформироватьФИО ( Команда )

ФИО = Фамилия + » » +
Имя + » » +
Отчество + «, д.р. » +
Формат ( ДатаРождения , «ДЛФ=D» );

Обратите внимание, после создание процедуры в палитре свойств команды свойство Действие заполнилось названием нашей новой процедуры.

И последним шагом нам осталось нашу команду разместить на управляемой форме. Просто перетащим её мышкой в закладку Элементы

При этом на форме появится кнопка.

Сохраним обработку и попробуем выполнить нашу команду.

Как видите, к реквизитам формы в модуле формы можно обращаться напрямую, как к переменным, но только если процедура или функция выполняется под директивами &НаКлиенте и &НаСервере.

Подробно вопросы работы с управляемыми формами в частности и с управляемым приложением в целом рассмотрены в книге «Основы разработки в 1С: Такси. Разработка управляемого приложения за 12 шагов». Эта книга станет настоящим подспорьем для тех, кто только начал знакомится с разработкой управляемого приложения.

Книга «Основы разработки в 1С: Такси» отлично подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

  1. Без сложных технических терминов;
  2. Более 600 страниц практического материала;
  3. Каждый пример сопровождается рисунком (скриншот);
  4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

Промо-код на скидку в 15% — 48PVXHeYu

Изучайте основы конфигурирования в 1С и учитесь программировать в «1С: Предприятии» с помощью моих книг: «Программировать в 1С за 11 шагов» и «Основы разработки в 1С: Такси»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;


Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы в соцсетях, и будьте в курсе всех новостей

  • Распечатать

Оцените статью:

  1. 5
  2. 4
  3. 3
  4. 2
  5. 1

(0 голосов, среднее: 0 из 5)

Поделитесь с друзьями!

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

Содержание

  1. Задача
  2. Добавление реквизитов
  3. Удаление реквизитов
  4. Добавление реквизита табличной части
  5. Добавление реквизита с типом Произвольный

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

Задача

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

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

  • ЯчейкаХранения, тип СправочникСсылка.ЯчейкиХранения;
  • ТекущийОстаток, тип Число.

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

добавить реквизит формы

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

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

  1. Описание и создание реквизитов формы;
  2. Создание элементов формы, объединение в группу без отображения;
  3. Заполнение данных.

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
    #Область ДобавлениеРеквизитовФормы
	
    // Массив для новых реквизитов
    ДобавляемыеРеквизиты	= Новый Массив;
		
    // Опишем ревизиты формы
    Реквизит_ЯчейкаХранения = Новый РеквизитФормы("ЯчейкаХранения",	Новый ОписаниеТипов("СправочникСсылка.ЯчейкиХранения"),	, "Ячейка");
    Реквизит_ТекущийОстаток = Новый РеквизитФормы("ТекущийОстаток",	Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)), , "Остаток");
	
    // Для наглядности заполним массив после описания реквизитов формы
    ДобавляемыеРеквизиты.Добавить(Реквизит_ЯчейкаХранения);
    ДобавляемыеРеквизиты.Добавить(Реквизит_ТекущийОстаток);
	
    // Добавим новые реквизиты в форму
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
    #КонецОбласти
	
    #Область ДобавлениеЭлементовФормы
	
    // Горизонтальная группа без отображения на форме
    ГруппаФормы = Элементы.Добавить("Группа_СправочныеДанные", Тип("ГруппаФормы"));
    ГруппаФормы.Вид                        = ВидГруппыФормы.ОбычнаяГруппа;
    ГруппаФормы.Отображение                = ОтображениеОбычнойГруппы.Нет;
    ГруппаФормы.ОтображатьЗаголовок        = Ложь;
    ГруппаФормы.Группировка                = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная;
	
    // Элементы
	
    НовыйЭлемент = Элементы.Добавить("ЯчейкаХранения", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ЯчейкаХранения";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    НовыйЭлемент = Элементы.Добавить("ТекущийОстаток", Тип("ПолеФормы"), ГруппаФормы);
    НовыйЭлемент.ПутьКДанным                  = "ТекущийОстаток";
    НовыйЭлемент.Вид                          = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ТолькоПросмотр               = Истина;
	
    #КонецОбласти
	
    #Область ЗаполнениеДанных
	
    //  Имитируем заполнение данных
    ЭтаФорма.ЯчейкаХранения = ПредопределенноеЗначение("Справочник.ЯчейкиХранения.Распаковка");
    ЭтаФорма.ТекущийОстаток = 12;
	
    #КонецОбласти
	
КонецПроцедуры

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

реквизит программно

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

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

    #Область УдалениеРеквизитовФормы
	
    // Массив удаляемых реквизитов
    УдаляемыеРеквизиты = Новый Массив;
    УдаляемыеРеквизиты.Добавить("ЯчейкаХранения");
    УдаляемыеРеквизиты.Добавить("ТекущийОстаток");
	
    // Удалим реквизиты формы
    ИзменитьРеквизиты( , УдаляемыеРеквизиты);
	
    #КонецОбласти

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

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

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

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

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

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

ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Реквизит", Новый ОписаниеТипов("")));

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

Содержание:

  1. Добавляем реквизит
  2. Добавление кнопки
  3. Добавление группы
  4. Добавляем табличную часть 1С

В связи с развитием системы расширений многие разработчики 1С сталкиваются с проблемой: если форма захвачена и на ней произведены изменения, то после обновления в основной конфигурации формы, эти изменения не будут отражены на захваченной форме. Получается, что форму после обновления надо каждый раз проверять. Это трудно и «убивает» все плюсы расширения. Но из любой непростой ситуации есть выход, если знать, где его искать. Можно захватить форму в расширение и не изменять её, а все новые реквизиты добавить программно. Тогда при обновлении формы в основной конфигурации 1С 8.3, форма измениться в расширении, и добавленные реквизиты будут корректно отображаться в ней.

В этой статье я постараюсь собрать все основные методы создания реквизитов на форме. 

1.     Добавляем реквизит

Начнем с самого простого. Мы добавили реквизит «МоеРасширение_НаименованиеНаАнглийском» в справочник контрагентов.

                Для того, чтобы вывести его на форму програмно, пишем код процедуры «МоеРасширение_ПриСозданииНаСервереПосле» (Отказ, Стандартная Обработка).

                НовыйЭлемент = Элементы.Добавить («МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «Объект. МоеРасширение_НаименованиеНаАнглийском»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Ложь;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь мы добавим на форму реквизит, которого нет в конфигурации. Например, выведем на форму текущую задолженность: реквизит «МоеРасширение_ТекущаяЗадолженность».

Сначала создадим реквизит:

                ДобавляемыеРеквизиты           = Новый Массив;

                НовыйРеквизит = Новый РеквизитФормы(«МоеРасширение_ТекущаяЗадолженность»),      Новый ОписаниеТипов («Число», «Текущая задолженность»);

                ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

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

Затем выведем его на форму таким же образом, как и добавленный в конфигурацию реквизит, разница только в поле «ПутьКДанным» – здесь мы пишем наименование только что созданного реквизита:

                НовыйЭлемент = Элементы.Добавить(«МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «МоеРасширение_ТекущаяЗадолженность»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Истина;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь переместим наши реквизиты под поле «Полное наименование». Для этого надо определить на форме место добавления, в нашем случаем – над группой «ГруппаКолонки»:

Элементы.Переместить(Элементы.МоеРасширение_НаименованиеНаАнглийском,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки).

Получаем результат:

Для того, чтобы отрабатывались процедуры событий для этих реквизитов, можем указать действия:

                Элементы. МоеРасширение_ТекущаяЗадолженность.УстановитьДействие(«ПриИзменении», «МоеРасширение_РасшифроватьЗадолженность»). 

2.     Добавление кнопки

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

                НоваяКоманда = Команды.Добавить(«МоеРасширение_ПоказатьОСВ»);

                НоваяКоманда.Действие = «МоеРасширение_ПоказатьОСВ»;

                НоваяКоманда.Заголовок = «Показать ОСВ».

ВАЖНО!! В поле действие пишется имя процедуры.

Теперь добавляем саму кнопку:

                НоваяКнопка = Элементы.Добавить(«МоеРасширение_Кнопка_ПоказатьОСВ», Тип(«КнопкаФормы»));

                НоваяКнопка.ИмяКоманды = «МоеРасширение_ПоказатьОСВ». 

3.     Добавление группы

Для добавления группы переместим кнопку к полю «Текущая задолженность». На этом этапе нам надо создать группу и переместить в нее уже созданные наши элементы.

Создаем группу и помещаем ее под наименованием. Затем переносим в нее реквизит «Текущая задолженность» и кнопку «Показать ОСВ»:

                НоваяГруппа =Элементы.Добавить(«МоеРасширение_ГруппаЗадолженность», Тип(«ГруппаФормы»));

                НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

                НоваяГруппа.Заголовок = «»;

                НоваяГруппа.ОтображатьЗаголовок = Ложь;

                НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;

                Элементы.Переместить(НоваяГруппа,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

                Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,НоваяГруппа);

                Элементы.Переместить(Элементы.МоеРасширение_Кнопка_ПоказатьОСВ,НоваяГруппа). 

4.     Добавляем табличную часть 1С

Добавим к контрагенту табличную часть 1С «МоеРасширение_Номенклатура» с реквизитом «Номенклатура» и выведем ее на форму.

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

ВАЖНО! При создании реквизитов таблицы родителем указывается реквизит формы «Табличная часть».

                НоваяТабличнаяЧасть = Элементы.Добавить(«МоеРасширение_ТаблицаНоменклатура», Тип(«ТаблицаФормы»));

                НоваяТабличнаяЧасть.ПутьКДанным = «Объект.МоеРасширение_Номенклатура»;

                НовыйРеквизитТабличнойЧасти = Элементы.Добавить(«МоеРасширение_Номенклатура», Тип(«ПолеФормы»),НоваяТабличнаяЧасть);

                НовыйРеквизитТабличнойЧасти.Заголовок = «Номенклатура»;

                НовыйРеквизитТабличнойЧасти.Вид = ВидПоляФормы.ПолеВвода;

                НовыйРеквизитТабличнойЧасти.ПутьКДанным = «Объект.МоеРасширение_Номенклатура.Номенклатура».

 

Используя этот базовый набор, можно изменить любую форму программно. И при обновлениях форма всегда будет подстраиваться под выбранный алгоритм. Если форма поменяется глобально, то расширение выдаст ошибку. Тогда, переписав несколько строчек кода, мы снова получим рабочую форму. Это быстрее и проще, чем каждый раз анализировать диалоговую форму.

Специалист компании «Кодерлайн» 

Максим Федоров

Код 1C v 8.х

 ////--> Начало добавления | All4CF.ru | 26.05.2015 00:54
Если ЭтоНовый() Тогда дс=Справочники.ДоговорыКонтрагентов.ПустаяСсылка(); КонецЕсли;
//Надпись и поле ввода
ЭлементНадпись = ЭлементыФормы.Добавить(Тип("Надпись"), "НадписьДСПроект", Истина,);
ЭлементНадпись.Заголовок =  "ДС Проекты:";
ЭлементНадпись.Лево = 15; ЭлементНадпись.Верх = 450;
ЭлементНадпись.Высота = 19;
ЭлементНадпись.Ширина = 80;
ЭлементНадпись.ЦветФона = ЦветаСтиля.ЦветФонаКнопки;
ЭлементНадпись.ЦветТекста = ЦветаСтиля.ЦветРамки;

ЭлементКнопка = ЭлементыФормы.Добавить(Тип("Кнопка"), "ДСАвтоПодбор", Истина);
ЭлементКнопка.Заголовок = "Подбор ДС";
ЭлементКнопка.Верх = ЭлементНадпись.Верх;
ЭлементКнопка.Лево = 100;
ЭлементКнопка.Высота = ЭлементНадпись.Высота;
ЭлементКнопка.Ширина = 35;
ЭлементКнопка.УстановитьДействие("Нажатие", Новый Действие("ДСОткрытие"));

ЭлементПолеВвода = ЭлементыФормы.Добавить(Тип("ПолеВвода"),  "ДСПроект", Истина, );
ЭлементПолеВвода.Данные = "ДС";
//Когда указываются данные, тип значения не нужно задавать
//ЭлементПолеВвода.ТипЗначения  = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов");
ЭлементПолеВвода.Верх = ЭлементНадпись.Верх;
ЭлементПолеВвода.Лево = ЭлементНадпись.Лево + ЭлементНадпись.Ширина + 76;
ЭлементПолеВвода.Высота = ЭлементНадпись.Высота;
ЭлементПолеВвода.Ширина = 270;
//ЭлементПолеВвода.КнопкаОткрытия = Истина;

ЭлементПолеВводад = ЭлементыФормы.Добавить(Тип("ПолеВвода"),  "ДатаПоПроекту", Истина, );
ЭлементПолеВводад.Данные = "Дата_По_Проекту";
//Когда указываются данные, тип значения не нужно задавать
//ЭлементПолеВвода.ТипЗначения  = Новый ОписаниеТипов("СправочникСсылка.ДоговорыКонтрагентов");
ЭлементПолеВводад.Верх = ЭлементНадпись.Верх;
ЭлементПолеВводад.Лево = ЭлементНадпись.Лево + ЭлементНадпись.Ширина +ЭлементПолеВвода.Ширина + 78;
ЭлементПолеВводад.Высота = ЭлементНадпись.Высота;
ЭлементПолеВводад.Ширина = 80;

//Доп настройки
ЭлементПолеВвода.КнопкаОчистки = Ложь;
//ЭлементПолеВвода.ВыборПоВладельцу = Справочники.Контрагенты.НайтиПоКоду("000000249"); //Бургер

//Добавим обработчик
ЭлементПолеВвода.УстановитьДействие("ОкончаниеВводаТекста", Новый Действие("ДСОкончаниеВводаТекста")); 

// установка привязок
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементКнопка.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементНадпись.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
ЭлементПолеВвода.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);

ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Верх,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Низ,  ЭтаФорма.Панель,  ГраницаЭлементаУправления.Низ);
//ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Лево,     ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
//ЭлементПолеВводад.УстановитьПривязку(ГраницаЭлементаУправления.Право,    ЭтаФорма.Панель,  ГраницаЭлементаУправления.Лево);
//--> Конец добавления | All4CF.ru | 26.05.2015 00:54  

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

Сейчас форма имеет следующий вид:

После добавления новых элементов она будет иметь вид:

Итак, добавляем реквизиты:

  • ЕдиницаИзмерения, тип СправочникСсылка.ЕдиницыИзмерения;
  • ТекущийОстаток, тип Число.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    #Область ДобавлениеРеквизитовФормы

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новые ревизиты формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        ,
        "Единица измерения"
    );
    РеквизитТекущийОстаток = Новый РеквизитФормы(
        "ТекущийОстаток",
        Новый ОписаниеТипов("Число", , , Новый КвалификаторыЧисла(10, 3)),
        ,
        "Текущий остаток"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);
    ДобавляемыеРеквизиты.Добавить(РеквизитТекущийОстаток);

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

    #КонецОбласти

    #Область ДобавлениеЭлементовФормы

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

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

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

    #КонецОбласти

    #Область ЗаполнениеДанных

    // Имитируем заполнение данных
    ЭтаФорма.ЕдиницаИзмерения = ПредопределенноеЗначение(
        "Справочник.ЕдиницыИзмерения.Штука"
    );
    ЭтаФорма.ТекущийОстаток = 12;

    #КонецОбласти

КонецПроцедуры

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

Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Массив для новых реквизитов
    ДобавляемыеРеквизиты = Новый Массив();

    // Описываем новый ревизит формы
    РеквизитЕдиницаИзмерения = Новый РеквизитФормы(
        "ЕдиницаИзмерения",
        Новый ОписаниеТипов("СправочникСсылка.ЕдиницыИзмерения"),
        "Объект.Состав",
        "Единица измерения"
    );

    // Заполняем массив новых реквизитов
    ДобавляемыеРеквизиты.Добавить(РеквизитЕдиницаИзмерения);

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

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

КонецПроцедуры

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

Поиск:
1С:Предприятие • Изменить реквизиты • При создании на сервере • Реквизит • Управляемая форма • Элемент формы

Понравилась статья? Поделить с друзьями:
  • Добавлять в реквизит список значений только один тип
  • Добрынинский магазин на электрозаводской часы работы
  • Доверенность на выдачу груза в транспортной компании
  • Доверенность на получение денег в страховой компании
  • Доверенность страховая компания по страховому случаю