При работе в крупных базах данных 1С:ERP Управление предприятием (а также 1С:Комплексная автоматизация или 1С:Управление торговлей) пользователи часто сталкиваются с аппаратными и программными ограничениями прав. Одной из наиболее распространенных и неприятных проблем является внезапный сбой при импорте банковских документов. В процессе загрузки выписки система неожиданно прерывает операцию и возвращает критическую ошибку: «У пользователя недостаточно прав на исполнение операции над базой данных».
Особенно парадоксальной ситуация выглядит тогда, когда у пользователя (например, бухгалтера или казначея) настроены права на его рабочую организацию, и до определенного момента загрузка проходила без каких-либо замечаний. В рамках данной статьи мы подробно разберем, почему возникает эта ошибка, как провести ее глубокую диагностику и какие архитектурные решения помогут раз и навсегда устранить проблему без создания дыр в безопасности данных предприятия.
Прежде чем вносить изменения в настройки прав или конфигурацию, нам необходимо точно выяснить, на каком именно объекте спотыкается система. Ошибка СУБД указывает на жесткий отказ на уровне ограничения доступа к записям (RLS). Выяснить детальную информацию нам поможет стандартный инструмент администратора.
Рассмотрим пошагово, как локализовать ошибку:
Документ.СписаниеБезналичныхДенежныхСредств или Документ.ПоступлениеБезналичныхДенежныхСредств, реже — к связанным регистрам сведений или справочнику банковских счетов.Выявив проблемный объект, мы можем перейти к анализу причин срабатывания ограничений.
Ограничение доступа на уровне записей (RLS) в 1С работает непосредственно на уровне СУБД, модифицируя исходные SQL-запросы платформы. Если у пользователя включен RLS по организациям, то даже при наличии полных ролей «Казначей» или «Бухгалтер» система физически блокирует чтение или запись строк таблиц, не удовлетворяющих условиям ограничений.
Выясним основные методологические и технические причины возникновения этой ошибки:
1. Межфирменные расчеты (Intercompany). Это самая частая причина при загрузке банковской выписки. Если в импортируемом файле содержится платежное поручение на перевод денежных средств между вашими собственными организациями (например, перевод с расчетного счета Организации А на счет Организации Б), система пытается создать или обновить связанные документы. Если у пользователя есть доступ только к Организации А, то при попытке записать документ, где фигурирует Организация Б, СУБД мгновенно заблокирует транзакцию. При необходимости можно применить расширение для выборочной загрузки безналичных платежей в 1С:ERP.
2. Запись промежуточных пустых значений. В процессе чтения файла выписки и создания документов в памяти (или при записи их в качестве черновиков со статусом «Не проведен») некоторые реквизиты могут оставаться незаполненными. Если в шаблонах ограничений группы доступа не прописано разрешение на чтение и запись объектов с пустой организацией (значение NULL или ПустаяСсылка), то попытка сохранить такой недозаполненный документ вызовет отказ в доступе.
3. Использование производительного режима RLS. В современных конфигурациях на базе БСП применяется производительный режим работы RLS. Права доступа рассчитываются системой предварительно и записываются в специальные служебные регистры (например, РегистрСведений.КлючиДоступаКДанным). При пакетной загрузке большого объема документов ключи доступа могут не успеть рассчитаться вовремя, из-за чего легитимный документ блокируется системой как недоступный.
4. Ограничения на связанные справочники. При загрузке выписки программа не только создает документы движения денежных средств, но и автоматически регистрирует новых контрагентов, создает их банковские счета и заполняет аналитики. Если на один из этих связанных справочников наложено ограничение, к которому у пользователя нет прав, загрузка завершится аварийно.
Простое предоставление пользователю прав на «все организации» решает техническую проблему, но нарушает регламенты информационной безопасности предприятия. Рассмотрим архитектурно правильные способы устранения этой ошибки.
Поскольку банковская выписка по сути является сквозным техническим файлом, содержащим операции по разным расчетным счетам (а часто и разным юридическим лицам), ограничивать права на этапе самого импорта неэффективно. Проанализируем оптимальную схему организации процесса:
Если проблема вызвана наличием пустых реквизитов при создании черновых документов, необходимо настроить профили групп доступа:
В случае, если ошибка носит «плавающий» характер (появляется периодически после обновлений системы или массовых изменений прав), имеет место рассинхронизация ключей доступа. Для ее устранения выполним следующие действия:
ОбновлениеКлючейДоступаКДанным вручную.Если загрузка выписок выполняется через кастомную обработку или API, программисту необходимо убедиться, что создание, первоначальный поиск и запись документов выполняются во временном привилегированном режиме, который отключает проверку ограничений RLS на время выполнения транзакции.
Рассмотрим пример кода для безопасного отключения проверок прав при выполнении служебных алгоритмов поиска и записи:
УстановитьПривилегированныйРежим(Истина);
// Выполняем поиск контрагента, создание договора или создание черновика документа
ДокументОбъект = Документы.СписаниеБезналичныхДенежныхСредств.СоздатьДокумент();
// Заполнение реквизитов документа...
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
УстановитьПривилегированныйРежим(Ложь);
Использование конструкции УстановитьПривилегированныйРежим(Истина) позволяет временно обойти ограничения прав RLS на этапе технического формирования структуры документа. При этом окончательное проведение документа пользователем все равно будет контролироваться системой в обычном режиме, что гарантирует соблюдение безопасности данных.
Таким образом, комбинируя методологические настройки разнесения выписок и правильную конфигурацию ограничений RLS, можно полностью исключить возникновение ошибок СУБД при работе с банковскими документами в 1С:ERP. Для корректной настройки ограничений можно использовать расширение для исправления RLS по организациям в 1С:ERP.