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