Как перевести ГУИД в число и обратно? Продолжение #791044


#0 by Mr_Best
Доброго времени коллеги ! Необходимо преобразовать ГУИД в число и обратно, нашел эту ветку В самом конце есть две функцию, делающие желанные мной вычисления. Но они не работают из "коробки", так как авто забыл приложить дополнительные нестандартные функции. А именно: Первые две я заменил функциями вот отсюда: Что эта функция должна делать не могу догадаться ! Может кто знает ? Может Гений 1С скинет недостающие ?
#1 by h-sp
добавляет левые нули похоже
#2 by Mr_Best
я попробовал добавить с лева ноль, и два нуля, все тщетно
#3 by Torquader
Что такое ГУИД - это 16 байт. Как перевести 16 байт в число - очень просто - вывести как десятичное число путём деления на 10 с остатком, рассматривая как очень длинное целое. В 1С с этим не должно быть проблем, так как для 1С очень длинные целые могут быть и более 16 байт.
#4 by h-sp
вы добавляйте ноль в короткие строки, если строка уже 32 символа, добавлять ноль не нужно.
#5 by Рэйв
#6 by totparen
С какой целью преобразования?
#7 by totparen
Писал нечто похоже, переводил внутренний идентификатора из 1C 7.7 в GUID и обратно.
#8 by Mr_Best
цель простая. У справочника есть реквизит МетаКод, принимающий значение например от 0 до 99. При записи справочника его необхожимо рассчитать по формуле х mod 99, где первые две цифры после нуля будет искомое значение. Таким образом числа 50, 150, 250 и т.д. до хуллиардов будут иметь МетаКод 50, другими словами каждый 50-тый. Используется для многопоточного обменна данными, где 99 количество потоков, а 50 номер потока который отправит эту регистрацию данных.
#9 by Кирпич
есть такая фигня &НаКлиенте
#10 by Волшебник
Чушь какая-то
#11 by Cyberhawk
Для многопоточности хранить маркировку объектов в базе не нужно, что-то ты перемудрил. Ну или поясни, зачем хранить маркеры в базе
#12 by Mr_Best
кому чушь, кому скорость в на порядок выше пры выгрузки, но мы же 1сники, о какой это скрости я тут задумался ?
#13 by Mr_Best
транспорт обмена http для общего понимания. При записи справочника создается запись в справонике регистраций, у которого есть числовой код, имя метаданных, ссылка на отправляемый элемент и признак что объект был физически удален. По коду определяется порядок отправки, но при делении на например два потока цепочку изменений одного объекта нужно целиком отнести в один поток, тут мне и поможет метаКод.
#14 by Cyberhawk
Зачем нужно выгружать цепочку изменений объекта, а не его текущее состояние?
#15 by Mr_Best
вообще то вы правы, я планировал держать всегда один, но на принимающей стороне тоже этот объект может быть изменен, при разраве связи и отказа онлайн обмена, возможно прийдется решать коллизию, тут это и пригодится.
#16 by Mr_Best
итоговая система онлайн обмена будет просто содержать настройку, с историей или без
#17 by EugeniaK
А при чем тут вообще ГУИД? Присваивай рандомное число от 1 до 50ти. Выборка ровнее будет.
#18 by Cyberhawk
Даже если нужно выгружать историю состояний объекта, то не ясно, почему не хватает ссылки на объект БД в твоем отдельном справочнике и зачем маркировать сам объект БД...
#19 by Mr_Best
вариант ))) раз выгрузка равномернее будет, тогда так и надо сделать. объект баз данных не маркируется, маркируется его регистрация, по одной лишь ссылке невозможно определить диапазон потоков, нужно преобразовать сначала в число. А если в про то, что по ссылке в момент отправки можно все рассчитать, то тут все просто, упадет производительность. Я добился увеличения скорости обмена по тестам в 10 раз ! И эта цифра ограничена в том числе количеством потоков и может быть быстрее, все зависит от свободных ресурсов. Код должен быть написан так, что бы "вся нагрузка" была полезной, вот и заморачиваюсь с математикой.
#20 by МихаилМ
максимальный гуид не помещает в тип число 1с.
#21 by Кирпич
а какое число у 1С максимальное?
#22 by Mr_Best
я тоже на это подумал, потому что если у гуида убрать "-" и получившееся 16-ти разрядное число конвернуть в 10 и обратно в 16, результат разнится. Остается тогда вопрос, как у Гения 1С это работает по ссылке
#23 by Mr_Best
в реквизитах максиму 32 разряда, в номере 50, где-то видел больше, не помню где ...
#24 by Кирпич
проверил. всё влазит.
#25 by Кирпич
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 340 282 366 920 938 463 463 374 607 431 768 211 455
#26 by Кирпич
#27 by Кирпич
Нафига это надо даже вникать не хочу. Чую, глупость какая то.
#28 by Mr_Best
так получилось 39 разрядов, быстрый поиск по гуглу сказал, что максимум 38 разрядов
#29 by Кирпич
в написала 1С. я ж не сам придумал
#30 by Mr_Best
вообще не будем мчать 1с, сделаю как , просто и эффективно, а самое главное быстро
#31 by Кирпич
нафига искать в гугле, если можно самому проверить
#32 by Mr_Best
Это код (функции из ссылки выше): Ш1 = СтрЗаменить(Строка(РезультатЗапроса[0].UUID), "-", ""); Это результат: 232d9a88a53011e694cdd43d7e023fd3 46 686 852 211 343 832 774 667 430 018 811 047 667 231F8F87F53010F693EEF42F6F022EF3
#33 by Mr_Best
вот такая у меня получилась проверка, не идет. Иль я где-то ошибся ?
#34 by Кирпич
может ошибся. может в 1с косяк какой. я знаю, что моя функция из работает правильно.
#35 by Кирпич
#36 by Mr_Best
а обратно конвертируется правильно ?
#37 by Кирпич
ты в 36 ричную переводишь
#38 by Mr_Best
&AtServer Функция Из_10_В_Любую(Знач Значение=0,Нотация=16) Экспорт Так сойдет ?
#39 by Mr_Best
Я ж не совсем балда и не с перепоя :)
#40 by Mr_Best
Если это баг платформы, то в моей копилке это будет четвертый который я смогу легко воспроизвести :)
#41 by Кирпич
где баг то? всё работает
#42 by Mr_Best
что, прямо этот же самый код у вас конвертирует обратно в 16 правильно ?
#43 by Mr_Best
и если так, какая версия платформы ?
#44 by Кирпич
да. 8.3.9.1648
#45 by Sirtoo
#46 by Sirtoo
как вариант.
#47 by Кирпич
Врег ты забыл сразу платформу винить
#48 by Mr_Best
Создал новую обработку и на другой базе проверил, в обработке одна команда и код формы: &AtServer Функция Из_10_В_Любую(Знач Значение=0,Нотация=16) Экспорт Функция Из_Любой_В_10(Знач Значение="0",Нотация=16) Экспорт Результат: 4e090376-0710-43d2-9609-c398fa23caa9 5 491 141 155 062 634 646 918 224 854 143 808 955 412 217 3F090375F070FF42F1F9608EF397EF22EEF9
#49 by Mr_Best
Вот так !
#50 by Кирпич
ВРег балда
#51 by Кирпич
Гуид = СтрЗаменить(ВРег(Строка(Гуид)),"-","");
#52 by Mr_Best
да ! Тема закрыта
#53 by МихаилМ
извиняюсь гуид помещяетя в число 1с НО лог10 с этим число не работает.
#54 by Кирпич
в 1с не все функции с большими числами работают. я даже ВК делал одному умному чуваку, который чота вычислял большое на 1с и у него не работала функция Exp
#55 by Mr_Best
Полный проверенный код, честно слизанный с статей из топика и собранный в кучу: КонецФункции
#56 by Кирпич
первые две функции школьник какой то писал
#57 by Кирпич
нафига они вообще нужны?
#58 by Chikko
На тему случайно наткнулся, мб кому в будущем поможет: в ут11 функции "ЧисловойКодПоСсылке" и "ПолучитьСсылкуПоШтрихкодуТабличногоДокумента" делают то что нужно. (типовой текст, думаю, копипастить не нужно)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С