Имя: Пароль:
1C
1C 7.7
v7: Сортировка таблицы значений
Ø (Злопчинский 12.10.2016 01:00)
,
0 Slypower
 
11.10.16
15:27
Добрый день. Не могу понять, что хочет 1С7.7.
https://cloud.mail.ru/public/3wJE/wBbVEauVg
На картинке список сортировки, а рядом еще 2 кнопки, для сортировки по возрастанию/убиванию. Подписи - это формулы в модуле для данных реквизитов. Вот процедура для них:

Процедура Сортировать(Метод = "")

    Если СокрЛП(Метод)="Вниз" Тогда
        Сортировка="+";
    ИначеЕсли СокрЛП(Метод)="Вверх" Тогда
        Сортировка="-";
    КонецЕсли;
    ТаблЗнач.Сортировать(МетодСортировки.ПолучитьЗначение(МетодСортировки.ТекущаяСтрока())+Сортировка); //Сообщить(""+МетодСортировки.ПолучитьЗначение(МетодСортировки.ТекущаяСтрока())+"_"+Сортировка+"");
    н=0;
    ТаблЗнач.ВыбратьСтроки();
    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
        н=н+1;
        ТаблЗнач.УстановитьЗначение(н,"НомСтроки",н);
    КонецЦикла;

КонецПроцедуры // КнСортировать

Так вот. При заполнении ТаблЗнач сразу сортируется по стандартному методу. Затем при нажатии на кнопки, он определяет метод, но сортирует. Срабатывает только при смене списка, а кнопки со стрелками не работают. Что может мешать работе сортировке?

Список заполняется:

Процедура МетодСортировкиТаблицы()
    МетодСортировки.УдалитьВсе();
    для ш=1 по ТаблЗнач.КоличествоКолонок() Цикл
        ТаблЗнач.ПолучитьПараметрыКолонки(ш,,,,Заголовок,,,);
        Если ТаблЗнач.ВидимостьКолонки(ш)=1 Тогда
            МетодСортировки.ДобавитьЗначение(ш,Заголовок);
        КонецЕсли;
    КонецЦикла;
    МетодСортировки.УдалитьЗначение(2);
    МетодСортировки.ТекущаяСтрока(3);
    
    Сортировать();
КонецПроцедуры // МетодСортировки
1 Ёпрст
 
11.10.16
15:30
Вот это выкини из кода:

    Пока ТаблЗнач.ПолучитьСтроку() = 1 Цикл
        н=н+1;
        ТаблЗнач.УстановитьЗначение(н,"НомСтроки",н);
    КонецЦикла;
2 Ёпрст
 
11.10.16
15:32
И пихай идентификаторы колонок, а не число
3 aka AMIGO
 
11.10.16
15:32
На Сортировать(); не ругается?

И еще: в отладчике что в параметре МетодСортировки.ТекущаяСтрока())+Сортировка
4 Ёпрст
 
11.10.16
15:33
у тебя же
МетодСортировки.ТекущаяСтрока())+Сортировка = 1 + "+" = 1
5 Ёпрст
 
11.10.16
15:35
так, что ле исправь:

МетодСортировки.ДобавитьЗначение(""+ш,Заголовок);
6 Ёпрст
 
11.10.16
15:35
или так:
ТаблЗнач.Сортировать(""+МетодСортировки.ПолучитьЗначение(МетодСортировки.ТекущаяСтрока())+Сортировка);
7 Ёпрст
 
11.10.16
15:35
короче, строку надо в метод передавать, а не число.
8 Ёпрст
 
11.10.16
15:36
ну и код, что в (1) заменить на

ТаблЗнач.ВидимостьКолонки("НомерСтроки",1);
9 aka AMIGO
 
11.10.16
15:37
(7) + и в строке должно быть наименование колонки :)
10 Slypower
 
11.10.16
15:38
(1) это нужно, это потом нумерует строки по порядку, а не по виду сортировки. Они всегда теперь 1,2,3,....
11 Slypower
 
11.10.16
15:41
(5) Вот спасибо!!! Вот теперь работает!!
12 Slypower
 
11.10.16
15:44
(6) так тоже работает. Я так понимаю, это особенности 1С7.7? Интересно, что Сообщить(""+МетодСортировки.ПолучитьЗначение(МетодСортировки.ТекущаяСтрока())+"_"+Сортировка+""); работает по этому же принципу, если вначале ""+ не стоит, то не выводило +/-, а вот в сортировку не догадался поставить. Огромное спасибо
13 Ёпрст
 
11.10.16
15:46
(12) нет никакой особенности, обычное приведение типов по первому операнду.
14 Ёпрст
 
11.10.16
15:46
нефик к числу строку прибавлять
15 Ёпрст
 
11.10.16
15:47
(10) и это не нужно, номерСтроки и так всегда есть у таблицы значений, просто покажи его на форме и усё, см. (8)
16 aka AMIGO
 
11.10.16
15:48
Так тоже можно:
Строка(МетодСортировки.ТекущаяСтрока()))+Сортировка
или так:
""+МетодСортировки.ТекущаяСтрока())+Сортировка

Это не есть особенность 1с-77
17 Slypower
 
11.10.16
15:49
(15) да, это если сразу так стандартно делать, но для меня не по феншую такое расположение колонок, поэтому я и делаю свою колонку нумерации. Только если сделать: ТаблЗнач.НомСтроки=ТаблЗнач.НомерСтроки
18 Ёпрст
 
11.10.16
15:50
(17) ёёё..
кури метод ВидимостьКолонки, особенно, 3-ий параметр
19 Slypower
 
11.10.16
16:04
Спасибо, есть над чем еще курить. Тему можно закрывать
20 Злопчинский
 
12.10.16
00:59
(13) не пугай людей...