Почему возникает ошибка совместного доступа при открытии внешней обработки в конфигураторе 1С и как её исправить?

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

Разберем ситуацию, которая часто ставит в тупик даже опытных разработчиков 1С: при попытке открыть конкретную внешнюю обработку (.epf) или отчет (.erf) в конфигураторе возникает сообщение: «Ошибка совместного доступа к файлу... 32(0x00000020): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом». При этом другие обработки открываются нормально, а «проблемный» файл успешно работает в пользовательском режиме.

Проанализируем причины этого явления, выясним, почему это происходит именно на платформе версии 8.3.27, и рассмотрим пошаговые инструкции по устранению неисправности.

Выясняем техническую причину ошибки 32

Код ошибки 32 (0x00000020) — это стандартный код системной ошибки Windows (System Error Code), который означает ERROR_SHARING_VIOLATION. Это происходит, когда один процесс пытается открыть файл для чтения или записи, но другой процесс уже установил на этот файл монопольную блокировку.

В контексте 1С:Предприятие при открытии обработки в конфигураторе происходит следующее:

  1. Процесс 1cv8.exe считывает файл обработки.
  2. Распаковывает его содержимое (внутреннюю структуру 1С:Storage) во временную папку пользователя (%TEMP%).
  3. Создает множество временных файлов с маской v8_*.tmp.
  4. Пытается прочитать эти временные файлы для формирования дерева объектов обработки.

Если на любом из этих этапов сторонний процесс (или сам конфигуратор из-за внутренней ошибки) «перехватывает» файл, мы получаем ошибку совместного доступа.

Анализируем влияние версии платформы 8.3.27

Как показывает практика и официальные отчеты об ошибках, в версиях 1С:Предприятие 8.3.27 (в частности, в сборке 1859) наблюдается специфическое поведение. Платформа при десериализации (чтении) объектов внешней обработки может некорректно управлять дескрипторами файлов.

Важный момент: в некоторых случаях процесс конфигуратора не успевает закрыть файл после записи во временную директорию перед тем, как снова попытаться его открыть для чтения. Это подтверждается тем, что в более ранних (8.3.25) или более поздних (начиная с 8.3.27.2074) версиях эта проблема устранена. Рассмотрим исправление через обновление как приоритетный вариант.

Исключаем влияние защитного ПО и системных служб

Посмотрим на путь к файлу в ошибке: C:\Users\ХХХХХХХ\AppData\Local\Temp\236\v8_.... Номер 236 в пути указывает на то, что работа ведется в терминальной сессии (RDP). В таких средах часто работают агрессивные механизмы мониторинга.

Проанализируем потенциальных «виновников»:

Метод 1: Программное пересохранение обработки

Если файл открывается в пользовательском режиме, но «капризничает» в конфигураторе, попробуем пересобрать его внутреннюю структуру. Для этого выполним программную перезапись файла. Это можно сделать внешней обработкой или через «Консоль кода».

Рассмотрим пример кода для пересохранения:


// Выполняем в пользовательском режиме
ПутьКФайлу = "C:\MyFiles\MyProcessing.epf";
ОбъектОбработки = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
// Создаем копию с другим именем
НовыйПуть = "C:\MyFiles\MyProcessing_Recovered.epf";
ОбъектОбработки.Записать(НовыйПуть);
Сообщить("Файл успешно пересобран: " + НовыйПуть);

Этот метод позволяет 1С самостоятельно перестроить индексы внутри .epf, что часто устраняет логические ошибки формата, которые конфигуратор воспринимает как критические.

Метод 2: Настройка временных папок в conf.cfg

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

  1. Найдите файл conf.cfg (обычно в C:\Program Files\1cv8\conf).
  2. Добавьте или измените параметр TemporaryDirectory.

Пример содержимого conf.cfg:


ConfLocation=C:\1C_Config
TemporaryDirectory=C:\1C_Temp

Важно: Убедитесь, что у пользователя, под которым запускается 1С, есть полные права на папку C:\1C_Temp. Это часто решает проблемы с доступом в терминальных сессиях.

Метод 3: Использование инструментов декомпиляции

Если файл настолько «битый», что стандартные средства не помогают, можно прибегнуть к инструментам разработчика (например, подсистеме «Инструменты разработчика» или «ирПлатформа») — для этого подойдёт подсистема Инструменты разработчика для 1С.

Рассмотрим, как можно извлечь содержимое программно, используя методы объектов ИР:


// Использование метода распаковки через сторонние инструменты
// Позволяет извлечь исходники, даже если конфигуратор блокирует файл
ирПлатформа = Обработки.ирОбщий.Создать(); 
ирПлатформа.РаспаковатьФайлВнешнейОбработки(ПутьКФайлу, ПапкаНазначения);

После распаковки вы сможете создать новую обработку в конфигураторе и поочередно перенести туда формы и модули.

Метод 4: Проверка ограничений сервера

Проанализируем настройки рабочего сервера 1С, если база серверная. В настройках кластера существуют параметры «Ограничение потребления ресурсов».

Если обработка содержит очень большие макеты (например, картинки высокого разрешения или PDF-шаблоны), процесс конфигуратора может превышать лимиты по памяти или времени захвата файлов. Посмотрите в консоли администрирования кластера: не установлены ли слишком жесткие лимиты на объем памяти на один сеанс. Для тяжелых обработок (9–15 Мб и выше) это может быть критично.

Итоговые рекомендации

Подведем итог нашим действиям. Если вы столкнулись с ошибкой 32 на платформе 8.3.27:

  1. Обновите платформу. Первым делом проверьте версию 8.3.27.2074 или выше. Это решит проблему в 90% случаев, если она вызвана внутренним багом десериализации.
  2. Настройте исключения антивируса. Добавьте маску v8_*.tmp и процессы 1cv8.exe, 1cv8s.exe в доверенную зону.
  3. Используйте Process Monitor. Если ошибка сохраняется, запустите утилиту ProcMon от Sysinternals, установите фильтр по имени файла v8_ и посмотрите, какой именно процесс (кроме 1cv8.exe) посылает запрос CreateFile или SetInformationFile в этот момент.
  4. Попробуйте EDT. 1C:Enterprise Development Tools использует другие механизмы импорта объектов и может «проглотить» файл, который не открывается в классическом конфигураторе.

Следуя этим шагам, мы сможем локализовать проблему и восстановить доступ к разработке внешней обработки.

← На главную