При активной работе с конфигурацией «Конвертация данных, редакция 2.1» многие специалисты сталкиваются со сбоями при попытке открыть вспомогательные внешние обработки. Наиболее распространенной среди них является ошибка: «Право удаления не применимо к РегистрСведений...» (или аналогичное предупреждение для регистров расчета и бухгалтерии). Эта ошибка блокирует запуск обработок V8Exchan83.epf (Универсальный обмен данными XML) или MD83Exp.epf (Выгрузка описания метаданных конфигурации).
В этой статье мы подробно разберем причины возникновения данной неполадки, проанализируем поведение платформы «1С:Предприятие» последних релизов и рассмотрим три надежных способа решения проблемы.
Для того чтобы эффективно решить проблему, нам необходимо понять физический смысл происходящего в коде. Внутренняя архитектура платформы «1С:Предприятие» устроена так, что разные объекты метаданных обладают уникальными наборами прав доступа. Например, для документов, справочников или планов видов характеристик доступно право Удаление. Однако для таких объектов, как регистры (сведений, накопления, расчета, бухгалтерии), права на непосредственное интерактивное или программное «удаление» объекта в целом не существует. Данные в регистрах регулируются правами Изменение или Редактирование.
В устаревших версиях платформы 1С (ранних релизах ветки 8.3 и более старых версиях 8.2) вызов функции ПравоДоступа("Удаление", Метаданные.РегистрыСведений.ИмяРегистра) отрабатывал корректно с точки зрения стабильности приложения. Система не вызывала критических сбоев, а просто возвращала булево значение Ложь. Это позволяло старым обработкам безболезненно обходить несовместимые объекты метаданных.
В современных версиях платформы правила контроля типов стали значительно жестче. Теперь при попытке проверить право, которое логически не применимо к конкретному классу объектов метаданных, платформа генерирует неустранимое исключение, аварийно завершая работу выполняемого программного модуля. Именно поэтому при переборе коллекции всех объектов конфигурации старый код обработок КД ломается на первом же регистре сведений.
Давайте рассмотрим подробнее, как исправить эту ошибку своими силами.
Этот способ является наиболее универсальным и быстрым, так как позволяет не перечислять вручную все неподходящие типы метаданных. Мы предоставим платформе возможность совершить проверку, но в случае возникновения ошибки система просто проигнорирует ее и продолжит работу.
Выполним следующие шаги для изменения кода обработки:
V8Exchan83.epf).Ctrl + Shift + F внутри обработки), введя поисковый запрос: ПравоДоступа("Удаление".
ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
ДоступноУдаление = Ложь;
Попытка
ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
Исключение
// Если право не применимо к данному типу метаданных, просто игнорируем ошибку
ДоступноУдаление = Ложь;
КонецПопытки;
Если вы хотите написать максимально чистый код без использования потенциально замедляющих работу блоков транзакционных попыток, можно применить явную фильтрацию объектов метаданных. Мы проверим, к какому классу относится текущий анализируемый объект, и если это регистр, то просто пропустим проверку права на удаление.
Проанализируем пример кода для реализации этого подхода:
Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл
// Код проверки прав
КонецЦикла;
// Проверяем, не является ли объект регистром, для которого право "Удаление" не имеет смысла
Если Метаданные.РегистрыСведений.Содержит(ОбъектМД)
Или Метаданные.РегистрыРасчета.Содержит(ОбъектМД)
Или Метаданные.РегистрыБухгалтерии.Содержит(ОбъектМД)
Или Метаданные.РегистрыНакопления.Содержит(ОбъектМД) Тогда
// Для всех видов регистров принудительно устанавливаем Ложь и идем дальше
ДоступноУдаление = Ложь;
Иначе
// Для справочников, документов и прочих объектов проверяем стандартно
ДоступноУдаление = ПравоДоступа("Удаление", ОбъектМД);
КонецЕсли;
Мало кто из начинающих разработчиков знает, что внешняя обработка V8Exchan83.epf уже давно не является единственным инструментом для выгрузки и загрузки данных по правилам обмена. Фирма «1С» интегрировала этот инструмент непосредственно в состав Библиотеки Стандартных Подсистем (БСП), на которой построены практически все современные типовые конфигурации (Бухгалтерия предприятия 3.0, Управление торговлей 11, ERP, ЗУП 3 и другие).
Встроенный аналог полностью избавлен от проблемы несовместимости прав доступа, регулярно обновляется силами разработчиков 1С и оптимизирован под актуальные требования безопасности платформы.
Давайте разберем по шагам, как запустить этот инструмент внутри вашей рабочей конфигурации:
Универсальный обмен данными.V8Exchan83.epf, но при этом работает без каких-либо ошибок инициализации прав доступа.Полезный совет: Если вам критически важно иметь эту обработку именно в виде отдельного внешнего файла (например, для работы в базах, находящихся на поддержке без возможности изменения конфигурации, или на очень старых кастомных конфигурациях), вы можете извлечь ее. Для этого откройте конфигурацию-донор (любую современную базу БСП) в конфигураторе, найдите в ветке «Обработки» объект УниверсальныйОбменДаннымиXML, нажмите на него правой кнопкой мыши и выберите пункт «Сохранить как внешнюю обработку...». Полученный файл будет стабильно работать на любой современной платформе.