|   |   | 
| 
 | Проблема со знаками после запятой | ☑ | ||
|---|---|---|---|---|
| 0
    
        Азат 04.12.23✎ 12:02 | 
        Всем доброго дня! 
 Возникла такая проблема - создается регистр накопления. У него ресурс - Количество, типа Число(25,18) В виртуальных таблицах 1С не видит больше десятого знака. То есть остаток на начало месяца = 2,123456789012345 Если проходит продажа 2,123456789012300, то запрос к РегистрНакопления..Остатки() вернет 2,1234567890 и типа 0,0000000000123 отправляет в минус. В результате разъезжаются партии наглухо. Вопрос - сталкивался ли кто-то с таким и есть ли варианты решения кроме как умножить все на 10^9 и делить при выводе отчетом на экран? Спасибо | |||
| 1
    
        maxab72 04.12.23✎ 12:15 | 
        хранить целую и дробную часть числа в разных реквизитах. можно даже в текстовом виде, например в 36-ричном представлении, тогда будет экономия места большая.     | |||
| 2
    
        Азат 04.12.23✎ 12:18 | 
        (1) что-то не совсем уловлю. 
 Тогда будет 1 реквизит "ЦелоеКоличество" - Тип Число(7,0) и 1 реквизит "ДробноеКоличество" - Тип Число(18,0) так что ли? | |||
| 3
    
        timurhv 04.12.23✎ 12:21 | 
        (0) https://its.1c.ru/db/metod8dev/content/2665/hdoc
 Если при выполнении операций над данными в запросах целесообразно изменить правила вычисления длин и точностей результатов, то для задания желаемой длины и точности необходимо использовать оператор ВЫРАЗИТЬ. Следует иметь в виду, что если необходимо изменить длину и точность результата какой-нибудь операции, то оператор ВЫРАЗИТЬ нужно применять к ее операнду. Тогда длина и точность результата операции будет вычислена по описанным выше правилам, исходя из длины и точности операнда, заданной оператором ВЫРАЗИТЬ. Например, если поле "Реквизит1" имеет тип "Число(8, 0)", то чтобы выражение Реквизит1 / 3 имело в дробной части 15 цифр необходимо записать: ВЫРАЗИТЬ(Реквизит1 КАК Число(23, 15)) / 3 | |||
| 4
    
        НЕА123 04.12.23✎ 12:24 | ||||
| 5
    
        maxab72 04.12.23✎ 12:26 | 
        Можно и так. Главное написать библиотеку, чтоб умела делать арифметические операции над такими парами чисел.
 P.S. предложение о текстовом представлении это не шутка. Я так делал в одной базе специальный тип данных для хранения пар чисел - допусков (+ и -). И писал модуль по работе с таким типом данных (сложение, сравнение на полное вхождение, процент перекрытия, обращение и т.п.). Данные хранил в виде строки в специально придуманном формате. | |||
| 6
    
        Азат 04.12.23✎ 12:44 | 
        (3) 
 Выбрать КоличествоОстаток Из РегистрНакопления..Остатки() Или Выбрать ВЫРАЗИТЬ(КоличествоОстаток КАК Число(25,18)) Из РегистрНакопления..Остатки() возвращают одинаковый результат 2,12334567890 | |||
| 7
    
        Has 04.12.23✎ 13:15 | 
        (0) если приемлемо - изменить единицы измерения     | |||
| 8
    
        Азат 04.12.23✎ 13:20 | 
        (7) ну просто умножать на миллиард и делить обратно?     | |||
| 9
    
        timurhv 04.12.23✎ 14:04 | ||||
| 10
    
        Азат 04.12.23✎ 14:54 | 
        (9) где присвоение в п.6? 
 просто 2 документа первый делает приход 2,123456789012345 второй делает расход 2,123456789012300 в итоге в разбивке по партиям получаю 2 партии: на одной 0,000000000000012345 а на второй -0,000000000000012300 | |||
| 11
    
        Garykom гуру 04.12.23✎ 15:04 | 
        (0) Криво сделаны партии, надо через отдельный справочник
 Незначимые остатки в регистре обнулять | |||
| 12
    
        Garykom гуру 04.12.23✎ 15:08 | 
        Для обдумывания могу пример без этих много цифер после запятой
 Упаковка - 1 шт, состоит из 3 блистеров (в каждом по нескоко таблеток/капсул это неважно) Дробная продажа разрешена Пришла 1 упаковка... Продали 3 блистера (по 0.33 шт)... Остаток 1.00 - 0.99 = 0.01 - кого наипали? | |||
