И мое решение очень не оптимально в плане кода, потому что с увеличением количества документов в списке начинаются тормоза, список не просто медленно , а жутко медленно открывается и навигация по нему становится мучительным занятием для пользователя

Это первая проблема . А вторая , которая ,возможно, первую усугубляет, это то, что приходится использовать картинки для отображения трех различных состояний флажка : 1- подчиненного документа нет, 2- подчиненный документ есть, но не проведен, 3- подчиненный документ есть и проведен.
необходимо зарегистрироваться для просмотра ссылки
Процедура ДокументСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Вставить содержимое обработчика.
Ссылка = ДанныеСтроки.Ссылка;
Если Ссылка = Неопределено Тогда
Возврат;
КонецЕсли;
//
рез = Привелегированный.ОбработатьЗаказ(ССылка);
Если не рез.Пустой() Тогда
Выборка = рез.Выбрать();
Выборка.Следующий();
ОформлениеСтроки.Ячейки.Оплата.УстановитьТекст(Формат(Выборка.сумма, \"ЧДЦ=2\"));
ЯчейкаРН = ОформлениеСтроки.Ячейки.РН;
ОбработатьЯчейку(ОформлениеСтроки.Ячейки.РН,Выборка.СуммаРН, Выборка.ПроведенРН);
ОбработатьЯчейку(ОформлениеСтроки.Ячейки.НН,Выборка.СуммаНН, Выборка.ПроведенНН);
ОбработатьЯчейку(ОформлениеСтроки.Ячейки.ПВ,Выборка.ПВ, Выборка.ПроведенПВ);
ОбработатьЯчейку(ОформлениеСтроки.Ячейки.ПМ,Выборка.ПМ, Выборка.ПроведенПМ);
Если Выборка.ПС <> null и Выборка.ПС > 0 тогда
ОформлениеСтроки.Ячейки.ПС.ЗначениеФлажка = истина;
ОформлениеСтроки.Ячейки.ПС.ОтображатьФлажок = истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработатьЯчейку(Ячейка,РезВыборки, РезВыборкиПроведен)
Ячейка.ОтображатьКартинку = ложь;
Если РезВыборки <> null и РезВыборки > 0 тогда
Ячейка.ОтображатьКартинку = Истина;
Ячейка.ИндексКартинки = 0;
Если РезВыборкиПроведен тогда
Ячейка.ИндексКартинки = 1;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В общем привилегированном модуле выполняется запрос на наличие подчиненных документов, дабы дать возможность видеть список пользователям с ограниченными правами:
Запрос = новый запрос;
Запрос.Текст = \"ВЫБРАТЬ
| СУММА(ВнутрЗапрос.Сумма) КАК Сумма,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.СуммаРН, 0)) КАК СуммаРН,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.СуммаНН, 0)) КАК СуммаНН,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.Пс, 0)) КАК ПС,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенРН, 0)) КАК ПроведенРН,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенНН, 0)) КАК ПроведенНН,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПВ, 0)) КАК ПроведенПВ,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПС, 0)) КАК ПроведенПС,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПМ, 0)) КАК ПМ,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПроведенПМ, 0)) КАК ПроведенПМ,
| СУММА(ЕСТЬNULL(ВнутрЗапрос.ПВ, 0)) КАК ПВ
|ИЗ
| (ВЫБРАТЬ
| ЕСТЬNULL(ХозрасчетныйОбороты.СуммаОборотКт, 0) КАК Сумма,
| 0 КАК СуммаРН,
| 0 КАК СуммаНН,
| 0 КАК ПВ,
| 0 КАК Пс,
| NULL КАК ПМ,
| NULL КАК ПроведенРН,
| NULL КАК ПроведенНН,
| NULL КАК ПроведенПВ,
| NULL КАК ПроведенПС,
| NULL КАК ПроведенПМ
| ИЗ
| РегистрБухгалтерии.Хозрасчетный.Обороты(, , , Счет = &Счет, , Субконто3 = &ссылка, корСчет = &корСчет, ) КАК ХозрасчетныйОбороты
| ГДЕ
| ХозрасчетныйОбороты.СуммаОборотКт > 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 0,
| СУММА(РеализацияТоваровУслуг.СуммаДокумента),
| 0,
| 0,
| 0,
| NULL,
| ВЫБОР
| КОГДА РеализацияТоваровУслуг.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ГДЕ
| (РеализацияТоваровУслуг.Сделка = &Ссылка
| ИЛИ РеализацияТоваровУслуг.ДокументОснование = &Ссылка)
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА РеализацияТоваровУслуг.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 0,
| 0,
| СУММА(НалоговаяНакладная.СуммаДокумента),
| 0,
| 0,
| NULL,
| NULL,
| ВЫБОР
| КОГДА НалоговаяНакладная.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ,
| NULL,
| NULL,
| NULL
| ИЗ
| Документ.НалоговаяНакладная КАК НалоговаяНакладная
| ГДЕ
| (НалоговаяНакладная.ДокументОснование = &Ссылка
| ИЛИ НалоговаяНакладная.Сделка = &Ссылка)
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА НалоговаяНакладная.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 0,
| 0,
| 0,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПеремещениеТоваров.Ссылка),
| 0,
| NULL,
| NULL,
| NULL,
| ВЫБОР
| КОГДА ПеремещениеТоваров.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ,
| NULL,
| NULL
| ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
| ГДЕ
| ПеремещениеТоваров.ДокументОснование = &Ссылка
| И ПеремещениеТоваров.СкладПолучатель = &СкладВ
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА ПеремещениеТоваров.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 0,
| 0,
| 0,
| 0,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СкладскаяНакладная.Ссылка),
| NULL,
| NULL,
| NULL,
| NULL,
| ВЫБОР
| КОГДА СкладскаяНакладная.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ,
| NULL
| ИЗ
| Документ.СкладскаяНакладная КАК СкладскаяНакладная
| ГДЕ
| СкладскаяНакладная.ДокументОснование = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА СкладскаяНакладная.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПеремещениеТоваров.Ссылка),
| NULL,
| NULL,
| NULL,
| NULL,
| ВЫБОР
| КОГДА ПеремещениеТоваров.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ
| ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
| ГДЕ
| ПеремещениеТоваров.ДокументОснование = &Ссылка
| И ПеремещениеТоваров.СкладПолучатель = &СкладПМ
|
| СГРУППИРОВАТЬ ПО
| ВЫБОР
| КОГДА ПеремещениеТоваров.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ВнутрЗапрос\";
Запрос.УстановитьПараметр(\"ссылка\", ссылка);
Запрос.УстановитьПараметр(\"складВ\", Справочники.Склады.НайтиПоКоду(\"000000003\"));
Запрос.УстановитьПараметр(\"складПМ\", Справочники.Склады.НайтиПоКоду(\"000000002\"));
Запрос.УстановитьПараметр(\"Счет\", планыСчетов.Хозрасчетный.РасчетыСОтечественнымиПокупателями);
Запрос.УстановитьПараметр(\"КорСчет\", планыСчетов.Хозрасчетный.ТекущиеСчетаВНациональнойВалюте);
Возврат Запрос.Выполнить();
В итоге в форме списка получаем такую картинку:

Может у кого-то есть более красивое решение этой задачи, повышающее быстродействие системы? Или может кто-то подскажет как оптимизировать мой код?