Имя: Пароль:
1C
1C 7.7
v7: Поиск одинаковых элементов справочника
,
0 slimuz
 
20.07.18
08:37
Добрый день.
Подскажите как сравнить коды одного справочника для вывода в отчет одинаковых кодов (дубли)?
1 1Сергей
 
20.07.18
08:43
вариантов куча. начиная от перебора и заканчивая покупкой готового решения на нимфостарте
2 Мандалай
 
20.07.18
08:46
А запросом получить и сгруппировать по коду?
Или 77 так не умеет?
3 1Сергей
 
20.07.18
08:47
(2) Умеет, вроде.
4 slimuz
 
20.07.18
08:56
(2) Запросом, но мне нужно чтоб код был урезан до 8 символов (Формат(код, "С8") перед сравнением
5 Ёпрст
 
20.07.18
09:11
(0)

select * from $Справочник.Нужный
where left(code,8) in (select left(code,8) from $Справочник.Нужный group by left(code,8) having count(*)>2)
6 Djelf
 
20.07.18
21:10
А... ерунда... попробуйте
    ТекстЗапроса="
    |SELECT
    |    id [Номенклатура $Справочник.Номенклатура]
    |    ,code
    |    ,code8
    |    ,count
    |FROM (  SELECT
    |    id
    |    ,code
    |    ,substr(code,1,8) as code8
    |    ,count(*) OVER (PARTITION BY substr(code,1,8)) as count
    |FROM Справочник_Номенклатура
    |)
    |";
    База=СоздатьОбъект("SQLiteBase");
    База.Открыть(":memory:");
    Запрос=База.НовыйЗапрос();
    итДанные=СоздатьОбъект("ИндексированнаяТаблица");
    Запрос.ВыполнитьЗапрос(ТекстЗапроса,итДанные);

7 Djelf
 
20.07.18
21:13
Зачем нужен OVER и PARTITION я понимаю, но как то не очень применил. Эта ситуация применима.
8 Djelf
 
20.07.18
21:14
Решение в (5) будет тормозить жестоко.
9 Djelf
 
20.07.18
21:23
(0) Если нет понимания зачем так и почему, это лучше делать перебором.
Возможно и после понимания "будет не быстрее", это зависит от конкретной ситуации.
10 Злопчинский
 
20.07.18
23:46
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс