Как исправить ошибку «Право Удаление не применимо для регистр.сведений АдресныйКлассификатор» при формировании SWIFT-файла

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Финансы и профессиональные услуги
← На главную

При работе с валютными операциями в 1С:Бухгалтерия 3.0 пользователи часто сталкиваются с необходимостью выгрузки данных в формате SWIFT (например, сообщения форматов MT102 или MT103). Одной из наиболее специфических проблем является ошибка прав доступа: «Право Удаление не применимо для регистр.сведений АдресныйКлассификатор». Данная ситуация особенно характерна для серверных баз и определенных релизов конфигурации (например, 3.0.25 и смежных), когда система пытается выполнить очистку или обновление адресных сведений в процессе валидации платежного поручения.

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

Анализируем причину возникновения ошибки

Разберем ситуацию: при нажатии кнопки «Сформировать файл» программа инициирует сложный алгоритм проверки данных контрагента и банка. SWIFT-стандарты требуют строгого соответствия адресов международным правилам. В процессе этой проверки код конфигурации может обращаться к объекту РегистрСведений.АдресныйКлассификатор.

Проанализируем основные причины сбоя:

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

Решение 1: Использование дополнительных обработок выгрузки (MT102/MT103)

Как показывает практика, наиболее эффективным и быстрым способом решения проблемы является использование внешней или дополнительной обработки формирования SWIFT-файла вместо встроенного механизма. Рассмотрим, почему это помогает.

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

Чтобы воспользоваться этим решением, выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Убедимся, что флаг Дополнительные отчеты и обработки включен.
  3. Добавим внешнюю обработку (например, формат выгрузки МТ102), полученную из официальных источников или обновлений банка.
  4. В настройках обработки укажем привязку к документу ПлатежноеПоручение.

Проанализируем, какой фрагмент кода внутри такой обработки позволяет обойти ошибку:


// Пример использования привилегированного режима в коде выгрузки
УстановитьПривилегированныйРежим(Истина);

// Здесь выполняется код, который ранее вызывал ошибку прав
НаборЗаписей = РегистрыСведений.АдресныйКлассификатор.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.КлючСегмента.Установить(ЗначениеСегмента);
НаборЗаписей.Записать(Истина); // Очистка набора записей

УстановитьПривилегированныйРежим(Ложь;

Использование функции УстановитьПривилегированныйРежим(Истина) отключает проверку прав для текущего потока выполнения, что полностью устраняет проблему с «правом на удаление».

Решение 2: Проверка и корректировка прав доступа

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

Разберем алгоритм проверки прав:

  1. Откроем конфигуратор и найдем объект РегистрСведений.АдресныйКлассификатор.
  2. Перейдем на закладку Права.
  3. Проверим, установлена ли галочка Интерактивное удаление или просто Удаление для роли, назначенной главному бухгалтеру.
  4. Если в типовой конфигурации это право снято на уровне метаданных, то даже Тестирование и исправление (ТиИ) не поможет, так как оно не меняет структуру прав доступа.

Важный момент: Прямое изменение прав в типовой конфигурации может привести к трудностям при последующем обновлении. Поэтому метод с внешней обработкой (Решение 1) является более предпочтительным.

Решение 3: Очистка кэша и нормализация данных адресного классификатора

Иногда ошибка вызывается некорректными данными в самом регистре, которые алгоритм выгрузки пытается исправить «на лету». Мы можем попробовать решить проблему превентивно.

Выясним причину через обслуживание данных:

  1. Выполним очистку классификатора через стандартную обработку «Очистка адресных сведений».
  2. Загрузим актуальные сведения ФИАС только для тех регионов, которые используются в адресах ваших банков и контрагентов.
  3. Проверим карточку банковского счета организации. Если адрес банка заполнен вручную (строкой), а не по классификатору, попробуйте перевыбрать его, чтобы ссылки в базе стали корректными.

Рассмотрим, как программно проверить наличие проблемных записей в АдресныйКлассификатор, используя консоль запросов:


ВЫБРАТЬ
    АдресныйКлассификатор.ТипОбъекта,
    АдресныйКлассификатор.Наименование,
    АдресныйКлассификатор.Код
ИЗ
    РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
ГДЕ
    АдресныйКлассификатор.Наименование ПОДОБНО "%Ошибка%"

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

Рекомендации по техническому обслуживанию базы

В сообщениях форума упоминалось, что ТИИ (Тестирование и исправление) не помогло. Это логично, так как ТИИ исправляет ссылочную целостность и структуру таблиц БД, но не логику проверки прав доступа. Тем не менее, при работе в серверном режиме (MS SQL Server или PostgreSQL), рекомендуется выполнить следующие действия:

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

← На главную