Сохранить независимый снимок таблицы в ХранилищеЗначения

Учебные задачи

Хранилище сериализует значение. Изменение исходной таблицы или одной полученной копии не должно менять сохранённый снимок.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Выполняйте на сервере учебной базы: ХранилищеЗначения и ТаблицаЗначений здесь не создаются на тонком клиенте.

  2. Снимок существует только в памяти; нет реквизита объекта базы, в который он записывается.

  3. Количество хранится с явными квалификаторами: 1 разряд, 0 дробных, неотрицательный знак, диапазон 0–9. Значения 3, 5 и 9 сохраняются точно; эта учебная граница не предназначена для произвольных рабочих количеств.


Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
Таблица.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(1, 0, ДопустимыйЗнак.Неотрицательный)));
СтрокаТовара = Таблица.Добавить();
СтрокаТовара.Название = "Книга";
СтрокаТовара.Количество = 3;
Сжатие = Новый СжатиеДанных(6);
Снимок = Новый ХранилищеЗначения(Таблица, Сжатие);
Таблица[0].Количество = 5;
ПерваяКопия = Снимок.Получить();
Если ТипЗнч(ПерваяКопия) <> Тип("ТаблицаЗначений") Тогда
    ВызватьИсключение "Из хранилища ожидалась таблица значений";
КонецЕсли;
Сообщить(ПерваяКопия[0].Количество = 3);
Сообщить(Таблица[0].Количество = 5);
ПерваяКопия[0].Количество = 9;
ВтораяКопия = Снимок.Получить();
Сообщить(ВтораяКопия[0].Количество = 3);
Сообщить(ПерваяКопия[0].Количество = 9);
Сообщить(ВтораяКопия[0].Название = "Книга");

Разбор по шагам

  1. Создаём таблицу с одной строкой и помещаем её значение в ХранилищеЗначения со степенью сжатия 6.

  2. После помещения меняем исходное количество с 3 на 5 и получаем значение обратно: в снимке исходное 3.

  3. Меняем первую восстановленную копию на 9 и получаем вторую копию из того же снимка: она снова содержит 3.

  4. СжатиеДанных задаёт степень Deflation, а не формат ZIP-файла или защиту содержимого.

Как проверить результат

  1. Все пять сравнений дают Истина: снимок 3, исходная таблица 5, первая изменённая копия 9, новая копия 3.

  2. Название во второй копии осталось Книга.

  3. Повторный запуск не создаёт строк в справочниках или файлов на диске.

Ожидаемый результат

Получен независимый сериализованный снимок одного допустимого значения в памяти.

На что обратить внимание

  1. ХранилищеЗначения и временное хранилище с адресами — разные механизмы.

  2. Не все типы объектов могут сериализоваться: не помещайте туда открытые соединения и процессы по аналогии с этой таблицей.

  3. Сжатие не шифрует данные, а повторные Получить создают затраты памяти и обработки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.