Найти элемент формы по имени 1с

Обновлено: 07.07.2024

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

На эту ситуацию можно посмотреть с двух сторон:

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

Объект конфигурации (данные):

Экранная форма и элементы управления:

Необходимо понимать, что если форма принадлежит конкретному объекту конфигурации (т.е. отображается в списке "Формы" объекта), то этого недостаточно для реализации связи между элементами управления и данными. Более того, это даже необязательно. Вполне возможно создать общую форму, не принадлежащую ни одному из объектов конфигурации, которая будет отображать список элементов справочника или позволять редактировать конкретный документ. Другое дело, что такую форму нельзя будет назначить в качестве "основной" для определенных действий, но свою функцию она выполнять будет.

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

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

Создание формы списка

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

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

Внимание. Не путайте реквизиты формы и реквизиты объекта конфигурации , например, справочника или документа. Это разные понятия.

Создадим реквизит формы с именем "СпрСписок" и назначим ему тип "СправочникСписок.Номенклатура":

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

Заметьте, что при указании свойства "Данные" автоматически изменилось и свойство "Тип значения". Если его сейчас изменить, то изменится тип основного реквизита формы. Мы этого делать не будем.

Если вы перейдете обратно на закладку "Реквизиты" формы, то увидите, что этот реквизит стал "основным" (выделен жирным шрифтом):

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

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

Перейдем теперь в диалог формы и разместим в рабочей области формы элемент управления "Табличное поле":

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

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

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

  • Были созданы колонки "Код" и "Наименование" табличного поля "тпСписок". Эти колонки были автоматически связаны с реквизитами справочника (через свойство колонки "Данные"). Естественно, что это можно было сделать и вручную.
  • Была заполнена верхняя вспомогательная командная панель (замечание: точнее для командной панели было установлено свойство "АвтоЗаполнение", поэтому теперь она будет содержать стандартный набор кнопок, определяемый типом основного реквизита формы)
  • Реквизит формы "ТабличноеПоле1" был удален.

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

Теперь можно запустить "1С:Предприятие" и проверить работу формы:

Создание формы элемента

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

Создайте новую форму, принадлежащую справочнику. При создании формы укажите тип формы "Произвольная", затем можно задать для нее имя "ФормаЭлементаНовая". Будет создана следующая экранная форма:

Перейдите на закладку "Реквизиты" и создайте новый реквизит формы с именем "СпрОбъект" и типом "СправочникОбъект.Номенклатура".

Этот реквизит пока не является основным реквизитом формы, потому что он не указан в свойстве "Данные" самой формы. Сделаем это. Откройте свойства формы и заполните свойство "Данные" (тип значения будет заполнен автоматически):

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

После указания свойства "Данные" реквизит "СпрОбъект" стал основным реквизитом формы. Так как он имеет тип "СправочникОбъект.Номенклатуры", то это значительно изменило поведение формы, в частности следующие аспекты:

  • Изменился потенциальный состав кнопок командных панелей формы (верхней вспомогательной и нижней). Чтобы в верхней командной панели отображался набор кнопок, нужно в ее свойствах снять, а затем опять установить флажок "Автозаполнение". Далее добавьте кнопки ОК, Записать и Закрыть в нижнюю командную панель. Кнопка ОК будет выполнять действия "Записать и Закрыть" и она будет являться кнопкой по умолчанию (выделена жирным шрифтом и срабатывает по Ctrl-Enter). Чтобы выводились надписи и картинки, нужно для каждой кнопки соответствующим образом задать свойство "Отображение". В итоге форма приобретет следующий вид:
  • Расширился состав свойств, методов и событий контекста формы в соответствии с "расширением формы элемента справочника":

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

Теперь разместим диалоге формы элементы управления для редактирования элемента справочника. Поместите в форму поле ввода и рядом с ним надпись "Наименование":

В свойствах поля для ввода наименования установите свойство "Данные", связав его с реквизитом "Наименование" объекта "СпрОбъект":

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

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

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

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

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

Осталось назначить эту форму в качестве основной формы элемента справочника и можно проверять ее работу:

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

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

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

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

В управляемой форме можно программно добавить, изменить и удалить:

Все указанные операции возможны только на сервере.

Программное изменение формы имеет ограничения:

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

Изменение команд формы

Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:

Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.

В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры

Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .

Изменение реквизитов формы

Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .

Внимание!

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

Создадим новый реквизит формы с именем Покупатель:

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

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

Изменение элементов формы

Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:

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

Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .

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

Добавление команды и связанной с ней кнопки:

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

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

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

Назначение элементу формы обработчика события:

ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );

&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры

Внимание!

Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.

Внимание!

Остались вопросы?
Спросите в комментариях к статье.

Получение значения реквизита формы.

Нужно вывести на форму список значений со списком типов цен.
Реквизит должен быть не реквизитом объекта, а реквизитом формы.

Что бы получить значение элемента (реквизита) формы нужно написать следующее:
Код 1C v 8.2 УП
Через "ЭтаФорма" также можно достучаться и к элементам "Объект".
Код 1C v 8.2 УП

1С значение элемента управляемой формы

Похожие FAQ

Еще в этой же категории

Как на управляемой форме разместить список регистра сведений с отбором? 15
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Поле выбора

Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Форма

Распечатать

Google maps : вывод точек на карту и режим панорамы  7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора База 1С при запуске уходит в дамп и вылетает  1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C  3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Ввод по строке - поиск по первым символам или в любом месте наименования  6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Веб браузер в 1С используя поле HTML документа  2
Настраивал клиенту CRM, он захотел - чтобы панель управления сайтом была в 1С. Хочет - делаем: Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода: Код команд: НаКлиенте Процедура Команда1(Команда) Объект.HTML = Посмотреть все результаты поиска похожих

Еще в этой же категории

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

Читайте также: