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

Тема в разделе "1C и всё что с ней связано", создана пользователем Hryv, 15 фев 2010.

  1. Hryv

    Hryv Гость

    Я опять в шоке

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

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

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

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

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    наверно он по внутренним индификаторам шпарит, у меня такая хрень была ничего я так и не придумал!
     
  3. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Я с этим явлением давно уже борюсь методом создания еще одной колонки, содержащей TrimR(Наименование)+TrimAll(String(Код)), по ней и сортирую

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Можно пояснить? Что именно означает "как попало"? Сортировка идет по основному представлению (для справочников это, как правило, Наименование). Если наименования совпадают, как быть? А вот для этого и существует программист, который должен предусмотреть дополнительный критерий сортировки. Или вы считаете, что платформа вам и кофе должна варить?
     
  5. Hryv

    Hryv Гость

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

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


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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Вот уж не уверен что это хороший вариант... хотя любопытно будет поглядеть на результат.
    имхо в тз можно для справочника сделать некую уникальность - наименование, код, еще какой-то реквизит...
     
  7. Hryv

    Hryv Гость

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Сложнее.. а нельзя ли делать сворачивание, а потом сортировку?
     
  9. Gluk8888

    Gluk8888 Гость

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    идея правильная, но в данном случае неприменимая - уникальность стоит по всему справочнику. Но так как основное представление - по наименованию, то одинаковые наименования и сортируются
    как Бог на душу положит, если наименования совпадают. В случае уникальности в пределах подчинения предлагаю использовать для сортировки колонку, состоящую из наименования +Полный Код
     
  11. Hryv

    Hryv Гость

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

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Вопрос в том, СКОЛЬКО это будет работать.
    Выше Gluk8888 дал ссылку на готовое решение. Хотя, если есть страсть к изобретению велосипедов...
     
  13. Hryv

    Hryv Гость

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

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

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    ну в таком случае можно проверку делать - существует ли у юзверя ВК - если да, то юзать ее...
     
  15. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    А не приходилось ли уважаемым участникам дискуссии писать на простой, за неимением гербовой ?
    Имею в виду, что в постановке задачи могло быть поставлено жесткое условие - использовать только возможности среды.
    Давным-давно нечто подобное мне приходилось изготавливать в среде 7.5 (напомню тем, кто не знает - не было там ни таблицы значений, ни списка значений).
    Придумалось следующее : подготовленный массив выкатывать в DBF-файл, который затем обеспечивать составным индексом и заливать обратно уже сложно-индексированный файл.
    Согласен, 8-я буква алфавита в качестве средства решения, возможно, присутствовала более необходимого, но задача была решена :RTFM:
     
  16. Gluk8888

    Gluk8888 Гость

    а положить 1С++ и подгружать ее в самой обработке религия не позволяет?
     
  17. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Среда 1С 7.7 позволяет работать с прямыми запросами через ADO. Только в этом случае вам самому придется создавать строку подключения и парсить текстовый файл с описанием структуры базы, что, собственно, за вас делает 1С++.

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

Поделиться этой страницей