Как автоматически установить значение Истина для флажка (булево) при открытии формы обработки?

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

При разработке инструментов в среде 1С:Предприятие 8.3 часто возникает задача сделать интерфейс максимально удобным для пользователя. Один из таких сценариев — автоматическое заполнение реквизитов значениями по умолчанию при открытии формы. Рассмотрим ситуацию, когда у нас есть обработка с булевским реквизитом (флажком), который должен принимать значение Истина сразу при запуске. Разберем по шагам все возможные способы реализации этой задачи, проанализируем причины отсутствия некоторых свойств в метаданных и выясним, какой подход является наиболее правильным с точки зрения архитектуры системы.

Способ 1. Установка значения в процедуре ПриСозданииНаСервере

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

Проанализируем программный код. Если реквизит является реквизитом формы (находится на вкладке "Реквизиты" в редакторе формы), обращение к нему происходит напрямую по имени. Если же реквизит является реквизитом объекта (самой обработки), обращение идет через основной реквизит формы — Объект.

Пример кода для установки значения:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Если реквизит принадлежит форме:
    МойРеквизитФормы = Истина;
    
    // Если реквизит принадлежит объекту обработки:
    Объект.ФлажокВыполнятьАвтоматически = Истина;
    
КонецПроцедуры

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

Способ 2. Использование модуля объекта и события ОбработкаЗаполнения

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

Разберем, как прописать это в модуле объекта:


Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
    
    // Устанавливаем значение для реквизита объекта
    ИспользоватьРежимОтладки = Истина;
    
КонецПроцедуры

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

Способ 3. Механизм сохранения данных в настройках

Бывают случаи, когда пользователю нужно, чтобы система "запоминала" его последний выбор. Если он один раз снял флажок, при следующем открытии он должен остаться снятым. Если установил — остаться установленным. В управляемых формах это реализуется без написания кода через свойства формы.

Рассмотрим по шагам, как настроить автоматическое сохранение:

  1. Откройте редактор формы и перейдите в Свойства формы (самый верхний элемент в дереве реквизитов).
  2. Найдите группу свойств Сохранение данных в настройках.
  3. Установите флажок в поле Автоматическое сохранение данных в настройках.
  4. В свойстве Сохранение данных в настройках нажмите на кнопку выбора и отметьте галочкой те реквизиты, значения которых платформа должна запоминать.

Важный нюанс: этот механизм часто путают с установкой значения по умолчанию "Истина". Если вы хотите, чтобы при первом запуске (когда настроек еще нет) там была Истина, вам все равно придется воспользоваться Способом 1, но с условием проверки на заполненность.

Почему в свойствах обработки нет "Значения заполнения"?

Многие разработчики, привыкшие работать со справочниками и документами, ищут в свойствах реквизитов обработки заветную галочку или поле Значение заполнения. Посмотрим на ситуацию глубже и проанализируем структуру метаданных 1С.

Свойство Значение заполнения (Value Filling) — это механизм платформы, предназначенный для объектов, которые записываются в базу данных. К ним относятся:

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

Итоги и рекомендации

Проанализировав все варианты, мы можем сделать следующие выводы:

1. Если вам нужно гарантированно установить Истина при каждом открытии формы — используйте ПриСозданииНаСервере. Это самый простой и понятный способ для любого разработчика.

2. Если реквизитов очень много (например, 50 флажков), можно использовать цикл в коде, чтобы не прописывать каждую строку вручную:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Пример обхода всех реквизитов объекта и установки Булево в Истина
    Для Каждого Реквизит Из Метаданные().Реквизиты Цикл
        Если Реквизит.Тип.СодержитТип(Тип("Булево")) Тогда
            Объект[Реквизит.Имя] = Истина;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

3. Не забывайте про Функциональные опции. Иногда значение флажка должно зависеть от глобальных настроек системы (например, "Вести учет по складам"). В этом случае программная установка может конфликтовать с логикой системы.

Таким образом, несмотря на отсутствие привычной "галочки" в свойствах метаданных, платформа 1С предоставляет гибкие инструменты для управления поведением формы через встроенный язык.

← На главную