Вход | Регистрация
 

Сортировать по виртуальному реквизиту ТаблицыФормы табличной части объекта.

Сортировать по виртуальному реквизиту ТаблицыФормы табличной части объекта.
Я
   Гений 1С
 
25.06.21 - 13:28
Есть таблица формы, в ней есть колонки Номенклатура и Группа с путем к данным соответственно:

Объект.Материалы.Номенклатура
Объект.Материалы.Номенклатура.Родитель

Хочу сортировку Группа + Номенклатура. Но способа не нашел.
ПРишлось писать код (ниже). Без кода есть способ?


&НаКлиенте
Процедура СортироватьПоГруппам(Команда)
    //Объект.Материалы.Сортировать("Номенклатура.Родитель, Номенклатура");
    СортироватьПоГруппамНаСервере();
КонецПроцедуры

Процедура СортироватьПоГруппамНаСервере()
    ТЗ = Объект.Материалы.Выгрузить();
    ТЗ.Колонки.Добавить("_Порядок");
    З = Новый Запрос(
    "ВЫБРАТЬ
    |    Т.НомерСтроки,
    |    Т.Номенклатура
    |ПОМЕСТИТЬ Т
    |ИЗ
    |    &ТЗ КАК Т
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Т.НомерСтроки,
    |    ТНоменклатура.Ссылка КАК Ссылка,
    |    ТНоменклатура.Родитель
    |ИЗ
    |    Справочник.Номенклатура КАК ТНоменклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Т КАК Т
    |        ПО ТНоменклатура.Ссылка = Т.Номенклатура
    |
    |УПОРЯДОЧИТЬ ПО
    |    ТНоменклатура.Родитель.Наименование,
    |    ТНоменклатура.Ссылка.Наименование");
    З.УстановитьПараметр("ТЗ", ТЗ);
    Выборка = З.Выполнить().Выбрать();
    Сч = 0;
    Пока Выборка.Следующий() Цикл
        ТЗ[Выборка.НомерСтроки - 1]._Порядок = Сч; Сч = Сч + 1;
    КонецЦикла;
    
    ТЗ.Сортировать("_Порядок");
    Объект.Материалы.Загрузить(ТЗ);
    
КонецПроцедуры

&НаКлиенте
Процедура СортироватьАЯ(Команда)
    Объект.Материалы.Сортировать("Номенклатура");
КонецПроцедуры
   Злопчинский
 
1 - 25.06.21 - 13:30
жмакни сортировку по номенклатуре. зажми контрол. жмакни сортировку по группе.
получилось?
   Злопчинский
 
2 - 25.06.21 - 13:38
и даже в такой реализации как в (0) - страшное быдлокодирование.
завтра понадобится по другому сочетанию реквизитов сортировать.
причем тех, что не вытащены на форму.
.
правильно сделать "приблуду" - где выбираются нужные реквизиты и по совокупности выбранных реквизитов выполняется сортировка. ранее заданные сочетания реквизитов - при выборе на исполнение этой "приблуды" - выводятся в список как готтовые "профили сортировки" чтоб повторно их не набирать.
.
   Сергиус
 
3 - 25.06.21 - 15:03
(2)"Быдлокод - наше всё"!)
   Гений 1С
 
4 - 25.06.21 - 15:34
(2) давай не в общем виде. этак и я могу размышлять
   Гений 1С
 
5 - 25.06.21 - 15:35
(1) не получилось.
   Ёпрст
 
6 - 25.06.21 - 16:59
   Гений 1С
 
7 - 25.06.21 - 18:10
(6) вы путаете динамическийСписок и ТаблицаФормы (для отображения табличных частей), СЭР
   Ёпрст
 
8 - 25.06.21 - 18:19
(7) ну заведи колонку еще одну,расчетную колонку, заполняй её мусором при чтении на сервере, по ней сортируй.
   Ёпрст
 
9 - 25.06.21 - 18:19
сортировать можно по расчетным колонкам, по пкм или с меню все действия у ТЧ
   Гений 1С
 
10 - 25.06.21 - 18:23
(8) это сложнее, чем мой метод.
   Ёпрст
 
11 - 25.06.21 - 18:24
Ну и метод
Сортировать у данные формы коллекция пробовал ?
   Ёпрст
 
12 - 25.06.21 - 18:25
ДанныеФормыКоллекция (FormDataCollection)
Сортировать (Sort)
Синтаксис:
Сортировать(<Колонки>, <ОбъектСравнения>)
   Гений 1С
 
13 - 25.06.21 - 18:27
(12) если ты посмотришь приведенные код увидишь две строки:
Объект.Материалы.Сортировать("Номенклатура");
//Объект.Материалы.Сортировать("Номенклатура.Родитель, Номенклатура");
Вторая не работает. Знаешь как заставить работать?

Объект.Материалы - это и есть ДанныеФормыКоллекция
   Ёпрст
 
14 - 25.06.21 - 18:48
(13) ну, тогда не судьба.
В ОФ всё проще - там тч можно сортировать по нескольким колонкам кодом
   Kesim
 
15 - 25.06.21 - 18:59
(13) //Объект.Материалы.Сортировать("Номенклатура.Родитель, Номенклатура");   Объект.Материалы.Сортировать("Группа, Номенклатура");  навскидку
   Ёпрст
 
16 - 25.06.21 - 19:01
(15) там нет реквизита группа, будет только номенклатура.
   Ёпрст
 
17 - 25.06.21 - 19:02
Разве что, добавить расчетный реквизит Родитель в колонку и его заполнять в при создании на сервере, запихивая туда родителя.
Тогда будет колонка для сортировки
   Злопчинский
 
18 - 25.06.21 - 19:34
(4) тебе ТЗ написать? цена вопроса - 7500руб
   Злопчинский
 
19 - 25.06.21 - 19:35
(9) я жутьк расстроен когда (в УНФ, визуально - ТЧ документа) вытащил на форму Номенклатура.Артикул и оказалось, что по такой колонке нихера сортировать нельзя. "Пидарасы, сэр!"
   Ёпрст
 
20 - 25.06.21 - 19:38
(19) добавь колонку в реквизиты объекта в тч, заполняй в присоздании на сервере и при изменениии состава строк тч.
Тогда по ней можно делать что угодно - сортировку/отбор/условное оформление.
   Вафель
 
21 - 25.06.21 - 20:15
(20) а еще после записи .
Итого слишком много даижений ради 1 действия
   acht
 
22 - 25.06.21 - 20:21
(20) >  присоздании на сервере 
В причтении 

(21) Зато стандартные команды будут работать.
   Вафель
 
23 - 25.06.21 - 20:25
Апотом еще юзеров учить как по 2м колонкам сортировать
   Гений 1С
 
24 - 25.06.21 - 20:52
(14) ОФ это для пенсионеров
   Гений 1С
 
25 - 25.06.21 - 20:53
(19) но можно так как я написал кодецом
   Гений 1С
 
26 - 25.06.21 - 20:54
(18) Бедный штоли?
   Злопчинский
 
27 - 25.06.21 - 21:37
(26) Свои считай, а я свои считать буду...
   Гений 1С
 
28 - 25.06.21 - 22:18
(27) тогда не делай мне такие предложения
   Злопчинский
 
29 - 25.06.21 - 23:25
(28) в отказняк пошел? ты предложил описать предметно. я выставил цену, ты слился.
пусть тебе за 500 руб студенты ТЗ пишут...
   acht
 
30 - 26.06.21 - 09:39
(26) > Бедный штоли?
Геня, а ты со своими заказчиками также торгуешся?
 
 
   Вафель
 
31 - 26.06.21 - 11:40
Зачем делать универсальную процедуру, если 99% что она более не потребуется?
   Гений 1С
 
32 - 26.06.21 - 13:26
(31) у человека серьезный подход может, не лезь к гуре
   Злопчинский
 
33 - 26.06.21 - 19:25
(31) зачем делать такую монструозину как УТ11 или прочие типовые? большая часть все равно не использует большую часть возможностей.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.