Как программно изменить заголовок формы 1с

1C 8, как программно изменить текст заголовка управляемой формы, как работает свойство формы автозаголовок, 1С, 1c, 8, 8,x, 8.1, 8.2, 8.3

[Практика программирования] Управляемые формы 1С 8: программное изменение заголовка формы

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

Кому подойдет информация: Администратор, программист 1С
Подойдет для конфигураций: любая конфигурация 1С 8

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

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

Соответственно был написал код в серверной процедуре «ПриСозданииНаСервере» формы, в котором происходило назначение нового заголовка формы, который в продолжение типового функционала содержал представление документа с номером и датой и после в скобках дополнительный текст — именно такой порядок: [Расширение] Только просмотр проведенных реализаций для менеджеров УТ 11, КА 2, ERP 2

ЭтаФорма.Заголовок = Строка(Объект.Ссылка) + «<ТекстЗаголовка>»;

Нажатие на изображении увеличит его
1С 8, как программно изменить заголовок управляемой формы

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

Нажатие на изображении увеличит его
1С 8, как программно изменить, выводить заголовок формы, управляемое приложение

В данном случае велась работа с типовой формой конфигурации. У большинства типовых форм распространенных конфигураций 1С 8 свойство «АвтоЗаголовок» установлено в значении «Истина», т.е. автоматически устанавливать значение заголовка по данным  объекта. И даже при создании новой управляемой формы по умолчанию свойство «АвтоЗаголовок» будет включено, т.е. в значении «Истина». Поэтому даже когда заголовку программно устанавливается новый текст, то система продолжает добавлять в заголовок представление объекта формы. Поэтому, чтобы выводить в заголовок формы лишь только тот текст, который нужно в рамках прикладной задачи, то нужно отключить свойство «АвтоЗаголовок», установив ему значение Ложь.

ЭтаФорма.АвтоЗаголовок = Ложь;

Нажатие на изображении увеличит его
1С 8, заголовок управляемой формы, как работает, изменить свойство автозаголовок

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

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

Оцените, оказалась ли эта публикация полезна для Вас?




© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

26-11-2021

Журавлев А.С.
(Сайт azhur-c.ru)

Назад

Изменить заголовок у формы «на лету»

Я
   ice777

24.10.08 — 10:54

Пользователь открывает форму (неописанную в конфигураторе, т.е. по умолчанию). Она имеет заголовок с именем синонима соответствующего регистра.

Как, не заводя специально форму, установить ей СВОЙ заголовок?

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

Сорри, если элементарно, но я только начал.

   asady

1 — 24.10.08 — 11:06

(0) ты наверное и код писать не хочешь?

   ice777

2 — 24.10.08 — 11:13

хочу. очень хочу.

но куда его вставить даже не представляю. В процедуру ПриСтартеСистемы?

   Валерыч

3 — 24.10.08 — 11:16

ага. именно туда и сразу ЗавершитьРаботуСистемы

   asady

4 — 24.10.08 — 11:23

(2) если все-таки хочешь код написать, то задумайся куда его пихать.

и сам ответишь на свой вопрос.

   ice777

5 — 24.10.08 — 11:24

Валерыч: Ну, кому что. :)

мне чоб бухи не дивились на кривую локализацию.

   ice777

6 — 24.10.08 — 11:27

asady: больше в голову ничего не приходит, разве при старте 1С заменить синоним.

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

   asady

7 — 24.10.08 — 11:29

(6) потому что нет такого места кроме модуля формы. Только из него можно поменять реквизит — ты ООП изучал когда нибудь?

ведь форма это объект класса и заголовок его свойство. Про инкапсуляцию слышал?

   ice777

8 — 24.10.08 — 11:31

Я на дельфи раньше писал. Там я видел, где и что.

А в 1С пока не все так ясно.

   ice777

9 — 24.10.08 — 11:32

дюже много в угоду упрощению спрятали и перелопатили.

   asady

10 — 24.10.08 — 11:32

(6) если все таки очень хочется то можно так:

стартует твоя форма (пустая ) как диспетчер и из нее грузи формы документов так вот при загрузке формы документа (даже если эта форма сделана на «лету» платформой) ты можешь получить ее и изменить ее заголовок.

   ice777

11 — 24.10.08 — 11:34

кстати я и хотел при старте 1С вписать нечто вроде РегистрТакойто.Синоним = ..

   ice777

12 — 24.10.08 — 11:35

asady: не знаю, в какое место вписать код

   Валерыч

13 — 24.10.08 — 11:36

(11) это уже метаданные, которые правятся в кофигураторе

   ice777

14 — 24.10.08 — 11:36

небось событие какое-то есть типа ПриОткрытии. эх

   dk

15 — 24.10.08 — 11:40

конт = 0;

открытьформу(«Справочник.ххх», конт)

конт.форма.Заголовок(«мой заголовок», 0);

   dk

16 — 24.10.08 — 11:41

хотя это для 7-ки :)

   ice777

17 — 24.10.08 — 11:42

dk: а куда этот код вписывать?

   dk

18 — 24.10.08 — 11:45

если не смущает, что для 7-ки, то пропиши на любую кнопку

   ice777

19 — 24.10.08 — 11:50

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

   Bober

20 — 24.10.08 — 12:47

(19) Если форма не определена тогда только так

Форма = РС.***.ПолучитьФормуСписка();

Форма.Заголовок = «мой заголовок»;

Форма.Открыть();

   ice777

21 — 24.10.08 — 13:36

а как к ней обратиться? это я и сам знаю про «Форма.Заголовок».

Например пробую так : РегистрыСведений.МойРегистр.ПолучитьФорму().Заголовок..

и все, 1С вопит, что недостаточно фактич.параметров.

   ice777

22 — 24.10.08 — 13:37

РегистрыСведений.МойРегистр.ПолучитьФормуСписка().Заголовок… — уже прокатывает, но ничего не делает (не туда попал, значит)

   ice777

23 — 24.10.08 — 13:44

т.е. работает!!! но только сразу там, где я это вписал и сразу открываю, в процедуре ПриНачалеРаботыСистемы().  Потом снова то, что было

   ice777

25 — 24.10.08 — 15:22

Для замены заголовков форм испробовал «УстановитьДействие».

да… грусна. метод УстановитьДействие может воспользоваться Действием тока в модуле формы(кнопки, и т п). Хоть объявлял процедуру Действия как Экспорт — не видит процедуру, пока в модуль формы не всунеш, — а это уже ее создание.

