УникальныйИдентификатор

  1. 9 г. назад

    Интересует из чего он состоит. Если, конечно состоит. Мне (не мне, а идиотам-разработчикам недософта, на стороне поставщика) надо максимально безболезненно (без потери уникальности), обрезать его до 20-ти символов.

    Ответы: (3) (4)
  2. ну...как то пользовался обработкой...он по внутреннему идентификатору выдавал мне что за документ был...то есть из битой ссылке по идентификатору можно было создать объект заново...следовательно состоит из чего то...наверное...

  3. если поможет тебе...
    http://1c-ukr.blogspot.ru/2011/12/1c8-guid.html

    Ответы: (5)
  4. (0)а зафига его обрезать??? о_О
    ну выкинь там "-" потом из 36ти разрядного числа конвертни в 50ти разрядное

    Ответы: (5) (8)
  5. (0) я решал схожую задачу, только мне надо было в 16 символов вместить гуид да ещё и с защитой (две защитных цифры).

    уменьшение длины решил через перевод чисел из 16-ричной в 32-ричную систему исчисления

  6. (2) Спасибо, что-то получилось. Последний разряд, 12-ть буквоцифр, оч похож на гуид базы создания. Обойдемся без него.
    (3) там не числа, сконвертить не получится.

    Ответы: (6) (7)
  7. Идун там не числа, сконвертить не получится.

    чо-чо?

    Ответы: (9)
  8. Идун Обойдемся без него.

    если генерация будет на одном конкретном хосте - можно опереться на такое решение. если же нет - гипотетически можешь получить косяк

    Ответы: (9)
  9. (3) 50-разрядное неудобно по байтикам распихивать. в оригинале 16-ричная система, для сабжа за глаза хватит и перевода в 32-ричную систему. алфавит вполне простой - "123456789ABCDEFGHIJKLMNPQRSTUVWX"

  10. (7) гипотетически, может быль, это коды продажников, каждый в своей базе, и клиентов. Предполагать, что они создавались одновременно, в одной дате и с точностью до секунды - вероятность, конечно, есть, но крохотная.
    (6) а что это?:

    Функция ДатаСозданияСсылки(Ссылка)
    ГУИД = Ссылка.УникальныйИдентификатор();
    Строка16 = Сред(ГУИД, 16, 3) + Сред(ГУИД, 10, 4) + Сред(ГУИД, 1, 8);
    Разрядность = СтрДлина(Строка16);
    ЧислоСек = 0;
    Для Позиция = 1 По Разрядность Цикл
    ЧислоСек = ЧислоСек +
    Найти("123456789abcdef",Сред(Строка16,Позиция,1))*Pow(16,Разрядность -
    Позиция);
    КонецЦикла;
    ЧислоСек = ЧислоСек / 10000000;
    Возврат Дата(1582, 10, 15, 04, 00, 00) + ЧислоСек;
    КонецФункции

    что и куда здесь сконвертить, если оно считает секунды через тьму?

    Ответы: (10)
  11. Идун а что это?:

    я не знаю, что это, я знаю, что гуид стандартно выражается в 16-ричной записи, переводом его в 32-ричную запись длину символьной записи можно сократить вдвое

  12. вот такими несложными функциями я пользовался для перевода в клятых клюшках

    Функция Из_10_В_Любую(Знач Значение=0,Нотация=36) Экспорт
    	Если Нотация<=0 Тогда Возврат("") КонецЕсли;
    	Значение=Число(Значение);
    	Если Значение<=0 Тогда Возврат("0") КонецЕсли;
    	Значение=Цел(Значение);
    	Результат="";
    	Пока Значение>0 Цикл
    		Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%Нотация+1,1)+Результат;
    		Значение=Цел(Значение/Нотация) ;
    	КонецЦикла;
    	Возврат Результат;
    КонецФункции
    //_________________________________________________________
    
    Функция Из_Любой_В_10(Знач Значение="0",Нотация=36) Экспорт
    	Если Нотация<=0 Тогда Возврат(0) КонецЕсли;
    	Значение=СокрЛП(Значение);
    	Если Значение="0" Тогда Возврат(0) КонецЕсли;
    	Результат=0;
    	Длина=СтрДлина(Значение);
    	Для Х=1 По Длина Цикл
    		М=1;
    		Для У=1 По Длина-Х Цикл М=М*Нотация КонецЦикла;
    		Результат=Результат+(Найти("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Сред(Значение,Х,1))-1)*М;
    	КонецЦикла;
    	Возврат Окр(Результат);
    КонецФункции
    
    Функция Из_10_В_32(Знач Значение=0) Экспорт
    	Нотация=32;
    	Если Нотация<=0 Тогда Возврат("") КонецЕсли;
    	Значение=Число(Значение);
    	Если Значение<=0 Тогда Возврат("1") КонецЕсли;
    	Значение=Цел(Значение);
    	Результат="";
    	Пока Значение>0 Цикл
    		Результат=Сред("123456789ABCDEFGHIJKLMNPQRSTUVWX0000",Значение%Нотация+1,1)+Результат;
    		Значение=Цел(Значение/Нотация);
    	КонецЦикла;
    	Возврат Результат;
    КонецФункции
    
    
    Ответы: (12)
  13. (11) а как binary(16) в 32 перевести?

    Ответы: (13)
  14. (12)
    сначала переводишь каждый байтик (два символа в 16-ричной записи) Из_Любой_В_10(), получаешь число, затем - Из_10_В_32() - получаешь байтик (один символ в 32-ричной записи)

    Ответы: (14)
  15. (13) спасибо, вроде работает, только поздно, я уже отчеты отослал.

или зарегистрируйтесь чтобы ответить!