Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Уменьшить количество символов во внутреннем идентификаторе

Уменьшить количество символов во внутреннем идентификаторе
Я
   НачинающийНик
 
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ричную перекодировать?
   VladZ
 
15 - 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
Значит не читабельный будет
   Nikoss
 
28 - 15.02.19 - 12:42
(27) что значит не читабельный? типа без спец символов?
   НачинающийНик
 
29 - 15.02.19 - 12:45
Что-то высох по идеям.
Наверное придется (1) :(
   ptiz
 
30 - 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
ТС ещё тут? Вспомнил, где эти функции )
   Nikoss
 
35 - 15.02.19 - 14:24
(34) тут уже не в функции проблема, а в том что в 17 символов не впихнуть 128бит, без кракозябский символов
   hhhh
 
36 - 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
   Конструктор1С
 
40 - 15.02.19 - 14:51
(0) "ИС-приемник поменяли, теперь есть ограничение на код - 17 символов"

А отдельное поле добавить под 1сный гуид никак?
   ам794123
 
41 - 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я влезут.
   bolero
 
44 - 17.02.19 - 22:22
(42) если ВЭД не планируется - пиши свой порядковый номер (читай, номер справочника) в "НаименованиеМеждународное" или что там в твоей конфе есть.
При записи новых контрагентов чтобы не мучить базу вычислением максимума от строки, можно взять unix time - там 10 цифр. Главное - проверить, что пол-секунды назад другого не записали, и единичку-две накинуть (либо Отказ бросить). Либо микросекунды добавить, будет 16 цифр.

будущий ты, правда, сильно удивится, когда начнет ВЭД
   НачинающийНик
 
45 - 17.02.19 - 22:30
(44) так 1,2 и 3 группа и так время в десятых долях микросекунд, зачем еще что-то придумывать.
   trad
 
46 - 17.02.19 - 23:34
md5 хэш
128бит = 16 байт
Уникальность сохранится
   trad
 
47 - 17.02.19 - 23:34
Только не просите меня это доказать )
   palsergeich
 
48 - 17.02.19 - 23:53
(46) Гуид тоже 16 байт.
Тут не могут 16 байт в 16 строковых символов уложить.
   bolero
 
49 - 17.02.19 - 23:57
(46) (48) у ТС ограничение на использование всех битов в байте, но это не точно - он до сих пор на (33) не ответил
   Мыш
 
50 - 18.02.19 - 09:05
(48) Тут вопрос, что считать строковыми символами. В 185 укладывается, но это с расширенной таблицей ascii
   mcarrowd
 
51 - 18.02.19 - 09:36
Где-то видел мега-функцию на делфи, которая из гуида делала строку с кириллицей на 23 символа. Сдаётся мне, что без "кракозябр" короче не сделать. А не всякая кракозябра нормально ляжет в БД.
   Xapac
 
Модератор
52 - 18.02.19 - 09:55
(0) Дай по жопе авторам другой ИС. пускай байтов добавят. Это же не проблема
   НачинающийНик
 
53 - 18.02.19 - 10:46
(50) почему ты считаешь 185? если по два символа 16бит в 1 переделывать это 16 х 16 = 256 вариантов. Я же считал уже: цифры - 10 символов
английский алфавит строчный + прописной 52, русский алфавит строчный + прописной 66 = 128 символов. Всякие спецсимволы *&^&*!$# я уверен нельзя.

(33) молчат пока. наверное нестандартный вопрос :)
   Nikoss
 
54 - 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
   Lama12
 
61 - 18.02.19 - 12:20
(0) Может я ошибаюсь, но ГУДИ это 16 байтов. Что мешает его по другому представлять?
   Rema Dan
 
62 - 18.02.19 - 12:25
(0) Похожая проблема и решение: http://ethicorum.ru/?p=161&lang=ru По её мотивам можно сжать UID до нужных размеров.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.