К статье
Практический материал

Администрирование · 10 мин

Как открыть файл на сервере 1С

Как открыть файл на сервере 1С: работа через тонкий клиент, веб-клиент и код на сервере. Права доступа, пути, типичные ошибки и способы проверки результата.

Фраза «открыть файл на сервере 1С» может означать три разные задачи: открыть файл, который физически лежит на сервере предприятия, из клиентского приложения 1С; обратиться к файлу из серверного кода встроенного языка; либо открыть сам файл базы данных (1Cv8.1CD) напрямую. Эти сценарии решаются по-разному, и смешение подходов — главная причина ошибок вроде «файл не найден» или «отказано в доступе».

Ключевой момент: в клиент-серверном режиме код с директивой &НаСервере выполняется на сервере 1С:Предприятия, и все пути к файлам в нём интерпретируются относительно сервера, а не компьютера пользователя. Файл, который бухгалтер видит на своём диске D:, для сервера не существует, пока его не передать на сервер или не положить в сетевую папку, доступную серверу.

Ниже разобраны рабочие способы открытия и чтения файлов на сервере: через сетевые ресурсы, через временное хранилище, из серверного кода, а также ограничения веб-клиента и типичные ошибки с правами доступа.

Как 1С видит файлы в клиент-серверном режиме

В файловом режиме работы клиент и данные находятся на одном компьютере, поэтому путь C:\Документы\отчет.xlsx одинаково понятен и пользователю, и программе. В клиент-серверном варианте между пользователем и данными появляется сервер 1С:Предприятия, который работает под отдельной учётной записью (по умолчанию — USR1CV8) и видит только свои локальные диски и сетевые ресурсы, к которым у этой учётной записи есть доступ.

Из этого следуют два практических правила. Первое: любой путь в серверном коде проверяйте «глазами сервера» — зайдите на сервер по RDP или через оснастку и убедитесь, что файл открывается по этому пути. Второе: диски, подключённые у пользователя как сетевые (например, Z:), на сервере обычно не существуют — используйте UNC-пути вида \\ИмяСервера\ОбщаяПапка\файл.xml.

Открытие файла из сетевой папки, доступной серверу

Самый простой сценарий: файл уже лежит в общей папке, к которой у агента сервера есть доступ на чтение. В этом случае серверный код читает его напрямую стандартными объектами встроенного языка — ЧтениеТекста, ЧтениеXML, ДвоичныеДанные и другими.

Порядок настройки: создайте общую папку на файловом сервере или на самом сервере 1С, выдайте учётной записи агента сервера (USR1CV8 или доменной учётке, под которой запущен агент) права на чтение, а при необходимости записи — на изменение. Проверьте доступ, открыв путь в Проводнике с самого сервера.

Пример чтения текстового файла на сервере:

&НаСервере

Функция ПрочитатьФайлНаСервере(ПутьКФайлу)

Чтение = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);

Содержимое = Чтение.Прочитать();

Чтение.Закрыть();

Возврат Содержимое;

КонецФункции

Передача файла с компьютера пользователя на сервер

Если файл находится у пользователя, а обработать его нужно на сервере (загрузка прайса, импорт выписки), используется механизм помещения файла во временное хранилище. В управляемых формах это делается асинхронно: пользователь выбирает файл, клиент передаёт его на сервер, а серверная процедура получает двоичные данные по адресу хранилища.

Порядок действий
  1. 1
    На клиенте вызовите НачатьПомещениеФайла с описанием оповещения о завершении
  2. 2
    В обработчике завершения получите адрес временного хранилища
  3. 3
    Передайте адрес в серверную процедуру
  4. 4
    На сервере извлеките данные: ПолучитьИзВременногоХранилища(Адрес)
  5. 5
    При необходимости запишите данные во временный файл на сервере через Записать() и обработайте
  6. 6
    Удалите временный файл и данные из хранилища после обработки

Пример серверной части обработки:

&НаСервере

Процедура ОбработатьФайлНаСервере(АдресХранилища)

ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");

ДвоичныеДанные.Записать(ИмяВременногоФайла);

// дальше читаем ИмяВременногоФайла как обычный файл

КонецПроцедуры

Обратите внимание: метод ПолучитьИмяВременногоФайла создаёт файл в каталоге временных файлов сервера. После обработки его нужно удалить через УдалитьФайлы, иначе каталог со временем разрастётся и может занять весь диск.

Открытие файла для пользователя: просмотр и скачивание с сервера

Обратная задача — показать пользователю файл, который лежит на сервере: сформированный отчёт, выгрузку, архив. Здесь логика зеркальная: серверная процедура помещает файл во временное хранилище и возвращает адрес, а клиент сохраняет или открывает его через ПолучитьФайл или НачатьПолучениеФайлов.

Для интерактивного открытия файла на компьютере пользователя (например, открыть PDF в ассоциированной программе) используется ФайловаяСистема.ОткрытьФайл() в тонком клиенте после получения файла с сервера. В веб-клиенте прямой запуск файлов ограничен возможностями браузера: чаще всего файл просто скачивается, и пользователь открывает его вручную.

Сравнение вариантов

Сетевая папка с доступом для агента сервера

Подходит для регулярных обменов и регламентных заданий; требует настройки прав и стабильной сети

Временное хранилище

Подходит для разовой передачи файлов между клиентом и сервером; данные не сохраняются постоянно

Хранение файла в базе (реквизит ХранилищеЗначения)

Подходит, когда файл нужен долговременно и с историей; увеличивает размер базы

Тома хранения файлов

Штатный механизм для больших объёмов присоединённых файлов; требует настройки в разделе администрирования

Особенности веб-клиента и тонкого клиента

В тонком клиенте доступна файловая система компьютера пользователя: можно выбрать файл диалогом, прочитать его, открыть внешней программой. В веб-клиенте прямой доступ к диску пользователя ограничен политиками браузера: выбор файла возможен только через стандартный диалог загрузки, а «открыть файл по пути» нельзя в принципе.

Если обработка должна работать и в веб-клиенте, проектируйте её сразу через механизм помещения файлов (НачатьПомещениеФайла), не используя модальные диалоги и прямые пути. Проверяйте поведение в обоих клиентах, если в компании используются оба варианта подключения.

Можно ли открыть файл базы 1Cv8.1CD напрямую

Файл 1Cv8.1CD — это внутренний формат файловой базы 1С, а не документ, который можно «открыть» сторонней программой. Штатный способ работы с ним — указать путь к каталогу базы при добавлении информационной базы в список стартера 1С. Прямое редактирование или чтение файла сторонними утилитами небезопасно и может привести к повреждению данных.

Если база работает в клиент-серверном режиме на СУБД (MS SQL, PostgreSQL и др.), файла 1Cv8.1CD вообще нет — данные хранятся в базе СУБД, и доступ к ним выполняется только через сервер 1С или средства самой СУБД для резервного копирования.

Типичные ошибки
01
Использование локального пути пользователя (C:\, D:\) в серверном коде — сервер не видит этот диск, возникает ошибка «файл не найден»
02
Обращение к сетевому диску по букве (Z:\) вместо UNC-пути — на сервере такое подключение отсутствует
03
Отсутствие прав у учётной записи USR1CV8 на сетевую папку — ошибка «отказано в доступе» при корректном пути
04
Неправильная кодировка при чтении текста — вместо русских букв появляются нечитаемые символы
05
Неудалённые временные файлы на сервере — переполнение системного диска и остановка сервера 1С
06
Попытка открыть файл напрямую в веб-клиенте — ограничение браузера, код не выполняется

Проверка результата и диагностика ошибок

После настройки проверьте цепочку целиком: файл существует по указанному пути, путь доступен с сервера, учётная запись агента имеет нужные права, код выполняется именно на сервере. Для отладки временно выводите в журнал регистрации полный путь и результат проверки существования файла через объект Файл и метод Существует().

Текст ошибки обычно указывает на этап сбоя: «файл не обнаружен» — проблема пути или контекста выполнения; «отказано в доступе» — права учётной записи; «ошибка разделённого доступа» — файл занят другим процессом (например, открыт в Excel у пользователя или антивирусом на сервере).

Контрольные точки

Как проверить результат

Существование файла
Норма

Файл.Существует() на сервере возвращает Истина

Тревожный признак

Ложь при визуально существующем файле — путь проверяется не в том контексте

Права доступа
Норма

Файл открывается в Проводнике с сервера под учётной записью агента

Тревожный признак

Запрос пароля или отказ в доступе

Чтение содержимого
Норма

Текст читается без искажений кириллицы

Тревожный признак

Крякозябры — неверно указана кодировка

Временные файлы
Норма

Каталог временных файлов сервера не растёт после обработок

Тревожный признак

Накопление файлов — в коде нет удаления

FAQ

Почему серверная процедура не видит файл, который лежит на рабочем столе пользователя?

Потому что серверный код выполняется на сервере 1С и видит только его файловую систему. Передайте файл на сервер через временное хранилище (НачатьПомещениеФайла) или положите его в сетевую папку, доступную серверу.

Под какой учётной записью сервер 1С обращается к файлам?

Под учётной записью, от имени которой запущен агент сервера 1С:Предприятия — по умолчанию это локальная учётная запись USR1CV8. Для доступа к сетевым ресурсам часто агента перенастраивают на доменную учётную запись с нужными правами.

Как открыть файл Excel на сервере без установленного Excel?

Через объект ТабличныйДокумент с методом Прочитать() — платформа умеет читать файлы xlsx без установленного Office. COM-подключение к Excel на сервере требует установленного пакета Office и является менее надёжным решением.

Можно ли открыть файл на сервере из веб-клиента?

Да, но только через серверный код: веб-клиент передаёт файл на сервер стандартной загрузкой, сервер обрабатывает его и при необходимости возвращает результат на скачивание. Прямой доступ к путям файловой системы из браузера невозможен.

Что делать, если появляется ошибка «отказано в доступе» при правильном пути?

Проверьте права учётной записи агента сервера на папку и на общий ресурс (права действуют на обоих уровнях), а также не блокирует ли файл антивирус. Для диагностики войдите на сервер под этой учётной записью и попробуйте открыть файл вручную.

Безопасно ли открывать файл 1Cv8.1CD сторонними программами?

Нет. Это внутренний формат базы данных, его прямое изменение почти гарантированно приводит к повреждению. Работайте с базой только через платформу 1С, а для анализа используйте выгрузку в dt или штатные механизмы.

Итог

Что важно запомнить

Серверный код 1С видит только файловую систему сервера и работает под учётной записью агента. Файлы пользователя передаются через временное хранилище, общие файлы — через сетевые папки с UNC-путями и выданными правами. После обработки временные файлы удаляйте, а любую ошибку диагностируйте по тексту: путь, права или блокировка файла.