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