Временное хранилище и Хранилище значения в 1С 8: Примеры использования

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

Временное хранилище (ВХ)

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

Ключевые особенности Временного хранилища:

  • Кратковременность: Данные во Временном хранилище существуют ограниченное время. Время жизни данных может быть привязано к времени жизни формы, или они могут удаляться после следующего серверного вызова или запроса формы, если не были привязаны к форме.

  • Хранение в памяти или временных файлах сервера: Данные не записываются в основную базу данных, а хранятся в оперативной памяти сервера или во временных файлах.

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

  • Работа с файлами: Часто используется совместно с механизмом работы с файлами для загрузки и скачивания файлов в веб-клиенте и тонком клиенте.

  • Асинхронность и фоновые задания: Позволяет передавать данные из фонового задания в сеанс, инициировавший это задание.

  • Ограничение на размер: Существует ограничение на объем данных, помещаемых во временное хранилище за один вызов (например, не более 4 Гб в сериализованном виде для метода ПоместитьФайл()).

Основные методы:

  • ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификаторФормы): Помещает данные во временное хранилище. Возвращает строковый адрес, по которому можно получить данные.

    • Данные: Любое значение, которое нужно сохранить.

    • УникальныйИдентификаторФормы (необязательный): Если указан, то данные будут автоматически удалены при закрытии формы с этим идентификатором.

  • ПолучитьИзВременногоХранилища(Адрес): Получает данные из временного хранилища по их адресу. Если данных по адресу нет (например, удалены или адрес некорректен), возвращает Неопределено.

  • УдалитьИзВременногоХранилища(Адрес): Явно удаляет данные из временного хранилища.

Примеры использования Временного хранилища:

    • Загрузка файла с клиента на сервер: Пользователь выбирает файл на своем компьютере, файл помещается во Временное хранилище, а затем на сервере извлекается для дальнейшей обработки (например, сохранения в Хранилище значения или в файловую систему сервера).

// Клиентский код (упрощенно)
&НаКлиенте
Процедура ПрикрепитьФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Если Диалог.Выбрать() Тогда
        АдресВременногоХранилища = "";
        ПоместитьФайл(АдресВременногоХранилища, Диалог.ПолноеИмяФайла, , Ложь, УникальныйИдентификатор);
        // Далее можно вызвать серверную процедуру и передать АдресВременногоХранилища
        ОбработатьЗагруженныйФайлНаСервере(АдресВременногоХранилища, Диалог.ИмяФайла);
    КонецЕсли;
КонецПроцедуры

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

  • Формирование и передача печатных форм: Сформированный на сервере табличный документ можно поместить во Временное хранилище и передать на клиент для отображения или сохранения.

  • Промежуточное хранение данных при длительных операциях: Чтобы не хранить большие объемы данных в оперативной памяти сервера в течение всей длительной операции.

Хранилище значения

Хранилище значения в 1С — это тип данных, предназначенный для хранения в базе данных различных значений, включая те, которые не могут быть напрямую сохранены в полях базы данных стандартных типов. Основное его назначение — хранение сериализованных данных, то есть данных, преобразованных в формат, пригодный для записи и последующего восстановления.

Ключевые особенности Хранилища значения:

  • Универсальность: Позволяет хранить практически любые типы данных, включая примитивные типы, картинки, двоичные данные (например, файлы Word, PDF), таблицы значений, структуры и другие сериализуемые объекты.

  • Хранение в базе данных: Данные, помещенные в Хранилище значения, физически сохраняются в базе данных (в файле .1CD или таблицах SQL-сервера). Это означает, что они включаются в резервные копии базы.

  • Сжатие: Поддерживается возможность сжатия данных перед сохранением, что позволяет экономить место в базе данных, особенно при работе с большими объектами. Степень сжатия можно настраивать.

  • Ограничения: Для полей типа Хранилище значения не поддерживается индексирование, упорядочивание в запросах и выборках, а также суммирование. Система не контролирует ссылочную целостность для объектов, сохраненных в Хранилище значения. Хранение больших объемов данных непосредственно в полях объектов может замедлить работу системы.

Примеры использования Хранилища значения:

  • Хранение изображений: Например, фотографии товаров в справочнике номенклатуры, сканы подписанных документов.

// Пример: Сохранение картинки в Хранилище значения
МояКартинка = Новый Картинка("C:\Temp\Image.jpg");
ХранилищеКартинки = Новый ХранилищеЗначения(МояКартинка, Новый СжатиеДанных(9)); // 9 - максимальная степень сжатия
ЭлементСправочника.МоеПолеХранилище = ХранилищеКартинки;
ЭлементСправочника.Записать();

Хранение файлов: Прикрепление к документам или элементам справочников различных файлов (договоров, спецификаций, инструкций).

// Пример: Сохранение файла в Хранилище значения
ДвоичныеДанныеФайла = Новый ДвоичныеДанные("C:\Temp\Document.docx");
ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанныеФайла);
ОбъектДокумент.ПрикрепленныйФайл = ХранилищеФайла;
ОбъектДокумент.Записать();

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

// Пример: Сохранение таблицы значений в Хранилище значения
МояТаблицаЗначений = Новый ТаблицаЗначений;
// ... заполнение таблицы ...
ХранилищеТаблицы = Новый ХранилищеЗначения(МояТаблицаЗначений);
Константы.НастройкиОтчета.Установить(ХранилищеТаблицы);

Когда что использовать?

  • Используйте Хранилище значения, когда вам нужно надежно сохранить какие-либо данные (файлы, картинки, сложные настройки) непосредственно в информационной базе на длительный срок.

  • Используйте Временное хранилище, когда вам нужно передать данные между клиентом и сервером (особенно файлы), передать данные между формами, или когда данные нужны лишь на короткий промежуток времени в рамках текущей операции или сеанса. Часто Временное хранилище используется как промежуточный этап перед помещением данных в Хранилище значения (например, при загрузке файла с клиента).

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

одиннадцать − восемь =

К НАЧАЛУ