Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ? (число прочтений - 4133 )
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
22. Января 2007 :: 17:41
Печать  
Есть основание полагать что эта функция уже для 6 "Z" работает некоректно, так как обратное преобразование не дает исходные данные. Вот пример для 5-х значного:
Код
Выбрать все
глMDW.СтрокаВЧисло("ZZZZZ",36) = 60466175
глMDW.ЧислоВСтроку(60466175,36) = ZZZZZ
 


а вот для 6-значного:
Код
Выбрать все
глMDW.СтрокаВЧисло("ZZZZZZ",36) = 2147483647
глMDW.ЧислоВСтроку(2147483647,36) = ZIK0ZJ
 


Т.е. сть подозрение чтоограничение кроется в переменной, размерность которой = 2^31.
  
Наверх
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #1 - 23. Января 2007 :: 07:36
Печать  
попробуй системные недокументированные функции самого 1С:
Код
Выбрать все
_strtoid();
_idtostr(); 



вот вроде все правильно:
тест =
Код
Выбрать все
	ЗначениеСтр = "ZZZZZZ";

	ЗначениеЧисло = _StrToId(ЗначениеСтр);
	Сообщить(ЗначениеСтр + " = " + ЗначениеЧисло);

	ЗначениеСтр = _idtostr(ЗначениеЧисло);
	Сообщить(ЗначениеСтр + " = " + ЗначениеЧисло);
 


результат =
Код
Выбрать все
ZZZZZZ = -2118184961
ZZZZZZ = -2118184961 

  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #2 - 23. Января 2007 :: 10:46
Печать  
DrACe писал(а) 23. Января 2007 :: 07:36:
попробуй системные недокументированные функции самого 1С:
Код
Выбрать все
_strtoid();
_idtostr(); 




Не проходит, в _strtoid() - таже проблема, только в 1С++ это целые положительные цифры, а в _strtoid() последний разряд понимается как "-".
Суть проблемы, надо ИД документа перевести в 10 формат (только цифры от 0 до 9). И если ИД, к примеру, такой
'  A4Y8ZV ' - то его перевод уже становится проблемой, а что будет когда ID дойдет до 7-го разряда?
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #3 - 23. Января 2007 :: 10:55
Печать  
pvase
А вы чего, уже 2 миллиарда документов накидали?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #4 - 23. Января 2007 :: 11:31
Печать  
kms писал(а) 23. Января 2007 :: 10:55:
pvase
А вы чего, уже 2 миллиарда документов накидали?

Не обязательно, ведь _StrToId("A4Y8") = 472976, а правые 3 знака - это код УРИБ. Но надо конвернтуть и код УРИБ.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #5 - 23. Января 2007 :: 11:54
Печать  
а если код УРИБ будет по-русски?
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #6 - 23. Января 2007 :: 11:55
Печать  
я к тому что, вообще то, та часть идентификатора в котором хранится код УРИБ не имеет никакого отношения к системе счисления с основанием 36
  

1&&2&&3
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #7 - 23. Января 2007 :: 19:45
Печать  
trad писал(а) 23. Января 2007 :: 11:55:
я к тому что, вообще то, та часть идентификатора в котором хранится код УРИБ не имеет никакого отношения к системе счисления с основанием 36
Все верно, но код уриб имеет отношение к уникальности ИД, и если его игнорировать, то есть вероятность неуникального значения _StrToID(Left(ID,6)).
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #8 - 24. Января 2007 :: 06:29
Печать  
если тебе надо весь идентификатор перевести в десятичное представление, то:
_StrToID(Left(ID,6))*256^3 + КодСимв(Сред(ID,7,1))*256^2 + КодСимв(Сред(ID,8,1))*256^1 + КодСимв(Сред(ID,9,1))*256^0
  

1&&2&&3
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: MetaDataWork.СтрокаВЧисло("ZZZZZ"36) ?
Ответ #9 - 26. Января 2007 :: 14:47
Печать  
trad писал(а) 24. Января 2007 :: 06:29:
если тебе надо весь идентификатор перевести в десятичное представление, то:
_StrToID(Left(ID,6))*256^3 + КодСимв(Сред(ID,7,1))*256^2 + КодСимв(Сред(ID,8,1))*256^1 + КодСимв(Сред(ID,9,1))*256^0

Спасибо, как вариант пройдет.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать