Где лежит файл и как получить его полный путь в 1С:Предприятии 8.3

· 9 мин

Содержание

Путь к файловой информационной базе виден прямо в окне запуска 1С: выделите базу в списке, и под списком появится строка вида File="D:\Bases\Buh". В самой программе тот же путь показывает Справка → О программе, а в коде его возвращает СтрокаСоединенияИнформационнойБазы(). Путь к произвольному файлу на диске в коде узнают через объект Файл — свойства ПолноеИмя, Путь, Имя.

Приёмы относятся к платформе 8.3 и не зависят от конфигурации: в БП, ЗУП и УТ путь к базе, внешнему отчёту или файлу обмена находят одинаково. Отличается другое — где выполняется код: на компьютере пользователя или на сервере 1С.

Путь к базе в окне запуска и в работающей программе

Чаще всего «путь к файлу в 1С» ищут, чтобы найти саму базу: сделать копию, перенести на другой компьютер, проверить, на каком диске она лежит.

Окно запуска

  1. Запустите ярлык 1С:Предприятия — откроется список информационных баз.
  2. Щёлкните по нужной базе один раз (не двойным щелчком).
  3. Внизу окна под списком появится строка подключения.

Для файловой базы там будет File="C:\Users\Ivanov\Documents\InfoBase". Для клиент-серверной — Srvr="srv1c";Ref="buh_prod";. Во втором случае файла базы на вашем компьютере нет: данные хранятся в СУБД на сервере, и «путь» означает имя сервера и имя базы в кластере.

Если строка не видна, нажмите Изменить… — во втором шаге мастера указан каталог информационной базы, его можно скопировать.

Внутри программы

Когда база уже открыта, путь можно посмотреть без выхода:

  • 🔹 откройте главное меню (кнопка с тремя полосками в левом верхнем углу) → Справка → О программе;
  • 🔹 в окне найдите строку информационной базы — там та же строка подключения File="…";
  • 🔹 в Конфигураторе то же окно открывается через меню Справка → О программе.

Где 1С хранит сам список баз

Список баз из окна запуска лежит в текстовом файле ibases.v8i. Для текущего пользователя Windows это %APPDATA%\1C\1CEStart\ibases.v8i. Откройте его Блокнотом: у каждой базы есть секция с названием в квадратных скобках и строкой Connect=File="…";.

Файловая база — это каталог, в котором лежит файл 1Cv8.1CD. Копировать для резервной копии нужно именно его, предварительно закрыв все сеансы. Пока база открыта, копия файла может оказаться несогласованной.

Встроенные функции языка, которые возвращают пути

Если путь нужен в обработке или в отчёте, удобнее получить его кодом. Платформа даёт набор готовых функций.

ФункцияЧто возвращаетГде работает
СтрокаСоединенияИнформационнойБазы()строку подключения текущей базыклиент и сервер
КаталогВременныхФайлов()временный каталог пользователя ОСклиент и сервер
КаталогПрограммы()каталог bin запущенной платформыклиент и сервер
КаталогДокументов()папку «Документы» пользователяклиент
РабочийКаталогДанныхПользователя()рабочий каталог 1С для пользователяклиент
ПолучитьИмяВременногоФайла("xml")уникальное имя файла во временном каталогеклиент и сервер

Каталог файловой базы из кода

Строка подключения имеет формат «ключ=значение;», а функция НСтр() умеет вытаскивать из таких строк значение по ключу:

СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
КаталогБазы = НСтр(СтрокаСоединения, "File");

Если ЗначениеЗаполнено(КаталогБазы) Тогда
    Сообщить("Файловая база: " + КаталогБазы);
Иначе
    Сервер = НСтр(СтрокаСоединения, "Srvr");
    ИмяБазы = НСтр(СтрокаСоединения, "Ref");
    Сообщить("Серверная база " + ИмяБазы + " на " + Сервер);
КонецЕсли;

Если ключа File в строке нет, НСтр() вернёт пустую строку — по этому признаку и отличают файловую базу от клиент-серверной.

Путь, который выбрал пользователь

Самый частый сценарий: пользователь сам указывает файл для загрузки. В управляемом интерфейсе диалог открывается асинхронно, а путь приходит в процедуру оповещения:

&НаКлиенте
Процедура ВыбратьФайл(Команда)
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx";
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Показать(Новый ОписаниеОповещения("ВыборФайлаЗавершение", ЭтотОбъект));
КонецПроцедуры

&НаКлиенте
Процедура ВыборФайлаЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы = Неопределено Тогда
        Возврат; // пользователь нажал «Отмена»
    КонецЕсли;
    ПутьКФайлу = ВыбранныеФайлы[0];
    Сообщить("Выбран файл: " + ПутьКФайлу);
