Имя: Пароль:
1C
1С v8
Самоокругление при присвоении числового значения переменной
,
0 PiotrLoginov
 
19.03.15
12:21
Всем привет.

ВысотаУпаковкиИзТекстовогоПоляВСантиметрах = "4";
Попытка
    ВысотаВМетрахДляПодстановкиВРеквизит = Число(ВысотаУпаковкиИзТекстовогоПоляВСантиметрах ) / 100;
КонецПопытки;


В итоге ВысотаВМетрахДляПодстановкиВРеквизит становится равна нулю. Так и подставляется в реквизит 0, хотя должно быть 0,04. ЧЯДНТ?
1 hhhh
 
19.03.15
12:22
ВысотаВМетрахДляПодстановкиВРеквизит это переменная или реквизит?
2 PiotrLoginov
 
19.03.15
12:26
переменная
3 Михаил Козлов
 
19.03.15
12:27
Попробуйте присвоить 4.0
4 kosts
 
19.03.15
12:30
Проверь, что бы не было реквизита с таким именем.
5 DirecTwiX
 
19.03.15
12:31
(2) Реквизит, может? С точностью 0
6 kosts
 
19.03.15
12:33
(0) А попытка без исключения допустима?
7 PiotrLoginov
 
19.03.15
12:40
Странная ситуация. Код, данный выше - сильно упрощен. На самом деле изначально "4" переменной ВысотаУпаковкиИзТекстовогоПоляВСантиметрах не присваивается. Это значение ячейки в таблице значений. Код такой:

//есть строка СтрокаТЗ, в которой хранятся разные данные. ТЗ заполнялась из файла excel. при создании ТЗ тип ячеек не уточнялся.

Попытка
    Высота = Число(СтрокаТЗ.ВысотаУпаковки) / 100;
    Ширина = Число(СтрокаТЗ.ШиринаУпаковки) / 100;
    Глубина = Число(СтрокаТЗ.ДлинаУпаковки) / 100;
                        РазмерыКонвертированы = Истина;
Исключение
    //здесь сообщение, что что-то пошло не так
КонецПопытки;

В итоге Высота, Ширина и Глубина округлены до одной десятой. Где значение - несколько сотых, там в итоге имеем ноль.
8 PiotrLoginov
 
19.03.15
12:41
(3) если просто присваиваю обрабатываемой переменной перед засовыванием в функцию Число "4" или "4.0", то самоокругления не происходит.
9 silent person
 
19.03.15
12:43
а вот такой код

Высота = 0.04;

что в результате дает ?
10 kosts
 
19.03.15
12:44
Высота и ширина это реквизиты формы.
11 PiotrLoginov
 
19.03.15
12:44
(4) (5)  Реквизиты с такими именами будут позже, когда будет создаваться новая упаковка, и у нее будут реквизиты Высота, Ширина и Глубина ,в которые будут подставляться значения из соответствующих переменных

(9)  если после попытки получения чисел из значений ячеек ТЗ (см. (7)  ) , то дает Ложь
12 silent person
 
19.03.15
12:44
+10 угу с вероятностью 95%, и с одним знаком после запятой
13 PiotrLoginov
 
19.03.15
12:45
(10) у формы, в модуле которой все это происходит, нет реквизитов с такими именами
14 silent person
 
19.03.15
12:46
(11) какая ложь в переменной "Высота" что будет. после кода

Высота = 0.04;
15 kosts
 
19.03.15
12:46
(13) Открой свойства формы и глянь, может затесались.
16 hhhh
 
19.03.15
12:55
(13) посмотрите в Ексель самая верхняя строка, там сколько знаков?
17 PiotrLoginov
 
19.03.15
13:02
Реквизиты упаковки (элемента справочника) имеют тип число с тремя знаками после запятой

(14)  попробовал так:

//СтрокаТЗ.ВысотаУпаковки равно 4
//СтрокаТЗ.ШиринаУпаковки равно 141

Тест = "4";
Тест2 = "4.0";

Попытка
    Т = Число(Тест) / 100;
    Т2 = Число(Тест2) / 100;
    Высота = Число(СтрокаТЗ.ВысотаУпаковки) / 100;
    Ширина = Число(СтрокаТЗ.ШиринаУпаковки) / 100;
    Тест3 = 0.04;
    ВысотаВсм = Число(СтрокаТЗ.ВысотаУпаковки);
    

...

В итоге имею T, равное 0,04;  T2, равное 0,04; Высота, равное 0 ; Ширина, равное 1;  Test3, равное 0,04 ; ВысотаВсм, равное 4.


Таким образом, если в попытке конвертировать текстовое значение, полученное из ячейки ТЗ (не типизирована, текстовое значение взято из ячейки таблицы excel), а затем делить его для получения дробного числа, то результат округлится до целых.
18 PiotrLoginov
 
19.03.15
13:05
приму это как данность и не буду впредь превращать в числа дробные текстовые значения

P.S. "дробные текстовые значения" - это, конечно, звучит сильно

(16)  не понял вопроса.  Содержимое обрабатываемых ячеек уже озвучил
19 PiotrLoginov
 
19.03.15
13:06
платформа 8.3.5.1482
20 kosts
 
19.03.15
13:07
(18) Чего-то накрутил. Программа работает согласно заложенному алгоритму и поступившим данным. Никакой магии там нет. И всему есть объяснение. Проверяй входные данные и программу.
21 hhhh
 
19.03.15
13:12
(18) тебя же просили проверить Ширина = 0.04;
22 kosts
 
19.03.15
13:12
И убери пока попытку. И добавить:

Перем Высота, Ширина;
23 DirecTwiX
 
19.03.15
13:13
ТС перекрытый какой-то))

Ответ в (10)
24 PiotrLoginov
 
19.03.15
13:14
(21) ну я же сделал в попытке Тест3 = 0.04;   и отписался: в итоге Тест3 стало равным 0,04
25 hhhh
 
19.03.15
13:15
(24) тебя просили проверить Ширина, Высота и т.д. Какой нахер Тест3? Кому он может понадобиться?
26 PiotrLoginov
 
19.03.15
13:20
(25) в попытке присваивать или до нее?
27 hhhh
 
19.03.15
13:21
без разницы
28 PiotrLoginov
 
19.03.15
13:21
Блин. Проверил контекст в самом начале создания формы.  В контексте уже есть некое свойство Ширина.
29 PiotrLoginov
 
19.03.15
13:22
наверняка это свойство самой формы.  И оно не дробное.
30 palpetrovich
 
19.03.15
13:22
(20) + 1  ждем сообщения "пацаны я не прав, все работает правильно, трабл был в... " :)
31 silent person
 
19.03.15
13:22
ха-ха-ха
32 PiotrLoginov
 
19.03.15
13:23
Тему можно считать закрытой, думаю.
33 palpetrovich
 
19.03.15
13:23
+(30)  о, уже :)
34 PiotrLoginov
 
19.03.15
13:25
(30) А в чем неправ?  Вопросы был изначально - "у меня в переменной цифра округляется, что я делаю не так?"   Ответ оказался "не надо использовать зарезервированные имена свойств формы".

Если бы кто-то так ответил, а я стал спорить, тогда был бы неправ.
35 DirecTwiX
 
19.03.15
13:29
(34) Ответили же уже давно) (10), не?
36 kosts
 
19.03.15
13:31
Как обычно правильный ответ в первом комментарии. Остальные, что бы убедить ТС.

(34) Мы не могли так ответить, т.к. это телепатия, нам не известно ничего про твою проблему, только-то что сообщил. Ни место ни контекст ни какие входные данные...
37 silent person
 
19.03.15
13:31
(35) неа, формулировка ответа в 10 не соответствует формулировке ответа автора.
38 PiotrLoginov
 
19.03.15
13:35
(35) да, согласен. ответив в (13), что таких реквизитов нет, я не проверил свойства.

И потом, "Высота и ширина это реквизиты формы." - неверное утверждение.