Разработка и Конфигурация · 10 мин
1С: как создать папку на диске и проверить результат
Как создать папку на диске из 1С: процедура СоздатьКаталог, проверка существования каталога, права доступа, тонкий и толстый клиент, типичные ошибки и примеры кода.
Создание папки на диске — типовая задача при выгрузке отчётов, обмене файлами с другими системами и архивации данных из 1С. Во встроенном языке для этого предусмотрена процедура СоздатьКаталог(), которая работает на тонком, толстом и веб-клиенте, а также на сервере. Она создаёт каталог по указанному пути, включая все промежуточные уровни вложенности.
Главная сложность не в самой команде, а в контексте выполнения: код, запущенный на сервере, создаёт папку на сервере, а не на компьютере пользователя. Кроме того, нужно учитывать права учётной записи, под которой работает процесс, и корректно обрабатывать ситуацию, когда каталог уже существует.
Ниже разобраны синтаксис процедуры, проверка существования папки, отличия клиентского и серверного выполнения, работа с путями, типичные ошибки и способы проверки результата.
Процедура СоздатьКаталог: синтаксис и базовый пример
Процедура СоздатьКаталог(ИмяКаталога) принимает один параметр — строку с полным или относительным путём к создаваемой папке. Если путь содержит несколько уровней, которых ещё нет на диске, они будут созданы автоматически: например, при вызове с путём C:\Обмен\Выгрузка\Архив будут созданы все три каталога, если их не существовало.
Минимальный пример кода:
СоздатьКаталог("C:\Обмен\Выгрузка");
Если каталог уже существует, ошибки не возникает — процедура просто ничего не делает. Это удобно: не нужно каждый раз проверять наличие папки перед созданием. Однако если путь недоступен (нет прав, диск не существует, путь указывает на файл), будет вызвано исключение, которое стоит перехватить через Попытка...Исключение.
Пример с обработкой ошибок:
Попытка
СоздатьКаталог("C:\Обмен\Выгрузка");
Исключение
Сообщить("Не удалось создать каталог: " + ОписаниеОшибки());
КонецПопытки;
Попытка
СоздатьКаталог("C:\Обмен\Выгрузка");
Исключение
Сообщить("Ошибка: " + ОписаниеОшибки());
КонецПопытки;Как проверить, существует ли папка
Хотя СоздатьКаталог не ругается на существующий каталог, проверка бывает нужна для логики обработки: например, чтобы не перезаписывать файлы или чтобы сообщить пользователю, куда будут выгружены данные. Для этого используется объект Файл и его метод Существует().
Файл = Новый Файл("C:\Обмен\Выгрузка");
Если Не Файл.Существует() Тогда
СоздатьКаталог("C:\Обмен\Выгрузка");
КонецЕсли;
Важный нюанс: метод Существует() вернёт Истина и для файла с таким же именем. Если по пути C:\Обмен\Выгрузка лежит файл без расширения, проверка пройдёт, но работать с этим путём как с папкой не получится. Для строгой проверки дополнительно смотрите метод ЭтоКаталог().
Файл = Новый Файл("C:\Обмен\Выгрузка");
Если Файл.Существует() И Файл.ЭтоКаталог() Тогда
// Папка есть, можно сохранять файлы
КонецЕсли;
Клиент или сервер: где создаётся папка
Это самая частая причина «не работающего» кода. В клиент-серверном режиме код с директивой &НаСервере выполняется на сервере 1С:Предприятия, и папка создаётся на диске сервера, а не на компьютере пользователя. Пользователь открывает «Мой компьютер», не находит папку и считает, что код не сработал.
Если папка нужна на компьютере пользователя (например, для сохранения выгрузки, которую он заберёт себе), создавайте её в контексте &НаКлиенте. Если папка нужна для промежуточной обработки — на сервере, но тогда путь должен быть доступен учётной записи, под которой работает агент сервера 1С (обычно это служебная учётная запись, а не пользователь домена).
Практический вывод: для обмена файлами между клиентом и сервером используйте временное хранилище и передачу двоичных данных, а не «общие» пути, которые каждая сторона понимает по-своему.
Как выбрать место создания папки
Работа с путями: локальные, сетевые и временные каталоги
Локальный путь вида C:\Обмен надёжен, только если код гарантированно выполняется на конкретной машине. Для серверного кода предпочтительнее сетевые пути вида \\Сервер\ОбщаяПапка\Выгрузка — они одинаково доступны с любого узла кластера. Учтите, что служба агента сервера 1С по умолчанию может не иметь доступа к сетевым ресурсам: назначьте ей учётную запись с нужными правами.
Для временных файлов не создавайте папки вручную в системных каталогах — используйте встроенные функции КаталогВременныхФайлов() и ПолучитьИмяВременногоФайла(). Они возвращают корректный путь независимо от операционной системы и настроек.
ВремКаталог = КаталогВременныхФайлов() + "Выгрузка123\";
СоздатьКаталог(ВремКаталог);
Обратите внимание на разделитель пути: в Windows это обратный слэш, в Linux — прямой. Встроенный язык в большинстве случаев корректно обрабатывает оба варианта, но при сборке путей конкатенацией лучше использовать ПолучитьРазделительПути() или завершать путь разделителем явно.
При конкатенации путей легко получить двойной разделитель или его отсутствие. Надёжный приём — формировать путь через КаталогВременныхФайлов() или проверять последний символ строки перед добавлением имени подкаталога.
Права доступа и типичные ограничения
Создание папки завершится ошибкой в нескольких типовых ситуациях: у учётной записи нет прав на запись в родительский каталог, диск переполнен, путь содержит недопустимые символы или указывает на защищённую системную область (например, корень диска C: или Program Files без повышенных прав).
На сервере отдельно проверяйте учётную запись службы агента 1С. Администраторы нередко тестируют путь под своей учётной записью, где всё работает, а регламентное задание под служебной учёткой падает с ошибкой доступа. Проверяйте права именно для той учётной записи, под которой исполняется код.
Ещё одно ограничение — антивирусы и политики контроля приложений, которые могут блокировать создание каталогов процессом rphost или ragent. Если код корректен, права выданы, а ошибка сохраняется, проверьте журналы защитного ПО.
Типичные ошибки и как их избежать
Первая ошибка — создание папки на сервере, когда она нужна на клиенте. Симптом: код выполняется без ошибок, но пользователь папку не видит. Решение — перенести вызов в клиентский контекст или передавать файлы через временное хранилище.
Вторая ошибка — отсутствие обработки исключений. Если каталог обмена недоступен, необработанное исключение прервёт всю операцию выгрузки. Оборачивайте создание каталога в Попытка...Исключение и пишите понятное сообщение с указанием пути.
Третья ошибка — жёстко прописанные пути в коде. Путь C:\Обмен перестанет работать при переезде на другой сервер или при запуске под Linux. Выносите пути в настройки: константы, параметры обмена или регистры сведений.
Проверка результата после создания
После вызова СоздатьКаталог убедитесь, что папка действительно появилась и доступна для записи. Простейшая проверка — повторно создать объект Файл и вызвать Существует() и ЭтоКаталог().
Более строгий способ — попробовать записать тестовый файл в созданную папку и удалить его. Это заодно проверяет права на запись, которых может не быть, даже если папка создалась успешно (например, при наследовании ограниченных прав от родительского каталога).
Как проверить результат
Файл.Существует() и Файл.ЭтоКаталог() возвращают Истина
Существует() = Ложь или по пути находится файл
Тестовый файл создаётся и удаляется без ошибок
Ошибка доступа при записи тестового файла
Пользователь видит папку на своём компьютере
Папка создана на сервере и пользователю недоступна
Что важно запомнить
Папка создаётся процедурой СоздатьКаталог(Путь), которая строит всю цепочку вложенности и не ошибается на существующем каталоге. Ключевые моменты — контекст выполнения (клиент или сервер), права учётной записи, обработка исключений и хранение путей в настройках, а не в коде.
Частые вопросы
Выдаёт ошибку «Ошибка доступа к файлу» при создании каталога. Что делать?
Проверьте, под какой учётной записью выполняется код, и есть ли у неё право записи в родительский каталог. Для серверного кода это учётная запись службы агента сервера 1С. Также убедитесь, что путь не указывает на защищённую системную область и не заблокирован антивирусом.
Можно ли создать сразу несколько уровней вложенных папок?
Да. СоздатьКаталог создаёт всю цепочку промежуточных каталогов за один вызов, например C:\Обмен\2026\Январь — будут созданы все уровни, которых нет. Отдельно создавать каждый уровень не требуется.
Как создать папку на компьютере пользователя в клиент-серверной базе?
Выполните СоздатьКаталог в контексте &НаКлиенте. Код с директивой &НаСервере создаст папку на диске сервера, и пользователь её не увидит. Для передачи готовых файлов пользователю используйте временное хранилище и методы работы с файлами на клиенте.
СоздатьКаталог молча ничего не делает — это ошибка?
Нет. Если каталог по указанному пути уже существует, процедура просто завершается без каких-либо действий и сообщений. Это штатное поведение, дополнительная проверка перед вызовом не обязательна.
Как задать путь, чтобы код работал и в Windows, и в Linux?
Не прописывайте пути в коде — храните их в настройках (константах, регистрах). Для временных каталогов используйте КаталогВременныхФайлов(), а при сборке путей применяйте ПолучитьРазделительПути(), чтобы разделитель соответствовал операционной системе.
Можно ли создать папку на сетевом диске?
Да, укажите UNC-путь вида \\Сервер\Ресурс\Папка. Главное условие — у учётной записи, под которой выполняется код, должны быть сетевые права на этот ресурс. Для служб сервера 1С это часто требует отдельной настройки учётной записи службы.