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

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

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

Способ 1: Автоматическое сохранение настроек формы

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

Разберем по шагам, как его включить:

  1. Откройте конфигуратор и найдите нужную форму (например, форму обработки или документа).
  2. В палитре свойств формы найдите свойство СохранениеДанныхВНастройках. По умолчанию его значение — Не использовать. Установите его в значение Использовать.
  3. Теперь необходимо указать, какие именно реквизиты формы мы хотим сохранять. Перейдите на вкладку "Реквизиты" в дереве элементов формы.
  4. Выберите реквизит, значение которого нужно сохранять (например, Склад или ДатаНачала).
  5. В палитре свойств выбранного реквизита найдите свойство Сохранять в настройках и установите флажок.
  6. Повторите шаг 5 для всех реквизитов, значения которых должны запоминаться для пользователя.

После выполнения этих действий платформа автоматически добавит в меню "Еще" вашей формы команды "Сохранить настройки" и "Восстановить настройки". Пользователь сможет сам управлять сохранением и восстановлением данных. Также можно настроить автоматическое сохранение при закрытии и восстановление при открытии формы, используя соответствующие свойства формы (АвтоматическоеСохранениеДанныхВНастройках и АвтоматическоеВосстановлениеДанныхВНастройках).

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

Что делать, если настройки не сохраняются, а хранилище выбрать нельзя?

Иногда, особенно при разработке конфигурации с нуля, стандартный механизм не работает. Вы все настроили, но данные не сохраняются. При попытке указать хранилище настроек в свойствах формы, вы видите, что поле выбора пустое и недоступно. В чем причина?

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

Решение:

  1. Вам необходимо создать объект ХранилищеНастроек в вашей конфигурации. Его можно найти в ветке "Общие" дерева конфигурации.
  2. Дайте ему осмысленное имя, например, НастройкиПользователей.
  3. После создания этого объекта, вернитесь в свойства формы. Теперь в свойстве Хранилище данных настроек вы сможете выбрать созданное вами хранилище.

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

Способ 2: Программное управление сохранением и восстановлением

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

Использование событий формы

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

1. Сохранение данных

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

Посмотрим на пример сохранения табличной части СписокНоменклатуры:


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

2. Восстановление данных

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


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

Этот метод дает полный контроль над тем, что и в каком формате сохранять.

Прямое сохранение и восстановление значений

Для точечного сохранения отдельных значений можно использовать системные процедуры СохранитьЗначение() и ВосстановитьЗначение(). Они удобны, когда нужно сохранить всего один-два параметра без задействования всего механизма настроек формы.

Например, сохраним выбранный пользователем склад при закрытии формы:


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

А при создании формы на сервере — восстановим его:


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

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

Использование возможностей Библиотеки стандартных подсистем (БСП)

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

Например, можно использовать функции из модуля ХранилищеОбщихНастроек:

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

← На главную