Имя: Пароль:
1C
1С v8
v8: Ненужное округление в запросе
,
0 KoderMaksim
 
11.07.13
10:08
После выполнения запроса на получение данных из регистра сведений, почему то происходит округление реквизита до 2-х знаков, а хранится оно в с разрядностью в 3 знака. Почему происходит округление?
1 Cube
 
11.07.13
10:09
(0) Ты бредишь.
2 Cube
 
11.07.13
10:09
Давай скрин
3 mikecool
 
11.07.13
10:09
потому что пользуешь выразить или форматирование в поле, куда выводишь
4 zak555
 
11.07.13
10:09
код
5 Mitriy
 
11.07.13
10:09
мы все умрем?
6 1Сергей
 
11.07.13
10:10
(5) Обязательно!

(0) Как проверял?
7 Serg_1960
 
11.07.13
10:13
(какой вопрос - такой ответ) Три знака - для пересчета из валюты в валюту, два знака - когда валюта уже определена.
8 Aprobator
 
11.07.13
10:15
в какой момент происходит округление то?
9 Aprobator
 
11.07.13
10:15
ща выяснится, что причина в формате вывода.
10 Jonny_Khomich
 
11.07.13
10:16
(8) я думаю, КодерМаксим вряд ли ответит тебе на этот вопрос.
11 KoderMaksim
 
11.07.13
10:16
Проверял я в отладчике, формат вывода здесь отсутствует.
12 KoderMaksim
 
11.07.13
10:17
Это аномалия 1С!
13 Mitriy
 
11.07.13
10:18
угу... а ты сталкер...
14 KoderMaksim
 
11.07.13
10:19
Вот код
[CODE]
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    др_ГруппыСкидокКонтрагентовСрезПоследних.Скидка,
                  |    др_УстановкаГруппСкидокКонтрагентов.НаценкаНаВес
                  |ИЗ
                  |    РегистрСведений.др_ГруппыСкидокКонтрагентов.СрезПоследних(
                  |            &Период,
                  |            (Контрагент В ИЕРАРХИИ (&Контрагент)
                  |                ИЛИ Контрагент = &Контрагент)
                  |                И ГруппаСкидок = &ГруппаСкидок) КАК др_ГруппыСкидокКонтрагентовСрезПоследних
                  |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.др_УстановкаГруппСкидокКонтрагентов КАК др_УстановкаГруппСкидокКонтрагентов
                  |        ПО др_ГруппыСкидокКонтрагентовСрезПоследних.Регистратор = др_УстановкаГруппСкидокКонтрагентов.Ссылка";
   
   Запрос.УстановитьПараметр("Период",        ДокументОбъект.Дата);
   Запрос.УстановитьПараметр("Контрагент",    ОбщегоНазначения.ПолучитьРеквизитШапки("Контрагент", ДокументОбъект, МетаданныеДокумента).Родитель);
   Запрос.УстановитьПараметр("ГруппаСкидок",    СтрокаТабличнойЧасти.Номенклатура.ЦеноваяГруппа);
   //Запрос.УстановитьПараметр("ТипЦен",            ТипЦен);            

   Результат = Запрос.Выполнить();
       
   Если НЕ Результат.Пустой() Тогда
   
       Выборка = Результат.Выбрать();
       Выборка.Следующий();
       Скидка    = Выборка.Скидка;
       Наценка = Выборка.НаценкаНаВес;
       
   Иначе
       
       Скидка = 0;
   
   КонецЕсли;

[/CODE]

Поле скидка режется до двух знаков.
15 Aprobator
 
11.07.13
10:19
стоп, а как разрядность (общее количество значков числа), связана с разрядностью дробной части?
16 Aprobator
 
11.07.13
10:22
или где там знаки режутся то?
17 KoderMaksim
 
11.07.13
10:23
у меня хранится число например 0.665, а в отладчике я вижу его как 0.67.
18 Mitriy
 
11.07.13
10:23
что такое Скидка и что такое Наценка? Какая у них разрядность установлена?
19 Aprobator
 
11.07.13
10:24
+(18) опередил )
20 Cube
 
11.07.13
10:24
(17) Скрин давай.
21 Aprobator
 
11.07.13
10:25
код - убийственный кстати.
22 Maxus43
 
11.07.13
10:29
Кстати сталкивался с таким, на скуле сервер 1с транслирует запрос уже с CAST, хотя в запросе 1с его нет. Как выбирает - не совсем понятно. Если в запросе юзать Выразить() то всё будет пучком
23 KoderMaksim
 
11.07.13
10:34
24 Cube
 
11.07.13
10:40
(23) А теперь скрин, где округляется...
25 Serg_1960
 
11.07.13
10:41
ТС, в конце кода добавь строку "Скидка = 0.667;" и посмотри результат в отладчике.

(имхо, не в тему) ТС, например, добавляет свои объекты и приписывает им всякие "др_" и "пр_"... понятно что для уникальности... но вот он использует "Скидка" и "Наценка" так, слово 100% уверен в их уникальности.
26 Ненавижу 1С
 
гуру
11.07.13
10:49
др_ГруппыСкидокКонтрагентовСрезПоследних.Скидка //здесь у тебя 3 знака
Скидка     = Выборка.Скидка; //а здесь (слева от присваивания), вот и весь фокус
27 Ненавижу 1С
 
гуру
11.07.13
10:49
+(26)  //а здесь 2 (слева от присваивания), вот и весь фокус
28 KoderMaksim
 
11.07.13
10:50
да это фокус, и как его побороть?
29 Ненавижу 1С
 
гуру
11.07.13
10:51
(28) а как ты думаешь? либо увеличивать разрядность, либо смириться
30 KoderMaksim
 
11.07.13
10:52
а где увеличивать у переменной?
31 Ненавижу 1С
 
гуру
11.07.13
10:54
(30) а это не переменная, это реквизит какого-то объекта
32 Serg_1960
 
11.07.13
10:59
Хмм.. (18) (25) (27) (31) ... у ТС проблемы со слухом или...?

- Доктор, меня всё игнорируют...
- Следующий!
33 Ненавижу 1С
 
гуру
11.07.13
11:02
(32) с глазами вроде
34 hhhh
 
11.07.13
11:03
(30) Скидка - это похоже не переменная
35 KoderMaksim
 
11.07.13
11:04
Похоже всё решилось, щас буду тестировать.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший