Как исправить ошибку безопасности Excel при загрузке файлов в 1С на сервере?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При переносе базы данных 1С на новый сервер под управлением современной операционной системы Windows Server и пакета Microsoft Office 2016 (или более поздних версий) пользователи часто сталкиваются с неприятной проблемой. При попытке программно импортировать данные из файлов Excel серверная служба 1С аварийно завершает операцию, возвращая ошибку: "Error calling context method (Open): An exception has occurred (Microsoft Excel): Office has detected a problem with this file. To help protect your computer this file cannot be opened.".

В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем механизмы безопасности операционной системы и пакета Microsoft Office, а также рассмотрим несколько эффективных способов решения проблемы — от простых системных настроек до корректировки программного кода в 1С.

Выясняем причину возникновения ошибки

Для начала проанализируем ситуацию. Когда вы запускаете импорт файла Excel, находясь в сеансе под своей учетной записью (интерактивно), система безопасности Microsoft Office в случае подозрений на небезопасный формат файла просто выводит предупреждение — желтую или красную плашку "Защищенный просмотр" (Protected View) или "Проверка файлов Office" (Office File Validation). Вы можете вручную нажать кнопку "Разрешить редактирование", и файл откроется.

Однако сервер 1С работает как фоновая служба Windows (обычно под специальной учетной записью, например, USR1CV8 или NetworkService). При программном обращении через COM-соединение Excel инициализируется в неинтерактивном (скрытом) режиме. Сервисный процесс не имеет доступа к рабочему столу пользователя и не может отобразить диалоговое окно или предупреждающую плашку. Не получив ответа от пользователя, Excel блокирует открытие файла из соображений безопасности и аварийно завершает свою работу, выбрасывая исключение в платформу 1С.

Ниже мы рассмотрим пошаговые сценарии устранения этой проблемы.

Решение 1. Создание каталогов Desktop в системных профилях Windows

Это классическое решение, которое упоминалось на форуме и помогает в большинстве случаев, когда Excel запускается под системной учетной записью Windows. Для корректной инициализации COM-объекта Excel требует обязательного наличия папки рабочего стола в профиле пользователя, под которым запускается процесс.

Давайте проверим наличие этих папок на вашем новом сервере и при необходимости создадим их вручную. Выполним следующие шаги:

  1. Откроем проводник на сервере и перейдем по пути: C:\Windows\System32\config\systemprofile\.
  2. Проверим, существует ли внутри этой папки каталог с именем Desktop. Если его нет, создадим пустую папку и назовем ее Desktop.
  3. Если у нас установлена 64-разрядная операционная система Windows (что является стандартом для современных серверов), перейдем по второму пути: C:\Windows\SysWOW64\config\systemprofile\.
  4. Точно так же проверим наличие папки Desktop в этом каталоге. Если она отсутствует, обязательно создадим её.

После создания этих папок рекомендуется перезапустить службу 1С:Предприятие и проверить работу загрузки. Во многих случаях этого простого действия оказывается достаточно для восстановления штатной работы импорта.

Решение 2. Программное отключение валидации файлов в коде 1С

Если у нас есть доступ к изменению кода конфигурации или обработке загрузки, мы можем решить проблему на уровне кода платформы 1С. Объектная модель Microsoft Excel предоставляет разработчикам свойство FileValidation, которое отвечает за валидацию структуры загружаемых файлов. Мы можем временно отключить эту проверку для создаваемого COM-объекта.

Рассмотрим пример программного кода, который решает эту задачу:


Excel = Новый COMОбъект("Excel.Application");
// Значение 1 соответствует константе msoFileValidationSkip (пропустить валидацию)
Excel.FileValidation = 1; 
// Отключаем отображение любых диалоговых окон и предупреждений Excel
Excel.DisplayAlerts = 0;   
// Открываем книгу Excel
Книга = Excel.Workbooks.Open(ИмяФайла);

Использование свойства FileValidation = 1 позволяет принудительно открыть файл в обход системных проверок структуры, предотвращая аварийное закрытие фонового процесса Excel.

Решение 3. Настройка параметров DCOM для Microsoft Excel

По умолчанию запуск Excel через COM-соединение выполняется от лица "Запускающего пользователя" (Launching User). Это означает, что Excel наследует права службы 1С. Поскольку служба 1С не имеет полноценного пользовательского профиля, параметры безопасности "Защищенного просмотра", настроенные в системе, для нее не действуют.

Мы можем настроить запуск приложения Excel через службу DCOM от имени специально выделенного локального пользователя (или администратора), под которым настройки безопасности предварительно уже были отключены вручную.

Разберем этот процесс по шагам:

  1. Нажмите на сервере комбинацию клавиш Win + R, введите команду dcomcnfg и нажмите Enter.
  2. В открывшемся окне консоли перейдите по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM.
  3. Найдите в списке компонентов элемент с именем Microsoft Excel Application (или "Приложение Microsoft Excel"), нажмите по нему правой кнопкой мыши и выберите "Свойства".
  4. Перейдите на вкладку Удостоверение (Identity).
  5. Переключите радиокнопку с положения "Запускающий пользователь" (Launching User) на положение "Указанный пользователь" (This user).
  6. Укажите учетные данные администратора сервера или специально созданного системного пользователя, под которым вы предварительно выполнили интерактивный вход в Windows и настроили параметры безопасности Excel.
  7. Перейдите на вкладку Безопасность (Security) и убедитесь, что учетной записи, под которой работает служба 1С (например, USR1CV8), предоставлены права на локальный запуск и локальную активацию.
  8. Нажмите "Применить" и "ОК" для сохранения настроек.

Решение 4. Отключение "Защищенного просмотра" через реестр (HKLM)

Поскольку служба 1С работает в контексте своей учетной записи, изменения настроек безопасности через графический интерфейс Excel под вашей учетной записью записываются в ветку текущего пользователя реестра (HKEY_CURRENT_USER). Служба сервера 1С не имеет к ней доступа. Для глобального отключения системных блокировок нам потребуется внести изменения в ветку реестра для всех пользователей компьютера — HKEY_LOCAL_MACHINE (HKLM).

Рассмотрим, какие параметры необходимо настроить в реестре для пакета Microsoft Office 2016 (в ветках реестра он обозначается как версия 16.0):

Для отключения механизмов "Защищенного просмотра" (Protected View) перейдем в следующий раздел реестра (если разделы отсутствуют, их необходимо создать вручную):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Protected View

Внутри этого раздела создадим три параметра типа DWORD (32-бит) со значением 1:

Для полного отключения механизма "Проверки файлов" (File Validation) перейдем в раздел:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Excel\Security\FileValidation

И создадим там параметр типа DWORD (32-бит):

Дополнительно мы можем зарегистрировать доверенное расположение (Trusted Location) на диске сервера, куда 1С сохраняет временные файлы перед их обработкой:

Перейдем в раздел реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Excel\Security\Trusted Locations

Создадим новый подраздел с произвольным именем (например, Location100) и пропишем в нем следующие параметры:

Важное примечание: Если у вас используется 64-разрядная операционная система Windows, а пакет Microsoft Office или платформа 1С установлены в 32-разрядной редакции, указанные ветки реестра могут находиться в узле совместимости: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Excel\Security\.... В таком случае настройки рекомендуется продублировать и там.

Решение 5. Снятие блокировки NTFS с файлов (Zone.Identifier)

Когда файлы выгружаются из внешних источников (например, скачиваются из почты или переносятся с локальных компьютеров пользователей по сети), операционная система Windows помечает их специальной меткой безопасности во вторичном потоке данных NTFS. Данная метка называется Zone.Identifier. Наличие этой метки заставляет Excel открывать файл исключительно в режиме ограниченной функциональности, что приводит к краху фонового процесса.

Мы можем программно разблокировать файл перед тем, как передавать его путь в COM-объект Excel. Для этого воспользуемся вызовом утилиты PowerShell напрямую из кода 1С:


ИмяФайла = "C:\1C_Temp\import.xlsx";
КомандаЗапуска = "powershell -Command ""Unblock-File -Path '" + ИмяФайла + "'""";
ЗапуститьПриложение(КомандаЗапуска, , Истина);

Параметр Истина в методе ЗапуститьПриложение указывает системе дождаться завершения выполнения команды. PowerShell мгновенно сотрет метку блокировки NTFS, после чего файл будет распознаваться операционной системой как доверенный локальный документ и успешно откроется в Excel.

Проанализировав все рассмотренные способы, мы можем сделать вывод, что наиболее комплексным и безопасным решением является комбинация создания системных папок Desktop на сервере и программной разблокировки файлов перед их открытием.

← На главную