При разработке на управляемых формах многие начинающие (и не только) разработчики сталкиваются с трудностями при работе с ВременноеХранилище. Часто возникает желание передать в функцию ПоместитьВоВременноеХранилище какой-либо идентификатор (например, УникальныйИдентификатор формы или произвольную строку) и затем считать данные по этому же идентификатору. Давайте разберем, почему это приводит к ошибке и как правильно организовать хранение данных в 1С.
Главная ошибка заключается в представлении о том, что ВременноеХранилище — это некий «словарь» или «реестр», где мы можем задать ключ (идентификатор) для наших данных. На самом деле, механизм ВременноеХранилище работает иначе:
ПоместитьВоВременноеХранилище всегда возвращает строку — это и есть уникальный адрес (путь), сгенерированный платформой.УникальныйИдентификатор формы, платформа просто связывает этот адрес с жизненным циклом формы.ПолучитьИзВременногоХранилища, передав туда обычный ГУИД, обречена на провал. Платформа ожидает получить именно адрес, который был возвращен при записи. Попытка подставить случайную строку вызывает ошибку «Неправильный путь к файлу».Если ваша задача — многократно обновлять данные в одном и том же «месте» хранилища без получения каждый раз нового адреса, используйте подход с закреплением адреса в реквизите формы. Рассмотрим этот процесс по шагам:
ПриСозданииНаСервере) создайте пустую область во временном хранилище:
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ЭтотОбъект.УникальныйИдентификатор);
// Сохраняем адрес в реквизит формы, чтобы он был доступен на клиенте
ЭтотОбъект.РеквизитАдреса = АдресХранилища;
// Помещаем новые данные по уже известному нам адресу
ПоместитьВоВременноеХранилище(Результат, РеквизитАдреса);
Данные = ПолучитьИзВременногоХранилища(РеквизитАдреса);
Этот метод позволяет вам иметь постоянный «ключ» к временному хранилищу на протяжении всего времени существования формы.
Если проблема возникает при фоновом выполнении задач, то наиболее правильным и профессиональным решением будет использование встроенного механизма Длительных операций. Платформа 1С уже реализовала всё необходимое для безопасной передачи результатов из фонового задания на клиент.
Рассмотрим, почему это эффективнее:
ДлительныеОперации автоматически помещает результат выполнения во временное хранилище.При использовании ДлительныеОперации.ЗапуститьВыполнениеФункции, в структуру ответа вы получите ключ АдресРезультата. Именно этот адрес нужно передать в ПолучитьИзВременногоХранилища. Это стандарт индустрии, который обеспечивает стабильность и отсутствие утечек памяти.
Подводя итог, запомним фундаментальные правила:
ВременноеХранилище самостоятельно. Его всегда должна выдавать функция ПоместитьВоВременноеХранилище.УникальныйИдентификатор формы вторым параметром, но помните, что это лишь управление временем жизни, а не именование ключа.ДлительныеОперации, так как они спроектированы именно для корректного взаимодействия между фоновыми потоками и пользовательским интерфейсом.Применяя эти простые рекомендации, вы сможете избежать ошибок типизации адресов и сделать работу с временным хранилищем прозрачной и надежной.