Имя: Пароль:
1C
 
Какова максимальная точность после запятой в запросе?
0 Shur1cIT
 
22.03.19
11:15
Разузловываю спецификации продукции и пересчитываю потребность на еденицу продукции. (беру самую верхнию спецификацию добываю от туда полуфабрикаты нахожу их спецификации потом там нахожу спецификации ИТД задумка не моя такова хотелка заказчика)
проблема в том что если в спецификации самого низкого уровня количество исходного сырья мало например 0,15 и по пока оно пройдет через все спецификации его на еденицу продукции отсаётся ничтожно мало и отчет не выводит такие суммы. вопрос каков предел точности запроса? пытался использовать типа  КАК ЧИСЛО(35, 20)) чтобы принудительно увеличить разрядность не получается, думал даже ввести некий коэффицент например умножать все спецификации на 1000 и в конце делить.
1 hhhh
 
22.03.19
11:17
(0) наверно из базы берется размер поля
2 Shur1cIT
 
22.03.19
11:19
(1) в SQL на временные таблицы ограничения есть?
3 Ненавижу 1С
 
гуру
22.03.19
11:21
а нет ли форматирования в отчете?
4 Shur1cIT
 
22.03.19
11:22
(3) нет уже проверил в первую очередь
5 aleks_default
 
22.03.19
11:26
26 кажется
6 Дмитрий
 
22.03.19
11:26
(0) спецификацию делать не на единицу, а на 1000 шт, например
7 Fragster
 
гуру
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

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

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

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

"Разрядность результатов выражений и агрегатных функций в языке запросов"
https://its.1c.ru/db/metod8dev#content:2665:hdoc
11 aleks_default
 
22.03.19
11:32
(8) какой смысл в этом регистре если есть справочник спецификаций?
12 Garykom
 
гуру
22.03.19
11:33
(11) Иерархия многоуровневая, когда продукция состоит из продукции и надо развернуть до самого нижнего уровня до базовых
13 Serg_1960
 
22.03.19
11:36
Имхо, обычная ситуация в УПП, когда материалы расходуются тоннами и килограммами, а используются в продукции - граммами.
14 Йохохо
 
22.03.19
11:37
10 класс церковноприходской на информатике, точность операций с плавающей точкой)
15 Shur1cIT
 
22.03.19
11:38
(9) почти угадал:-))) это фармпроизводство
16 HeKrendel
 
22.03.19
11:39
(13) Обычная ситуация когда методология отходит от практики
17 aleks_default
 
22.03.19
11:41
(12)но как это решит проблему? У ТС проблема не в быстродействии.
18 Shur1cIT
 
22.03.19
11:48
(10) уже навтыкал ВЫРАЗИТЬ куда только угодно не помогает, остаётся вариант переводить в большие числа и при выводе уже уменьшать
19 Serg_1960
 
22.03.19
11:49
PS: "Дело было не в бобине, дело было не в реле..." :))

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