Загрузка данных


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Устанавливаем значения по умолчанию
    ПолеСортировки = "Заказчик";
    СортировкаПоВозрастанию = Истина;
    СтрокаПоиска = "";
    ВыбранныйКлиент = Неопределено;
    
    // Загружаем данные
    ОбновитьТаблицуНаСервере();
    
КонецПроцедуры

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

&НаКлиенте
Процедура Фильтровать(Команда)
    // Применяем фильтр по выбранному клиенту
    ОбновитьТаблицуНаСервере();
    // Снимаем подсветку после фильтрации
    Элементы.ТаблицаРезультат.ВыделенныеСтроки.Очистить();
КонецПроцедуры

&НаКлиенте
Процедура ПоказатьВсе(Команда)
    // Сбрасываем фильтр
    ВыбранныйКлиент = Неопределено;
    СтрокаПоиска = "";
    ОбновитьТаблицуНаСервере();
    // Снимаем подсветку
    Элементы.ТаблицаРезультат.ВыделенныеСтроки.Очистить();
    Элементы.ТаблицаРезультат.ТекущаяСтрока = Неопределено;
КонецПроцедуры

&НаКлиенте
Процедура Сортировать(Команда)
    // Применяем сортировку
    ОбновитьТаблицуНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура ПолеСортировкиПриИзменении(Элемент)
    // Автоматическая сортировка при смене поля
    ОбновитьТаблицуНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура СортировкаПоВозрастаниюПриИзменении(Элемент)
    // Автоматическая сортировка при смене направления
    ОбновитьТаблицуНаСервере();
КонецПроцедуры

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