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

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

Hryv

Я опять в шоке

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

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

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

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

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

SeverBap

наверно он по внутренним индификаторам шпарит, у меня такая хрень была ничего я так и не придумал!
 
V

vbs

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

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

vitfil

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

Hryv

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

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


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

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

KiR

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

Hryv

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

Если речь идет о конкретном справочнике, то без проблем

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

Gluk8888

у автора скорее всего справочник многоуровневый и уникальность кодов в пределах подчинения, а у элементов соответственно разные элементы родителей, вот и получаете непонятную сортировку
а по поводу универсальной процедуры сортировки таблицы значений рекомендую посмотреть: зачем придумывать что-то, что уже придумано и достаточно эффективно работает.
 
V

vbs

у автора скорее всего справочник многоуровневый и уникальность кодов в пределах подчинения, а у элементов соответственно разные элементы родителей, вот и получаете непонятную сортировку
идея правильная, но в данном случае неприменимая - уникальность стоит по всему справочнику. Но так как основное представление - по наименованию, то одинаковые наименования и сортируются
как Бог на душу положит, если наименования совпадают. В случае уникальности в пределах подчинения предлагаю использовать для сортировки колонку, состоящую из наименования +Полный Код
 
H

Hryv

Сейчас план такой
ТЗ продублировал, свернул, отсортировал, в исходную ТЗ добавил колонку и внес в нее напротив кажного значения номер строки из свернутой ТЗ, отсортировал исходную ТЗ по новой колонке

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

vitfil

По идее должно работать при ЛЮБОМ раскладе
Вопрос в том, СКОЛЬКО это будет работать.
Выше Gluk8888 дал ссылку на готовое решение. Хотя, если есть страсть к изобретению велосипедов...
 
H

Hryv

Я не могу использовать ВК, так как мне это надо для моего внешнего отчета по регистрам
У кого-то 1срр есть, а у кого-то нет

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

KiR

При использовании в отчете думаю дать юзеру возможность включать/отключать такую сортировку
ну в таком случае можно проверку делать - существует ли у юзверя ВК - если да, то юзать ее...
 
V

vbs

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

Gluk8888

Я не могу использовать ВК, так как мне это надо для моего внешнего отчета по регистрам
У кого-то 1срр есть, а у кого-то нет
а положить 1С++ и подгружать ее в самой обработке религия не позволяет?
 
V

vitfil

А не приходилось ли уважаемым участникам дискуссии писать на простой, за неимением гербовой ?
Имею в виду, что в постановке задачи могло быть поставлено жесткое условие - использовать только возможности среды.

Среда 1С 7.7 позволяет работать с прямыми запросами через ADO. Только в этом случае вам самому придется создавать строку подключения и парсить текстовый файл с описанием структуры базы, что, собственно, за вас делает 1С++.

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!