Как правильно реализовать хранение реквизитов на общей форме в 1С?

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

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

Вариант 1: Использование регистра сведений для хранения данных

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

Для реализации этой задачи выполним следующие шаги:

  1. Создадим непериодический независимый регистр сведений.
  2. Добавим необходимые ресурсы: реквизиты для хранения строки (тип Строка) и чисел (тип Число).
  3. Если вы планируете использовать этот регистр для разных форм, добавьте измерение ИдентификаторНастройки (тип Строка или УникальныйИдентификатор), чтобы разделить данные разных функциональных блоков.

Преимущества этого подхода:

Пример обращения к данным через Запрос:


ВЫБРАТЬ
    НастройкиФормы.СтроковоеЗначение,
    НастройкиФормы.ЧисловоеЗначение1
ИЗ
    РегистрСведений.НастройкиОбщихФорм КАК НастройкиФормы
ГДЕ
    НастройкиФормы.Идентификатор = &Идентификатор

Вариант 2: Использование Хранилища значений в константе

Если структура сохраняемых данных часто меняется или они представляют собой сложный массив, который не требует сложной аналитики, используйте ХранилищеЗначения. Этот объект позволяет «упаковать» практически любую структуру данных 1С (массивы, структуры, соответствия) и сохранить её целиком.

Как реализовать этот метод:

Создайте Константу с типом значения ХранилищеЗначения. В коде 1С вы будете считывать данные из этой константы, извлекать из неё структуру и записывать обратно после изменений.

Пример сохранения массива данных:


ДанныеДляСохранения = Новый Структура;
ДанныеДляСохранения.Вставить("ТекстовоеПоле", Элементы.Строка300.Значение);
ДанныеДляСохранения.Вставить("Числа", МассивЧисел);

Константы.НастройкиФормы.Установить(Новый ХранилищеЗначения(ДанныеДляСохранения));

Особенности использования хранилища:

Дополнительные механизмы: Хранилища настроек пользователя

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

Обеспечение безопасности данных

Поскольку в вопросе звучало требование доступа «по паролю», необходимо помнить о безопасности. Ни РегистрСведений, ни ХранилищеЗначения не шифруют данные сами по себе. Если информация является конфиденциальной, используйте объект ШифрованиеДанных (предоставляемый библиотекой Криптография или встроенными средствами платформы).

Порядок действий для защиты:

  1. Перед записью в РегистрСведений или ХранилищеЗначения преобразуйте данные в строку или двоичные данные.
  2. Примените алгоритм шифрования с использованием пароля пользователя.
  3. Сохраните зашифрованные данные.
  4. При чтении — выполните обратную операцию расшифровки в коде 1С, проверяя права доступа пользователя.

Таким образом, мы видим, что выбор зависит от поставленной задачи: если нужна отчетность — выбираем регистр сведений, если нужно гибкое хранение произвольных структур — выбираем хранилище значений.

← На главную