В процессе разработки на платформе 1С:Предприятие 7.7 часто возникает необходимость сохранить выбор пользователя (например, состояние переключателей, флажков или текстовых полей) так, чтобы при следующем запуске обработки эти данные подставились автоматически. Хотя в платформе предусмотрен стандартный механизм сохранения настроек через системную кнопку, пользователи нередко забывают ее нажимать или не знают о ее существовании. В таких случаях программисту необходимо реализовать этот функционал принудительно.
В данной статье мы подробно разберем, какими штатными средствами можно управлять сохранением настроек, проанализируем различия между записью в реестр и во внешние файлы, а также рассмотрим специфику работы с переключателями.
Это самый распространенный способ хранения небольших объемов данных. Платформа записывает эти значения в системный реестр Windows, привязывая их к конкретному пользователю и базе данных. Рассмотрим, как правильно использовать эти функции в коде формы.
Проанализируем ситуацию: нам нужно сохранить значение переменной ВерДР (например, номер выбранного варианта в группе переключателей). Для этого мы будем использовать предопределенные процедуры ПриЗакрытии и ПриОткрытии.
Шаг 1. Сохранение данных при выходе из формы
В модуле формы находим или создаем процедуру ПриЗакрытии. Именно здесь мы даем команду системе запомнить текущее состояние реквизита.
Процедура ПриЗакрытии()
// Сохраняем значение переменной под уникальным строковым идентификатором
СохранитьЗначение("Настройка_ВариантДР", ВерДР);
КонецПроцедуры
Шаг 2. Восстановление данных при запуске
Теперь нам нужно извлечь данные. Важно помнить, что функция ВосстановитьЗначение возвращает само значение, поэтому его нужно присвоить переменной.
Процедура ПриОткрытии()
// Извлекаем сохраненное значение по тому же идентификатору
ВерДР = ВосстановитьЗначение("Настройка_ВариантДР");
// Если значение ранее не сохранялось, можно установить значение по умолчанию
Если ПустоеЗначение(ВерДР) = 1 Тогда
ВерДР = 1; // Установка первого положения переключателя
КонецЕсли;
КонецПроцедуры
Важный нюанс: Идентификаторы в функциях СохранитьЗначение являются глобальными для пользователя в рамках базы. Если вы назовете идентификатор просто Дата, есть риск, что другая обработка с таким же идентификатором перезапишет ваши данные. Всегда используйте уникальные префиксы, например: "МояОбработка_ИмяРеквизита".
Если вам необходимо сохранять сложные структуры данных (например, СписокЗначений или ТаблицаЗначений), использование реестра может быть неэффективным или приводить к ошибкам. В этом случае на помощь приходят функции ЗначениеВФайл и ЗначениеИзФайла.
Рассмотрим пример сохранения настроек в файл формата .dat или .txt в каталог пользователя. Это гарантирует, что настройки не пропадут даже при очистке реестра или переустановке операционной системы (если каталог базы находится на сервере).
Пример записи в файл:
ПутьКФайлу = КаталогПользователя() + "my_settings.dat";
ЗначениеВФайл(ПутьКФайлу, ВерДР);
Пример чтения из файла:
ПутьКФайлу = КаталогПользователя() + "my_settings.dat";
Если ФС.СуществуетФайл(ПутьКФайлу) = 1 Тогда
ЗначениеИзФайла(ПутьКФайлу, ВерДР);
КонецЕсли;
Этот метод считается более надежным для крупных конфигураций и терминальных серверов, так как файлы настроек хранятся непосредственно в папке пользователя внутри информационной базы.
Программисты часто сталкиваются с тем, что переключатели не восстанавливают свое визуальное состояние, хотя значение переменной считано верно. Выясним причину этого поведения в 1С 7.7.
Переключатели на форме работают как группа. Значением группы является числовой индекс (1, 2, 3...), который связан с первым элементом группы (у которого в свойствах стоит признак "Первый в группе").
Идентификатор (например, РежимРаботы).ВосстановитьЗначение присваивайте результат именно этому идентификатору.Мало кто знает, что для объектов типа "Отчет" или "Обработка" существуют встроенные методы, которые имитируют работу стандартной кнопки "Сохранить настройки", но вызываются программно. Это методы СохранитьЗначения() и ВосстановитьЗначения() (обратите внимание на множественное число в названии).
При вызове СохранитьЗначения() система автоматически берет все реквизиты диалога, у которых заполнен Идентификатор, и сохраняет их в специальный файл .7s в каталоге пользователя. Это избавляет от необходимости прописывать каждую переменную вручную.
Как это работает:
ПриЗакрытии вызовите команду СохранитьЗначения();.ПриОткрытии вызовите ВосстановитьЗначения();.Это самый "чистый" способ с точки зрения архитектуры 1С 7.7, так как он использует родной механизм платформы, но делает его автоматическим для пользователя.
Мы рассмотрели три основных подхода к автоматизации сохранения настроек:
Выбор конкретного метода зависит от сложности вашей задачи, однако для большинства пользовательских обработок связка ПриОткрытии/ПриЗакрытии с использованием реестра является стандартом де-факто.