|
Передача больших чисел через 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
|
...Ну и так, для пятницы:
|
|
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
|
(2)
|
|
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 десятичных цифр без округления помещается.
Поэтому, коды проще всего преобразовать в строку (добавив, например в начало любой символ).
|
|
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший