Если выполнить формирование отчетности:
произойдет отказ из-за RLS:
{Отчет.РегламентированныйОтчетБухОтчетность.Форма.ФормаОтчета2019Кв1.Форма(23205)}: Ошибка при вызове метода контекста (Выполнить)
Запрос.Выполнить();
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.
Причина в том, что в модуле многократно во множестве запросов считываются все платежные поручения (исходящие и входящие) и кассовые ордера за всю историю информационной базы запросом, который конфликтует с механизмом RLS если ограничен доступ к организациям:
Пример проблемного запроса платежных поручений (исходящих или входящих)
ВЫБРАТЬ
ПлатежноеПоручениеИсходящее.Ссылка,
ПлатежноеПоручениеИсходящее.Контрагент,
ПлатежноеПоручениеИсходящее.ДоговорКонтрагента
Поместить ВТ_ВсеСФПолученные
ИЗ
Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
...
ВЫБРАТЬ
ПлатежноеПоручениеВходящее.Ссылка,
ПлатежноеПоручениеВходящее.Контрагент,
ПлатежноеПоручениеВходящее.ДоговорКонтрагента
ПОМЕСТИТЬ ВТ_ВсеСФВыданные
ИЗ
Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
...
В первую очередь надо проверить, что в базе нет платежных поручений и кассовых ордеров, у которых в реквизите "Организация" записан NULL.
Проверочный запрос платежных поручений и кассовых ордеров
ВЫБРАТЬ
ПлатежноеПоручениеИсходящее.Ссылка,
ПлатежноеПоручениеИсходящее.Организация,
ПлатежноеПоручениеИсходящее.Контрагент
ИЗ
Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
ГДЕ
ПлатежноеПоручениеИсходящее.Организация.Ссылка ЕСТЬ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПлатежноеПоручениеВходящее.Ссылка,
ПлатежноеПоручениеВходящее.Организация,
ПлатежноеПоручениеВходящее.Контрагент
ИЗ
Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
ГДЕ
ПлатежноеПоручениеВходящее.Организация.Ссылка ЕСТЬ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПриходныйКассовыйОрдер.Ссылка,
ПриходныйКассовыйОрдер.Организация,
ПриходныйКассовыйОрдер.Контрагент
ИЗ
Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
ГДЕ
ПриходныйКассовыйОрдер.Организация.Ссылка ЕСТЬ NULL
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
РасходныйКассовыйОрдер.Ссылка,
РасходныйКассовыйОрдер.Организация,
РасходныйКассовыйОрдер.Контрагент
ИЗ
Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
ГДЕ
РасходныйКассовыйОрдер.Организация.Ссылка ЕСТЬ NULL
Не стоит пытаться править запросы отчета "Бухгалтерская отчетность", добавлять в них слово "РАЗРЕШЕННЫЕ", это было бы решением, но есть проблема - в модуле отчета "Бухгалтерская отчетность (РегламентированныйОтчетБухОтчетность)" таких запросов невероятно много и правок модуля будет слишком много. Нужно решить проблему донастройкой RLS.
Можно например (в тестовых целях или из-за срочности вопроса временно) создать группу без ограничений доступа на уровне записей и включить в нее сотрудника, формирующего отчетность за 2020 год. Но у него появится полный доступ ко всем организациям, это нехорошо.
Правильнее будет создать группу доступа на чтение всех организаций и включить в нее сотрудника, формирующего отчетность за 2020 год.
Всё, победил! Проблема решена, бухгалтерская отчетность формируется! Все входящие и исходящие платежки и кассовые ордера считываются нормально.
Если организаций довольно много, добавить все организации, фигурировавшие в платежных поручениях и кассовых ордерах, можно например следующей обработкой заполнения. В ней при записи набора записей устанавливается отбор на группу пользователей, формирующих отчетность за 2020 год (будьте осторожны, регистр сведений без отбора записывать нельзя).
Обработка заполнения закладки "Организации" обработки "Настройка прав пользователей"
Процедура ДействияТаблицыПравОрганизацииВнестиОрганизацииПлатежекИКассовыхОрдеров(Кнопка)
Запрос = Новый Запрос;
ЗАпрос.Текст =
"ВЫБРАТЬ
| ПлатежноеПоручениеИсходящее.Организация
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПлатежноеПоручениеВходящее.Организация
|ИЗ
| Документ.ПлатежноеПоручениеВходящее КАК ПлатежноеПоручениеВходящее
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ПриходныйКассовыйОрдер.Организация
|ИЗ
| Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РасходныйКассовыйОрдер.Организация
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК РасходныйКассовыйОрдер
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТ.Организация КАК Ссылка
|ИЗ
| ВТ КАК ВТ";
РТ = Запрос.Выполнить().Выгрузить();
Для Каждого стр Из РТ Цикл
Отбор = Новый Структура;
Отбор.Вставить("ОбъектДоступа",стр.Ссылка);
СуществующиеЗаписи = ТаблицаПравДоступа.НайтиСтроки(Отбор);
Если СуществующиеЗаписи.Количество() = 0 Тогда
СтрТПД = ТаблицаПравДоступа.Добавить();
СтрТПД.ТипОбъектаДоступа = Тип("СправочникСсылка.Организации");
СтрТПД.ОбъектДоступа = стр.Ссылка;
СтрТПД.ВладелецПравДоступа = стр.Ссылка;
СтрТПД.Пользователь = Справочники.ГруппыПользователей.НайтиПоКоду("000000087");//отчетность 2020
СтрТПД.ВидНаследованияПравДоступаИерархическихСправочников = Перечисления.ВидыНаследованияПравДоступаИерархическихСправочников.РаспространитьНаПодчиненных;
СтрТПД.Чтение_1 = Истина;
КонецЕсли;
КонецЦикла;
//ЭлементыФормы["ТаблицаПравДоступа_" + ЭлементыФормы.ПанельОбластейДанных.ТекущаяСтраница.Имя].ТекущаяСтрока = СтрТПД;
НЗ = ПолучитьНаборЗаписейИзТаблицПравДоступа();
НЗ.Отбор.Пользователь.Установить(Справочники.ГруппыПользователей.НайтиПоКоду("000000087"));
НЗ.Записать();
ОбновлениеОтображения();
КонецПроцедуры
На всякий случай вот информация как удалить сотрудника из других групп, которые регулируют доступ к организациям (удалять не обязательно, поместил сюда потому что может помочь для тестирования).
Протестировано в Управление производственным предприятием, редакция 1.3 (1.3.154.3).