Администрирование · 10 мин
Как открыть файл на сервере 1С
Как открыть файл на сервере 1С: работа через тонкий клиент, веб-клиент и код на сервере. Права доступа, пути, типичные ошибки и способы проверки результата.
Фраза «открыть файл на сервере 1С» может означать три разные задачи: открыть файл, который физически лежит на сервере предприятия, из клиентского приложения 1С; обратиться к файлу из серверного кода встроенного языка; либо открыть сам файл базы данных (1Cv8.1CD) напрямую. Эти сценарии решаются по-разному, и смешение подходов — главная причина ошибок вроде «файл не найден» или «отказано в доступе».
Ключевой момент: в клиент-серверном режиме код с директивой &НаСервере выполняется на сервере 1С:Предприятия, и все пути к файлам в нём интерпретируются относительно сервера, а не компьютера пользователя. Файл, который бухгалтер видит на своём диске D:, для сервера не существует, пока его не передать на сервер или не положить в сетевую папку, доступную серверу.
Ниже разобраны рабочие способы открытия и чтения файлов на сервере: через сетевые ресурсы, через временное хранилище, из серверного кода, а также ограничения веб-клиента и типичные ошибки с правами доступа.
Как 1С видит файлы в клиент-серверном режиме
В файловом режиме работы клиент и данные находятся на одном компьютере, поэтому путь C:\Документы\отчет.xlsx одинаково понятен и пользователю, и программе. В клиент-серверном варианте между пользователем и данными появляется сервер 1С:Предприятия, который работает под отдельной учётной записью (по умолчанию — USR1CV8) и видит только свои локальные диски и сетевые ресурсы, к которым у этой учётной записи есть доступ.
Из этого следуют два практических правила. Первое: любой путь в серверном коде проверяйте «глазами сервера» — зайдите на сервер по RDP или через оснастку и убедитесь, что файл открывается по этому пути. Второе: диски, подключённые у пользователя как сетевые (например, Z:), на сервере обычно не существуют — используйте UNC-пути вида \\ИмяСервера\ОбщаяПапка\файл.xml.
Открытие файла из сетевой папки, доступной серверу
Самый простой сценарий: файл уже лежит в общей папке, к которой у агента сервера есть доступ на чтение. В этом случае серверный код читает его напрямую стандартными объектами встроенного языка — ЧтениеТекста, ЧтениеXML, ДвоичныеДанные и другими.
Порядок настройки: создайте общую папку на файловом сервере или на самом сервере 1С, выдайте учётной записи агента сервера (USR1CV8 или доменной учётке, под которой запущен агент) права на чтение, а при необходимости записи — на изменение. Проверьте доступ, открыв путь в Проводнике с самого сервера.
Пример чтения текстового файла на сервере:
&НаСервере
Функция ПрочитатьФайлНаСервере(ПутьКФайлу)
Чтение = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Содержимое = Чтение.Прочитать();
Чтение.Закрыть();
Возврат Содержимое;
КонецФункции
Передача файла с компьютера пользователя на сервер
Если файл находится у пользователя, а обработать его нужно на сервере (загрузка прайса, импорт выписки), используется механизм помещения файла во временное хранилище. В управляемых формах это делается асинхронно: пользователь выбирает файл, клиент передаёт его на сервер, а серверная процедура получает двоичные данные по адресу хранилища.
- 1На клиенте вызовите НачатьПомещениеФайла с описанием оповещения о завершении
- 2В обработчике завершения получите адрес временного хранилища
- 3Передайте адрес в серверную процедуру
- 4На сервере извлеките данные: ПолучитьИзВременногоХранилища(Адрес)
- 5При необходимости запишите данные во временный файл на сервере через Записать() и обработайте
- 6Удалите временный файл и данные из хранилища после обработки
Пример серверной части обработки:
&НаСервере
Процедура ОбработатьФайлНаСервере(АдресХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
// дальше читаем ИмяВременногоФайла как обычный файл
КонецПроцедуры
Обратите внимание: метод ПолучитьИмяВременногоФайла создаёт файл в каталоге временных файлов сервера. После обработки его нужно удалить через УдалитьФайлы, иначе каталог со временем разрастётся и может занять весь диск.
Открытие файла для пользователя: просмотр и скачивание с сервера
Обратная задача — показать пользователю файл, который лежит на сервере: сформированный отчёт, выгрузку, архив. Здесь логика зеркальная: серверная процедура помещает файл во временное хранилище и возвращает адрес, а клиент сохраняет или открывает его через ПолучитьФайл или НачатьПолучениеФайлов.
Для интерактивного открытия файла на компьютере пользователя (например, открыть PDF в ассоциированной программе) используется ФайловаяСистема.ОткрытьФайл() в тонком клиенте после получения файла с сервера. В веб-клиенте прямой запуск файлов ограничен возможностями браузера: чаще всего файл просто скачивается, и пользователь открывает его вручную.
Сравнение вариантов
Подходит для регулярных обменов и регламентных заданий; требует настройки прав и стабильной сети
Подходит для разовой передачи файлов между клиентом и сервером; данные не сохраняются постоянно
Подходит, когда файл нужен долговременно и с историей; увеличивает размер базы
Штатный механизм для больших объёмов присоединённых файлов; требует настройки в разделе администрирования
Особенности веб-клиента и тонкого клиента
В тонком клиенте доступна файловая система компьютера пользователя: можно выбрать файл диалогом, прочитать его, открыть внешней программой. В веб-клиенте прямой доступ к диску пользователя ограничен политиками браузера: выбор файла возможен только через стандартный диалог загрузки, а «открыть файл по пути» нельзя в принципе.
Если обработка должна работать и в веб-клиенте, проектируйте её сразу через механизм помещения файлов (НачатьПомещениеФайла), не используя модальные диалоги и прямые пути. Проверяйте поведение в обоих клиентах, если в компании используются оба варианта подключения.
Можно ли открыть файл базы 1Cv8.1CD напрямую
Файл 1Cv8.1CD — это внутренний формат файловой базы 1С, а не документ, который можно «открыть» сторонней программой. Штатный способ работы с ним — указать путь к каталогу базы при добавлении информационной базы в список стартера 1С. Прямое редактирование или чтение файла сторонними утилитами небезопасно и может привести к повреждению данных.
Если база работает в клиент-серверном режиме на СУБД (MS SQL, PostgreSQL и др.), файла 1Cv8.1CD вообще нет — данные хранятся в базе СУБД, и доступ к ним выполняется только через сервер 1С или средства самой СУБД для резервного копирования.
Проверка результата и диагностика ошибок
После настройки проверьте цепочку целиком: файл существует по указанному пути, путь доступен с сервера, учётная запись агента имеет нужные права, код выполняется именно на сервере. Для отладки временно выводите в журнал регистрации полный путь и результат проверки существования файла через объект Файл и метод Существует().
Текст ошибки обычно указывает на этап сбоя: «файл не обнаружен» — проблема пути или контекста выполнения; «отказано в доступе» — права учётной записи; «ошибка разделённого доступа» — файл занят другим процессом (например, открыт в Excel у пользователя или антивирусом на сервере).
Как проверить результат
Файл.Существует() на сервере возвращает Истина
Ложь при визуально существующем файле — путь проверяется не в том контексте
Файл открывается в Проводнике с сервера под учётной записью агента
Запрос пароля или отказ в доступе
Текст читается без искажений кириллицы
Крякозябры — неверно указана кодировка
Каталог временных файлов сервера не растёт после обработок
Накопление файлов — в коде нет удаления
FAQ
Почему серверная процедура не видит файл, который лежит на рабочем столе пользователя?
Потому что серверный код выполняется на сервере 1С и видит только его файловую систему. Передайте файл на сервер через временное хранилище (НачатьПомещениеФайла) или положите его в сетевую папку, доступную серверу.
Под какой учётной записью сервер 1С обращается к файлам?
Под учётной записью, от имени которой запущен агент сервера 1С:Предприятия — по умолчанию это локальная учётная запись USR1CV8. Для доступа к сетевым ресурсам часто агента перенастраивают на доменную учётную запись с нужными правами.
Как открыть файл Excel на сервере без установленного Excel?
Через объект ТабличныйДокумент с методом Прочитать() — платформа умеет читать файлы xlsx без установленного Office. COM-подключение к Excel на сервере требует установленного пакета Office и является менее надёжным решением.
Можно ли открыть файл на сервере из веб-клиента?
Да, но только через серверный код: веб-клиент передаёт файл на сервер стандартной загрузкой, сервер обрабатывает его и при необходимости возвращает результат на скачивание. Прямой доступ к путям файловой системы из браузера невозможен.
Что делать, если появляется ошибка «отказано в доступе» при правильном пути?
Проверьте права учётной записи агента сервера на папку и на общий ресурс (права действуют на обоих уровнях), а также не блокирует ли файл антивирус. Для диагностики войдите на сервер под этой учётной записью и попробуйте открыть файл вручную.
Безопасно ли открывать файл 1Cv8.1CD сторонними программами?
Нет. Это внутренний формат базы данных, его прямое изменение почти гарантированно приводит к повреждению. Работайте с базой только через платформу 1С, а для анализа используйте выгрузку в dt или штатные механизмы.
Что важно запомнить
Серверный код 1С видит только файловую систему сервера и работает под учётной записью агента. Файлы пользователя передаются через временное хранилище, общие файлы — через сетевые папки с UNC-путями и выданными правами. После обработки временные файлы удаляйте, а любую ошибку диагностируйте по тексту: путь, права или блокировка файла.