А у меня другая беда - пользователей больше чем 1024 - а в отчете "Анализ прав" на каждого пользователя создается колонка в таблице значений, а потом на основании этой таблицы строится запросом дерево - и SQL вылетает с ошибкой "Временная таблица не может иметь более 1024 колонок".
Я подпилил.
1) Процедура "ВыбратьДанныеДляОтчета" - перед запросом вставить вот такое:
//Превращаем таблицу значений в дерево значений!
ДеревоВозврат = Новый ДеревоЗначений;
Для Каждого КолонкаТЗ Из ТЗВозврат.Колонки Цикл
ДеревоВозврат.Колонки.Добавить(КолонкаТЗ.Имя, КолонкаТЗ.ТипЗначения);
КонецЦикла;
Для Каждого СтрокаТЗВозврат Из ТЗВозврат Цикл
СтрокаДереваКоллекция = ДеревоВозврат.Строки.Найти(СтрокаТЗВозврат.Коллекция, "Коллекция");
Если СтрокаДереваКоллекция = Неопределено Тогда
СтрокаДереваКоллекция = ДеревоВозврат.Строки.Добавить();
СтрокаДереваКоллекция.Коллекция = СтрокаТЗВозврат.Коллекция;
КонецЕсли;
СтрокаДереваОбъектКоллекции = СтрокаДереваКоллекция.Строки.Найти(СтрокаТЗВозврат.ОбъектКоллекции, "ОбъектКоллекции");
Если СтрокаДереваОбъектКоллекции = Неопределено Тогда
СтрокаДереваОбъектКоллекции = СтрокаДереваКоллекция.Строки.Добавить();
СтрокаДереваОбъектКоллекции.Коллекция = СтрокаДереваКоллекция.Коллекция;
СтрокаДереваОбъектКоллекции.ОбъектКоллекции = СтрокаТЗВозврат.ОбъектКоллекции;
КонецЕсли;
СтрокаДереваДетальныеЗаписи = СтрокаДереваОбъектКоллекции.Строки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДереваДетальныеЗаписи, СтрокаТЗВозврат);
КонецЦикла;
Возврат ДеревоВозврат;
Показать
2) Процедура "ВывестиОтчет" - вместо старого обхода по коллекции вставить это -
// Обход по коллекциям
Для Каждого мДанныеОтчета Из пДанныеОтчета.Строки Цикл
СтрокаКоллекция.Параметры.Заполнить(мДанныеОтчета);
ЭлементыФормы.ПолеОтчета.Вывести(СтрокаКоллекция,1,,Истина);
ПрисоединитьКолонкиСтроки(КоличествоКолонок,СтрокаКоллекцияКолонка,ЭлементыФормы.ПолеОтчета);
// Обход по объектам
Для Каждого ВыборкаПоОбъектам Из мДанныеОтчета.Строки Цикл
Расшифровка = ПолучитьРасшифровку(ВыборкаПоОбъектам.Коллекция,ВыборкаПоОбъектам.ОбъектКоллекции);
СтрокаОбъект.Параметры.Заполнить(ВыборкаПоОбъектам);
СтрокаОбъект.Параметры.Расшифровка = Расшифровка;
ЭлементыФормы.ПолеОтчета.Вывести(СтрокаОбъект,2,,Ложь);
Для Счетчик = 1 По КоличествоКолонок Цикл
СтрокаОбъектКолонка.Параметры.Расшифровка = Расшифровка;
ЭлементыФормы.ПолеОтчета.Присоединить(СтрокаОбъектКолонка);
КонецЦикла;
// Обход по правам
Для Каждого ВыборкаПоПравам Из ВыборкаПоОбъектам.Строки Цикл
СтрокаПраво.Параметры.Заполнить(ВыборкаПоПравам);
ЭлементыФормы.ПолеОтчета.Вывести(СтрокаПраво,3,,Ложь);
Для Счетчик = 1 По КоличествоКолонок Цикл
СтрокаПравоКолонка.Параметры.Пометка = ВыборкаПоПравам.Получить(Счетчик + 2);
ЭлементыФормы.ПолеОтчета.Присоединить(СтрокаПравоКолонка);
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Показать