§ 3.4. Дополнительные реквизиты формы: данные помимо записи

С основным реквизитом разобрались: в нём данные записи. Данные, которых в записи нет и быть не должно, держат в самой форме — рядом с «Объектом», отдельными строками в списке её реквизитов. «Объект» форма получила от конструктора, а эти строки заводит разработчик, и принадлежат они только форме. Разберём, когда они нужны, как их добавить и почему заведённый реквизит ещё ничего не меняет на экране.

1. Рядом с «Объектом», а не внутри

Список реквизитов формы делится на две части: основной реквизит с данными записи и всё остальное.

реквизиты формы
├── Объект                  ← запись
│   ├── Артикул
│   └── …
└── ПоказыватьПодробности   ← форма

Граница здесь та же, что между реквизитом объекта и реквизитом формы: всё внутри «Объекта» — данные записи, они приходят из базы и уходят в неё при записи; всё рядом с ним — данные самой формы, места в записи у них нет. Путь к дополнительному реквизиту короткий — одно имя, без «Объект.».

2. Три повода завести реквизит формы

Поводов немного, и почти все сводятся к трём.

поводпример на форме товара
вспомогательное значение для расчётаостаток на складах, посчитанный при открытии
временное значение вводастрока, по которой ищут в табличной части
переключатель режимафлажок «показывать подробности»

Проверить себя помогает один вопрос: понадобится ли это значение завтра другому человеку или отчёту? Если да — место ему в записи, то есть в реквизитах объекта. Если нет — оно принадлежит этому окну и этому разговору, и завести его нужно в форме.

Реквизит формы — для того, что нужно разговору, а не записи. Завтрашнему собеседнику оно не достанется.

3. Как заводят

Реквизит формы добавляют в редакторе реквизитов: новая строка, у неё имя, заголовок и тип.

свойствочто задаётдля флажка
имякак к реквизиту обращаютсяПоказыватьПодробности
заголовокподпись, которую увидит пользовательПоказывать подробности
типкакие значения можно положитьБулево

Тип здесь выбирают так же, как у реквизита объекта: строка, число, дата, булево, ссылка на справочник. Какие ещё типы бывают у реквизитов формы и зачем, разберём в следующем параграфе.

4. Завели — а на экране ничего

Здесь снова работает правило, с которого начиналась эта глава: данные и раскладка — разные части формы. Реквизит формы — данные. Чтобы пользователь его увидел, нужен элемент.

реквизит       элемент      экран
Показывать… ──► флажок ──► [✓] Показывать
(данные)        (раскладка)    подробности

Жест тот же, что и для реквизитов объекта: перетащить строку из реквизитов в элементы. Редактор сам подберёт вид элемента по типу: для булева это поле, показанное флажком. В структуре элементов оно так и будет называться полем — искать в чужой форме элемент с названием «флажок» бесполезно.

5. Флажок сам ничего не прячет

Честная оговорка. Флажок «показывать подробности» появится на форме, его можно ставить и снимать — и ничего не будет происходить. Реквизит хранит значение, но не знает, что с ним делать: чтобы флажок прятал и показывал поля, нужен обработчик, который на изменение отзовётся.

что даёт реквизит формычего не даёт
место для значенияреакции на изменение
поле или флажок на экранеповедения, завязанного на значение

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

6. Два свойства со схожими названиями

Здесь легко перепутать, потому что оба свойства говорят о сохранении. Ключ к ним короткий: одно — про вопрос при закрытии, другое — про память между открытиями.

У реквизита формы есть свойство «Сохраняемые данные», и название сбивает с толку. Оно не про память. Документация называет такой реквизит «сохраняемым при записи»: его изменение считается изменением данных формы — форма помечает себя изменённой и при закрытии спросит, сохранить ли. У формы же есть своё свойство — сохранение данных в настройках: с ним значение переживёт закрытие окна у этого пользователя.

свойствоо чём
у реквизита: «Сохраняемые данные»вопрос при закрытии: изменение считается правкой
у формы: сохранение данных в настройкахпамять между открытиями у этого пользователя