КонецПроцедуры

Тот же путь после выбора лежит в свойстве Диалог.ПолноеИмяФайла. Если пользователь отменил выбор, в процедуру придёт Неопределено, и это надо проверять первым делом.

Объект «Файл»: имя, каталог, расширение

Когда полный путь уже есть, объект Файл разбирает его на части и сообщает о файле всё нужное. Конструктор принимает строку пути, сам файл при этом не открывается и не создаётся.

Файл = Новый Файл("C:\Обмен\выгрузка_01.xml");

Если Файл.Существует() Тогда
    Сообщить("Полное имя: " + Файл.ПолноеИмя);       // C:\Обмен\выгрузка_01.xml
    Сообщить("Каталог: " + Файл.Путь);               // C:\Обмен\
    Сообщить("Имя: " + Файл.Имя);                    // выгрузка_01.xml
    Сообщить("Без расширения: " + Файл.ИмяБезРасширения); // выгрузка_01
    Сообщить("Расширение: " + Файл.Расширение);      // .xml
    Сообщить("Размер, байт: " + Формат(Файл.Размер(), "ЧГ=0"));
Иначе
    Сообщить("Файл не найден: " + Файл.ПолноеИмя);
КонецЕсли;

Что полезно запомнить:

  • 📁 Путь возвращает каталог с разделителем на конце, поэтому имя к нему приклеивают без лишнего \;
  • 🔤 Расширение начинается с точки: .xml, а не xml;
  • ✅ Существует(), ЭтоФайл(), ЭтоКаталог(), Размер() — методы, со скобками; ПолноеИмя, Путь, Имя — свойства, без скобок;
  • 🕒 дату изменения отдаёт метод ПолучитьВремяИзменения().

Поиск файлов в каталоге

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

НайденныеФайлы = НайтиФайлы("C:\Обмен", "*.xml", Истина);
Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
    Если НайденныйФайл.ЭтоФайл() Тогда
        Сообщить(НайденныйФайл.ПолноеИмя);
    КонецЕсли;
КонецЦикла;

Функция возвращает массив объектов Файл, так что у каждого элемента сразу доступны все свойства из примера выше.

Создание каталога перед записью

Запись в несуществующую папку завершится ошибкой. Перед выгрузкой проверьте каталог и при необходимости создайте его:

КаталогВыгрузки = "C:\Обмен\Отчеты";
Каталог = Новый Файл(КаталогВыгрузки);
Если Не Каталог.Существует() Тогда
    СоздатьКаталог(КаталогВыгрузки);
КонецЕсли;

Где лежит внешний отчёт или обработка

У внешних отчётов (.erf) и обработок (.epf) путь нужен в двух случаях: чтобы найти сам файл и чтобы обработка знала, откуда она запущена — например, чтобы прочитать настройки из соседнего файла.

Открыли через «Файл → Открыть»

Платформа хранит путь, из которого открыт объект, в свойстве ИспользуемоеИмяФайла. В модуле объекта внешней обработки:

ПутьКОбработке = ЭтотОбъект.ИспользуемоеИмяФайла;
ФайлОбработки = Новый Файл(ПутьКОбработке);
КаталогОбработки = ФайлОбработки.Путь;

В модуле формы то же самое получают через реквизит Объект на сервере: РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла.

Подключили через «Дополнительные отчёты и обработки»

В типовых конфигурациях на БСП внешние обработки обычно регистрируют в справочнике дополнительных отчётов и обработок (в БП: Администрирование → Печатные формы, отчёты и обработки). Тогда файл загружается внутрь базы, а исходный файл на диске больше не используется.

У зарегистрированной обработки ИспользуемоеИмяФайла указывает не на исходный файл, а на временную копию или внутренний адрес. Читать «соседние» файлы по этому пути бессмысленно — их там нет. Храните настройки в самой базе.

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

Сетевые папки и UNC-пути

Путь вида \\fileserver\obmen\in называется UNC-путём. Он указывает папку на другом компьютере напрямую, без буквы диска. Для 1С это самый надёжный способ работать с общими папками.

Почему буква диска подводит

Подключённый сетевой диск (Z:\) существует только в сеансе того пользователя Windows, который его подключил. Если код выполняется на сервере 1С, он работает от имени учётной записи службы, обычно USR1CV8. У этой учётной записи диска Z: нет, и путь Z:\obmen для неё пуст.

Где выполняется кодЧья файловая системаКакой путь писать
&НаКлиенте, тонкий клиенткомпьютер пользователялокальный или UNC
&НаСервере, файловая базакомпьютер пользователя (сервер — тот же процесс)локальный или UNC
&НаСервере, клиент-серверная базасервер 1Столько UNC или локальный путь сервера
регламентное заданиесервер 1Столько UNC или локальный путь сервера

Права на сетевую папку

Мало написать UNC-путь — у учётной записи, от которой работает код, должны быть права на эту папку. Для серверного кода это учётная запись службы агента сервера 1С. Права выдают на двух уровнях: на общий ресурс и на саму папку (вкладка «Безопасность» в свойствах папки).

Проверить путь удобно так: откройте Выполнить (Win+R) на сервере, вставьте UNC-путь и нажмите Enter. Если под учётной записью администратора папка открывается, а 1С её не видит — дело в правах службы.

Сервер 1С на Linux вообще не понимает пути Windows. Сетевую папку там монтируют в файловую систему (например, в /mnt/obmen), и в коде пишут уже этот путь.

Системные каталоги: временные файлы, документы, программа

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

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ТабличныйДокумент.Записать(ИмяВременногоФайла, ТипФайлаТабличногоДокумента.XLSX);
// ... отправили, передали ...
УдалитьФайлы(ИмяВременногоФайла);

ПолучитьИмяВременногоФайла() гарантирует уникальное имя, поэтому два пользователя на одном сервере не перезапишут файлы друг друга. Удаление после использования — на совести разработчика: платформа временные файлы сама не чистит.

Другие каталоги, которые часто нужны:

  • 🖥️ КаталогПрограммы() — папка bin запущенной платформы, например C:\Program Files\1cv8\8.3.24.1548\bin\. Номер в пути совпадает с версией платформы, которую видно в «О программе»;
  • 📄 КаталогДокументов() — «Документы» пользователя; удобное место по умолчанию для сохранения выгрузок с клиента;
  • 🗂️ РабочийКаталогДанныхПользователя() — служебная папка 1С в профиле пользователя.

Для получения системных путей без кода подойдут переменные среды Windows: %TEMP% — временный каталог, %APPDATA%\1C\1cv8 — кэш и настройки клиента 1С, %LOCALAPPDATA%\1C\1cv8 — локальные служебные данные платформы.

Веб-клиент — отдельный случай

В браузере код 1С не имеет прямого доступа к диску пользователя, поэтому Новый Файл("C:\…") на клиенте там не работает так же, как в тонком клиенте. Файлы передают через временное хранилище: пользователь выбирает файл, его содержимое попадает на сервер методами вроде НачатьПомещениеФайлаНаСервер(), и дальше с ним работают уже серверным путём.

Частые ошибки при работе с путями

Диагностика: выберите симптом

Ещё две ловушки, о которых узнают уже в работе:

  1. Длинные пути. В Windows классический лимит пути — 260 символов. Глубоко вложенные папки с длинными русскими названиями упираются в него быстрее, чем кажется. Держите каталоги обмена короткими: D:\Obmen\In вместо длинной цепочки папок рабочего стола.
  2. Кириллица и пробелы в пути. Сама 1С с ними работает нормально, но внешние компоненты и командные файлы, которые 1С запускает через ЗапуститьПриложение(), иногда ломаются. Путь с пробелами в командной строке заключайте в кавычки.

Для кроссплатформенного кода разделитель берите из платформы, а не пишите вручную:

Разделитель = ПолучитьРазделительПути(); // "\" в Windows, "/" в Linux
ПолноеИмя = КаталогВременныхФайлов() + "obmen" + Разделитель + "data.xml";

КаталогВременныхФайлов() возвращает путь с разделителем на конце, поэтому перед obmen второй разделитель не нужен.

Частые вопросы

Можно ли узнать путь к серверной базе на диске сервера?
Нет, у клиент-серверной базы нет одного файла. Данные лежат в СУБД (MS SQL, PostgreSQL), а 1С знает только имя сервера и имя базы в кластере.
Где искать базу, если в окне запуска её нет?
Ищите на дисках файлы 1Cv8.1CD поиском Windows. Каталог, где лежит найденный файл, и есть путь к базе — его добавляют в список кнопкой Добавить….
Как скопировать путь к базе одной строкой?
Откройте %APPDATA%\1C\1CEStart\ibases.v8i Блокнотом и скопируйте значение после File= в нужной секции.
Почему путь внешней обработки меняется при каждом запуске?
Обработка зарегистрирована в справочнике дополнительных обработок, и платформа каждый раз разворачивает её во временный файл. Исходный файл база не использует.
Нужен ли путь к файлу, чтобы загрузить его в веб-клиенте?
Нет. Браузер не отдаёт 1С путь на диске, только содержимое выбранного файла. Работать приходится с адресом во временном хранилище.