Имя: Пароль:
1C
1С v8
Уменьшить количество символов во внутреннем идентификаторе
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 до нужных размеров.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.