Skip to main content

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

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

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

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

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

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

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

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

 1c_forms_types.jpg

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

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

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

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

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

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

1c_forms_types_common.jpg

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

Модальные и обычные окна

Модальные окна в 1С - это такой тип окна, вызываемый в среде 1С, который блокирует остальной интерфейс 1С 8. Сейчас устаревшая технология. 

Способы взаимодействия между формы

  1. ОткрытьМодально, параметр закрытия, метод Закрыть.  
    //В первой форме
    ВозвращаемоеЗначение = ДругаяФорма.ОткрытьМодально(). 
    //В другой форме 
    ЭтаФорма.Закрыть(ВозвращаемоеЗначениеВПервуюФорму)
  2. Реквизиты формы (или свойства расширения формы). Реквизиты формы видимы снаружи как свойства объекта «Форма». 
    //В первой форме
    ДругаяФорма.ИмяРеквизита = Значение.
  3. Через ЭлементыФормы. 
    //В первой форме 
    ДругаяФорма = ДокументСсылка.ПолучитьФорму(). 
    ДругаяФорма.ЭлементыФормы.ИмяПоля.Значение = Значение.
  4. Оповещения. 
    //В первой форме оповещаются все открытые формы
    Оповестить("ИмяСобытия", "Форма1", Данные);
    
    //В другой форме следует назначить обработчик события оповещения.
    Процедура ОбработкаОповещения(Событие, Источник, Данные)
       Если Событие = "ИмяСобытия" И Источник = "Форма1" Тогда
       КонецЕсли;
    КонецПроцедуры
  5. Экспортные переменные модулей форм. Они становятся видимы снаружи примерно как реквизиты форм. 
    //В первой форме 
    ДругаяФорма.ИмяПеременной = Значение;
    //В другой форме 
    Перем ИмяПеременной Экспорт;
  6. Параметры сеанса. 
    //В первой форме 
    ПараметрыСеанса.ИмяПараметра = Значение 
    //В другой форме 
    Если ПараметрыСеанса.ИмяПараметра = Значение Тогда КонецЕсли

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

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

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

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

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

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

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

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

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

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

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

1c_forms_actions2.JPG


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

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

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

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

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

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

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

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