• Ласкаво просимо на Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата.
 

Дробные остатки

Автор vasos, Листопад 12, 2011, 13:08:02

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

vasos

Запрос

select tn.name, cast(tz.kolvo as varchar(300)) from tovar_zal tz,tovar_name tn
where
tz.kolvo*1000 between -1 and 1
and tz.kolvo <> 0
and tz.tovar_id = tn.num

Не судите правильность запроса - не силен в SQL.
Результат во вложении...
Соответственно эти "нулевые" остатки попадают и в акт инвентаризации при его автоматическом заполнении, что весьма напрягает, т.к. таких позиций порядка  50-70...
Эта проблема тянется уже довольно давно и особенно характерна с теми товарами, которые заказываются под клиента, то есть ПН от поставщика и по ней РН на клиента в режиме автозаполнения, то есть через кнопочку "Р" в списке ПН...
Собственно вопрос: в чем причина этих остатков и как ее устранить, чтобы такие дробные остатки более не возникали?

TheOK

#1
Устранить подобные остатки можно скриптом, который предоставил admin, находящийся по ссылке:
http://www.softbalance.com.ua/forum/index.php?topic=766.msg6392#msg6392
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

vasos

Цитата: TheOK від Листопад 12, 2011, 14:18:02
Устранить подобные остатки можно скриптом, который предоставил admin, находящийся по ссылке:
http://www.softbalance.com.ua/forum/index.php?topic=766.msg6392#msg6392
Спасибо, но это не панацея... Если они (остатки) вылезли один раз - значит и вылезут во второй.
Цитата
Собственно вопрос: в чем причина этих остатков и как ее устранить, чтобы такие дробные остатки более не возникали?

admin

У вас первое число в скрипте -3.552713678800501e-015 знаете что оно означает если записывать его в обычной форме?

TheOK

#4
Цитата: vasos від Листопад 15, 2011, 09:50:42

Спасибо, но это не панацея... Если они (остатки) вылезли один раз - значит и вылезут во второй.
Цитата
Собственно вопрос: в чем причина этих остатков и как ее устранить, чтобы такие дробные остатки более не возникали?

Думаю, что по этому поводу нужно писать в поддержку, добавлять в список доработки, форум здесь бессилен
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

vasos

Цитата: admin від Листопад 15, 2011, 11:40:08
У вас первое число в скрипте -3.552713678800501e-015 знаете что оно означает если записывать его в обычной форме?
Видать не знаю, т.к. не могу понять, что Вы хотели этим вопросом "сказать"...

TheOK

#6
Цитата: vasos від Листопад 23, 2011, 15:58:14
Цитата: admin від Листопад 15, 2011, 11:40:08
У вас первое число в скрипте -3.552713678800501e-015 знаете что оно означает если записывать его в обычной форме?
Видать не знаю, т.к. не могу понять, что Вы хотели этим вопросом "сказать"...
-3.552713678800501*10^-15, можно сказать, что это ноль... не думаю, что это как-то может повлиять на товар, если только он не стоит денег порядка 1E12.
Хотя, думаю, что в чем-то вы правы:
Цитата: vasos від Листопад 15, 2011, 09:50:42
Если они (остатки) вылезли один раз - значит и вылезут во второй.
Цитата
Собственно вопрос: в чем причина этих остатков и как ее устранить, чтобы такие дробные остатки более не возникали?
Но только на форуме этот вопрос никак не решить
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

admin

Цитата: vasos від Листопад 23, 2011, 15:58:14
Цитата: admin від Листопад 15, 2011, 11:40:08
У вас первое число в скрипте -3.552713678800501e-015 знаете что оно означает если записывать его в обычной форме?
Видать не знаю, т.к. не могу понять, что Вы хотели этим вопросом "сказать"...

Если не ошибаюсь это -0.0000000055, такие числа это специфика Firebird бывает даже простые операции вроде 2-2 записывают такой ноль, единственный выход иногда запускать такой скрипт если заметите проблемку.

TheOK

#8
Если вдруг вам так сильно захочется знать, какой порядок данных чисел...
Например -3.552713678800501e-015
-3.552713678800501, означает обычное отрицательное число -3.55... (М)
е-015 , означает, что число М нужно умножить на 10^-15 (или разделить на 10^15), т.е. "перенести" запятую на 15 знаков влево
Таким образом мы имеем число, приблизительно равное:
-0.000000000000003552713678800501
Я не пытался анализировать возможные операции с кол-ом товара, которые могут присутствовать в УкрСклад, однако, думаю, что всем понятно, что любая операция деления (оно же и умножение, в некотором смысле) с легкостью может привести к подобным числам. Уверен, что операции с числами типа данных doublepricision выполняются инструкциями процессоров ПК и это не простой процесс. Если я прав, то такая ситуация будет характерна для любой программы, которая использует для вычисления подобных чисел не свой "велосипед", а "зашитые" под это стандартные инструкции процессоров.
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]

vasos

Цитата: admin від Листопад 23, 2011, 16:44:28
Цитата: vasos від Листопад 23, 2011, 15:58:14
Цитата: admin від Листопад 15, 2011, 11:40:08
У вас первое число в скрипте -3.552713678800501e-015 знаете что оно означает если записывать его в обычной форме?
Видать не знаю, т.к. не могу понять, что Вы хотели этим вопросом "сказать"...

Если не ошибаюсь это -0.0000000055, такие числа это специфика Firebird бывает даже простые операции вроде 2-2 записывают такой ноль, единственный выход иногда запускать такой скрипт если заметите проблемку.

С Firebird сталкиваюсь по жизни время от времени уже лет так около пяти, но все как-то поверхностно - не знал что у него есть такая специфика... Спасибо за разъяснение, значит xStarter в расписание скрипт и хай обнуляет....

Цитата: TheOK від Листопад 23, 2011, 18:20:50
Если вдруг вам так сильно захочется знать, какой порядок данных чисел...
Например -3.552713678800501e-015
-3.552713678800501, означает обычное отрицательное число -3.55... (М)
е-015 , означает, что число М нужно умножить на 10^-15 (или разделить на 10^15), т.е. "перенести" запятую на 15 знаков влево
Таким образом мы имеем число, приблизительно равное:
-0.000000000000003552713678800501
Спасибо огромное за объяснение, хоть это я и так знал, но плюсик все равно ткнул =)