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

Опытные программисты 1С в основном добавляют какие либо реквизиты на форму программно, это касается в первую очередь типовых конфигураций в которые вносятся изменения. Так как в этом случае гораздо проще потом производить обновление, сравнивать конфигурации. Поэтому это должен уметь каждый даже самый начинающий 1С -ник. Тем более что сделать это достаточно просто, в предыдущих статьях я уже затрагивал эту тему, рассказывал про программное добавление команд, сегодня же попробуем поработать с табличной частью документа, а именно добавить новый реквизит ТЧ программно, использовать будем управляемые формы.

Программное добавление колонок в ТЧ управляемой формы

Что бы на первых порах не запутаться я возьму в качестве примера простенький созданный мной документ «Поступление» у которого есть табличная часть, со следующими реквизитами «Номер», «Наименование», Количество» и «Цена».

1С Добавление колонок в ТЧ

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

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

И в эту процедуру добавить следующий код.

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

Программное добавление колонок в ТЧ управляемой формы

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

1С как программно добавить реквизит табличной части

Это программный реквизит который создается в момент создания документа, в конфигураторе вы его не увидите.

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

Таким образом можно добавить реквизит табличной части в любой конфигурации 1С.

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

Управляемая форма. Как добавить вычисляемый реквизит в табличную часть документа

Я
   Бурбон

07.10.12 — 18:04

Управляемая форма. Как добавить вычисляемый реквизит в табличную часть документа? По управляемым формам не нашел в интернете ответа. Спасибо.

  

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

   Wobland

1 — 07.10.12 — 18:08

зачем?

   Для й=1 По КоличествоСкладов Цикл

       ИмяКолонки=»ОстатокНаСкладе»+Формат(й, «ЧЦ=2; ЧВН=»);

       ТЗ.Колонки.Добавить(ИмяКолонки);

       ДобавляемыеРеквизитыТЗ.Добавить(Новый РеквизитФормы(ИмяКолонки, ОписаниеЧисла, «Объект.ТЗ»));

   КонецЦикла;

   
   Для й=0 По ГСЧ.СлучайноеЧисло(1, 99) Цикл

       НоваяСтрока=ТЗ.Добавить();

       НоваяСтрока.Товар=СерверныйМодуль.ПолучитьСлучайнуюНоменклатуру();

       НоваяСтрока.ДатаПрихода=’20010101’+ГСЧ.СлучайноеЧисло(0, 12*365*86400);

       НоваяСтрока.КоличествоПрихода=ГСЧ.СлучайноеЧисло(0, 99);

       Для ж=1 По КоличествоСкладов Цикл

           НоваяСтрока[«ОстатокНаСкладе»+Формат(ж, «ЧЦ=2; ЧВН=»)]=ГСЧ.СлучайноеЧисло(0, 99);

       КонецЦикла;

   КонецЦикла;

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

   Бурбон

2 — 07.10.12 — 18:19

Wobland — там не ТЧ документа, не управляемые формы.

УТ 11. Новый документ Маршрутный лист. В нем ТЧ Заявки. В ней реквизит Заявка. Также в ней хочу поле Реализация которое должно отобразиться связанный документ реализации Реализация.Заказ это и есть поле связи. Если для заказа несколько реализаций пусть перечислятся в это выч поле все реализации.

Итак.

Маршруный лист.

Заявки.

Заявка.Реализация. (Реализация — выч. поле)

   Wobland

3 — 07.10.12 — 18:38

(2) ну.. форма у меня там самая что ни на есть управляемая

   Wobland

4 — 07.10.12 — 18:39

(2) вот я знаю, что есть на свете слово «динамический список»… когда обновлять информацию в поле собираешься?

   Бурбон

5 — 07.10.12 — 18:42

4. Пусть не обновляется пока :) Лишь бы отобразила что мне надо.

   aleks-id

6 — 07.10.12 — 18:44

>>НоваяСтрока.ДатаПрихода=’20010101’+ГСЧ.СлучайноеЧисло(0, 12*365*86400);

>>НоваяСтрока.КоличествоПрихода=ГСЧ.СлучайноеЧисло(0, 99);

фигасе ты палишься….

   Fragster

7 — 07.10.12 — 18:45

(6) а ты думал, как данные для тестов генерятся?

   Бурбон

8 — 07.10.12 — 18:46

4. динамически списком нельзя т.к. тч предполагается редактировать прям в документе (конечно без редактировоания поля реализации) Есть команды «добавить заявку», «сформировать реализации». модно удалять заявки «крестиком»

   Wobland

9 — 07.10.12 — 18:46

(5) открыл форму, ушёл курить. в это время внезапно появляются 80 заявок. а я не вижу

   Бурбон

10 — 07.10.12 — 18:48

9 Заявки добавляются в журнал заявок. В документ они попадут только из документа МЛ.

   Wobland

