Работая с файловыми операциями в среде 1С:Предприятие, многие разработчики сталкиваются с тем, что запись текста в файл, расположенный на сетевом ресурсе, вызывает ошибку: Ошибка совместного доступа к файлу или 32(0x00000020): Процесс не может получить доступ к файлу. Эта проблема становится особенно актуальной, если файл уже существует и требует перезаписи или дозаписи данных.
Давайте вместе разберем, почему это происходит и как эффективно решить данную задачу, не теряя времени на бесконечный поиск причин блокировок на уровне ОС.
Чаще всего проблема кроется в механизме работы объекта ЗаписьТекста. При его инициализации с флагом дозаписи, платформа открывает дескриптор файла в режиме монопольного доступа. Если антивирус, служба индексации Windows или сам протокол SMB (сетевое кэширование) в этот же момент пытаются обратиться к файлу, 1С не может корректно завершить операцию.
Наиболее надежным и проверенным способом обхода данной ошибки является отказ от использования ЗаписьТекста в пользу ТекстовыйДокумент. Этот объект работает иначе: он целиком загружает содержимое файла в память, позволяет манипулировать строками и сохраняет данные обратно, что значительно снижает вероятность возникновения конфликтов блокировок при сетевых операциях.
Рассмотрим пример реализации данного метода:
мФайлПротоколаДанных = Новый ТекстовыйДокумент;
// Считываем существующий файл в объект
мФайлПротоколаДанных.Прочитать(ИмяФайлаПротоколаОбмена);
// Добавляем необходимые данные
мФайлПротоколаДанных.ДобавитьСтроку("123");
// Сохраняем обратно в файл
мФайлПротоколаДанных.Записать(ИмяФайлаПротоколаОбмена, КодировкаТекста.Системная);
Этот метод позволяет полностью избавиться от ошибки доступа, так как объект закрывает соединение с файлом сразу после выполнения метода Записать, не удерживая его в «подвешенном» состоянии.
Если переход на ТекстовыйДокумент невозможен или требуется использование потоковой записи, проанализируем внешние факторы, которые могут блокировать процесс:
Запись, но и право Изменение (Modify). Без права на изменение файловая система может блокировать смену атрибутов или удаление дескриптора.Unlocker или Process Monitor (ProcMon), чтобы точно определить, какой процесс удерживает файл. Часто это оказывается System (в случае кэширования SMB) или Explorer.exe.Если сетевое соединение нестабильно, лучшей практикой будет применение стратегии локальной обработки. Мы рекомендуем:
КаталогВременныхФайлов()).КопироватьФайл() или ПереместитьФайл().Такой подход минимизирует время, в течение которого сетевое соединение остается открытым, что критически важно для работы по сети.
В ходе наших исследований мы выяснили, что ошибка 32 при работе в 1С чаще всего является следствием конфликта блокировок файловой системы Windows. Переход на использование ТекстовыйДокумент для записи протоколов и логов — это наиболее быстрое и эффективное решение, которое позволяет избежать необходимости глубокой настройки прав ОС и сетевых протоколов на каждом отдельном компьютере.