Временная таблица это буфер для данных, который всегда под рукой. Временная таблица ведет себя также как и таблица базы данных, но данные она хранит, пока существует хотя бы одна ссылка на нее.
На физическом уровне временная таблица – это отдельный файл, создаваемый на жестком диске пользователя или на жестком диске сервера AOS. Так как только один пользователь имеет доступ к конкретной временной таблице, то отпадает необходимость в использовании транзакций (ttsbegin, ttscommit, ключевое слово forupdate).
Основное предназначение временных таблиц это буфер данных; в него данные выгружаются из таблиц базы данных для последующей обработки.
Для временных таблиц можно также создавать индексы, связи (realtions).
Временная таблица создается двумя путями:
- Создание новой таблицы в AOT со свойством Temporary равным Yes. Хорошим тоном считается начинать название таких временных таблиц с «Tmp».
- «Превращение» обычной таблицы во временную с помощью метода setTmp.
Первый вариант не представляет особых сложностей. Рассмотрим второй.
Создайте новый джоб:
static void BLG_UseTemporaryTables(Args _args)
{
BLG_TestTable1 tbl;
;
print "1. что было в таблице до установки как временная";
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
print "2. Делаем таблицу временной";
tbl.setTmp();
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
tbl.intField1 = 123;
tbl.strField2 = "123";
tbl.insert();
tbl.intField1 = 456;
tbl.strField2 = "456";
tbl.insert();
print "3. Содержимое таблицы после ввода данных";
while select tbl
{
print tbl.intField1, "-", tbl.strField2;
}
pause;
}
Получили следующий результат:
Я предварительно внес несколько строк в таблицу BLG_TestTable1, которые и были отображены вначале.
Как только мы пометили таблицу как временную с помощью метода setTmp, то система переключила нашу табличную переменную на файловый буфер и более не работаем с таблицей базы данных. Метод setTmp оказывает такой эффект только на конкретную табличную переменную, все остальные табличные переменные, ссылающиеся на BLG_TestTable1 продолжат работать с базой данных.
Во втором разделе видно, что система не вывела никаких данных, так как временный буфер пока пуст.
В третьем разделе мы добавляем новые строки во временную таблицу (файл), эти строки доступны текущему пользователю, они не сохраняются в базе данных в таблице BLG_TestTable1.
Когда выполнение джоба заканчивается, то табличная переменная tbl уничтожается, в системе больше не существует ни одной ссылки на временный буфер. И при следующем запуске сборщика мусора этот файл с временными данными будет удален.
Последнее. Если в процессе работы вам потребовалась временная таблица и речь идет о данных из стандартных таблиц Аксапты, то прежде чем создавать новую временную таблицу посмотрите, существуют ли уже готовые. Готовые временные таблицы ищите по имени оно начинается на «Tmp».
Итог
Временная таблица является удобным буфером для данных, которые не нужно хранить.