Как создать каталог на сервере 1С:Предприятие 8.2 из обычного приложения?

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

Часто в процессе разработки на платформе 1С:Предприятие 8.2 возникает задача по управлению файловой системой непосредственно на сервере. При использовании «Обычного приложения» многие разработчики сталкиваются с тем, что код, написанный в модуле формы, выполняется на стороне клиента, а не сервера. В результате попытки создания папок или файлов приводят к ошибкам доступа или созданию объектов не в том месте, где ожидалось.

Разберемся, как правильно настроить выполнение кода, чтобы создание каталогов происходило от имени учетной записи, под которой работает служба «Агент сервера 1С» (обычно это usr1cv8).

Понимание контекста выполнения

Прежде чем приступать к написанию кода, важно уяснить фундаментальное различие: в архитектуре «Обычного приложения» директивы компиляции (такие как &НаСервере) работают иначе, чем в управляемых формах. Если вы просто добавите &НаСервере в модуль формы обычного приложения, среда не гарантирует перенос выполнения на серверный процесс rphost.exe. Более того, при вызове серверной процедуры из клиентской напрямую часто возникают ошибки, так как клиентский контекст не видит серверный.

Решение: использование серверных общих модулей

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

  1. Откройте конфигуратор вашей базы данных.
  2. Перейдите в ветку «Общие» -> «Общие модули».
  3. Создайте новый модуль, например, с именем РаботаСФайламиСервер.
  4. В свойствах модуля установите следующие флаги:
    • Сервер — обязательно (включает доступ к серверным методам).
    • Вызов сервера — обязательно (позволяет вызывать процедуры модуля из клиентского кода).
    • Клиент (обычное приложение) — ВАЖНО: снимите этот флаг.

После того как мы правильно настроили модуль, процесс выполнения кода гарантированно перейдет в контекст сервера. Давайте посмотрим на пример реализации.

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

Теперь создадим внутри нашего общего модуля РаботаСФайламиСервер экспортную процедуру, которая будет отвечать за создание папки на диске сервера.


// В общем модуле РаботаСФайламиСервер
Процедура СоздатьКаталогНаСервере(ПутьККаталогу) Экспорт
    
    Файл = Новый Файл(ПутьККаталогу);
    
    Если Не Файл.Существует() Тогда
        СоздатьКаталог(ПутьККаталогу);
    КонецЕсли;
    
КонецПроцедуры

Теперь мы можем вызвать эту процедуру из модуля объекта или модуля формы (клиентской части) следующим образом:


// Вызов из модуля формы или объекта
Путь = "C:\Uploads\Documents";
РаботаСФайламиСервер.СоздатьКаталогНаСервере(Путь);

Почему это работает правильно?

При использовании общего модуля с флагом Вызов сервера, платформа 1С автоматически передает выполнение задачи на сервер. Так как процедура находится в модуле, помеченном как Серверный, она исполняется процессом rphost.exe. Этот процесс всегда работает под системной учетной записью (чаще всего usr1cv8).

Таким образом, папка будет создана с правами доступа именно этой учетной записи. Это решает проблему «отсутствия доступа», так как физически за создание папки отвечает не пользователь, сидящий за компьютером, а сама служба сервера 1С.

Ключевые рекомендации при работе с файлами

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

Используя данный подход, вы сможете эффективно управлять файловой структурой из 1С 8.2, обеспечивая стабильную работу серверной части приложения.

← На главную