Каталог решений - Сортировка в табличной части (таблица значений) формы управляемого приложения

Сортировка в табличной части (таблица значений) формы управляемого приложения

Сортировка в табличной части (таблица значений) формы управляемого приложения

В наличии

Для табличной части (таблица значений) управляемой формы добавляем в контекстное меню две команды: сортировать по убыванию и возрастанию и две процедуры. И получаем возможность сортировки по любой колонке. Пример «Номенклатура.артикул» , «Номенклатура.артикул.код» и т.д.

Категория:

Описание

В описанных ранее сортировках таблицы значений формы, надо обязательно указать название табличной части и поля для сортировки.  Для всех своих таблиц значения, размещаемых на форме, использую универсальный код, который работает для любой табличной части и любого поля. 

Для новой формы остаётся перенести команды сортировки, код подпрограмм и включаю команды в контекстное меню   табличной части формы.

И сортировка работает для любого поля.

 


 

Все реализовано достаточно просто, см.код.

// Сортировка

&НаКлиенте
Процедура сортировать(Команда)

      ТЭ_имя_объект=ТекущийЭлемент.Имя;
      ТЭ_поле=ТекущийЭлемент.ТекущийЭлемент.имя;

      имяКолонки=СтрЗаменить( ТЭ_поле,ТЭ_имя_объект,"");
      если команда.имя="СортировкаУ" тогда
           СортироватьНасервере(ТЭ_имя_объект,имяКолонки,"Убыв");
      иначе
          СортироватьНасервере(ТЭ_имя_объект,имяКолонки,"Возвр");
      конецесли;
КонецПроцедуры


&НаСервере
Процедура сортироватьНасервере(имяОбъекта,имяКолонки,ВидСортировки)
    ЭФ= РеквизитФормыВЗначение("Объект");
    ТЗ_объекта=ЭФ[имяОбъекта];
    тз= ТЗ_объекта.Выгрузить();
    колонкасортировки=тз.Колонки.Найти(имяКолонки);
    если колонкасортировки<>Неопределено тогда
        ТЗ_объекта.Сортировать(имяКолонки+" "+ВидСортировки);
    иначе
        //запомним текущую строку
        ткэлемент=элементы[имяОбъекта];
        позиция_стр=Тз_объекта.НайтиПоИдентификатору(ткэлемент.ТекущаяСтрока);
        Идекс_позиции=Тз_объекта.индекс(позиция_стр);
         строкаВтаблице=тз.Получить(Идекс_позиции);


        пдТ= ТекущийЭлемент.ПутьКДанным;
        ПД= ТекущийЭлемент.ТекущийЭлемент.ПутьКДанным;
        пд= СтрЗаменить(ПД,пдТ+".","");
        // получим основную и дополнительную колонку
         основннаяКолонка=лев(пд,найти(пд,".")-1);
         допколонка=СтрЗаменить(пд,основннаяКолонка+".","");
         тз.Колонки.Добавить( имяКолонки);
        //заполним поля для сортировки
        для каждого элементаТЗ из тз цикл
            тзобъекта= элементаТз[основннаяКолонка] ;
            элементаТз[имяКолонки]=вычислить("тзобъекта."+допколонка);
         конеццикла;
         тз.Сортировать(имяКолонки+" "+ВидСортировки);
         индексТЗпослеСортировки=ТЗ.Индекс(строкаВтаблице);
         ТЗ_объекта.Загрузить(тз);
          //восстановим курсор на нужную строку
          позиция_стр= ТЗ_объекта.Получить( индексТЗпослеСортировки);
          ткэлемент.ТекущаяСтрока=позиция_стр.ПолучитьИдентификатор();
     конецесли;

     ЗначениеВРеквизитФормы(Эф,"Объект");
конецпроцедуры

// Сортировка

 

has been added to your cart:
Оформление заказа