Имя: Пароль:
1C
1С v8
Неверный результат умножения. Внешние источники данных (8.2.16.368 + Oracle11g)
0 e-temka
 
30.10.12
23:42
При использовании внешних источников данных (обращение в запросе) неверно выполняются арифметические операции.
Пример (упрощен):
 Запрос = Новый Запрос;
 Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
 |       12661954 * 48 КАК Поле1
 |ИЗ
 |       ВнешнийИсточникДанных.<ИмяВнешнегоИсточникаДанных>.Таблица.<ИмяТаблицы> КАК <ИмяТаблицы>";

В результате запроса Поле1 = 607773824. Это не верно. Правильно: 607773792.
Другие подобные операции с этим (12661954) и соседними числами также выполняются с ошибкой.

Платформа 8.2.16.368.
Внешний источник данных: Oracle 11g
База клиент-серверная на MS SQL 2005
ОС клиента 1С: Windows 7 SP1

*На внешних источниках данных MSSQL и MqSQL такой ошибки не возникает. Там другие :)

Прошу, по-возможности, дать хотя бы совет, как это обойти.

П.С.: В саппорт 1С запостил. Жду.
1 Живой Ископаемый
 
30.10.12
23:44
саппорт ответит что все результаты зависят от используемого одбс драйвера. так оно и есть. точка.
выкиньте текущий, используйте другой.
2 zmaximka
 
30.10.12
23:48
Беда.
3 orefkov
 
31.10.12
00:29
Не знаю за оракл, есть там какойнить профайлер, чтоб можно было посмотреть, какой запрос в него  приходит?
Можно еще какой-нить ODBC трейсер найти, посмотреть, что 1С в ODBC передает. По крайней мере, будет понятно, чей косяк.
Так то
607773824 / 48 = 12661954.(6)
где-то происходит ошибка с конвертацией числа.
Можно еще попробовать проверить так
12 * 1000 * 1000 * 48 + 661 * 1000 * 48 + 954 * 48
что выдаст.
В общем, направлений для исследований полно.
4 IamAlexy
 
31.10.12
00:32
бгыыы
2х2 равно чего то там типа 3.9? :) :) :)

где то я это уже видел
5 pumbaEO
 
31.10.12
00:39
(4) веб клиент, расчет табличных частей на клиенте, там жаваскрипт.
6 orefkov
 
31.10.12
01:41
Вроде с 15. X или 16.X в веб клиенте не транслируют в  JavaScript, а исполняют напрямую 1Сный код.
7 shuhard
 
31.10.12
07:51
(0)[дать хотя бы совет, как это обойти. ]
использовать ADODB
использовать вьюшки
переписать запрос к виду
12661954.00 * 48.00 КАК Поле1
8 e-temka
 
31.10.12
09:49
Ночь прошла:) Выяснил:
1. (1)Косячит драйвер ODBC, установленный с инстант клиентом Oracle

2. (3)MS ODBC for Oracle не косячит и при его использовании в трейсере можно отловить вот такой запрос (с косячным ODBC тоже самое, только число другое):

--Timestamp: 31.10.2012 01:40:13
SELECT SDBL_TOP_1
 FROM (SELECT 607773792 AS SDBL_TOP_1
         FROM "<Table>"."<Field>" T1)
WHERE ROWNUM <= 1
--Elapsed time: 0.005

3. (7) "12661954.00 * 48.00"  а также "ВЫРАЗИТЬ КАК ЧИСЛО" не дало результатов.

4. (3) "12*1000*1000*48+661*1000*48+954*48" попробовал, ради интереса.. итог - расчет неверный! и от этого совсем грустно(((

ВЫБРАТЬ
12661954 * 48 КАК Поле0,
12*1000*1000*48+661*1000*48+954*48 КАК Поле1,
12*1000*100*48 КАК Поле3,
661*1000 *48 КАК Поле4,
954 * 48 КАК Поле5
ИЗ
ВнешнийИсточникДанных.<ИмяВнешнегоИсточникаДанных>.Таблица.<ИмяТаблицы> КАК <ИмяТаблицы>

При этом
"12*1000*1000*48" = 576000000, (верно)
"661*1000*48"=31728000, (верно)
"954*48"=45792, (верно)
а их сумма не верна(((
9 Живой Ископаемый
 
31.10.12
10:01
2(8) зато у МС драйвера другие косяки есть.. Например если ты добавляешь таблицу в ВИД,  с полями типа нумерик, то такие поля добавятся с размерностью 15 и дробной частью 15.
в результате все значения больше единыцы будут представлены как 0.999999999999999999
короче глаз да глаз за ними нужен
10 e-temka
 
31.10.12
11:04
Вот что еще вижу: 1 + 0.1 = 1,100000023841858

Банальная и замусоленная тема... видимо с этим мне никто не поможет...
Всем спасибо!
11 e-temka
 
31.10.12
11:06
(9)А какой посоветуете драйвер ODBC использовать? :)))

Желательно на Win Serv 2008 x64
12 e-temka
 
01.11.12
11:22
(7) Вьюшки - была супер идея! Да косяк и тут! И теперь я вообще не верю в 1С, ну как так можно?((

Смотрю через тоад во вьюху:
ZAKAZ_ID    CONTROL_SUM
32450960    1249839267

Смотрю запись во внешнем источнике данных через 1С:
ZAKAZ_ID    CONTROL_SUM
32450960    1249839232

Может есть какой-то кэш? Или еще что либо? и отображение значения просто не обновилось?

Хелп плиз!
13 e-temka
 
02.11.12
10:45
Позволю себе UP!

Интересен комментарий к посту (12)...
14 Живой Ископаемый
 
02.11.12
11:11
2(13) ты драйвер заменил?
15 e-temka
 
02.11.12
11:41
(13) в (9) писал "А какой посоветуете драйвер ODBC использовать?"

"Microsoft ODBC for Oracle" не удалось задействовать на Win Serv 2008 (возможно админы просто не хотят стучать в бубен), но на локальной машине он работает и выдает верные результаты.

На сервере использую ODBC, поставляемый с клиентом Oracle.

С поддержкой 1С переписываюсь, выслал им DT, скрины, описалово.. жду...

На данный момент поставил "костыли" в виде ADODB запроса, т.к. БД рабочая и данные нужны уже сейчас...

Итог: Какой драйвер взять для Win Serv 2008?
16 Живой Ископаемый
 
02.11.12
11:50
"Microsoft ODBC for Oracle"
17 e-temka
 
02.11.12
12:14
Ясно. Спс. По результатам от 1С отпишусь :)