Как сохранить значение переключателя на форме в 1С?

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

При разработке интерфейсов в 1С:Предприятии часто возникает задача: сделать так, чтобы выбранное пользователем значение переключателя (или любого другого элемента формы) сохранялось при закрытии и автоматически восстанавливалось при следующем открытии. По умолчанию реквизиты формы, не связанные с реквизитами объекта базы данных, существуют только в рамках текущего сеанса работы с этой формой. Как только пользователь закрывает форму, все несохраненные настройки сбрасываются.

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


Выясняем причину: почему значение переключателя не сохраняется?

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

  1. Реквизиты объекта (документа, справочника) — данные, которые физически записываются в таблицы базы данных СУБД при сохранении или проведении документа. Они будут доступны всегда и для всех пользователей, у которых есть права на чтение этого объекта.
  2. Реквизиты формы — это временные данные, которые нужны исключительно для функционирования экранной формы (например, флажки визуального оформления, вспомогательные переменные). Они создаются в оперативной памяти компьютера в момент открытия формы и полностью уничтожаются при её закрытии.

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


Способ 1. Перенос реключателя в реквизиты объекта (Простой способ)

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

Разберем по шагам, как это сделать:

  1. Откройте конфигуратор и найдите нужный документ.
  2. В дереве метаданных документа перейдите к ветке Реквизиты и добавьте новый реквизит (например, с именем РежимРаботы и типом Число).
  3. Откройте форму документа.
  4. В списке реквизитов формы (в правой части экрана) найдите добавленный реквизит объекта (он будет находиться внутри ветки Объект).
  5. Перетащите этот реквизит на форму или в свойствах элемента переключателя в поле ПутьКДанным укажите Объект.РежимРаботы.

Преимущества метода: Простота реализации. Платформа берет на себя всю работу по сохранению и чтению данных из базы данных при записи и открытии документа.

Недостатки метода: Если переключатель нужен только конкретному пользователю "для удобства" (например, переключение вида отображения таблицы), добавление его в реквизиты объекта нежелательно. Это приводит к необоснованному раздуванию таблиц базы данных и лишней записи в БД при каждом изменении интерфейсной настройки.


Способ 2. Автоматическое сохранение данных формы (Для управляемых форм)

Платформа 1С:Предприятие 8.3 предоставляет встроенный мощный механизм для сохранения интерфейсных настроек пользователей без изменения структуры базы данных и без написания кода. Данные сохраняются в системных таблицах настроек конкретного пользователя.

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

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

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


Способ 3. Программное управление сохранением через Хранилище настроек

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

Разберем пример программной реализации. Пусть у нас на управляемой форме есть реквизит формы РежимРаботы (тип Число), связанный с переключателем.

Пропишем код в модуле управляемой формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Пытаемся загрузить ранее сохраненное значение по ключу формы и ключу настройки
    СохраненноеЗначение = ХранилищеОбщихНастроек.Загрузить("МояФормаДокумента", "Переключатель_РежимРаботы");
    
    Если СохраненноеЗначение <> Неопределено Тогда
        РежимРаботы = СохраненноеЗначение;
    Иначе
        РежимРаботы = 0; // Значение по умолчанию, если форма открывается впервые
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Процедура СохранитьНастройкуНаСервере()
    
    // Записываем текущее значение реквизита формы в системное хранилище настроек
    ХранилищеОбщихНастроек.Сохранить("МояФормаДокумента", "Переключатель_РежимРаботы", РежимРаботы);
    
КонецПроцедуры

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    // Перед закрытием формы вызываем серверную процедуру для сохранения данных
    СохранитьНастройкуНаСервере();
    
КонецПроцедуры

Этот способ позволяет гибко управлять процессом сохранения. Вместо события ПередЗакрытием вы можете вызывать процедуру сохранения непосредственно при изменении значения переключателя в его обработчике события ПриИзменении.


Способ 4. Сохранение настроек в Обычных формах

Если вы работаете в режиме толстого клиента на обычных формах (в старых конфигурациях, таких как УПП 1.3 или УТ 10.3), механизмы работают немного иначе. Здесь также доступны два варианта:

Интерактивный вариант:

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

Программный вариант в обычных формах:

Для сохранения и восстановления настроек используются глобальные методы платформы СохранитьЗначение() и ВосстановитьЗначение(). Код пишется следующим образом:


Процедура ПриОткрытии()
    
    // Восстанавливаем значение переключателя при открытии формы
    РежимРаботы = ВосстановитьЗначение("Настройка_РежимРаботы");
    Если РежимРаботы = Неопределено Тогда
        РежимРаботы = 0; // Значение по умолчанию
    КонецЕсли;
    
КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    
    // Сохраняем значение перед закрытием формы
    СохранитьЗначение("Настройка_РежимРаботы", РежимРаботы);
    
КонецПроцедуры

Важный нюанс при настройке переключателей

Часто начинающие разработчики сталкиваются с тем, что переключатель на форме неактивен, не отображается или не позволяет выбирать элементы. Помните о следующих правилах настройки элемента управления Переключатель в 1С:

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

← На главную