При программной интеграции и обмене данными между базами 1С:Предприятие с помощью COM-соединения разработчики часто сталкиваются с ошибкой недоступности файла информационной базы. При попытке вызова метода подключения система выводит сообщение вида: «Отсутствует файл базы данных 'C:\temp\trade/1Cv8.1CD'», хотя сама база является рабочей и без проблем открывается через стандартный ярлык 1С.
Рассмотрим детально причины этой проблемы, проанализируем пример кода подключения и изучим проверенные способы устранения ошибки.
Посмотрим на стандартный пример инициализации COM-соединения с файловой базой данных 1С:
V83COMConnector = Новый COMОбъект("V83.COMConnector");
Base1С = V83COMConnector.Connect("File=""C:\temp\trade"";Usr=""Пользователь"";Pwd=""Пароль""");
Синтаксически строка соединения сформирована корректно. Однако при выполнении данного кода платформа 1С может выдать ошибку отсутствия файла 1Cv8.1CD.
Проанализируем основные факторы, из-за которых COM-процесс не может получить доступ к файлу базы данных:
USR1CV8). У этой службы чаще всего отсутствуют права доступа к локальным каталогам конкретных пользователей или системному диску C:.C: является системным и защищён политиками безопасности Windows. При отсутствии явных прав файл базы данных 1Cv8.1CD может помещаться в каталог виртуализации пользователя (AppData\Local\VirtualStore), из-за чего прямой путь C:\temp\trade становится недоступен для стороннего COM-процесса.Наиболее надежный и практичный способ решения — вынести каталог файловой базы из системной директории локального диска и прописать сетевой путь.
Разберем порядок действий по шагам:
C:\temp\trade в общую сетевую папку на сервере или отдельном несистемном диске.USR1CV8.
V83COMConnector = Новый COMОбъект("V83.COMConnector");
Base1С = V83COMConnector.Connect("File=""\\ServerName\ShareFolder\trade"";Usr=""Пользователь"";Pwd=""Пароль""");
Если код должен выполняться строго на стороне сервера и с локальным путем, выполним настройку прав безопасности Windows:
services.msc) и узнаем имя учетной записи, от которой запущена служба «Агент сервера 1С:Предприятия 8.3».USR1CV8) и установим для нее флаг «Полный доступ».Для предотвращения критических ошибок в коде рекомендуем добавить программную проверку наличия файла 1Cv8.1CD перед созданием COM-соединения с помощью объекта Файл:
ПутьКФайлу = "C:\temp\trade\1Cv8.1CD";
ФайлБазы = Новый Файл(ПутьКФайлу);
Если Не ФайлБазы.Существует() Тогда
ВызватьИсключение "Файл базы данных 1С не найден по указанному пути!";
КонецЕсли;
V83COMConnector = Новый COMОбъект("V83.COMConnector");
Base1С = V83COMConnector.Connect("File=""C:\temp\trade"";Usr=""Пользователь"";Pwd=""Пароль""");
Такой подход позволяет заблаговременно убедиться в доступности файла 1Cv8.1CD для текущего контекста исполнения и информативно обработать возможную ошибку.