При активной работе в программе 1С пользователи часто прикрепляют к документам и справочникам различные файлы: сканы договоров, актов, накладных в формате PDF или JPG. Однако со временем можно столкнуться с крайне неприятной ситуацией, когда старые файлы внезапно перестают открываться, выдавая пугающую техническую ошибку:
«Ошибка при выполнении файловой операции... /e1cib/tempstorage/... Значение данного типа невозможно преобразовать для передачи как файл. (Неопределено)»
При этом новые файлы прикрепляются и открываются без каких-либо нареканий. В этой статье мы подробно проанализируем, почему возникает этот сбой, как устроена архитектура хранения файлов в «1С:Предприятии 8.3», как провести диагностику базы данных и что делать для исправления и предотвращения подобной проблемы.
---
Давайте выясним причину, почему платформа выдает именно такую формулировку. Ошибка указывает на адрес во временном хранилище платформы 1С — e1cib/tempstorage.
В современных конфигурациях, созданных на базе БСП (Библиотеки стандартных подсистем), процесс работы с файлами разделен на несколько логических этапов:
Сбой происходит на шаге 2 и 3. Программа обращается к базе данных за двоичными данными файла, но вместо них получает пустоту — значение Неопределено (или NULL). Серверный код БСП пытается передать это пустое значение на клиент по адресу временного хранилища. Но платформа 1С не может преобразовать «пустоту» в реальный физический файл на диске клиента, о чем честно и сообщает: «Значение данного типа [то есть Неопределено] невозможно преобразовать для передачи как файл».
---
Чтобы понять, куда пропадают файлы, давайте рассмотрим структуру метаданных 1С. Для хранения присоединенных файлов в конфигурациях БСП (таких как «Бухгалтерия предприятия 3.0», «Управление торговлей 11», «ERP» и др.) используются два основных объекта:
Справочник.ДоговорыКонтрагентовПрисоединенныеФайлы. В этих справочниках хранятся только карточки файлов — их метаданные (наименование, расширение, размер, дата создания, автор и ссылка на владельца, например, конкретный договор). Самих двоичных данных (тела PDF-файла) в этом справочнике нет.РегистрСведений.ДвоичныеДанныеФайлов. Именно здесь, в специальном ресурсе с типом ХранилищеЗначения, содержатся непосредственно бинарные данные файлов, сжатые платформой. Запись в этом регистре жестко связана с элементом справочника присоединенных файлов по ключу-связи.Если карточка файла в справочнике существует, пользователь видит скан в списке прикрепленных. Но если при этом запись в регистре ДвоичныеДанныеФайлов стерта или повреждена, то при попытке открыть файл система вернет Неопределено, вызвав вышеописанную ошибку.
---
Выясним причины, которые могут приводить к разрушению связи между карточкой файла и его двоичными данными в файловых базах данных (формат .1CD).
Это самый главный враг файловых баз 1С. Файловая СУБД 1С очень чувствительна к качеству сетевого соединения. Если база данных лежит на общем сервере (или «расшаренной» папке на компьютере), а пользователи работают с ней через беспроводную сеть Wi-Fi, то в моменты передачи «тяжелых» PDF-файлов (которые могут весить десятки мегабайт) происходит колоссальная нагрузка на сеть. При малейшем микроразрыве связи, потере пакетов или задержке сигнала транзакция записи или чтения прерывается аварийно. Это приводит к физическому искажению внутренних таблиц файла базы данных 1Cv8.1CD.
Когда база данных из-за сбоев Wi-Fi начинает «сыпаться» и выдавать ошибки СУБД, системные администраторы часто запускают утилиту восстановления базы chdbfl.exe или выполняют процедуру ТиИ в Конфигураторе.
Принцип работы этих утилит прост: если они находят поврежденную страницу данных (которая не читается из-за физического сбоя), они просто удаляют эту страницу, чтобы восстановить общую работоспособность СУБД. В итоге база запускается, но поврежденные бинарные данные в регистре ДвоичныеДанныеФайлов безвозвратно удаляются. При этом логическая структура справочника присоединенных файлов может остаться нетронутой. Как результат: карточки договоров со скрепками на месте, а самих документов внутри уже нет.
Иногда при переходе на новые версии БСП меняется структура хранения файлов или алгоритмы их обработки. Если в базе до обновления уже были скрытые логические ошибки или незавершенные транзакции, реорганизация данных в процессе обновления могла очистить или некорректно обработать «проблемные» записи.
---
Прежде чем приступать к лечению базы, нам необходимо провести точную диагностику и понять, остались ли данные физически в файле 1Cv8.1CD.
Проанализируем размер файла базы данных. Если в компании действительно велся активный документооборот и было прикреплено более 200 качественных сканов PDF, размер файла базы данных должен вырасти как минимум на несколько сотен мегабайт или даже гигабайт. Если файл базы данных весит подозрительно мало (например, менее 1 ГБ), это явный косвенный признак того, что двоичные данные физически покинули базу данных. Для детального анализа структуры хранилища и занимаемого места подойдёт инструмент для анализа объёма таблиц базы 1С.
Чтобы окончательно убедиться в наличии или отсутствии двоичных данных, мы можем использовать инструмент разработчика — Консоль запросов. Напишем простой запрос к регистру сведений ДвоичныеДанныеФайлов:
ВЫБРАТЬ
ДвоичныеДанные.Файл КАК СсылкаНаКарточкуФайла,
ДвоичныеДанные.ДвоичныеДанныеФайла КАК ДанныеХранилища
ИЗ
РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанные
ГДЕ
ДвоичныеДанные.Файл.Наименование ПОДОБНО "%Имя_Проблемного_Файла%"
Если данный запрос возвращает пустой результат (нет строк) или значение в колонке ДанныеХранилища равно NULL, это подтверждает худшие опасения: физические данные файла утеряны. Если же запрос возвращает заполненное поле хранилища значений, проблема кроется в кэше платформы или правах доступа.
Для успокоения души и исключения банального зависания платформы выполним полную очистку локального кэша на компьютере пользователя:
%userprofile%\AppData\Local\1C\1Cv8%userprofile%\AppData\Roaming\1C\1Cv8---
Если диагностика показала, что данные из регистра стерлись, а резервной копии базы данных (бэкапа) нет и никогда не делалось, восстановить их напрямую из текущего файла 1Cv8.1CD штатными средствами СУБД 1С невозможно. Однако есть несколько обходных путей, которые помогут спасти ситуацию.
Поскольку пользователи ранее успешно открывали эти сканы на своих компьютерах, операционная система Windows обязательно кэшировала их при открытии. С высокой долей вероятности файлы PDF остались в локальных временных папках пользователей.
Проанализируем локальные папки Temp на компьютерах сотрудников, которые чаще всего работали с этими договорами. Искать файлы нужно по адресу:
C:\Users\<Имя_Пользователя>\AppData\Local\Temp\
Обычно 1С создает там подпапки с именами вида v8_xxxx_xx или 1Cv8T.... Попробуем выполнить поиск файлов по маске *.pdf, отсортировав их по дате изменения. Часто таким нехитрым способом удается восстановить до 90% утерянных документов.
Для того чтобы система не выдавала пугающую техническую ошибку, а корректно сообщала о том, что файл пуст, или для восстановления поврежденных ссылок, выполним регламентные процедуры тестирования. При необходимости выявить и восстановить повреждённые связи можно воспользоваться обработкой для поиска битых ссылок.
Важно: перед проведением любых процедур обязательно скопируйте файл 1Cv8.1CD в надежное место!
---
Чтобы подобные инциденты больше никогда не повторились, необходимо кардинально перестроить схему работы с базой данных и прикрепленными файлами. Разберем по шагам три ключевых правила безопасности.
Хранить бинарные файлы (особенно тяжелые PDF-сканы) внутри файла базы данных 1Cv8.1CD — крайне нерекомендуемая практика. База данных раздувается, начинает тормозить, а риск повреждения таблиц при сбоях возрастает в разы.
Переведем хранение файлов во внешние тома на диске. Это стандартный функционал БСП:
\\SERVER-1C\ScanFiles\). Убедимся, что у всех пользователей 1С есть полные права доступа (чтение и запись) к этой сетевой папке.Программа автоматически перенесет все уцелевшие двоичные данные из регистра сведений во внешнюю папку на диске, распределив их по подкаталогам, и очистит базу данных от лишнего мусора, значительно уменьшив размер файла 1Cv8.1CD.
Никогда не позволяйте пользователям открывать файловую базу 1С напрямую через сетевую папку (протокол SMB/разрешенный сетевой ресурс) по сети Wi-Fi. Если нет возможности развернуть полноценный клиент-серверный вариант (на базе MS SQL Server или PostgreSQL), используйте альтернативные и безопасные методы работы:
Ситуация, описанная автором темы («Архив никто и никогда не делал»), является недопустимой в профессиональной деятельности. Даже самая надежная система может выйти из строя из-за аппаратного сбоя жесткого диска или вируса-шифровальщика.
Настройте автоматическое создание резервных копий (бэкапов) базы данных не реже одного раза в день (например, в ночное время с помощью планировщика задач Windows или сторонних утилит архивации) и храните их на физически обособленном накопителе или в облачном хранилище. Для обслуживания нескольких учетных систем также настраивают автоматическое архивирование и тестирование баз по расписанию.