Как программно создать каталог на диске при записи формы в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При автоматизации документооборота и файловых хранилищ часто возникает задача автоматического создания структуры каталогов на диске при сохранении элемента справочника или документа. Например, при создании карточки контрагента требуется автоматически сформировать подпапку с его наименованием. Разберем типичные ошибки при формировании путей, выясним, как правильно передавать строки с пробелами, и рассмотрим лучшие практики разработки файловых операций в управляемых формах 1С:Предприятия.

Анализ проблемы с кавычками и пробелами в пути

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


&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    // Ошибочный вариант: использование тройных кавычек
    СоздатьКаталог("""D:\ХХХ\ХХХ, ХХХ\Заказчики\""" + Объект.Наименование);
КонецПроцедуры

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

Базовое решение: корректный вызов метода СоздатьКаталог

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


&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    ПутьККаталогу = "D:\ОТО\ОТО, СИО\Заказчики\Оперативно-техническое обслуживание\" + Объект.Наименование;
    СоздатьКаталог(ПутьККаталогу);
КонецПроцедуры

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

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

Рассмотрим по шагам, как сделать создание каталогов безопасным и устойчивым к ошибкам пользователей и операционной системы:

  1. Валидация имени папки: Реквизит Наименование может содержать символы, запрещенные операционной системой (\, /, :, *, ?, ", <, >, |). Перед формированием пути необходимо очистить строку от этих знаков.
  2. Проверка существования каталога: Перед вызовом создания полезно проверить, существует ли уже такая папка, используя объект Файл.
  3. Перехват исключений: Файловые операции могут вызвать ошибку из-за отсутствия прав в NTFS, блокировки диска антивирусом или недоступности сетевого ресурса. Обязательно используем блок Попытка ... Исключение.
  4. Учет контекста выполнения: Вызов &НаКлиенте создает папку на рабочем месте пользователя, а вызов &НаСервере — на сервере 1С:Предприятия под учетной записью службы сервера (например, usr1cv8).

Пример надежной функции с валидацией и обработкой ошибок

Посмотрим на практический пример реализации клиентской процедуры с очисткой запрещенных символов:


&НаКлиенте
Функция ОчиститьИмяОтЗапрещенныхСимволов(Знач Имя)
    Запрещенные = "\/:*?""<>|";
    Для Индекс = 1 По СтрДлина(Запрещенные) Цикл
        Символ = Сред(Запрещенные, Индекс, 1);
        Имя = СтрЗаменить(Имя, Символ, "_");
    КонецЦикла;
    Возврат СокрЛП(Имя);
КонецФункции

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
    ИмяПапки = ОчиститьИмяОтЗапрещенныхСимволов(Объект.Наименование);
    Если ПустаяСтрока(ИмяПапки) Тогда
        Возврат;
    КонецЕсли;
    
    БазовыйПуть = "D:\ОТО\ОТО, СИО\Заказчики\Оперативно-техническое обслуживание\";
    ПолныйПуть = БазовыйПуть + ИмяПапки;
    
    ПроверкаКаталога = Новый Файл(ПолныйПуть);
    Если Не ПроверкаКаталога.Существует() Тогда
        Попытка
            СоздатьКаталог(ПолныйПуть);
        Исключение
            ВызватьИсключение "Не удалось создать каталог """ + ПолныйПуть + """. Описание ошибки: " + ОписаниеОшибки();
        КонецПопытки;
    КонецЕсли;
КонецПроцедуры

Особенности асинхронной работы и веб-клиента

Проанализируем дополнительные нюансы платформы 1С:Предприятие 8.3:

  1. Режим блокировки модальности: В конфигурациях с запретом синхронных вызовов на клиенте рекомендуется использовать асинхронный метод СоздатьКаталогАсинх с конструкцией Ждать или процедуру НачатьСозданиеКаталога с объектом ОписаниеОповещения.
  2. Работа в веб-клиенте: В веб-браузере прямое обращение к локальной файловой системе невозможно без установленного и подключенного расширения работы с файлами (методы ПодключитьРасширениеРаботыСФайлами / УстановитьРасширениеРаботыСФайлами).
  3. Длина пути: В ОС Windows действует ограничение на длину пути (260 символов). При формировании вложенных путей на основе длинных наименований следите за тем, чтобы результирующая длина пути не превышала системный лимит.
← На главную