Имя: Пароль:
1C
 
Как сделать чтобы сортировка в табличной части работала по нужной колонке?
Ø
0 YaVlad
 
06.06.05
14:16
ТиС. В табличной части кнопка сортировки по любой колонке работает, а по артиклу почему-то нет - серые кнопки сортировки. Посмотрел в конфигураторе - там у Номенклатура.Артикул галка сортировки стоит. Может не там смотрю?
1 sauxID
 
06.06.05
14:19
В табличной части чего - документа, справочника
2 SnarkHunter
 
06.06.05
14:19
Видимо потому что артикул всего лишь текствый реквизит...
3 Sasha
 
06.06.05
14:19
А мож. в ТЧ это у тебя вычисляемое поле вставлено? (текст)
4 YaVlad
 
06.06.05
14:23
Да, это текстовое поле с формулой:
?(Номенклатура.Выбран()=0, "", Номенклатура.Артикул)
5 smaharbA
 
06.06.05
14:25
(4) ааа...
6 SnarkHunter
 
06.06.05
14:25
Ну так чего ты хочешь...
7 YaVlad
 
06.06.05
14:26
(1)Табличная часть документа.
Если текстовое поле, то никак нельзя сделать?
8 smaharbA
 
06.06.05
14:28
(7) можно, выгрузить ТЧ, отсортировать как надо и загрузить...
9 SnarkHunter
 
06.06.05
14:32
(8)Не взлетит...
10 Добрый
 
06.06.05
14:32
11 smaharbA
 
06.06.05
14:35
(8) исчо как летает... у меня глСортироватьТабличнуюЧасть(), все летит...
Конечно текстовые поля во всех доках определены, да и "спец кнопка" на формах...
12 YaVlad
 
06.06.05
14:46
(11) Я еще слаб в программировании 1С. Код функции не можешь выслать? Please!
13 smaharbA
 
06.06.05
15:10
На форме дока кнопочки СортироватьАЯ и СортироватьЯА На них функция
глСортироватьТабличнуюЧасть(Контекст,"+") и глСортироватьТабличнуюЧасть(Контекст,"-") соответственно...
В глобальнике
Функция глСортироватьТабличнуюЧасть(Конт,Направление="+") Экспорт
  Попытка
    Аттр=Конт.Форма.ТекущаяКолонка();
    Мет=Метаданные.Документ(Конт.Вид());
    Если Мет.РеквизитТабличнойЧасти(Аттр).Выбран()=1 Тогда
  // Это реквизит документа, по нему непосредственная сортировка
      Конт.СортироватьСтроки(Направление+Аттр);
    Иначе
      ТЗ=глСоздатьОбъект("ТаблицаЗначений");
      Конт.ВыгрузитьТабличнуюЧасть(ТЗ);
      ТЗ.НоваяКолонка(Аттр);
      ТЗ.ВыбратьСтроки();
      Пока ТЗ.ПолучитьСтроку()=1 Цикл
        НомСтр=ТЗ.НомерСтрокиДокумента;
        Состояние("Выбираю строки "+НомСТр);
        Конт.ПолучитЬСтрокуПоНомеру(НомСтр);
        ЗначАттр=Шаблон("["+Аттр+"]");
        ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,Аттр,ЗначАттр);
      КонецЦикла;
      Состояние("Сортирую таблицу.");
      ТЗ.Сортировать(Направление+Аттр);
      Состояние("Загружаю таблицу.");
      Конт.ЗагрузитьТабличнуюЧасть(ТЗ);
    КонецЕсли;
  Исключение Сигнал();
  КонецПопытки;
КонецФункции
...
Только обязательно Идентификатор полю назначь...
14 YaVlad
 
06.06.05
15:22
(13) Спасибо большое! Сейчас буду пробовать. Спасибо большое!
15 Sasha
 
06.06.05
15:35
(13) Это конечно все круто и в жизни пригодится, но наверное было бы проще добавить реквизит артикул и все :-)
16 smaharbA
 
06.06.05
15:38
(15) а на кой, если он в справочнике номенклатуры уже есть...
Конечно если ТЧ документа "тяжела" то туго будет сортировать...
17 smaharbA
 
06.06.05
15:40
+(16) так будет сортировать независимо от наличия/отсутствия реквизита ТЧ...
18 Sasha
 
06.06.05
15:43
(17) угу. запомнил примерчик :-), вдруг пригодится, если использую, буду на тебя ссылаться...
19 smaharbA
 
06.06.05
15:49
(18) нет не ссылаться, сам из раруса выдернул...
20 YaVlad
 
06.06.05
15:57
(13)
Поставил идентификатор колонке Аттр, по нему что-то сортирует, но не понятно по какому принципу. У меня в артикуле и буквы и цифры, например, 2650DG, и 27411L. Я думал будет сортировать по первым символам, как в обычной сортировке, но тут какой-то странный порядок сортировки...
Еще в функции была ссылка на
ТЗ=глСоздатьОбъект("ТаблицаЗначений");
Но такой функции нет, я заменил на
ТЗ=СоздатьОбъект("ТаблицаЗначений");
Думаю, это не принципиально.
21 smaharbA
 
06.06.05
16:03
(20) 271DG > 27411L, вот и принцип, а идентификатор не Аттр, а тАртикул, к примеру, ну этт значения вобщемто не имеет
22 YaVlad
 
06.06.05
16:13
Все заработало. Заменил идентификатор колонки с Аттр на другой - Аттр2. После этого заработало. Т.е. должно сработать условие ELSE в функции.
Спасибо!
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс