При администрировании серверной версии 1С:Предприятия 7.7 (MS SQL Server) системные администраторы и разработчики часто сталкиваются с ситуацией, когда каталог информационной базы заполняется большим количеством файлов с маской T*.dbf и T*.cdx (например, T6335.dbf). На первый взгляд это вызывает недоумение, так как все основные таблицы данных должны храниться внутри реляционной СУБД, а не в файлах DBF. Проанализируем, почему возникают эти файлы, какую роль они играют и как правильно настроить систему, чтобы избежать засорения дискового пространства.
Рассмотрим внутреннее устройство платформы 1С:Предприятие 7.7 для понимания происхождения данных файлов. В отличие от современных версий платформы, SQL-версия 1С 7.7 не является полностью «нативным» клиентом SQL-сервера. Она использует гибридную модель обработки данных:
СоздатьОбъект("Запрос"), платформа формирует выборку данных из SQL-сервера, но финальную обработку зачастую производит на стороне клиента. Группировки, сортировки, наложение сложных фильтров и вызов функций модулей выполняются локальным движком. Для хранения промежуточных результатов 1С создает локальные временные таблицы в формате DBF с сопутствующими индексными файлами CDX. Имя такого файла всегда начинается с латинской буквы T (от англ. Temporary), за которой следует числовой идентификатор.СоздатьОбъект("XBase").В штатном режиме работы при успешном завершении запроса или закрытии сеанса пользователя платформа автоматически удаляет все созданные временные файлы. Однако при аварийных сбоях этот процесс нарушается.
Выясним основные причины, из-за которых временные файлы не удаляются и остаются лежать именно в корневой папке базы данных:
1cv7s.exe завершается некорректно (снятие задачи пользователем через Диспетчер задач, обрыв RDP-сессии с последующим сбросом процесса, падение платформы с ошибкой в EXCPT.TXT или перезагрузка сервера), платформа просто не успевает выполнить процедуру очистки временных файлов. В результате файлы T*.dbf остаются на диске навсегда.%TEMP% и %TMP% указывают на пути, недоступные для записи учетной записи пользователя, либо пути содержат кириллические символы, спецсимволы или пробелы, платформа сбрасывает временные файлы в рабочий каталог по умолчанию.Разберем по шагам, как привести информационную базу в порядок и исключить дальнейшее накопление служебного мусора.
Шаг 1. Безопасное удаление накопившихся файлов
В SQL-версии все учетные данные хранятся внутри базы данных MS SQL Server. В каталоге информационной базы на диске должны находиться только файл структуры метаданных 1Cv7.MD, файл словаря базы данных 1Cv7.DD, конфигурационный файл 1cv7.def, системные списки пользователей и папки учетных записей. Все файлы с расширениями .dbf и .cdx, начинающиеся на букву T, являются брошенными временными файлами и могут быть удалены.
Для безопасного удаления выполним следующие действия:
1cv7s.exe отсутствуют).T*.dbf и T*.cdx вручную или с помощью скрипта.Шаг 2. Настройка индивидуальных каталогов пользователей
Чтобы временные файлы не засоряли корень информационной базы при возможных сбоях, изолируем рабочие каталоги каждого пользователя:
UsrDef\ИмяПользователя) или локальный каталог на терминальном сервере.Шаг 3. Корректировка системных путей временных файлов
Проанализируем переменные окружения на сервере или рабочих станциях. Для надежной работы 1С 7.7 рекомендуется настроить пути к временным папкам так, чтобы они были короткими, располагались на локальном диске и не содержали пробелов и кириллицы (например, C:\Temp). Убедимся, что группа «Пользователи» имеет полные права на чтение, запись и удаление файлов в этой директории.
Для полного исключения накладных расходов на создание DBF-файлов при обработке больших объемов данных рассмотрим использование прямых запросов к СУБД. В стандартном коде запрос выполняется через встроенный движок:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Номенклатура = Регистр.ОстаткиТоваров.Номенклатура;
|Количество = Регистр.ОстаткиТоваров.Количество;
|Функция КонОст = КонОст(Количество);
|Группировка Номенклатура без групп;
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
Пока Запрос.Группировка(1) = 1 Цикл
// Обработка данных выборки
КонецЦикла;
КонецЕсли;
При таком подходе на диске формируется временный DBF-файл. При переходе на прямые SQL-запросы (с использованием внешних компонент, таких как 1S++) вычисления, фильтрация и сортировка происходят полностью в оперативной памяти и временных таблицах самого SQL-сервера, что кардинально повышает быстродействие отчетов и устраняет генерацию файлов T*.dbf на диске.