1с поиск дублей по таблице значений

1. illiona 01.03.24 13:02 Сейчас в теме
Добрый день. Есть таблица значений
1 сс-0001234
2 сс-0201321
3 сс-0201234
4 сс-0012340
5 сс-0000464
6 сс-0004640
Дубли считаются если 5 символов справа равны (1, 3)
Как можно оптимально, найти такие дубли?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
24. spacecraft 01.03.24 19:08 Сейчас в теме
(1) это строковый тип данных?
Находятся за один проход циклом.
Создается соответствие до цикла.
В цикле проверяется значение в соответствии по ключу по нужным кол-вам символов. Если нашли, то добавляем в дубли. Сохраняем строку таблицы (или любое значение кроме Неопределено) в соответствие по ключу из нужного кол-ва символов.
2. YozZzhik 01.03.24 13:20 Сейчас в теме
Выгружаете ТЗ в запрос. В запросе из временной таблицы выбираете поля: НомерСтроки, необходимая вам часть кода (см. функции работы со строкой) и поле с цифрой 1. Делаете итоги по полю с частью номера и суммируете цифру 1. Там, где в итоговой строке цифра будет больше 1, есть дубли
unknown181538; +1 Ответить
4. user2033930 01.03.24 14:12 Сейчас в теме
(2) Да почему все любят насиловать СУБД работой с оперативными данными???
3. illiona 01.03.24 13:51 Сейчас в теме
Могут быть номера
сс-0002234
сс-0202234
user2033930; +1 Ответить
5. Said-We 01.03.24 14:40 Сейчас в теме
(4) Потому что так проще. И иногда даже быстрее.
SQL это не алгоритм писать, а сформулировать задачу.
А на языке 1С это добавлять колонку, сортировать и проходить в цикле и проверять равна предыдущей/следующей или нет.
unknown181538; +1 Ответить
6. user2033930 01.03.24 14:43 Сейчас в теме
(5) Может и быстрее. Иногда. Совсем иногда. И не надо проще. Надо думать о нагрузке на сервера.
7. Said-We 01.03.24 14:48 Сейчас в теме
(6)
Надо думать о нагрузке на сервера.
Не надо. 1С не думает. Только и занимается что из пустого в порожнее данные со своим тонким клиентом и БСП передает. И плевать они хотели на производительность. :-)
А как 1С с СУБД работает лучше вообще не смотреть.

А тут мелкая разовая задачка с поиском двойников по подстроке. Фиолетово как её решать.
Важно будет только, если это тестовая задача на собеседовании.
unknown181538; +1 Ответить
28. user1880116 01.03.24 19:58 Сейчас в теме
(7)
разовая
С чего ты взял, что она разовая?
user2033930; +1 Ответить
8. SlavaKron 01.03.24 15:33 Сейчас в теме
(6) У вас аргументация хромает. Во-первых, никогда не быстрее, во-вторых, поддерживать такие "творения" сложнее — встроенный язык читается проще, имеет линейную структуру, позволяет вести отладку.
(5) Не завидую тем, кому придётся за вами дорабатывать.
(1) Что на выходе нужно получить? Массив? Чего проще то — обойти каждую строку и по условию заполнять массив строками.
9. user2033930 01.03.24 15:43 Сейчас в теме
(8) Поверь мне, ТЗ всегда быстрее обрабатывать в оперативной памяти, чем передавать её в СУБД.
Особенно в наших условиях, когда сервера приложений 1С находятся в РФ, а сервера СУБД находятся где-то в других странах...
12. SlavaKron 01.03.24 17:07 Сейчас в теме
(9) Не в ту сторону воюешь, я как раз это и подтверждаю. Вы со своим оппонентом сходитесь в том, что иногда отправить ТЗ в СУБД быстрее, я возражаю — никогда не быстрее.
29. user2033930 01.03.24 20:01 Сейчас в теме
(12) Так и я спрашиваю - почему все хотят отпрвить ТЗ в СУБД??? Я как раз против такого.
23. Said-We 01.03.24 18:03 Сейчас в теме
(8)
Во-первых, никогда не быстрее
Для разовой задачи входит не только время выполнения алгоритма, но и время его написания. Запросом быстрее, проще и вероятность ошибки минимальна. Так что, в конечном счете, быстрее. :-)
unknown181538; +1 Ответить
25. user1880116 01.03.24 19:22 Сейчас в теме
(23) Грустно, когда кроме SQL ничего не знаешь, правда?
user2033930; +1 Ответить
10. starik-2005 3039 01.03.24 15:58 Сейчас в теме
1. Отсортировать по полю с дублями -> ТЗ.Сортировать("Номер").
2. Сравнить текущий с запомненным на предыдущем шаге предыдущим: СтараяСтрока = неопределено; Для каждого Строка... Сравнить(Строка, СтараяСтрока); СтараяСтрока = Строка; КонецЦиклов - где-то там функция Сравнить(С0, С1), внутри которой код с проверкой на неопределено.
3. Если "равно" - сообщить куда следует и затаиться до дальнейших указаний.
11. Said-We 01.03.24 16:45 Сейчас в теме
(10) У первой записи не будет признака, что следующая строка такая же. Проверять придется и текущую и с предыдущей и текущую со следующей.
13. starik-2005 3039 01.03.24 17:17 Сейчас в теме
(11)
признака, что
где-то там функция Сравнить(С0, С1), внутри которой код с проверкой на неопределено.
Надо быть внимательнее.
14. Sashares 34 01.03.24 17:19 Сейчас в теме
(11)Реализация зависит от того, что нужно получить в итоге.
Надо понимать, что считаем дублями - все записи с одинаковой частью кода, или только вторую и последующие запись с таким кодом, а первую запись считаем оригиналом.
19. Said-We 01.03.24 17:23 Сейчас в теме
(14)
Надо понимать, что считаем дублями

Читаем {1} "Дубли считаются если 5 символов справа равны (1, 3) " - и видим, что нужно и 1 и 3.
20. Sashares 34 01.03.24 17:37 Сейчас в теме
(19) Ок, считаем, что нужны все строки, задача элементарная, споры на пустом месте))
15. Said-We 01.03.24 17:20 Сейчас в теме
(13) Ещё раз. Вы у текущей сравниваете значение с предыдущей по некой функции. А что-то куда-то сообщаете или признак ставите это не важно. Если у второй строки такое-же значение как у первой, то где сообщение о том что у первой тоже дубль?
Два сравнения должно быть.
Найти, как правило, нужно все дубли, а не первый попавшийся.
16. starik-2005 3039 01.03.24 17:21 Сейчас в теме
(15)
Два сравнения должно быть.
Не должно. Но там есть другая проблема.
17. Said-We 01.03.24 17:22 Сейчас в теме
(16)
Но там есть другая проблема
Не может быть тут проблем. Задача слишком простая.
18. starik-2005 3039 01.03.24 17:23 Сейчас в теме
22. Said-We 01.03.24 17:51 Сейчас в теме
(18)
Давай, подумай.
В условии задачи 5-ть последних "символа", а не числа. Нет тут сложностей.
21. Said-We 01.03.24 17:43 Сейчас в теме
Вариантов решения много. Можно даже так:
https://onecompiler.com/sqlserver/425z2vxw6

:-)
Прикрепленные файлы:
26. user856012 13 01.03.24 19:24 Сейчас в теме
Вопрос: сколько программистов может одновременно пригрузить (и поссорить) одна 1Сница?

Ответ - в этой ветке. ;-)
unknown181538; +1 Ответить
27. user1880116 01.03.24 19:29 Сейчас в теме
(26) И это мы еще в этой ветке выступления про кубаноидов не слышали =]
30. user2033930 01.03.24 20:02 Сейчас в теме
31. user1880116 01.03.24 20:05 Сейчас в теме
(30) Сейчас начнем. Вот только starik-2005 с мыслями соберется... и жахнет.
32. starik-2005 3039 01.03.24 20:45 Сейчас в теме
(31) Так всем это и без меня известно.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот