Имя: Пароль:
1C
1С v8
Интересное поведение запроса в платформе 8.3.15
, ,
0 edem911
 
12.09.19
14:39
имеется платформа 8.3.15.1489
конфигурация УТ 8.3.15.1489
После обновление платформы в форме списка заказов клиентов(поставщиков) поля процент оплаты, процент отгрузка = 99, хотя оплата и отгрузка 100%. Анализ показал что эти значение тянуться из соответствующих регистров сведений.
Все расчеты выполняются в модуле менеджера регистра состояний заказов клиентов(поставщиков).
Есть следующая конструкция

ВЫБОР
    КОГДА
        ДокументЗаказКлиента.ПорядокРасчетов = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетов.ПоЗаказамНакладным) И
        ДокументЗаказКлиента.ХозяйственнаяОперация <> ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию) И
        ДокументЗаказКлиента.Проведен И
        ДокументЗаказКлиента.Статус <> ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказовКлиентов.НеСогласован) И
        ДокументЗаказКлиента.СуммаДокумента > 0
    ТОГДА
        ВЫРАЗИТЬ ((ЕСТЬNULL(РасчетыСКлиентамиОстатки.КОплатеРасход, 0)) * 100 / ДокументЗаказКлиента.СуммаДокумента КАК ЧИСЛО(20, 10))
    ИНАЧЕ
        0
КОНЕЦ КАК ПроцентОплаты,

РасчетыСКлиентамиОстатки- виртуальная таблица регистра РасчетыСКлиентами.ОстаткиИОбороты, ДокументЗаказКлиента - ссылка на документ. СуммаДокумента = КОплатеРасход
В результате выполнения запроса получаем 100,000005(не критично округляет до 100) или 99,99999888 (далее округляет до 99 - критично)
Причем если выполнить тот же запрос в консоле все ок - выводит целое значение.
Игрался и с формулой и с выразить - результата нет. Выводил отдельно значение операндов - все ок., а при выполнении вычислений всегда появляется дробь.
Итоги обновил.

Да можно переделать округление дальше к примеру вот в такой процедуре(процедура тоже стоит отдельного внимания- больше похоже на заплатку), но не понятна сама причина такого поведения.

// Округляет проценты отгрузки, оплаты, долга
//
// Параметры:
//    ОкругляемоеЧисло - Число - округляемое число.
//
Процедура ОкруглитьПроценты(ОкругляемоеЧисло)
    
    Если ОкругляемоеЧисло > 99
        И ОкругляемоеЧисло < 100 Тогда
        
        ОкругляемоеЧисло = 99;
        
    КонецЕсли;
    
    Если ОкругляемоеЧисло > 0
        И ОкругляемоеЧисло < 1 Тогда
        
        ОкругляемоеЧисло = 1;
        
    КонецЕсли;
    
КонецПроцедуры


Есть у кого то мысли по этому поводу?
1 eklmn
 
гуру
12.09.19
14:45
в этой версии еще и эксель с косяком сохраняется ))
2 ИУБиПовиц
 
12.09.19
14:49
ДокументЗаказКлиента.СуммаДокумента КАК ЧИСЛО(20, 10))
А зачем такая точность?
3 edem911
 
12.09.19
14:55
(2) хз, код типовой - округление до 2 знаков решит проблему, но интересно само поведения платформы, может кто-то сталкивался
4 edem911
 
12.09.19
14:57
(3) просто там подобных расчетов куча, в разных модулях- это везде править надо.
5 aleks_default
 
12.09.19
15:06
Пример в числах приведи
6 Cyberhawk
 
12.09.19
15:07
(1) Что за косяк, тоже из-за точности?
7 H A D G E H O G s
 
12.09.19
15:09
https://bugboard.v8.1c.ru/error/000055388
Описание:
При использовании в языке запросов операции деления совместно с другими арифметическими операциями, результат выражения может быть вычислен с точностью, отличающейся от точности предыдущих версий программы.

Исправлена: "Технологическая платформа", версия 8.3.15.1534

Когда научитесь гуглить?
8 eklmn
 
гуру
12.09.19
15:19
(6) не, при сохранении любого табдока ругается на "Удаленный компонент: Рисованная фигура." без вставленных картинок, обычная печформа или отчет.
9 edem911
 
12.09.19
17:22
(7) первым делом туда полез,но видимо пропустил.
Спасибо
10 Zhuravlik
 
13.09.19
01:17
(0) довольно монстроузная конструкция. Появилось же событие списка ПриПолученииДанныхНаСервере, может его использовать?
11 edem911
 
16.09.19
15:10
Отпишусь про результат: обновились до 8.3.15.1534, пока полет нормальный)
12 dmpl
 
17.09.19
07:29
(7) И давно Гугл научился баглист 1С индексировать?