Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков 1С: при попытке открыть конкретную внешнюю обработку (.epf) или отчет (.erf) в конфигураторе возникает сообщение: «Ошибка совместного доступа к файлу... 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом». При этом другие обработки открываются нормально, а «проблемный» файл успешно работает в пользовательском режиме.
Проанализируем причины этого явления, выясним, почему это происходит именно на платформе версии 8.3.27, и рассмотрим пошаговые инструкции по устранению неисправности.
Код ошибки 32 (0x00000020) — это стандартный код системной ошибки Windows (System Error Code), который означает ERROR_SHARING_VIOLATION. Это происходит, когда один процесс пытается открыть файл для чтения или записи, но другой процесс уже установил на этот файл монопольную блокировку.
В контексте 1С:Предприятие при открытии обработки в конфигураторе происходит следующее:
1cv8.exe считывает файл обработки.%TEMP%).v8_*.tmp.Если на любом из этих этапов сторонний процесс (или сам конфигуратор из-за внутренней ошибки) «перехватывает» файл, мы получаем ошибку совместного доступа.
Как показывает практика и официальные отчеты об ошибках, в версиях 1С:Предприятие 8.3.27 (в частности, в сборке 1859) наблюдается специфическое поведение. Платформа при десериализации (чтении) объектов внешней обработки может некорректно управлять дескрипторами файлов.
Важный момент: в некоторых случаях процесс конфигуратора не успевает закрыть файл после записи во временную директорию перед тем, как снова попытаться его открыть для чтения. Это подтверждается тем, что в более ранних (8.3.25) или более поздних (начиная с 8.3.27.2074) версиях эта проблема устранена. Рассмотрим исправление через обновление как приоритетный вариант.
Посмотрим на путь к файлу в ошибке: C:\Users\ХХХХХХХ\AppData\Local\Temp\236\v8_.... Номер 236 в пути указывает на то, что работа ведется в терминальной сессии (RDP). В таких средах часто работают агрессивные механизмы мониторинга.
Проанализируем потенциальных «виновников»:
.tmp файл, антивирус моментально блокирует его для сканирования. Если файл обработки большой (например, содержит тяжелые макеты или двоичные данные), сканирование затягивается, и 1С получает отказ в доступе.Если файл открывается в пользовательском режиме, но «капризничает» в конфигураторе, попробуем пересобрать его внутреннюю структуру. Для этого выполним программную перезапись файла. Это можно сделать внешней обработкой или через «Консоль кода».
Рассмотрим пример кода для пересохранения:
// Выполняем в пользовательском режиме
ПутьКФайлу = "C:\MyFiles\MyProcessing.epf";
ОбъектОбработки = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
// Создаем копию с другим именем
НовыйПуть = "C:\MyFiles\MyProcessing_Recovered.epf";
ОбъектОбработки.Записать(НовыйПуть);
Сообщить("Файл успешно пересобран: " + НовыйПуть);
Этот метод позволяет 1С самостоятельно перестроить индексы внутри .epf, что часто устраняет логические ошибки формата, которые конфигуратор воспринимает как критические.
Иногда проблема кроется в слишком длинных путях профиля пользователя или ограничениях прав в папке AppData. Попробуем перенаправить временные файлы 1С в корень диска. Разберем, как это сделать:
conf.cfg (обычно в C:\Program Files\1cv8\conf).TemporaryDirectory.Пример содержимого conf.cfg:
ConfLocation=C:\1C_Config
TemporaryDirectory=C:\1C_Temp
Важно: Убедитесь, что у пользователя, под которым запускается 1С, есть полные права на папку C:\1C_Temp. Это часто решает проблемы с доступом в терминальных сессиях.
Если файл настолько «битый», что стандартные средства не помогают, можно прибегнуть к инструментам разработчика (например, подсистеме «Инструменты разработчика» или «ирПлатформа») — для этого подойдёт подсистема Инструменты разработчика для 1С.
Рассмотрим, как можно извлечь содержимое программно, используя методы объектов ИР:
// Использование метода распаковки через сторонние инструменты
// Позволяет извлечь исходники, даже если конфигуратор блокирует файл
ирПлатформа = Обработки.ирОбщий.Создать();
ирПлатформа.РаспаковатьФайлВнешнейОбработки(ПутьКФайлу, ПапкаНазначения);
После распаковки вы сможете создать новую обработку в конфигураторе и поочередно перенести туда формы и модули.
Проанализируем настройки рабочего сервера 1С, если база серверная. В настройках кластера существуют параметры «Ограничение потребления ресурсов».
Если обработка содержит очень большие макеты (например, картинки высокого разрешения или PDF-шаблоны), процесс конфигуратора может превышать лимиты по памяти или времени захвата файлов. Посмотрите в консоли администрирования кластера: не установлены ли слишком жесткие лимиты на объем памяти на один сеанс. Для тяжелых обработок (9–15 Мб и выше) это может быть критично.
Подведем итог нашим действиям. Если вы столкнулись с ошибкой 32 на платформе 8.3.27:
8.3.27.2074 или выше. Это решит проблему в 90% случаев, если она вызвана внутренним багом десериализации.v8_*.tmp и процессы 1cv8.exe, 1cv8s.exe в доверенную зону.ProcMon от Sysinternals, установите фильтр по имени файла v8_ и посмотрите, какой именно процесс (кроме 1cv8.exe) посылает запрос CreateFile или SetInformationFile в этот момент.Следуя этим шагам, мы сможем локализовать проблему и восстановить доступ к разработке внешней обработки.