При работе в 1С:ERP Управление предприятием пользователи часто сталкиваются с ситуацией, когда при выполнении стандартных операций — например, при формировании Заявления о ввозе товаров из ЕАЭС или проведении Авансового отчета — система выдает сообщение об ошибке: «Недостаточно прав для работы с таблицей РегистрСведений.СуммыДокументовВВалютеРегл». Данная проблема особенно актуальна для релизов линеек 2.4.6 и 2.4.7. В рамках данной статьи мы подробно разберем, почему возникает эта ошибка, как она связана с архитектурой прав доступа 1С и какими способами можно восстановить работоспособность системы для обычных пользователей (бухгалтеров и менеджеров).
Проанализируем ситуацию с точки зрения архитектуры метаданных. Регистр сведений СуммыДокументовВВалютеРегл является вспомогательным (техническим) объектом. В нем система хранит рассчитанные суммы документов в валюте регламентированного учета для целей корректного отражения проводок и формирования отчетности. Разработчики компании 1С в определенный момент приняли решение ограничить прямой доступ к этому регистру, оставив права на него только пользователям с ролью Полные права. Для анализа того, какие роли и профили имеют права на конкретный объект метаданных, можно использовать обработку для анализа прав доступа к объекту.
Замысел разработчиков состоял в том, что чтение и запись в этот регистр должны выполняться исключительно в привилегированном режиме на стороне сервера. Однако в некоторых процедурах, вызываемых напрямую из экранных форм (интерактивно), вызов методов модуля менеджера происходит без установки привилегированного режима. Рассмотрим подробнее, что происходит при нажатии кнопки «Сформировать заявление о ввозе товаров»:
Запрос.Выполнить()), который обращается к таблице регистра СуммыДокументовВВалютеРегл.Эта проблема была официально зарегистрирована как баг под номером 00-00198667. Она затрагивала не только импортные операции, но и работу с Приобретением товаров и услуг, а также Таможенными декларациями.
Самым правильным и безопасным способом решения является обновление 1С:ERP до актуального релиза. Ошибка была исправлена в ветке 2.4, начиная с релиза 2.4.7.141, а также во всех последующих версиях ветки 2.5. В новых версиях разработчики либо пересмотрели состав ролей, добавив права на чтение этого регистра в профиль «Бухгалтер», либо обеспечили гарантированный переход в привилегированный режим при выполнении расчетов. При обслуживании нескольких баз установку релизов и технические работы можно выполнять с помощью программы для автоматического обновления и тестирования баз 1С.
Если ваша конфигурация находится на поддержке и не имеет значительных доработок, это решение будет оптимальным, так как оно устраняет не только симптомы, но и саму причину некорректного поведения кода.
Если оперативное обновление системы невозможно (например, из-за большого количества кастомных доработок или жесткого регламента обновлений), мы можем применить механизм расширений. Это позволит нам не изменять основную конфигурацию и сохранить ее на поддержке.
Разберем по шагам, как создать такое расширение:
СуммыДокументовВВалютеРегл (правой кнопкой на объекте — «Добавить в расширение»). Убирать признак «Проверка значения» не требуется, нам нужно только наличие объекта в дереве расширения.ДоступКТехническимРегистрамВалют.СуммыДокументовВВалютеРегл.Важный момент: Не рекомендуется давать права на «Изменение» или «Запись» этого регистра обычным пользователям. Это может нарушить целостность данных партионного учета и взаиморасчетов. При назначении прав для быстрого включения созданной роли в конфигурации подойдёт обработка для добавления роли в несколько профилей групп доступа.
Для программистов 1С существует более изящный способ, который соответствует идеологии разработчиков 1С. Мы можем создать в расширении Общий модуль с установленным флагом Привилегированный. В этом модуле мы создадим «функцию-обертку», которая будет выполнять обращение к регистру от имени системы, игнорируя ограничения прав пользователя.
Рассмотрим пример кода для такого модуля:
// В привилегированном модуле расширения (например, названном "РаботаСРегистрамиПереопределяемый")
Функция ПолучитьДанныеВалютныхСумм(МассивДокументов) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СуммыДокументов.Регистратор КАК Документ,
| СуммыДокументов.СуммаРегл КАК Сумма
|ИЗ
| РегистрСведений.СуммыДокументовВВалютеРегл КАК СуммаДокументов
|ГДЕ
| СуммыДокументов.Регистратор В(&МассивДокументов)";
Запрос.УстановитьПараметр("МассивДокументов", МассивДокументов);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
После этого нам потребуется через расширение перехватить вызов в модуле менеджера (используя аннотацию &Вместо или &Перед) и заменить прямой запрос к регистру на вызов нашей функции из привилегированного модуля. Это наиболее «чистый» с точки зрения безопасности метод, так как права пользователю не расширяются, но функционал начинает работать.
Стоит отметить, что ошибка с регистром СуммыДокументовВВалютеРегл часто идет в паре с другими подобными проблемами в 1С:ERP 2.4. Например, похожие симптомы могут наблюдаться при работе с механизмами Интеркампани или при распределении постатейных расходов. Если вы решили пойти по пути добавления прав через расширение (Вариант №2), проверьте, не потребуются ли аналогичные права на следующие объекты:
РегистрСведений.ДанныеПервичныхДокументовРегистрСведений.ОтражениеДокументовВРеглУчетеПроанализируем ситуацию: почему 1С допускает такие «детские» ошибки в крупных ERP-системах? Это связано с переходом на новую концепцию Партионного учета 2.2 и Движков взаиморасчетов. В этих механизмах огромный объем данных вынесен в технические регистры сведений для ускорения проведения документов. При написании интерфейсных кнопок «Заполнить» разработчики иногда забывают, что контекст выполнения на клиенте или в обычном серверном модуле ограничен правами текущего пользователя, в то время как проведение документа всегда идет под «прикрытием» привилегированного режима платформы.
Резюмируя: Если вы столкнулись с ошибкой прав на регистр СуммыДокументовВВалютеРегл, сначала проверьте возможность обновления до релиза 2.4.7.141 или выше. Если это невозможно — используйте расширение для точечного добавления прав на Чтение этого регистра соответствующим ролям пользователей. Это позволит вашим бухгалтерам продолжить работу с «Заявлениями о ввозе товаров из ЕАЭС» и другими важными документами без привлечения администратора для каждого действия.