| 13
    
        Garykom гуру 04.12.23✎ 15:12 | 
        (12)+ Есть два метода решения проблемы
 1. Разные единицы измерения, везде в доках и регистрах хранить с единицей И использовать разукомплектатацию - перед списанием первого блистера, списывать 1 уп. и ставить на приход 3 блистера 2. Все в базовых шт, при списании последнего блистера если остаток малый (меньше чем блистер) его тоже списывать 1 = 0.33 + 0.33 + 0.34 | |||
| 14
    
        timurhv 04.12.23✎ 15:49 | 
        (10) Я вам вывел результат, со стороны SQL-запроса все ок.
 То что разбивается неверно, это уже к логике работы. | |||
| 15
    
        uno-group 04.12.23✎ 16:48 | 
        Неправильно выбрана базовая единица измерений в товаре. Три знака после запитой более чем достаточно.
 Будет единица измерения блистер 1 шт. Упаковка 3 блистера и никаких зависших 0,01 и прочей фигни. | |||
| 16
    
        uno-group 04.12.23✎ 16:54 | 
        Продаете по ампульно, капсульно, таблеточно соответственно основная единица буде таблетка.
 будет блистер 5 таблеток и блистер 10 таблеток. упаковка 30 шт. и упаковка 50 шт. И никаких дробей в периоде никогда не получится. | |||
| 17
    
        Garykom гуру 04.12.23✎ 19:48 | 
        (16) На предпоследней работе была единица человеко-месяцы (коммунальные услуги)
 И да там 8 знаков после запятой точности не хватало ибо тариф за человека в месяц уже изначально 2 знака после запятой А человек мог 1 день только присутствовать по адресу... | |||
| 18
    
        uno-group 05.12.23✎ 16:27 | 
        (17) С дуру можно и не такое придумать. Есть базовая единица нормо/часы. Перевести тариф за час из человеко/месяц в нормо/часы вообще не вопрос учетчица или кто там Устанавливает ставку может про них и не знать установил там Ставку за месяц 30 тыс. программа в рубль/час пересчитала и забыла. Учетчики себе рисуют 8 или что там по факту вышло. все прозрачно и в пределах 2 знаков.     | |||
| 20
    
        Garykom гуру 05.12.23✎ 16:48 | 
        (18) >Перевести тариф за час из человеко/месяц в нормо/часы вообще не вопрос
 Низзя Потребуется точность КолвоЧасовВМесяце * ТочностьТарифаЧеловекоМесяц | |||
| 21
    
        uno-group 06.12.23✎ 11:29 | 
        (20) Даже у бюджетников это приказом по предприятию делается и 0,5 ставки учителя превращается в н часов.     | |||
| 22
    
        Garykom гуру 06.12.23✎ 11:54 | 
        (21) Ты квитанции за коммуналку видел?
 Сколько например за вывоз ТКО платишь с человека? | |||
| 23
    
        stopa85 06.12.23✎ 11:57 | 
        Интересно, это SQL-сервер не может с типом DECIMAL(25,12) работать и суммировать как надо или 1С-ка родимая.     | |||
| 24
    
        Garykom гуру 06.12.23✎ 12:51 | 
        (23) 1С использует тип NUMERIC при работе с SQL
 (0) >Количество, типа Число(25,18) Сделай тип Число(38,18) | |||
| 25
    
        uno-group 06.12.23✎ 13:12 | 
        (22) Там нет разбивки почасовой, для частника просто фиксированная сумма. Для фирмы договор на вывоз контейнера раз в 2 недели а не тариф за месяц. В какие то месяцы это и 3 вывоза может быть соответственно тогда и сумма в 1,5 раза выше. Зп водителя мусоровоза и всех остальных от этого не зависит. Он сколько часов отработал столько и получит. А не в 1,5 раза больше в этот месяц.     | |||
| 26
    
        Garykom гуру 06.12.23✎ 14:06 | 
        (25) Если ты внимательно изучишь тему то выяснишь офигительные подробности про тарифы (стоимость вывоза 1 м3 ТКО).
 И нормативы (сколько по замерам мусорит один человек за год) - которые по категориям жилья. И дальше идет деление годового норматива в кубах на 12 (месяцев). Но человек может часть месяца отсутствовать (уехал на отдых или в командировку) и не обязан платить за вывоз ТКО (да надо принести доказательства в виде билетов или справок). И тут начинаются веселые приколы что 1 день разных месяцев стоит неодинаково в кубах на 1 человека. )) А еще этих дробных человеко-месяцев надо сложить правильно чтобы перевыставить счет. Но округлять низзя - иначе сумма от многих физиков не сойдется с одной суммой которую надо заплатить выше. | |||
| 27
    
        Garykom гуру 06.12.23✎ 14:08 | 
        (25) Кстати ТКО прикольная штука, там "покупают" в кубометрах а "продают" на полигон ТКО в тоннах ))     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |