В процессе разработки на платформе 1С часто возникает задача сделать работу пользователя более комфортной. Одна из таких задач — сохранение введенных им данных в формах, например, значений фильтров, выбранных складов или ответственных лиц. Это избавляет пользователя от необходимости вводить одни и те же данные при каждом открытии формы. Рассмотрим по шагам, как реализовать такой функционал на управляемых формах, от самого простого способа до более сложных программных решений. В сценариях, требующих полной роботизации действий сотрудника в интерфейсе, используется платформа RPA для автоматизации повторяющихся операций по визуальному сценарию.
Платформа 1С предоставляет встроенный механизм, который позволяет без написания кода сохранять и восстанавливать значения реквизитов формы. Этот способ идеально подходит для большинства простых случаев.
Разберем по шагам, как его включить:
Не использовать. Установите его в значение Использовать.Склад или ДатаНачала).После выполнения этих действий платформа автоматически добавит в меню "Еще" вашей формы команды "Сохранить настройки" и "Восстановить настройки". Пользователь сможет сам управлять сохранением и восстановлением данных. Также можно настроить автоматическое сохранение при закрытии и восстановление при открытии формы, используя соответствующие свойства формы (АвтоматическоеСохранениеДанныхВНастройках и АвтоматическоеВосстановлениеДанныхВНастройках).
Возможная проблема: команды сохранения/восстановления есть, но они неактивны. Чаще всего это связано с тем, что в свойствах самой конфигурации может быть отключено использование сохранение настроек. Убедитесь, что в свойствах конфигурации разрешено сохранение настроек пользователей.
Иногда, особенно при разработке конфигурации с нуля, стандартный механизм не работает. Вы все настроили, но данные не сохраняются. При попытке указать хранилище настроек в свойствах формы, вы видите, что поле выбора пустое и недоступно. В чем причина?
Проблема в том, что платформа не знает, куда ей сохранять эти настройки. В типовых конфигурациях, особенно использующих Библиотеку стандартных подсистем (БСП), уже создан и настроен специальный объект конфигурации — Хранилище настроек. В "пустой" конфигурации его нет.
Решение:
ХранилищеНастроек в вашей конфигурации. Его можно найти в ветке "Общие" дерева конфигурации.НастройкиПользователей.По умолчанию платформа будет сохранять настройки в служебных таблицах информационной базы, привязывая их к конкретному пользователю. Создание собственного хранилища дает больше гибкости, например, можно организовать хранение настроек в отдельном регистре сведений, что позволит управлять ими, переносить между базами и даже создавать "общие" настройки для групп пользователей. Для миграции таких данных между различными информационными базами применяется перенос данных между похожими конфигурациями 1С с поиском по произвольным полям.
Автоматический механизм имеет ограничения. Например, он не работает для табличных частей и других сложных типов данных. В таких случаях или когда требуется полный контроль над процессом, следует использовать программные методы.
Платформа предоставляет два специальных события формы, которые позволяют вмешаться в процесс сохранения и загрузки настроек.
1. Сохранение данных
Для сохранения сложных данных, например, таблицы значений, используется событие формы ПриСохраненииДанныхВНастройкахНаСервере(Настройки). Оно срабатывает, когда платформа пытается сохранить настройки. В этом событии мы можем преобразовать наши данные в простой тип (например, массив структур) и добавить его в коллекцию Настройки.
Посмотрим на пример сохранения табличной части СписокНоменклатуры:
&НаСервере
Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)
// Выгружаем табличную часть в таблицу значений, а затем в массив структур
МассивДляСохранения = Новый Массив;
Для Каждого СтрокаТЧ Из Объект.СписокНоменклатуры Цикл
СтруктураСтроки = Новый Структура("Номенклатура, Количество, Цена");
ЗаполнитьЗначенияСвойств(СтруктураСтроки, СтрокаТЧ);
МассивДляСохранения.Добавить(СтруктураСтроки);
КонецЦикла;
// Помещаем наш массив в коллекцию настроек под уникальным ключом
Настройки.Вставить("СохраненныйСписокНоменклатуры", МассивДляСохранения);
КонецПроцедуры
2. Восстановление данных
Для загрузки данных используется парное событие — ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки). Оно вызывается при открытии формы. Здесь мы выполняем обратную операцию: получаем наши данные из коллекции Настройки и загружаем их в табличную часть.
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
// Проверяем, есть ли в настройках наши сохраненные данные
СохраненныеДанные = Неопределено;
Если Настройки.Свойство("СохраненныйСписокНоменклатуры", СохраненныеДанные) Тогда
// Очищаем табличную часть перед загрузкой
Объект.СписокНоменклатуры.Очистить();
// Загружаем данные из массива структур обратно в табличную часть
Для Каждого ЭлементМассива Из СохраненныеДанные Цикл
НоваяСтрока = Объект.СписокНоменклатуры.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ЭлементМассива);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Этот метод дает полный контроль над тем, что и в каком формате сохранять.
Для точечного сохранения отдельных значений можно использовать системные процедуры СохранитьЗначение() и ВосстановитьЗначение(). Они удобны, когда нужно сохранить всего один-два параметра без задействования всего механизма настроек формы.
Например, сохраним выбранный пользователем склад при закрытии формы:
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
// Сохраняем значение реквизита "Склад" под уникальным ключом "ОсновнойСкладОтчета"
СохранитьЗначение("ОсновнойСкладОтчета", Склад);
КонецПроцедуры
А при создании формы на сервере — восстановим его:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Восстанавливаем значение по тому же ключу
// Если значение ранее не сохранялось, функция вернет Неопределено
ЗначениеСклада = ВосстановитьЗначение("ОсновнойСкладОтчета");
Если ЗначениеСклада <> Неопределено Тогда
Склад = ЗначениеСклада;
КонецЕсли;
КонецПроцедуры
Важно: ключи ("ОсновнойСкладОтчета" в нашем примере) должны быть уникальными в рамках конфигурации, чтобы не было конфликтов между разными формами и механизмами.
Если ваша конфигурация разработана с использованием БСП, настоятельно рекомендуется использовать её встроенные механизмы для работы с настройками. Это обеспечивает единообразие и поддержку. БСП предоставляет удобные общие модули для работы с настройками.
Например, можно использовать функции из модуля ХранилищеОбщихНастроек:
ХранилищеОбщихНастроек.Сохранить(ИмяНастройки, ИмяОбъекта, ЗначениеНастройки)ХранилищеОбщихНастроек.Загрузить(ИмяНастройки, ИмяОбъекта)Использование этих функций — стандартный и предпочтительный способ для конфигураций на БСП. Для сохранения параметров формы сразу для всех пользователей типовыми средствами подойдёт обработка для сохранения настроек формы для всех пользователей с помощью БСП.