Ну и как я после этого сделаю массовую обработку кучи неопределенных форм?  

Может есть еще идеи??

   eklmn

26 — 24.10.08 — 15:25

(25) пишиу лучше на дельфях, ну нафиг этот 1С, забей на него, не стоит…

   MSensey

27 — 24.10.08 — 15:32

Зато сколько уже всего изучил

   MSensey

28 — 24.10.08 — 15:34

У тебя форма как открывается?

   ice777

30 — 24.10.08 — 15:36

eklmn: нет сейчас выбора.

   ice777

32 — 24.10.08 — 15:38

MSensey: она не открывается, пока пользователь не откроет по меню.

а сделал так:

Процедура ПодменаЗаголовковФорм()  Экспорт

     АвтоЗаголовок = ложь;

   Заголовок=»Новый Заголовок»;

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

Процедура ПриНачалеРаботыСистемы()

   
   //Сообщить(«стартанули!     oo»);

   
   ТекФорма=РегистрыСведений.НекийРегистр.ПолучитьФормуСписка();

   ДействиеПриОткрытииФормы = Новый Действие(«белПодменаЗаголовковФорм»);

   ТекФорма.УстановитьДействие(«ПриОткрытии», ДействиеПриОткрытииФормы);

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

   MSensey

33 — 24.10.08 — 15:40

(32) если пользователь открывает через меню, в котором явно указано что нужно открыть форму, то никак не получится.
Есть вариант заменить команду меню на свою процедуру, в которой открывать форму с нужным заголовком

   ice777

34 — 24.10.08 — 15:40

так не видит процедуру 1С — ПодменаЗаголовковФорм()  Экспорт.

Вот вам и инкапсуляция, наследование и полиморфизм, как верно заметил asady.

   ice777

35 — 24.10.08 — 15:42

MSensey: а тоже идея.. тока не катит, бо вместо одной обработки я должен везде по менюхам пройтись руками..

   MRAK

36 — 24.10.08 — 15:42

Да ладно, забей, нарисуй свою форму… обноовишься быстрей, чем щас изобретать бушь….

   Регистратор

37 — 24.10.08 — 15:43

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

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

   MRAK

38 — 24.10.08 — 15:43

(36) + я тож много чего наизобретал, а в 8.1 сделали подписку на события…

   MRAK

39 — 24.10.08 — 15:44

(36) + (0) таким извратом не пришлось заниматься, но возможно, что при обновлении ничего даже трогать не придется…

   MSensey

40 — 24.10.08 — 15:44

айс, ты вообще раскажи, нафик это надо?

   ice777

41 — 24.10.08 — 15:51

есть конфиг РФ, его ставят в Гондурас. Соответственно налдо, чтоб гондурасские девушки не пугались слов РФ и Россия :)

   ice777

42 — 24.10.08 — 15:51

а потом придет обновление — меньше геморрою

   MSensey

43 — 24.10.08 — 15:52

Может возможнсти языков использовать?

   MSensey

44 — 24.10.08 — 15:52

Добавить новый язык и сделать его основным

   MSensey

45 — 24.10.08 — 15:55

Похоже, что не получится, т.к. нужно будет все надписи переписывать

   ice777

46 — 24.10.08 — 15:55

MSensey: да ну.. безумная идея и не менее трудоемкая, чем менюшки снабжать открывашкой.

   MSensey

47 — 24.10.08 — 15:58

Ну да, особо не знаю этот механизм, просто предположил

  

ice777

48 — 24.10.08 — 16:10

А нет ли в 1С некоего механизма прекомпиляции процедуры для Действия?

Или нечто макросообразное??

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

Если вы создаете конфигурацию с нуля, то заголовок программы 1С простой – «Конфигурация».

Заголовок 1С

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

Открываем палитру свойств конфигурации 1С

В открывшейся палитре свойств нас интересуют поля Имя и Синоним.

Свойства конфигурации 1С

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

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

Заголовок 1С

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

Заголовок программы 1С

Если запустить «1С: Предприятие» в пользовательском режиме, то текст из свойства Синоним конфигурации будет и в заголовке окна, и в окне «О программе». Иногда, этот заголовок еще называют Заголовок базы 1С.

Заголовок 1С

Заголовок формы 1С

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

Рассмотрим случай, когда у объекта нет форм. Создадим справочник Номенклатура, и установим у него синоним «Товары».

Заголовок формы 1С

Тогда у нас текст «Товары» будет везде: в меню, на форме списка и на форме элемента.

Заголовок формы 1С

Если же мы изменим свойства Представление объекта и Представление списка.

Заголовок формы 1С

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

Заголовок формы 1С

Причем, если мы откроем окно «Функции для технического специалиста» (для платформы 8.3.14 и ниже — «Все функции»), то в нем название справочника будет такое, как указано в свойстве Синоним.

Функции для технического специалиста

Принцип работы свойств Синоним, Представление объекта и Представление списка будет справедлив и для документа в 1С. Заголовок документа задается точно также.

Заголовок документа 1С

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

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

Заголовок формы 1С

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

Заголовок формы 1С

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

Заголовок формы 1С

Тогда заголовок формы будет такой, как мы его задали в свойстве Заголовок.

Заголовок формы 1С

Тоже самое, справедливо и для формы списка справочника:

Изменили свойство Заголовок формы.

Заголовок формы 1С

Показывается комбинация.

Заголовок формы 1С

Сняли флаг АвтоЗаголовок.

Заголовок формы 1С

Заголовок такой, как мы задали.

Заголовок формы 1С

Более подробно и основательно начальные вопросы программирования в 1С вы можете изучить в

книге «Программировать в 1С за 11 шагов»

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

Программировать в 1С за 11 шагов

Книга написана понятным и простым языком — для новичка.

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

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

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

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

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


Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

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

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

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

В данной статье описаны примеры программного создания объектов управляемой формы 1С : элементов, команд, реквизитов, а также описание стандартных возможностей для работы с ними.

Contents

  • 1 Введение в управляемая форма 1С реквизиты элементы команды
  • 2 Программное переопределение обработчиков событий формы и элементов формы
  • 3 Программное создание групп формы.
  • 4 Программное добавление команды на форму.
  • 5 Программное создание декораций форм.
  • 6 Программное добавление реквизита на форму.
  • 7 Вывод реквизитов на форму.
  • 8 Вызов процедур при создании на сервере 1С
  • 9 Некоторые советы при программном редактировании формы
  • 10 Полезные ссылки

Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.

Примеры работы с объектом «ДанныеФормыКоллекция» и созданием дин. списка и таблицы значений программно можно будет посмотреть в части 2.

