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

Объект.Материалы - это и есть ДанныеФормыКоллекция
14 Ёпрст
 
25.06.21
18:48
(13) ну, тогда не судьба.
В ОФ всё проще - там тч можно сортировать по нескольким колонкам кодом
15 Kesim
 
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 действия
22 acht
 
25.06.21
20:21
(20) >  присоздании на сервере
В причтении

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