Как исправить ошибку «Право удаления не применимо к РегистрСведений» при открытии обработок V8Exchan83 и MD83Exp

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

При активной работе с конфигурацией «Конвертация данных, редакция 2.1» многие специалисты сталкиваются со сбоями при попытке открыть вспомогательные внешние обработки. Наиболее распространенной среди них является ошибка: «Право удаления не применимо к РегистрСведений...» (или аналогичное предупреждение для регистров расчета и бухгалтерии). Эта ошибка блокирует запуск обработок V8Exchan83.epf (Универсальный обмен данными XML) или MD83Exp.epf (Выгрузка описания метаданных конфигурации).

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

Выясняем причину возникновения ошибки

Для того чтобы эффективно решить проблему, нам необходимо понять физический смысл происходящего в коде. Внутренняя архитектура платформы «1С:Предприятие» устроена так, что разные объекты метаданных обладают уникальными наборами прав доступа. Например, для документов, справочников или планов видов характеристик доступно право Удаление. Однако для таких объектов, как регистры (сведений, накопления, расчета, бухгалтерии), права на непосредственное интерактивное или программное «удаление» объекта в целом не существует. Данные в регистрах регулируются правами Изменение или Редактирование.

В устаревших версиях платформы 1С (ранних релизах ветки 8.3 и более старых версиях 8.2) вызов функции ПравоДоступа("Удаление", Метаданные.РегистрыСведений.ИмяРегистра) отрабатывал корректно с точки зрения стабильности приложения. Система не вызывала критических сбоев, а просто возвращала булево значение Ложь. Это позволяло старым обработкам безболезненно обходить несовместимые объекты метаданных.

В современных версиях платформы правила контроля типов стали значительно жестче. Теперь при попытке проверить право, которое логически не применимо к конкретному классу объектов метаданных, платформа генерирует неустранимое исключение, аварийно завершая работу выполняемого программного модуля. Именно поэтому при переборе коллекции всех объектов конфигурации старый код обработок КД ломается на первом же регистре сведений.

Давайте рассмотрим подробнее, как исправить эту ошибку своими силами.

Способ 1. Использование безопасной конструкции «Попытка — Исключение»

Этот способ является наиболее универсальным и быстрым, так как позволяет не перечислять вручную все неподходящие типы метаданных. Мы предоставим платформе возможность совершить проверку, но в случае возникновения ошибки система просто проигнорирует ее и продолжит работу.

Выполним следующие шаги для изменения кода обработки:

  1. Откройте конфигуратор вашей базы данных (или любую пустую файловую базу).
  2. Через меню «Файл» — «Открыть» выберите проблемную внешнюю обработку (например, V8Exchan83.epf).
  3. Перейдите в модуль объекта обработки или модуль формы (в зависимости от того, где именно падает система).
  4. Используйте глобальный поиск по тексту (комбинация клавиш Ctrl + Shift + F внутри обработки), введя поисковый запрос: ПравоДоступа("Удаление".
  5. Найдите строку, которая выглядит примерно так: ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
  6. Замените этот фрагмент кода на конструкцию с обработкой исключения:
    
    ДоступноУдаление = Ложь;
    Попытка
        ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
    Исключение
        // Если право не применимо к данному типу метаданных, просто игнорируем ошибку
        ДоступноУдаление = Ложь;
    КонецПопытки;
    
  7. Сохраните изменения в обработке и запустите ее заново в режиме «1С:Предприятие».

Способ 2. Явная проверка типа объекта метаданных перед вызовом функции

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

Проанализируем пример кода для реализации этого подхода:

  1. Найдите цикл перебора метаданных в модуле обработки. Обычно он выглядит так:
    
    Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл
        // Код проверки прав
    КонецЦикла;
    
    Или выполняется общий обход всех коллекций метаданных в едином цикле.
  2. Добавьте проверку типа метаданных перед вызовом функции проверки прав. Код должен выглядеть следующим образом:
    
    // Проверяем, не является ли объект регистром, для которого право "Удаление" не имеет смысла
    Если Метаданные.РегистрыСведений.Содержит(ОбъектМД) 
       Или Метаданные.РегистрыРасчета.Содержит(ОбъектМД) 
       Или Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД) 
       Или Метаданные.РегистрыНакопления.Содержит(ОбъектМД) Тогда
        
        // Для всех видов регистров принудительно устанавливаем Ложь и идем дальше
        ДоступноУдаление = Ложь;
    Иначе
        // Для справочников, документов и прочих объектов проверяем стандартно
        ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
    КонецЕсли;
    
  3. Данный подход гарантирует стабильность работы алгоритма на любых релизах платформы 1С:Предприятие 8.3.

Способ 3. Использование встроенной обработки «Универсальный обмен данными XML»

Мало кто из начинающих разработчиков знает, что внешняя обработка V8Exchan83.epf уже давно не является единственным инструментом для выгрузки и загрузки данных по правилам обмена. Фирма «1С» интегрировала этот инструмент непосредственно в состав Библиотеки Стандартных Подсистем (БСП), на которой построены практически все современные типовые конфигурации (Бухгалтерия предприятия 3.0, Управление торговлей 11, ERP, ЗУП 3 и другие).

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

Давайте разберем по шагам, как запустить этот инструмент внутри вашей рабочей конфигурации:

  1. Запустите целевую информационную базу (например, «Бухгалтерия предприятия») в режиме «1С:Предприятие».
  2. Перейдите в главное меню программы, выберите раздел «Сервис и настройки» (в правом верхнем углу окна программы) — «Функции для технического специалиста» (в старых версиях этот пункт назывался «Все функции»).
  3. Если данный пункт меню скрыт, включите его отображение через «Сервис и настройки» — «Параметры» — установить флажок «Режим технического специалиста».
  4. В открывшемся окне в строке поиска введите фразу: Универсальный обмен данными.
  5. Система отобразит вам встроенную обработку «Универсальный обмен данными в формате XML». Откройте ее.
  6. Эта обработка визуально и функционально полностью идентична внешней обработке V8Exchan83.epf, но при этом работает без каких-либо ошибок инициализации прав доступа.

Полезный совет: Если вам критически важно иметь эту обработку именно в виде отдельного внешнего файла (например, для работы в базах, находящихся на поддержке без возможности изменения конфигурации, или на очень старых кастомных конфигурациях), вы можете извлечь ее. Для этого откройте конфигурацию-донор (любую современную базу БСП) в конфигураторе, найдите в ветке «Обработки» объект УниверсальныйОбменДаннымиXML, нажмите на него правой кнопкой мыши и выберите пункт «Сохранить как внешнюю обработку...». Полученный файл будет стабильно работать на любой современной платформе.

← На главную