11 — 07.10.12 — 18:48

собрать представления документов в одну строку — не великая задача. поместить в поле ТП тоже

   Wobland

12 — 07.10.12 — 18:48

(10) не аргумент

   Бурбон

13 — 07.10.12 — 18:50

12 тогда поясни что ты имел ввиду как и где внезапно появляются 80 заявок.

   Бурбон

14 — 07.10.12 — 18:51

и мы отклоняемся от темы. — как в УФ все таки сделать вы поле, пусть например Кол*Цена в реализации

   Rounder

15 — 07.10.12 — 18:53

Поле нужно где? В табличной части?

   Wobland

16 — 07.10.12 — 18:54

(13) я про общий подход к решению. если ты делаешь то, что можно поломать, то ты делаешь не то. под «поломать» я имею в виду какие-то допустимые действия, которые приведут к неверному результату. технически осуществимо создать заявку помимо реализации? значит, решай с учётом этого

   Бурбон

17 — 07.10.12 — 18:54

Rounder Угу, еще ж :)

   Бурбон

18 — 07.10.12 — 18:55

16 я не понял что такое создать заявку помимо реализации, приведи пример поломки пжста.

   Wobland

19 — 07.10.12 — 18:55

(14) в обычных при получении данных или при выводе строки считалось такое…

   Wobland

20 — 07.10.12 — 18:56

(18) мне отсюда не видно, в УТ11 не копался. внешняя обработка, например

   Wobland

21 — 07.10.12 — 18:56

и пиши уже номера постов в скобках ;)

   Бурбон

22 — 07.10.12 — 18:57

19 мне НЕ НУЖНЫЕ ОБЫЧНЫЕ, мне нужны УПРАВЛЯЕМЫЕ

   Бурбон

23 — 07.10.12 — 18:58

20 нет внешних обработок :)

   Rounder

24 — 07.10.12 — 18:58

(22) Все просто.

   Wobland

25 — 07.10.12 — 18:59

(22) я в курсе

(23) технически осуществимо

это религия такая, не зацикливайся на ней ;)

   Rounder

26 — 07.10.12 — 19:01

Находим в управляемой форме окно с реквизитами. Дальше раскрываем там Объект. Дальше раскрываем там необходимую ТЧ объекта. Дальше жмем «Добавить колонку реквизита». Именуем его. Настраиваем его тип. Перетаскиваем на форму в ТЧ. А дальше заполняем его например в ПриСозданииНаСервере(), ну или когда угодно.

   Бурбон

27 — 07.10.12 — 19:02

26, наконец то. Только я не хочу чтобы создавались новые реквизиты документа и занималась память в БД.

   Wobland

28 — 07.10.12 — 19:02

(26) весь вопрос в том, когда? думаю, автору это и так ясно

   Wobland

29 — 07.10.12 — 19:03

(27) мда.. не документа, а объекта

   Rounder

30 — 07.10.12 — 19:03

(27) Реквизиты документа не создаются! Создается реквизит формы.

   Wobland

31 — 07.10.12 — 19:04

что-то я в (11) переоценил автора

   Бурбон

32 — 07.10.12 — 19:04

30 упс. я думал что я создаю реквизиты документа так. тогда все ясно. наверное..

   Wobland

33 — 07.10.12 — 19:05

сформулировал! ты сейчас сделаешь решение, актуальное только на момент моздания формы

   Бурбон

34 — 07.10.12 — 19:06

а все таки в каких обработчиках мне мою задачу порешать

   Wobland

35 — 07.10.12 — 19:06

(34) имхается мне, нужна кнопка обновить. откуда иначе клиент узнает, что нужно бы пересчитать?

   Wobland

36 — 07.10.12 — 19:07

ну или обработчик ожидания. более бородатые меня поправят

   Кокос

37 — 07.10.12 — 19:12

в ПриЧтенииНаСервере в УТ11 такой пример есть:

   Кокос

38 — 07.10.12 — 19:12

ОбработкаТабличнойЧастиСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(

       Объект.Товары,

       Новый Структура(

           «ЗаполнитьПризнакХарактеристикиИспользуются, ЗаполнитьПризнакТипНоменклатуры, ЗаполнитьПризнакВариантОформленияПродажи»,

           Новый Структура(«Номенклатура», «ХарактеристикиИспользуются»),

           Новый Структура(«Номенклатура», «ТипНоменклатуры»),

           Новый Структура(«Номенклатура», «ВариантОформленияПродажи»)

       )

   );

   Кокос

39 — 07.10.12 — 19:13

что-то такое. а в списках и журналах еще можно курить динамические списки с запросом в виде источника. В запросах в прицнипе любые формулы можно реализовать.

  

Бурбон

40 — 07.10.12 — 19:18

38 нифигасе, надо разведать технологию

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

