Урок по треку Разработка на 1С 5 мин

Управляемые формы

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

Управляемая форма описывается декларативно: реквизиты, элементы, команды. Платформа сама строит интерфейс под клиент. Вопросы на собесе: события и их порядок, реквизиты и элементы, работа с данными формы.

Реквизиты, элементы, команды

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

Открытие формы

ПриСозданииНаСервере выполняется до отправки формы на клиент: тут заполняют реквизиты, настраивают видимость по правам и данным, читают параметры (Параметры.Ключ). Затем на клиенте ПриОткрытии.

Открыть форму объекта: ОткрытьФорму("Документ.Заказ.ФормаОбъекта", Новый Структура("Ключ", Ссылка)) или ПоказатьЗначение(, Ссылка).

Запись из формы

Порядок событий при интерактивной записи:

  1. ПередЗаписью (форма, клиент): вопросы пользователю, отказ.
  2. ПередЗаписьюНаСервере (форма): есть ТекущийОбъект.
  3. ПередЗаписью (модуль объекта).
  4. ПриЗаписи (модуль объекта), при проведении также ОбработкаПроведения.
  5. ПриЗаписиНаСервере (форма): ещё в транзакции.
  6. ПослеЗаписиНаСервере (форма).
  7. ПослеЗаписи (форма, клиент): оповестить другие формы.

Логику, которая должна работать при любой записи (из кода, обмена, обработки), пишут в модуле объекта, а не в форме.

Данные формы и прикладные объекты

У Объект в форме нет методов модуля объекта и нет Записать(). На сервере данные преобразуют:

&НаСервере
Процедура ЗаполнитьНаСервере()
	Док = РеквизитФормыВЗначение("Объект");
	Док.ЗаполнитьТовары();
	ЗначениеВРеквизитФормы(Док, "Объект");
КонецПроцедуры

Есть и глобальные ДанныеФормыВЗначение и ЗначениеВДанныеФормы.

Взаимодействие форм

  • Оповестить("ЗаписанКонтрагент", Ссылка) рассылает событие, а форма реагирует в ОбработкаОповещения.
  • Форма выбора возвращает значение через ОповеститьОВыборе, принимающая форма получает его в ОбработкаВыбора.
  • Асинхронные диалоги: ПоказатьВопрос с ОписаниеОповещения или Асинх и Ждать.

Динамический список

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

Производительность форм

  • Не делать лишних серверных вызовов, особенно с контекстом.
  • Пересчёт строк на клиенте.
  • Не заполнять колонки через точку в цикле в ПриСозданииНаСервере.
  • Раскраска строк условным оформлением, а не кодом.
  • Не держать лишних реквизитов: они передаются при каждом вызове.

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

Частые ошибки

  • Объект.Записать() в форме.
  • Видимость в ПриОткрытии с серверным вызовом.
  • Логика записи только в форме.
  • Чтение реквизитов ссылки на клиенте.

Что спросят на собесе

  • Порядок событий при открытии и записи формы.
  • Чем реквизит формы отличается от элемента?
  • Как вызвать метод модуля объекта из формы?
  • Как одна форма сообщает другой о событии?
  • Почему динамический список быстрый?

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.