Для запуска обработки в режиме предприятия необходимо наличие объектов «Справочники.Номенклатура», подчиненный ему «Справочники.ХарактеристикиНоменклатуры» и «РегистрыСведений.ЦеныНоменклатуры”.

Программное переопределение обработчиков событий формы и элементов формы

Переопределить обработчики событий формы можно в обработчике «ПриСозданииНаСервере» (кроме самого обрабочика «ПриСозданииНаСервере») или в теле модуля формы в контексте сервера (например, Переопределение событий ПриЧтениинаСервере и ПриСозданииНаСервере).

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтаФорма.УстановитьДействие(“ОбработкаВыбора”, “пр_ОбработкаВыбора”)
КонецПроцедуры

В теле модуля формы:

#Если Сервер Тогда
    ЭтаФорма.УстановитьДействие("ПриСозданииНаСервере", "пр_ПриСозданииНаСервере");
#КонецЕсли

А в новой процедуре нужно добавить вызов основной, если такая процедура есть.

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

Аналогично можно поступить и с обработчиками элементов формы:

Элементы.Номенклатура.УстановитьДействие(“ПриИзменении”, “пр_НоменклатураПриИзменении”)

Программное создание групп формы.

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

Доступные виды групп формы:

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

Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.

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

    //удалить команду
    //Команды.Удалить(НоваяКоманда);
    
КонецПроцедуры

&НаКлиенте
Процедура пр_Команда1(Команда)
    
    Сообщить("Команда выполнена.");
    
КонецПроцедуры

Программное создание декораций форм.

&НаСервере
Процедура пр_СоздатьДекорацию()
    
    //добавить надпись
    Элемент    			 = Элементы.Добавить("Надпись1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид    		 = ВидДекорацииФормы.Надпись;
    Элемент.Заголовок    	 = "Добавленная надпись";
 
    //для того, чтобы добавить картинку, необходимо выбрать ВидДекорацииФормы.Картинка
    Элемент = Элементы.Добавить("Картинка1", Тип("ДекорацияФормы"), Элементы["пр_Группа1"]);
    Элемент.Вид = ВидДекорацииФормы.Картинка;
    Элемент.Картинка = БиблиотекаКартинок.Бесконечность;  
  
КонецПроцедуры

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

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

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

&НаСервере
Процедура пр_УдалитьРеквизиты()
    
	// Массив для удаляемых реквизитов
	УдаляемыеРеквизиты    = Новый Массив;
    
    //указываем путь к удаляемому реквизиту
	УдаляемыеРеквизиты.Добавить("пр_УдалитьКоличество");
    //К добавленным реквизитам нужно обращаться через переменную ЭтаФорма
    
	// Добавим новые реквизиты в форму
	ИзменитьРеквизиты(,УдаляемыеРеквизиты);
   	 
КонецПроцедуры

Вывод реквизитов на форму.

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

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

&НаКлиенте
Процедура пр_ИспользованиеПриИзменении(Элемент)
КонецПроцедуры

Вызов процедур при создании на сервере 1С

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

&НаСервере

&НаСервере
Процедура пр_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	//установим заголовок формы 
	ЭтаФорма.Заголовок 		= "Шаблон для программной работы с реквизитами, командами и элементами формы";
	ЭтаФорма.АвтоЗаголовок 	= Ложь;
	
	пр_СоздатьГруппы();
	пр_СоздатьНовуюКоманду();
	пр_СоздатьДекорацию();
	пр_СоздатьРеквизиты();
	пр_УдалитьРеквизиты();
	пр_ВывестиРеквизитыНаФорму();
	
КонецПроцедуры

Некоторые советы при программном редактировании формы

  • Если вы не используете префиксы при создании новых команд и элементов рекомендуется проверять существование создаваемых объектов по имени с помощью метода Найти(), который вернет Неопределено, если объект в коллекции не найден:
    • Элементы.Найти(«пр_Владелец»);
    • Команды.Найти(«пр_НоваяКоманда»);
  • Чтобы проверить уникальность реквизита на форме можно воспользоваться следующей функцией:
&НаКлиентеНаСервереБезКонтекста
// Функция определяет существует ли реквизит у объекта.
//
Функция ЕстьРеквизитОбъекта(мОбъект, ИмяРеквизита)
    
    КлючУникальности   = Новый УникальныйИдентификатор;
    СтруктураРеквизита = Новый Структура(ИмяРеквизита, КлючУникальности);
    ЗаполнитьЗначенияСвойств(СтруктураРеквизита, мОбъект);
    Возврат СтруктураРеквизита[ИмяРеквизита] <> КлючУникальности;
    
КонецФункции // ЕстьРеквизитОбъекта()
  • Свойства, методы и коллекции управляемой формы описаны в синтакс-помощнике в разделе «Интерфейс (управляемый)»;
  • Изучите БСП, если она имеется в вашей конфигурации. Например в общем модуле «ОбщегоНазначения» уже описаны функции для создания объекта ОписаниеТипов, необходимого при создании новых реквизитов на форме:
    • ОбщегоНазначения.ОписаниеТипаСтрока(ДлинаСтроки) — Создает объект ОписаниеТипов, содержащий тип Строка;
    • ОбщегоНазначения.ОписаниеТипаЧисло(Разрядность, РазрядностьДробнойЧасти = 0, ЗнакЧисла = Неопределено) — Создает объект ОписаниеТипов, содержащий тип Число;
    • ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты) — Создает объект ОписаниеТипов, содержащий тип Дата;
    • ОбщегоНазначенияВызовСервера.ЦветСтиля(ИмяЦветаСтиля) — Функция получает цвет стиля по имени элемента стиля;
    • ОбщегоНазначенияВызовСервера.ШрифтСтиля(ИмяШрифтаСтиля) — Функция получает шрифт стиля по имени элемента стиля.

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

Полезные ссылки

1. Типовой механизм упрощенного изменения конфигурации в ERP 2.0 и УТ 11
2. Типовой функционал модификации конфигурации линейки ERP-решений (УТ 11, КА 2 и ERP 2)
3. 1С Управляемые Формы. Программное создание таблицы значений и динамического списка (Часть 2)

  • Главная
  • Карьера
  • Блог о жизни франчайзи
  • Про 1С от наших сотрудников

9 Сентября 2020

Библиотека программного изменения формы (УФ)

Для ускорения быстродействия, во всех процедурах библиотеки отсутствуют проверки корректности введенных имен и значений! Для исключения появления ошибок, я приведу подробное описание всех передаваемых в процедуры параметров.

  1. Необходимо разместить в дереве элементов формы уже добавленный реквизит объекта, либо реквизит формы.

// Добавляет в дерево элементов формы существующие реквизиты объекта и формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  МассивРеквизитов  - Массив структур - содержит:
//     * Имя  - Имя добавляемого реквизита
//     * Значение - Структура - содержит (все свойства не обязательные):
//        ** ИмяГруппы 			- Строка - имя элемента родителя
//        ** ПутьКДанным		- Строка - путь к данным. Если не указано, то будет Объект.<ИмяРеквизита>
//        ** ВидПоляФормы		- ВидПоляФормы - вид поля формы. По умолчанию ПолеВвода
//        ** Видимость 			- Булево - значение свойства Видимость
//        ** ТолькоПросмотр 	- Булево - значение свойства ТолькоПросмотр
//        ** Доступность 		- Булево - значение свойства Доступность
//        ** ПоместитьПеред		- Строка - имя элемента, перед которым необходимо разместить
//        ** ОбработкаСобытий 	- Массив структур - содержит:
//           *** Событие 	- Строка - имя события элемента
//           *** Действие 	- Строка - имя процедуры исполнителя события
//
Процедура РазместитьРеквизитыНаФорме(Форма, МассивРеквизитов) Экспорт

	Для каждого ТекРеквизит Из МассивРеквизитов Цикл
		
		ИмяРеквизита 		= ТекРеквизит.Имя;
		ПараметрыРеквизита 	= ТекРеквизит.Значение;
				
		Если ПараметрыРеквизита.Свойство("ИмяГруппы") Тогда
			ЭлементРодитель = Форма.Элементы[ПараметрыРеквизита.ИмяГруппы];	
		Иначе
			ЭлементРодитель = Форма;
		КонецЕсли;
		
		Элемент = Форма.Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), ЭлементРодитель);
				
		Если ПараметрыРеквизита.Свойство("ПутьКДанным") Тогда
			Элемент.ПутьКДанным = ПараметрыРеквизита.ПутьКДанным;
		Иначе 
			Элемент.ПутьКДанным = "Объект." + ИмяРеквизита;
		КонецЕсли; 
		
		Если ПараметрыРеквизита.Свойство("ВидПоляФормы") Тогда		
			Элемент.Вид = ПараметрыРеквизита.ВидПоляФормы;	
		Иначе
			Элемент.Вид = ВидПоляФормы.ПолеВвода;
		КонецЕсли;                               	
		
		Если ПараметрыРеквизита.Свойство("Видимость") Тогда
			Элемент.Видимость = ПараметрыРеквизита.Видимость;	
		КонецЕсли; 		
		
		Если ПараметрыРеквизита.Свойство("ТолькоПросмотр") Тогда
			Элемент.ТолькоПросмотр = ПараметрыРеквизита.ТолькоПросмотр;	
		КонецЕсли; 		
		
		Если ПараметрыРеквизита.Свойство("Доступность") Тогда
			Элемент.Доступность = ПараметрыРеквизита.Доступность;	
		КонецЕсли; 		
				
		Если ПараметрыРеквизита.Свойство("ПоместитьПеред") Тогда
			Форма.Элементы.Переместить(Элемент, ЭлементРодитель, Форма.Элементы[ПараметрыРеквизита.ПоместитьПеред]);	
		КонецЕсли; 		
		
		//--- обработчики событий
		Если ПараметрыРеквизита.Свойство("ОбработкаСобытий")
			И ТипЗнч(ПараметрыРеквизита.ОбработкаСобытий) = Тип("Массив") Тогда
			
			Для каждого ТекСобытие Из ПараметрыРеквизита.ОбработкаСобытий Цикл
				Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);		
			КонецЦикла; 			
			
		КонецЕсли; 
		
	КонецЦикла; 	
	
КонецПроцедуры

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

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

Элементом массива (второго параметра) является структура с двумя свойствами — Имя и Значение:

    Имя — тип Строка — Имя, которое будет присвоено новому элементу формы. Имя должно быть уникальным!

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

    ИмяГруппы — тип Строка — Имя элемента формы, который будет выступать родителем для создаваемого элемента, например группа формы или таблица формы. На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство не определено, то родителем будет выступать сама Форма.

        ПутьКДанным — тип Строка — Данный параметр определяет свойство нового элемента ПутьКДанным, например для реквизита Номенклатура табличной части Товары путь к данным будет выглядеть как «Объект.Товары.Номенклатура». Если передать некорректный путь к данным, то возникнет ошибка! Если данное свойство не определено, то по умолчанию путь к данным будет выглядеть как «Объект.<ИмяРеквизита>».

        ВидПоляФормы — тип ВидПоляФормы — Определяет какой будет вид поля нового элемента. Если передать вид поля заведомо не совместимый с типом размещаемого реквизита, то платформа определит вид поля по умолчанию для данного типа реквизита. Если данное свойство не определено, то по умолчанию будет установлено ПолеВвода.

        Видимость — тип Булево — Определяет свойство нового элемента Видимость. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.

        ТолькоПросмотр — тип Булево — Определяет свойство нового элемента ТолькоПросмотр. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Ложь.

        Доступность — тип Булево — Определяет свойство нового элемента Доступность. Если передать значение отлично от булево, то возникнет ошибка. Если данное свойство не определено, то по умолчанию значение будет Истина.

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

        ОбработкаСобытий — тип Массив — Данное свойство может быть не определено и используется, когда для нового элемента необходимо определить обработчики событий. Содержит Структуры со следующими свойствами:

            Событие — тип Строка — Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.

            Действие — тип Строка — Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.

2. Необходимо изменить несколько свойств для нескольких элементов формы.

// Изменяет свойства элементов формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  СтруктураЭлементов  - Структура - содержит:
//     * Ключ  - Имя редактируемого элемента формы
//     * Значение - Массив структур - содержит:
//        ** Имя 		- Строка - имя свойства элемента
//        ** Значение 	- Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов) Экспорт

	Для каждого ТекРеквизит Из СтруктураЭлементов Цикл
		
		ИмяЭлемента 	= ТекРеквизит.Ключ;
		МассивСвойств 	= ТекРеквизит.Значение;
		
		Элемент = Форма.Элементы[ИмяЭлемента];
		
		Для каждого СвойствоЭлемента Из МассивСвойств Цикл
		
			Элемент[СвойствоЭлемента.Имя] = СвойствоЭлемента.Значение;
		
		КонецЦикла;
		
	КонецЦикла; 	
	
КонецПроцедуры

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

Вторым параметром идет структура, которую будем обходить в цикле.
Тип параметра — Структура. Параметр является обязательным.

    Ключ — Имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!

    Значение — тип Массив — Массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.

     Имя — тип Строка — Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.

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

3. Необходимо изменить несколько свойств элемента формы.

// Изменяет свойства элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  МассивСвойств  - Массив структур - содержит:
//     * Имя 		- Строка - имя свойства элемента
//     * Значение 	- Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойстваЭлементаФормы(Форма, ИмяЭлемента, МассивСвойств) Экспорт

	СтруктураЭлементов = Новый Структура(ИмяЭлемента, МассивСвойств);
	ИзменитьСвойстваЭлементовФормы(Форма, СтруктураЭлементов);
	
КонецПроцедуры

Данная процедура преобразует параметры и передает их в процедуру из пункта 2. Она используется для упрощения, когда нужно изменить свойства только одного элемента.

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

Вторым параметром идет имя элемента формы, свойства которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет массив структур для установки свойств элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра — Массив. Параметр является обязательным.

    Имя — тип Строка — Имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.

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

4. Необходимо изменить одно свойство элемента формы.

// Изменяет свойства элементов формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  ИмяСвойства  - Строка - имя свойства элемента
//
//  ЗначениеСвойства  - Произвольный - значение свойства элемента
//
Процедура ИзменитьСвойствоЭлементаФормы(Форма, ИмяЭлемента, ИмяСвойства, ЗначениеСвойства) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	Элемент[ИмяСвойства] = ЗначениеСвойства;
	
КонецПроцедуры

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

Вторым параметром идет имя элемента формы, свойство которого необходимо изменить. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет имя свойства элемента формы, которое необходимо изменить. Если указать не корректное имя, то возникнет ошибка.
Тип параметра — Строка. Параметр является обязательным.

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

5. Необходимо установить несколько обработчиков событий для элемента формы.

// Устанавливает обработчики событий для элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  МассивСобытий  - Массив структур - содержит:
//     *Событие 	- Строка - имя события элемента
//     *Действие 	- Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытияЭлементаФормы(Форма, ИмяЭлемента, МассивСобытий) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	
	Для каждого ТекСобытие Из МассивСобытий Цикл
		Элемент.УстановитьДействие(ТекСобытие.Событие, ТекСобытие.Действие);		
	КонецЦикла; 			

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

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

Вторым параметром идет имя элемента формы, для которого необходимо установить обработчики событий. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет массив структур для установки обработчиков событий элемента формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра — Массив. Параметр является обязательным.

    Событие — тип Строка — Имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.

    Действие — тип Строка — Имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.

6. Необходимо установить обработчик события для элемента формы.

// Устанавливает обработчик события для элемента формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяЭлемента  - Строка - имя элемента формы
//
//  Событие  - Строка - имя события элемента
//
//  Действие  - Строка - имя процедуры исполнителя события
//
Процедура УстановитьСобытиеЭлементаФормы(Форма, ИмяЭлемента, Событие, Действие) Экспорт

	Элемент = Форма.Элементы[ИмяЭлемента];
	Элемент.УстановитьДействие(Событие, Действие);		

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

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

Вторым параметром идет имя элемента формы, для которого необходимо установить обработчик события. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет имя события, которое необходимо определить для элемента. Если передать не корректное имя события, то возникнет ошибка.
Тип параметра — Строка. Параметр является обязательным.

Четвертым параметром идет имя процедуры обработчика события. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать событие не будет.
Тип параметра — Строка. Параметр является обязательным.

7. Необходимо добавить на форму новую группу.

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

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

Первым параметром идет форма, на которую необходимо добавить новую группу.
Тип параметра — ФормаКлиентскогоПриложения. Параметр является обязательным.

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

Третьим параметром идет имя элемента формы, который будет выступать родителем для создаваемой группы. Если передать имя элемента, которого нет в дереве элементов, то возникнет ошибка! Если данный параметр не заполнен, то родителем будет выступать сама Форма.
Тип параметра — Строка. Параметр является НЕ обязательным.

Четвертым параметром идет вид группы формы. Если передать вид группы, который не совместим с текущим родителем создаваемой группы, то возникнет ошибка. Если данный параметр не заполнен, то вид группы будет «Обычная группа».
Тип параметра — ВидГруппыФормы. Параметр является НЕ обязательным.

Пятым параметром идет вариант группировки элементов внутри создаваемой группы. Если данный параметр не заполнен, то вариант группировки будет «Горизонтальная если возможно».
Тип параметра — ГруппировкаПодчиненныхЭлементовФормы. Параметр является НЕ обязательным.

Шестым параметром идет признак, нужно ли отображать заголовок создаваемой группы. Если данный параметр не заполнен, то заголовок отображаться не будет.
Тип параметра — Булево. Параметр является НЕ обязательным.

Седьмым параметром идет текст заголовка создаваемой группы. Если шестой параметр не заполнен, либо имеет значение Ложь, то заголовок отображаться не будет. Если данный параметр не заполнен, то заголовок будет пустым.
Тип параметра — Строка. Параметр является НЕ обязательным.

8. Необходимо добавить на форму новые реквизиты формы.

// Добавляет новые реквизиты формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  МассивРеквизитов  - Массив структур - содержит:
//     *ИмяРеквизита  - Строка - имя нового реквизита формы
//     *ТипРевизита  - ОписаниеТипов - тип реквизита. По умолчанию строка неограниченной длины
//     *ЗаголовокРеквизита  - Строка - отображаемый текст реквизита. Не обязательный
//     *Путь  - Строка  - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//     *СохраняемыеДанные  - Булево  - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//     *РодительЭлемента  - Строка - имя родителя элемента формы,
//	   *ИмяЭлемента  - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
//							По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитыФормы(Форма, МассивРеквизитов) Экспорт

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

Первым параметром идет форма, на которую необходимо добавить новые реквизиты формы.
Тип параметра — ФормаКлиентскогоПриложения. Параметр является обязательным.

Вторым параметром идет массив структур для определения свойств новых реквизитов формы. Если в качестве элемента массива будет передана не структура, или структура без свойств, описанных ниже, то возникнет ошибка.
Тип параметра — Массив. Параметр является обязательным.

    ИмяРеквизита — тип Строка — Имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!

    ТипРевизита — тип ОписаниеТипов — Данный параметр определяет, какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данное свойство не определено, то типом данных будет Строка неограниченной длины.

    ЗаголовокРеквизита — тип Строка — Отображаемый заголовок нового реквизита формы. Если данное свойство не определено, то в качестве заголовка будет свойство ИмяРеквизита.

    Путь — тип Строка — Данное свойство используется, если создаваемый реквизит относится к другому реквизиту формы, например к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данное свойство не определено, то новый реквизит будет принадлежать непосредственно форме.

    СохраняемыеДанные — тип Булево — Если новый реквизит формы будет содержать сохраняемые данные, то необходимо передать в качестве данного свойства Истина. Если данное свойство не определено, то по умолчанию значение будет Ложь.

    РодительЭлемента — тип Строка — Если, помимо создания реквизита формы, его нужно разместить в дереве элементов, то необходимо определить у структуры данное свойство. Значение данного свойства определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого свойства должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данное свойство определено, то его необходимо использовать в паре с процедурой «РеквизитыДляРазмещения» из п.1. Если данное свойство не определено, то реквизит не будет размещен в дереве элементов формы. Если данное свойство определено и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.

    ИмяЭлемента — тип Строка — Используется только в паре со свойством РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальным! Если данное свойство не определено, то именем будет ИмяРеквизита.

9. Необходимо добавить на форму новый реквизит формы.

// Добавляет новый реквизит формы
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяРеквизита  - Строка - имя нового реквизита формы
//
//  ТипРевизита  - ОписаниеТипов - тип реквизита. По умолчанию строка
//
//  ЗаголовокРеквизита  - Строка - отображаемый текст реквизита. Не обязательный
//
//  Путь  - Строка  - путь к создаваемому реквизиту. Не включает имя реквизита. Не обязательный
//
//  СохраняемыеДанные  - Булево  - если реквизит содержит сохраняемые данные. По умолчанию Ложь
//
//  РодительЭлемента  - Строка - имя родителя элемента формы,
//								если дополнительно необходимо разместить на форме. Не обязательный
//
//  ИмяЭлемента  - Строка - если заполнен параметр РодительЭлемента, то дополнительно можно указать имя элемента формы.
//							По умолчанию именем будет ИмяРеквизита
//
Процедура ДобавитьРеквизитФормы(Форма, ИмяРеквизита, ЗаголовокРеквизита = "", Путь = "",
							СохраняемыеДанные = Ложь, РодительЭлемента = "", ИмяЭлемента = "") Экспорт

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

Данная процедура преобразует параметры и передает их в процедуру из пункта 8. Она используется для упрощения, когда нужно добавить только один реквизит формы.

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

Вторым параметром идет имя, которое будет присвоено новому реквизиту формы. Имя должно быть уникальным!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет описание какой(какие) тип(типы) данных может содержать новый реквизит формы. Если данный параметр не заполнен, то типом данных будет Строка неограниченной длины.
Тип параметра — ОписаниеТипов. Параметр является НЕ обязательным.

Четвертым параметром идет значение отображаемого заголовка нового реквизита формы. Если данный параметр не заполнен, то в качестве заголовка будет параметр ИмяРеквизита.
Тип параметра — Строка. Параметр является НЕ обязательным.

Пятым параметром идет путь к другому реквизиту формы и используется, если создаваемый реквизит относится, например, к табличной части Объекта или к Таблице значений формы. Само имя реквизита в путь включать не нужно. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данный параметр не заполнен, то новый реквизит будет принадлежать непосредственно форме.
Тип параметра — Строка. Параметр является НЕ обязательным.

Шестым параметром идет признак, что новый реквизит формы будет содержать сохраняемые данные. Если данный параметр не заполнен, то по умолчанию значение будет Ложь.
Тип параметра — Булево. Параметр является НЕ обязательным.

Седьмым параметром идет имя родительского элемента формы. Данный параметр используется, если, помимо создания реквизита формы, его нужно разместить в дереве элементов. Значение данного параметра определяет будет ли новый реквизит размещен в конкретной группе дерева элементов формы, либо в конце дерева элементов. Значением этого параметра должна быть строка, иначе возникнет ошибка! На момент размещения нового элемента формы, его родитель уже должен присутствовать в дереве элементов, иначе возникнет ошибка! Если данный параметр используется, то его необходимо использовать в паре с процедурой «РеквизитыДляРазмещения» из п.1. Если данный параметр не заполнен, то реквизит не будет размещен в дереве элементов формы. Если данный параметр заполнен и в качестве значения передана пустая строка, то родителем для нового реквизита будет сама Форма.
Тип параметра — Строка. Параметр является НЕ обязательным.

Восьмым параметром идет имя элемента формы, к которому будет относится новый реквизит формы. Используется только в паре с параметром РодительЭлемента. Используется для задания уникального имени нового элемента формы. Имя должно быть уникальным! Если данный параметр не заполнен, то именем будет ИмяРеквизита.
Тип параметра — Строка. Параметр является НЕ обязательным.

10. Необходимо добавить для формы новую команду и разместить ее на форме.

// Добавляет новую команду формы. Дополнительно можно сразу разменить кнопку на форме
//
// Параметры:
//  Форма  - ФормаКлиентскогоПриложения - изменяемая форма
//
//  ИмяКоманды  - Строка - имя новой команды формы
//
//  ДействиеКоманды  - Строка - имя обработчика для команды
//
//  ИмяГруппы  - Строка - имя родительского элемента, если необходимо разместить команду на форме
//			   - Неопределено - если нужно только создать новую команду
//								По умолчанию команда размещается в корне формы
//
//  ВидКнопки  - ВидКнопкиФормы   - вид кнопки формы. По умолчанию ОбычнаяКнопка или КнопкаКоманднойПанели,
//														зависит от родителя
//
//  Заголовок  - Строка  - заголовок кнопки формы. Не обязательный
//
//  ПоместитьПеред  - Строка - имя элемента, перед которым необходимо разместить кнопку формы. Не обязательный
//
//  Картинка  - Картинка - картинка кнопки формы. Не обязательный
//
//  ОтображениеКнопки  - ОтображениеКнопки - вариант отражение кнопки на форме. Учитывается только если
//												заполнен параметр Картинка. Не обязательный
//
Процедура ДобавитьРазместитьКомандуФормы(Форма, ИмяКоманды, ДействиеКоманды, ИмяГруппы = "", ВидКнопки = Неопределено,
										Заголовок = "", ПоместитьПеред = "",
										Картинка = Неопределено, ОтображениеКнопки = Неопределено) Экспорт

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

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

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

