|   |   | 
| 
 | Индексирование кодов честного знака (интересная комбинаторная задачка) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Dzenn гуру 22.01.25✎ 15:26 | 
        Коллеги, привет.
 Такая задачка — у нас есть массив из 100 000 000 кодов "Честного знака" — они все уникальны. Понятно, что делать индекс по уникальным значениям нельзя. Все коды загружены в регистр сведений. Нужно обеспечить средствами 1С более эффективный поиск по таблице, нежели простым перебором. Идея для решения задачки такая — придумать алгоритм, на входе которого будет уникальный код честного знака, а на выходе — неуникальное число от 1 до 1000, причём вероятность получения любого числа от 1 до 1000 в случае уникальности кодов (отбрасывая левые нули) должна быть примерно равной. Для этого числа можно создать дополнительную колонку регистра и по ней индексировать. Знаете ли вы готовые алгоритмы для решения подобной задачи? | |||
| 1
    
        Dzenn гуру 22.01.25✎ 15:29 | 
        хотя блин я кажется уже сам догадался... сначала сделать хэширование, потом просуммировать все коды символов хеширования и взять остаток от деления на 1000     | |||
| 2
    
        H A D G E H O G s 22.01.25✎ 15:30 | 
        "Понятно, что делать индекс по уникальным значениям нельзя."
 Нет, непонятно. | |||
| 3
    
        H A D G E H O G s 22.01.25✎ 15:31 | 
        Возможно вы индекс не хотите делать по причине его размера, других объяснений нежелания у меня нет.     | |||
| 4
    
        Dzenn гуру 22.01.25✎ 15:32 | 
        (3) ну конечно     | |||
| 5
    
        H A D G E H O G s 22.01.25✎ 15:33 | 
        (4) Поиск в 100000 строк тоже глупо     | |||
| 6
    
        Dzenn гуру 22.01.25✎ 15:34 | 
        (5) влезать с оценочными суждениями, но без решений — примерно раз в 500 глупее     | |||
| 7
    
        H A D G E H O G s 22.01.25✎ 15:35 | 
        Я просто приколочу это здесь
 p.s. Автор не понимает размера работ 
 | |||
| 8
    
        Ненавижу 1С гуру 22.01.25✎ 15:35 | 
        (1) осталось доказать, что вероятность равномерная     | |||
| 9
    
        H A D G E H O G s 22.01.25✎ 15:35 | 
        (6) Вам хорошего дня.     | |||
| 10
    
        ptiz 22.01.25✎ 15:37 | 
        (1) А куда потом вкрячить это поле? Речь вообще про 1С?
 ИМХО, лучше пересмотреть задачу целиком. | |||
| 11
    
        ptiz 22.01.25✎ 15:40 | 
        а... вижу
 "дополнительную колонку регистра" - а смысл? Если новое поле сделать индексированным - в этот индекс 1С также включит все измерения РС, и индекс будет "большим". Шаманить в СУБД напрямую? | |||
| 12
    
        ptiz 22.01.25✎ 15:44 | 
        (грустно смотрю на свой справочник из 965 000 000 кодов)     | |||
| 13
    
        Чеширский 22.01.25✎ 15:45 | 
        Вот тоже с Ежиком согласен.
 Мне тоже совсем не понятно, с какой стати не нужен индекс по уникальным значениям? Может вы тогда пометку удаления еще предложите индексирвоать? | |||
| 14
    
        H A D G E H O G s 22.01.25✎ 15:48 | 
        (12) Завод?     | |||
| 15
    
        Ёпрст гуру 22.01.25✎ 15:51 | 
        (12) у нас скормнее, 198 577 055..но, это не чз, просто марка     | |||
| 16
    
        Чеширский 22.01.25✎ 15:52 | 
        ЧЗ -это вроде 31 цифра     | |||
| 17
    
        Андрюха 22.01.25✎ 15:59 | 
        (0) Зачем искать по всей таблице из 100М записей, наверняка коды в регистре хранятся с привязкой к номенклатуре.     | |||
| 18
    
        ptiz 22.01.25✎ 16:09 | 
        (14) Хуже - лекарства оптом.     | |||
| 19
    
        Чеширский 22.01.25✎ 16:50 | 
        (17) При наличии индексов в 100М таблице -  любая запись найдется за максимум 30 шагов чтения строк таблицы.     | |||
| 20
    
        Garykom гуру 22.01.25✎ 17:05 | 
        (0) >Знаете ли вы готовые алгоритмы для решения подобной задачи?
 Знаю. Не хранить коды в 1С. Вынести их наружу. | |||
