Имя: Пароль:
1C
1С v8
Передача больших чисел через ComConnector.
0 Hmster
 
02.09.11
11:02
1С неверно передает/получает большие числа.
Для примера можно взять регистр сведений "Адресный классификатор" колонку "Код".

ЗаписьАдреса = БД.РегистрыСведений.АдресныйКлассификатор.СоздатьМенеджерЗаписи();
ЗаписьАдреса.Код = "100000000000000000000000";
ЗаписьАдреса.Записать(Истина);
//Так запишет нормально
ЗаписьАдреса.Код = 100000000000000000000000;
ЗаписьАдреса.Записать(Истина);
//так запишет число 99999999999999000000000

Это только у меня так? Или дело в 1С?
1 Grusswelle
 
02.09.11
11:04
Ппц... 10^24 степени адресов... Это ж - квадрилион!
2 Grusswelle
 
02.09.11
11:04
...Ну и так, для пятницы: wiki:Именные_названия_степеней_тысячи
3 Jolly Roger
 
02.09.11
11:05
(0) в 1С... передавай строкой...
4 Grusswelle
 
02.09.11
11:06
(3) Ну вот нафига, а? >:-/ Такую пятницу испортил...
5 Hmster
 
02.09.11
11:07
6 Hmster
 
02.09.11
11:07
(3) чисто спортивный интерес
7 Hmster
 
02.09.11
13:38
Чувствую никто мне не скажет в чем проблема.
8 kiruha
 
02.09.11
13:44
Видать идет неявное преобразование в число с плаваяющей запятой и обратно
9 kiruha
 
02.09.11
13:44
ЗаписьАдреса.Код = 100000000000000000000001;
ЗаписьАдреса.Записать(Истина);
//так запишет число какое ?
10 Hmster
 
02.09.11
13:51
99 999 999 999 999 000 000 000
11 kiruha
 
02.09.11
14:02
12 Hmster
 
02.09.11
14:14
Спс.
300 000 000 000 000 000 000 000 передает нормально.
13 hhhh
 
02.09.11
14:27
(0) вот почему адресный классификатор не включен в обмен в типовых!
14 Torquader
 
02.09.11
22:13
Для передачи больших чисел существуют форматы OLE Decimal и Currency, но 1С почему-то приводит их в double, а там всего 19 десятичных цифр без округления помещается.
Поэтому, коды проще всего преобразовать в строку (добавив, например в начало любой символ).