Итак, у нас есть справочник «Тест» с табличной частью «Тест», в табличной части присутствуют реквизиты «Тест1» и «Тест2», а нам нужно добавить еще один реквизит — «Тест3» и показать его на форме.

Выглядит это приблизительно так:

&НаСервере

Процедура ДобавитьКолонкуНаСервере()

нРеквизиты = Новый Массив;

нРеквизиты.Добавить(Новый РеквизитФормы(«Тест3», Новый ОписаниеТипов(«Строка»), «Объект.Тест», «Тест3», Истина));

ИзменитьРеквизиты(нРеквизиты);

нЭлемент = Элементы.Добавить(«Тест3», Тип(«ПолеФормы»), Элементы.Тест);

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

нЭлемент.ПутьКДанным = «Объект.Тест.Тест3»;

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

Не думаю, что приведенный код нуждается в комментариях, но на всякий случай скажу, что первые три строки создают новый реквизит типа «Строка» — тут важно указать путь к создаваемому реквизиту — третий параметр.

Точно также можно добавить колонку любой таблице значений (не табличной части) — в этом случае нужно убрать часть «Объект.» из кода.

Следующие три строки добавляют саму колонку на форму.

На этом все, надеюсь данная статья Вам помогла.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

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

Содержание

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

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

Задача

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Опытные программисты 1С в основном добавляют какие либо реквизиты на форму программно, это касается в первую очередь типовых конфигураций в которые вносятся изменения. Так как в этом случае гораздо проще потом производить обновление, сравнивать конфигурации. Поэтому это должен уметь каждый даже самый начинающий 1С -ник. Тем более что сделать это достаточно просто, в предыдущих статьях я уже затрагивал эту тему, рассказывал про программное добавление команд, сегодня же попробуем поработать с табличной частью документа, а именно добавить новый реквизит ТЧ программно, использовать будем управляемые формы.

Программное добавление колонок в ТЧ управляемой формы

Что бы на первых порах не запутаться я возьму в качестве примера простенький созданный мной документ «Поступление» у которого есть табличная часть, со следующими реквизитами «Номер», «Наименование», Количество» и «Цена».

1С Добавление колонок в ТЧ

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

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

И в эту процедуру добавить следующий код.

Программное добавление колонок в ТЧ управляемой формы

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

1С как программно добавить реквизит табличной части

Это программный реквизит который создается в момент создания документа, в конфигураторе вы его не увидите.

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

Таким образом можно добавить реквизит табличной части в любой конфигурации 1С.

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

Как в 1С добавлять на форму списка различные колонки

Любой документ в 1с имеет определенную форму. Если нам необходимо ее изменить, например добавить для видимости колонку, то сделать это можно следующим способом:

1) Заходим в документ и в правом верхнем углу нажимаем на кнопку «Еще».

2) В появившемся списке выбираем «Изменить форму».

3) В открывшейся окне настройки формы проверяем проставленные «V» — возможно у нужного поля галочка не стоит.

Если ее нет, то проставляем и нажимаем «Ок» (Для примера добавим в «Тип»).

Также можно расположить колонки в нужно порядке. Для этого повторно заходим в «Настройка формы» (п.1, 2) и воспользуемся синими стрелочками. Нужно выделить строчку, которую нужно переместить и нажимаем на нужную стрелочку («Вверх», «Вниз» в зависимости от того куда его нужно переместить колонку на форме- правее или левее).

Для примера переместим «Тип» сразу за колонкой «Номенклатура».

Если в списке нет нужного реквизита, то можно воспользоваться кнопкой «Добавить поля», но это работает не всегда — там где возможно кнопка будет активна.

Для примера выведем на форму «Вид номенклатуры». Для этого открываем «Настройка формы» (п.1, 2), выбираем строчку «Номенклатура» и нажимаем «Добавить поля».

В появившемся списке ставим галочку возле «Вид номенклатуры» и нажимаем «ОК».

В списке «Настройка формы» появится соответствующая строчка. Нажимаем «ОК».

Текстовое примечание в документах 1С

Подходит для 1с для россии1с для казахстана1с для белоруссии1с для украины

Bерсия для печати

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

Но что делать если примечание должно относиться не ко всему документу, а к конкретной строке товаров? И что делать, если это примечание необходимо указать не только на форме документа, но и вывести в печатные формы? Например, для работников склада, у которых вообще нет доступа в 1С.

Именно для решения озвученных проблем и предназначена эта разработка. В первую очередь она добавляет колонку Примечание в таблицу товаров заказов и документов товародвижения:

  • заказ клиента,
  • заказ поставщику,
  • заказ на перемещение,
  • приобретение товаров и услуг,
  • реализация товаров,
  • сборка товаров,
  • перемещение товаров.

Посмотрим на примере заказа клиента (для остальных все аналогично).