Для флажка просмотра первое свойство вредно: переключил режим — и форма спрашивает, сохранить ли изменения, хотя в записи ничего не менялось. А если хочется, чтобы флажок помнил выбор пользователя, нужно второе.

7. В Конфигураторе и в Предприятии

  1. Откройте форму элемента «Товаров» и добавьте реквизит формы «ПоказыватьПодробности» с типом Булево.

  2. Убедитесь, что он появился рядом с «Объектом», а не внутри.

Здесь будет снимок экранасписок реквизитов формы «Товаров»: «Объект» и «ПоказыватьПодробности» рядом
  1. Перетащите его в элементы и посмотрите на предпросмотр: там появился флажок.

  2. Обновите конфигурацию базы данных, откройте в Предприятии карточку товара, поставьте флажок и закройте карточку.

  3. Откройте её снова: флажок снят. Значение жило, пока было открыто окно.

  4. Вернитесь в Конфигуратор и включите у формы сохранение данных в настройках, отметив «ПоказыватьПодробности» как сохраняемый в них. Повторите шаги 4 и 5: теперь флажок остаётся таким, каким вы его оставили.

Главное в одном абзаце

Данные, которых в записи нет и быть не должно, держат в самой форме — отдельными реквизитами рядом с «Объектом», не внутри него; путь к ним короткий, одно имя. Поводов три: вспомогательное значение для расчёта, временное значение ввода и переключатель режима, а проверяется выбор одним вопросом — понадобится ли значение завтра другому человеку, открывшему ту же запись. Заводят реквизит в редакторе реквизитов — имя, заголовок, тип, — но на экране он появится только тогда, когда из него сделают элемент: данные и раскладка по-прежнему живут врозь. Сам реквизит лишь хранит значение: чтобы флажок что-то прятал, нужен обработчик. И не спутать два свойства: «Сохраняемые данные» у реквизита превращают изменение в правку, о которой спросят при закрытии, а сохранение данных в настройках у формы даёт значению пережить закрытие окна.


Флажок получил тип Булево, и выбор был очевиден. Но реквизиту формы можно дать и такой тип, какого у реквизита объекта не бывает. Что это за типы и зачем форме таблица, которой нет в базе?

Контрольные вопросы

  1. Где в списке реквизитов формы находятся дополнительные реквизиты и чем их путь отличается от пути к реквизиту объекта?
  2. Назовите три повода завести реквизит формы.
  3. По какому вопросу решают, куда поместить значение — в запись или в форму?
  4. Почему только что заведённый реквизит формы не виден на экране?
  5. Что даёт флажку реквизит формы и чего не даёт?
  6. Чем «Сохраняемые данные» у реквизита отличаются от сохранения данных в настройках у формы?
  7. Почему флажок в Предприятии оказался снят после повторного открытия?

Упражнения

По образцу. Добавьте форме элемента «Контрагентов» реквизит «ПоказыватьКонтакты» типа Булево и выведите его флажком.

Своё: запись или форма. Для каждого значения решите, где его место: «дата последней сверки с контрагентом», «строка поиска в списке товаров», «количество строк в поступлении», «примечание к поступлению». Объясните каждое решение одним предложением.

Ловушка: «сделай, чтобы флажок работал». Заказчик увидел флажок «показывать подробности» и говорит: «вы его добавили, а он ничего не делает — это ошибка». Что на самом деле сделано, чего не сделано и почему это не ошибка?

Обратный ход. Пользователь жалуется: переключает в карточке режим просмотра — и при закрытии каждый раз вопрос о сохранении, хотя он ничего не менял. Какое свойство и у какого реквизита стоит проверить?

На чтение. В форме поступления рядом с «Объектом» лежат «Отбор» типа Строка и «ИтогоВес» типа Число. Что каждый из них, скорее всего, делает и понадобится ли их значение завтра другому пользователю?

Ответы — в конце части.