Как определяются значения Авто в свойствах элементов формы 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке управляемых форм в системе 1С:Предприятие 8 программисты часто сталкиваются с тем, что многие свойства элементов (будь то поля ввода, кнопки или списки) по умолчанию установлены в значение Авто. Это вызывает резонный вопрос: где именно определяется конечный результат этого «автопилота»? Является ли это жестко зашитой логикой движка платформы, или же мы можем влиять на это поведение через настройки конфигурации? Разберем эту тему подробно, проанализируем механизмы наследования и выясним, как платформа принимает решения за нас.

Природа значения Авто в управляемом интерфейсе

Важно понимать, что значение Авто — это не константа. Это динамический алгоритм вычисления, который запускается платформой в момент инициализации формы. Логика «Авто» опирается на иерархию приоритетов. Рассмотрим ситуацию: если мы не указываем конкретное значение, платформа начинает опрашивать цепочку связанных объектов, начиная от типа данных реквизита и заканчивая общими настройками конфигурации и режима совместимости.

Рассмотрим по шагам основные источники, из которых Авто черпает свои реальные значения.

Наследование из свойств метаданных

Самый распространенный случай — это когда элемент формы «смотрит» на настройки соответствующего ему реквизита в дереве метаданных. Давайте проанализируем пример с выбором групп и элементов.

Если у нас есть поле ввода, связанное с реквизитом типа СправочникСсылка, и в свойстве ВыборГруппИЭлементов стоит Авто, платформа обратится к самому объекту метаданных (справочнику) или к конкретному реквизиту объекта (если это поле связано с реквизитом другого объекта). Настройка находится здесь:

  1. Откроем дерево конфигурации.
  2. Найдем нужный реквизит объекта.
  3. Перейдем в категорию свойств Использование.
  4. Найдем пункт Выбор групп и элементов.

Если вы измените значение там (например, с Элементы на Группы и элементы), то во всех формах, где у соответствующих полей ввода стоит Авто, поведение изменится автоматически. Это позволяет централизованно управлять логикой интерфейса, не заходя в каждую форму.

Зависимость от других свойств (взаимосвязанные настройки)

Иногда Авто — это логическое следствие другой настройки в этой же форме или реквизите. Проанализируем классический пример со свойством АвтоотметкаНезаполненных. Если мы установим у реквизита свойство ПроверкаЗаполнения в значение ВыдаватьОшибку, то платформа интерпретирует Авто в свойстве АвтоотметкаНезаполненных как Да. Поле визуально подчеркнется красным пунктиром.

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

Влияние режима совместимости и версии платформы

Некоторые значения Авто действительно жестко прописаны в ядре платформы, но они могут меняться от версии к версии. Выясним, как на это влияет режим совместимости конфигурации.

Рассмотрим свойство ПоложениеСтрокиПоиска в динамических списках:

Таким образом, просто обновив режим совместимости конфигурации, вы можете увидеть, как «Авто» во многих местах изменило свое поведение в соответствии с новыми стандартами юзабилити от 1С.

Динамическое вычисление размеров и размещения

Когда мы устанавливаем Ширина или Высота в Авто, мы доверяем платформе расчет геометрии элемента. Разберем, как этот расчет происходит:

  1. Анализ типа данных: Если это Число(10, 2), платформа зарезервирует место под 10 знаков и разделитель. Если это Строка(50) — под среднюю длину строки.
  2. Контекст группы: Платформа проверяет свойства родительской группы. Если у группы стоит Группировка - Горизонтальная, элементы будут «тесниться» исходя из общей доступной ширины формы.
  3. Растягивание: Если у элемента по горизонтали стоит Авто, он будет растягиваться только в том случае, если в его контейнере (группе или самой форме) разрешено растягивание и есть свободное место, которое не занято другими элементами с фиксированным размером.

Функциональные опции и видимость

Значение Авто для свойств Видимость и Доступность напрямую связано с механизмом функциональных опций (ФО). Это один из самых мощных инструментов 1С. Если поле связано с данными, на которые влияет выключенная функциональная опция, то при значении Авто элемент просто исчезнет с формы, даже если в конфигураторе он нарисован как видимый.

Проанализируем ситуацию программно. Если нам нужно проверить, почему элемент скрыт, мы можем использовать следующий подход в коде формы:


// Пример проверки видимости элемента, если в конфигураторе стоит "Авто"
ЭлементПоле = Элементы.СуммаДокумента;
// Значение Видимость будет Ложь, если функциональная опция "ИспользоватьВалютныйУчет" отключена
Сообщить("Видимость элемента: " + ЭлементПоле.Видимость);

Специальные случаи: Команды и Кнопки

Для кнопок значение Авто часто определяет заголовок и действие по умолчанию. Посмотрим на стандартные команды (например, ЗаписатьИЗакрыть). Если у кнопки, связанной с этой командой, заголовок стоит в Авто, платформа подставит локализованный текст в зависимости от языка интерфейса пользователя («Save and close» для английского, «Записать и закрыть» для русского).

Свойство КнопкаПоУмолчанию в значении Авто работает по принципу «первой подходящей». Платформа назначит кнопку главной (выделит ее жирным и свяжет с клавишами Ctrl+Enter), если в форме больше нет других кнопок, где это свойство явно установлено в Да.

Резюме

Подводя итог нашему анализу, можно сказать, что единого «реестра» всех значений Авто не существует. Это распределенная логика, которая управляется тремя китами:

  1. Метаданные: Свойства реквизитов и объектов в дереве конфигурации.
  2. Системные механизмы: Режим совместимости и логика конкретной версии платформы.
  3. Контекст: Текущее состояние формы, функциональные опции и типы данных.

Совет: Если вы хотите, чтобы интерфейс вашей конфигурации выглядел современно и единообразно, старайтесь оставлять значения Авто везде, где это возможно. Это позволит платформе автоматически адаптировать вашу форму под новые интерфейсные решения (например, при переходе с «Такси» на будущие варианты интерфейса) без необходимости переделывать каждую форму вручную.

← На главную