примечание в заказе клиента

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

заказ клиента с примечаниемпечатная форма с примечанием

Примечание можно заполнить как вручную, так и автоматически:

кнопка заполнения примечания

Можно заполнить его значением дополнительного реквизита номенклатуры, выбранной ячейкой хранения (для справочного адресного хранения), штрихкодом или складом.

варианты заполнения примечания

Зачем склад в примечании

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

Для корректной работы расширения необходимо отключить безопасный режим.

отключение безопасного режима расширения

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

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

Для добавления реквизитов удобно либо создать процедуру и вызывать ее из обработчика ПриСозданииНаСервере, либо использовать специальный общий модуль РаботаСФормамиПереопределяемый.

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

&НаСервере
Процедура ДополнитьЭлементыФормы()

     МассивРеквизитов = Новый Массив;

     РеквизитОткрытаИзОбработкиЛаборатории = Новый РеквизитФормы("ОткрытаИзОбработкиЛаборатории", Новый ОписаниеТипов("Булево"));
     РеквизитРезультат = Новый РеквизитФормы("РезультатАнализа", Новый ОписаниеТипов("Строка"));

     МассивРеквизитов.Добавить(РеквизитОткрытаИзОбработкиЛаборатории);
     МассивРеквизитов.Добавить(РеквизитРезультат);

     ИзменитьРеквизиты(МассивРеквизитов);

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

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

&НаСервере
Процедура ДополнитьЭлементыФормы()

    НоваяКоманда = ЭтаФорма.Команды.Добавить("ЗагрузкаДанных");
    НоваяКоманда.Действие = "ЗагрузкаДанных";

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

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

&НаКлиенте
Процедура ЗагрузкаДанных(Команда)

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

Пример указания процедуры-обработчика для событий формы:

&НаСервере
Процедура ДополнитьЭлементыФормы()

    УстановитьДействие("ОбработкаОповещения", "ОбработкаОповещенияФормы");

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

Пример создания поля и добавления процедуры-обработчика для элемента формы:

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

&НаКлиенте
Процедура ИзменениеНазначенияЗаявки(Элемент)
     //Обработчик команды
КонецПроцедуры

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

МассивРеквизитов = Новый Массив;

//Добавляем три реквизита формы
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьСвязи", Новый ОписаниеТипов("Булево")));
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьРабочуюГруппу", Новый ОписаниеТипов("Булево")));
МассивРеквизитов.Добавить(Новый РеквизитФормы("ОтображатьВизы", Новый ОписаниеТипов("Булево")));

//Добавление реквизита в табличную часть "Файлы"
МассивРеквизитов.Добавить(Новый РеквизитФормы("Актуальность", Новый ОписаниеТипов("Булево"), "Файлы", "Актуальность", Истина));

ИзменитьРеквизиты(МассивРеквизитов);

Файлы материала
Описание

Новый реквизит на форму, можно добавить программно через расширение, при этом не забирать саму форму в расширение (это удобно тем, что последующие обновления внешнего вида формы не смогут сломать наше расширение). В типовых конфигурациях, данный способ можно реализовывать в процедуре “ПриСозданииНаСервере” общего модуля “УправлениеСвойствами” .

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

Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.

Способ отражение в позиции штатного расписания

Создадим расширение и выполним следующую последовательность действий:

  1. Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”

добавление реквизита АВ_СпособОтражения в расширение

2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_СпособОтражения»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы);

//Вместо Добавить() можно использовать метод Вставить()

//в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент.

//ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»));

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»;

//ЭлементФормы.МногострочныйРежим = Истина;

//ЭлементФормы.Высота = 3;

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Образец расширения для скачивания в начале описания.

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

Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.

Результат спецоценки условий труда с  колонкой спецжиры

Добавление реквизита в табличную часть

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда

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

ИмяЭлемента = «АВ_ЕстьСпецжиры»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(«Спецжиры», Тип(«ПолеФормы»), Форма.Элементы.РабочиеМеста);        

ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;

ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»;

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

КонецЕсли;

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

КонецЕсли;

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

В результате получим табличную часть с новой колонкой.

Программное добавление табличной части на форму

Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.

Табличная часть добавленная через расширение

Добавление табличной части на форму

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда

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

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_ВредныеФакторы»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда   

ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы);  

ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»;

ЭлементФормы = Форма.Элементы.Добавить(«ВредныйФактор», Тип(«ПолеФормы»), ЭлементФормыТаблица);

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

ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»;    

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

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

Связь реквизитов формы с элементами формы

Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

// Массив для новых реквизитов

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

// Опишем ревизиты формы

Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»);

// Заполним массив после описания реквизитов формы

ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто);

// Добавим новые реквизиты в форму

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

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

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

...

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

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

Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто;

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


Расширения, Типовые приемы, Шаблоны и заготовки

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