![]() |
![]() |
![]() |
|
Неверный результат умножения. Внешние источники данных (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С отпишусь :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |