Вход | Регистрация
 

Какова максимальная точность после запятой в запросе?

Какова максимальная точность после запятой в запросе?
Я
   Shur1cIT
 
22.03.19 - 11:15
Разузловываю спецификации продукции и пересчитываю потребность на еденицу продукции. (беру самую верхнию спецификацию добываю от туда полуфабрикаты нахожу их спецификации потом там нахожу спецификации ИТД задумка не моя такова хотелка заказчика)
проблема в том что если в спецификации самого низкого уровня количество исходного сырья мало например 0,15 и по пока оно пройдет через все спецификации его на еденицу продукции отсаётся ничтожно мало и отчет не выводит такие суммы. вопрос каков предел точности запроса? пытался использовать типа  КАК ЧИСЛО(35, 20)) чтобы принудительно увеличить разрядность не получается, думал даже ввести некий коэффицент например умножать все спецификации на 1000 и в конце делить.
 
 
   hhhh
 
1 - 22.03.19 - 11:17
(0) наверно из базы берется размер поля
   Shur1cIT
 
2 - 22.03.19 - 11:19
(1) в SQL на временные таблицы ограничения есть?
   Ненавижу 1С
 
3 - 22.03.19 - 11:21
а нет ли форматирования в отчете?
   Shur1cIT
 
4 - 22.03.19 - 11:22
(3) нет уже проверил в первую очередь
   aleks_default
 
5 - 22.03.19 - 11:26
26 кажется
   Дмитрий
 
6 - 22.03.19 - 11:26
(0) спецификацию делать не на единицу, а на 1000 шт, например
   Fragster
 
7 - 22.03.19 - 11:28
читать до просветления https://docs.microsoft.com/ru-ru/sql/t-sql/data-types/precision-scale-and-length-transact-sql?view=sql-server-2017

в файловой и постгре правила похожие, но другие :))
   Garykom
 
8 - 22.03.19 - 11:28
Объясни нефуя это делать одним запросом.

Сделай РС периодический например где для каждой номенклатуры будет храниться готовая раскладка по комплектующим причем только самого нижнего уровня.
И обновляй его кодом когда надо, лучше всего когда спецификации правят, но можно и полным перебором.

Это очень сильно быстрее согласен? Да есть риск устаревания данных
   Chieftain
 
9 - 22.03.19 - 11:30
Какая-то гомеопатия
   Serg_1960
 
10 - 22.03.19 - 11:31
Если хотите изменить разрядность и точность - то ВЫРАЗИТЬ() к операндам операций.

"Разрядность результатов выражений и агрегатных функций в языке запросов"
https://its.1c.ru/db/metod8dev#content:2665:hdoc
   aleks_default
 
11 - 22.03.19 - 11:32
(8) какой смысл в этом регистре если есть справочник спецификаций?
   Garykom
 
12 - 22.03.19 - 11:33
(11) Иерархия многоуровневая, когда продукция состоит из продукции и надо развернуть до самого нижнего уровня до базовых
   Serg_1960
 
13 - 22.03.19 - 11:36
Имхо, обычная ситуация в УПП, когда материалы расходуются тоннами и килограммами, а используются в продукции - граммами.
   Йохохо
 
14 - 22.03.19 - 11:37
10 класс церковноприходской на информатике, точность операций с плавающей точкой)
   Shur1cIT
 
15 - 22.03.19 - 11:38
(9) почти угадал:-))) это фармпроизводство
   HeKrendel
 
16 - 22.03.19 - 11:39
(13) Обычная ситуация когда методология отходит от практики
   aleks_default
 
17 - 22.03.19 - 11:41
(12)но как это решит проблему? У ТС проблема не в быстродействии.
   Shur1cIT
 
18 - 22.03.19 - 11:48
(10) уже навтыкал ВЫРАЗИТЬ куда только угодно не помогает, остаётся вариант переводить в большие числа и при выводе уже уменьшать
   Serg_1960
 
19 - 22.03.19 - 11:49
PS: "Дело было не в бобине, дело было не в реле..." :))
Запрос = Новый Запрос("ВЫБРАТЬ 13.1 / 13 КАК Результат");
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Сообщить(Выборка.Результат);// в окне сообщений число 1,007692307692307692307692307692307692
   Garykom
 
20 - 22.03.19 - 11:49
(17) А нехрен запросами считать, кодом там точностью можно управлять хоть свои числа/арифметику реализовать и использовать
   Shur1cIT
 
21 - 22.03.19 - 11:53
(19) возможно причина в том что на стороне клиента все делаеш без временных таблиц итд
   Serg_1960
 
22 - 22.03.19 - 11:54
(18) Ещё раз прочти ссылку, обращая внимание на "максимальное количество цифр, которое может содержать число (его целая и дробная часть вместе), равно 38 цифр"
   Shur1cIT
 
23 - 22.03.19 - 11:59
(22) у меня КАК ЧИСЛО(35, 20)) стоит
тоесть целая часть 14 знаков один знак на разделитель 20 после запятой
   ЛЮС
 
24 - 22.03.19 - 12:01
(0) Если мне не изменяет память, то временные таблицы имеют небольшую точность - 8 знаков после запятой (разбирался лет 7 назад, но вряд ли что-то поменялось).
Скорее всего отсюда и проблемы.
   aleks_default
 
25 - 22.03.19 - 12:02
(20) Часто необходимо видеть не только материалы нижнего уровня, но и переделы(узлы). А в чем проблема запросом посчитать? В случае если надо одновременно рассчитать тысячу спецификацимй, да вывести все это в виде дерева запросом это сделать быстрее.
   HeKrendel
 
26 - 22.03.19 - 12:09
(25) А чем типовой механизм неустраивает?
   Garykom
 
27 - 22.03.19 - 12:13
(25) Быстрее считать каждый раз чем взять готовое посчитанное из базы? Хммм
   Вафель
 
28 - 22.03.19 - 12:15
(27) чтоб развернутое хранить - нужно допиливать конфу. а для запроса нет
   Garykom
 
29 - 22.03.19 - 12:23
(28) От конфы конкретной зависит, иногда можно обойтись без допиливания.
И допилить добавлением нового регистра не проблема.
   aleks_default
 
30 - 22.03.19 - 12:26
(26)У нас нетиповая. (28) Не понимаю в чем развернутость? И в чем профит от существования данного регистра? Повторюсь, этот регистр поможет только при получения материалов нижнего уровня. А заполнение заказа на производство переделов как поможет?
И в чем отличие регистра от таб. части состава спецификации?
 
 Рекламное место пустует
   Shur1cIT
 
31 - 22.03.19 - 12:30
(24) Да причина в этом режет гад только что проверил.... проблему решил сдвинув запятую на три позиции, в вычисляемых полях СКД обратно вернул на три позиции
   aka MIK
 
32 - 22.03.19 - 12:40
(0) MS SQL обрезает до 5 или 6 знаков (
   aleks_default
 
33 - 22.03.19 - 12:49
(32)Это только если результатом деления будет периодическая дробь
   Fragster
 
34 - 22.03.19 - 14:04
(33) это только если не прочитать (7)
   Сияющий в темноте
 
35 - 22.03.19 - 14:05
Числа с плавающей точкой double имеют 17 десятичных знаков на все.
расширенное целое в 8 байт-это 20 знаков числа.
большую точность дает Decimal,но его 1с не умеет.
внутри 1с она хранит числа в своем формате,где очень высокая точность,но при передаче наружу даже в sql мы имеем double.
   Fragster
 
36 - 22.03.19 - 14:06
(35) феерично
   Провинциальный 1сник
 
37 - 22.03.19 - 14:07
(35) Как раз наоборот, 1с не умеет хранить в базе плавающие типы. Только с фиксированной точкой.
   Сияющий в темноте
 
38 - 22.03.19 - 14:10
В базе где?
в файловой просто пишутся цифры числа согласно точности,в sql то что передается через обьект доступа.
   shuhard
 
39 - 22.03.19 - 14:15
(38) Выполняя различные преобразования числовых данных, необходимо учитывать, что максимальное количество цифр, которое может содержать число (его целая и дробная часть вместе), равно 38 цифр. 1С:Предприятие использует десятичные числа с фиксированной точкой. Это значит, например, что число 34.28 содержит 4 цифры, число 0.00000001 содержит 8 цифр (незначащий 0 перед точкой за цифру не считается), а число 3200000000 содержит 10 цифр. Разрядность результатов различных операций вычисляется так, чтобы по возможности исключить арифметические переполнения, и в то же время максимально сохранить точность значений. При разработке конфигураций выбор разрядности полей объектов метаданных должен определяться возможной разрядностью хранимых в них данных и не должен учитывать возможное увеличение разрядности после выполнения арифметических операций и функций.
   Сияющий в темноте
 
40 - 22.03.19 - 17:13
Из-за совместимости с posgre там меньше.
https://postgrespro.ru/docs/postgresql/9.6/datatype-numeric
просто,у posgre тип decimal,это поток байтов и точность запредельная,но с decimal у всех остальных не совместим.
   Valkyrie
 
41 - 22.03.19 - 17:25
(0) КАК ЧИСЛО(35, 20)) не получится. Максимум КАК ЧИСЛО (32,10)
   Вафель
 
42 - 22.03.19 - 17:30
(35) вроде numeric в mssql везде 1с использует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.