|
Уменьшить количество символов во внутреннем идентификаторе | ☑ | ||
---|---|---|---|---|
0
НачинающийНик
15.02.19
✎
11:36
|
Добрый день,
настроен обмен данными (отчет о продажах и проч) с другой ИС по внутреннему идентификатору 1с, все работало ок. ИС-приемник поменяли, теперь есть ограничение на код - 17 символов. Типовую менять не хочется (да и обработки обмена тоже сильно менять не охота), может у кого какая идея есть на этот счет? Может хэш-функцию от внутреннего идентификатора сделать, но я в них не очень шарю, уникальность хэшкода от уникального внутреннего идентификатора сохранится? |
|||
1
ДенисЧ
15.02.19
✎
11:37
|
Сделай свой идентификатор. С библиотекаршами и чаепитием
|
|||
2
Вафель
15.02.19
✎
11:38
|
символы Юникод?
|
|||
3
НачинающийНик
15.02.19
✎
11:38
|
(1) С хэшем не прокатит? Лень, как вы понимаете :)
|
|||
4
НачинающийНик
15.02.19
✎
11:38
|
(2) не понял вопроса, если честно
|
|||
5
Вафель
15.02.19
✎
11:39
|
(3) хэш на то и хэш, что это не однозначное соотвествие
|
|||
6
Вафель
15.02.19
✎
11:39
|
ГУИД - 16 байт.
Строка 17 символов - значит должно влезть, даже без юникода |
|||
7
НачинающийНик
15.02.19
✎
11:40
|
(5) ну т.е. считаете один выход - звать библиотекарш, как в (1) ?
|
|||
8
Вафель
15.02.19
✎
11:41
|
а если юникод, то даже 2 гуида влезет
|
|||
9
НачинающийНик
15.02.19
✎
11:42
|
юникод, в смысле? вы спрашиваете можно ли юникод отправить в ИС приемник?
|
|||
10
НачинающийНик
15.02.19
✎
11:43
|
d6c20ebd-0276-11db-8007-0013d4609ea4
36 символов. Если дефисы выкинуть 32 остается.. |
|||
11
Вафель
15.02.19
✎
11:44
|
думай еще
|
|||
12
НачинающийНик
15.02.19
✎
11:45
|
(11) думал.. нет идей. Пришел сюда, здесь по умнее, может подскажут как быть
|
|||
13
Вафель
15.02.19
✎
11:47
|
подсказка: не все символы алфавита используются в гуиде
|
|||
14
НачинающийНик
15.02.19
✎
11:47
|
:) понимаю что там 16тиричная система.. но.. не улавливаю. В 32ричную перекодировать?
|
|||
15
VladZ
15.02.19
✎
11:49
|
(14) Как вариант.
|
|||
16
Вафель
15.02.19
✎
11:49
|
если нужно чтоб читабельно было можно взять русск + англ + цифры + заглавные как буквы с другим кодом
|
|||
17
НачинающийНик
15.02.19
✎
11:51
|
D6C20EBD027611DB80070013D4609EA4(16) = 6MO87BQ0JM27DO01O02FA617L4(32)
Почти ) |
|||
18
Мыш
15.02.19
✎
11:52
|
(16) Так можно в 8 символов уложиться )
|
|||
19
НачинающийНик
15.02.19
✎
11:54
|
(18) есть функция :)?
|
|||
20
Мыш
15.02.19
✎
11:55
|
(19) Где-то была. Что-то из разряда "МойГенийДаритВам" )))
Надо порыться |
|||
21
НачинающийНик
15.02.19
✎
11:57
|
(20) очень надо, поищите пожалуйста
|
|||
22
Вафель
15.02.19
✎
11:58
|
(21) берешь 2 символа - ему в соответствие ставишь 1.
таблицу соотвествий можно руками заполнить |
|||
23
НачинающийНик
15.02.19
✎
12:00
|
256 вариантов таблица получается, правильно я посчитал?
|
|||
24
Йохохо
15.02.19
✎
12:02
|
(23) только если глазами посчитать будет сильно меньше
|
|||
25
Мыш
15.02.19
✎
12:02
|
(21) Навскидку не нашел, сорри
|
|||
26
НачинающийНик
15.02.19
✎
12:33
|
не хватает, блин :((
цифры - 10 символов английский алфавит строчный + прописной 52 русский алфавит строчный + прописной 66 128 вариантов. Мне то 256 надо :( |
|||
27
Вафель
15.02.19
✎
12:35
|
Значит не читабельный будет
|
|||
28
Nikoss
15.02.19
✎
12:42
|
(27) что значит не читабельный? типа без спец символов?
|
|||
29
НачинающийНик
15.02.19
✎
12:45
|
Что-то высох по идеям.
Наверное придется (1) :( |
|||
30
ptiz
15.02.19
✎
12:45
|
(0) Вариант 1: Пусть ИС-приемник заставят принимать 36 символов и не выпендриваются.
Вариант 2: всё-таки править конфу, или сделать расширение, в котором добавить "регистр соответствий". |
|||
31
Вафель
15.02.19
✎
12:47
|
(28) типа такого
↓D·♂↨◙○▬♫ |
|||
32
НачинающийНик
15.02.19
✎
12:51
|
(31) приемник такое не возьмет
|
|||
33
Йохохо
15.02.19
✎
13:01
|
(32) уточни у них что такое символ
|
|||
34
Мыш
15.02.19
✎
14:09
|
ТС ещё тут? Вспомнил, где эти функции )
|
|||
35
Nikoss
15.02.19
✎
14:24
|
(34) тут уже не в функции проблема, а в том что в 17 символов не впихнуть 128бит, без кракозябский символов
|
|||
36
hhhh
15.02.19
✎
14:26
|
(32) в шестнадцатеричном коде 16 разных символов. Больше там нет в гуиде. 10 цифр и шесть букв, всё. Откуда вы 52 символа выцарапали, наверно пятница вам в голову ударила.
|
|||
37
Вафель
15.02.19
✎
14:26
|
(32) а китайские иероглифы примут?
|
|||
38
Мыш
15.02.19
✎
14:29
|
(35) Этта да. Надо 185 символов.
|
|||
39
Мыш
15.02.19
✎
14:29
|
(36) Символов 16, а разрядов 32
|
|||
40
Конструктор1С
15.02.19
✎
14:51
|
(0) "ИС-приемник поменяли, теперь есть ограничение на код - 17 символов"
А отдельное поле добавить под 1сный гуид никак? |
|||
41
ам794123
15.02.19
✎
15:11
|
(0) прочти вот это http://catalog.mista.ru/public/635159/ и все сразу станет понятным
|
|||
42
НачинающийНик
17.02.19
✎
22:04
|
(41) почитал, спасибо!
Выгрузил УИДы - справочник контрагенты 1с почему-то решила без кода сделать, из-за этого то в общем весь огород горожу. 3.5тыс уникальных ссылок, разделил по группам разделенные дефисами и посчитал количество повторений. 1-ая группа на моей выборке обеспечивала уникальность, т.е. ни одного повторения не было 2-ая группа разброс от 1 до 56 повторений 3-я группа от 50 до 451 повторений 4-ая от 1-220, 5ая от 1-791 Судя по (41) первые три группы обеспечивают уникальность интервала в десятых долях микросекунд, и это всего 12 символов. Добавим 4ую группу "счетчик уникальности" (не до конца понял, что это, но на 4 символа еще есть место) и получим уникальный код. Последняя часть, которую в (41) обзывают MAC адресом (я так понимаю не сервера, а клиента) можно отбросить, по ней меньше всего разброс, оно и понятно, большая часть клиентов сидят в rdp значит будет часто повторяться т.к. MAC один. Получается 16 символов которые должны обеспечить уникальность кода. Надеюсь я все правильно понял. Ну если возникнут проблемы с повторениями, то это проблемы "меня из будущего", а не мои. Наверное он будет решать как в (1) :)) |
|||
43
НачинающийНик
17.02.19
✎
22:06
|
(42) устал наверное. 4 и 5 не помещаются, только 1, 2 и 3я влезут.
|
|||
44
bolero
17.02.19
✎
22:22
|
(42) если ВЭД не планируется - пиши свой порядковый номер (читай, номер справочника) в "НаименованиеМеждународное" или что там в твоей конфе есть.
При записи новых контрагентов чтобы не мучить базу вычислением максимума от строки, можно взять unix time - там 10 цифр. Главное - проверить, что пол-секунды назад другого не записали, и единичку-две накинуть (либо Отказ бросить). Либо микросекунды добавить, будет 16 цифр. будущий ты, правда, сильно удивится, когда начнет ВЭД |
|||
45
НачинающийНик
17.02.19
✎
22:30
|
(44) так 1,2 и 3 группа и так время в десятых долях микросекунд, зачем еще что-то придумывать.
|
|||
46
trad
17.02.19
✎
23:34
|
md5 хэш
128бит = 16 байт Уникальность сохранится |
|||
47
trad
17.02.19
✎
23:34
|
Только не просите меня это доказать )
|
|||
48
palsergeich
17.02.19
✎
23:53
|
(46) Гуид тоже 16 байт.
Тут не могут 16 байт в 16 строковых символов уложить. |
|||
49
bolero
17.02.19
✎
23:57
|
(46) (48) у ТС ограничение на использование всех битов в байте, но это не точно - он до сих пор на (33) не ответил
|
|||
50
Мыш
18.02.19
✎
09:05
|
(48) Тут вопрос, что считать строковыми символами. В 185 укладывается, но это с расширенной таблицей ascii
|
|||
51
mcarrowd
18.02.19
✎
09:36
|
Где-то видел мега-функцию на делфи, которая из гуида делала строку с кириллицей на 23 символа. Сдаётся мне, что без "кракозябр" короче не сделать. А не всякая кракозябра нормально ляжет в БД.
|
|||
52
Xapac
модератор
18.02.19
✎
09:55
|
(0) Дай по жопе авторам другой ИС. пускай байтов добавят. Это же не проблема
|
|||
53
НачинающийНик
18.02.19
✎
10:46
|
(50) почему ты считаешь 185? если по два символа 16бит в 1 переделывать это 16 х 16 = 256 вариантов. Я же считал уже: цифры - 10 символов
английский алфавит строчный + прописной 52, русский алфавит строчный + прописной 66 = 128 символов. Всякие спецсимволы *&^&*!$# я уверен нельзя. (33) молчат пока. наверное нестандартный вопрос :) |
|||
54
Nikoss
18.02.19
✎
10:59
|
(53)
"если по два символа 16бит в 1 переделывать это 16 х 16 = 256 вариантов" что это такое? ты сам это придумал? если так по этому у тебя и 256. Мы же говорим о 185-ричной системе счисления, которая как раз влазит в 17 символов. Т.е. максимальный 16-ричный гуид 1С - это 17 символов 185-ричной системы счисления. |
|||
55
Йохохо
18.02.19
✎
11:10
|
судя по той статье вот такая маска будет максимально уникальной FFFFFFFF-FFFF-0FFF-000F-000000000000 и с "3.5тыс уникальных ссылок" смысла искать дальше нет
|
|||
56
НачинающийНик
18.02.19
✎
11:17
|
(54) была идея брать два подряд идущих символа 16тиричной системы и переделывать в 1 по своей таблице символов цифры, кириллица + латиница в двух регистрах. Два символа это 16х16=256 вариантов.
(55) Все верно, в третьей части FFFFFFFF-FFFF-0FFF-000F-000000000000 первый символ, это метод присваивания - случайный или от времени, т.к. справочник один, там всегда будет один тот же символ. А вот почему в 4 сегменте последний символ? |
|||
57
Йохохо
18.02.19
✎
11:21
|
(56) в четвертой "Clock Sequence - используется чтобы избежать появления дубликатов, когда часы переводятся назад или меняется идентификатор узла. Если предыдущее значение счетчика известно - то увеличивается на единицу, иначе берется случайное число." т.е. достаточно уникальная фигня на блок из 32 штук, избыточно для 3500, но почему нет, раз влезает
|
|||
58
Йохохо
18.02.19
✎
11:28
|
только если делать синхру и взад и вперед, где то засмеется ДенисЧ из (1)
|
|||
59
Мыш
18.02.19
✎
11:52
|
(53) 185^17 > 16^32 > 184^17
|
|||
60
Мыш
18.02.19
✎
11:55
|
(0) Пока ты тут, забирай:
Res = AnyToAny("FFFF", "0123456789ABCDEF", "01") function AnyToDec(val IS, T) R = 0; DC = StrLen(T); IL = StrLen(IS); for i=0 to IL-1 do S = Mid(IS, IL-i, 1); P = StrFind(T, S)-1; R = R + P*Pow(DC,i); enddo; return R; endfunction function DecToAny(val ID, T, D=0) R = ""; RA = new Array; DC = StrLen(T); B = -1; while not B=0 do O = ID%DC; RA.Add(Mid(T,O+1,1)); B = (ID - O)/DC; ID = B; enddo; for i=0 to RA.UBound() do R = RA[i]+R; enddo; if D>StrLen(R) then Z = Left(T, 1); for i=1 to D-StrLen(R) do R = Z + R; enddo; endif; return R; endfunction function AnyToAny(IS, IT, DT) return DecToAny(AnyToDec(IS, IT), DT); endfunction |
|||
61
Lama12
18.02.19
✎
12:20
|
(0) Может я ошибаюсь, но ГУДИ это 16 байтов. Что мешает его по другому представлять?
|
|||
62
Rema Dan
18.02.19
✎
12:25
|
(0) Похожая проблема и решение: http://ethicorum.ru/?p=161&lang=ru По её мотивам можно сжать UID до нужных размеров.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |