Skip to main content

Формы интерфейса

Здесь и далее под формой понимается управляемая форма.  

Виды форм интерфейса

Существуют формы объекта и произвольные формы. 

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

Бессмысленный с практической стороны пример, только для демонстрации взаимосвязи ключа "Ключ" и основного параметра формы. Справочник Города. В форму элемента добавлена кнопка и реквизит ссылка на товары. Обработка формы:

&НаКлиенте
Процедура КомандаОткрытияТоваров(Команда)   
	Парам = Новый Структура;
	Парам.Вставить("Ключ", НужныйТоварСсылка);
	ОткрытьФорму("Справочник.Города.Форма.ФормаПростоТак", Парам);
КонецПроцедуры

В ФормеПростоТак такая настройка:

 1c_forms_types.jpg

Имена параметров не совпадают, но когда он основной реквизит - выбранный товар открывается. Если не основной - не подгружается. Если реквизит основной, но в обработке формы меняю на совпадающее название (Ключ1) - не подгружается.

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

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

Точки хранения форм

Формы могут храниться в Общие - Общие формы и в объектах конфигурации, раздел Формы. Произвольную форму можно создать во всех точках хранения.

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

1c_forms_types_common.jpg

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

Работа с элементами формы

Доступ к выбранному элементу табличной части. Контактные лица - имя табличной части.

&НаКлиенте
Процедура СообщитьВыбраннуюСтроку(Команда)
	ВыбранныйКонтакт = Элементы.КонтактныеЛица.ТекущиеДанные;
	Если ВыбранныйКонтакт = Неопределено Тогда
		Сообщить("Контактов не существует");
	Иначе
		Сообщить(ВыбранныйКонтакт.Телефон);
	КонецЕсли;
КонецПроцедуры

Проверка заполнения поля. Важный момент, потратил минут 30. ! Код нужно тестировать ! 

ЗначениеЗаполнено(Поле)

Открытие другой формы. 

Статья по открытию форм, но стоит проверить данные в статье.

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

Полный список параметров  метода «ОткрытьФорму»: ИмяФормы, Параметры, Владелец, Уникальность, Окно

Свойство ИмяФормы. Пример открытия формы с передачей только имени формы. Параметром передается строка, подсказки нет, поэтому внимательно к именам (Справочник в единственном числе, Форма в единственном числе). Кнопка, к которой привязано действие, размещена в форме элемента справочника Города.

&НаКлиенте
Процедура КомандаОткрытияТоваров(Команда)
	ОткрытьФорму("Справочник.Товары.Форма.ФормаСпискаТовары");
КонецПроцедуры

1c_forms_actions2.JPG


Свойство «Параметры» Тип Структура. Передать туда можно все, что можно передать с клиента на сервер.

Если объект ссылочный (например конкретный документ, на который есть ссылка), то необходимо в поле Ключ передать ссылку.

Пример: есть справочник, в котором есть табличная часть КонтактныеЛица. У табличной части есть реквизит ДокументТестовый типа ДокументСсылкаПоступлениеТоваров. Процедура обработки нажатия на кнопку:

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

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

В случае, если нужно создать новый объект на основании существующего, то нужно добавить параметр "Основание" со ссылкой на объект, на основании которого нужно сделать новый документ. В этом случае вызывается процедура «ОбработкаЗаполнения» модуля объекта. Эта процедура имеет единственный параметр «Основание».  Если мы в параметры вставим ключ «Основание», то он будет передан в процедуру «ОбработкаЗаполнения».

События формы

Интересная статья