Вторым параметром идет имя, которое будет присвоено новой команде. Имя должно быть уникальным!
Тип параметра — Строка. Параметр является обязательным.

Третьим параметром идет имя процедуры обработчика для новой команды. Если передать не корректное имя процедуры, то ошибки не возникнет, но и отрабатывать команда не будет.
Тип параметра — Строка. Параметр является обязательным.

Четвертым параметром идет имя родительского элемента формы, если команду необходимо разместить на форме. Если в качестве данного параметра передать Неопределено, то процедура завершится и команда на форме размещена не будет. Если указать имя реквизита, которого нет в реквизитах формы, то возникнет ошибка! Если данный параметр заполнен пустой строкой, то родителем будет сама Форма. Если данный параметр не заполнен, то команда на форме будет размещена и родителем будет сама Форма.
Тип параметра — Строка или Неопределено. Параметр является НЕ обязательным.

Пятым параметром идет вид кнопки, к которой будет привязана команда. Если данный параметр не заполнен, то вид кнопки будет либо ОбычнаяКнопка, либо КнопкаКоманднойПанели, в зависимости от родителя.
Тип параметра — ВидКнопкиФормы. Параметр является НЕ обязательным.

Шестым параметром идет заголовок новой кнопки формы. Если данный параметр не заполнен, то заголовок будет определяться от имени команды.
Тип параметра — Строка. Параметр является НЕ обязательным.

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

Восьмым параметром идет картинка для новой кнопки формы.
Тип параметра — Картинка. Параметр является НЕ обязательным.

Девятым параметром идет вариант отображения новой кнопки на форме. Данный параметр будет учитываться только, если заполнен параметр Картинка.
Тип параметра — ОтображениеКнопки. Параметр является НЕ обязательным.

К данной статье я прилагаю обработку, в модуле объекта которой есть:

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

Бурмистров.png

Статью подготовил старший разработчик 1С «ИнфоСофт» Бурмистров Алексей.
Статья опубликована на портале ИнфоСтарт

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

  1. Платформа 8.3 позволяет использовать как обычные, так и управляемые формы. Возможность использования обычных и управляемых форм зависит от настроек конфигурации и клиентского приложения (зависит от указания в конфигураторе режима совместимости, и варианта запуска клиента).
  2. Использование обычных форм возможно только в толстом клиенте.
  3. Использование управляемых форм возможно (в зависимости от настроек конфигурации):
    • в толстом клиенте в режиме обычного приложения;
    • в толстом клиенте в режиме управляемого приложения;
    • в тонком клиенте;
    • в веб-клиенте.
  4. Автопреобразование обычных форм в управляемые и обратно не поддерживается (у обычных и управляемых форм разные механизмы и варианты компиляции).
  5. Возможность системы создания «налету» форм по умолчанию в режиме «1С:Предприятие» следует использовать во всех случаях, когда не требуется выполнение программных действий в форме, и нет особых требований по отношению внешнего вида формы объекта со стороны пользователя.
  6. Количество форм, подчиненных справочнику, не ограничено (может быть создано произвольное количество форм).
  7. При обращении к обычной форме «извне» для считывания данных рекомендуется обращаться к реквизитам формы и свойствам расширения формы.

[свернуть]

Редактор формы используется для создания и редактирования форм объектов прикладного решения.

Формы объектов используются системой для визуального отображения данных в процессе работы пользователя.

Составляющие управляемой формы 1С:

  • элемент — объект, определяющий визуальное представление формы и осуществляющий взаимодействие с пользователем;
  • командный интерфейс — совокупность команд, отображаемых в форме;
  • реквизит — объект, данные которого форма использует в своей работе;
  • команда — действие, которое определено в данной конкретной форме;
  • параметр — объект, значения которого характеризует саму форму и используются при ее создании (остаются постоянными в процессе «жизни» формы);
  • модуль — программа на встроенном языке, отвечающая за работу с элементами и за обработку событий.

Рисунок «Редактор управляемой формы 1С»

Редактор управляемой формы 1С

[свернуть]

Редактор формы содержит несколько закладок, обеспечивающих редактирование всех составляющих формы.

В отдельном окне, в нижней части редактора, отображается внешний вид формы в режиме 1С:Предприятие.

Элементы формы 1С

Элементы управления — это объекты формы, определяющие визуальное представление формы и предназначенные для интерактивного взаимодействия с пользователем (например, кнопки, флажки, поля ввода и т.д., визуальное объединение «элементарных» элементов управления).

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

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

В элементах управления данные не хранятся!

Для управляемой формы, список элементов управления доступен из соответствующего окна:

Список элементов управления формы 1С

Редактор форм позволяет разработчику использовать широкий набор возможностей для изменения набора элементов формы и, соответственно, внешнего вида формы — того вида, который форма будет иметь в режиме 1С:Предприятие.


Особенности элементов управляемых форм:

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

    Рисунок

    Изменение размера элемента управления

    [свернуть]

  4. Если реквизит, размещенный в форме, используется элементом управления, то он помечается в редакторе реквизитов в колонке с пиктограммой в виде квадрата.

    Рисунок

    1С Реквизит формы

    [свернуть]

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

      Рисунок

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

      [свернуть]

  6. Поле с типом «Поле HTML документа» позволяет открывать в окне 1С веб-страницы сторонних сайтов.

    Порядок добавления поля HTML-документа на форму 1С:

    Создадим внешнюю обработку, зададим в ней реквизит (HTMLполе) с типом «Строка» (длина строки должна превышать длину URL сайта, иначе будет обрезать):

    Поле HTML

    Создадим форму обработки, и добавим на неё:

    1. поле для реквизита с типом HTMLполе;
    2. команду перехода («Команды — Команды формы»);
    3. кнопку действия, которую свяжем с командой перехода.

    Вывод стороннего сайта в окне 1С

    Переход на веб-сайт в 1С

    Запрограммируем действие (правой кнопкой на кнопке команды — <Действие команды>):

    Веб браузер в 1С

    Результат исполнения обработки:

    Вывод веб-сайта в окне 1С

    [свернуть]


Редактор позволяет добавлять в форму различные элементы:

  • с помощью команды добавления или
  • путем перетаскивания реквизитов формы в дерево элементов.

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

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

В режиме 1С:Предприятие элементы формы будут обходиться:

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

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

Страницы и закладки формы 1С

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

  • придать форме собственный узнаваемый стиль;
  • сделать доступ к данным простым и понятным;
  • разместить большой объем информации на ограниченной площади.

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

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

Пример «Добавление в форму 1С закладок»

Исходный вариант формы элемента:

Добавление в форму 1С закладок

Элементы «Код», «Услуга» и «Наименование» помещены на разные закладки:

Вид формы в режиме 1С:Предприятие:

[свернуть]

Разделители формы 1С

Разделители являются специальными элементами, с помощью которых возможно перераспределение пространства формы без изменения ее размеров.

Платформа в режиме 1С:Предприятие для управляемых форм самостоятельно добавляет эти элементы в форму.

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

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

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

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

  • вертикальным разделителям устанавливается ширина 6, горизонтальную привязку рекомендуется устанавливать в НеПривязано;
  • горизонтальным разделителям устанавливается высота 6, вертикальную привязку рекомендуется устанавливать в НеПривязано;
  • рамку рекомендуется устанавливать в НетРамки. В сложных случаях, когда пользователю может быть тяжело догадаться о наличие разделителя, допускается устанавливать рамку Одинарная.

Разделитель обладает способностью «захватываться» мышью и перемещаться внутри формы в ее пределах с учетом возможности расположения других элементов и ориентации разделителя.

При перемещении разделителя, все элементы, связанные с разделителем, будут изменять свои размеры или перемещаться.

Таким образом, элемент управления «Разделитель» позволяет перераспределять внутреннее пространство формы, изменяя размеры расположенных в ней элементов управления, привязанных к разделителю. Размеры самой формы при этом не меняются.

[свернуть]

Модуль формы 1С

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

Модуль формы 1C предназначен для обработки:

  1. событий, связанных непосредственно с самой формой (например, открытие или закрытие), а также
  2. событий, связанных с действиями пользователя (например, вводом данных и обработкой корректности их ввода).

Модуль формы компилируется:

  • обычной  — на клиенте;
  • управляемой — четко разграничен по контексту выполнения, поэтому все переменные и методы должны иметь директиву компиляции (если директива в явном виде не указана, тогда эта переменная или метод будут скомпилированы на стороне сервера).

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

Свойства и методы объекта УправляемаяФорма

Свойства и методы объекта УправляемаяФорма описаны в синтакс-помощнике и к ним можно обращаться в модуле управляемой формы непосредственно по имени, например:

// Изменим заголовок

&НаКлиенте

Процедура ПользовательскаяПроцедура1()

Заголовок = «Мой Заголовок»;

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

// Закроем форму

&НаКлиенте

Процедура ПользовательскаяПроцедура2()

Закрыть();

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

События, процедуры и фyнкции модуля управляемой формы 1С

К стандартным событиям формы можно обратиться:

  • через список процедур и функций (Ctrl+Alt+P) либо
  • в палитре свойств самой формы.

События модуля формы 1С

События модуля формы 1С

[свернуть]

Особенности модуля управляемых форм:

  1. модуль управляемой формы четко разделяется на контекст: каждая процедура (функция) должна иметь директиву компиляции;
  2. в модуле управляемой формы можно объявлять процедуры и функции, объявлять переменные и описывать раздел основной программы;
  3. в управляемой форме можно обработать событие записи элемента (присутствует только для форм объектов — справочников, документов и некоторых других).

Реквизиты формы 1С

Редактирование реквизитов формы выполняется в списке, который позволяет создавать новые реквизиты, изменять имеющиеся и удалять ненужные реквизиты.

Реквизиты формы 1С

Свойства реквизитов задаются с помощью палитры свойств.

Если у формы существует основной реквизит, определяющий поведение формы, отличное от типового, — он выделяется жирным шрифтом.

Командный интерфейс формы 1С

О командном интерфейсе 1С

Командный интерфейс 1С — это основное средство навигации пользователя по функциональности конфигурации.

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

Рисунок «Подсистемы 1С и командный интерфейс»

Подсистемы 1С и командный интерфейс

[свернуть]

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

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

[свернуть]

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

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

1С Добавление команд в командный интерфейс

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

Команды формы 1С

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

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

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

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

Параметры формы 1С

Параметры формы 1С предназначены:

  1. для организации функциональной связи между формами;
  2. для управления функциональностью формы при открытии.

Параметры формы редактируются в списке (закладка Параметры).

Разработчик имеет возможность:

  • добавить, удалить параметры формы;
  • задать свойства параметров формы с помощью палитры свойств;
  • программно передать в форму параметры в момент ее создания.

Параметры формы позволяют:

  1. описать набор данных, которые будут влиять на открытие формы (параметризация формы); для этого нужно перечислить все необходимые параметры и указать их типы;
  2. определить параметры, которые будут влиять на ключ уникальности формы; для этого необходимо установить свойство «Ключевой параметр» у тех параметров, которые должны участвовать в формировании ключа уникальности формы.

Отличие ключевого параметра формы 1С от обычного:

  • если обычный параметр существует только при создании формы, то ключевой – всегда (т.е. ключевой параметр хранится все время жизни формы, т.к. все новые формы будут проверяться на соответствие этому параметру).

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

При попытке открыть форму система производит поиск существующей формы с помощью сформированного ключа уникальности формы. Если в системе существует форма с полученным ключом уникальности, возвращается именно эта форма; если нет – создается новая форма.

ВНИМАНИЕ! После вызова обработчика события ПриСозданииНаСервере все неключевые параметры формы удаляются из коллекции Параметры. Неключевые параметры формы, необходимые для дальнейшей работы, нужно сохранять в данных формы.

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

Передача параметров формы при её создании

Отсюда…

Параметры формы можно передать в форму в момент ее создания.

Анализ переданных параметров можно выполнить в событии ПриСозданииНаСервере() (коллекция Параметры является свойством объекта УправляемаяФорма):

// В месте вызова.

// Формируем параметр формы.

Параметры = Новый Структура();

Параметры.Вставить(“Важность”, ПредопределенноеЗначение(“Перечисление.Важность.Важно”));

// Открываем форму с указанием параметров.

ОткрытьФорму(“ОбщаяФорма.ФормаПросмотра”, Параметры);

// В модуле формы.

&НаСервере

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

Если Параметры.Важность = Перечисления.Важность.Важно Тогда

КонецЕсли;

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

[свернуть]

Понравилась статья? Поделить с друзьями:
  • Как программно изменить вариант отчета скд
  • Как программно изменить ip адрес
  • Как проводится работа над ошибками после диктанта
  • Как провести работу над ошибками после диктанта 3 класс
  • Как провести день рождения чтобы изменить жизнь к лучшему