| 21
    
        Garykom гуру 22.01.25✎ 17:10 | 
        (20)+ В 1С хранить только SGTIN или SSCC, их же указывать в доках
 Нахрена вам в базе 1С криптохвосты? | |||
| 22
    
        Garykom гуру 22.01.25✎ 17:11 | 
        (21)+ а индекс по SGTIN уже есть
 Это GTIN часть | |||
| 23
    
        Лодырь 22.01.25✎ 17:40 | 
        (18) Вам кстати криптохвосты низзя вроде хранить в базе по закону. В отличие от других.     | |||
| 24
    
        Garykom гуру 22.01.25✎ 18:26 | 
        (23) Нет такого     | |||
| 25
    
        ptiz 22.01.25✎ 18:27 | 
        (23) У нас их и нет, только sgtin. Кстати, в (0) тоже не указано - какой именно код они хранят.     | |||
| 26
    
        Волшебник 22.01.25✎ 18:56 | 
        (0) >> Понятно, что делать индекс по уникальным значениям нельзя.
 Вы там совсем ёбнулись что ли? | |||
| 27
    
        Asmody 22.01.25✎ 19:05 | 
        На уровне бреда: а если запихнуть коды во внешнюю базу, не 1С, и ходить в неё через внешний источник, быстрее не получится?     | |||
| 29
    
        Волшебник 22.01.25✎ 19:11 | 
        А может всё-таки бахнем индекс? Право, сударь! Для быстрого поиска люди придумали ИНДЕКСЫ!     
 | |||
| 30
    
        Волшебник 22.01.25✎ 19:13 | 
        (19) 👍     | |||
| 31
    
        Лодырь 22.01.25✎ 19:48 | 
        (24) 
 "IV. Правила хранения и использования кодов маркировки 4.1. Код маркировки (далее – КМ), включающие в себя идентификатор ключа подписи и код проверки (крипто-часть КМ) могут храниться в учетной системе или АСУТП Участника только в процессе производственного цикла. После отправки отчета об использовании (нанесении) КМ крипто-часть должна быть удалена. Хранение КМ, включающих в себя крипто-часть, после их нанесения на готовую продукцию и отправки отчета об использовании кодов маркировки в учетной системе или АСУТП Участника запрещено." | |||
| 33
    
        Dzenn гуру 23.01.25✎ 12:29 | 
        (8) угу, распределение оказалось неравномерным ) но при остатке от деления на 100 — вполне себе вышло, стандартное отклонение — 28,5229 :-)     | |||
| 34
    
        Dzenn гуру 23.01.25✎ 12:31 | 
        (29) нет, ну можно конечно, просто индексная таблица будет невероятно большой, и при добавлении новых значений она будет сильно кряхтеть     | |||
| 35
    
        Волшебник 23.01.25✎ 12:31 | 
        (34) Не жмотитесь. При наличии 100 млн марок должны быть деньги на систему хранения типа SAS     | |||
| 36
    
        Dzenn гуру 24.01.25✎ 10:11 | 
        (35) ста миллионов не будет, будет в районе миллиона, задачу специально означил таким образом, чтобы абстрагировать её в сторону алгоритма     | |||
| 37
    
        Garykom гуру 24.01.25✎ 10:45 | 
        1. перевести код марки в огромное число N
 2. получить его квадрат K = N*N 3. взять случайные 3 цифры из квадрата числа K (рядом подряд или произвольно, запомнить позиции и всегда брать их или из середины числа без 0 слева) 4. получится 0..999 - если надо от 1 до 1000 сделать +1 | |||
| 38
    
        Asmody 24.01.25✎ 10:40 | 
        (37) а чего тогда просто не взять 3 случайных цифры?     | |||
| 39
    
        Garykom гуру 24.01.25✎ 10:42 | 
        (38) GTIN в начале, случайного распределения не будет
 они вероятно чаще с одними и теми же поставщиками работают | |||
| 40
    
        Garykom гуру 24.01.25✎ 10:44 | 
        (38) но правильно заметил от "случайные" надо избавиться для хеша, для повторяемости
 или всегда в середине брать или запомнить случайные позиции и всегда брать их | |||
| 41
    
        Asmody 24.01.25✎ 10:50 | 
        бери 3 последние цифры числа π, не ошибешься     | |||
| 42
    
        Garykom гуру 24.01.25✎ 10:54 | 
        (41) тоже неплохая идея если брать "3 последние цифры числа π" начиная с позиции "перевести код марки в огромное число N"     | |||
| 43
    
        ptiz 24.01.25✎ 13:03 | 
        (42) Изобретаем свой хэш?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |