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

Разработка и Конфигурация · 9 мин

Как создать каталог на диске в 1С

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

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

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

Базовый метод СоздатьКаталог

Основной инструмент — глобальный метод СоздатьКаталог(ИмяКаталога). В параметре передаётся полный или относительный путь. При успешном выполнении папка появляется на диске, при ошибке (нет прав, недопустимые символы, несуществующий родительский путь) вызывается исключение.

bsl
Процедура СоздатьПапкуВыгрузки()
	ПутьККаталогу = "D:\Обмен\Выгрузка";
	Попытка
		СоздатьКаталог(ПутьККаталогу);
		Сообщить("Каталог создан: " + ПутьККаталогу);
	Исключение
		Сообщить("Ошибка: " + ОписаниеОшибки());
	КонецПопытки;
КонецПроцедуры

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

Проверка существования каталога перед созданием

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

bsl
Функция КаталогСуществует(Путь)
	Найденные = НайтиФайлы(Путь, "*");
	Если Найденные.Количество() > 0 Тогда
		Возврат Найденные[0].ЭтоКаталог();
	КонецЕсли;
	// Проверка самого пути как каталога
	Файл = Новый Файл(Путь);
	Возврат Файл.Существует();
КонецФункции

Более простой вариант — объект Файл: конструктор принимает путь, а метод Существует() возвращает Истина, если такой файл или каталог есть на диске. Для различения файла и папки используйте метод ЭтоКаталог().

Типовой шаблон «создать, если нет» выглядит так: проверили через Новый Файл(Путь), при отсутствии вызвали СоздатьКаталог, результат обернули в Попытка/Исключение. Это защищает от гонок, когда папку создаёт другой процесс между проверкой и созданием.

Создание вложенной структуры каталогов

Для построения цепочки вида D:\Архив\2026\Январь путь разбивают на части и создают каждый уровень последовательно. Удобно написать универсальную процедуру, которую затем вызывать из любого места конфигурации.

bsl
Процедура СоздатьКаталогРекурсивно(ПолныйПуть)
	Разделитель = ПолучитьРазделительПути();
	Части = СтрРазделить(ПолныйПуть, Разделитель);
	ТекущийПуть = "";
	Для Каждого Часть Из Части Цикл
		ТекущийПуть = ?(ТекущийПуть = "", Часть, ТекущийПуть + Разделитель + Часть);
		Файл = Новый Файл(ТекущийПуть);
		Если Не Файл.Существует() Тогда
			СоздатьКаталог(ТекущийПуть);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функция ПолучитьРазделительПути() возвращает «\» для Windows и «/» для Linux, что делает код переносимым между серверами на разных ОС. Не зашивайте обратный слэш в строки жёстко, если база может работать на Linux-сервере.

Порядок действий
  1. 1
    Сформируйте полный путь к нужному каталогу
  2. 2
    Проверьте существование через Новый Файл(Путь)
  3. 3
    Создайте недостающие уровни по очереди
  4. 4
    Оберните создание в Попытка/Исключение
  5. 5
    Проверьте результат повторным вызовом Существует()

Выбор пути пользователем через диалог

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

bsl
&НаКлиенте
Процедура ВыбратьКаталог(Команда)
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	Диалог.Заголовок = "Выберите папку для выгрузки";
	Если Диалог.Выбрать() Тогда
		ПутьВыгрузки = Диалог.Каталог;
	КонецЕсли;
КонецПроцедуры

После выбора имеет смысл сразу проверить доступность папки на запись: создать в ней временный файл и удалить его. Это отсечёт ситуации, когда пользователь указал защищённый системный каталог вроде C:\Windows.

Где выполняется код: клиент или сервер

Ключевой нюанс — место создания каталога. Код с директивой &НаКлиенте создаёт папку на компьютере пользователя, а &НаСервере — на сервере 1С под учётной записью агента сервера (обычно USR1CV8). Частая ошибка новичка — создать папку на сервере и искать её на своём компьютере.

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

Маршрут решения

Как выбрать действие

Файл нужен пользователю на его компьютереСоздавайте каталог на клиенте через диалог выбора папки
Каталог нужен регламентному заданию или обменуСоздавайте на сервере, проверив права учётной записи агента 1С
База файловая и работает один пользовательПодойдёт любой вариант — клиент и сервер совпадают
Нужна временная папка на время операцииИспользуйте КаталогВременныхФайлов() и удалите файлы после работы

Временные каталоги и очистка

Для промежуточных файлов удобна функция КаталогВременныхФайлов() — она возвращает путь к системной папке временных файлов. В ней можно создать подкаталог с уникальным именем, например через Новый УникальныйИдентификатор.

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

Типичные ошибки
01
Создание вложенного пути одним вызовом — метод не создаёт промежуточные папки и выдаёт ошибку
02
Отсутствие проверки существования — исключение при повторном запуске процедуры
03
Создание папки на сервере, когда она нужна на клиенте, — пользователь не находит результат
04
Жёстко прописанный разделитель «\» — код ломается при переносе на Linux-сервер
05
Недопустимые символы в имени (двоеточие, вопросительный знак) — ошибка создания каталога

Проверка результата и типичные ошибки

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

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

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

Существование папки
Норма

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

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

Исключение при создании или Ложь после вызова

Тип объекта
Норма

ЭтоКаталог() = Истина

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

Это файл с таким же именем — путь занят

Доступ на запись
Норма

Тестовый файл создаётся и удаляется

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

Ошибка доступа — не хватает прав учётной записи

Если ошибка возникает только на сервере, первым делом проверьте права учётной записи агента сервера 1С на целевую папку. Вторая частая причина — сетевой путь: служба сервера 1С может не иметь доступа к сетевым ресурсам, подключённым как диски интерактивного пользователя. Используйте UNC-пути вида \\Сервер\Ресурс\Папка и выдайте права именно служебной учётной записи.

Итог

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

Каталог создаётся методом СоздатьКаталог с предварительной проверкой через объект Файл. Вложенные пути строятся поуровнево, код оборачивается в Попытка/Исключение, а место выполнения (клиент или сервер) выбирается исходя из того, кому нужен результат.

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

Как создать каталог, если путь содержит пробелы?

Пробелы в пути не мешают работе СоздатьКаталог — передавайте строку как есть, без кавычек и экранирования. Кавычки нужны только при передаче пути в командную строку через КомандаСистемы() или ЗапуститьПриложение().

Почему СоздатьКаталог выдаёт ошибку, хотя папки нет?

Чаще всего не существует родительский каталог — метод не создаёт промежуточные уровни. Также проверьте недопустимые символы в имени (двоеточие, звёздочка, вопросительный знак) и права учётной записи, под которой выполняется код.

Как создать каталог на сетевом диске?

Используйте UNC-путь вида \\Сервер\Ресурс\Папка. Буква сетевого диска, подключённая пользователем, недоступна службе сервера 1С. Убедитесь, что у учётной записи агента сервера есть права на сетевой ресурс.

Можно ли создать каталог в веб-клиенте?

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

Как удалить созданный каталог вместе с содержимым?

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

Чем КаталогВременныхФайлов отличается от КаталогПрограммы?

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