Сортировка ТЗ

  • Автор темы Hryv
  • Дата начала
H

Hryv

#1
Я опять в шоке

Есть ТЗ с колонкой

ТЗ.НоваяКолонка("Номенклатура","Справочник.Номенклатура");

И есть элементы справочника Номенклатура с одинаковым наименованием, внесенные в эту ТЗ

Если я делаю ТЗ.Свернуть(), то разные элементы сворачиваются в разные строки
Если я делаю ТЗ.Сортировать(), то разные элементы с одинаковым наименованием между собой сортируются как попало

Не знаю как побороть :)
 

SeverBap

Well-known member
18.09.2007
451
0
#2
наверно он по внутренним индификаторам шпарит, у меня такая хрень была ничего я так и не придумал!
 

vbs

Well-known member
18.02.2007
1 708
1
#3
Если я делаю ТЗ.Сортировать(), то разные элементы с одинаковым наименованием между собой сортируются как попало
Я с этим явлением давно уже борюсь методом создания еще одной колонки, содержащей TrimR(Наименование)+TrimAll(String(Код)), по ней и сортирую

PS. Боюсь, что подобное и повлияло на "ДвиженияРегистров" - в базе море одинаковых наименований.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#4
Если я делаю ТЗ.Сортировать(), то разные элементы с одинаковым наименованием между собой сортируются как попало
Можно пояснить? Что именно означает "как попало"? Сортировка идет по основному представлению (для справочников это, как правило, Наименование). Если наименования совпадают, как быть? А вот для этого и существует программист, который должен предусмотреть дополнительный критерий сортировки. Или вы считаете, что платформа вам и кофе должна варить?
 
H

Hryv

#5
Или вы считаете, что платформа вам и кофе должна варить?
Я уже писал: при свертке таблицы 1С ведь понимает, что значения в таблице разные, почему же она не видит этого при сортировке?
В той же свернуть() есть доп пераметр для документов, а справочники "обделили"

А вот для этого и существует программист
Опять же, если мне надо сортировать по коду или по наименованию, то я их и буду заносить в ТЗ, а потом сортировать по ним.
Сортировать же по уникальному элементу программист в общем случае не может, так как могут быть элементы с одинаковыми и наименованиями и полными кодами, ведь 1С это позволяет


Единственный 100% надежный вариант - это сортировать таблицу вручную переставляя строки
Попытаюсь написать такую процедуру
Если получится, то выложу тут

Если у кого уже есть, то поделитесь, плиз
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#6
Единственный 100% надежный вариант - это сортировать таблицу вручную переставляя строки
Вот уж не уверен что это хороший вариант... хотя любопытно будет поглядеть на результат.
имхо в тз можно для справочника сделать некую уникальность - наименование, код, еще какой-то реквизит...
 
H

Hryv

#7
имхо в тз можно для справочника сделать некую уникальность - наименование, код, еще какой-то реквизит...
Если речь идет о конкретном справочнике, то без проблем

Но мне надо в общем случае
Чтобы один алгоритм работал для ЛЮБГО справочника
 
G

Gluk8888

#9
у автора скорее всего справочник многоуровневый и уникальность кодов в пределах подчинения, а у элементов соответственно разные элементы родителей, вот и получаете непонятную сортировку
а по поводу универсальной процедуры сортировки таблицы значений рекомендую посмотреть: http://www.1cpp.ru/docum/icpp/html/IndexedTable.html зачем придумывать что-то, что уже придумано и достаточно эффективно работает.
 

vbs

Well-known member
18.02.2007
1 708
1
#10
у автора скорее всего справочник многоуровневый и уникальность кодов в пределах подчинения, а у элементов соответственно разные элементы родителей, вот и получаете непонятную сортировку
идея правильная, но в данном случае неприменимая - уникальность стоит по всему справочнику. Но так как основное представление - по наименованию, то одинаковые наименования и сортируются
как Бог на душу положит, если наименования совпадают. В случае уникальности в пределах подчинения предлагаю использовать для сортировки колонку, состоящую из наименования +Полный Код
 
H
#11
Сейчас план такой
ТЗ продублировал, свернул, отсортировал, в исходную ТЗ добавил колонку и внес в нее напротив кажного значения номер строки из свернутой ТЗ, отсортировал исходную ТЗ по новой колонке

По идее должно работать при ЛЮБОМ раскладе
Сейчас нет времени на реализацию, до понедельника сделаю
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#12
По идее должно работать при ЛЮБОМ раскладе
Вопрос в том, СКОЛЬКО это будет работать.
Выше Gluk8888 дал ссылку на готовое решение. Хотя, если есть страсть к изобретению велосипедов...
 
H
#13
Я не могу использовать ВК, так как мне это надо для моего внешнего отчета по регистрам
У кого-то 1срр есть, а у кого-то нет

Вопрос в том, СКОЛЬКО это будет работать
Об этом я тоже подумал
При использовании в отчете думаю дать юзеру возможность включать/отключать такую сортировку
То есть если обычная отработала криво, то можно включить более надежную и медленную
ИМХО это приемлимый выход
 

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#14
При использовании в отчете думаю дать юзеру возможность включать/отключать такую сортировку
ну в таком случае можно проверку делать - существует ли у юзверя ВК - если да, то юзать ее...
 

vbs

Well-known member
18.02.2007
1 708
1
#15
Выше Gluk8888 дал ссылку на готовое решение. Хотя, если есть страсть к изобретению велосипедов...
У кого-то 1срр есть, а у кого-то нет
ну в таком случае можно проверку делать - существует ли у юзверя ВК - если да, то юзать ее...
А не приходилось ли уважаемым участникам дискуссии писать на простой, за неимением гербовой ?
Имею в виду, что в постановке задачи могло быть поставлено жесткое условие - использовать только возможности среды.
Давным-давно нечто подобное мне приходилось изготавливать в среде 7.5 (напомню тем, кто не знает - не было там ни таблицы значений, ни списка значений).
Придумалось следующее : подготовленный массив выкатывать в DBF-файл, который затем обеспечивать составным индексом и заливать обратно уже сложно-индексированный файл.
Согласен, 8-я буква алфавита в качестве средства решения, возможно, присутствовала более необходимого, но задача была решена :RTFM:
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#17
А не приходилось ли уважаемым участникам дискуссии писать на простой, за неимением гербовой ?
Имею в виду, что в постановке задачи могло быть поставлено жесткое условие - использовать только возможности среды.
Среда 1С 7.7 позволяет работать с прямыми запросами через ADO. Только в этом случае вам самому придется создавать строку подключения и парсить текстовый файл с описанием структуры базы, что, собственно, за вас делает 1С++.

Так что, никаких "нештатных" возможностей мы не используем.