Управляемая форма описывается декларативно: реквизиты, элементы, команды. Платформа сама строит интерфейс под клиент. Вопросы на собесе: события и их порядок, реквизиты и элементы, работа с данными формы.
Реквизиты, элементы, команды
- Реквизиты хранят данные. Основной реквизит формы объекта называется Объект и имеет тип ДанныеФормыСтруктура. Табличные части в форме это ДанныеФормыКоллекция.
- Элементы отображают реквизиты (свойство ПутьКДанным): поля, таблицы, группы, кнопки.
Элементы.Скидка.Видимость = Ложь. - Команды описывают действия, кнопки на них ссылаются.
Открытие формы
ПриСозданииНаСервере выполняется до отправки формы на клиент: тут заполняют реквизиты, настраивают видимость по правам и данным, читают параметры (Параметры.Ключ). Затем на клиенте ПриОткрытии.
Открыть форму объекта: ОткрытьФорму("Документ.Заказ.ФормаОбъекта", Новый Структура("Ключ", Ссылка)) или ПоказатьЗначение(, Ссылка).
Запись из формы
Порядок событий при интерактивной записи:
- ПередЗаписью (форма, клиент): вопросы пользователю, отказ.
- ПередЗаписьюНаСервере (форма): есть ТекущийОбъект.
- ПередЗаписью (модуль объекта).
- ПриЗаписи (модуль объекта), при проведении также ОбработкаПроведения.
- ПриЗаписиНаСервере (форма): ещё в транзакции.
- ПослеЗаписиНаСервере (форма).
- ПослеЗаписи (форма, клиент): оповестить другие формы.
Логику, которая должна работать при любой записи (из кода, обмена, обработки), пишут в модуле объекта, а не в форме.
Данные формы и прикладные объекты
У Объект в форме нет методов модуля объекта и нет Записать(). На сервере данные преобразуют:
&НаСервере
Процедура ЗаполнитьНаСервере()
Док = РеквизитФормыВЗначение("Объект");
Док.ЗаполнитьТовары();
ЗначениеВРеквизитФормы(Док, "Объект");
КонецПроцедуры
Есть и глобальные ДанныеФормыВЗначение и ЗначениеВДанныеФормы.
Взаимодействие форм
Оповестить("ЗаписанКонтрагент", Ссылка)рассылает событие, а форма реагирует в ОбработкаОповещения.- Форма выбора возвращает значение через ОповеститьОВыборе, принимающая форма получает его в ОбработкаВыбора.
- Асинхронные диалоги: ПоказатьВопрос с ОписаниеОповещения или Асинх и Ждать.
Динамический список
Список строится запросом (можно произвольным) и подгружает строки порциями, поэтому открывается быстро на любом объёме. Параметры запроса: Список.Параметры.УстановитьЗначениеПараметра("ТекущаяДата", ТекущаяДатаСеанса()). Отборы через коллекцию Отбор.
Производительность форм
- Не делать лишних серверных вызовов, особенно с контекстом.
- Пересчёт строк на клиенте.
- Не заполнять колонки через точку в цикле в ПриСозданииНаСервере.
- Раскраска строк условным оформлением, а не кодом.
- Не держать лишних реквизитов: они передаются при каждом вызове.
Флаг Модифицированность ставится при интерактивных изменениях. При программном изменении его устанавливают явно, если нужно спросить о сохранении.
Частые ошибки
- Объект.Записать() в форме.
- Видимость в ПриОткрытии с серверным вызовом.
- Логика записи только в форме.
- Чтение реквизитов ссылки на клиенте.
Что спросят на собесе
- Порядок событий при открытии и записи формы.
- Чем реквизит формы отличается от элемента?
- Как вызвать метод модуля объекта из формы?
- Как одна форма сообщает другой о событии?
- Почему динамический список быстрый?