ЗапросСч = СоздатьОбъект("Запрос");
ВремТЗ = СоздатьОбъект("ТаблицаЗначений");
ТекстСч =
"
|Период с ДатаНачала по ДатаКонца;
|ОбрабатыватьДокументы Все;
|Обрабатывать НеПомеченныеНаУдаление;
|Счет = Документ.Счет.ТекущийДокумент;
|Конт = Документ.Счет.Контрагент;
|Группировка Конт Без Групп;
|Группировка Счет;";
// Ищем коды групп для отображения принадлежащих им конрагентов
СпрК.НайтиПоНаименованию("Физические лица");
Физик = СпрК.ТекущийЭлемент();
СпрК.НайтиПоНаименованию("Юридические лица покупатели");
Юрик = СпрК.ТекущийЭлемент();
// Составляем запрос
ТекстЗапроса =
"
|Период с ДатаНачала по ДатаКонца;
|Обрабатывать НеПомеченныеНаУдаление;
|Конт = Справочник.Контрагенты.ТекущийЭлемент;
|Группировка Конт Без Групп;";
Если (Физики = 1) И (Юрики = 1) Тогда // выбрано отображение и физиков и юриков
ТекстЗапроса = ТекстЗапроса + "
|Условие ((Конт.ПринадлежитГруппе(Физик)=1) ИЛИ (Конт.ПринадлежитГруппе(Юрик)=1));";
ТекстСч = ТекстСч + "
|Условие ((Конт.ПринадлежитГруппе(Физик)=1) ИЛИ (Конт.ПринадлежитГруппе(Юрик)=1));";
ИначеЕсли (Физики = 1) Тогда // отображаем только физиков
ТекстЗапроса = ТекстЗапроса + "
|Условие (Конт.ПринадлежитГруппе(Физик) = 1);";
ТекстСч = ТекстСч + "
|Условие (Конт.ПринадлежитГруппе(Физик) = 1);";
ИначеЕсли (Юрики = 1) Тогда // отображаем только юриков
ТекстЗапроса = ТекстЗапроса + "
|Условие (Конт.ПринадлежитГруппе(Юрик)=1);";
ТекстСч = ТекстСч + "
|Условие (Конт.ПринадлежитГруппе(Юрик)=1);";
КонецЕсли;
Если (Форма.Фильтрация.Видимость() = 1) И (СокрЛП(стрПоиск) <> "") Тогда
// Обрабатываем данные по фильтру
ТекстЗапроса = ТекстЗапроса + "
|Условие (Найти(ВРег(СокрЛП(Конт)),ВРег(СокрЛП(стрПоиск))) > 0);";
ТекстСч = ТекстСч + "
|Условие (Найти(ВРег(СокрЛП(Конт)),ВРег(СокрЛП(стрПоиск))) > 0);";
КонецЕсли;
// Выполняем запрос
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Если ЗапросСч.Выполнить(ТекстСч) = 0 Тогда
Возврат;
КонецЕсли;
ЗапросСч.ЗначениеУпорядочивания(1,);
ЗапросСч.Выгрузить(ВремТЗ,0,0);
// Формируем список контрагентов
ВремТЗ.ВыбратьСтроки();
СтрПолучена = ВремТЗ.ПолучитьСтроку();
стрВетка = ЗначениеВСтрокуВнутр(ТЗ);
Пока Запрос.Группировка(1) = 1 Цикл
// добавляем коентрагента
ТЗ.НоваяСтрока();
ТЗ.Пиктограмма = 0;
ТЗ.СледУровень = ЗначениеИзСтрокиВнутр(стрВетка);
ТЗ.Код = Запрос.Конт.Наименование;
ТЗ.Наименование = Запрос.Конт.ПолнНаименование;
ТЗ.Сумма = "";
Пока (СокрЛП(Строка(ВремТЗ.Конт)) = СокрЛП(ТЗ.Код)) И (СтрПолучена = 1) Цикл
//Забиваем "дочек"
ТЗ.СледУровень.НоваяСтрока();
ТЗ.СледУровень.СледУровень = ЗначениеИзСтрокиВнутр(стрВетка);
ТЗ.СледУровень.Пиктограмма = 0;
ТЗ.СледУровень.Код = ВремТЗ.Счет;
ТЗ.СледУровень.Наименование = Гы;
ТЗ.СледУровень.Сумма = СокрЛП(Формат(ВремТЗ.Счет.Итог("Всего"),"Ч20.2, "));
ТЗ.СледУровень.Раскраска = ДолгНет;
СтрПолучена = ВремТЗ.ПолучитьСтроку();
КонецЦикла;
КонецЦикла;