Как реализовать сохранение данных и настроек управляемой формы в 1С:Предприятие 8.3?

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

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

Стандартный механизм сохранения данных через свойства формы

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

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

  1. СохранениеДанныхВНастройках — этот флаг включает саму возможность сохранения. Если он установлен, форма начинает поддерживать работу с хранилищем настроек.
  2. АвтоматическоеСохранениеДанныхВНастройках — указывает системе, что данные нужно сохранить автоматически при закрытии формы и восстановить их при следующем открытии. Если этот флаг не установлен, пользователю придется вручную выбирать команды «Сохранить параметры» или «Восстановить параметры» в меню «Еще».
  3. ХранилищеНастроек — здесь можно указать конкретный объект метаданных (Хранилище настроек), где будут лежать данные. Если оставить поле пустым, будет использоваться системное стандартное хранилище.

Однако просто включить эти свойства недостаточно. Выясним, как указать системе, какие именно поля мы хотим запоминать. Перейдем на закладку Реквизиты в редакторе формы. В списке реквизитов есть колонка Сохранение. Необходимо проставить отметки (галочки) напротив тех реквизитов, значения которых должны «выживать» после закрытия формы.

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

Программное управление сохранением настроек

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

Событие ПриСохраненииДанныхВНастройкахНаСервере(Настройки) вызывается в момент записи данных в хранилище. В параметр Настройки (тип Соответствие) система уже поместила значения всех реквизитов, у которых стоит галочка «Сохранение». Здесь мы можем программно добавить свои данные.

Событие ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) срабатывает при открытии формы. Мы можем извлечь из параметра Настройки наши специфические значения и распределить их по реквизитам формы.

Как сохранять табличные части и таблицы значений

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

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


&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
    // Выгружаем таблицу в массив или структуру для сохранения
    // В данном примере сохраняем через промежуточное соответствие
    Настройки.Вставить("ДанныеМоейТаблицы", Объект.Товары.Выгрузить());
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
    // Проверяем наличие ключа в настройках
    ЗначениеТаблицы = Настройки.Получить("ДанныеМоейТаблицы");
    Если ТипЗнч(ЗначениеТаблицы) = Тип("ТаблицаЗначений") Тогда
        Объект.Товары.Загрузить(ЗначениеТаблицы);
    КонецЕсли;
КонецПроцедуры

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


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

Физическое хранение и производительность

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

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

Особенности работы с Ключом объекта и Ключом настроек

При использовании метода ХранилищеНастроекДанныхФорм.Сохранить() важно правильно выбрать параметры:

Типичные ошибки и методы их решения

Рассмотрим ситуацию, когда настройки «перестали сохраняться». Выделим основные причины:

  1. Изменение структуры метаданных: Если вы удалили реквизит или изменили его тип, а в хранилище осталась старая запись, платформа может выдать ошибку при загрузке. В этом случае пользователю необходимо сбросить настройки через меню Еще — Установить стандартные настройки.
  2. Кэширование: Иногда изменения в программном коде сохранения не подхватываются из-за локального кэша. Помогает очистка временных файлов пользователя.
  3. Порядок вызова событий: Помните, что ПриЗагрузкеДанныхИзНастроекНаСервере вызывается после ПриСозданииНаСервере. Если вы в коде создания жестко прописываете значения реквизитов, механизм сохранения их перезапишет.

Подведем итог: для простых форм мы используем стандартные свойства СохранениеДанныхВНастройках и галочки в реквизитах. Для работы с таблицами и сложной логикой — переходим к обработчикам ПриСохранении... и ПриЗагрузке..., используя ХранилищеНастроекДанныхФорм. Такой комбинированный подход сделает работу пользователя максимально комфортной и быстрой.

← На главную